aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Novillo <dnovillo@redhat.com>2003-04-09 19:29:57 +0000
committerDiego Novillo <dnovillo@redhat.com>2003-04-09 19:29:57 +0000
commitb52ebedf8eecc0379f401073ece7417d15b97536 (patch)
treee9a619ee14c1364e56f9f37ea65f70cb157d4827
parent2233db991a473be23972dcb59220f7d895fce4d1 (diff)
Mainline merge as of 2003-04-06. Additional fixes for bugs
exposed by the merge: gcc/ChangeLog.tree-ssa: * gimplify.c (simplify_expr): Handle VECTOR_CST nodes. * tree-cfg.c (make_blocks): Ignore empty statement containers. Create a basic block before processing containers that only have empty statements. (make_loop_expr_blocks): Use the container instead of the statement when setting NEXT_BLOCK_LINK. (make_cond_expr_blocks): Likewise. (make_switch_expr_blocks): Likewise. (make_bind_expr_blocks): Likewise. (successor_block): If the last statement of the block is the empty statement, use its container to get NEXT_BLOCK_LINK. (stmt_starts_bb_p): Return false if the statement is NULL. * tree-pretty-print.c (dump_generic_node): Handle VECTOR_CST nodes. * tree-simple.c (is_simple_const): Accept VECTOR_CST as constants. * objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P): Define. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tree-ssa-20020619-branch@65404 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--ChangeLog67
-rw-r--r--MAINTAINERS7
-rw-r--r--Makefile.in3370
-rw-r--r--Makefile.tpl354
-rw-r--r--boehm-gc/ChangeLog39
-rw-r--r--boehm-gc/alloc.c5
-rwxr-xr-xboehm-gc/configure43
-rw-r--r--boehm-gc/configure.in6
-rw-r--r--boehm-gc/dyn_load.c68
-rw-r--r--boehm-gc/include/private/gc_locks.h21
-rw-r--r--boehm-gc/include/private/gc_priv.h13
-rw-r--r--boehm-gc/include/private/gcconfig.h13
-rw-r--r--boehm-gc/mark_rts.c40
-rw-r--r--boehm-gc/misc.c10
-rw-r--r--config/ChangeLog4
-rw-r--r--config/mh-dgux2
-rwxr-xr-xconfigure337
-rw-r--r--configure.in268
-rw-r--r--contrib/ChangeLog13
-rwxr-xr-xcontrib/compare_tests39
-rwxr-xr-xcontrib/gcc_build4
-rwxr-xr-xcontrib/gcc_update4
-rwxr-xr-xcontrib/test_summary21
-rw-r--r--fastjar/ChangeLog8
-rw-r--r--fastjar/dostime.c2
-rw-r--r--fastjar/fastjar.texi2
-rw-r--r--gcc/ChangeLog18309
-rw-r--r--gcc/ChangeLog.tree-ssa19
-rw-r--r--gcc/Makefile.in274
-rw-r--r--gcc/ONEWS98
-rw-r--r--gcc/aclocal.m4189
-rw-r--r--gcc/ada/ChangeLog60
-rw-r--r--gcc/ada/Make-lang.in13
-rw-r--r--gcc/ada/Makefile.in43
-rw-r--r--gcc/ada/a-except.adb2
-rw-r--r--gcc/ada/config-lang.in8
-rw-r--r--gcc/ada/gnat_ug_unx.texi2
-rw-r--r--gcc/ada/gnat_ug_vms.texi2
-rw-r--r--gcc/ada/gnat_ug_vxw.texi2
-rw-r--r--gcc/ada/gnat_ug_wnt.texi2
-rw-r--r--gcc/ada/link.c2
-rw-r--r--gcc/ada/misc.c20
-rw-r--r--gcc/ada/raise.c46
-rw-r--r--gcc/ada/utils2.c2
-rw-r--r--gcc/alias.c64
-rw-r--r--gcc/basic-block.h13
-rw-r--r--gcc/bitmap.c1
-rw-r--r--gcc/builtins.c134
-rw-r--r--gcc/builtins.def3
-rw-r--r--gcc/c-common.c524
-rw-r--r--gcc/c-common.h44
-rw-r--r--gcc/c-decl.c158
-rw-r--r--gcc/c-dump.c4
-rw-r--r--gcc/c-incpath.c189
-rw-r--r--gcc/c-incpath.h1
-rw-r--r--gcc/c-lex.c49
-rw-r--r--gcc/c-objc-common.c12
-rw-r--r--gcc/c-opts.c304
-rw-r--r--gcc/c-pch.c61
-rw-r--r--gcc/c-tree.h8
-rw-r--r--gcc/c-typeck.c65
-rw-r--r--gcc/calls.c50
-rw-r--r--gcc/cfg.c43
-rw-r--r--gcc/cfgbuild.c12
-rw-r--r--gcc/cfgcleanup.c200
-rw-r--r--gcc/cfglayout.c46
-rw-r--r--gcc/cfgloop.c98
-rw-r--r--gcc/cfgloop.h3
-rw-r--r--gcc/cfgloopanal.c61
-rw-r--r--gcc/cfgloopmanip.c261
-rw-r--r--gcc/cfgrtl.c76
-rw-r--r--gcc/cgraph.c107
-rw-r--r--gcc/cgraph.h44
-rw-r--r--gcc/cgraphunit.c142
-rw-r--r--gcc/collect2.c2
-rw-r--r--gcc/combine.c173
-rw-r--r--gcc/config.gcc126
-rw-r--r--gcc/config.in20
-rw-r--r--gcc/config/alpha/alpha-protos.h4
-rw-r--r--gcc/config/alpha/alpha.c87
-rw-r--r--gcc/config/alpha/alpha.h75
-rw-r--r--gcc/config/alpha/alpha.md46
-rw-r--r--gcc/config/alpha/elf.h3
-rw-r--r--gcc/config/alpha/freebsd.h6
-rw-r--r--gcc/config/alpha/netbsd.h3
-rw-r--r--gcc/config/alpha/osf.h2
-rw-r--r--gcc/config/arm/arm-protos.h16
-rw-r--r--gcc/config/arm/arm.c153
-rw-r--r--gcc/config/arm/arm.h68
-rw-r--r--gcc/config/arm/arm.md924
-rw-r--r--gcc/config/arm/cirrus.md175
-rw-r--r--gcc/config/arm/linux-elf.h4
-rw-r--r--gcc/config/arm/pe.h25
-rw-r--r--gcc/config/arm/unknown-elf.h5
-rw-r--r--gcc/config/c4x/c4x-c.c8
-rw-r--r--gcc/config/c4x/c4x-modes.def8
-rw-r--r--gcc/config/c4x/c4x-protos.h8
-rw-r--r--gcc/config/c4x/c4x.c10
-rw-r--r--gcc/config/c4x/c4x.h8
-rw-r--r--gcc/config/c4x/c4x.md10
-rw-r--r--gcc/config/c4x/libgcc.S4
-rw-r--r--gcc/config/c4x/rtems.h8
-rw-r--r--gcc/config/c4x/t-c4x2
-rw-r--r--gcc/config/cris/aout.h26
-rw-r--r--gcc/config/cris/cris.c16
-rw-r--r--gcc/config/cris/cris.h56
-rw-r--r--gcc/config/cris/cris.md99
-rw-r--r--gcc/config/cris/cris_abi_symbol.c5
-rw-r--r--gcc/config/cris/linux.h29
-rw-r--r--gcc/config/darwin.c97
-rw-r--r--gcc/config/darwin.h9
-rw-r--r--gcc/config/dsp16xx/dsp16xx-protos.h8
-rw-r--r--gcc/config/dsp16xx/dsp16xx.c8
-rw-r--r--gcc/config/dsp16xx/dsp16xx.h8
-rw-r--r--gcc/config/dsp16xx/dsp16xx.md10
-rw-r--r--gcc/config/fp-bit.c8
-rw-r--r--gcc/config/fp-bit.h2
-rw-r--r--gcc/config/freebsd-spec.h49
-rw-r--r--gcc/config/freebsd.h5
-rw-r--r--gcc/config/frv/frv.h17
-rw-r--r--gcc/config/h8300/h8300-protos.h4
-rw-r--r--gcc/config/h8300/h8300.c343
-rw-r--r--gcc/config/h8300/h8300.h4
-rw-r--r--gcc/config/h8300/h8300.md892
-rw-r--r--gcc/config/i386/crtdll.h17
-rw-r--r--gcc/config/i386/cygwin.h552
-rw-r--r--gcc/config/i386/darwin.h5
-rw-r--r--gcc/config/i386/i386-protos.h3
-rw-r--r--gcc/config/i386/i386.c256
-rw-r--r--gcc/config/i386/i386.h25
-rw-r--r--gcc/config/i386/i386.md162
-rw-r--r--gcc/config/i386/mingw32.h42
-rw-r--r--gcc/config/i386/netbsd64.h2
-rw-r--r--gcc/config/i386/t-cygwin29
-rw-r--r--gcc/config/i386/winnt.c71
-rw-r--r--gcc/config/i960/i960.h3
-rw-r--r--gcc/config/ia64/crtbegin.asm260
-rw-r--r--gcc/config/ia64/crtend.asm97
-rw-r--r--gcc/config/ia64/crti.asm20
-rw-r--r--gcc/config/ia64/crtn.asm14
-rw-r--r--gcc/config/ia64/fde-glibc.c8
-rw-r--r--gcc/config/ia64/freebsd.h8
-rw-r--r--gcc/config/ia64/hpux.h8
-rw-r--r--gcc/config/ia64/hpux_longdouble.h8
-rw-r--r--gcc/config/ia64/ia64-c.c9
-rw-r--r--gcc/config/ia64/ia64-modes.def8
-rw-r--r--gcc/config/ia64/ia64-protos.h12
-rw-r--r--gcc/config/ia64/ia64.c376
-rw-r--r--gcc/config/ia64/ia64.h95
-rw-r--r--gcc/config/ia64/ia64.md207
-rw-r--r--gcc/config/ia64/itanium1.md8
-rw-r--r--gcc/config/ia64/itanium2.md8
-rw-r--r--gcc/config/ia64/quadlib.c8
-rw-r--r--gcc/config/ia64/unwind-ia64.c8
-rw-r--r--gcc/config/ia64/unwind-ia64.h8
-rw-r--r--gcc/config/ip2k/ip2k.h29
-rw-r--r--gcc/config/m32r/m32r.h10
-rw-r--r--gcc/config/m68hc11/larith.asm258
-rw-r--r--gcc/config/m68hc11/m68hc11-protos.h9
-rw-r--r--gcc/config/m68hc11/m68hc11.c252
-rw-r--r--gcc/config/m68hc11/m68hc11.h31
-rw-r--r--gcc/config/m68hc11/m68hc11.md282
-rw-r--r--gcc/config/m68hc11/t-m68hc11-gas8
-rw-r--r--gcc/config/m68k/m68k.c4
-rw-r--r--gcc/config/m68k/m68k.md4
-rw-r--r--gcc/config/mcore/mcore-elf.h7
-rw-r--r--gcc/config/mcore/mcore-pe.h7
-rw-r--r--gcc/config/mcore/mcore.h77
-rw-r--r--gcc/config/mips/elf.h4
-rw-r--r--gcc/config/mips/iris3.h10
-rw-r--r--gcc/config/mips/iris6.h9
-rw-r--r--gcc/config/mips/linux.h4
-rw-r--r--gcc/config/mips/linux64.h16
-rw-r--r--gcc/config/mips/mips.c7
-rw-r--r--gcc/config/mips/mips.h16
-rw-r--r--gcc/config/mips/t-iris61
-rw-r--r--gcc/config/mips/t-linux641
-rw-r--r--gcc/config/mips/t-mips2
-rw-r--r--gcc/config/mmix/mmix.md51
-rw-r--r--gcc/config/mn10200/mn10200.h8
-rw-r--r--gcc/config/mn10300/mn10300.h8
-rw-r--r--gcc/config/netbsd.h8
-rw-r--r--gcc/config/pa/pa-hpux.h9
-rw-r--r--gcc/config/pa/pa-protos.h1
-rw-r--r--gcc/config/pa/pa.c393
-rw-r--r--gcc/config/pa/pa.h37
-rw-r--r--gcc/config/pa/pa.md198
-rw-r--r--gcc/config/pdp11/pdp11.h7
-rw-r--r--gcc/config/rs6000/40x.md4
-rw-r--r--gcc/config/rs6000/603.md2
-rw-r--r--gcc/config/rs6000/6xx.md8
-rw-r--r--gcc/config/rs6000/7450.md2
-rw-r--r--gcc/config/rs6000/7xx.md2
-rw-r--r--gcc/config/rs6000/altivec.md223
-rw-r--r--gcc/config/rs6000/darwin.h46
-rw-r--r--gcc/config/rs6000/linux64.h76
-rw-r--r--gcc/config/rs6000/mpc.md2
-rw-r--r--gcc/config/rs6000/power4.md194
-rw-r--r--gcc/config/rs6000/rios1.md4
-rw-r--r--gcc/config/rs6000/rios2.md2
-rw-r--r--gcc/config/rs6000/rs6000-protos.h2
-rw-r--r--gcc/config/rs6000/rs6000.c692
-rw-r--r--gcc/config/rs6000/rs6000.h75
-rw-r--r--gcc/config/rs6000/rs6000.md94
-rw-r--r--gcc/config/rs6000/rs64.md4
-rw-r--r--gcc/config/rs6000/spe.h17
-rw-r--r--gcc/config/rs6000/spe.md119
-rw-r--r--gcc/config/rs6000/sysv4.h11
-rw-r--r--gcc/config/rs6000/vxworks.h13
-rw-r--r--gcc/config/s390/s390-protos.h1
-rw-r--r--gcc/config/s390/s390.c108
-rw-r--r--gcc/config/s390/s390.h22
-rw-r--r--gcc/config/s390/s390.md136
-rw-r--r--gcc/config/sh/elf.h5
-rw-r--r--gcc/config/sh/netbsd-elf.h4
-rw-r--r--gcc/config/sh/rtems.h7
-rw-r--r--gcc/config/sh/rtemself.h8
-rw-r--r--gcc/config/sh/sh.c241
-rw-r--r--gcc/config/sh/sh.h52
-rw-r--r--gcc/config/sh/sh.md26
-rw-r--r--gcc/config/sparc/freebsd.h2
-rw-r--r--gcc/config/sparc/netbsd-elf.h3
-rw-r--r--gcc/config/sparc/sol2-gas-bi.h4
-rw-r--r--gcc/config/sparc/sparc.c4
-rw-r--r--gcc/config/sparc/sparc.h43
-rw-r--r--gcc/config/sparc/sparc.md42
-rw-r--r--gcc/config/stormy16/stormy16.c96
-rw-r--r--gcc/config/stormy16/stormy16.h5
-rw-r--r--gcc/config/stormy16/stormy16.md22
-rw-r--r--gcc/config/v850/lib1funcs.asm4
-rw-r--r--gcc/config/v850/rtems.h16
-rw-r--r--gcc/config/v850/v850-c.c8
-rw-r--r--gcc/config/v850/v850-protos.h8
-rw-r--r--gcc/config/v850/v850.c68
-rw-r--r--gcc/config/v850/v850.h15
-rw-r--r--gcc/config/v850/v850.md10
-rw-r--r--gcc/config/vax/bsd.h8
-rw-r--r--gcc/config/vax/elf.h8
-rw-r--r--gcc/config/vax/netbsd-elf.h8
-rw-r--r--gcc/config/vax/netbsd.h8
-rw-r--r--gcc/config/vax/openbsd.h8
-rw-r--r--gcc/config/vax/openbsd1.h8
-rw-r--r--gcc/config/vax/ultrix.h8
-rw-r--r--gcc/config/vax/vax-protos.h8
-rw-r--r--gcc/config/vax/vax.c8
-rw-r--r--gcc/config/vax/vax.h8
-rw-r--r--gcc/config/vax/vax.md8
-rw-r--r--gcc/config/vax/vaxv.h8
-rw-r--r--gcc/config/xtensa/xtensa.md17
-rwxr-xr-xgcc/configure2617
-rw-r--r--gcc/configure.in747
-rw-r--r--gcc/cp/ChangeLog903
-rw-r--r--gcc/cp/Make-lang.in50
-rw-r--r--gcc/cp/call.c1100
-rw-r--r--gcc/cp/class.c104
-rw-r--r--gcc/cp/config-lang.in4
-rw-r--r--gcc/cp/cp-lang.c10
-rw-r--r--gcc/cp/cp-tree.def17
-rw-r--r--gcc/cp/cp-tree.h158
-rw-r--r--gcc/cp/cvt.c110
-rw-r--r--gcc/cp/decl.c631
-rw-r--r--gcc/cp/decl2.c314
-rw-r--r--gcc/cp/dump.c14
-rw-r--r--gcc/cp/error.c359
-rw-r--r--gcc/cp/except.c118
-rw-r--r--gcc/cp/expr.c11
-rw-r--r--gcc/cp/friend.c4
-rw-r--r--gcc/cp/g++.11
-rw-r--r--gcc/cp/g++spec.c2
-rw-r--r--gcc/cp/init.c118
-rw-r--r--gcc/cp/lang-specs.h20
-rw-r--r--gcc/cp/lex.c14
-rw-r--r--gcc/cp/mangle.c3
-rw-r--r--gcc/cp/method.c2
-rw-r--r--gcc/cp/operators.def6
-rw-r--r--gcc/cp/optimize.c1
-rw-r--r--gcc/cp/parser.c55
-rw-r--r--gcc/cp/pt.c346
-rw-r--r--gcc/cp/ptree.c25
-rw-r--r--gcc/cp/rtti.c30
-rw-r--r--gcc/cp/search.c54
-rw-r--r--gcc/cp/semantics.c9
-rw-r--r--gcc/cp/tree.c14
-rw-r--r--gcc/cp/typeck.c108
-rw-r--r--gcc/cp/typeck2.c26
-rw-r--r--gcc/cppexp.c3
-rw-r--r--gcc/cppfiles.c205
-rw-r--r--gcc/cpphash.h24
-rw-r--r--gcc/cppinit.c414
-rw-r--r--gcc/cpplex.c55
-rw-r--r--gcc/cpplib.c11
-rw-r--r--gcc/cpplib.h85
-rw-r--r--gcc/cppmacro.c6
-rw-r--r--gcc/cppmain.c434
-rw-r--r--gcc/cpppch.c164
-rw-r--r--gcc/cppspec.c32
-rw-r--r--gcc/cse.c25
-rw-r--r--gcc/cselib.c152
-rw-r--r--gcc/cselib.h2
-rw-r--r--gcc/dbxout.c92
-rw-r--r--gcc/debug.c3
-rw-r--r--gcc/debug.h4
-rw-r--r--gcc/defaults.h5
-rw-r--r--gcc/df.c68
-rw-r--r--gcc/df.h17
-rw-r--r--gcc/doc/c-tree.texi4
-rw-r--r--gcc/doc/contrib.texi59
-rw-r--r--gcc/doc/cpp.texi6
-rw-r--r--gcc/doc/cppopts.texi7
-rw-r--r--gcc/doc/extend.texi28
-rw-r--r--gcc/doc/gccint.texi2
-rw-r--r--gcc/doc/gcov.texi95
-rw-r--r--gcc/doc/install.texi55
-rw-r--r--gcc/doc/interface.texi17
-rw-r--r--gcc/doc/invoke.texi117
-rw-r--r--gcc/doc/passes.texi15
-rw-r--r--gcc/doc/sourcebuild.texi5
-rw-r--r--gcc/doc/tm.texi34
-rw-r--r--gcc/dummy-conditions.c8
-rw-r--r--gcc/dwarf2asm.h28
-rw-r--r--gcc/dwarf2out.c185
-rw-r--r--gcc/dwarfout.c3
-rw-r--r--gcc/emit-rtl.c287
-rw-r--r--gcc/except.c164
-rw-r--r--gcc/except.h9
-rw-r--r--gcc/explow.c2
-rw-r--r--gcc/expr.c1141
-rw-r--r--gcc/expr.h10
-rw-r--r--gcc/f/ChangeLog70
-rw-r--r--gcc/f/Make-lang.in5
-rw-r--r--gcc/f/com.c108
-rw-r--r--gcc/f/com.h2
-rw-r--r--gcc/f/ffe.texi5
-rw-r--r--gcc/f/g77.texi6
-rw-r--r--gcc/f/g77spec.c33
-rw-r--r--gcc/f/invoke.texi4
-rw-r--r--gcc/f/lang-specs.h4
-rw-r--r--gcc/f/news.texi4
-rw-r--r--gcc/f/stb.c2
-rw-r--r--gcc/f/stc.c12
-rw-r--r--gcc/f/std.c24
-rw-r--r--gcc/f/ste.c13
-rw-r--r--gcc/f/target.h3
-rw-r--r--gcc/fix-header.c50
-rw-r--r--gcc/fixinc/check.tpl2
-rwxr-xr-xgcc/fixinc/fixinc.dgux224
-rw-r--r--gcc/fixinc/fixinc.interix162
-rw-r--r--gcc/fixinc/fixincl.c14
-rw-r--r--gcc/fixinc/fixincl.x217
-rw-r--r--gcc/fixinc/inclhack.def42
-rw-r--r--gcc/fixinc/tests/base/pthread.h20
-rw-r--r--gcc/fixinc/tests/base/stdio.h7
-rwxr-xr-xgcc/fixproto58
-rw-r--r--gcc/flags.h8
-rw-r--r--gcc/fold-const.c295
-rw-r--r--gcc/function.c158
-rw-r--r--gcc/function.h2
-rw-r--r--gcc/gcc.c134
-rw-r--r--gcc/gcc.h22
-rw-r--r--gcc/gcov-io.h332
-rw-r--r--gcc/gcov.c597
-rw-r--r--gcc/gcse.c751
-rw-r--r--gcc/genattrtab.h8
-rw-r--r--gcc/genautomata.c8
-rw-r--r--gcc/genconditions.c8
-rw-r--r--gcc/genextract.c2
-rw-r--r--gcc/gengtype-lex.l2
-rw-r--r--gcc/gengtype.c68
-rw-r--r--gcc/ggc-common.c20
-rw-r--r--gcc/ggc-page.c327
-rw-r--r--gcc/ggc.h1
-rw-r--r--gcc/gimplify.c1
-rw-r--r--gcc/ginclude/float.h8
-rw-r--r--gcc/ginclude/iso646.h8
-rw-r--r--gcc/ginclude/stdarg.h8
-rw-r--r--gcc/ginclude/stdbool.h8
-rw-r--r--gcc/ginclude/stddef.h8
-rw-r--r--gcc/haifa-sched.c4
-rw-r--r--gcc/hooks.c7
-rw-r--r--gcc/hooks.h1
-rw-r--r--gcc/hosthooks-def.h8
-rw-r--r--gcc/hosthooks.h8
-rw-r--r--gcc/ifcvt.c8
-rw-r--r--gcc/integrate.c8
-rw-r--r--gcc/intl/ChangeLog5
-rw-r--r--gcc/intl/Makefile.in7
-rw-r--r--gcc/java/ChangeLog959
-rw-r--r--gcc/java/Make-lang.in10
-rw-r--r--gcc/java/expr.c9
-rw-r--r--gcc/java/gcj.texi2
-rw-r--r--gcc/java/gjavah.c100
-rw-r--r--gcc/java/javaop.h68
-rw-r--r--gcc/java/jcf-dump.c85
-rw-r--r--gcc/java/jcf-io.c10
-rw-r--r--gcc/java/jcf-path.c11
-rw-r--r--gcc/java/jcf-write.c38
-rw-r--r--gcc/java/jcf.h9
-rw-r--r--gcc/java/lang.c160
-rw-r--r--gcc/java/lex.c21
-rw-r--r--gcc/java/parse.y29
-rw-r--r--gcc/jump.c19
-rw-r--r--gcc/langhooks-def.h15
-rw-r--r--gcc/langhooks.c23
-rw-r--r--gcc/langhooks.h35
-rw-r--r--gcc/lcm.c2
-rw-r--r--gcc/libgcc-std.ver1
-rw-r--r--gcc/libgcov.c135
-rw-r--r--gcc/line-map.c8
-rw-r--r--gcc/longlong.h5
-rw-r--r--gcc/loop-unroll.c126
-rw-r--r--gcc/loop-unswitch.c26
-rw-r--r--gcc/loop.c139
-rw-r--r--gcc/mips-tfile.c123
-rw-r--r--gcc/objc/Make-lang.in6
-rw-r--r--gcc/objc/config-lang.in2
-rw-r--r--gcc/objc/lang-specs.h24
-rw-r--r--gcc/objc/objc-act.c34
-rw-r--r--gcc/objc/objc-act.h2
-rw-r--r--gcc/objc/objc-lang.c3
-rw-r--r--gcc/optabs.c72
-rw-r--r--gcc/params.def40
-rw-r--r--gcc/params.h4
-rw-r--r--gcc/po/ChangeLog6
-rw-r--r--gcc/po/gcc.pot8217
-rw-r--r--gcc/print-tree.c4
-rw-r--r--gcc/profile.c7
-rw-r--r--gcc/ra-build.c19
-rw-r--r--gcc/ra-colorize.c12
-rw-r--r--gcc/ra-debug.c5
-rw-r--r--gcc/ra.c20
-rw-r--r--gcc/ra.h7
-rw-r--r--gcc/real.c281
-rw-r--r--gcc/real.h15
-rw-r--r--gcc/reg-stack.c2
-rw-r--r--gcc/reload.c64
-rw-r--r--gcc/reload.h6
-rw-r--r--gcc/reload1.c27
-rw-r--r--gcc/rtl.h15
-rw-r--r--gcc/rtlanal.c173
-rw-r--r--gcc/sbitmap.c2
-rw-r--r--gcc/sched-deps.c14
-rw-r--r--gcc/sdbout.c3
-rw-r--r--gcc/simplify-rtx.c55
-rw-r--r--gcc/ssa-ccp.c7
-rw-r--r--gcc/stmt.c36
-rw-r--r--gcc/stor-layout.c208
-rw-r--r--gcc/stringpool.c41
-rw-r--r--gcc/system.h11
-rw-r--r--gcc/target-def.h3
-rw-r--r--gcc/target.h8
-rw-r--r--gcc/testsuite/ChangeLog1695
-rw-r--r--gcc/testsuite/g++.dg/ext/vlm1.C2
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov-1.C2
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov-1.x2
-rw-r--r--gcc/testsuite/g++.dg/warn/Wunused-2.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.benjamin/16077.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.ext/overload1.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/eh33.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/eh50.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/err1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/decl5.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/new2.C21
-rw-r--r--gcc/testsuite/g++.old-deja/g++.warn/impint2.C2
-rw-r--r--gcc/testsuite/g77.dg/gcov/gcov-1.f10
-rw-r--r--gcc/testsuite/g77.dg/gcov/gcov-1.x3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20010327-1.c13
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20010518-2.x8
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/980506-1.x3
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/simd-5.x12
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20020227-1.x2
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20020720-1.x3
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wshadow-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/Wswitch-default.c4
-rw-r--r--gcc/testsuite/gcc.dg/Wswitch-enum.c6
-rw-r--r--gcc/testsuite/gcc.dg/Wswitch.c6
-rw-r--r--gcc/testsuite/gcc.dg/builtins-3.c22
-rw-r--r--gcc/testsuite/gcc.dg/cpp/Wunused.c5
-rw-r--r--gcc/testsuite/gcc.dg/dll-1.c8
-rw-r--r--gcc/testsuite/gcc.dg/dll-2.c3
-rw-r--r--gcc/testsuite/gcc.dg/dll-3.c8
-rw-r--r--gcc/testsuite/gcc.dg/dll-4.c5
-rw-r--r--gcc/testsuite/gcc.dg/funcorder.c2
-rw-r--r--gcc/testsuite/gcc.dg/inline-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/inline-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/old-style-asm-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/pch/pch.exp7
-rw-r--r--gcc/testsuite/gcc.dg/special/ecos.exp4
-rw-r--r--gcc/testsuite/gcc.misc-tests/bprob.exp3
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-4b.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-4b.x2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-5b.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-5b.x2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-6.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-6.x3
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-7.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-7.x3
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-8.c2
-rw-r--r--gcc/testsuite/gcc.misc-tests/gcov-8.x2
-rw-r--r--gcc/testsuite/lib/gcov.exp49
-rw-r--r--gcc/testsuite/lib/scanasm.exp20
-rw-r--r--gcc/testsuite/objc.dg/naming-1.m2
-rw-r--r--gcc/testsuite/objc.dg/naming-2.m2
-rw-r--r--gcc/toplev.c163
-rw-r--r--gcc/toplev.h1
-rw-r--r--gcc/tracer.c2
-rw-r--r--gcc/tree-cfg.c68
-rw-r--r--gcc/tree-inline.c58
-rw-r--r--gcc/tree-inline.h10
-rw-r--r--gcc/tree-pretty-print.c16
-rw-r--r--gcc/tree-simple.c3
-rw-r--r--gcc/tree.c26
-rw-r--r--gcc/tree.h18
-rw-r--r--gcc/treelang/ChangeLog51
-rw-r--r--gcc/treelang/ChangeLog.tree-ssa6
-rw-r--r--gcc/treelang/Make-lang.in22
-rw-r--r--gcc/treelang/tree1.c24
-rw-r--r--gcc/treelang/treelang.h2
-rw-r--r--gcc/treelang/treetree.c318
-rw-r--r--gcc/treelang/treetree.h18
-rw-r--r--gcc/tsystem.h8
-rw-r--r--gcc/unroll.c54
-rw-r--r--gcc/unwind-dw2-fde-darwin.c28
-rw-r--r--gcc/unwind-dw2-fde-glibc.c8
-rw-r--r--gcc/unwind-dw2.c75
-rw-r--r--gcc/unwind-libunwind.c35
-rw-r--r--gcc/unwind-sjlj.c9
-rw-r--r--gcc/unwind.h10
-rw-r--r--gcc/varasm.c35
-rw-r--r--gcc/version.c4
-rw-r--r--gcc/vmsdbgout.c7
-rw-r--r--include/ChangeLog12
-rw-r--r--include/ansidecl.h30
-rw-r--r--include/hashtab.h1
-rw-r--r--libf2c/ChangeLog12
-rw-r--r--libf2c/aclocal.m46
-rwxr-xr-xlibf2c/configure119
-rw-r--r--libf2c/libI77/open.c5
-rw-r--r--libffi/ChangeLog22
-rwxr-xr-xlibffi/configure6
-rw-r--r--libffi/configure.in6
-rw-r--r--libffi/include/Makefile.in8
-rw-r--r--libffi/include/ffi.h.in7
-rw-r--r--libffi/src/powerpc/darwin_closure.S249
-rw-r--r--libffi/src/x86/ffi.c45
-rw-r--r--libiberty/ChangeLog29
-rw-r--r--libiberty/Makefile.in13
-rw-r--r--libiberty/cplus-dem.c58
-rw-r--r--libiberty/hashtab.c36
-rw-r--r--libjava/ChangeLog1359
-rw-r--r--libjava/Makefile.am37
-rw-r--r--libjava/Makefile.in105
-rwxr-xr-xlibjava/configure823
-rw-r--r--libjava/configure.in22
-rw-r--r--libjava/gnu/gcj/runtime/NameFinder.java20
-rw-r--r--libjava/gnu/gcj/runtime/natNameFinder.cc33
-rw-r--r--libjava/gnu/java/nio/ByteBufferImpl.java4
-rw-r--r--libjava/gnu/java/nio/CharBufferImpl.java10
-rw-r--r--libjava/gnu/java/nio/FileChannelImpl.java127
-rw-r--r--libjava/gnu/java/nio/MappedByteFileBuffer.java141
-rw-r--r--libjava/gnu/java/nio/natFileChannelImpl.cc32
-rw-r--r--libjava/gnu/java/nio/natMappedByteFileBuffer.cc36
-rw-r--r--libjava/include/config.h.in6
-rw-r--r--libjava/include/jvm.h5
-rw-r--r--libjava/include/posix.h16
-rw-r--r--libjava/include/win32.h16
-rw-r--r--libjava/java/awt/Component.java88
-rw-r--r--libjava/java/awt/Container.java21
-rw-r--r--libjava/java/awt/ContainerOrderFocusTraversalPolicy.java109
-rw-r--r--libjava/java/awt/Dialog.java63
-rw-r--r--libjava/java/awt/EventQueue.java127
-rw-r--r--libjava/java/awt/FocusTraversalPolicy.java39
-rw-r--r--libjava/java/awt/Frame.java4
-rw-r--r--libjava/java/awt/List.java4
-rw-r--r--libjava/java/awt/MenuComponent.java2
-rw-r--r--libjava/java/awt/Robot.java32
-rw-r--r--libjava/java/awt/ScrollPane.java80
-rw-r--r--libjava/java/awt/ScrollPaneAdjustable.java119
-rw-r--r--libjava/java/awt/Toolkit.java72
-rw-r--r--libjava/java/awt/Window.java103
-rw-r--r--libjava/java/awt/datatransfer/DataFlavor.java653
-rw-r--r--libjava/java/awt/dnd/DragSource.java67
-rw-r--r--libjava/java/awt/dnd/DragSourceContext.java81
-rw-r--r--libjava/java/awt/dnd/DropTarget.java68
-rw-r--r--libjava/java/awt/dnd/DropTargetContext.java40
-rw-r--r--libjava/java/awt/dnd/MouseDragGestureRecognizer.java20
-rw-r--r--libjava/java/awt/event/KeyEvent.java4
-rw-r--r--libjava/java/awt/font/TextAttribute.java2
-rw-r--r--libjava/java/awt/font/TextHitInfo.java45
-rw-r--r--libjava/java/awt/image/BufferedImage.java35
-rw-r--r--libjava/java/beans/Beans.java8
-rw-r--r--libjava/java/beans/FeatureDescriptor.java10
-rw-r--r--libjava/java/beans/PropertyEditorManager.java35
-rw-r--r--libjava/java/beans/beancontext/BeanContextChild.java3
-rw-r--r--libjava/java/beans/beancontext/BeanContextChildSupport.java79
-rw-r--r--libjava/java/beans/beancontext/BeanContextEvent.java104
-rw-r--r--libjava/java/beans/beancontext/BeanContextServices.java322
-rw-r--r--libjava/java/io/BufferedOutputStream.java308
-rw-r--r--libjava/java/io/BufferedReader.java215
-rw-r--r--libjava/java/io/BufferedWriter.java2
-rw-r--r--libjava/java/io/ByteArrayOutputStream.java4
-rw-r--r--libjava/java/io/CharArrayWriter.java2
-rw-r--r--libjava/java/io/DataInput.java822
-rw-r--r--libjava/java/io/DataInputStream.java9
-rw-r--r--libjava/java/io/DataOutput.java317
-rw-r--r--libjava/java/io/DataOutputStream.java238
-rw-r--r--libjava/java/io/Externalizable.java123
-rw-r--r--libjava/java/io/File.java749
-rw-r--r--libjava/java/io/FileDescriptor.java2
-rw-r--r--libjava/java/io/FileFilter.java40
-rw-r--r--libjava/java/io/FileInputStream.java240
-rw-r--r--libjava/java/io/FileOutputStream.java231
-rw-r--r--libjava/java/io/FilePermission.java232
-rw-r--r--libjava/java/io/FileReader.java7
-rw-r--r--libjava/java/io/FileWriter.java165
-rw-r--r--libjava/java/io/FilenameFilter.java44
-rw-r--r--libjava/java/io/FilterInputStream.java307
-rw-r--r--libjava/java/io/FilterOutputStream.java214
-rw-r--r--libjava/java/io/FilterReader.java278
-rw-r--r--libjava/java/io/FilterWriter.java208
-rw-r--r--libjava/java/io/InputStreamReader.java79
-rw-r--r--libjava/java/io/LineNumberInputStream.java4
-rw-r--r--libjava/java/io/LineNumberReader.java183
-rw-r--r--libjava/java/io/ObjectInput.java193
-rw-r--r--libjava/java/io/ObjectInputStream.java368
-rw-r--r--libjava/java/io/ObjectInputValidation.java19
-rw-r--r--libjava/java/io/ObjectOutput.java135
-rw-r--r--libjava/java/io/ObjectOutputStream.java450
-rw-r--r--libjava/java/io/ObjectStreamClass.java38
-rw-r--r--libjava/java/io/ObjectStreamField.java19
-rw-r--r--libjava/java/io/OutputStreamWriter.java92
-rw-r--r--libjava/java/io/PipedInputStream.java30
-rw-r--r--libjava/java/io/PipedReader.java22
-rw-r--r--libjava/java/io/PrintStream.java340
-rw-r--r--libjava/java/io/PrintWriter.java14
-rw-r--r--libjava/java/io/PushbackReader.java23
-rw-r--r--libjava/java/io/RandomAccessFile.java880
-rw-r--r--libjava/java/io/Reader.java5
-rw-r--r--libjava/java/io/SerializablePermission.java101
-rw-r--r--libjava/java/io/StreamTokenizer.java2
-rw-r--r--libjava/java/io/StringReader.java9
-rw-r--r--libjava/java/io/Writer.java313
-rw-r--r--libjava/java/io/natFileDescriptorPosix.cc4
-rw-r--r--libjava/java/lang/Package.java197
-rw-r--r--libjava/java/lang/Process.java4
-rw-r--r--libjava/java/lang/String.java1180
-rw-r--r--libjava/java/lang/StringBuffer.java1177
-rw-r--r--libjava/java/lang/natClass.cc12
-rw-r--r--libjava/java/lang/natObject.cc6
-rw-r--r--libjava/java/lang/natRuntime.cc51
-rw-r--r--libjava/java/lang/natString.cc36
-rw-r--r--libjava/java/lang/natStringBuffer.cc14
-rw-r--r--libjava/java/lang/reflect/Proxy.java2
-rw-r--r--libjava/java/net/DatagramSocket.java45
-rw-r--r--libjava/java/net/HttpURLConnection.java2
-rw-r--r--libjava/java/net/InetAddress.java44
-rw-r--r--libjava/java/net/JarURLConnection.java42
-rw-r--r--libjava/java/net/MulticastSocket.java30
-rw-r--r--libjava/java/net/NetPermission.java2
-rw-r--r--libjava/java/net/NetworkInterface.java3
-rw-r--r--libjava/java/net/PlainDatagramSocketImpl.java44
-rw-r--r--libjava/java/net/PlainSocketImpl.java44
-rw-r--r--libjava/java/net/Socket.java10
-rw-r--r--libjava/java/net/URL.java10
-rw-r--r--libjava/java/net/URLConnection.java158
-rw-r--r--libjava/java/net/URLDecoder.java2
-rw-r--r--libjava/java/net/URLEncoder.java2
-rw-r--r--libjava/java/net/URLStreamHandler.java9
-rw-r--r--libjava/java/net/natInetAddress.cc357
-rw-r--r--libjava/java/net/natNetworkInterface.cc144
-rw-r--r--libjava/java/net/natPlainDatagramSocketImpl.cc872
-rw-r--r--libjava/java/net/natPlainSocketImpl.cc1019
-rw-r--r--libjava/java/nio/ByteBuffer.java11
-rw-r--r--libjava/java/nio/ByteOrder.java17
-rw-r--r--libjava/java/nio/CharBuffer.java5
-rw-r--r--libjava/java/rmi/RMISecurityManager.java119
-rw-r--r--libjava/java/rmi/activation/Activatable.java2
-rw-r--r--libjava/java/rmi/activation/ActivationGroup.java2
-rw-r--r--libjava/java/rmi/activation/ActivationGroupDesc.java2
-rw-r--r--libjava/java/rmi/activation/ActivationInstantiator.java8
-rw-r--r--libjava/java/rmi/activation/Activator.java8
-rw-r--r--libjava/java/rmi/dgc/VMID.java166
-rw-r--r--libjava/java/rmi/registry/Registry.java23
-rw-r--r--libjava/java/rmi/registry/RegistryHandler.java23
-rw-r--r--libjava/java/rmi/server/LoaderHandler.java28
-rw-r--r--libjava/java/rmi/server/LogStream.java160
-rw-r--r--libjava/java/rmi/server/Operation.java40
-rw-r--r--libjava/java/rmi/server/RMIFailureHandler.java10
-rw-r--r--libjava/java/rmi/server/RMISocketFactory.java98
-rw-r--r--libjava/java/rmi/server/RemoteCall.java46
-rw-r--r--libjava/java/rmi/server/RemoteRef.java44
-rw-r--r--libjava/java/rmi/server/RemoteStub.java42
-rw-r--r--libjava/java/rmi/server/Skeleton.java21
-rw-r--r--libjava/java/sql/Date.java10
-rw-r--r--libjava/java/sql/Time.java13
-rw-r--r--libjava/java/text/AttributedCharacterIterator.java2
-rw-r--r--libjava/java/text/MessageFormat.java2
-rw-r--r--libjava/java/util/Date.java2
-rw-r--r--libjava/java/util/Properties.java10
-rw-r--r--libjava/java/util/regex/Pattern.java4
-rw-r--r--libjava/java/util/regex/PatternSyntaxException.java1
-rw-r--r--libjava/javax/swing/AbstractAction.java5
-rw-r--r--libjava/javax/swing/AbstractCellEditor.java5
-rw-r--r--libjava/javax/swing/AbstractListModel.java5
-rw-r--r--libjava/javax/swing/Action.java15
-rw-r--r--libjava/javax/swing/ActionMap.java4
-rw-r--r--libjava/javax/swing/BorderFactory.java38
-rw-r--r--libjava/javax/swing/ButtonGroup.java2
-rw-r--r--libjava/javax/swing/DefaultBoundedRangeModel.java5
-rw-r--r--libjava/javax/swing/DefaultButtonModel.java6
-rw-r--r--libjava/javax/swing/DefaultCellEditor.java6
-rw-r--r--libjava/javax/swing/DefaultComboBoxModel.java4
-rw-r--r--libjava/javax/swing/DefaultDesktopManager.java4
-rw-r--r--libjava/javax/swing/DefaultListCellRenderer.java4
-rw-r--r--libjava/javax/swing/DefaultSingleSelectionModel.java4
-rw-r--r--libjava/javax/swing/InputMap.java4
-rw-r--r--libjava/javax/swing/JComponent.java1
-rw-r--r--libjava/javax/swing/JMenu.java6
-rw-r--r--libjava/javax/swing/JSlider.java6
-rw-r--r--libjava/javax/swing/KeyStroke.java4
-rw-r--r--libjava/javax/swing/OverlayLayout.java5
-rw-r--r--libjava/javax/swing/ScrollPaneLayout.java5
-rw-r--r--libjava/javax/swing/SizeRequirements.java4
-rw-r--r--libjava/javax/swing/UIManager.java2
-rw-r--r--libjava/javax/swing/UnsupportedLookAndFeelException.java2
-rw-r--r--libjava/javax/swing/ViewportLayout.java4
-rw-r--r--libjava/javax/swing/WindowConstants.java5
-rw-r--r--libjava/javax/swing/border/AbstractBorder.java2
-rw-r--r--libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java4
-rw-r--r--libjava/javax/swing/event/EventListenerList.java5
-rw-r--r--libjava/javax/swing/plaf/BorderUIResource.java2
-rw-r--r--libjava/javax/swing/plaf/basic/BasicLookAndFeel.java2
-rw-r--r--libjava/javax/swing/table/AbstractTableModel.java4
-rw-r--r--libjava/javax/swing/table/DefaultTableCellRenderer.java40
-rw-r--r--libjava/javax/swing/table/DefaultTableColumnModel.java6
-rw-r--r--libjava/javax/swing/table/DefaultTableModel.java5
-rw-r--r--libjava/javax/swing/table/TableColumn.java4
-rw-r--r--libjava/javax/swing/text/BadLocationException.java24
-rw-r--r--libjava/javax/swing/text/Caret.java50
-rw-r--r--libjava/javax/swing/text/ComponentView.java3
-rw-r--r--libjava/javax/swing/text/DefaultCaret.java5
-rw-r--r--libjava/javax/swing/text/Document.java38
-rw-r--r--libjava/javax/swing/text/StyledEditorKit.java4
-rw-r--r--libjava/javax/swing/tree/DefaultMutableTreeNode.java5
-rw-r--r--libjava/javax/swing/tree/DefaultTreeCellRenderer.java6
-rw-r--r--libjava/javax/swing/tree/DefaultTreeModel.java4
-rw-r--r--libjava/javax/swing/tree/DefaultTreeSelectionModel.java5
-rw-r--r--libjava/javax/swing/tree/TreePath.java4
-rw-r--r--libjava/javax/swing/undo/AbstractUndoableEdit.java340
-rw-r--r--libjava/javax/swing/undo/StateEdit.java239
-rw-r--r--libjava/javax/swing/undo/StateEditable.java33
-rw-r--r--libjava/javax/swing/undo/UndoableEditSupport.java293
-rw-r--r--libjava/posix.cc25
-rw-r--r--libjava/prims.cc32
-rw-r--r--libjava/resolve.cc10
-rw-r--r--libjava/sysdep/ia64/locks.h21
-rw-r--r--libjava/testsuite/ChangeLog36
-rw-r--r--libjava/testsuite/lib/libjava.exp44
-rw-r--r--libjava/testsuite/libjava.jacks/jacks.xfail47
-rw-r--r--libjava/testsuite/libjava.jni/jni.exp76
-rw-r--r--libjava/testsuite/libjava.mauve/xfails7
-rw-r--r--libjava/verify.cc25
-rw-r--r--libjava/win32.cc13
-rw-r--r--libobjc/ChangeLog6
-rw-r--r--libobjc/aclocal.m46
-rwxr-xr-xlibobjc/configure122
-rw-r--r--libstdc++-v3/ChangeLog609
-rw-r--r--libstdc++-v3/Makefile.am1
-rw-r--r--libstdc++-v3/Makefile.in49
-rw-r--r--libstdc++-v3/acconfig.h9
-rw-r--r--libstdc++-v3/acinclude.m493
-rw-r--r--libstdc++-v3/aclocal.m4135
-rw-r--r--libstdc++-v3/config.h.in18
-rw-r--r--libstdc++-v3/config/cpu/mips/atomicity.h6
-rw-r--r--libstdc++-v3/config/io/basic_file_stdio.cc138
-rw-r--r--libstdc++-v3/config/io/basic_file_stdio.h11
-rw-r--r--libstdc++-v3/config/linker-map.gnu81
-rw-r--r--libstdc++-v3/config/locale/generic/c_locale.cc8
-rw-r--r--libstdc++-v3/config/locale/generic/ctype_members.cc31
-rw-r--r--libstdc++-v3/config/locale/gnu/ctype_members.cc31
-rw-r--r--libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h72
-rw-r--r--libstdc++-v3/config/os/hpux/ctype_noninline.h2
-rwxr-xr-xlibstdc++-v3/configure2678
-rw-r--r--libstdc++-v3/configure.in45
-rw-r--r--libstdc++-v3/docs/html/19_diagnostics/howto.html3
-rw-r--r--libstdc++-v3/docs/html/configopts.html15
-rw-r--r--libstdc++-v3/docs/html/debug.html52
-rw-r--r--libstdc++-v3/docs/html/documentation.html1
-rw-r--r--libstdc++-v3/docs/html/explanations.html10
-rw-r--r--libstdc++-v3/docs/html/faq/index.html33
-rw-r--r--libstdc++-v3/docs/html/faq/index.txt264
-rw-r--r--libstdc++-v3/docs/html/install.html10
-rw-r--r--libstdc++-v3/include/Makefile.am19
-rw-r--r--libstdc++-v3/include/Makefile.in23
-rw-r--r--libstdc++-v3/include/bits/basic_ios.h7
-rw-r--r--libstdc++-v3/include/bits/basic_string.tcc15
-rw-r--r--libstdc++-v3/include/bits/c++config9
-rw-r--r--libstdc++-v3/include/bits/fstream.tcc119
-rw-r--r--libstdc++-v3/include/bits/ios_base.h6
-rw-r--r--libstdc++-v3/include/bits/istream.tcc64
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc82
-rw-r--r--libstdc++-v3/include/bits/ostream.tcc34
-rw-r--r--libstdc++-v3/include/bits/sstream.tcc2
-rw-r--r--libstdc++-v3/include/bits/streambuf.tcc42
-rw-r--r--libstdc++-v3/include/bits/streambuf_iterator.h4
-rw-r--r--libstdc++-v3/include/std/std_complex.h2
-rw-r--r--libstdc++-v3/include/std/std_fstream.h35
-rw-r--r--libstdc++-v3/include/std/std_istream.h31
-rw-r--r--libstdc++-v3/include/std/std_ostream.h24
-rw-r--r--libstdc++-v3/include/std/std_sstream.h12
-rw-r--r--libstdc++-v3/include/std/std_streambuf.h10
-rw-r--r--libstdc++-v3/libsupc++/Makefile.am17
-rw-r--r--libstdc++-v3/libsupc++/Makefile.in82
-rw-r--r--libstdc++-v3/libsupc++/demangle.h2359
-rw-r--r--libstdc++-v3/libsupc++/exception_defines.h7
-rwxr-xr-xlibstdc++-v3/mkcheck.in4
-rw-r--r--libstdc++-v3/src/demangle.cc2
-rw-r--r--libstdc++-v3/src/fstream.cc53
-rw-r--r--libstdc++-v3/src/globals.cc108
-rw-r--r--libstdc++-v3/src/ios.cc21
-rw-r--r--libstdc++-v3/src/strstream.cc4
-rw-r--r--libstdc++-v3/testsuite/21_strings/append.cc164
-rw-r--r--libstdc++-v3/testsuite/21_strings/assign.cc116
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings.cc91
-rw-r--r--libstdc++-v3/testsuite/21_strings/capacity.cc282
-rw-r--r--libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc204
-rw-r--r--libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc34
-rw-r--r--libstdc++-v3/testsuite/21_strings/compare.cc137
-rw-r--r--libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc240
-rw-r--r--libstdc++-v3/testsuite/21_strings/element_access.cc94
-rw-r--r--libstdc++-v3/testsuite/21_strings/find.cc198
-rw-r--r--libstdc++-v3/testsuite/21_strings/insert.cc253
-rw-r--r--libstdc++-v3/testsuite/21_strings/inserters_extractors.cc363
-rw-r--r--libstdc++-v3/testsuite/21_strings/invariants.cc175
-rw-r--r--libstdc++-v3/testsuite/21_strings/nonmember.cc300
-rw-r--r--libstdc++-v3/testsuite/21_strings/operations.cc56
-rw-r--r--libstdc++-v3/testsuite/21_strings/replace.cc202
-rw-r--r--libstdc++-v3/testsuite/21_strings/rfind.cc125
-rw-r--r--libstdc++-v3/testsuite/21_strings/substr.cc80
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc1
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/collate_byname/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc5
-rw-r--r--libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/facet/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/locale/cons/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/messages_byname/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/numpunct_byname/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc2
-rw-r--r--libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset_members.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/map_insert.cc3
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector_bool.cc3
-rw-r--r--libstdc++-v3/testsuite/24_iterators/istream_iterator.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc4
-rw-r--r--libstdc++-v3/testsuite/26_numerics/slice.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc3
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray_operators.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/filebuf_members.cc84
-rw-r--r--libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc170
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_base_storage.cc62
-rw-r--r--libstdc++-v3/testsuite/27_io/ios_members.cc2
-rw-r--r--libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc17
-rw-r--r--libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc10
-rw-r--r--libstdc++-v3/testsuite/27_io/streambuf_members.cc89
-rw-r--r--libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc3
-rw-r--r--libstdc++-v3/testsuite/27_io/stringstream.cc18
-rw-r--r--libstdc++-v3/testsuite/Makefile.am5
-rw-r--r--libstdc++-v3/testsuite/Makefile.in7
-rw-r--r--libstdc++-v3/testsuite/abi_check.cc6
-rw-r--r--libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp2
-rw-r--r--libstdc++-v3/testsuite/testsuite_hooks.cc57
-rw-r--r--libstdc++-v3/testsuite/testsuite_hooks.h7
-rwxr-xr-xlibstdc++-v3/testsuite_flags.in9
-rw-r--r--zlib/ChangeLog.gcj5
-rwxr-xr-xzlib/configure81
-rw-r--r--zlib/configure.in3
929 files changed, 48680 insertions, 52872 deletions
diff --git a/ChangeLog b/ChangeLog
index d58578cc625..6d502a6ba1b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,70 @@
+2003-03-17 Olivier Hainque <hainque@act-europe.fr>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2003-03-14 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Move .NOEXPORT, MAKEOVERRIDES back down.
+ * Makefile.in: Regenerate.
+
+2003-03-14 Michael Chastain <mec@shout.net>
+
+ * Makefile.in: Regenerate with correct Makefile.def.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Move .NOEXPORT, MAKEOVERRIDES up. Delete unused
+ Make macro.
+ * Makefile.in: Regenerate.
+ * configure.in: Clean up gxx_include_dir logic.
+ * configure: Regenerate.
+
+2003-03-12 Ansgar Esztermann <ansgar@thphy.uni-duesseldorf.de>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
+2003-03-10 Ben Elliston <bje@wasabisystems.com>
+
+ * MAINTAINERS: Update my mail address.
+
+2003-03-09 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * configure.in (gxx_include_dir): Fix typo.
+ * configure: Regenerated.
+
+2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Reindent.
+ * Makefile.in: Regenerate.
+ * configure.in: Reindent. Don't set unused variables.
+ * configure: Regenerate.
+
+2003-03-04 Daniel Jacobowitz <drow@mvista.com>
+
+ * configure.in: Include $(build_tooldir)/sys-include in
+ FLAGS_FOR_TARGET.
+ * configure: Regenerated.
+
+2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.tpl: Always pass down RANLIB.
+ * Makefile.in: Regenerate.
+
+ * Makefile.tpl: Don't set unused enable_shared, enable_threads macros.
+ * Makefile.in: Regenerate.
+ * configure.in: Remove unused logic relating to --enable-shared
+ and --enable-threads. Remove bogus comments. Remove redundant
+ noconfigdirs.
+ * configure: Regenerate.
+
+ * configure.in: Replace ${libstdcxx_version} by its value.
+ Remove reference to mh-dgux.
+ * configure: Regenerate.
+
+2003-03-03 Kevin Buettner <kevinb@redhat.com>
+
+ * MAINTAINERS (Write After Approval): Add myself.
+
2003-02-28 Nathanael Nerode <neroden@gcc.gnu.org>
* Makefile.tpl: Rearrange.
diff --git a/MAINTAINERS b/MAINTAINERS
index cae89af679e..d7557095fd8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -172,20 +172,22 @@ Phil Blundell pb@futuretv.com
Hans Boehm hboehm@gcc.gnu.org
Steven Bosscher steven@gcc.gnu.org
Eric Botcazou ebotcazou@libertysurf.fr
+Kevin Buettner kevinb@redhat.com
Andrew Cagney cagney@redhat.com
Chandra Chavva cchavva@redhat.com
William Cohen wcohen@redhat.com
Christian Cornelssen ccorn@cs.tu-berlin.de
Chris Demetriou cgd@broadcom.com
Steve Ellcey sje@cup.hp.com
-Ben Elliston bje@redhat.com
+Ben Elliston bje@wasabisystems.com
Marc Espie espie@cvs.openbsd.org
+Ansgar Esztermann ansgar@thphy.uni-duesseldorf.de
Doug Evans dje@transmeta.com
Kaveh Ghazi ghazi@caip.rutgers.edu
Matthew Gingell gingell@gnat.com
Anthony Green green@redhat.com
-Stu Grossman grossman@redhat.com
Laurent Guerby guerby@acm.org
+Olivier Hainque hainque@act-europe.fr
Andrew Haley aph@redhat.com
Stuart Hastings stuart@apple.com
Aldy Hernandez aldyh@redhat.com
@@ -231,7 +233,6 @@ Nicola Pero n.pero@mi.flashnet.it
Alexandre Petit-Bianco apbianco@redhat.com
Sebastian Pop s.pop@laposte.net
Clinton Popetz cpopetz@cpopetz.com
-Ken Raeburn raeburn@redhat.com
Rolf Rasmussen rolfwr@gcc.gnu.org
Volker Reichelt reichelt@igpm.rwth-aachen.de
Tom Rix trix@redhat.com
diff --git a/Makefile.in b/Makefile.in
index 102cd9b3cf1..8919284659e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -84,9 +84,6 @@ INSTALL_DATA = $(INSTALL) -m 644
# -------------------------------------------------
links=@configlinks@
-enable_shared = @enable_shared@
-enable_threads = @enable_threads@
-enable_version_specific_runtime_libs = @enable_version_specific_runtime_libs@
# The file containing GCC's version number.
gcc_version_trigger = @gcc_version_trigger@
gcc_version = @gcc_version@
@@ -483,7 +480,7 @@ EXTRA_HOST_FLAGS = \
'DLLTOOL=$(DLLTOOL)' \
'LD=$(LD)' \
'NM=$(NM)' \
- "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \
+ 'RANLIB=$(RANLIB)' \
'WINDRES=$(WINDRES)'
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)
@@ -537,7 +534,7 @@ EXTRA_GCC_FLAGS = \
'BUILD_PREFIX=$(BUILD_PREFIX)' \
'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
'NM=$(NM)' \
- "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \
+ 'RANLIB=$(RANLIB)' \
'WINDRES=$$(WINDRES_FOR_TARGET)' \
"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
@@ -685,7 +682,7 @@ do-clean:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
clean) \
|| exit 1; \
@@ -703,7 +700,7 @@ do-clean:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
clean) \
|| exit 1; \
@@ -732,7 +729,7 @@ do-distclean:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
distclean) \
|| exit 1; \
@@ -750,7 +747,7 @@ do-distclean:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
distclean) \
|| exit 1; \
@@ -779,7 +776,7 @@ do-dvi:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
dvi) \
|| exit 1; \
@@ -797,7 +794,7 @@ do-dvi:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
dvi) \
|| exit 1; \
@@ -826,7 +823,7 @@ do-info:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
info) \
|| exit 1; \
@@ -844,7 +841,7 @@ do-info:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
info) \
|| exit 1; \
@@ -873,7 +870,7 @@ do-install-info:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
install-info) \
|| exit 1; \
@@ -891,7 +888,7 @@ do-install-info:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
install-info) \
|| exit 1; \
@@ -920,7 +917,7 @@ do-installcheck:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
installcheck) \
|| exit 1; \
@@ -938,7 +935,7 @@ do-installcheck:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
installcheck) \
|| exit 1; \
@@ -967,7 +964,7 @@ do-mostlyclean:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
mostlyclean) \
|| exit 1; \
@@ -985,7 +982,7 @@ do-mostlyclean:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
mostlyclean) \
|| exit 1; \
@@ -1014,7 +1011,7 @@ do-maintainer-clean:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
maintainer-clean) \
|| exit 1; \
@@ -1032,7 +1029,7 @@ do-maintainer-clean:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
maintainer-clean) \
|| exit 1; \
@@ -1061,7 +1058,7 @@ do-TAGS:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
TAGS) \
|| exit 1; \
@@ -1079,7 +1076,7 @@ do-TAGS:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
TAGS) \
|| exit 1; \
@@ -1262,70 +1259,70 @@ TAGS: do-TAGS
maybe-configure-build-libiberty:
configure-build-libiberty:
@test ! -f $(BUILD_SUBDIR)/libiberty/Makefile || exit 0; \
- [ -d $(BUILD_SUBDIR)/libiberty ] || \
- mkdir $(BUILD_SUBDIR)/libiberty;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- AR="$(AR_FOR_BUILD)"; export AR; \
- AS="$(AS_FOR_BUILD)"; export AS; \
- CC="$(CC_FOR_BUILD)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
- LD="$(LD_FOR_BUILD)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
- NM="$(NM_FOR_BUILD)"; export NM; \
- RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
- echo Configuring in $(BUILD_SUBDIR)/libiberty; \
- cd "$(BUILD_SUBDIR)/libiberty" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(BUILD_SUBDIR)" in \
+ [ -d $(BUILD_SUBDIR)/libiberty ] || \
+ mkdir $(BUILD_SUBDIR)/libiberty;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ AR="$(AR_FOR_BUILD)"; export AR; \
+ AS="$(AS_FOR_BUILD)"; export AS; \
+ CC="$(CC_FOR_BUILD)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
+ CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
+ LD="$(LD_FOR_BUILD)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
+ NM="$(NM_FOR_BUILD)"; export NM; \
+ RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ echo Configuring in $(BUILD_SUBDIR)/libiberty; \
+ cd "$(BUILD_SUBDIR)/libiberty" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(BUILD_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(BUILD_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(BUILD_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libiberty"; \
- libsrcdir="$$s/libiberty"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
- --with-build-subdir="$(BUILD_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libiberty"; \
+ libsrcdir="$$s/libiberty"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(BUILD_CONFIGARGS) $${srcdiroption} \
+ --with-build-subdir="$(BUILD_SUBDIR)" \
+ || exit 1
.PHONY: all-build-libiberty maybe-all-build-libiberty
maybe-all-build-libiberty:
all-build-libiberty: configure-build-libiberty
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- (cd $(BUILD_SUBDIR)/libiberty && $(MAKE) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ (cd $(BUILD_SUBDIR)/libiberty && $(MAKE) all)
# --------------------------------------
@@ -1376,17 +1373,17 @@ configure-ash:
maybe-all-ash:
all-ash: configure-ash
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ash && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ash && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-ash
check-ash:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ash && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ash && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1394,9 +1391,9 @@ check-ash:
maybe-install-ash:
install-ash: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ash && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ash && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-autoconf maybe-configure-autoconf
@@ -1443,17 +1440,17 @@ configure-autoconf:
maybe-all-autoconf:
all-autoconf: configure-autoconf
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-autoconf
check-autoconf:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1461,9 +1458,9 @@ check-autoconf:
maybe-install-autoconf:
install-autoconf: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd autoconf && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-automake maybe-configure-automake
@@ -1510,17 +1507,17 @@ configure-automake:
maybe-all-automake:
all-automake: configure-automake
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd automake && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd automake && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-automake
check-automake:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd automake && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd automake && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1528,9 +1525,9 @@ check-automake:
maybe-install-automake:
install-automake: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd automake && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd automake && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-bash maybe-configure-bash
@@ -1577,17 +1574,17 @@ configure-bash:
maybe-all-bash:
all-bash: configure-bash
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bash && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bash && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-bash
check-bash:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bash && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bash && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1595,9 +1592,9 @@ check-bash:
maybe-install-bash:
install-bash: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bash && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bash && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-bfd maybe-configure-bfd
@@ -1644,17 +1641,17 @@ configure-bfd:
maybe-all-bfd:
all-bfd: configure-bfd
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bfd && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bfd && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-bfd
check-bfd:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bfd && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bfd && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1662,9 +1659,9 @@ check-bfd:
maybe-install-bfd:
install-bfd: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bfd && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bfd && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-opcodes maybe-configure-opcodes
@@ -1711,17 +1708,17 @@ configure-opcodes:
maybe-all-opcodes:
all-opcodes: configure-opcodes
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-opcodes
check-opcodes:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1729,9 +1726,9 @@ check-opcodes:
maybe-install-opcodes:
install-opcodes: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd opcodes && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-binutils maybe-configure-binutils
@@ -1778,17 +1775,17 @@ configure-binutils:
maybe-all-binutils:
all-binutils: configure-binutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd binutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd binutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-binutils
check-binutils:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd binutils && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd binutils && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -1796,9 +1793,9 @@ check-binutils:
maybe-install-binutils:
install-binutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd binutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd binutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-bison maybe-configure-bison
@@ -1845,19 +1842,19 @@ configure-bison:
maybe-all-bison:
all-bison: configure-bison
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bison && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bison && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-bison
# This module is only tested in a native toolchain.
check-bison:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bison && $(MAKE) $(FLAGS_TO_PASS) check); \
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bison && $(MAKE) $(FLAGS_TO_PASS) check); \
fi
@@ -1866,9 +1863,9 @@ check-bison:
maybe-install-bison:
install-bison: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bison && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bison && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-byacc maybe-configure-byacc
@@ -1915,19 +1912,19 @@ configure-byacc:
maybe-all-byacc:
all-byacc: configure-byacc
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd byacc && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd byacc && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-byacc
# This module is only tested in a native toolchain.
check-byacc:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd byacc && $(MAKE) $(FLAGS_TO_PASS) check); \
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd byacc && $(MAKE) $(FLAGS_TO_PASS) check); \
fi
@@ -1936,9 +1933,9 @@ check-byacc:
maybe-install-byacc:
install-byacc: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd byacc && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd byacc && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-bzip2 maybe-configure-bzip2
@@ -1985,17 +1982,17 @@ configure-bzip2:
maybe-all-bzip2:
all-bzip2: configure-bzip2
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-bzip2
check-bzip2:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2003,9 +2000,9 @@ check-bzip2:
maybe-install-bzip2:
install-bzip2: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd bzip2 && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-dejagnu maybe-configure-dejagnu
@@ -2052,17 +2049,17 @@ configure-dejagnu:
maybe-all-dejagnu:
all-dejagnu: configure-dejagnu
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-dejagnu
check-dejagnu:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2070,9 +2067,9 @@ check-dejagnu:
maybe-install-dejagnu:
install-dejagnu: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd dejagnu && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-diff maybe-configure-diff
@@ -2119,17 +2116,17 @@ configure-diff:
maybe-all-diff:
all-diff: configure-diff
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd diff && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd diff && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-diff
check-diff:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd diff && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd diff && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2137,9 +2134,9 @@ check-diff:
maybe-install-diff:
install-diff: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd diff && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd diff && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-dosutils maybe-configure-dosutils
@@ -2186,9 +2183,9 @@ configure-dosutils:
maybe-all-dosutils:
all-dosutils: configure-dosutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd dosutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd dosutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-dosutils
@@ -2200,9 +2197,9 @@ check-dosutils:
maybe-install-dosutils:
install-dosutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd dosutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd dosutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-etc maybe-configure-etc
@@ -2249,17 +2246,17 @@ configure-etc:
maybe-all-etc:
all-etc: configure-etc
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd etc && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd etc && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-etc
check-etc:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd etc && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd etc && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2267,9 +2264,9 @@ check-etc:
maybe-install-etc:
install-etc: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd etc && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd etc && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-fastjar maybe-configure-fastjar
@@ -2316,19 +2313,19 @@ configure-fastjar:
maybe-all-fastjar:
all-fastjar: configure-fastjar
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-fastjar
# This module is only tested in a native toolchain.
check-fastjar:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) check); \
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) check); \
fi
@@ -2337,9 +2334,9 @@ check-fastjar:
maybe-install-fastjar:
install-fastjar: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fastjar && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-fileutils maybe-configure-fileutils
@@ -2386,17 +2383,17 @@ configure-fileutils:
maybe-all-fileutils:
all-fileutils: configure-fileutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-fileutils
check-fileutils:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2404,9 +2401,9 @@ check-fileutils:
maybe-install-fileutils:
install-fileutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd fileutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-findutils maybe-configure-findutils
@@ -2453,17 +2450,17 @@ configure-findutils:
maybe-all-findutils:
all-findutils: configure-findutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd findutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd findutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-findutils
check-findutils:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd findutils && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd findutils && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2471,9 +2468,9 @@ check-findutils:
maybe-install-findutils:
install-findutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd findutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd findutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-find maybe-configure-find
@@ -2520,17 +2517,17 @@ configure-find:
maybe-all-find:
all-find: configure-find
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd find && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd find && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-find
check-find:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd find && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd find && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2538,9 +2535,9 @@ check-find:
maybe-install-find:
install-find: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd find && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd find && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-flex maybe-configure-flex
@@ -2587,19 +2584,19 @@ configure-flex:
maybe-all-flex:
all-flex: configure-flex
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd flex && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd flex && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-flex
# This module is only tested in a native toolchain.
check-flex:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd flex && $(MAKE) $(FLAGS_TO_PASS) check); \
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd flex && $(MAKE) $(FLAGS_TO_PASS) check); \
fi
@@ -2608,9 +2605,9 @@ check-flex:
maybe-install-flex:
install-flex: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd flex && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd flex && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gas maybe-configure-gas
@@ -2657,17 +2654,17 @@ configure-gas:
maybe-all-gas:
all-gas: configure-gas
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gas && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gas && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gas
check-gas:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gas && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gas && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2675,9 +2672,9 @@ check-gas:
maybe-install-gas:
install-gas: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gas && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gas && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gawk maybe-configure-gawk
@@ -2724,17 +2721,17 @@ configure-gawk:
maybe-all-gawk:
all-gawk: configure-gawk
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gawk && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gawk && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gawk
check-gawk:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gawk && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gawk && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2742,9 +2739,9 @@ check-gawk:
maybe-install-gawk:
install-gawk: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gawk && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gawk && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gettext maybe-configure-gettext
@@ -2791,17 +2788,17 @@ configure-gettext:
maybe-all-gettext:
all-gettext: configure-gettext
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gettext && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gettext && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gettext
check-gettext:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gettext && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gettext && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2809,9 +2806,9 @@ check-gettext:
maybe-install-gettext:
install-gettext: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gettext && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gettext && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gnuserv maybe-configure-gnuserv
@@ -2858,17 +2855,17 @@ configure-gnuserv:
maybe-all-gnuserv:
all-gnuserv: configure-gnuserv
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gnuserv
check-gnuserv:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2876,9 +2873,9 @@ check-gnuserv:
maybe-install-gnuserv:
install-gnuserv: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gnuserv && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gprof maybe-configure-gprof
@@ -2925,17 +2922,17 @@ configure-gprof:
maybe-all-gprof:
all-gprof: configure-gprof
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gprof && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gprof && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gprof
check-gprof:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gprof && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gprof && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -2943,9 +2940,9 @@ check-gprof:
maybe-install-gprof:
install-gprof: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gprof && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gprof && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-gzip maybe-configure-gzip
@@ -2992,17 +2989,17 @@ configure-gzip:
maybe-all-gzip:
all-gzip: configure-gzip
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gzip && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gzip && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-gzip
check-gzip:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gzip && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gzip && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3010,9 +3007,9 @@ check-gzip:
maybe-install-gzip:
install-gzip: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gzip && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gzip && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-hello maybe-configure-hello
@@ -3059,17 +3056,17 @@ configure-hello:
maybe-all-hello:
all-hello: configure-hello
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd hello && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd hello && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-hello
check-hello:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd hello && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd hello && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3077,9 +3074,9 @@ check-hello:
maybe-install-hello:
install-hello: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd hello && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd hello && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-indent maybe-configure-indent
@@ -3126,17 +3123,17 @@ configure-indent:
maybe-all-indent:
all-indent: configure-indent
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd indent && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd indent && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-indent
check-indent:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd indent && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd indent && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3144,9 +3141,9 @@ check-indent:
maybe-install-indent:
install-indent: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd indent && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd indent && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-intl maybe-configure-intl
@@ -3193,17 +3190,17 @@ configure-intl:
maybe-all-intl:
all-intl: configure-intl
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd intl && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd intl && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-intl
check-intl:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd intl && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd intl && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3211,9 +3208,9 @@ check-intl:
maybe-install-intl:
install-intl: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd intl && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd intl && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-tcl maybe-configure-tcl
@@ -3260,17 +3257,17 @@ configure-tcl:
maybe-all-tcl:
all-tcl: configure-tcl
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tcl && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tcl && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-tcl
check-tcl:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tcl && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tcl && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3278,9 +3275,9 @@ check-tcl:
maybe-install-tcl:
install-tcl: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tcl && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tcl && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-itcl maybe-configure-itcl
@@ -3327,17 +3324,17 @@ configure-itcl:
maybe-all-itcl:
all-itcl: configure-itcl
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd itcl && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd itcl && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-itcl
check-itcl:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd itcl && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd itcl && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3345,9 +3342,9 @@ check-itcl:
maybe-install-itcl:
install-itcl: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd itcl && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd itcl && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-ld maybe-configure-ld
@@ -3394,17 +3391,17 @@ configure-ld:
maybe-all-ld:
all-ld: configure-ld
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ld && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ld && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-ld
check-ld:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ld && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ld && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3412,9 +3409,9 @@ check-ld:
maybe-install-ld:
install-ld: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd ld && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd ld && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-libgui maybe-configure-libgui
@@ -3461,17 +3458,17 @@ configure-libgui:
maybe-all-libgui:
all-libgui: configure-libgui
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libgui && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libgui && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-libgui
check-libgui:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libgui && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libgui && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3479,9 +3476,9 @@ check-libgui:
maybe-install-libgui:
install-libgui: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libgui && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libgui && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-libbanshee maybe-configure-libbanshee
@@ -3592,17 +3589,17 @@ configure-libiberty:
maybe-all-libiberty:
all-libiberty: configure-libiberty
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-libiberty
check-libiberty:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3610,9 +3607,9 @@ check-libiberty:
maybe-install-libiberty:
install-libiberty: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libiberty && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-libtool maybe-configure-libtool
@@ -3659,17 +3656,17 @@ configure-libtool:
maybe-all-libtool:
all-libtool: configure-libtool
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libtool && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libtool && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-libtool
check-libtool:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libtool && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libtool && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3677,9 +3674,9 @@ check-libtool:
maybe-install-libtool:
install-libtool: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libtool && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libtool && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-m4 maybe-configure-m4
@@ -3726,17 +3723,17 @@ configure-m4:
maybe-all-m4:
all-m4: configure-m4
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd m4 && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd m4 && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-m4
check-m4:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd m4 && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd m4 && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3744,9 +3741,9 @@ check-m4:
maybe-install-m4:
install-m4: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd m4 && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd m4 && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-make maybe-configure-make
@@ -3793,17 +3790,17 @@ configure-make:
maybe-all-make:
all-make: configure-make
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd make && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd make && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-make
check-make:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd make && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd make && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3811,9 +3808,9 @@ check-make:
maybe-install-make:
install-make: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd make && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd make && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-mmalloc maybe-configure-mmalloc
@@ -3860,9 +3857,9 @@ configure-mmalloc:
maybe-all-mmalloc:
all-mmalloc: configure-mmalloc
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-mmalloc
@@ -3874,9 +3871,9 @@ check-mmalloc:
maybe-install-mmalloc:
install-mmalloc: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd mmalloc && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-patch maybe-configure-patch
@@ -3923,17 +3920,17 @@ configure-patch:
maybe-all-patch:
all-patch: configure-patch
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd patch && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd patch && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-patch
check-patch:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd patch && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd patch && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -3941,9 +3938,9 @@ check-patch:
maybe-install-patch:
install-patch: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd patch && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd patch && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-perl maybe-configure-perl
@@ -3990,17 +3987,17 @@ configure-perl:
maybe-all-perl:
all-perl: configure-perl
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd perl && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd perl && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-perl
check-perl:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd perl && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd perl && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4008,9 +4005,9 @@ check-perl:
maybe-install-perl:
install-perl: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd perl && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd perl && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-prms maybe-configure-prms
@@ -4057,17 +4054,17 @@ configure-prms:
maybe-all-prms:
all-prms: configure-prms
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd prms && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd prms && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-prms
check-prms:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd prms && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd prms && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4075,9 +4072,9 @@ check-prms:
maybe-install-prms:
install-prms: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd prms && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd prms && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-rcs maybe-configure-rcs
@@ -4124,17 +4121,17 @@ configure-rcs:
maybe-all-rcs:
all-rcs: configure-rcs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd rcs && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd rcs && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-rcs
check-rcs:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd rcs && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd rcs && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4142,9 +4139,9 @@ check-rcs:
maybe-install-rcs:
install-rcs: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd rcs && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd rcs && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-readline maybe-configure-readline
@@ -4191,17 +4188,17 @@ configure-readline:
maybe-all-readline:
all-readline: configure-readline
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd readline && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd readline && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-readline
check-readline:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd readline && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd readline && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4209,9 +4206,9 @@ check-readline:
maybe-install-readline:
install-readline: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd readline && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd readline && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-release maybe-configure-release
@@ -4258,9 +4255,9 @@ configure-release:
maybe-all-release:
all-release: configure-release
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd release && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd release && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-release
@@ -4317,17 +4314,17 @@ configure-recode:
maybe-all-recode:
all-recode: configure-recode
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd recode && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd recode && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-recode
check-recode:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd recode && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd recode && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4335,9 +4332,9 @@ check-recode:
maybe-install-recode:
install-recode: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd recode && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd recode && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-sed maybe-configure-sed
@@ -4384,17 +4381,17 @@ configure-sed:
maybe-all-sed:
all-sed: configure-sed
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sed && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sed && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-sed
check-sed:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sed && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sed && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4402,9 +4399,9 @@ check-sed:
maybe-install-sed:
install-sed: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sed && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sed && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-send-pr maybe-configure-send-pr
@@ -4451,17 +4448,17 @@ configure-send-pr:
maybe-all-send-pr:
all-send-pr: configure-send-pr
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-send-pr
check-send-pr:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4469,9 +4466,9 @@ check-send-pr:
maybe-install-send-pr:
install-send-pr: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd send-pr && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-shellutils maybe-configure-shellutils
@@ -4518,17 +4515,17 @@ configure-shellutils:
maybe-all-shellutils:
all-shellutils: configure-shellutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-shellutils
check-shellutils:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4536,9 +4533,9 @@ check-shellutils:
maybe-install-shellutils:
install-shellutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd shellutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-sid maybe-configure-sid
@@ -4585,17 +4582,17 @@ configure-sid:
maybe-all-sid:
all-sid: configure-sid
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sid && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sid && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-sid
check-sid:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sid && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sid && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4603,9 +4600,9 @@ check-sid:
maybe-install-sid:
install-sid: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sid && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sid && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-sim maybe-configure-sim
@@ -4652,17 +4649,17 @@ configure-sim:
maybe-all-sim:
all-sim: configure-sim
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sim && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sim && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-sim
check-sim:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sim && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sim && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4670,9 +4667,9 @@ check-sim:
maybe-install-sim:
install-sim: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd sim && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd sim && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-tar maybe-configure-tar
@@ -4719,17 +4716,17 @@ configure-tar:
maybe-all-tar:
all-tar: configure-tar
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tar && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tar && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-tar
check-tar:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tar && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tar && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4737,9 +4734,9 @@ check-tar:
maybe-install-tar:
install-tar: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tar && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tar && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-texinfo maybe-configure-texinfo
@@ -4786,17 +4783,17 @@ configure-texinfo:
maybe-all-texinfo:
all-texinfo: configure-texinfo
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd texinfo && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd texinfo && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-texinfo
check-texinfo:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd texinfo && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd texinfo && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4849,17 +4846,17 @@ configure-textutils:
maybe-all-textutils:
all-textutils: configure-textutils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd textutils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd textutils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-textutils
check-textutils:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd textutils && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd textutils && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4867,9 +4864,9 @@ check-textutils:
maybe-install-textutils:
install-textutils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd textutils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd textutils && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-time maybe-configure-time
@@ -4916,17 +4913,17 @@ configure-time:
maybe-all-time:
all-time: configure-time
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd time && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd time && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-time
check-time:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd time && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd time && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -4934,9 +4931,9 @@ check-time:
maybe-install-time:
install-time: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd time && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd time && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-uudecode maybe-configure-uudecode
@@ -4983,17 +4980,17 @@ configure-uudecode:
maybe-all-uudecode:
all-uudecode: configure-uudecode
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-uudecode
check-uudecode:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -5001,9 +4998,9 @@ check-uudecode:
maybe-install-uudecode:
install-uudecode: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd uudecode && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-wdiff maybe-configure-wdiff
@@ -5050,17 +5047,17 @@ configure-wdiff:
maybe-all-wdiff:
all-wdiff: configure-wdiff
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-wdiff
check-wdiff:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) check)
@@ -5068,9 +5065,9 @@ check-wdiff:
maybe-install-wdiff:
install-wdiff: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd wdiff && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-zip maybe-configure-zip
@@ -5117,19 +5114,19 @@ configure-zip:
maybe-all-zip:
all-zip: configure-zip
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd zip && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd zip && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-zip
# This module is only tested in a native toolchain.
check-zip:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd zip && $(MAKE) $(FLAGS_TO_PASS) check); \
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd zip && $(MAKE) $(FLAGS_TO_PASS) check); \
fi
@@ -5138,9 +5135,9 @@ check-zip:
maybe-install-zip:
install-zip: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd zip && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd zip && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-zlib maybe-configure-zlib
@@ -5187,9 +5184,9 @@ configure-zlib:
maybe-all-zlib:
all-zlib: configure-zlib
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd zlib && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd zlib && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-zlib
@@ -5246,17 +5243,17 @@ configure-gdb:
maybe-all-gdb:
all-gdb: configure-gdb
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
.PHONY: check-gdb
check-gdb:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
@@ -5264,9 +5261,9 @@ check-gdb:
maybe-install-gdb:
install-gdb: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd gdb && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
.PHONY: configure-expect maybe-configure-expect
@@ -5313,17 +5310,17 @@ configure-expect:
maybe-all-expect:
all-expect: configure-expect
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
.PHONY: check-expect
check-expect:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
@@ -5331,9 +5328,9 @@ check-expect:
maybe-install-expect:
install-expect: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd expect && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
.PHONY: configure-guile maybe-configure-guile
@@ -5380,17 +5377,17 @@ configure-guile:
maybe-all-guile:
all-guile: configure-guile
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
.PHONY: check-guile
check-guile:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
@@ -5398,9 +5395,9 @@ check-guile:
maybe-install-guile:
install-guile: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd guile && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
.PHONY: configure-tk maybe-configure-tk
@@ -5447,17 +5444,17 @@ configure-tk:
maybe-all-tk:
all-tk: configure-tk
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
.PHONY: check-tk
check-tk:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
@@ -5465,9 +5462,9 @@ check-tk:
maybe-install-tk:
install-tk: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tk && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
.PHONY: configure-tix maybe-configure-tix
@@ -5514,17 +5511,17 @@ configure-tix:
maybe-all-tix:
all-tix: configure-tix
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) all)
.PHONY: check-tix
check-tix:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) check)
@@ -5532,9 +5529,9 @@ check-tix:
maybe-install-tix:
install-tix: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd tix && $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) install)
.PHONY: configure-libtermcap maybe-configure-libtermcap
@@ -5581,9 +5578,9 @@ configure-libtermcap:
maybe-all-libtermcap:
all-libtermcap: configure-libtermcap
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-libtermcap
@@ -5595,9 +5592,9 @@ check-libtermcap:
maybe-install-libtermcap:
install-libtermcap: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd libtermcap && $(MAKE) $(FLAGS_TO_PASS) install)
.PHONY: configure-utils maybe-configure-utils
@@ -5644,9 +5641,9 @@ configure-utils:
maybe-all-utils:
all-utils: configure-utils
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd utils && $(MAKE) $(FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd utils && $(MAKE) $(FLAGS_TO_PASS) all)
.PHONY: check-utils
@@ -5658,9 +5655,9 @@ check-utils:
maybe-install-utils:
install-utils: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd utils && $(MAKE) $(FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd utils && $(MAKE) $(FLAGS_TO_PASS) install)
@@ -5674,99 +5671,99 @@ maybe-configure-target-libstdc++-v3:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libstdc++-v3/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libstdc++-v3 ] || \
- mkdir $(TARGET_SUBDIR)/libstdc++-v3; \
+ mkdir $(TARGET_SUBDIR)/libstdc++-v3; \
rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
configure-target-libstdc++-v3: $(TARGET_SUBDIR)/libstdc++-v3/multilib.out
@test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libstdc++-v3 ] || \
- mkdir $(TARGET_SUBDIR)/libstdc++-v3;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
- CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libstdc++-v3; \
- cd "$(TARGET_SUBDIR)/libstdc++-v3" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libstdc++-v3 ] || \
+ mkdir $(TARGET_SUBDIR)/libstdc++-v3;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
+ CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libstdc++-v3; \
+ cd "$(TARGET_SUBDIR)/libstdc++-v3" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libstdc++-v3 "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libstdc++-v3 "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \
- libsrcdir="$$s/libstdc++-v3"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \
+ libsrcdir="$$s/libstdc++-v3"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3
maybe-all-target-libstdc++-v3:
all-target-libstdc++-v3: configure-target-libstdc++-v3
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' all)
.PHONY: check-target-libstdc++-v3
check-target-libstdc++-v3:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check)
.PHONY: install-target-libstdc++-v3 maybe-install-target-libstdc++-v3
maybe-install-target-libstdc++-v3:
install-target-libstdc++-v3: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libmudflap maybe-configure-target-libmudflap
@@ -5874,98 +5871,98 @@ maybe-configure-target-newlib:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/newlib/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/newlib ] || \
- mkdir $(TARGET_SUBDIR)/newlib; \
+ mkdir $(TARGET_SUBDIR)/newlib; \
rm -f $(TARGET_SUBDIR)/newlib/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/newlib/multilib.out
configure-target-newlib: $(TARGET_SUBDIR)/newlib/multilib.out
@test ! -f $(TARGET_SUBDIR)/newlib/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/newlib ] || \
- mkdir $(TARGET_SUBDIR)/newlib;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/newlib; \
- cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/newlib ] || \
+ mkdir $(TARGET_SUBDIR)/newlib;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/newlib; \
+ cd "$(TARGET_SUBDIR)/newlib" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/newlib "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/newlib "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/newlib"; \
- libsrcdir="$$s/newlib"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/newlib"; \
+ libsrcdir="$$s/newlib"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-newlib maybe-all-target-newlib
maybe-all-target-newlib:
all-target-newlib: configure-target-newlib
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/newlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-newlib
check-target-newlib:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/newlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-newlib maybe-install-target-newlib
maybe-install-target-newlib:
install-target-newlib: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/newlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/newlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libf2c maybe-configure-target-libf2c
@@ -5974,98 +5971,98 @@ maybe-configure-target-libf2c:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libf2c/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libf2c ] || \
- mkdir $(TARGET_SUBDIR)/libf2c; \
+ mkdir $(TARGET_SUBDIR)/libf2c; \
rm -f $(TARGET_SUBDIR)/libf2c/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libf2c/multilib.out
configure-target-libf2c: $(TARGET_SUBDIR)/libf2c/multilib.out
@test ! -f $(TARGET_SUBDIR)/libf2c/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libf2c ] || \
- mkdir $(TARGET_SUBDIR)/libf2c;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libf2c; \
- cd "$(TARGET_SUBDIR)/libf2c" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libf2c ] || \
+ mkdir $(TARGET_SUBDIR)/libf2c;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libf2c; \
+ cd "$(TARGET_SUBDIR)/libf2c" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libf2c "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libf2c "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libf2c"; \
- libsrcdir="$$s/libf2c"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libf2c"; \
+ libsrcdir="$$s/libf2c"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libf2c maybe-all-target-libf2c
maybe-all-target-libf2c:
all-target-libf2c: configure-target-libf2c
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libf2c && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libf2c && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-libf2c
check-target-libf2c:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libf2c && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libf2c && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-libf2c maybe-install-target-libf2c
maybe-install-target-libf2c:
install-target-libf2c: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libf2c && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libf2c && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libobjc maybe-configure-target-libobjc
@@ -6074,98 +6071,98 @@ maybe-configure-target-libobjc:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libobjc/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libobjc ] || \
- mkdir $(TARGET_SUBDIR)/libobjc; \
+ mkdir $(TARGET_SUBDIR)/libobjc; \
rm -f $(TARGET_SUBDIR)/libobjc/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libobjc/multilib.out
configure-target-libobjc: $(TARGET_SUBDIR)/libobjc/multilib.out
@test ! -f $(TARGET_SUBDIR)/libobjc/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libobjc ] || \
- mkdir $(TARGET_SUBDIR)/libobjc;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libobjc; \
- cd "$(TARGET_SUBDIR)/libobjc" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libobjc ] || \
+ mkdir $(TARGET_SUBDIR)/libobjc;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libobjc; \
+ cd "$(TARGET_SUBDIR)/libobjc" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libobjc "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libobjc "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libobjc"; \
- libsrcdir="$$s/libobjc"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libobjc"; \
+ libsrcdir="$$s/libobjc"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libobjc maybe-all-target-libobjc
maybe-all-target-libobjc:
all-target-libobjc: configure-target-libobjc
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libobjc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-libobjc
check-target-libobjc:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libobjc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-libobjc maybe-install-target-libobjc
maybe-install-target-libobjc:
install-target-libobjc: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libobjc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libobjc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libtermcap maybe-configure-target-libtermcap
@@ -6174,80 +6171,80 @@ maybe-configure-target-libtermcap:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libtermcap/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libtermcap ] || \
- mkdir $(TARGET_SUBDIR)/libtermcap; \
+ mkdir $(TARGET_SUBDIR)/libtermcap; \
rm -f $(TARGET_SUBDIR)/libtermcap/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libtermcap/multilib.out
configure-target-libtermcap: $(TARGET_SUBDIR)/libtermcap/multilib.out
@test ! -f $(TARGET_SUBDIR)/libtermcap/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libtermcap ] || \
- mkdir $(TARGET_SUBDIR)/libtermcap;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libtermcap; \
- cd "$(TARGET_SUBDIR)/libtermcap" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libtermcap ] || \
+ mkdir $(TARGET_SUBDIR)/libtermcap;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libtermcap; \
+ cd "$(TARGET_SUBDIR)/libtermcap" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libtermcap "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libtermcap "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libtermcap"; \
- libsrcdir="$$s/libtermcap"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libtermcap"; \
+ libsrcdir="$$s/libtermcap"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libtermcap maybe-all-target-libtermcap
maybe-all-target-libtermcap:
all-target-libtermcap: configure-target-libtermcap
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libtermcap && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libtermcap && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
# Dummy target for uncheckable module.
.PHONY: check-target-libtermcap
@@ -6258,10 +6255,10 @@ check-target-libtermcap:
maybe-install-target-libtermcap:
install-target-libtermcap: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libtermcap && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libtermcap && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-winsup maybe-configure-target-winsup
@@ -6270,98 +6267,98 @@ maybe-configure-target-winsup:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/winsup/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/winsup ] || \
- mkdir $(TARGET_SUBDIR)/winsup; \
+ mkdir $(TARGET_SUBDIR)/winsup; \
rm -f $(TARGET_SUBDIR)/winsup/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/winsup/multilib.out
configure-target-winsup: $(TARGET_SUBDIR)/winsup/multilib.out
@test ! -f $(TARGET_SUBDIR)/winsup/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/winsup ] || \
- mkdir $(TARGET_SUBDIR)/winsup;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/winsup; \
- cd "$(TARGET_SUBDIR)/winsup" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/winsup ] || \
+ mkdir $(TARGET_SUBDIR)/winsup;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/winsup; \
+ cd "$(TARGET_SUBDIR)/winsup" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/winsup "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/winsup "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/winsup"; \
- libsrcdir="$$s/winsup"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/winsup"; \
+ libsrcdir="$$s/winsup"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-winsup maybe-all-target-winsup
maybe-all-target-winsup:
all-target-winsup: configure-target-winsup
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/winsup && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-winsup
check-target-winsup:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/winsup && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-winsup maybe-install-target-winsup
maybe-install-target-winsup:
install-target-winsup: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/winsup && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/winsup && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libgloss maybe-configure-target-libgloss
@@ -6370,80 +6367,80 @@ maybe-configure-target-libgloss:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libgloss/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libgloss ] || \
- mkdir $(TARGET_SUBDIR)/libgloss; \
+ mkdir $(TARGET_SUBDIR)/libgloss; \
rm -f $(TARGET_SUBDIR)/libgloss/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libgloss/multilib.out
configure-target-libgloss: $(TARGET_SUBDIR)/libgloss/multilib.out
@test ! -f $(TARGET_SUBDIR)/libgloss/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libgloss ] || \
- mkdir $(TARGET_SUBDIR)/libgloss;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libgloss; \
- cd "$(TARGET_SUBDIR)/libgloss" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libgloss ] || \
+ mkdir $(TARGET_SUBDIR)/libgloss;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libgloss; \
+ cd "$(TARGET_SUBDIR)/libgloss" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libgloss "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libgloss "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libgloss"; \
- libsrcdir="$$s/libgloss"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libgloss"; \
+ libsrcdir="$$s/libgloss"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libgloss maybe-all-target-libgloss
maybe-all-target-libgloss:
all-target-libgloss: configure-target-libgloss
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libgloss && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libgloss && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
# Dummy target for uncheckable module.
.PHONY: check-target-libgloss
@@ -6454,10 +6451,10 @@ check-target-libgloss:
maybe-install-target-libgloss:
install-target-libgloss: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libgloss && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libgloss && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libiberty maybe-configure-target-libiberty
@@ -6466,98 +6463,98 @@ maybe-configure-target-libiberty:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libiberty/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libiberty ] || \
- mkdir $(TARGET_SUBDIR)/libiberty; \
+ mkdir $(TARGET_SUBDIR)/libiberty; \
rm -f $(TARGET_SUBDIR)/libiberty/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libiberty/multilib.out
configure-target-libiberty: $(TARGET_SUBDIR)/libiberty/multilib.out
@test ! -f $(TARGET_SUBDIR)/libiberty/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libiberty ] || \
- mkdir $(TARGET_SUBDIR)/libiberty;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libiberty; \
- cd "$(TARGET_SUBDIR)/libiberty" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libiberty ] || \
+ mkdir $(TARGET_SUBDIR)/libiberty;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libiberty; \
+ cd "$(TARGET_SUBDIR)/libiberty" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libiberty "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libiberty"; \
- libsrcdir="$$s/libiberty"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libiberty"; \
+ libsrcdir="$$s/libiberty"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libiberty maybe-all-target-libiberty
maybe-all-target-libiberty:
all-target-libiberty: configure-target-libiberty
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libiberty && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-libiberty
check-target-libiberty:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libiberty && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-libiberty maybe-install-target-libiberty
maybe-install-target-libiberty:
install-target-libiberty: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libiberty && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libiberty && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-gperf maybe-configure-target-gperf
@@ -6566,98 +6563,98 @@ maybe-configure-target-gperf:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/gperf/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/gperf ] || \
- mkdir $(TARGET_SUBDIR)/gperf; \
+ mkdir $(TARGET_SUBDIR)/gperf; \
rm -f $(TARGET_SUBDIR)/gperf/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/gperf/multilib.out
configure-target-gperf: $(TARGET_SUBDIR)/gperf/multilib.out
@test ! -f $(TARGET_SUBDIR)/gperf/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/gperf ] || \
- mkdir $(TARGET_SUBDIR)/gperf;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/gperf; \
- cd "$(TARGET_SUBDIR)/gperf" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/gperf ] || \
+ mkdir $(TARGET_SUBDIR)/gperf;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/gperf; \
+ cd "$(TARGET_SUBDIR)/gperf" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/gperf "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/gperf "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/gperf"; \
- libsrcdir="$$s/gperf"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/gperf"; \
+ libsrcdir="$$s/gperf"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-gperf maybe-all-target-gperf
maybe-all-target-gperf:
all-target-gperf: configure-target-gperf
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/gperf && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-gperf
check-target-gperf:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/gperf && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-gperf maybe-install-target-gperf
maybe-install-target-gperf:
install-target-gperf: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/gperf && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/gperf && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-examples maybe-configure-target-examples
@@ -6666,80 +6663,80 @@ maybe-configure-target-examples:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/examples/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/examples ] || \
- mkdir $(TARGET_SUBDIR)/examples; \
+ mkdir $(TARGET_SUBDIR)/examples; \
rm -f $(TARGET_SUBDIR)/examples/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/examples/multilib.out
configure-target-examples: $(TARGET_SUBDIR)/examples/multilib.out
@test ! -f $(TARGET_SUBDIR)/examples/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/examples ] || \
- mkdir $(TARGET_SUBDIR)/examples;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/examples; \
- cd "$(TARGET_SUBDIR)/examples" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/examples ] || \
+ mkdir $(TARGET_SUBDIR)/examples;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/examples; \
+ cd "$(TARGET_SUBDIR)/examples" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/examples "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/examples "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/examples"; \
- libsrcdir="$$s/examples"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/examples"; \
+ libsrcdir="$$s/examples"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-examples maybe-all-target-examples
maybe-all-target-examples:
all-target-examples: configure-target-examples
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/examples && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/examples && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
# Dummy target for uncheckable module.
.PHONY: check-target-examples
@@ -6758,98 +6755,98 @@ maybe-configure-target-libffi:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libffi/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libffi ] || \
- mkdir $(TARGET_SUBDIR)/libffi; \
+ mkdir $(TARGET_SUBDIR)/libffi; \
rm -f $(TARGET_SUBDIR)/libffi/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libffi/multilib.out
configure-target-libffi: $(TARGET_SUBDIR)/libffi/multilib.out
@test ! -f $(TARGET_SUBDIR)/libffi/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libffi ] || \
- mkdir $(TARGET_SUBDIR)/libffi;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libffi; \
- cd "$(TARGET_SUBDIR)/libffi" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libffi ] || \
+ mkdir $(TARGET_SUBDIR)/libffi;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libffi; \
+ cd "$(TARGET_SUBDIR)/libffi" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libffi "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libffi "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libffi"; \
- libsrcdir="$$s/libffi"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libffi"; \
+ libsrcdir="$$s/libffi"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libffi maybe-all-target-libffi
maybe-all-target-libffi:
all-target-libffi: configure-target-libffi
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libffi && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-libffi
check-target-libffi:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libffi && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-libffi maybe-install-target-libffi
maybe-install-target-libffi:
install-target-libffi: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libffi && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libffi && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-libjava maybe-configure-target-libjava
@@ -6858,99 +6855,99 @@ maybe-configure-target-libjava:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/libjava/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/libjava ] || \
- mkdir $(TARGET_SUBDIR)/libjava; \
+ mkdir $(TARGET_SUBDIR)/libjava; \
rm -f $(TARGET_SUBDIR)/libjava/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/libjava/multilib.out
configure-target-libjava: $(TARGET_SUBDIR)/libjava/multilib.out
@test ! -f $(TARGET_SUBDIR)/libjava/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/libjava ] || \
- mkdir $(TARGET_SUBDIR)/libjava;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
- CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/libjava; \
- cd "$(TARGET_SUBDIR)/libjava" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/libjava ] || \
+ mkdir $(TARGET_SUBDIR)/libjava;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
+ CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/libjava; \
+ cd "$(TARGET_SUBDIR)/libjava" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/libjava "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/libjava "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/libjava"; \
- libsrcdir="$$s/libjava"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/libjava"; \
+ libsrcdir="$$s/libjava"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-libjava maybe-all-target-libjava
maybe-all-target-libjava:
all-target-libjava: configure-target-libjava
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libjava && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' all)
.PHONY: check-target-libjava
check-target-libjava:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libjava && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' check)
.PHONY: install-target-libjava maybe-install-target-libjava
maybe-install-target-libjava:
install-target-libjava: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/libjava && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/libjava && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-zlib maybe-configure-target-zlib
@@ -6959,98 +6956,98 @@ maybe-configure-target-zlib:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/zlib/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/zlib ] || \
- mkdir $(TARGET_SUBDIR)/zlib; \
+ mkdir $(TARGET_SUBDIR)/zlib; \
rm -f $(TARGET_SUBDIR)/zlib/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/zlib/multilib.out
configure-target-zlib: $(TARGET_SUBDIR)/zlib/multilib.out
@test ! -f $(TARGET_SUBDIR)/zlib/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/zlib ] || \
- mkdir $(TARGET_SUBDIR)/zlib;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/zlib; \
- cd "$(TARGET_SUBDIR)/zlib" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/zlib ] || \
+ mkdir $(TARGET_SUBDIR)/zlib;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/zlib; \
+ cd "$(TARGET_SUBDIR)/zlib" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/zlib "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/zlib "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/zlib"; \
- libsrcdir="$$s/zlib"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/zlib"; \
+ libsrcdir="$$s/zlib"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-zlib maybe-all-target-zlib
maybe-all-target-zlib:
all-target-zlib: configure-target-zlib
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/zlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-zlib
check-target-zlib:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/zlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-zlib maybe-install-target-zlib
maybe-install-target-zlib:
install-target-zlib: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/zlib && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/zlib && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-boehm-gc maybe-configure-target-boehm-gc
@@ -7059,98 +7056,98 @@ maybe-configure-target-boehm-gc:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/boehm-gc/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/boehm-gc ] || \
- mkdir $(TARGET_SUBDIR)/boehm-gc; \
+ mkdir $(TARGET_SUBDIR)/boehm-gc; \
rm -f $(TARGET_SUBDIR)/boehm-gc/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/boehm-gc/multilib.out
configure-target-boehm-gc: $(TARGET_SUBDIR)/boehm-gc/multilib.out
@test ! -f $(TARGET_SUBDIR)/boehm-gc/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/boehm-gc ] || \
- mkdir $(TARGET_SUBDIR)/boehm-gc;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/boehm-gc; \
- cd "$(TARGET_SUBDIR)/boehm-gc" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/boehm-gc ] || \
+ mkdir $(TARGET_SUBDIR)/boehm-gc;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/boehm-gc; \
+ cd "$(TARGET_SUBDIR)/boehm-gc" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/boehm-gc "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/boehm-gc "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/boehm-gc"; \
- libsrcdir="$$s/boehm-gc"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/boehm-gc"; \
+ libsrcdir="$$s/boehm-gc"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-boehm-gc maybe-all-target-boehm-gc
maybe-all-target-boehm-gc:
all-target-boehm-gc: configure-target-boehm-gc
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/boehm-gc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-boehm-gc
check-target-boehm-gc:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/boehm-gc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-boehm-gc maybe-install-target-boehm-gc
maybe-install-target-boehm-gc:
install-target-boehm-gc: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/boehm-gc && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/boehm-gc && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-qthreads maybe-configure-target-qthreads
@@ -7159,98 +7156,98 @@ maybe-configure-target-qthreads:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/qthreads/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/qthreads ] || \
- mkdir $(TARGET_SUBDIR)/qthreads; \
+ mkdir $(TARGET_SUBDIR)/qthreads; \
rm -f $(TARGET_SUBDIR)/qthreads/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/qthreads/multilib.out
configure-target-qthreads: $(TARGET_SUBDIR)/qthreads/multilib.out
@test ! -f $(TARGET_SUBDIR)/qthreads/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/qthreads ] || \
- mkdir $(TARGET_SUBDIR)/qthreads;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/qthreads; \
- cd "$(TARGET_SUBDIR)/qthreads" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/qthreads ] || \
+ mkdir $(TARGET_SUBDIR)/qthreads;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/qthreads; \
+ cd "$(TARGET_SUBDIR)/qthreads" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/qthreads "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/qthreads "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/qthreads"; \
- libsrcdir="$$s/qthreads"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/qthreads"; \
+ libsrcdir="$$s/qthreads"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-qthreads maybe-all-target-qthreads
maybe-all-target-qthreads:
all-target-qthreads: configure-target-qthreads
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/qthreads && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-qthreads
check-target-qthreads:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/qthreads && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-qthreads maybe-install-target-qthreads
maybe-install-target-qthreads:
install-target-qthreads: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/qthreads && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/qthreads && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
.PHONY: configure-target-rda maybe-configure-target-rda
@@ -7259,98 +7256,98 @@ maybe-configure-target-rda:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/rda/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/rda ] || \
- mkdir $(TARGET_SUBDIR)/rda; \
+ mkdir $(TARGET_SUBDIR)/rda; \
rm -f $(TARGET_SUBDIR)/rda/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/rda/multilib.out
configure-target-rda: $(TARGET_SUBDIR)/rda/multilib.out
@test ! -f $(TARGET_SUBDIR)/rda/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/rda ] || \
- mkdir $(TARGET_SUBDIR)/rda;\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
- CXX="$(CXX_FOR_TARGET)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/rda; \
- cd "$(TARGET_SUBDIR)/rda" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/rda ] || \
+ mkdir $(TARGET_SUBDIR)/rda;\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/rda; \
+ cd "$(TARGET_SUBDIR)/rda" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/rda "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/rda "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/rda"; \
- libsrcdir="$$s/rda"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/rda"; \
+ libsrcdir="$$s/rda"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-rda maybe-all-target-rda
maybe-all-target-rda:
all-target-rda: configure-target-rda
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/rda && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) all)
.PHONY: check-target-rda
check-target-rda:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/rda && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) check)
.PHONY: install-target-rda maybe-install-target-rda
maybe-install-target-rda:
install-target-rda: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/rda && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/rda && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
@@ -7443,14 +7440,17 @@ bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean b
s=`cd $(srcdir); ${PWD}`; export s; \
case "$@" in \
*bootstrap4-lean ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3-lean ;; \
- *bootstrap4 ) msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3 ;; \
- *-lean ) msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare-lean ;; \
- * ) msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare ;; \
+ msg="Comparing stage3 and stage4 of the compiler"; \
+ compare=compare3-lean ;; \
+ *bootstrap4 ) \
+ msg="Comparing stage3 and stage4 of the compiler"; \
+ compare=compare3 ;; \
+ *-lean ) \
+ msg="Comparing stage2 and stage3 of the compiler"; \
+ compare=compare-lean ;; \
+ * ) \
+ msg="Comparing stage2 and stage3 of the compiler"; \
+ compare=compare ;; \
esac; \
$(SET_LIB_PATH) \
echo "$$msg"; \
@@ -7689,10 +7689,10 @@ config.status: configure $(gcc_version_trigger)
AUTOCONF = autoconf
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in $(srcdir)/config/acx.m4
cd $(srcdir) && $(AUTOCONF)
-#
-.NOEXPORT:
-MAKEOVERRIDES=
+# ------------------------------
+# Special directives to GNU Make
+# ------------------------------
# Tell GNU make 3.79 not to run the top level in parallel. This
# prevents contention for $builddir/$target/config.cache, as well
@@ -7700,4 +7700,8 @@ MAKEOVERRIDES=
NOTPARALLEL = .NOTPARALLEL
$(NOTPARALLEL):
+# Don't pass command-line variables to submakes.
+.NOEXPORT:
+MAKEOVERRIDES=
+
# end of Makefile.in
diff --git a/Makefile.tpl b/Makefile.tpl
index da97de8692e..9bb5ba5f914 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -87,9 +87,6 @@ INSTALL_DATA = $(INSTALL) -m 644
# -------------------------------------------------
links=@configlinks@
-enable_shared = @enable_shared@
-enable_threads = @enable_threads@
-enable_version_specific_runtime_libs = @enable_version_specific_runtime_libs@
# The file containing GCC's version number.
gcc_version_trigger = @gcc_version_trigger@
gcc_version = @gcc_version@
@@ -486,7 +483,7 @@ EXTRA_HOST_FLAGS = \
'DLLTOOL=$(DLLTOOL)' \
'LD=$(LD)' \
'NM=$(NM)' \
- "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \
+ 'RANLIB=$(RANLIB)' \
'WINDRES=$(WINDRES)'
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)
@@ -540,7 +537,7 @@ EXTRA_GCC_FLAGS = \
'BUILD_PREFIX=$(BUILD_PREFIX)' \
'BUILD_PREFIX_1=$(BUILD_PREFIX_1)' \
'NM=$(NM)' \
- "`echo 'RANLIB=$(RANLIB)' | sed -e s/.*=$$/XFOO=/`" \
+ 'RANLIB=$(RANLIB)' \
'WINDRES=$$(WINDRES_FOR_TARGET)' \
"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
@@ -619,7 +616,7 @@ do-[+target+]:
(cd ./$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
[+target+]) \
|| exit 1; \
@@ -637,7 +634,7 @@ do-[+target+]:
(cd $(TARGET_SUBDIR)/$$i && \
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
- "`echo \"RANLIB=$${RANLIB}\" | sed -e 's/.*=$$/XFOO=/'`" \
+ "RANLIB=$${RANLIB}" \
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" \
[+target+]) \
|| exit 1; \
@@ -820,70 +817,70 @@ TAGS: do-TAGS
maybe-configure-build-[+module+]:
configure-build-[+module+]:
@test ! -f $(BUILD_SUBDIR)/[+module+]/Makefile || exit 0; \
- [ -d $(BUILD_SUBDIR)/[+module+] ] || \
- mkdir $(BUILD_SUBDIR)/[+module+];\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- AR="$(AR_FOR_BUILD)"; export AR; \
- AS="$(AS_FOR_BUILD)"; export AS; \
- CC="$(CC_FOR_BUILD)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
- CXX="$(CXX_FOR_BUILD)"; export CXX; \
- CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
- LD="$(LD_FOR_BUILD)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
- NM="$(NM_FOR_BUILD)"; export NM; \
- RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
- echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
- cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(BUILD_SUBDIR)" in \
+ [ -d $(BUILD_SUBDIR)/[+module+] ] || \
+ mkdir $(BUILD_SUBDIR)/[+module+];\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ AR="$(AR_FOR_BUILD)"; export AR; \
+ AS="$(AS_FOR_BUILD)"; export AS; \
+ CC="$(CC_FOR_BUILD)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
+ CXX="$(CXX_FOR_BUILD)"; export CXX; \
+ CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
+ LD="$(LD_FOR_BUILD)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
+ NM="$(NM_FOR_BUILD)"; export NM; \
+ RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
+ echo Configuring in $(BUILD_SUBDIR)/[+module+]; \
+ cd "$(BUILD_SUBDIR)/[+module+]" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(BUILD_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(BUILD_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(BUILD_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(BUILD_CONFIGARGS) $${srcdiroption} \
- --with-build-subdir="$(BUILD_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(BUILD_CONFIGARGS) $${srcdiroption} \
+ --with-build-subdir="$(BUILD_SUBDIR)" \
+ || exit 1
.PHONY: all-build-[+module+] maybe-all-build-[+module+]
maybe-all-build-[+module+]:
all-build-[+module+]: configure-build-[+module+]
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- (cd $(BUILD_SUBDIR)/[+module+] && $(MAKE) all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ (cd $(BUILD_SUBDIR)/[+module+] && $(MAKE) all)
[+ ENDFOR build_modules +]
# --------------------------------------
@@ -934,12 +931,12 @@ configure-[+module+]:
maybe-all-[+module+]:
all-[+module+]: configure-[+module+]
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
- IF with_x
- +] $(X11_FLAGS_TO_PASS)[+
- ENDIF with_x +] all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
+ IF with_x
+ +] $(X11_FLAGS_TO_PASS)[+
+ ENDIF with_x +] all)
[+ IF no_check +]
.PHONY: check-[+module+]
@@ -949,24 +946,24 @@ check-[+module+]:
# This module is only tested in a native toolchain.
check-[+module+]:
@if [ '$(host_canonical)' = '$(target_canonical)' ] ; then \
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
- IF with_x
- +] $(X11_FLAGS_TO_PASS)[+
- ENDIF with_x +] check); \
- fi
-[+ ELSE check +]
-.PHONY: check-[+module+]
-check-[+module+]:
- @r=`${PWD}`; export r; \
+ r=`${PWD}`; export r; \
s=`cd $(srcdir); ${PWD}`; export s; \
$(SET_LIB_PATH) \
(cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
IF with_x
+] $(X11_FLAGS_TO_PASS)[+
- ENDIF with_x +] check)
+ ENDIF with_x +] check); \
+ fi
+[+ ELSE check +]
+.PHONY: check-[+module+]
+check-[+module+]:
+ @r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
+ IF with_x
+ +] $(X11_FLAGS_TO_PASS)[+
+ ENDIF with_x +] check)
[+ ENDIF no_check +]
[+ IF no_install +]
@@ -978,12 +975,12 @@ install-[+module+]:
maybe-install-[+module+]:
install-[+module+]: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
- IF with_x
- +] $(X11_FLAGS_TO_PASS)[+
- ENDIF with_x +] install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd [+module+] && $(MAKE) $(FLAGS_TO_PASS)[+
+ IF with_x
+ +] $(X11_FLAGS_TO_PASS)[+
+ ENDIF with_x +] install)
[+ ENDIF no_install +]
[+ ENDFOR host_modules +]
@@ -997,89 +994,89 @@ maybe-configure-target-[+module+]:
# There's only one multilib.out. Cleverer subdirs shouldn't need it copied.
$(TARGET_SUBDIR)/[+module+]/multilib.out: multilib.out
@[ -d $(TARGET_SUBDIR)/[+module+] ] || \
- mkdir $(TARGET_SUBDIR)/[+module+]; \
+ mkdir $(TARGET_SUBDIR)/[+module+]; \
rm -f $(TARGET_SUBDIR)/[+module+]/Makefile || : ; \
cp multilib.out $(TARGET_SUBDIR)/[+module+]/multilib.out
configure-target-[+module+]: $(TARGET_SUBDIR)/[+module+]/multilib.out
@test ! -f $(TARGET_SUBDIR)/[+module+]/Makefile || exit 0; \
- [ -d $(TARGET_SUBDIR)/[+module+] ] || \
- mkdir $(TARGET_SUBDIR)/[+module+];\
- r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- AR="$(AR_FOR_TARGET)"; export AR; \
- AS="$(AS_FOR_TARGET)"; export AS; \
- CC="$(CC_FOR_TARGET)"; export CC; \
- CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
- CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \[+
- IF raw_cxx +]
- CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
- CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \[+
- ELSE normal_cxx +]
- CXX="$(CXX_FOR_TARGET)"; export CXX; \[+
- ENDIF raw_cxx +]
- CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
- GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
- DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
- LD="$(LD_FOR_TARGET)"; export LD; \
- LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
- NM="$(NM_FOR_TARGET)"; export NM; \
- RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
- WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
- echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
- cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
- case $(srcdir) in \
- /* | [A-Za-z]:[\\/]*) \
- topdir=$(srcdir) ;; \
- *) \
- case "$(TARGET_SUBDIR)" in \
+ [ -d $(TARGET_SUBDIR)/[+module+] ] || \
+ mkdir $(TARGET_SUBDIR)/[+module+];\
+ r=`${PWD}`; export r; \
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ AR="$(AR_FOR_TARGET)"; export AR; \
+ AS="$(AS_FOR_TARGET)"; export AS; \
+ CC="$(CC_FOR_TARGET)"; export CC; \
+ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
+ CPPFLAGS="$(CFLAGS_FOR_TARGET)"; export CPPFLAGS; \[+
+IF raw_cxx +]
+ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
+ CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \[+
+ELSE normal_cxx +]
+ CXX="$(CXX_FOR_TARGET)"; export CXX; \[+
+ENDIF raw_cxx +]
+ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
+ GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \
+ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
+ LD="$(LD_FOR_TARGET)"; export LD; \
+ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
+ NM="$(NM_FOR_TARGET)"; export NM; \
+ RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
+ WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
+ echo Configuring in $(TARGET_SUBDIR)/[+module+]; \
+ cd "$(TARGET_SUBDIR)/[+module+]" || exit 1; \
+ case $(srcdir) in \
+ /* | [A-Za-z]:[\\/]*) \
+ topdir=$(srcdir) ;; \
+ *) \
+ case "$(TARGET_SUBDIR)" in \
.) topdir="../$(srcdir)" ;; \
*) topdir="../../$(srcdir)" ;; \
- esac ;; \
- esac; \
- if [ "$(srcdir)" = "." ] ; then \
- if [ "$(TARGET_SUBDIR)" != "." ] ; then \
- if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
- if [ -f Makefile ]; then \
- if $(MAKE) distclean; then \
- true; \
- else \
- exit 1; \
- fi; \
- else \
- true; \
- fi; \
- else \
- exit 1; \
- fi; \
+ esac ;; \
+ esac; \
+ if [ "$(srcdir)" = "." ] ; then \
+ if [ "$(TARGET_SUBDIR)" != "." ] ; then \
+ if $(SHELL) $$s/symlink-tree $${topdir}/[+module+] "no-such-file" ; then \
+ if [ -f Makefile ]; then \
+ if $(MAKE) distclean; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
else \
- true; \
+ true; \
fi; \
- srcdiroption="--srcdir=."; \
- libsrcdir="."; \
else \
- srcdiroption="--srcdir=$${topdir}/[+module+]"; \
- libsrcdir="$$s/[+module+]"; \
+ exit 1; \
fi; \
- rm -f no-such-file || : ; \
- CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
- $(TARGET_CONFIGARGS) $${srcdiroption} \
- --with-target-subdir="$(TARGET_SUBDIR)" \
- || exit 1
+ else \
+ true; \
+ fi; \
+ srcdiroption="--srcdir=."; \
+ libsrcdir="."; \
+ else \
+ srcdiroption="--srcdir=$${topdir}/[+module+]"; \
+ libsrcdir="$$s/[+module+]"; \
+ fi; \
+ rm -f no-such-file || : ; \
+ CONFIG_SITE=no-such-file $(SHELL) $${libsrcdir}/configure \
+ $(TARGET_CONFIGARGS) $${srcdiroption} \
+ --with-target-subdir="$(TARGET_SUBDIR)" \
+ || exit 1
.PHONY: all-target-[+module+] maybe-all-target-[+module+]
maybe-all-target-[+module+]:
all-target-[+module+]: configure-target-[+module+]
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/[+module+] && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
- IF raw_cxx
- +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+
- ENDIF raw_cxx
- +] all)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/[+module+] && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
+ IF raw_cxx
+ +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+
+ ENDIF raw_cxx
+ +] all)
[+ IF no_check +]
# Dummy target for uncheckable module.
.PHONY: check-target-[+module+]
@@ -1088,14 +1085,14 @@ check-target-[+module+]:
.PHONY: check-target-[+module+]
check-target-[+module+]:
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/[+module+] && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
- IF raw_cxx
- +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+
- ENDIF raw_cxx
- +] check)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/[+module+] && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) [+
+ IF raw_cxx
+ +] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+
+ ENDIF raw_cxx
+ +] check)
[+ ENDIF no_check +]
[+ IF no_install +]
.PHONY: install-target-[+module+] maybe-install-target-[+module+]
@@ -1107,10 +1104,10 @@ install-target-[+module+]:
maybe-install-target-[+module+]:
install-target-[+module+]: installdirs
@r=`${PWD}`; export r; \
- s=`cd $(srcdir); ${PWD}`; export s; \
- $(SET_LIB_PATH) \
- (cd $(TARGET_SUBDIR)/[+module+] && \
- $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
+ s=`cd $(srcdir); ${PWD}`; export s; \
+ $(SET_LIB_PATH) \
+ (cd $(TARGET_SUBDIR)/[+module+] && \
+ $(MAKE) $(TARGET_FLAGS_TO_PASS) install)
[+ ENDIF no_install +]
[+ ENDFOR target_modules +]
@@ -1203,14 +1200,17 @@ bootstrap bootstrap-lean bootstrap2 bootstrap2-lean bootstrap3 bootstrap3-lean b
s=`cd $(srcdir); ${PWD}`; export s; \
case "$@" in \
*bootstrap4-lean ) \
- msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3-lean ;; \
- *bootstrap4 ) msg="Comparing stage3 and stage4 of the compiler"; \
- compare=compare3 ;; \
- *-lean ) msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare-lean ;; \
- * ) msg="Comparing stage2 and stage3 of the compiler"; \
- compare=compare ;; \
+ msg="Comparing stage3 and stage4 of the compiler"; \
+ compare=compare3-lean ;; \
+ *bootstrap4 ) \
+ msg="Comparing stage3 and stage4 of the compiler"; \
+ compare=compare3 ;; \
+ *-lean ) \
+ msg="Comparing stage2 and stage3 of the compiler"; \
+ compare=compare-lean ;; \
+ * ) \
+ msg="Comparing stage2 and stage3 of the compiler"; \
+ compare=compare ;; \
esac; \
$(SET_LIB_PATH) \
echo "$$msg"; \
@@ -1449,10 +1449,10 @@ config.status: configure $(gcc_version_trigger)
AUTOCONF = autoconf
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.in $(srcdir)/config/acx.m4
cd $(srcdir) && $(AUTOCONF)
-#
-.NOEXPORT:
-MAKEOVERRIDES=
+# ------------------------------
+# Special directives to GNU Make
+# ------------------------------
# Tell GNU make 3.79 not to run the top level in parallel. This
# prevents contention for $builddir/$target/config.cache, as well
@@ -1460,4 +1460,8 @@ MAKEOVERRIDES=
NOTPARALLEL = .NOTPARALLEL
$(NOTPARALLEL):
+# Don't pass command-line variables to submakes.
+.NOEXPORT:
+MAKEOVERRIDES=
+
# end of Makefile.in
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index 64ff38f169c..fc5cbe746a9 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,42 @@
+2003-03-22 Richard Henderson <rth@redhat.com>
+
+ * include/private/gc_locks.h [IA64]: Include ia64intrin.h.
+ (GC_test_and_set): Use __sync_lock_test_and_set.
+ (GC_clear): Use volatile assignment.
+ (GC_compare_and_exchange): Use __sync_bool_compare_and_swap.
+ (GC_memory_write_barrier): Use __sync_synchronize.
+
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Avoid trailing /. in toolexeclibdir.
+ * configure: Rebuilt.
+
+2003-03-04 Hans Boehm <Hans.Boehm@hp.com>
+ * include/private/gcconfig.h (GC_data_start): declare when needed.
+ * include/private/gc_priv.h: Include gcconfig.h after ptr_t
+ declaration.
+ * dyn_load.c (GC_register_dynamic_libraries_dl_iterate_phdr,
+ GC_register_dynlib_callback): Register main data for static
+ executable if dl_iterate_phdr() didn't.
+ * misc.c (GC_init_inner): Call GC_init_linux_data_start() even
+ if we don't expect to register main static data.
+
+2003-03-03 Hans Boehm <Hans.Boehm@hp.com>
+ * mark_rts.c (GC_cond_register_dynamic_libraries): add.
+ (GC_push_roots): explicitly mark free list headers, register
+ dynamic libraries only if !REGISTER_LIBRARIES_EARLY.
+ * alloc.c (GC_stopped_mark): Conditionally call
+ GC_cond_register_dynamic_libraries().
+ (GC_collect_a_little_inner, GC_try_to_collect_inner): Check GC_dont_gc.
+ * dyn_load.c (GC_register_main_static_data): define.
+ (GC_register_dyn_libraries (Linux /proc, Linux ELF versions)):
+ no longer skip main data.
+ * misc.c (GC_REGISTER_MAIN_STATIC_DATA): define.
+ (GC_init_inner): Make main data registration conditional.
+ * include/private/gc_priv.h (GC_register_main_static_data): declare.
+ * include/private/gcconfig.h (REGISTER_LIBRARIES_EARLY): define
+ for LINUX.
+
2003-02-20 Alexandre Oliva <aoliva@redhat.com>
* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
diff --git a/boehm-gc/alloc.c b/boehm-gc/alloc.c
index 8a413b275f8..f2e5af05720 100644
--- a/boehm-gc/alloc.c
+++ b/boehm-gc/alloc.c
@@ -306,6 +306,7 @@ void GC_maybe_gc()
GC_bool GC_try_to_collect_inner(stop_func)
GC_stop_func stop_func;
{
+ if (GC_dont_gc) return FALSE;
if (GC_incremental && GC_collection_in_progress()) {
# ifdef CONDPRINT
if (GC_print_stats) {
@@ -386,6 +387,7 @@ int n;
{
register int i;
+ if (GC_dont_gc) return;
if (GC_incremental && GC_collection_in_progress()) {
for (i = GC_deficit; i < GC_RATE*n; i++) {
if (GC_mark_some((ptr_t)0)) {
@@ -446,6 +448,9 @@ GC_stop_func stop_func;
CLOCK_TYPE start_time, current_time;
# endif
+# if defined(REGISTER_LIBRARIES_EARLY)
+ GC_cond_register_dynamic_libraries();
+# endif
STOP_WORLD();
# ifdef PRINTTIMES
GET_TIME(start_time);
diff --git a/boehm-gc/configure b/boehm-gc/configure
index f9bb29090e1..d8f00631534 100755
--- a/boehm-gc/configure
+++ b/boehm-gc/configure
@@ -3091,7 +3091,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexeclibdir='$(libdir)'
fi
-toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+esac
@@ -3167,34 +3171,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
-t quote
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output. A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
diff --git a/boehm-gc/configure.in b/boehm-gc/configure.in
index 029a8048c9d..9da20406414 100644
--- a/boehm-gc/configure.in
+++ b/boehm-gc/configure.in
@@ -275,7 +275,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexeclibdir='$(libdir)'
fi
-toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+esac
AC_SUBST(toolexecdir)
AC_SUBST(toolexeclibdir)
diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c
index d3ef572be68..71ad5fb1d78 100644
--- a/boehm-gc/dyn_load.c
+++ b/boehm-gc/dyn_load.c
@@ -355,10 +355,6 @@ void GC_register_dynamic_libraries()
/* Stack mapping; discard */
continue;
}
- if (start <= datastart && end > datastart && maj_dev != 0) {
- /* Main data segment; discard */
- continue;
- }
# ifdef THREADS
if (GC_segment_is_thread_stack(start, end)) continue;
# endif
@@ -384,6 +380,13 @@ void GC_register_dynamic_libraries()
}
}
+/* We now take care of the main data segment ourselves: */
+GC_bool GC_register_main_static_data()
+{
+ return FALSE;
+}
+
+# define HAVE_REGISTER_MAIN_STATIC_DATA
//
// parse_map_entry parses an entry from /proc/self/maps so we can
// locate all writable data segments that belong to shared libraries.
@@ -469,13 +472,6 @@ static int GC_register_dynlib_callback(info, size, ptr)
+ sizeof (info->dlpi_phnum))
return -1;
- /* Skip the first object - it is the main program. */
- if (*(int *)ptr == 0)
- {
- *(int *)ptr = 1;
- return 0;
- }
-
p = info->dlpi_phdr;
for( i = 0; i < (int)(info->dlpi_phnum); ((i++),(p++)) ) {
switch( p->p_type ) {
@@ -491,6 +487,7 @@ static int GC_register_dynlib_callback(info, size, ptr)
}
}
+ * (int *)ptr = 1; /* Signal that we were called */
return 0;
}
@@ -500,16 +497,31 @@ static int GC_register_dynlib_callback(info, size, ptr)
GC_bool GC_register_dynamic_libraries_dl_iterate_phdr()
{
- int tmp = 0;
-
if (dl_iterate_phdr) {
- dl_iterate_phdr(GC_register_dynlib_callback, &tmp);
+ int did_something = 0;
+ dl_iterate_phdr(GC_register_dynlib_callback, &did_something);
+ if (!did_something) {
+ /* dl_iterate_phdr may forget the static data segment in */
+ /* statically linked executables. */
+ GC_add_roots_inner(DATASTART, (char *)(DATAEND), TRUE);
+# if defined(DATASTART2)
+ GC_add_roots_inner(DATASTART2, (char *)(DATAEND2), TRUE);
+# endif
+ }
return TRUE;
} else {
return FALSE;
}
}
+/* Do we need to separately register the main static data segment? */
+GC_bool GC_register_main_static_data()
+{
+ return (dl_iterate_phdr == 0);
+}
+
+#define HAVE_REGISTER_MAIN_STATIC_DATA
+
# else /* !LINUX || version(glibc) < 2.2.4 */
/* Dynamic loading code for Linux running ELF. Somewhat tested on
@@ -775,10 +787,23 @@ void GC_register_dynamic_libraries()
}
# endif
-# ifndef MSWINCE
+# ifdef MSWINCE
+ /* Do we need to separately register the main static data segment? */
+ GC_bool GC_register_main_static_data()
+ {
+ return FALSE;
+ }
+# else /* win32 */
extern GC_bool GC_no_win32_dlls;
-# endif
+
+ GC_bool GC_register_main_static_data()
+ {
+ return GC_no_win32_dlls;
+ }
+# endif /* win32 */
+# define HAVE_REGISTER_MAIN_STATIC_DATA
+
void GC_register_dynamic_libraries()
{
MEMORY_BASIC_INFORMATION buf;
@@ -1079,4 +1104,15 @@ void GC_register_dynamic_libraries(){}
int GC_no_dynamic_loading;
#endif /* !PCR */
+
#endif /* !DYNAMIC_LOADING */
+
+#ifndef HAVE_REGISTER_MAIN_STATIC_DATA
+
+/* Do we need to separately register the main static data segment? */
+GC_bool GC_register_main_static_data()
+{
+ return TRUE;
+}
+#endif /* HAVE_REGISTER_MAIN_STATIC_DATA */
+
diff --git a/boehm-gc/include/private/gc_locks.h b/boehm-gc/include/private/gc_locks.h
index 33101f8c2d0..9b91ada917a 100644
--- a/boehm-gc/include/private/gc_locks.h
+++ b/boehm-gc/include/private/gc_locks.h
@@ -100,17 +100,13 @@
# define GC_TEST_AND_SET_DEFINED
# endif
# if defined(IA64)
+# include <ia64intrin.h>
inline static int GC_test_and_set(volatile unsigned int *addr) {
- long oldval, n = 1;
- __asm__ __volatile__("xchg4 %0=%1,%2"
- : "=r"(oldval), "=m"(*addr)
- : "r"(n), "1"(*addr) : "memory");
- return oldval;
+ return __sync_lock_test_and_set(addr, 1);
}
# define GC_TEST_AND_SET_DEFINED
- /* Should this handle post-increment addressing?? */
inline static void GC_clear(volatile unsigned int *addr) {
- __asm__ __volatile__("st4.rel %0=r0" : "=m" (*addr) : : "memory");
+ *addr = 0;
}
# define GC_CLEAR_DEFINED
# endif
@@ -326,20 +322,17 @@
# if defined(IA64)
# if !defined(GENERIC_COMPARE_AND_SWAP)
inline static GC_bool GC_compare_and_exchange(volatile GC_word *addr,
- GC_word old, GC_word new_val)
+ GC_word old,
+ GC_word new_val)
{
- unsigned long oldval;
- __asm__ __volatile__("mov ar.ccv=%4 ;; cmpxchg8.rel %0=%1,%2,ar.ccv"
- : "=r"(oldval), "=m"(*addr)
- : "r"(new_val), "1"(*addr), "r"(old) : "memory");
- return (oldval == old);
+ return __sync_bool_compare_and_swap (addr, old, new_val);
}
# endif /* !GENERIC_COMPARE_AND_SWAP */
# if 0
/* Shouldn't be needed; we use volatile stores instead. */
inline static void GC_memory_write_barrier()
{
- __asm__ __volatile__("mf" : : : "memory");
+ __sync_synchronize ();
}
# endif /* 0 */
# endif /* IA64 */
diff --git a/boehm-gc/include/private/gc_priv.h b/boehm-gc/include/private/gc_priv.h
index 5465c78b6e4..b09c4840945 100644
--- a/boehm-gc/include/private/gc_priv.h
+++ b/boehm-gc/include/private/gc_priv.h
@@ -44,10 +44,6 @@
# include "../gc_mark.h"
# endif
-# ifndef GCCONFIG_H
-# include "gcconfig.h"
-# endif
-
typedef GC_word word;
typedef GC_signed_word signed_word;
@@ -60,6 +56,10 @@ typedef char * ptr_t; /* A generic pointer to which we can add */
/* Preferably identical to caddr_t, if it */
/* exists. */
+# ifndef GCCONFIG_H
+# include "gcconfig.h"
+# endif
+
# ifndef HEADERS_H
# include "gc_hdrs.h"
# endif
@@ -1462,6 +1462,11 @@ GC_bool GC_is_tmp_root GC_PROTO((ptr_t p));
# endif
void GC_register_dynamic_libraries GC_PROTO((void));
/* Add dynamic library data sections to the root set. */
+
+GC_bool GC_register_main_static_data GC_PROTO((void));
+ /* We need to register the main data segment. Returns */
+ /* TRUE unless this is done implicitly as part of */
+ /* dynamic library registration. */
/* Machine dependent startup routines */
ptr_t GC_get_stack_base GC_PROTO((void)); /* Cold end of stack */
diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h
index f71bb9813ed..51d9de0186c 100644
--- a/boehm-gc/include/private/gcconfig.h
+++ b/boehm-gc/include/private/gcconfig.h
@@ -1801,6 +1801,19 @@
# define CACHE_LINE_SIZE 32 /* Wild guess */
# endif
+# ifdef LINUX
+# define REGISTER_LIBRARIES_EARLY
+ /* We sometimes use dl_iterate_phdr, which may acquire an internal */
+ /* lock. This isn't safe after the world has stopped. So we must */
+ /* call GC_register_dynamic_libraries before stopping the world. */
+ /* For performance reasons, this may be beneficial on other */
+ /* platforms as well, though it should be avoided in win32. */
+# endif /* LINUX */
+
+# if defined(SEARCH_FOR_DATA_START) && defined(GC_PRIVATE_H)
+ extern ptr_t GC_data_start;
+# endif
+
# ifndef CLEAR_DOUBLE
# define CLEAR_DOUBLE(x) \
((word*)x)[0] = 0; \
diff --git a/boehm-gc/mark_rts.c b/boehm-gc/mark_rts.c
index 628cba289ac..f663dcd55c3 100644
--- a/boehm-gc/mark_rts.c
+++ b/boehm-gc/mark_rts.c
@@ -506,6 +506,17 @@ void GC_push_gc_structures GC_PROTO((void))
void GC_mark_thread_local_free_lists();
#endif
+void GC_cond_register_dynamic_libraries()
+{
+# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \
+ || defined(PCR)) && !defined(SRC_M3)
+ GC_remove_tmp_roots();
+ if (!GC_no_dls) GC_register_dynamic_libraries();
+# else
+ GC_no_dls = TRUE;
+# endif
+}
+
/*
* Call the mark routines (GC_tl_push for a single pointer, GC_push_conditional
* on groups of pointers) on every top level accessible pointer.
@@ -519,19 +530,20 @@ void GC_push_roots(all, cold_gc_frame)
GC_bool all;
ptr_t cold_gc_frame;
{
- register int i;
+ int i;
+ int kind;
/*
* Next push static data. This must happen early on, since it's
* not robust against mark stack overflow.
*/
- /* Reregister dynamic libraries, in case one got added. */
-# if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \
- || defined(PCR)) && !defined(SRC_M3)
- GC_remove_tmp_roots();
- if (!GC_no_dls) GC_register_dynamic_libraries();
-# else
- GC_no_dls = TRUE;
+ /* Reregister dynamic libraries, in case one got added. */
+ /* There is some argument for doing this as late as possible, */
+ /* especially on win32, where it can change asynchronously. */
+ /* In those cases, we do it here. But on other platforms, it's */
+ /* not safe with the world stopped, so we do it earlier. */
+# if !defined(REGISTER_LIBRARIES_EARLY)
+ GC_cond_register_dynamic_libraries();
# endif
/* Mark everything in static data areas */
@@ -541,6 +553,18 @@ ptr_t cold_gc_frame;
GC_static_roots[i].r_end, all);
}
+ /* Mark all free list header blocks, if those were allocated from */
+ /* the garbage collected heap. This makes sure they don't */
+ /* disappear if we are not marking from static data. It also */
+ /* saves us the trouble of scanning them, and possibly that of */
+ /* marking the freelists. */
+ for (kind = 0; kind < GC_n_kinds; kind++) {
+ GC_PTR base = GC_base(GC_obj_kinds[kind].ok_freelist);
+ if (0 != base) {
+ GC_set_mark_bit(base);
+ }
+ }
+
/* Mark from GC internal roots if those might otherwise have */
/* been excluded. */
if (GC_no_dls || roots_were_cleared) {
diff --git a/boehm-gc/misc.c b/boehm-gc/misc.c
index f6079732fbf..8f83ff3ab53 100644
--- a/boehm-gc/misc.c
+++ b/boehm-gc/misc.c
@@ -75,6 +75,14 @@
#undef STACKBASE
#endif
+/* Dont unnecessarily call GC_register_main_static_data() in case */
+/* dyn_load.c isn't linked in. */
+#ifdef DYNAMIC_LOADING
+# define GC_REGISTER_MAIN_STATIC_DATA() GC_register_main_static_data()
+#else
+# define GC_REGISTER_MAIN_STATIC_DATA() TRUE
+#endif
+
GC_FAR struct _GC_arrays GC_arrays /* = { 0 } */;
@@ -619,7 +627,7 @@ void GC_init_inner()
/* Add initial guess of root sets. Do this first, since sbrk(0) */
/* might be used. */
- GC_register_data_segments();
+ if (GC_REGISTER_MAIN_STATIC_DATA()) GC_register_data_segments();
GC_init_headers();
GC_bl_init();
GC_mark_init();
diff --git a/config/ChangeLog b/config/ChangeLog
index 15c7c3e0ae3..091f6fd71c0 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * mh-dgux: Delete.
+
2002-12-28 Alexandre Oliva <aoliva@redhat.com>
* acx.m4: Name cache variables properly.
diff --git a/config/mh-dgux b/config/mh-dgux
deleted file mode 100644
index b55fb2fe0b5..00000000000
--- a/config/mh-dgux
+++ /dev/null
@@ -1,2 +0,0 @@
-RANLIB=true
-
diff --git a/configure b/configure
index 69d7fa29652..0a02396db58 100755
--- a/configure
+++ b/configure
@@ -685,15 +685,6 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x,"
-# clear some things potentially inherited from environment.
-
-enable_threads=no
-enable_shared=no
-enable_libstdcxx_v3=yes
-floating_point=default
-gas=default
-x11=default
-
### we might need to use some other shell than /bin/sh for running subshells
### If we are on Windows, search for the shell. This will permit people
### to not have /bin/sh, but to be able to see /SOME/PATH/sh configure
@@ -728,15 +719,6 @@ esac
config_shell=${CONFIG_SHELL-/bin/sh}
-## this is a little touchy and won't always work, but...
-##
-## if the argv[[0]] starts with a slash then it is an absolute name that can (and
-## must) be used as is.
-##
-## otherwise, if argv[[0]] has no slash in it, we can assume that it is on the
-## path. Since PATH might include "." we also add `pwd` to the end of PATH.
-##
-
progname=$0
# if PWD already has a value, it is probably wrong.
if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
@@ -797,8 +779,6 @@ fi
#
host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl tix libgui zlib libbanshee"
-libstdcxx_version="target-libstdc++-v3"
-
# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
# know that we are building the simulator.
@@ -819,7 +799,7 @@ libgcj="target-libffi \
target_libs="target-libiberty \
target-libgloss \
target-newlib \
- ${libstdcxx_version} \
+ target-libstdc++-v3 \
target-libmudflap \
target-libf2c \
${libgcj} \
@@ -964,22 +944,22 @@ case "${host}" in
;;
i[3456]86-*-go32* | i[3456]86-*-msdosdjgpp*)
noconfigdirs="tcl tk expect dejagnu send-pr uudecode guile itcl tix gnuserv libffi"
- ;;
+ ;;
i[3456]86-*-mingw32*)
# noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl tix gnuserv"
- noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
- ;;
+ noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
+ ;;
i[3456]86-*-beos*)
- noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
- ;;
+ noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
+ ;;
*-*-cygwin*)
- noconfigdirs="autoconf automake send-pr rcs guile perl"
+ noconfigdirs="autoconf automake send-pr rcs guile perl"
;;
*-*-netbsd*)
noconfigdirs="rcs"
;;
ppc*-*-pe)
- noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
+ noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
;;
powerpc-*-beos*)
noconfigdirs="$noconfigdirs tk itcl tix libgui gdb dejagnu readline"
@@ -1018,7 +998,7 @@ case "${target}" in
;;
*-*-kaos*)
# Remove unsupported stuff on all kaOS configurations.
- skipdirs="target-libiberty ${libgcj} ${libstdcxx_version} target-libf2c target-librx"
+ skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-libf2c target-librx"
skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
noconfigdirs="$noconfigdirs target-libgloss"
@@ -1036,7 +1016,7 @@ case "${target}" in
esac
;;
*-*-netware)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-newlib target-libiberty target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-newlib target-libiberty target-libgloss ${libgcj}"
;;
*-*-rtems*)
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -1080,11 +1060,11 @@ case "${target}" in
noconfigdirs="$noconfigdirs tcl tix tk itcl libgui sim"
noconfigdirs="$noconfigdirs expect dejagnu"
# the C++ libraries don't build on top of CE's C libraries
- noconfigdirs="$noconfigdirs ${libstdcxx_version}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3"
noconfigdirs="$noconfigdirs target-newlib"
case "${host}" in
*-*-cygwin*) ;; # keep gdb and readline
- *) noconfigdirs="$noconfigdirs gdb readline ${libstdcxx_version}"
+ *) noconfigdirs="$noconfigdirs gdb readline"
;;
esac
;;
@@ -1119,19 +1099,19 @@ case "${target}" in
noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
;;
avr-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
c4x-*-* | tic4x-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
c54x*-*-* | tic54x-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} gcc gdb newlib"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
;;
cris-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
;;
d10v-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
d30v-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
@@ -1146,7 +1126,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libgloss"
;;
h8500-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} target-libf2c"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} target-libf2c"
;;
hppa*64*-*-linux* | parisc*64*-*-linux*)
# In this case, it's because the hppa64-linux target is for
@@ -1192,7 +1172,7 @@ case "${target}" in
# This section makes it possible to build newlib natively on linux.
# If we are using a cross compiler then don't configure newlib.
if test x${is_cross_compiler} != xno ; then
- noconfigdirs="$noconfigdirs target-newlib"
+ noconfigdirs="$noconfigdirs target-newlib"
fi
noconfigdirs="$noconfigdirs target-libgloss"
# If we are not using a cross compiler, do configure newlib.
@@ -1225,7 +1205,7 @@ case "${target}" in
esac
;;
i[3456]86-*-pe)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
i[3456]86-*-sco3.2v5*)
# The linker does not yet know about weak symbols in COFF,
@@ -1242,10 +1222,10 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
;;
i[3456]86-*-beos*)
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
- ;;
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
+ ;;
m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
m68k-*-elf*)
noconfigdirs="$noconfigdirs ${libgcj}"
@@ -1323,7 +1303,7 @@ case "${target}" in
;;
mipstx39-*-*)
noconfigdirs="$noconfigdirs gprof ${libgcj}" # same as generic mips
- ;;
+ ;;
mips*-*-linux*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
;;
@@ -1365,7 +1345,7 @@ case "${target}" in
sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
;;
v810-*-*)
- noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
;;
v850-*-*)
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -1383,7 +1363,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
;;
ip2k-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
*-*-linux*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
@@ -1409,19 +1389,19 @@ esac
# go away some day.
# NB: embedded tabs in this IF block -- do not untabify
if test x"${enable_languages+set}" != xset; then
- if test x"${LANGUAGES+set}" = xset; then
- enable_languages="${LANGUAGES}"
- echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
- else
- enable_languages=all
- fi
+ if test x"${LANGUAGES+set}" = xset; then
+ enable_languages="${LANGUAGES}"
+ echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
+ else
+ enable_languages=all
+ fi
else
- if test x"${enable_languages}" = x ||
- test x"${enable_languages}" = xyes;
- then
- echo configure.in: --enable-languages needs at least one language argument 1>&2
- exit 1
- fi
+ if test x"${enable_languages}" = x ||
+ test x"${enable_languages}" = xyes;
+ then
+ echo configure.in: --enable-languages needs at least one language argument 1>&2
+ exit 1
+ fi
fi
enable_languages=`echo "${enable_languages}" | sed -e 's/[ ,][ ,]*/,/g' -e 's/,$//'`
@@ -1430,64 +1410,60 @@ enable_languages=`echo "${enable_languages}" | sed -e 's/[ ,][ ,]*/,/g' -e 's/
# front ends it requires, even if some are required indirectly.
for lang in ${srcdir}/gcc/*/config-lang.in ..
do
- case $lang in
- ..)
- ;;
+ case $lang in
+ ..) ;;
# The odd quoting in the next line works around
# an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[*]/config-lang.in)
- ;;
+ ${srcdir}/gcc/[*]/config-lang.in) ;;
*)
- lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
- this_lang_requires=`sed -n -e 's,^lang_requires=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_requires=\([^ ]*\).*$,\1,p' $lang`
- for other in $this_lang_requires
- do
- case ,${enable_languages}, in
- *,$other,*)
- ;;
- *,all,*)
- ;;
- *,$lang_alias,*)
- echo " \`$other' language required by \`$lang_alias'; enabling" 1>&2
- enable_languages="$enable_languages,$other"
- ;;
- esac
- done
- ;;
- esac
+ lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
+ this_lang_requires=`sed -n -e 's,^lang_requires=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_requires=\([^ ]*\).*$,\1,p' $lang`
+ for other in $this_lang_requires
+ do
+ case ,${enable_languages}, in
+ *,$other,*) ;;
+ *,all,*) ;;
+ *,$lang_alias,*)
+ echo " \`$other' language required by \`$lang_alias'; enabling" 1>&2
+ enable_languages="$enable_languages,$other"
+ ;;
+ esac
+ done
+ ;;
+ esac
done
subdirs=
for lang in ${srcdir}/gcc/*/config-lang.in ..
do
- case $lang in
- ..) ;;
- # The odd quoting in the next line works around
- # an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[*]/config-lang.in) ;;
- *)
- lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
- this_lang_libs=`sed -n -e 's,^target_libs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^target_libs=\([^ ]*\).*$,\1,p' $lang`
- this_lang_dirs=`sed -n -e 's,^lang_dirs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_dirs=\([^ ]*\).*$,\1,p' $lang`
- build_by_default=`sed -n -e 's,^build_by_default=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^build_by_default=\([^ ]*\).*$,\1,p' $lang`
- if test "x$lang_alias" = x
- then
- echo "$lang doesn't set \$language." 1>&2
- exit 1
- fi
- case ${build_by_default},${enable_languages}, in
- *,$lang_alias,*) add_this_lang=yes ;;
- no,*) add_this_lang=no ;;
- *,all,*) add_this_lang=yes ;;
- *) add_this_lang=no ;;
- esac
- if test x"${add_this_lang}" = xyes; then
- eval target_libs='"$target_libs "'\"$this_lang_libs\"
- else
- eval noconfigdirs='"$noconfigdirs "'\"$this_lang_libs $this_lang_dirs\"
- fi
- ;;
- esac
+ case $lang in
+ ..) ;;
+ # The odd quoting in the next line works around
+ # an apparent bug in bash 1.12 on linux.
+ ${srcdir}/gcc/[*]/config-lang.in) ;;
+ *)
+ lang_alias=`sed -n -e 's,^language=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^language=\([^ ]*\).*$,\1,p' $lang`
+ this_lang_libs=`sed -n -e 's,^target_libs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^target_libs=\([^ ]*\).*$,\1,p' $lang`
+ this_lang_dirs=`sed -n -e 's,^lang_dirs=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^lang_dirs=\([^ ]*\).*$,\1,p' $lang`
+ build_by_default=`sed -n -e 's,^build_by_default=['"'"'"'"]\(.*\)["'"'"'"'].*$,\1,p' -e 's,^build_by_default=\([^ ]*\).*$,\1,p' $lang`
+ if test "x$lang_alias" = x
+ then
+ echo "$lang doesn't set \$language." 1>&2
+ exit 1
+ fi
+ case ${build_by_default},${enable_languages}, in
+ *,$lang_alias,*) add_this_lang=yes ;;
+ no,*) add_this_lang=no ;;
+ *,all,*) add_this_lang=yes ;;
+ *) add_this_lang=no ;;
+ esac
+ if test x"${add_this_lang}" = xyes; then
+ eval target_libs='"$target_libs "'\"$this_lang_libs\"
+ else
+ eval noconfigdirs='"$noconfigdirs "'\"$this_lang_libs $this_lang_dirs\"
+ fi
+ ;;
+ esac
done
# Remove the entries in $skipdirs and $noconfigdirs from $configdirs and
@@ -1692,7 +1668,6 @@ case "${host}" in
;;
m88k-dg-dgux*)
tentative_cc="gcc -Wall -ansi -D__using_DGUX"
- host_makefile_frag="config/mh-dgux"
;;
m88k-harris-cxux*)
# Under CX/UX, we want to tell the compiler to use ANSI mode.
@@ -1914,25 +1889,6 @@ if echo " ${configdirs} " |grep " libbanshee " >/dev/null 2>&1; then
ac_configure_args="$ac_configure_args --with-libbanshee"
fi
-# We default to --with-shared on platforms where -fpic is meaningless.
-# Well, we don't yet, but we will.
-if false && test "${host}" = "${target}" && test x${enable_shared} = x ; then
- case "${target}" in
- alpha*-dec-osf*) enable_shared=yes ;;
- alpha*-*-linux*) enable_shared=yes ;;
- mips-sgi-irix5*) enable_shared=yes ;;
- *) enable_shared=no ;;
- esac
-fi
-
-case "${enable_shared}" in
- yes) shared=yes ;;
- no) shared=no ;;
- "") shared=no ;;
- *) shared=yes ;;
-esac
-
-
# Default to using --with-stabs for certain targets.
if test x${with_stabs} = x ; then
case "${target}" in
@@ -2249,12 +2205,6 @@ EOF
esac
fi
-# record if we want runtime library stuff installed in libsubdir.
-# Blank means no.
-if test -z "${enable_version_specific_runtime_libs}"; then
- enable_version_specific_runtime_libs=no
-fi
-
# Make sure that the compiler is able to generate an executable. If it
# can't, we are probably in trouble. We don't care whether we can run the
# executable--we might be using a cross compiler--we only care whether it
@@ -2307,12 +2257,10 @@ esac
# If --enable-shared was set, we must set LD_LIBRARY_PATH so that the
# binutils tools will find libbfd.so.
-if test "${shared}" = "yes" ; then
- SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)"
-else
- SET_LIB_PATH=
-fi
-
+case "${enable_shared}" in
+ no | "") SET_LIB_PATH= ;;
+ *) SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)" ;;
+esac
case "${host}" in
*-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
@@ -2528,30 +2476,19 @@ target_configargs="--cache-file=../config.cache --host=${target_alias} --build=$
# Note, if you change the default, make sure to fix both here and in
# the gcc and libstdc++-v3 subdirectories.
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
-gxx_include_dir=
-if test -n "${with_gxx_include_dir}"; then
- case "${with_gxx_include_dir}" in
- yes )
- echo "configure.in: error: bad value ${withval} given for g++ include directory" 1>&2
- exit 1
- ;;
- no )
- ;;
- * )
- gxx_include_dir=${with_gxx_include_dir}
- ;;
- esac
-fi
-if test x${gxx_include_dir} = x; then
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gxx_include_dir='${libsubdir}/include/c++'
- else
- . ${srcdir}/config.if
- gxx_include_dir='${prefix}/include/${libstdcxx_incdir}'
- fi
-else
- gxx_include_dir=${gxx_include_dir}
-fi
+case "${with_gxx_include_dir}" in
+ yes)
+ { echo "configure: error: --with-gxx-include-dir=[dir] requires a directory" 1>&2; exit 1; }
+ ;;
+ no | "")
+ case "${enable_version_specific_runtime_libs}" in
+ yes) gxx_include_dir='${libsubdir}/include/c++' ;;
+ *)
+ . ${srcdir}/config.if
+ gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
+ esac ;;
+ *) gxx_include_dir=${with_gxx_include_dir} ;;
+esac
FLAGS_FOR_TARGET=
case " $target_configdirs " in
@@ -2610,7 +2547,7 @@ esac
# being built; programs in there won't even run.
if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then
# Search for pre-installed headers if nothing else fits.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include'
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include'
fi
if test "x${use_gnu_ld}" = x &&
@@ -2709,9 +2646,6 @@ ospace_frag=${srcdir}/${ospace_frag}
-
-
-
# Build module lists & subconfigure args.
@@ -2754,7 +2688,7 @@ test -n "$target_alias" && ncn_target_tool_prefix=$target_alias-
# Extract the first word of "${ncn_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2758: checking for $ac_word" >&5
+echo "configure:2692: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2787,7 +2721,7 @@ if test -z "$ac_cv_prog_AR" ; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2791: checking for $ac_word" >&5
+echo "configure:2725: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2826,7 +2760,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2830: checking for $ac_word" >&5
+echo "configure:2764: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2859,7 +2793,7 @@ if test -z "$ac_cv_prog_AS" ; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2863: checking for $ac_word" >&5
+echo "configure:2797: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2898,7 +2832,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2902: checking for $ac_word" >&5
+echo "configure:2836: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2931,7 +2865,7 @@ if test -z "$ac_cv_prog_DLLTOOL" ; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2935: checking for $ac_word" >&5
+echo "configure:2869: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2970,7 +2904,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2974: checking for $ac_word" >&5
+echo "configure:2908: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3003,7 +2937,7 @@ if test -z "$ac_cv_prog_LD" ; then
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3007: checking for $ac_word" >&5
+echo "configure:2941: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3042,7 +2976,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3046: checking for $ac_word" >&5
+echo "configure:2980: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3075,7 +3009,7 @@ if test -z "$ac_cv_prog_NM" ; then
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3079: checking for $ac_word" >&5
+echo "configure:3013: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3114,7 +3048,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3118: checking for $ac_word" >&5
+echo "configure:3052: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3147,7 +3081,7 @@ if test -z "$ac_cv_prog_RANLIB" ; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3151: checking for $ac_word" >&5
+echo "configure:3085: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3186,7 +3120,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3190: checking for $ac_word" >&5
+echo "configure:3124: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3219,7 +3153,7 @@ if test -z "$ac_cv_prog_WINDRES" ; then
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3223: checking for $ac_word" >&5
+echo "configure:3157: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3258,7 +3192,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}objcopy", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3262: checking for $ac_word" >&5
+echo "configure:3196: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3291,7 +3225,7 @@ if test -z "$ac_cv_prog_OBJCOPY" ; then
# Extract the first word of "objcopy", so it can be a program name with args.
set dummy objcopy; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3295: checking for $ac_word" >&5
+echo "configure:3229: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJCOPY'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3330,7 +3264,7 @@ fi
# Extract the first word of "${ncn_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ncn_tool_prefix}objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3334: checking for $ac_word" >&5
+echo "configure:3268: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3363,7 +3297,7 @@ if test -z "$ac_cv_prog_OBJDUMP" ; then
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3367: checking for $ac_word" >&5
+echo "configure:3301: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3411,7 +3345,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ar", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3415: checking for $ac_word" >&5
+echo "configure:3349: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3444,7 +3378,7 @@ if test -z "$ac_cv_prog_AR_FOR_TARGET" ; then
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3448: checking for $ac_word" >&5
+echo "configure:3382: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AR_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3483,7 +3417,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}as", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3487: checking for $ac_word" >&5
+echo "configure:3421: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3516,7 +3450,7 @@ if test -z "$ac_cv_prog_AS_FOR_TARGET" ; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3520: checking for $ac_word" >&5
+echo "configure:3454: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_AS_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3555,7 +3489,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3559: checking for $ac_word" >&5
+echo "configure:3493: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3588,7 +3522,7 @@ if test -z "$ac_cv_prog_DLLTOOL_FOR_TARGET" ; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3592: checking for $ac_word" >&5
+echo "configure:3526: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_DLLTOOL_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3627,7 +3561,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ld", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3631: checking for $ac_word" >&5
+echo "configure:3565: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3660,7 +3594,7 @@ if test -z "$ac_cv_prog_LD_FOR_TARGET" ; then
# Extract the first word of "ld", so it can be a program name with args.
set dummy ld; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3664: checking for $ac_word" >&5
+echo "configure:3598: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_LD_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3699,7 +3633,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}nm", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3703: checking for $ac_word" >&5
+echo "configure:3637: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3732,7 +3666,7 @@ if test -z "$ac_cv_prog_NM_FOR_TARGET" ; then
# Extract the first word of "nm", so it can be a program name with args.
set dummy nm; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3736: checking for $ac_word" >&5
+echo "configure:3670: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_NM_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3771,7 +3705,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3775: checking for $ac_word" >&5
+echo "configure:3709: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3804,7 +3738,7 @@ if test -z "$ac_cv_prog_RANLIB_FOR_TARGET" ; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3808: checking for $ac_word" >&5
+echo "configure:3742: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_RANLIB_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3843,7 +3777,7 @@ fi
# Extract the first word of "${ncn_target_tool_prefix}windres", so it can be a program name with args.
set dummy ${ncn_target_tool_prefix}windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3847: checking for $ac_word" >&5
+echo "configure:3781: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3876,7 +3810,7 @@ if test -z "$ac_cv_prog_WINDRES_FOR_TARGET" ; then
# Extract the first word of "windres", so it can be a program name with args.
set dummy windres; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3880: checking for $ac_word" >&5
+echo "configure:3814: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_ncn_cv_WINDRES_FOR_TARGET'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3943,7 +3877,7 @@ RANLIB_FOR_TARGET=${RANLIB_FOR_TARGET}${extra_ranlibflags_for_target}
NM_FOR_TARGET=${NM_FOR_TARGET}${extra_nmflags_for_target}
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:3947: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:3881: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@@ -4160,9 +4094,6 @@ s%@RPATH_ENVVAR@%$RPATH_ENVVAR%g
s%@BUILD_PREFIX@%$BUILD_PREFIX%g
s%@BUILD_PREFIX_1@%$BUILD_PREFIX_1%g
s%@configlinks@%$configlinks%g
-s%@enable_shared@%$enable_shared%g
-s%@enable_threads@%$enable_threads%g
-s%@enable_version_specific_runtime_libs@%$enable_version_specific_runtime_libs%g
s%@gcc_version_trigger@%$gcc_version_trigger%g
s%@gcc_version@%$gcc_version%g
s%@tooldir@%$tooldir%g
diff --git a/configure.in b/configure.in
index 930844b44e9..a7358d13c66 100644
--- a/configure.in
+++ b/configure.in
@@ -25,15 +25,6 @@ AC_ARG_PROGRAM
sinclude(config/acx.m4)
-# clear some things potentially inherited from environment.
-
-enable_threads=no
-enable_shared=no
-enable_libstdcxx_v3=yes
-floating_point=default
-gas=default
-x11=default
-
### we might need to use some other shell than /bin/sh for running subshells
### If we are on Windows, search for the shell. This will permit people
### to not have /bin/sh, but to be able to see /SOME/PATH/sh configure
@@ -68,15 +59,6 @@ esac
config_shell=${CONFIG_SHELL-/bin/sh}
-## this is a little touchy and won't always work, but...
-##
-## if the argv[[0]] starts with a slash then it is an absolute name that can (and
-## must) be used as is.
-##
-## otherwise, if argv[[0]] has no slash in it, we can assume that it is on the
-## path. Since PATH might include "." we also add `pwd` to the end of PATH.
-##
-
progname=$0
# if PWD already has a value, it is probably wrong.
if test -n "$PWD" ; then PWD=`${PWDCMD-pwd}`; fi
@@ -137,8 +119,6 @@ fi
#
host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl tix libgui zlib libbanshee"
-libstdcxx_version="target-libstdc++-v3"
-
# these tools are built for the host environment
# Note, the powerpc-eabi build depends on sim occurring before gdb in order to
# know that we are building the simulator.
@@ -159,7 +139,7 @@ libgcj="target-libffi \
target_libs="target-libiberty \
target-libgloss \
target-newlib \
- ${libstdcxx_version} \
+ target-libstdc++-v3 \
target-libmudflap \
target-libf2c \
${libgcj} \
@@ -304,22 +284,22 @@ case "${host}" in
;;
i[[3456]]86-*-go32* | i[[3456]]86-*-msdosdjgpp*)
noconfigdirs="tcl tk expect dejagnu send-pr uudecode guile itcl tix gnuserv libffi"
- ;;
+ ;;
i[[3456]]86-*-mingw32*)
# noconfigdirs="tcl tk expect dejagnu make texinfo bison patch flex byacc send-pr uudecode dejagnu diff guile perl itcl tix gnuserv"
- noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
- ;;
+ noconfigdirs="expect dejagnu autoconf automake send-pr rcs guile perl texinfo libtool"
+ ;;
i[[3456]]86-*-beos*)
- noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
- ;;
+ noconfigdirs="$noconfigdirs tk itcl tix libgui gdb"
+ ;;
*-*-cygwin*)
- noconfigdirs="autoconf automake send-pr rcs guile perl"
+ noconfigdirs="autoconf automake send-pr rcs guile perl"
;;
*-*-netbsd*)
noconfigdirs="rcs"
;;
ppc*-*-pe)
- noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
+ noconfigdirs="patch diff make tk tcl expect dejagnu autoconf automake texinfo bison send-pr gprof rcs guile perl itcl tix gnuserv"
;;
powerpc-*-beos*)
noconfigdirs="$noconfigdirs tk itcl tix libgui gdb dejagnu readline"
@@ -358,7 +338,7 @@ case "${target}" in
;;
*-*-kaos*)
# Remove unsupported stuff on all kaOS configurations.
- skipdirs="target-libiberty ${libgcj} ${libstdcxx_version} target-libf2c target-librx"
+ skipdirs="target-libiberty ${libgcj} target-libstdc++-v3 target-libf2c target-librx"
skipdirs="$skipdirs target-libobjc target-examples target-groff target-gperf"
skipdirs="$skipdirs zlib fastjar target-libjava target-boehm-gc target-zlib"
noconfigdirs="$noconfigdirs target-libgloss"
@@ -376,7 +356,7 @@ case "${target}" in
esac
;;
*-*-netware)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-newlib target-libiberty target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-newlib target-libiberty target-libgloss ${libgcj}"
;;
*-*-rtems*)
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -420,11 +400,11 @@ case "${target}" in
noconfigdirs="$noconfigdirs tcl tix tk itcl libgui sim"
noconfigdirs="$noconfigdirs expect dejagnu"
# the C++ libraries don't build on top of CE's C libraries
- noconfigdirs="$noconfigdirs ${libstdcxx_version}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3"
noconfigdirs="$noconfigdirs target-newlib"
case "${host}" in
*-*-cygwin*) ;; # keep gdb and readline
- *) noconfigdirs="$noconfigdirs gdb readline ${libstdcxx_version}"
+ *) noconfigdirs="$noconfigdirs gdb readline"
;;
esac
;;
@@ -459,19 +439,19 @@ case "${target}" in
noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}"
;;
avr-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
c4x-*-* | tic4x-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
c54x*-*-* | tic54x-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} gcc gdb newlib"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib"
;;
cris-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
;;
d10v-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
d30v-*-*)
noconfigdirs="$noconfigdirs ${libgcj}"
@@ -486,7 +466,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libgloss"
;;
h8500-*-*)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj} target-libf2c"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} target-libf2c"
;;
hppa*64*-*-linux* | parisc*64*-*-linux*)
# In this case, it's because the hppa64-linux target is for
@@ -532,7 +512,7 @@ case "${target}" in
# This section makes it possible to build newlib natively on linux.
# If we are using a cross compiler then don't configure newlib.
if test x${is_cross_compiler} != xno ; then
- noconfigdirs="$noconfigdirs target-newlib"
+ noconfigdirs="$noconfigdirs target-newlib"
fi
noconfigdirs="$noconfigdirs target-libgloss"
# If we are not using a cross compiler, do configure newlib.
@@ -565,7 +545,7 @@ case "${target}" in
esac
;;
i[[3456]]86-*-pe)
- noconfigdirs="$noconfigdirs ${libstdcxx_version} target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj}"
;;
i[[3456]]86-*-sco3.2v5*)
# The linker does not yet know about weak symbols in COFF,
@@ -582,10 +562,10 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
;;
i[[3456]]86-*-beos*)
- noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
- ;;
+ noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}"
+ ;;
m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
m68k-*-elf*)
noconfigdirs="$noconfigdirs ${libgcj}"
@@ -663,7 +643,7 @@ case "${target}" in
;;
mipstx39-*-*)
noconfigdirs="$noconfigdirs gprof ${libgcj}" # same as generic mips
- ;;
+ ;;
mips*-*-linux*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
;;
@@ -705,7 +685,7 @@ case "${target}" in
sparc-*-solaris* | sparc64-*-solaris* | sparcv9-*-solaris*)
;;
v810-*-*)
- noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld ${libstdcxx_version} opcodes target-libgloss ${libgcj}"
+ noconfigdirs="$noconfigdirs bfd binutils gas gcc gdb ld target-libstdc++-v3 opcodes target-libgloss ${libgcj}"
;;
v850-*-*)
noconfigdirs="$noconfigdirs target-libgloss ${libgcj}"
@@ -723,7 +703,7 @@ case "${target}" in
noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}"
;;
ip2k-*-*)
- noconfigdirs="$noconfigdirs target-libiberty ${libstdcxx_version} ${libgcj}"
+ noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}"
;;
*-*-linux*)
noconfigdirs="$noconfigdirs target-newlib target-libgloss"
@@ -749,19 +729,19 @@ esac
# go away some day.
# NB: embedded tabs in this IF block -- do not untabify
if test x"${enable_languages+set}" != xset; then
- if test x"${LANGUAGES+set}" = xset; then
- enable_languages="${LANGUAGES}"
- echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
- else
- enable_languages=all
- fi
+ if test x"${LANGUAGES+set}" = xset; then
+ enable_languages="${LANGUAGES}"
+ echo configure.in: warning: setting LANGUAGES is deprecated, use --enable-languages instead 1>&2
+ else
+ enable_languages=all
+ fi
else
- if test x"${enable_languages}" = x ||
- test x"${enable_languages}" = xyes;
- then
- echo configure.in: --enable-languages needs at least one language argument 1>&2
- exit 1
- fi
+ if test x"${enable_languages}" = x ||
+ test x"${enable_languages}" = xyes;
+ then
+ echo configure.in: --enable-languages needs at least one language argument 1>&2
+ exit 1
+ fi
fi
enable_languages=`echo "${enable_languages}" | sed -e 's/[[ ,]][[ ,]]*/,/g' -e 's/,$//'`
@@ -770,64 +750,60 @@ enable_languages=`echo "${enable_languages}" | sed -e 's/[[ ,]][[ ,]]*/,/g' -e
# front ends it requires, even if some are required indirectly.
for lang in ${srcdir}/gcc/*/config-lang.in ..
do
- case $lang in
- ..)
- ;;
+ case $lang in
+ ..) ;;
# The odd quoting in the next line works around
# an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[[*]]/config-lang.in)
- ;;
+ ${srcdir}/gcc/[[*]]/config-lang.in) ;;
*)
- lang_alias=`sed -n -e 's,^language=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^language=\([[^ ]]*\).*$,\1,p' $lang`
- this_lang_requires=`sed -n -e 's,^lang_requires=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^lang_requires=\([[^ ]]*\).*$,\1,p' $lang`
- for other in $this_lang_requires
- do
- case ,${enable_languages}, in
- *,$other,*)
- ;;
- *,all,*)
- ;;
- *,$lang_alias,*)
- echo " \`$other' language required by \`$lang_alias'; enabling" 1>&2
- enable_languages="$enable_languages,$other"
- ;;
- esac
- done
- ;;
- esac
+ lang_alias=`sed -n -e 's,^language=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^language=\([[^ ]]*\).*$,\1,p' $lang`
+ this_lang_requires=`sed -n -e 's,^lang_requires=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^lang_requires=\([[^ ]]*\).*$,\1,p' $lang`
+ for other in $this_lang_requires
+ do
+ case ,${enable_languages}, in
+ *,$other,*) ;;
+ *,all,*) ;;
+ *,$lang_alias,*)
+ echo " \`$other' language required by \`$lang_alias'; enabling" 1>&2
+ enable_languages="$enable_languages,$other"
+ ;;
+ esac
+ done
+ ;;
+ esac
done
subdirs=
for lang in ${srcdir}/gcc/*/config-lang.in ..
do
- case $lang in
- ..) ;;
- # The odd quoting in the next line works around
- # an apparent bug in bash 1.12 on linux.
- ${srcdir}/gcc/[[*]]/config-lang.in) ;;
- *)
- lang_alias=`sed -n -e 's,^language=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^language=\([[^ ]]*\).*$,\1,p' $lang`
- this_lang_libs=`sed -n -e 's,^target_libs=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^target_libs=\([[^ ]]*\).*$,\1,p' $lang`
- this_lang_dirs=`sed -n -e 's,^lang_dirs=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^lang_dirs=\([[^ ]]*\).*$,\1,p' $lang`
- build_by_default=`sed -n -e 's,^build_by_default=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^build_by_default=\([[^ ]]*\).*$,\1,p' $lang`
- if test "x$lang_alias" = x
- then
- echo "$lang doesn't set \$language." 1>&2
- exit 1
- fi
- case ${build_by_default},${enable_languages}, in
- *,$lang_alias,*) add_this_lang=yes ;;
- no,*) add_this_lang=no ;;
- *,all,*) add_this_lang=yes ;;
- *) add_this_lang=no ;;
- esac
- if test x"${add_this_lang}" = xyes; then
- eval target_libs='"$target_libs "'\"$this_lang_libs\"
- else
- eval noconfigdirs='"$noconfigdirs "'\"$this_lang_libs $this_lang_dirs\"
- fi
- ;;
- esac
+ case $lang in
+ ..) ;;
+ # The odd quoting in the next line works around
+ # an apparent bug in bash 1.12 on linux.
+ ${srcdir}/gcc/[[*]]/config-lang.in) ;;
+ *)
+ lang_alias=`sed -n -e 's,^language=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^language=\([[^ ]]*\).*$,\1,p' $lang`
+ this_lang_libs=`sed -n -e 's,^target_libs=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^target_libs=\([[^ ]]*\).*$,\1,p' $lang`
+ this_lang_dirs=`sed -n -e 's,^lang_dirs=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^lang_dirs=\([[^ ]]*\).*$,\1,p' $lang`
+ build_by_default=`sed -n -e 's,^build_by_default=[['"'"'"'"]]\(.*\)[["'"'"'"']].*$,\1,p' -e 's,^build_by_default=\([[^ ]]*\).*$,\1,p' $lang`
+ if test "x$lang_alias" = x
+ then
+ echo "$lang doesn't set \$language." 1>&2
+ exit 1
+ fi
+ case ${build_by_default},${enable_languages}, in
+ *,$lang_alias,*) add_this_lang=yes ;;
+ no,*) add_this_lang=no ;;
+ *,all,*) add_this_lang=yes ;;
+ *) add_this_lang=no ;;
+ esac
+ if test x"${add_this_lang}" = xyes; then
+ eval target_libs='"$target_libs "'\"$this_lang_libs\"
+ else
+ eval noconfigdirs='"$noconfigdirs "'\"$this_lang_libs $this_lang_dirs\"
+ fi
+ ;;
+ esac
done
# Remove the entries in $skipdirs and $noconfigdirs from $configdirs and
@@ -1032,7 +1008,6 @@ case "${host}" in
;;
m88k-dg-dgux*)
tentative_cc="gcc -Wall -ansi -D__using_DGUX"
- host_makefile_frag="config/mh-dgux"
;;
m88k-harris-cxux*)
# Under CX/UX, we want to tell the compiler to use ANSI mode.
@@ -1254,25 +1229,6 @@ if echo " ${configdirs} " |grep " libbanshee " >/dev/null 2>&1; then
ac_configure_args="$ac_configure_args --with-libbanshee"
fi
-# We default to --with-shared on platforms where -fpic is meaningless.
-# Well, we don't yet, but we will.
-if false && test "${host}" = "${target}" && test x${enable_shared} = x ; then
- case "${target}" in
- alpha*-dec-osf*) enable_shared=yes ;;
- alpha*-*-linux*) enable_shared=yes ;;
- mips-sgi-irix5*) enable_shared=yes ;;
- *) enable_shared=no ;;
- esac
-fi
-
-case "${enable_shared}" in
- yes) shared=yes ;;
- no) shared=no ;;
- "") shared=no ;;
- *) shared=yes ;;
-esac
-
-
# Default to using --with-stabs for certain targets.
if test x${with_stabs} = x ; then
case "${target}" in
@@ -1589,12 +1545,6 @@ EOF
esac
fi
-# record if we want runtime library stuff installed in libsubdir.
-# Blank means no.
-if test -z "${enable_version_specific_runtime_libs}"; then
- enable_version_specific_runtime_libs=no
-fi
-
# Make sure that the compiler is able to generate an executable. If it
# can't, we are probably in trouble. We don't care whether we can run the
# executable--we might be using a cross compiler--we only care whether it
@@ -1647,12 +1597,10 @@ esac
# If --enable-shared was set, we must set LD_LIBRARY_PATH so that the
# binutils tools will find libbfd.so.
-if test "${shared}" = "yes" ; then
- SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)"
-else
- SET_LIB_PATH=
-fi
-
+case "${enable_shared}" in
+ no | "") SET_LIB_PATH= ;;
+ *) SET_LIB_PATH="\$(REALLY_SET_LIB_PATH)" ;;
+esac
case "${host}" in
*-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;;
@@ -1867,30 +1815,19 @@ target_configargs="--cache-file=../config.cache --host=${target_alias} --build=$
# Note, if you change the default, make sure to fix both here and in
# the gcc and libstdc++-v3 subdirectories.
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
-gxx_include_dir=
-if test -n "${with_gxx_include_dir}"; then
- case "${with_gxx_include_dir}" in
- yes )
- echo "configure.in: error: bad value ${withval} given for g++ include directory" 1>&2
- exit 1
- ;;
- no )
- ;;
- * )
- gxx_include_dir=${with_gxx_include_dir}
- ;;
- esac
-fi
-if test x${gxx_include_dir} = x; then
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gxx_include_dir='${libsubdir}/include/c++'
- else
- . ${srcdir}/config.if
- gxx_include_dir='${prefix}/include/${libstdcxx_incdir}'
- fi
-else
- gxx_include_dir=${gxx_include_dir}
-fi
+case "${with_gxx_include_dir}" in
+ yes)
+ AC_MSG_ERROR([--with-gxx-include-dir=[[dir]] requires a directory])
+ ;;
+ no | "")
+ case "${enable_version_specific_runtime_libs}" in
+ yes) gxx_include_dir='${libsubdir}/include/c++' ;;
+ *)
+ . ${srcdir}/config.if
+ gxx_include_dir='${prefix}/include/'${libstdcxx_incdir} ;;
+ esac ;;
+ *) gxx_include_dir=${with_gxx_include_dir} ;;
+esac
FLAGS_FOR_TARGET=
case " $target_configdirs " in
@@ -1949,7 +1886,7 @@ esac
# being built; programs in there won't even run.
if test "${build}" = "${host}" && test -d ${srcdir}/gcc; then
# Search for pre-installed headers if nothing else fits.
- FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include'
+ FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$(build_tooldir)/bin/ -B$(build_tooldir)/lib/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include'
fi
if test "x${use_gnu_ld}" = x &&
@@ -2040,9 +1977,6 @@ AC_SUBST(RPATH_ENVVAR)
AC_SUBST(BUILD_PREFIX)
AC_SUBST(BUILD_PREFIX_1)
AC_SUBST(configlinks)
-AC_SUBST(enable_shared)
-AC_SUBST(enable_threads)
-AC_SUBST(enable_version_specific_runtime_libs)
AC_SUBST(gcc_version_trigger)
AC_SUBST(gcc_version)
AC_SUBST(tooldir)
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 229ec5e47da..257357097d6 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,16 @@
+2003-04-04 Mike Stump <mrs@apple.com>
+
+ * compare_tests: Fix exit status and be more flexible with spacing.
+
+2003-03-08 Phil Edwards <pme@gcc.gnu.org>
+
+ * test_summary: Add -h, print existing comments as help.
+
+2003-03-03 H.J. Lu <hjl@gnu.org>
+
+ * gcc_build: Use $GCC_CVS/$CVS instead of cvs.
+ * gcc_update: Likewise.
+
2003-01-19 Alexandre Oliva <aoliva@redhat.com>
* test_summary (configflags): Only use the first match. Remove
diff --git a/contrib/compare_tests b/contrib/compare_tests
index 7a1d76cb827..a7fc6711efb 100755
--- a/contrib/compare_tests
+++ b/contrib/compare_tests
@@ -2,14 +2,16 @@
# This script automatically test the given tool with the tool's test cases,
# reporting anything of interest.
-# exits with 1 if there is nothing of interest
-# exits with 0 if there is something interesting
+# exits with 0 if there is nothing of interest
+# exits with 1 if there is something interesting
# exits with 2 if an error occurred
# Give two .sum files to compare them
# Written by Mike Stump <mrs@cygnus.com>
+tool=gxx
+
tmp1=/tmp/$tool-testing.$$a
tmp2=/tmp/$tool-testing.$$b
now_s=/tmp/$tool-testing.$$d
@@ -26,13 +28,14 @@ sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" >$tmp2
before=$tmp1
now=$tmp2
+exit_status=0
trap "rm -f $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15
-sort +0.4 "$now" > "$now_s"
-sort +0.4 "$before" > "$before_s"
+sort -t ':' +1 "$now" > "$now_s"
+sort -t ':' +1 "$before" > "$before_s"
-grep '^FAIL' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^PASS' "$before_s" | sed 's/^....: //' | comm -12 $tmp1 - >$tmp2
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -40,10 +43,11 @@ if [ $? = 0 ]; then
echo
cat $tmp2
echo
+ exit_status=1
fi
-grep '^PASS' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^FAIL' "$before_s" | sed 's/^....: //' | comm -12 $tmp1 - >$tmp2
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -12 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -53,8 +57,8 @@ if [ $? = 0 ]; then
echo
fi
-grep '^FAIL' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^....: //' | comm -23 $tmp1 - >$tmp2
+grep '^FAIL' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -62,10 +66,11 @@ if [ $? = 0 ]; then
echo
cat $tmp2
echo
+ exit_status=1
fi
-grep '^PASS' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^....: //' | comm -23 $tmp1 - >$tmp2
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -75,8 +80,8 @@ if [ $? = 0 ]; then
echo
fi
-grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^PASS' "$before_s" | sed 's/^....: //' | comm -13 $tmp1 - >$tmp2
+grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -86,8 +91,8 @@ if [ $? = 0 ]; then
echo
fi
-grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^....: //' >$tmp1
-grep '^FAIL' "$before_s" | sed 's/^....: //' | comm -13 $tmp1 - >$tmp2
+grep '^[PF]A[SI][SL]' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -13 $tmp1 - >$tmp2
grep -s . $tmp2 >/dev/null
if [ $? = 0 ]; then
@@ -96,3 +101,5 @@ if [ $? = 0 ]; then
cat $tmp2
echo
fi
+
+exit $exit_status
diff --git a/contrib/gcc_build b/contrib/gcc_build
index 4d0eea30b6b..fa0afc8f7bc 100755
--- a/contrib/gcc_build
+++ b/contrib/gcc_build
@@ -110,7 +110,7 @@ checkout_gcc() {
changedir ${DESTINATION_PARENT}
# Checkout the tree
- cvs -z 9 co -d `basename ${DESTINATION}` gcc || \
+ $GCC_CVS -z 9 co -d `basename ${DESTINATION}` gcc || \
error "Could not check out GCC"
}
@@ -209,6 +209,8 @@ install_gcc() {
# Initialization
########################################################################
+# CVS command
+GCC_CVS=${GCC_CVS-${CVS-cvs}}
# The CVS server containing the GCC repository.
CVS_SERVER="gcc.gnu.org"
# The path to the repository on that server.
diff --git a/contrib/gcc_update b/contrib/gcc_update
index cf1cac1b247..a11660e831e 100755
--- a/contrib/gcc_update
+++ b/contrib/gcc_update
@@ -37,6 +37,8 @@
# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
+# CVS command
+GCC_CVS=${GCC_CVS-${CVS-cvs}}
# Default options used when updating via CVS.
UPDATE_OPTIONS=-Pd
# Use -P to prune empty directories.
@@ -221,7 +223,7 @@ else
fi
echo "Updating CVS tree"
-cvs -q update ${1+"$@"}
+$GCC_CVS -q update ${1+"$@"}
if [ $? -ne 0 ]; then
(touch_files_reexec)
echo "CVS update of full tree failed." >&2
diff --git a/contrib/test_summary b/contrib/test_summary
index 356d7b320ac..01fba6fd5d2 100755
--- a/contrib/test_summary
+++ b/contrib/test_summary
@@ -28,14 +28,19 @@
# test_summary | sh # so as to actually send e-mail and move log files
# It accepts a few command line arguments. For example:
-# -o: re-reads logs that have been mailed already (.sum.sent)
-# -t: prevents logs from being renamed
-# -p: prepend specified file (or list of files: -p "a b") to the report
-# -i: append specified file (or list of files: -i "a b") to the report
-# -m: specify the e-mail address to send notes to. An appropriate default
-# should be selected from the log files.
-# -f: force reports to be mailed; if omitted, only reports that differ
-# from the sent.* version are sent.
+if test x"$1" = "x-h"; then
+ cat <<_EOF
+ -o: re-reads logs that have been mailed already (.sum.sent)
+ -t: prevents logs from being renamed
+ -p: prepend specified file (or list of files: -p "a b") to the report
+ -i: append specified file (or list of files: -i "a b") to the report
+ -m: specify the e-mail address to send notes to. An appropriate default
+ should be selected from the log files.
+ -f: force reports to be mailed; if omitted, only reports that differ
+ from the sent.* version are sent.
+_EOF
+ exit 0
+fi
# Find a good awk.
if test -z "$AWK" ; then
diff --git a/fastjar/ChangeLog b/fastjar/ChangeLog
index f40370dbc29..1217352e89a 100644
--- a/fastjar/ChangeLog
+++ b/fastjar/ChangeLog
@@ -1,3 +1,11 @@
+2003-03-30 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * fastjar.texi: Remove @ at start of file.
+
+2003-03-10 Mohan Embar <gnustuff@thisiscool.com>
+
+ * dostime.c: add #include <stddef.h> for definition of NULL
+
2003-02-04 Joseph S. Myers <jsm@polyomino.org.uk>
* fastjar.texi: Update to GFDL 1.2.
diff --git a/fastjar/dostime.c b/fastjar/dostime.c
index 5117a82014e..b202705bec3 100644
--- a/fastjar/dostime.c
+++ b/fastjar/dostime.c
@@ -21,6 +21,8 @@
#include <time.h>
+#include <stddef.h>
+
#include "dostime.h"
/*
diff --git a/fastjar/fastjar.texi b/fastjar/fastjar.texi
index 42bc4d7e215..b7c1259f05a 100644
--- a/fastjar/fastjar.texi
+++ b/fastjar/fastjar.texi
@@ -1,4 +1,4 @@
-@\input texinfo @c -*-texinfo-*-
+\input texinfo @c -*-texinfo-*-
@setfilename fastjar.info
@settitle Guide to GNU jar utilites
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cdf51841169..d186b36204a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,3571 @@
+2003-04-05 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcov.c (struct arc_info): Replace local_span with cycle.
+ (struct block_info): Replace u.span with u.cycle. Add is_call_return.
+ (solve_flow_graph): Set is_call_return.
+ (add_line_counts): Adjust. In block mode, blocks attach to last line.
+ (accumulate_line_counts): Find graph cycles, not spanning tree.
+ (output_branch_count): Adjust.
+ (output_lines): Adjust.
+ * doc/gcov.texi: Update.
+
+2003-04-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*zero_extendqisi2_h8300hs): Change
+ the second alternative to "#".
+
+2003-04-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.c (single_one_operand): Use GET_MODE_MASK.
+ (single_zero_operand): Likewise.
+
+2003-04-05 Daniel Berlin <dberlin@dberlin.org>
+
+ * Makefile.in (df.o): Depend on alloc-pool.h, not obstack.h.
+ * df.c: Include alloc-pool.h, not obstack.h.
+ (df_ref_obstack): Remove.
+ (df_ref_pool, df_link_pool): Add pools.
+ (df_alloc): Init the new pools.
+ (df_free): And free them.
+ (df_link_create): Use the pools.
+ (df_ref_create): Ditto.
+
+2003-04-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * simplify-rtx.c: Fix formatting.
+
+2003-04-05 Andrew Pinski <apinski@apple.com>
+
+ * config/rs6000/rs6000.c (addrs_ok_for_quad_peep): Allow addr2
+ reg with reg1 == reg2 and offset1 = -8.
+
+2003-04-05 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (rs6000_rtx_costs): Halve Power4
+ multiply costs. Correct Power4 divide costs.
+ * config/rs6000/power4.md: Restore multiply and FP latency.
+
+2003-04-05 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * alias.c (find_base_term): Export.
+ * rtl.h (find_base_term): Declare.
+ * gcse.c (find_moveable_store): Test for flag_non_call_exceptions
+ instead of flag_exceptions. Move test for parameter passing ...
+ (store_killed_in_insn): ... here.
+
+2003-04-05 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ PR bootstrap/10267
+ * doc/install.texi (*-*-solaris2): /bin/ksh is not just recommended
+ for configuring.
+
+2003-04-04 Geoffrey Keating <geoffk@apple.com>
+
+ * dbxout.c (scope_labelno): Add GTY.
+ (have_used_extensions): Add GTY.
+ (source_label_number): Add GTY.
+ (lastfile): Add GTY.
+ (lastfile_is_base): New.
+ (base_input_file): New.
+ (dbxout_handle_pch): New.
+ (dbx_debug_hooks): Add handle_pch.
+ (xcoff_debug_hooks): Likewise.
+ (dbxout_function_end): Remove scope_labelno.
+ (dbxout_init): Set base_input_file.
+ (dbxout_handle_pch): New.
+ (dbxout_source_file): Honour lastfile_is_base.
+ * dwarfout.c (dwarf_debug_hooks): Add dummy handle_pch.
+ * sdbout.c (sdb_debug_hooks): Add dummy handle_pch.
+ * vmsdbgout.c (vmsdbg_debug_hooks): Add dummy handle_pch.
+ * dwarf2out.c (dwarf2_debug_hooks): Add dummy handle_pch.
+ * debug.c (do_nothing_debug_hooks): Add dummy handle_pch.
+ * debug.h (struct gcc_debug_hooks): Add handle_pch.
+ * c-pch.c (pch_init): Don't call start_source_file, but do call
+ handle_pch.
+ (c_common_write_pch): Call handle_pch.
+ (c_common_read_pch): Don't call start_source_file,
+ or end_source_file.
+
+Fri Apr 4 17:43:52 2003 Olivier Hainque <hainque@act-europe.fr>
+
+ * emit-rtl.c (get_mem_attrs): Adjust alignment tests determining
+ use of default attributes to agree MEM_ALIGN macro.
+
+Fri Apr 4 17:33:24 2003 Joel Brobecker <brobecker@gnat.com>
+
+ * dbxout.c (dbxout_type): When printing type index of range type
+ whose bounds are printed in octal format, print type of parent type if
+ it exists so enumerated type descriptions are not transformed
+ into unsigned types.
+
+2003-04-04 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300-protos.h: Add a prototype for
+ compute_a_shift_cc.
+ * config/h8300/h8300.c (shift_one): Update the CC status.
+ (shift_two): Likewise.
+ (output_a_shift_cc): Set cc_inline and cc_special.
+ (compute_a_shift_cc): New.
+ * config/h8300/h8300.md (shift insns): Use compute_a_shift_cc.
+
+2003-04-04 Richard Henderson <rth@redhat.com>
+
+ * cse.c (fold_rtx): Fix 03-30 change; do check insn non-null.
+
+2003-04-04 Loren James Rittle <ljrittle@acm.org>
+
+ * fixinc/inclhack.def (bsd_stdio_attrs_conflict): New.
+ * fixinc/fixincl.x: Rebuilt.
+ * fixinc/tests/base/stdio.h: Regenerated.
+
+2003-04-04 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcov.c (accumulate_line_counts): Fix span tree merge bug.
+
+Fri Apr 4 15:58:52 2003 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.h (ACTUAL_NORMAL_MODE): New macro, broken out of
+ (NORMAL_MODE).
+ * sh.c (fpscr_set_from_mem): Use ACTUAL_NORMAL_MODE.
+
+2003-04-04 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * doc/contrib.texi (Contributors): Add entries for Wolfgang
+ Bangerth, DJ Delorie, Christian Ehrhardt, Christopher Faylor,
+ Nathanael Nerode, Diego Novillo, Hartmut Penner, Volker Reichelt,
+ Danny Smith, and Ulrich Weigand.
+ Update Kriang Lerdsuwanakij and fix a typo in Janis Johnson's
+ entry.
+
+2003-04-04 Nick Clifton <nickc@redhat.com>
+
+ * config/sparc/sol2-bi.h: Revert previous delta.
+ * config/sparc/sol2-gas-bi.h (AS_SPARC64_FLAG): Prepend -TSO
+
+2003-04-04 Nick Clifton <nickc@redhat.com>
+
+ * config/v850/v850.c (expand_prologue): Only use register save
+ helper functions if long calls are not being used.
+ Add a clobber of r11 id using long calls.
+ (pattern_is_ok_for_prologue): Account for the extra clobber.
+ (construct_save_jarl): Likewise.
+ * config/v850/v850.md (prolog pattern): Do not use this pattern
+ for v850e's.
+
+2003-04-04 Andreas Schwab <schwab@suse.de>
+
+ * stor-layout.c (layout_decl): Avoid syntax error in last change
+ when PCC_BITFIELD_TYPE_MATTERS is defined but not
+ EMPTY_FIELD_BOUNDARY.
+
+2003-04-03 Jason Merrill <jason@redhat.com>
+
+ PR c/10175
+ * jump.c (never_reached_warning): Revert patch of 2002-11-02.
+ Look backwards for a line note.
+
+2003-04-03 Neil Booth <neil@daikokuya.co.uk>
+
+ * fix-header.c (read_scan_file): Defer switch processing.
+
+2003-04-03 Matt Austern <austern@apple.com>
+
+ * cpppch.c (reset_ht): Remove.
+ (cpp_read_state): Remove loop to reset hashtable identifiers.
+ * ggc-common.c (gt_pch_save): Add call to gt_pch_fixup_stringpool
+ after pch file is written.
+ * ggc.h (gt_pch_fixup_stringpool): Declare.
+ * stringpool.c (ht_copy_and_clear): Define. Callback. Copy
+ hashnode's value to another hashtable, then clear the original.
+ (saved_ident_hash): Define.
+ (gt_pch_save_stringpool): Create saved_ident_hash, use it to
+ store definitions in ident_hash, and clear ident_hash.
+ (gt_pch_fixup_stringpool): Define. Restore definitions from
+ saved_ident_hash to ident_hash, then destroy saved_ident_hash.
+
+Thu Apr 3 22:27:40 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * cfgrtl.c (update_bb_for_insn): Do not set block for barriers.
+
+2003-04-03 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/10157
+ * gcse.c (can_copy_p): Rename it to can_copy.
+ (can_copy_init_p): Remove.
+ (compute_can_copy): Use can_copy instead of can_copy_p.
+ (can_copy_p): New exported function. Call compute_can_copy.
+ (hash_scan_set): Use it.
+ (gcse_main): Don't call compute_can_copy.
+ (bypass_jumps): Don't call compute_can_copy.
+ * rtl.h (can_copy_p): Declare.
+ * loop.c (scan_loop): Don't move the source and add a reg-to-reg
+ copy if the mode doesn't support copy operations.
+
+2003-04-03 Jason Merrill <jason@redhat.com>
+
+ * Makefile.in (unstrap): Also remove stage_last.
+
+ * dwarf2out.c (lookup_filename): Don't check for "<internal>".
+ (dwarf2out_source_line): Don't do anything if line==0.
+
+ * stor-layout.c (do_type_align): New fn, split out from...
+ (layout_decl): ...here. Do all alignment calculations for
+ FIELD_DECLs here.
+ (update_alignment_for_field): Not here.
+ (start_record_layout, debug_rli): Remove unpadded_align.
+ * tree.h (struct record_layout_info_s): Remove unpadded_align.
+ * c-decl.c (finish_enum): Don't set DECL_SIZE, DECL_ALIGN
+ or DECL_MODE on the CONST_DECLs.
+ (finish_struct): Don't mess with DECL_ALIGN.
+
+Thu Apr 3 18:57:19 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (print_operand): Do not bypass output_addr_const at flag_pic.
+
+Thu Apr 3 17:08:09 2003 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.c (sh_function_ok_for_sibcall): Return 0 if the current
+ function is an interrupt handler.
+
+ * sh.c (sh_expand_epilogue): Avoid clash of temp register for
+ restoring target registers with EH_RETURN_STACKADJ_RTX; use
+ multiple registers in round-robin fashion.
+
+2003-04-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gengtype-lex.l (IWORD): Add CHAR_BITFIELD.
+ * system.h (CHAR_BITFIELD): New.
+
+2003-04-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Generalize to accept GT
+ and LE.
+ (another peephole2): Likewise.
+
+2003-04-03 Nick Clifton <nickc@redhat.com>
+
+ * config/sparc/sol2-bi.h (ASM_CPU64_DEFAULT_SPEC): Add -TSO.
+ (DEF_ARCH64_SPEC): Likewise.
+
+Thu Apr 3 09:53:40 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (constant_address_p): Use legitimate_constant_p.
+ (legitimate_address_p): Do not use CONSTANT_ADDRESS_P.
+
+2003-04-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300-protos.h: Add a prototype for
+ gtle_operator.
+ * config/h8300/h8300.c (gtle_operator): New.
+ * config/h8300/h8300.h (PREDICATE_CODES): Add an entry for
+ gtle_operator.
+ * config/h8300/h8300.md (a peephole2): Generalize to accept GT
+ and LE.
+
+2003-04-02 Richard Henderson <rth@redhat.com>
+
+ * libgcc-std.ver (_Unwind_GetCFA): New.
+ * unwind-dw2.c (_Unwind_GetCFA): New.
+ * unwind-libunwind.c (_Unwind_GetCFA): New.
+ * unwind-sjlj.c (_Unwind_GetCFA): New.
+ * unwind.h: Declare it.
+
+Thu Apr 3 00:31:21 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ PR inline-asm/8088
+ * i386.c (ix86_hard_regno_mode_ok): Return 0 for MMX/SSE registers
+ when MMX/SSE is not available.
+
+2003-04-02 Mike Stump <mrs@apple.com>
+
+ * doc/install.texi (Specific): Update pointers to apple.com.
+
+Thu Apr 3 00:18:49 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (override_options): Disable red zone by default on i386.
+ (compute_frame_layout, ix86_force_to_memory, ix86_free_from_memory):
+ Do not test TARGET_64BIT together with TARGET_RED_ZONE
+
+2003-04-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Tighten the condition.
+
+2003-04-02 Richard Henderson <rth@redhat.com>
+
+ * longlong.h (umul_ppmm) [alpha]: Use __builtin_alpha_umulh.
+
+2003-04-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): New.
+
+2003-04-02 Richard Henderson <rth@redhat.com>
+
+ * except.c (sjlj_find_directly_reachable_regions): Recognize when
+ must-not-throw region has been deleted.
+
+2003-04-02 Richard Henderson <rth@redhat.com>
+
+ * dwarf2out.c (output_call_frame_info): Ignore fde->nothrow as an
+ optimization when flag_exceptions not enabled.
+
+2003-04-02 Vladimir Makarov <vmakarov@redhat.com>
+
+ * config/rs6000/rs6000.c
+ (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Redefine the
+ macros.
+ (rs6000_issue_rate): Add case for 8540.
+ (rs6000_use_sched_lookahead): New function.
+
+ * config/rs6000/8540.md: Rename SIU units into SU ones and MIU
+ units into MU ones.
+ (ppc8540_branch, ppc8540_cr_logical): Add one cycle in the
+ reservation before retirement.
+ (ppc8540_multiply, ppc8540_load, ppc8540_store,
+ ppc8540_simple_float, ppc8540_vector_load, ppc8540_vector_store):
+ Remove additional cycle in the reservation before retirement.
+ (ppc8540_mfcr, ppc8540_mtcrf, ppc8540_mtjmpr): Add missed
+ reservation of ppc8540_issue.
+
+2003-04-02 Andreas Schwab <schwab@suse.de>
+
+ * real.c (decode_ieee_single): Fix decoding of SNaN bit.
+
+2003-04-01 Richard Henderson <rth@redhat.com>
+
+ * except.c (convert_from_eh_region_ranges_1): Smash REG_EH_REGION
+ notes for nothrow calls if flag_forced_unwind_exceptions.
+ (build_post_landing_pads): Mind flag_forced_unwind_exceptions.
+ (sjlj_find_directly_reachable_regions): Likewise.
+ (reachable_handlers): Likewise.
+ (can_throw_external): Likewise.
+ (collect_one_action_chain): Record cleanups after catch-all and
+ must-not-throw if flag_forced_unwind_exceptions.
+ * flags.h (flag_forced_unwind_exceptions): Declare.
+ * toplev.c (flag_forced_unwind_exceptions): New.
+ (lang_independent_options): Add it.
+ * doc/invoke.text: Add it.
+
+2003-04-01 David Mosberger <davidm@hpl.hp.com>
+
+ * config/ia64/crti.asm: Clean up trailing whitespace.
+ Remove trailing hashes (#) from identifiers.
+
+ * config/ia64/crtn.asm: Ditto.
+
+ * config/ia64/crtend.asm: Remove trailing hashes (#) from
+ identifiers.
+ (__do_global_ctors_aux): Align to 32-byte boundary. Add unwind
+ directives. Drop explicit bundling---it just makes the code
+ harder to read. Don't save/restore gp needlessly.
+
+ * config/ia64/crtbegin.asm: Remove trailing hashes (#) from
+ identifiers (they're only needed if the identifier would clash
+ with a register name otherwise).
+ (__do_global_dtors_aux): Align to 32-byte boundary. Add unwind
+ directives. Drop explicit bundling---it just makes the code
+ harder to read.
+ (__do_jv_register_classes): Ditto.
+ (.fini_array): Remove "progbits" (newer
+ assemblers don't like wrong section-types).
+ (.init_array): Ditto.
+
+2003-04-01 Roger Sayle <roger@eyesopen.com>
+
+ PR fortran/9974
+ * gcse.c (reg_killed_on_egde): New function to test whether the
+ given reg is overwritten by any instruction queued on an edge.
+ (bypass_block): Ignore substitutions killed on incoming edges.
+ Don't bypass outgoing edges that have queued instructions.
+
+2003-04-01 Alexandre Oliva <aoliva@redhat.com>
+
+ * real.h (EXP_BITS): Make room for...
+ (struct real_value): ... added canonical bit.
+ (struct real_format): Added pnan.
+ (mips_single_format, mips_double_format, mips_extended_format,
+ mips_quad_format): New.
+ * real.c: Copy p to pnan in all formats.
+ (get_canonical_qnan, get_canonical_snan): Set canonical bit.
+ (real_nan): Use pnan to compute significand's shift.
+ (real_identical): Disregard significand in canonical
+ NaNs.
+ (real_hash): Likewise. Take signalling into account.
+ (encode_ieee_single, encode_ieee_double, encode_ieee_quad):
+ Disregard significand bits in canonical NaNs. Set all bits of
+ canonical NaN if !qnan_msb_set.
+ (encode_ibm_extended, decode_ibm_extended): Likewise. Use
+ qnan_msb_set to tell the base double format.
+ (ibm_extended_format): Use 53 as pnan.
+ (mips_single_format, mips_double_format, mips_extended_format,
+ mips_quad_format): Copied from the corresponding ieee/ibm
+ formats, with qnan_msb_set false.
+ * config/mips/iris6.h (MIPS_TFMODE_FORMAT): Use mips_extended_format.
+ * config/mips/linux64.h (MIPS_TFMODE_FORMAT): Use mips_quad_format.
+ * config/mips/mips.c (override_options): Use mips_single_format
+ and mips_double_format. Default TFmode to mips_quad_format.
+ * config/mips/t-linux64 (tp-bit.c): Define QUIET_NAN_NEGATED.
+ * config/mips/t-irix6: Likewise.
+ * config/mips/t-mips (fp-bit.c, dp-bit.c): Likewise.
+ * config/fp-bit.c (pack_d, unpack_d): Obey it.
+
+2003-04-01 Geoffrey Keating <geoffk@apple.com>
+
+ * unwind-dw2-fde-darwin.c (DESTRUCTOR_MAY_BE_CALLED_LIVE): New.
+ (live_image_destructor): Reset image to initial state.
+ (examine_objects): Set DESTRUCTOR_MAY_BE_CALLED_LIVE.
+
+2003-04-01 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * config/sparc/sparc.c (input_operand): Accept bare
+ CONSTANT_P_RTX operands.
+
+2003-04-01 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * gcse.c (struct ls_expr): Added pattern_regs field.
+ (ldst_entry): Initialize it.
+ (extract_mentioned_regs, extract_mentioned_regs_helper): New.
+ (store_ops_ok): Use regs precomputed by them.
+ (find_loads, store_killed_in_insn, load_kills_store): Change return
+ type to bool.
+ (store_killed_before, store_killed_after): Take position of register
+ set in account.
+ (reg_set_info): Store position of the setter.
+ (gcse_main): Enable store motion.
+ (mems_conflict_for_gcse_p): Enable load motion of non-symbol mems.
+ (pre_insert_copy_insn, update_ld_motion_stores, insert_store): Prevent rtl
+ sharing.
+ (simple_mem): Enable store motion of non-symbol mems.
+ (regvec): Type changed.
+ (LAST_AVAIL_CHECK_FAILURE): New.
+ (compute_store_table_current_insn): New.
+ (build_store_vectors): Computation of availability and anticipatability
+ moved ...
+ (compute_store_table, find_moveable_store): ... here.
+ (delete_store): Remove senseless comment.
+ (store_motion): Reorganize.
+
+2003-04-01 Kevin Buettner <kevinb@redhat.com>
+
+ * config/mips/mips.c (override_options): Provide mappings for
+ HI_REGNUM and LO_REGNUM.
+ * config/mips/mips.h (MD_DBX_FIRST): Define.
+
+2003-04-01 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * combine.c (merge_outer_ops): Fix typo.
+
+ * varasm.c (make_decl_one_only): Revert 2003-03-09 patch.
+
+2003-04-01 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/{40x.md,603.md,6xx.md,7450.md,7xx.md,mpc.md,
+ power4.md,rios1.md,rios2.md,rs64.md}: Change mult_compare to
+ imul_compare. Add lmul_compare.
+ * config/rs6000/power4.md: Bump some latencies. Model extra cycle
+ in second pair of dispatch slots. Model stores more accurately.
+ Tweak multiply model. Add bypasses for CR instructions dependent
+ on complicated compares.
+ * config/rs6000/rs6000.md (mulsi3): Name imul_compare patterns.
+ (muldi3): Add lmul_compare patterns.
+ * config/rs6000/rs6000.c (rs6000_variable_issue): Move FPLOAD_UX
+ and FPSTORE_UX to split instructions and add COMPARE,
+ DELAYED_COMPARE, IMUL_COMPARE, LMUL_COMPARE, IDIV, LDIV.
+ (rs6000_adjust_cost): Add IMUL_COMPARE and LMUL_COMPARE.
+ (rs6000_rtx_costs): Separate POWER4 multiply case.
+
+2003-04-01 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_fixup_clobbered_return_reg):
+ Do nothing if __builtin_return_address was not used.
+
+Tue Apr 1 18:18:23 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (test patterns): Allow memory operand in operand1.
+
+2003-02-31 Aldy Hernandez <aldyh@redhat.com>
+
+ * testsuite/gcc.c-torture/execute/simd-3.c: New.
+
+ * expr.c (expand_expr): Handle VECTOR_CST.
+ (const_vector_from_tree): New.
+
+ * varasm.c (output_constant): Handle VECTOR_CST.
+
+ * c-typeck.c (digest_init): Build a vector constant from a
+ VECTOR_TYPE.
+
+ * config/rs6000/rs6000.c: Remove prototype for
+ easy_vector_constant.
+ (easy_vector_constant): Add mode parameter. Rewrite to handle
+ more easy constants.
+ (rs6000_emit_move): Pass mode to easy_vector_constant.
+ Call emit_easy_vector_insn for SPE V2SI vector constant moves.
+ (emit_easy_vector_insn): New.
+ (easy_vector_same): New.
+ (EASY_VECTOR_15): New macro.
+ (EASY_VECTOR_15_ADD_SELF): New macro.
+ (bdesc_2arg): Rename to xorv2si3.
+ (easy_vector_constant_add_self): New.
+ (input_operand): Allow vector constants.
+
+ * config/rs6000/rs6000.h (PREDICATE_CODES): Add
+ easy_vector_constant, easy_vector_constant_add_self.
+ (EXTRA_CONSTRAINT): Add 'W'.
+
+ * config/rs6000/rs6000-protos.h: Add prototype for
+ easy_vector_constant, emit_easy_vector_insn.
+
+ * config/rs6000/altivec.md (xorv8hi3): New.
+ (xorv16qi3): New.
+ Remove all _const0 patterns.
+ (movv4si_internal): Rewrite to use code. Add vector constant to
+ vector alternative. Add splitter.
+ (movv8hi_internal): Same.
+ (movv16qi_internal): Same.
+ (movv4sf_internal): Same.
+ Change the unspecs for vspltis* to use constants.
+
+ * config/rs6000/spe.md ("xorv4hi3"): New.
+ ("spe_evxor"): Rename to xorv2si3.
+ ("xorv1di3"): New.
+ Remove all _const0 patterns.
+ (movv2si_internal): Rewrite to use code. Add vector constant to
+ alternatives. Add splitter.
+ (movv4hi_internal): Add vector constant to alternatives.
+ (movv1di_internal): Same.
+ (movv2sf_internal): Same.
+
+2003-03-31 Mark Mitchell <mark@codesourcery.com>
+
+ PR c/9936
+ * c-decl.c (grokdeclarator): Clear SAVE_EXPR_CONTEXT for
+ variably-sized arrays in parameters.
+ (set_save_expr_context): New function.
+ (c_expand_body): Use it, via walk_tree.
+
+2003-03-31 Eric Christopher <echristo@redhat.com>
+
+ * combine.c (can_combine_p): Allow ZERO_EXTRACT and STRICT_LOW_PART.
+ (combinable_i3pat): Remove call to expand_field_assignment and
+ #if 0'd code.
+
+2003-03-31 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10278
+ * c-common.c (finish_label_address_expr): Handle the
+ error_mark_node.
+
+2003-03-31 Richard Henderson <rth@redhat.com>
+
+ * real.c (real_identical): Reorg so as to not compare
+ signalling for normals.
+
+2003-03-31 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (hard_reg_operand): Check the mode.
+
+2003-03-31 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Don't rely on REG_WAS_0
+ notes as they are boggus.
+ (m68hc11_gen_movqi): Likewise.
+
+2003-03-31 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (expand_prologue): For an interrupt handler
+ save the soft registers after the frame pointer so that gdb can unwind
+ the frame more easily.
+ (expand_epilogue): Likewise in opposite order; allow to use X register
+ as scratch if the return value is by reference.
+
+2003-03-31 Jason Merrill <jason@redhat.com>
+
+ PR java/10145
+ * stor-layout.c (update_alignment_for_field): Respect
+ DECL_USER_ALIGN for zero-length bitfields, too.
+ * c-decl.c (finish_struct): Don't set DECL_ALIGN for normal
+ fields.
+
+2003-03-31 Matt Austern <austern@apple.com>
+
+ * cpppch.c (struct cpp_savedstate): Add defs and n_defs members.
+ (count_defs): Keep track of number of defs as well as total size.
+ (write_defs): Put every definition in cpp_savedstate's defs array.
+ (comp_hashnode): Define. Comparison function for qsort.
+ (cpp_write_pch_deps): Sort definitions before writing them.
+ (struct ht_node_list): Define. Like cpp_savedstate but simpler.
+ (collect_ht_nodes): Define.
+ (cpp_valid_state): When verifying that undefined identifiers in
+ the pch file are still undefined, read a sorted list of undefined
+ identifiers, collect all defined identifiers into a sorted list,
+ and walk through both lists to make sure there's no match.
+
+2003-03-31 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): New.
+
+2003-03-31 Michael Matz <matz@suse.de>
+
+ * config/i386/i386.h (TARGET_FLT_EVAL_METHOD): Change 1 into 0.
+
+2003-03-31 Segher Boessenkool <segher@koffie.nl>
+
+ PR target/10177
+ * config/rs6000/rs6000.h (HARD_REGNO_RENAME_OK): New.
+ * config/rs6000/rs6000.c (compute_vrsave_mask): Don't mark
+ all call-clobbered registers as used.
+
+2003-03-31 Michael Matz <matz@suse.de>
+
+ * cppexp.c (cpp_classify_number): Accept '.' after "0x".
+ * testsuite/gcc.dg/cpp/c99-hexfloat-3.c: New file.
+
+2003-03-31 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcov.c: Add -a & -u options.
+ (struct arc_info): Add local_span, is_call_non_return,
+ is_nonlocal_return, is_unconditional flags, remove is_call flag.
+ (struct block_info): Add flags, is_call_site, is_nonlocal_return
+ members. Make encodings a union with span member.
+ (struct function_info): Add blocks_executed, line, src, line_next
+ members.
+ (struct coverage_info): Make branches a union with blocks member.
+ (struct source_info): Add functions member.
+ (object_summary, program_count): New global variables.
+ (flag_all_blocks, flag_unconditional): New flags.
+ (find_source, output_branch_count): New functions.
+ (print_usage): Adjust.
+ (options): Adjust.
+ (process_args): Adjust.
+ (read_graph_file) <GCOV_TAG_FUNCTION>: Adjust.
+ <GCOV_TAG_BLOCKS>: Read flags.
+ <GCOV_TAG_LINES>: Adjust.
+ (read_count_file): Process SUMMARY tags.
+ (solve_flow_graph): Set is_unconditional and clear is_call_site
+ appropriately.
+ (add_branch_counts): Adjust. Don't count unconditional branches.
+ (add_line_counts): Deal with all-blocks mode, accumulate block
+ coverage.
+ (accumulate_line_counts): Adjust, generate local spanning tree for
+ all-blocks mode.
+ (output_lines): Adjust.
+ * profile.c (branch_prob): Alter GCOV_FUNCTION_TAG record.
+ * doc/gcov.texi: Document.
+
+2003-03-31 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md: Organize peephole2's that transform
+ (compare (reg:HI) (const_int)).
+
+2003-03-31 Roger Sayle <roger@eyesopen.com>
+
+ * emit-rtl.c (dconstm2, dconsthalf): New real constants.
+ (init_emit_once): Initialize dconstm2 and dconsthalf here.
+ * real.h (dconstm2, dconsthalf): Add prototypes here.
+ * real.c (real_sqrt): Use dconsthalf rather than local copy.
+ * builtins.c (fold_builtin): When optimizing sqrt(exp(x)) as
+ exp(x/2.0) remember to fold the division if possible.
+ Fold sin(0.0) as 0.0, cos(0.0) as 1.0, pow(x,1.0) as x,
+ pow(x,-1.0) as 1.0/x, pow(x,2.0) as x*x, pow(x,-2.0) as
+ 1.0/(x*x) and pow(x,0.5) as sqrt(x).
+
+2003-03-31 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a new peephole2): New.
+
+2003-03-31 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcse.c (simple_mem): Return false for floating-point accesses
+ if flag_float_store is true.
+
+2003-03-30 Roger Sayle <roger@eyesopen.com>
+
+ * gcse.c (gcse_constant_p): New function to identify constants
+ suitable for constant propagation, including COMPARE with two
+ integer constant arguments.
+ (hash_scan_set): Use gcse_constant_p.
+ (find_avail_set): Likewise.
+ (cprop_insn): Likewise.
+ (do_local_cprop): Likewise.
+ (find_implicit_sets): Likewise.
+ (find_bypass_set): Likewise.
+
+2003-03-30 Matt Kraai <kraai@alumni.cmu.edu>
+
+ * except.h: Remove definition of varray_type.
+
+2003-03-30 Richard Henderson <rth@redhat.com>
+
+ PR opt/10011, opt/10252:
+ * toplev.c (rest_of_compilation): Run purge_builtin_constant_p
+ before post-gcse cse pass.
+
+2003-03-30 Roger Sayle <roger@eyesopen.com>
+
+ * dojump.c (do_jump): Copy SUBREGs into a pseudo for comparison.
+
+2003-03-30 DJ Delorie <dj@redhat.com>
+
+ * profile.c (instrument_edges): Make sure any newly created
+ jump insns have correct jump label info.
+
+2003-03-30 Richard Henderson <rth@redhat.com>
+
+ * cfgbuild.c (make_edges): Use tablejump_p.
+ * cfgcleanup.c (label_is_jump_target_p): Likewise.
+ * cfglayout.c (cfg_layout_can_duplicate_bb_p): Likewise.
+ * cfgrtl.c (flow_delete_block_noexpunge): Likewise.
+ (try_redirect_by_replacing_jump): Likewise.
+ (redirect_edge_and_branch): Likewise.
+ * cse.c (fold_rtx): Likewise.
+ * jump.c (delete_related_insns): Likewise.
+ * rtlanal.c (get_jump_table_offset): Likewise.
+ * ssa-ccp.c (ssa_ccp_df_delete_unreachable_insns): Likewise.
+
+2003-03-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * Makefile.in (STRICT_WARN): Don't warn for ISO C constructs.
+ (STRICT2_WARN): Likewise.
+
+2003-03-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ PR other/6955
+ * collect2.c (collect_wait): Use WCOREDUMP and fix output message.
+ * system.h (WCOREDUMP, WCOREFLG): Define if necessary.
+
+2003-03-30 Richard Henderson <rth@redhat.com>
+
+ PR c/10083
+ * config/alpha/alpha.md (umuldi3_highpart): Change to expander;
+ don't zero_extend const inputs.
+
+2003-03-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * reload1.c (reload_cse_move2add): Fix a comment typo.
+
+2003-03-30 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Remove useless code.
+
+2003-03-29 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*iorsi3_and_ashift): New.
+ (*iorsi3_and_lshiftrt): Likewise.
+ (*iorsi3_zero_extract): Likewise.
+
+2003-03-29 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*insv_si_8_8): New.
+ (*insv_si_8_8_lshiftrt_8): Likewise.
+ (a peephole2): Likewise.
+
+2003-03-29 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * doc/contrib.texi: Add Eric Botcazou and Roger Sayle.
+ Uniformly use bugfix instead of bug fix.
+
+2003-03-29 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ PR doc/895
+ * ONEWS: Remove those items that already appear in the EGCS
+ release notes on our web pages.
+
+2003-03-29 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.h (FUNCTION_VALUE_REGNO_P): Respect
+ TARGET_HARD_FLOAT. Reformat.
+ (FUNCTION_ARG_REGNO_P): Likewise, and remove unneeded casts.
+
+2003-03-28 Albert Chin-A-Young <china@thewrittenword.com>
+
+ * gcc/fixinc/inclhack.def: Update solaris_mutex_init_1 to
+ work on Solaris 2.5.1.
+
+2003-03-28 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*addsi3_and_r_1): Put under plus:SI
+ section of h8300.md
+ (*addsi3_and_nor_r_1): Likewise.
+
+2003-03-29 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_emit_prologoue): Make sure backchain is
+ set up before any trapping memory access if flag_non_call_exceptions.
+
+2003-03-29 Alan Modra <amodra@bigpond.net.au>
+
+ * reload1.c (reload_as_needed): Allow a USE in asm reloads.
+
+ * loop.c: (find_mem_in_note_1, find_mem_in_note): Comment.
+
+2003-03-28 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * configure.in: Clarify comments.
+ * configure: Regenerate.
+
+2003-03-28 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.md ("literal_pool_31"): Output pool anchor
+ label even if pool empty when generating PIC.
+ ("literal_pool_31", "literal_pool_64"): Coding style cleanup.
+
+2003-03-28 Kazu Hirata <kazu@cs.umass.edu>,
+ Dhananjay Deshpande <dhananjayd@kpit.com>
+
+ PR target/10205
+ * config/h8300/h8300.c (h8300_initial_elimination_offset):
+ Correct the offset computation when TARGET_NORMAL.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/10067
+ * config/sparc/sparc.md (jump pattern): Correct order
+ when issuing the annuling marker.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR c/8281
+ * config/sparc/sparc.md (movdi_insn_sp32_v9): Remove 'f-f' alternative.
+ (movdi reg/reg split): Match only on sparc32, and v9 when int regs.
+
+2003-03-28 Alan Modra <amodra@bigpond.net.au>
+
+ * config/alpha/elf.h (ASM_OUTPUT_ALIGNED_BSS): Remove unnecessary
+ globalize_label.
+ * config/arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/i960/i960.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/m32r/m32r.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/mips/elf.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/mips/linux.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/sparc/sparc.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
+ * config/v850/v850.c (v850_output_aligned_bss): Likewise.
+
+2003-03-28 Alan Modra <amodra@bigpond.net.au>
+
+ * loop.c: (find_mem_in_note_1, find_mem_in_note): New functions.
+ (replace_loop_mems): Add "written" param. Remove invalid REG_EQUAL
+ notes after hoisting.
+ (load_mems): Adjust replace_loop_mems call.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Richard Henderson <rth@redhat.com>
+
+ PR target/10114 and PR target/10084
+ * dwarf2out.c (mem_loc_descriptor): Handle LO_SUM.
+
+2003-03-27 Richard Henderson <rth@redhat.com>
+
+ * config/alpha/alpha.md (adddi_er_high_l): Valid only after reload.
+
+2003-03-27 Roger Sayle <roger@eyesopen.com>
+
+ * fold-const.c (fold_inf_compare): New function to simplify FP
+ comparisons against +Infinity or -Infinity.
+ (fold): Optimize floating point comparisons against Infs and NaNs.
+
+2003-03-27 Janis Johnson <janis187@us.ibm.com>
+
+ * libgcov.c: Provide only dummy functions if libc is not available.
+
+2003-03-27 Richard Henderson <rth@redhat.com>
+
+ * real.h (struct real_value): Add signalling.
+ (EXP_BITS): Decrement.
+ * real.c (get_canonical_qnan): Don't set MSB-1.
+ (get_canonical_snan): Likewise. Set signalling.
+ (real_identical): Compare signalling.
+ (round_for_format): Remove force-one-bit on code.
+ (real_nan): Likewise. Set signalling.
+ (encode_ieee_single): Add force-one-bit code; honor signalling.
+ (encode_ieee_double, encode_ieee_extended, encode_ieee_quad): Likewise.
+ (decode_ieee_single): Set signalling.
+ (decode_ieee_double, decode_ieee_extended, decode_ieee_quad): Likewise.
+
+2003-03-27 Olivier Hainque <hainque@act-europe.fr>
+
+ PR ada/9953
+ * ada/Makefile.in (gnatlib configuration for HPUX): Split
+ the general section for HPUX into specific sections for
+ HPUX 10 and HPUX 11. Fix the setting of TGT_LIB in the HPUX
+ 11 case.
+
+2003-03-27 Glen Nakamura <glen@imodulo.com>
+
+ PR opt/10087
+ * loop.c (loop_givs_reduce): Skip bivs with duplicate locations
+ while incrementing giv.
+ (record_biv): Check for duplicate biv locations and
+ set (struct induction *) v->same if found.
+
+2003-03-27 David Mosberger <davidm@hpl.hp.com>
+
+ * unwind-libunwind.c (uw_frame_state_for): Adjust for libunwind
+ v0.9 API change: replace read of UNW_REG_HANDLER with
+ unw_get_proc_info().
+ (_Unwind_GetLanguageSpecificData): Replace read of UNW_REG_LSDA
+ with unw_get_proc_info().
+ (_Unwind_GetRegionStart): Replace UNW_REG_PROC_START with
+ unw_get_proc_info().
+
+2003-03-27 Vladimir Makarov <vmakarov@redhat.com>
+
+ * config/rs6000/8540.md: Use presence_set instead of absence_set.
+
+2003-03-26 Richard Henderson <rth@redhat.com>
+
+ * c-decl.c (finish_function): Always defer if DECL_DECLARED_INLINE_P.
+
+2003-03-26 Roger Sayle <roger@eyesopen.com>
+
+ PR bootstrap/10051, PR bootstrap/10169.
+ * mips-tfile.c (init_file): Don't provide a static initializer.
+ (initialize_init_file): Initialize the contents of init_file.
+ (add_file): Call initialize_init_file if not already initialized.
+
+2003-03-26 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_optimize_prolog): Do not save/restore
+ registers used for global asm variables.
+ (s390_frame_info, s390_arg_frame_offset): Likewise.
+ (s390_emit_prologue, s390_emit_epilogue): Likewise.
+
+2003-03-26 Vladimir Makarov <vmakarov@redhat.com>
+
+ * config/rs6000/8540.md: New file.
+
+ * config/rs6000/{40x.md, 603.md, 6xx.md, 7450.md, 7xx.md, mpc.md,
+ power4.md, rios1.md, rios2.md, rs64.md}: Add mult_compare to
+ reservations for imul.
+
+ * config/rs6000/rs6000.md: Include 8540.md. Change
+ delayed_compare onto mult_compare for insns generating
+ multiplication.
+ (mult_compare, fpsimple, brinc, vecdiv, veccmpsimple, vecfdiv):
+ New type attribute values.
+
+ * config/rs6000/spe.md (*negsf2_gp, *abssf2_gpr): Use type
+ fpsimple instead of fp.
+ (*divsf3_gpr): Use type vecfdiv instead of fp.
+ (spe_evfsabs, spe_evfsnabs, spe_evfsneg): Use type vecsimple
+ instead of vecfloat.
+ (spe_evfsdive): Use type vecfdiv instead of vecfloat.
+ (spe_brinc): Use type brinc instead of veccomplex.
+ (spe_evaddw, spe_evaddiw): Use type vecsimple instead of
+ veccomplex.
+ (spe_evdivws, spe_evdivwu): Use type vecdiv instead of veccomplex.
+ (*movv2si_internal, *movv1di_internal, *movv4hi_internal,
+ *movv2sf_internal): Define type attribute values for all
+ alternatives.
+ (cmpsfeq_gpr, cmpsfgt_gpr, cmpsflt_gpr): Use type veccmp instead
+ of fpcompare.
+ (tstsfeq_gpr, tstsfgt_gpr, tstsflt_gpr): Use type veccmpsimple
+ instead of fpcompare.
+
+2003-03-26 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/power4.md: Allow delay between dispatch and
+ function units for simple instructions. Correct store units.
+ Allow branch to occupy as many dispatch slots as necessary.
+
+2003-03-26 Jakub Jelinek <jakub@redhat.com>
+
+ * config/ia64/ia64.c (ia64_expand_op_and_fetch): Fix comment.
+ (ia64_expand_compare_and_swap): Use always DImode ar.ccv,
+ zero extend old to it.
+ * config/ia64/ia64.md (cmpxchg_acq_si): Remove mode from ccv
+ operand.
+
+2003-03-26 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/7784
+ * reload.c (find_reloads_address): Handle
+ (PLUS (PLUS (REG) (REG)) (CONST_INT)) form for
+ all base registers.
+
+2003-03-25 Marcelo Abreu <mmabreu@inf.ufrgs.br>
+
+ PR other/10203
+ * version.c: Reference the GCC web site in the URL.
+
+2003-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * c-incpath.c (add_standard_paths): Add both "translated" and
+ non-translated header paths.
+
+2003-03-25 Loren James Rittle <ljrittle@acm.org>
+
+ * doc/install.texi (*-*-freebsd*): Update with known status.
+
+2003-03-21 Jason Merrill <jason@redhat.com>
+
+ PR optimization/10171
+ * unroll.c (unroll_loop): Don't delete the jump at the end unless
+ we also delete a jump at the beginning.
+
+2003-03-25 Stephane Carrez <stcarrez@nerim.fr>
+
+ * doc/contrib.texi (Contributors): Mention self as 68HC11/68HC12
+ contributor.
+
+Tue Mar 25 20:35:51 CET 2003 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (ix86_rtx_costs): For -fpic and x86-64 local symbolic
+ constants are not expensive.
+
+Mon Mar 24 20:03:03 CET 2003 Jan Hubicka <jh@suse.cz>
+
+ PR opt/10056
+ * cfglayout.c (fixup_reorder_chain): Fix dealing with the conditional
+ jump jumping to the next instruction.
+ * cfgrtl.c (force_nonfallthru_and_redirect): Likewise.
+
+2003-03-25 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * doc/passes.texi (Passes): Properly document that we do not
+ perform jump2 any longer; remove command-line option -dJ.
+
+2003-03-25 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/8746
+ * config/i386/i386.md (and promoting splitters): Disable HImode to
+ SImode promoting when the sign bit matters and is not preserved, or
+ when TARGET_FAST_PREFIX is true. Disable promoting when optimizing
+ for size.
+
+2003-03-24 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Extend to support loads
+ in QImode and HImode.
+
+2003-03-24 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/t-m68hc11-gas (LIB1ASMFUNCS): Add _call_far and
+ _return_far
+ (MULTILIB_OPTIONS): Don't multilib on -mlong-calls.
+ (MULTILIB_EXCEPTIONS): Likewise.
+ * config/m68hc11/m68hc11.md ("call"): Support far calls for 68HC11
+ by calling some board support routine.
+ ("call_value"): Likewise.
+ ("*return_void"): Likewise for return.
+ ("*return_16bit"): Likewise.
+ ("*return_32bit"): Likewise.
+ * config/m68hc11/m68hc11.h (ASM_DECLARE_FUNCTION_NAME): Generate .far
+ for 68HC11 too.
+ (DWARF2_ADDR_SIZE): Use 4 so that addresses can
+ * config/m68hc11/m68hc11.c (m68hc11_override_options): Accept
+ -mlong-calls for 68HC11.
+ * config/m68hc11/larith.asm (declare_near): New macro.
+ (__premain, ___negsi2, ___one_cmplsi2, ___ashlsi3): Use it.
+ (___ashrsi3, ___lshrsi3, ___lshrhi3, ___lshlhi3): Likewise.
+ (___rotrhi3, ___rotlhi3, ___ashrhi3, ___ashrqi3): Likewise.
+ (___lshlqi3, __divmodhi4, ___mulqi3, ___mulhi3): Likewise.
+ (__mulhi32): Likewise.
+ (ret): Update macro for 68HC11.
+ (__far_trampoline): Implement for 68HC11.
+ (__call_a16, __call_a32, __return_void, __return_16): New support
+ routines for 68HC11 memory bank switching calling support.
+ (__return_32): Likewise.
+
+2003-03-24 Neil Booth <neil@daikokuya.co.uk>
+
+ * toplev.c (independent_decode_option): Don't skip a 'Y' prefix.
+
+2003-03-24 Janis Johnson <janis187@us.ibm.com>
+
+ * doc/install.texi (Testing): Mention test result links from build
+ status pages.
+
+2003-03-24 Mark Mitchell <mark@codesourcery.com>
+
+ * function.c (put_var_into_stack): Change bool parameter to int.
+ (gen_mem_addressof): Likewise.
+ * rtl.h (gen_mem_addressof): Likewise.
+ * tree.h (put_var_into_stack): Likewise.
+ * config/alpha/alpha.c (alpha_gp_save_rtx): Adjust call to
+ gen_mem_addressof or put_var_into_stack.
+ * config/c4x/c4x.c (c4x_expand_builtin): Likewise.
+ * config/ia64/ia64.c (spill_tfmode_operand): Likewise.
+
+2003-03-24 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): New.
+
+2003-03-24 Jakub Jelinek <jakub@redhat.com>
+
+ * dojump.c (do_jump): Handle UNSAVE_EXPR specially.
+
+2003-03-24 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * doc/contrib.texi (Contributors): Update Janis Johnson.
+
+2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR target/10072
+ * combine.c (simplify_if_then_else): Check that the mode
+ has MODE_INT class before applying the (OP Z (mult COND C2))
+ transformation.
+
+2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/9414
+ * config/sparc/sparc.md (widening peepholes): Use
+ widen_memory_access instead of change_address.
+
+2003-03-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7086
+ * c-typeck.c (c_mark_addressable): Adjust calls to
+ put_var_into_stack.
+ * expr.c (expand_expr): Likewise.
+ * function.c (put_var_into_stack): Add rescan parameter. Do not
+ call fixup_var_refs when rescan is false.
+ (gen_mem_addressof): Likewise.
+ (assign_parms): Adjust calls to put_var_into_stack.
+ (setjmp_protect): Likewise.
+ (setjmp_protect_args): Likewise.
+ * rtl.h (gen_mem_addressof): Change prototype.
+ * stmt.c (expand_decl): Adjust calls to put_var_into_stack.
+ * tree.h (put_var_into_stack): Change prototype.
+
+2003-03-23 Arpad Beszedes <beszedes@cc.u-szeged.hu>
+
+ PR middle-end/9967
+ * builtins.c (expand_builtin_fputs): When optimizing for size,
+ don't transform fputs into fwrite.
+
+2003-03-23 Glen Nakamura <glen@imodulo.com>
+
+ PR c/8224
+ * fold-const.c (extract_muldiv_1): Don't pass through type conversions
+ when signedness changes for division or modulus.
+
+2003-03-24 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Remove unnecessary
+ globalize_label.
+
+2003-03-23 Roger Sayle <roger@eyesopen.com>
+
+ PR c/10178
+ * stmt.c (expand_end_case_type): Check for overflow in range when
+ determining whether to use a bit-test implementation.
+
+2003-03-23 Richard Henderson <rth@redhat.com>
+
+ * cfgcleanup.c (try_optimize_cfg): Allow merging of tablejumps
+ before flow2.
+ * cfgrtl.c (try_redirect_by_replacing_jump): Similarly.
+
+2003-03-23 Richard Henderson <rth@redhat.com>
+
+ PR opt/10116
+ * ifcvt.c (find_if_block): Disallow tablejump insns outgoing
+ from then_bb or else_bb after flow2.
+
+2003-03-23 Zack Weinberg <zack@codesourcery.com>
+
+ * configure.in: Check whether it is necessary to link against
+ libm to use ldexp.
+ * configure: Regenerate.
+ * Makefile.in: Add LDEXP_LIB substitution variable.
+
+2003-03-23 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md: Fix comment typos.
+
+2003-03-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.c (output_cbranch): Fix typo in comment.
+
+2003-03-22 Richard Henderson <rth@redhat.com>
+
+ * cfgcleanup.c (insns_match_p): Do not do EQUIV substitution
+ after reload.
+
+2003-03-22 DJ Delorie <dj at redhat dot com>,
+ Bruce Korb <bkorb at gnu dot org>
+
+ * fixinc/inclhack.def (solaris_mutex_init_1): New; Fix
+ buggy Solaris 2.6 mutex/cond initializers.
+ (solaris_mutex_init): Rename to solaris_mutex_init_2.
+ * fixinc/fixincl.x: Regenerate.
+ * fixinc/tests/base/pthread.h: Update.
+ * fixinc/fixincl.c(initialize): be explicit about the default case
+ and indicate verbose level when being very, very verbose.
+ * fixinc/check.tpl(VERBOSE): provide a means for passing the value in
+
+2003-03-22 Andreas Jaeger <aj@suse.de>
+
+ * config/i386/i386.c (ix86_init_machine_status): Return value.
+
+2003-03-22 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.c (output_cbranch, output_bb, output_bvb): Output nop for
+ conditional branch to the following instruction. Use next_real_insn
+ instead of next_active_insn.
+ (output_dbra, output_movb, jump_in_call_delay): Use next_real_insn
+ instead of next_active_insn.
+
+2003-03-22 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.md ("movti", "*movdi_31", "*movdf_31"): Use 'o'
+ instead of 'm' constraint in forced-split alternatives.
+ ("*adddi3_31", "*subdi3_31"): Likewise. Also, pass 0 instead of 1 as
+ VALIDATE_ADDRESS parameter to operand_subword.
+
+2003-03-22 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.c (notice_update_cc): Correctly handle
+ the case where the set destination is STRICT_LOW_PART.
+
+2003-03-22 Svein E. Seldal <Svein.Seldal@solidas.com>
+
+ * config/c4x/t-c4x (INSTALL_LIBGCC): Make gcc recognize a c33 as a
+ c30 instead of a c40 processor.
+
+2003-03-22 Alan Modra <amodra@bigpond.net.au>
+
+ * combine.c (simplify_comparison <AND>): Use gen_int_mode. Tidy.
+
+2003-03-21 Zack Weinberg <zack@codesourcery.com>
+
+ * c-common.c: Include intl.h.
+ (shadow_warning): Rewrite to allow better diagnostic translations.
+ * c-common.h: Update prototype of shadow_warning. Declare sw_kind enum.
+ * c-decl.c (warn_if_shadowing): Update calls to shadow_warning;
+ use it throughout.
+ * Makefile.in (c-common.o): Add intl.h.
+
+2003-03-21 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * config.gcc: Remove 'float_format'.
+
+ * fixproto: Define NULL and size_t in generated stdlib.h and
+ unistd.h. Kill unused required_stdlib_h, required_unistd_h.
+ Rearrange file generation loop for readability. Generate time.h,
+ string.h if missing.
+ * tsystem.h: Include <string.h>, <time.h> unconditionally.
+ * config.gcc: Blow away POSIX defines.
+
+2003-03-22 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.md ("call_value"): Fix trap check.
+
+2003-03-22 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.h (ASM_DECLARE_FUNCTION_NAME): Fix typo in
+ writing .interrupt command.
+ * config/m68hc11/m68hc11.md ("call"): Look at the symbol to see
+ if it's a far or near function.
+ ("call_value"): Likewise.
+ * config/m68hc11/m68hc11.c (m68hc11_attribute_table): Add far and
+ near attributes.
+ (m68hc11_handle_fntype_attribute): Accept attributes on methods.
+ (m68hc11_override_options): Ignore -mlong-calls for 68HC11.
+ (m68hc11_initial_elimination_offset): Set current_function_far
+ according to attributes.
+ (expand_prologue): Likewise.
+ (trap_handler_symbol): New global to keep track of trap handlers.
+ (m68hc11_encode_section_info): Mark symbol as far if needed; set
+ trap symbol.
+ (m68hc11_is_far_symbol): New function.
+ (m68hc11_is_trap_symbol): New function.
+ * config/m68hc11/m68hc11-protos.h (m68hc11_is_far_symbol): Declare.
+ (m68hc11_is_trap_symbol): Declare.
+
+2003-03-21 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (ix86_compute_frame_layout): Recompute fast prologues
+ only when amount of saved regs changed.
+ (ix86_init_machine_status): Initialize use_fast_prologue_epilgoue_nregs.
+ * i386.h (machine_function): New fields use_fast_prologue_epilgoue_nregs.
+
+2003-03-21 Jan Hubicka <jh@suse.cz>
+
+ PR inline-asm/7916
+ * function.c (instantiate_virtual_regs_lossage): New function.
+ (instantiate_virtual_regs_1): Use it.
+ (instantiate_virtual_regs): Do not continue in substition when insn has
+ been deleted.
+
+2003-03-21 Kazu Hirata <kazu@cs.umass.edu>
+
+ * combine.c (make_field_assignment): Fix a warning.
+
+2003-03-21 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*insv_si_1_n_lshiftrt_16): New.
+
+2003-03-21 Dale Johannesen <dalej@apple.com>
+
+ * config/rs6000/rs6000.h (REG_ALLOC_ORDER): Increase
+ priority for R2 on Darwin.
+ (HARD_REGNO_MODE_OK): Don't accept R31 for DFmode.
+
+2003-03-21 Kazu Hirata <kazu@cs.umass.edu>
+
+ * combine.c (make_field_assignment): Remove unnecessary AND
+ when storing into zero_extract.
+
+2003-03-21 Zack Weinberg <zack@codesourcery.com>
+
+ * aclocal.m4 (gcc_AC_EXAMINE_OBJECT, gcc_AC_C_FLOAT_FORMAT): Delete.
+ * configure.in: Don't call gcc_AC_C_FLOAT_FORMAT.
+ * defaults.h: Remove reference to HOST_FLOAT_WORDS_BIG_ENDIAN
+ in comment.
+
+2003-03-21 DJ Delorie <dj@redhat.com>
+
+ * optabs.c (init_integral_libfuncs): Make sure we init at least up
+ to "long long" size words.
+
+2003-03-21 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.h: Do not include fixdfdi.h on s390x.
+ (TARGET_64BIT): Define as compile-time constant when IN_LIBGCC2.
+ (MIN_UNITS_PER_WORD): Do not define when IN_LIBGCC2.
+
+2003-03-21 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
+
+ PR doc-bug/9813
+ * doc/extend.texi: Move misplaced paragraph about underscores in
+ variables in macros.
+
+2003-03-21 Eric Botcazou <ebotcazou@libertysurf.fr>
+ Richard Henderson <rth@redhat.com>
+
+ PR optimization/8366
+ * config/sparc/sparc.h: (SYMBOLIC_CONST): New macro.
+ (GO_IF_LEGITIMATE_ADDRESS): Use it. Reject the form
+ PIC+SYMBOLIC_CONST in other modes than Pmode.
+ (GO_IF_MODE_DEPENDENT_ADDRESS): Use it. Mark
+ the form PIC+SYMBOLIC_CONST as mode dependent.
+
+2003-03-21 DJ Delorie <dj@redhat.com>
+
+ * config/stormy16/stormy16.c (xstormy16_expand_arith): Make
+ sure we always emit at least one insn.
+
+2003-03-21 Christopher Faylor <cgf@redhat.com>
+
+ * config.gcc (i[34567]86-*-cygwin*): Use new common makefile
+ stub t-cygming. Use common target header cygming.h. Add extra
+ c_target_obj and cxx_target_obj file. Default cygwin to posix
+ threading. Enforce i386 as float format.
+ (i[34567]86-*-mingw*): Use new common makefile stub t-cygming.
+ Remove cygwin.h as target header. Use common target header
+ cygming.h Enforce i386 as float format. Correct typo.
+ * config/i386/cygming.h: New file, containing definitions
+ common to mingw32 and cygwin.
+ * config/i386/cygwin.h: Remove definitions common to cygwin and
+ mingw. Simplify special spec logic. Define "wrappers" around
+ certain include path defines to accommodate -mno-cygwin.
+ Remove some #if 0'ed code.
+ (STANDARD_INCLUDE_DIR) Always define when not cross-compiling.
+ (LINK_SPEC): Don't use cyg search prefix when -mno-cygwin.
+ (GCC_DRIVER_HOST_INITIALIZATION): Define as call to mingw_scan.
+ * config/i386/mingw32.h: Remove definitions common to cygwin and
+ mingw.
+ (EXTRA_OS_CPP_BUILTINS): Adjust.
+ (TARGET_VERSION): Define.
+ * config/i386/crtdll.h (EXTRA_OS_CPP_BUILTINS): Override
+ mingw32.h definitions.
+ (LIBGCC_SPEC): Add libmingwex.a as in mingw32.h.
+ * config/i386/t-cygwin (EXTRA_GCC_OBJS): Define as cygwin1.o.
+ Add compilation rules for cygwin1.o cygwin2.o.
+ * config/i386/cygwin1.c: New file.
+ * config/i386/cygwin2.c: New file.
+ * config/i386/t-cygming: New makefile stub.
+
+2003-03-20 Richard Henderson <rth@redhat.com>
+
+ * fold-const.c (extract_muldiv_1): Revert changing order of
+ operands in case MULT_EXPR of 2003-02-16 patch.
+
+2003-03-20 Daniel Berlin <dberlin@dberlin.org>
+ Merge changes from new-regalloc-branch
+
+ From Michael Matz <matz@suse.de>
+ * df.c (df_ref_record_1): Move init of loc to safe point.
+ Only recurse on interesting things in parallels.
+ Handle CLASS_CANNOT_CHANGE_MODE smarter.
+ (df_uses_record): Ditto.
+
+ * df.h (DF_REF_MEM_OK): New enum member, used to mark ref's which
+ it's already okay to use memory operands in (IE doesn't require
+ adding another insn or anything).
+
+2003-03-20 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/6348
+ * explow.c (allocate_dynamic_stack_space): Handle STACK_SIZE_MODE
+ different from word_mode.
+
+2003-03-20 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*insv_si_1_n_lshiftrt): Restrict the
+ source operand to those that can be extracted with bld.
+
+2003-03-20 Richard Earnshaw <rearnsha@arm.com>
+
+ PR 10066
+ * arm.md (UNSPEC_PIC_BASE): New constant.
+ (pic_add_dot_plus_four): Wrap with unspec.
+ (pic_add_dot_plus_eight): Likewise.
+
+2003-03-20 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*insv_si_1_n): New.
+ (*insv_si_1_n_lshiftrt): Likewise.
+
+2003-03-20 Roger Sayle <roger@eyesopen.com>
+
+ * fold-const.c (fold_mathfn_compare): New function to simplify
+ comparisons against built-in math functions. Fold comparisons
+ of sqrt against constants.
+ (fold): Call fold_mathfn_compare when appropriate.
+
+2003-03-20 Richard Earnshaw <rearnsha@arm.com>
+
+ * ifcvt.c (find_if_case_1): If we add a new bb, update the dominance
+ information.
+
+2003-03-20 Per Bothner <pbothner@apple.com>
+
+ Various cleanups to help compile server.
+
+ * cppinit.c (cpp_create_reader): Take extra hash_table* argument,
+ and pass that to _cpp_init_hashtable.
+ (cpp_read_main_file): Drop hash_table* argument; don't call
+ _cpp_init_hashtable.
+ * cpplib.h: Update declarations to match.
+ * c-opts.c (c_common_init_options): Pass ident_hash to
+ cpp_create_reader.
+ (c_common_post_options): Don't pass ident_hash to cpp_read_main_file.
+ * fix-header.c (read_scan_file): Likewise pass NULL table to
+ cpp_create_reader rather than cpp_read_main_file.
+
+ * cppfiles.c (cpp_rename_file): Generalized and renamed
+ to cpp_change_file.
+ * cpplib.h: Update declaration to match.
+ * c-opts.c (push_command_line_line, finish_options): Change
+ cpp_rename_file calls to cpp_change_file.
+
+ * line-map.c (add_line_map): Allow leaving the outermost file.
+ Allowing entering an outermost-file after the initial time.
+
+ * toplev.c (pop_srcloc): Allow popping from initial file.
+
+2003-03-20 Kazu Hirata <kazu at cs dot umass dot edu>
+
+ * fold-const.c (fold): Fold A - (A & B) into ~B & A.
+
+2003-03-20 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): New.
+
+2003-03-20 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*addsi3_and_r_1): New.
+ (*addsi3_and_not_r_1): Likewise.
+
+2003-03-19 Loren James Rittle <ljrittle@acm.org>
+
+ * Makefile.in (STRICT2_WARN): Add @WERROR@.
+ (GCC_WARN_CFLAGS): Remove $(WERROR).
+ (fixinc.sh-warn): New.
+ * ada/Make-lang.in (ada-warn): Add $(WERROR).
+ * cp/Make-lang.in (cp-warn): Add $(WERROR).
+ * f/Make-lang.in (f-warn): Add $(WERROR).
+ * java/Make-lang.in (java-warn): Add $(WERROR).
+ * treelang/Make-lang.in (treelang-warn): Add $(WERROR).
+
+2003-03-19 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * c-common.h (c_dump_tree), c-dump.c (c_dump_tree),
+ langhooks-def.h (lhd_tree_dump_dump_tree),
+ langhooks.c (lhd_tree_dump_dump_tree), langhooks.h (*dump_tree):
+ Change return type from 'int' to 'bool'. Replace 0 and 1 with
+ true and false in return statements.
+
+2003-03-19 Kevin Buettner <kevinb@redhat.com>
+
+ * dwarf2out.c (DWARF_INITIAL_LENGTH_SIZE): Define.
+ (DWARF_COMPILE_UNIT_HEADER_SIZE): Take into account
+ DWARF_INITIAL_LENGTH_SIZE.
+ (output_compilation_unit_header, output_pubnames, output_aranges)
+ (output_line_info): Output 0xffffffff escape value for 64-bit
+ DWARF extension.
+ * config/mips/iris6.h (DWARF_INITIAL_LENGTH_SIZE): Define.
+
+2003-03-19 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.c (s390_preferred_reload_class): Do not
+ force constants to the pool unless necessary.
+ (s390_decompose_address): Prefer to use pointer as base,
+ not index register.
+ * config/s390/s390.md ("*tsthiCCT_only"): Remove '?' from
+ Q alternative.
+ ("*movdi_64", "*movsi", "movhi", "movqi_64", "movqi",
+ "*movdf_64", "*movsf"): Add '?' to Q->Q alternatives.
+ ("*extractqi", "*extracthi", "*zero_extendhisi2_31",
+ "*zero_extendqisi2_31", "*zero_extendqihi2_31",
+ "*adddi3_31", "*subdi3_31"): Do not set "type" attribute.
+
+2003-03-19 Jan Hubicka <jh@suse.cz>
+
+ * i386.h (machine_function): New fields use_fast_prologue_epilogue.
+ * i386.c (use_fast_prologue_epilogue): Remove.
+ (ix86_frame): New field save_regs-using_mov;
+ (ix86_compute_frame_layout): Decide on fast prologues;
+ allocate saved registers in red zone.
+ (ix86_expand_epilogue, ix86_expand_prolgoues): Obey new parameters.
+
+2003-03-19 Nick Clifton <nickc@redhat.com>
+
+ * config/mcore/mcore.h (CPP_SPEC): Remove trailing semi-colon.
+
+2003-03-18 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR 10062
+ * config/pa/pa-hpux.h (TARGET_HPUX_UNWIND_LIBRARY): Redefine.
+ * pa-protos.h (output_lbranch): New prototype.
+ * pa.c (compute_frame_size): Change size of the frame marker on the
+ 64-bit ports to 48 bytes.
+ (pa_output_function_prologue): Document why SAVE_SP is set.
+ (hppa_expand_prologue): Save previous stack pointer into frame marker
+ on targets which use the hpux unwind library.
+ (output_cbranch): Use output_lbranch.
+ (output_lbranch): New function to output long unconditional branches.
+ * pa.h (TARGET_HPUX_UNWIND_LIBRARY): Define.
+ (STACK_POINTER_OFFSET): Update offset for 48-byte frame marker on
+ 64-bit ports.
+ * pa.md (jump): Use output_lbranch.
+ (allocate_stack): New expander for dynamic stack allocation.
+
+2003-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (rs6000_stack_info): Only require a frame
+ when debugging on XCOFF targets. Delete "abi" temp.
+
+ PR target/10073
+ * combine.c (force_to_mode <NOT>): Use gen_int_mode.
+
+2003-03-18 Jakub Jelinek <jakub@redhat.com>
+
+ * config/s390/s390.c (s390_output_dwarf_dtprel): New.
+ * config/s390/s390-protos.h (s390_output_dwarf_dtprel): New proto.
+ * config/s390/s390.h (ASM_OUTPUT_DWARF_DTPREL): Define.
+
+ * config/ia64/ia64.c (ia64_output_dwarf_dtprel): New.
+ * config/ia64/ia64-protos.h (ia64_output_dwarf_dtprel): New proto.
+ * config/ia64/ia64.h (ASM_OUTPUT_DWARF_DTPREL): Define.
+
+2003-03-18 Geoffrey Keating <geoffk@apple.com>
+
+ * config/rs6000/rs6000.c (rs6000_emit_prologue): Don't clone
+ the result of machopic_function_base_name.
+ * config/darwin.c (machopic_function_base_name): Use a gc-allocated
+ string rather than a static array.
+
+ * Makefile.in (emit-rtl.o): Add gt-emit-rtl.h to dependencies.
+
+ * gengtype.c: Include rtl.h.
+ (enum rtx_code): Don't define.
+ (rtx_format): Make declaration match rtl.h.
+ (rtx_next_new): Rename from rtx_next to avoid conflict. Change all
+ users.
+ (adjust_field_rtx_def): Describe strings in NOTE_LINE_NUMBER notes.
+ * Makefile.in (gengtype.o): Update dependencies.
+
+2003-03-18 Andreas Schwab <schwab@suse.de>
+
+ * config/m68k/m68k.md (iordi3): Fix setting low half to -1. From
+ martin@blom.org.
+
+2003-03-18 Geoffrey Keating <geoffk@apple.com>
+
+ * function.c (next_block_index): Mark with GTY.
+
+ * config/rs6000/rs6000.md (macho_correct_pic): Correct pattern.
+
+2003-03-18 Richard Henderson <rth@redhat.com>
+
+ * config/ia64/ia64.md (UNSPECV_SETJMP_RECEIVER): New.
+ (builtin_setjmp_receiver): Delay call to ia64_reload_gp
+ until after reload.
+
+2003-03-18 Richard Henderson <rth@redhat.com>
+
+ * builtins.c (expand_builtin_unop): New target_mode operand;
+ use it to convert the result to the correct mode.
+ (expand_builtin): Update all callers.
+
+2003-03-18 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/s390.md ("movti", "movhi", "movqi"): Add "type" attribute.
+
+2003-03-18 Jan Hubicka <jh@suse.cz>
+
+ * i386.md: Fix previous commit that mistakely applied the patch
+ twice.
+
+ * alias.c (rtx_equal_for_memref_p): Assume that X and Y has been
+ canonicalized.
+ (memrefs_conflict_p): Likewise.
+ (addr_side_effect_eval): Canonicalize the constructed address.
+
+2003-03-18 Jan Hubicka <jh@suse.cz>
+
+ * i386.md (cvtts?2si peep2): New.
+
+2003-03-18 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*iorsi3_two_qi_zext): New.
+
+2003-03-18 Andreas Schwab <schwab@suse.de>
+
+ * dwarf2out.c (output_file_names): Cast size_t to unsigned long
+ for format.
+
+2003-03-17 Jason Merrill <jason@redhat.com>
+
+ PR c++/10091
+ * expr.c (expand_expr) [ADDR_EXPR]: Disallow taking the address of
+ an unaligned member of TREE_ADDRESSABLE type.
+
+2003-03-18 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/linux64.h (MASK_PROFILE_KERNEL): Define.
+ (TARGET_PROFILE_KERNEL): Define.
+ (SUBTARGET_SWITCHES): Handle -mprofile-kernel.
+ (PROFILE_BEFORE_PROLOGUE): Don't define.
+ (PROFILE_KERNEL): Remove hacks.
+ * config/rs6000/rs6000.c (TARGET_PROFILE_KERNEL): Define default.
+ (rs6000_stack_info): No need to save lr if just for profiling when
+ TARGET_PROFILE_KERNEL.
+ (output_profile_hook): Output nothing when TARGET_PROFILE_KERNEL.
+ (output_function_profiler): Localize label generation. Emit code
+ for kernel profiling.
+
+2003-03-17 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300-protos.h: Add a prototype for
+ byte_accesses_mergeable_p.
+ * config/h8300/h8300.c (byte_accesses_mergeable_p): New.
+ * config/h8300/h8300.md (*iorhi3_two_qi_mem): Likewise.
+ (a splitter): Likewise.
+ (*iorsi3_ashift_16_ashift_24): Likewise.
+ (*iorsi3_ashift_16_ashift_24_mem): Likewise.
+
+2003-03-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * dwarf2asm.h: Delete obsolete comment.
+ (dw2_asm_output_data, dw2_asm_output_delta, dw2_asm_output_offset,
+ dw2_asm_output_pcrel, dw2_asm_output_addr,
+ dw2_asm_output_addr_rtx, dw2_asm_output_encoded_addr_rtx,
+ dw2_asm_output_nstring, dw2_asm_output_data_uleb128,
+ dw2_asm_output_data_sleb128, dw2_asm_output_delta_uleb128,
+ dw2_asm_output_delta_sleb128): Add ATTRIBUTE_NULL_PRINTF.
+
+2003-03-17 Zack Weinberg <zack@codesourcery.com>
+
+ * c-tree.h (struct lang_identifier): Remove error_locus field.
+ (IDENTIFIER_ERROR_LOCUS): Kill.
+ (record_function_scope_shadow): New prototype.
+ * c-typeck.c (build_external_ref): Don't complain if
+ decl is error_mark_node. When not at file scope, bind the
+ decl's local value to error_mark_node to suppress further
+ warnings, instead of setting IDENTIFIER_ERROR_LOCUS.
+
+ * c-decl.c (get_function_binding_level): New static function.
+ (record_function_scope_shadow): New exported function.
+ (c_make_fname_decl): Use get_function_binding_level.
+
+2003-03-17 Steve Ellcey <sje@cup.hp.com>
+
+ * stmt.c (tail_recursion_args): Call promote_mode to set
+ unsignedp flag correctly before calling convert_move.
+
+2003-03-17 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * loop-unroll.c (decide_peel_completely,
+ decide_unroll_constant_iterations, decide_unroll_stupid,
+ decide_unroll_runtime_iterations, decide_peel_simple): Set
+ loop->has_desc.
+
+2003-03-17 Jan Hubicka <jh@suse.cz>
+
+ * ggc-common.c (ggc_mark_roots): Use htab_traverse_noresize.
+
+2003-03-17 Olivier Hainque <hainque@act-europe.fr>
+
+ * function.c (assign_parms): For a struct value address passed as
+ first argument, delay the function's result RTL setup code until
+ after the emission of parameter conversions.
+
+2003-03-17 Dave Love <fx@gnu.org>
+ Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * config/alpha/osf.h (TARGET_OS_CPP_BUILTINS): Define __digital__,
+ __arch64__ to match Compaq cc.
+
+2003-03-17 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-opts.c: Default TARGET_EBCDIC to 0 if not defined.
+ (c_common_init): Set EBCDIC in cpp options.
+ * cpplex.c (maybe_read_ucs, cpp_parse_escape): Use EBCDIC option,
+ not conditional compilation.
+ * cpplib.h (struct cpp_options): New entry EBCDIC.
+
+2003-03-17 Neil Booth <neil@daikokuya.co.uk>
+
+ * fix-header.c (read_scan_file): Need to malloc arguments to add_path.
+
+2003-03-17 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ * function.c (thread_prologue_and_epilogue_insns): Set delete_unused
+ argument to 0 for redirect_jump.
+
+2003-03-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8805
+ * except.c (eh_region_u_cleanup): Add prev_try.
+ (expand_eh_region_end_cleanup): Set it.
+ (reachable_handlers): Use it to skip over cleanup blocks.
+
+2003-03-17 Andreas Jaeger <aj@suse.de>
+
+ * Makefile.in (TAGS): Remove obsolete handling of =*.[chy].
+
+2003-03-17 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/linux64.h (TARGET_64BIT): Redefine.
+ (TARGET_RELOCATABLE, TARGET_EABI, TARGET_PROTOTYPE): Likewise.
+ (SUBTARGET_SWITCHES, SUBTARGET_OPTIONS): Likewise.
+ (SUBTARGET_OVERRIDE_OPTIONS, CPP_SYSV_SPEC): Likewise.
+
+2003-03-16 Richard Henderson <rth@redhat.com>
+
+ * simplify-rtx (simplify_binary_operation): Don't abort for
+ SS_PLUS, US_PLUS, SS_MINUS, US_MINUS.
+
+2003-03-16 Richard Henderson <rth@redhat.com>
+
+ * config/i386/i386.md (movstrictqi, movstrictqi_1): Check
+ optimize_size as well.
+
+2003-03-16 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (print_operand): Handle 'b' modifier
+ for D register to specify the low part of it, aka B.
+ (m68hc11_gen_movhi): Use REG_WAS_0 note and increment or decrement
+ the register if we are loading 1 or -1 to it; avoid using temp
+ register when moving X/Y to Y/X.
+ (m68hc11_gen_movqi): Likewise.
+ (m68hc11_check_z_replacement): Fix last insn setting for compare case.
+
+2003-03-14 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/9016
+ * config/i386/i386.c (ix86_expand_move): Force more CONST_DOUBLEs
+ into the constant pool.
+
+2003-03-16 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
+
+ PR target/9164
+ * tree.c (get_narrower): For extensions with unchanged bit number,
+ return the unsignedness of the outer mode.
+
+2003-03-16 Roger Sayle <roger@eyesopen.com>
+
+ * c-typeck.c (build_component_ref): Turn "for" into "do .. while"
+ to avoid "may be used uninitialized" warning on ia64-hpux.
+ * config/ia64/ia64-c.c: Include "tm_p.h" for function prototypes.
+
+2003-03-16 Andreas Jaeger <aj@suse.de>
+
+ * configure.in: Improve check for memcheck.h.
+ * configure: Regenerated.
+
+2003-03-16 Neil Booth <neil@daikokuya.co.uk>
+
+ * doc/cppopts.texi: Remove documentation of -A-.
+
+2003-03-15 Zack Weinberg <zack@codesourcery.com>
+
+ * doc/libgcc.texi: Remove @tie.
+
+2003-03-15 Josef Zlomek <zlomekj@suse.cz>
+
+ * rtl.h (subrtx_p): Renamed to rtx_referenced_p.
+ (rtx_pair): Added new element update_label_nuses, renamed to
+ replace_label_data.
+ * cfgcleanup.c (outgoing_edges_match, try_crossjump_to_edge): Use
+ replace_label_data instead of rtx_pair.
+ * loop.c (load_mems): Likewise.
+ * rtlanal.c (replace_label): Replace label in pool constants and in
+ INSN_LIST (in REG_LABEL note).
+ (subrtx_p): Renamed to rtx_referenced_p.
+ (subrtx_p_1): Renamed to rtx_referenced_p_1, compare the interior of
+ LABEL_REF with CODE_LABEL, traverse constants from pool.
+
+2003-03-15 Aldy Hernandez <aldyh@redhat.com>
+ Zack Weinberg <zack@codesourcery.com>
+
+ * Makefile.in (TEXI_GCCINT_FILES): Add libgcc.texi.
+ * doc/libgcc.texi: New file.
+ * doc/interface.texi: Delete paragraph about libgcc interface.
+ * doc/gccint.texi: Add libgcc menu entry and @include libgcc.texi.
+
+2003-03-15 Jason Merrill <jason@redhat.com>
+
+ PR debug/9039
+ * dwarf2out.c (gen_decl_die): Ignore frontend tree codes.
+
+ PR debug/6387
+ * dwarf2out.c (dwarf2out_decl): If we're at -g1, just stick nested
+ function DIEs at toplevel.
+ (decls_for_scope): At -g1, don't descend into subblocks.
+
+2003-03-15 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * varasm.c (struct rtx_const): Change type of un.addr member
+ to struct holding an additional 'symbol' member.
+ (decode_rtx_const): Re-enable optimization to count SYMBOL_REFs
+ with equal string addresses as equal.
+ (simplify_subtraction): Adapt to struct rtx_const change.
+
+2003-03-15 Neil Booth <neil@daikokuya.co.uk>
+
+ * fix-header.c (read_scan_file): Read main file before handling -D.
+
+2003-03-15 Roger Sayle <roger@eyesopen.com>
+
+ * c-cppbuiltin.c (builtin_define_with_value_n): Fix whitespace.
+ * c-typeck.c (c_tree_expr_nonnegative_p): Likewise.
+ * cfgbuild.c (find_many_sub_basic_blocks): Likewise.
+ (find_sub_basic_blocks): Likewise.
+ * cgraphunit.c (cgraph_expand_functions): Likewise.
+ * dwarf2out.c (prune_unused_types): Likewise.
+ * expr.c (store_field): Likewise.
+ * genextract.c (print_path): Likewise.
+ * haifa-sched.c (schedule_insn): Likewise.
+ * lcm.c (compute_antinout_edge): Likewise.
+ * loop-unroll.c (decide_peel_once_rolling): Likewise.
+ * ra-colorize.c (ra_colorize_free_all): Likewise.
+ * ra-debug.c (dump_igraph): Likewise.
+ (debug_hard_reg_set): Likewise.
+ * reg-stack.c (reg_to_stack): Likewise.
+ * rtlanal.c (refers_to_regno_p): Likewise.
+ * tracer.c (layout_superblocks): Likewise.
+
+2003-03-15 Neil Booth <neil@daikokuya.co.uk>
+
+ * fix-header.c (read_scan_file): Fix thinko.
+
+2003-03-15 Glen Nakamura <glen@imodulo.com>
+
+ * reload1.c (choose_reload_regs): Use && instead of ||
+ with REG_CANNOT_CHANGE_MODE_P condition.
+
+2003-03-15 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in: Update.
+ * c-common.h (cb_register_builtins): Rename c_cpp_builtins.
+ * c-lex.c (init_c_lex): Register builtins hook is dead.
+ * c-opts.c (COMMAND_LINE_OPTIONS, missing_arg): Handle -A, -D and -U.
+ (c_common_decode_option): Don't call cpp_handle_option.
+ Handle -A, -D and -U.
+ (handle_deferred_opts): Simplify.
+ (finish_options): Define builtins and command line macros.
+ * c-ppoutput.c (init_pp_output): Register builtins hook is dead.
+ * cppinit.c: Don't include intl.h.
+ (init_builtins): Rename cpp_init_builtins. No hook to call.
+ (init_library): Don't need to sort options.
+ (cpp_create_reader): Don't set pending.
+ (cpp_destroy): Don't free pending.
+ (struct pending_option, cl_directive_handler, struct cpp_pending,
+ APPEND, free_chain, new_pending_directive, parse_option, opt_comp,
+ cpp_finish_options, COMMAND_LINE_OPTIONS, DEF_OPT, struct cl_option,
+ cl_options, cpp_handle_option): Remove.
+ * cpplib.h (struct cpp_pending, register_builtins, cpp_handle_option,
+ cpp_finish_options): Remove.
+ (cpp_init_builtins): New.
+ * fix-header.c (read_scan_file): Update to handle -D. Fix
+ handling of -I. Replace call to cpp_finish_options.
+
+2003-03-15 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
+
+ PR optimization/9387
+ * function.c (thread_prologue_and_epilogue_insns): Use redirect_jump
+ for conditional returns.
+
+2003-03-14 Jason Merrill <jason@redhat.com>
+
+ PR optimization/6871
+ * varasm.c (assemble_variable): Leave constant zeroes in .rodata.
+
+2003-03-14 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-opts.c (finish_options): New.
+ (COMMAND_LINE_OPTIONS, c_common_decode_option): Add -imacros.
+ (missing_arg): Handle OPT_include and OPT_imacros.
+ (c_common_init, c_common_parse_file): Use finish_options.
+ (handle_deferred_opts): Update.
+ * cppinit.c (struct cpp_pending): Remove imacros_head and imacros_tail.
+ (cpp_finish_options): Don't handle -imacros here.
+ (no_fil): Remove.
+ (COMMAND_LINE_OPTIONS, cpp_handle_option): Don't handle -imacros.
+
+2003-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_emit_load_toc_table): Don't call
+ rs6000_maybe_dead if !fromprolog.
+
+2003-03-14 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in: Update.
+ * c-common.h (fe_file_change, pp_file_change): New.
+ * c-lex.c (init_c_lex): Don't set cb_file_change.
+ (c_common_parse_file): Move to c-opts.c.
+ (cb_file_change): Rename fe_file_change.
+ * c-opts.c: Include debug.h.
+ (warn_unused_macros, include_cursor): New.
+ (push_command_line_include, cb_file_change): New.
+ (COMMAND_LINE_OPTIONS): Handle -include.
+ (c_common_decode_option): Use local warn_unused_macros.
+ Handle OPT_include.
+ (c_common_post_options): Set file change callback.
+ (handle_deferred_opts): Skip -include. Don't free the array.
+ (c_common_init): Call cpp_finish_options here, and push an
+ initial -include file.
+ * c-ppoutput.c (cb_file_change): Rename pp_file_change.
+ (preprocess_file): Don't call cpp_finish_options.
+ (init_pp_output): Don't set the file change callback.
+ (pp_file_change): Return if no line commands or no output.
+ * cpphash.h (next_include_file, first_unused_line): Remove.
+ * cppinit.c (include_head, include_tail): Remove.
+ (cpp_destroy): Don't free -include chain.
+ (cpp_finish_options): Don't handle -include, or worry about
+ -Wunused-macros.
+ (_cpp_maybe_push_include_file): Remove.
+ (COMMAND_LINE_OPTIONS, cpp_handle_option): Don't handle -include.
+ * cpplib.c (_cpp_pop_buffer): Don't handle -include.
+ * cppmacro.c (_cpp_warn_if_unused_macro, _cpp_create_definition):
+ Used flag is set based upon the state of the warn_unused_macros
+ flag, and so use of first_unused_line is unnecessary.
+
+2003-03-13 Jan Hubicka <jh@suse.cz>
+
+ * cselib.c (clear_table): Do not take argument; always clear just
+ used slots.
+ (cselib_process_insn): Update call of clear_table
+ (cselib_init): Do not call clear_table.
+ (cselib_finish): Clear table.
+
+ * cse.c (count_reg_usage): Do not check side_effects_p.
+ * rtlanal.c (set_noop_p): Check side_effects_p only when set looks
+ like noop.
+ (find_reg_equal_equiv_note): Do not use find_reg_note.
+
+2003-03-14 Richard Henderson <rth@redhat.com>
+
+ PR target/9700
+ * config/alpha/alpha.c (alpha_va_start): Account for
+ current_function_pretend_args_size in the AP offset.
+
+ * config/alpha/alpha.h (SETUP_INCOMING_VARARGS): Move out of line.
+ (INITIAL_ELIMINATION_OFFSET): Move out of line.
+ * config/alpha/alpha.c (alpha_setup_incoming_varargs): New.
+ (alpha_initial_elimination_offset) New.
+ * config/alpha/alpha-protos.h: Update.
+
+2003-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * stmt.c (expand_start_case): Call emit_queue ().
+
+2003-03-14 Chris Demetriou <cgd@broadcom.com>
+ Alexandre Oliva <aoliva@redhat.com>
+
+ * config/mips/mips.h (FUNCTION_PROFILER): _mcount() doesn't pop 2
+ words in new abis.
+
+2003-03-14 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/8396
+ * tree-inline.c (initialize_inlined_parameters): Make sure the value
+ of read-only constant arguments is passed with the right type.
+
+2003-03-14 Steven Bosscher <steven@gcc.gnu.org>
+
+ * doc/extend.texi (Function Names): Make the example compilable.
+
+2003-03-13 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (processor_target_table): Really allow
+ GP optional instructions on Power4.
+
+2003-03-13 Roger Sayle <roger@eyesopen.com>
+
+ * calls.c (flags_from_decl_or_type): Factor and remove redundant
+ conditional tests.
+
+2003-03-13 Mike Stump <mrs@apple.com>
+
+ * ggc-page.c (struct page_entry): Remove varray.h header.
+ Add index_by_depth field.
+ Remove save_in_use_p field.
+ (struct globals): Add depth_in_use, depth_max, by_depth_in_use,
+ by_depth_max, by_depth, and save_in_use fields.
+ (INITIAL_PTE_COUNT): Add.
+ (save_in_use_p_i): Add.
+ (save_in_use_p): Add.
+ (adjust_depth): Add.
+ (move_ptes_to_front): Add.
+ (push_depth): Add.
+ (push_by_depth): Add.
+ (prefetch): Add.
+ (free_page): Add support for and use faster data structures.
+ (ggc_alloc): Likewise.
+ (init_ggc): Likewise.
+ (ggc_recalculate_in_use_p): Likewise.
+ (ggc_pop_context): Likewise.
+ (clear_marks): Likewise.
+ (ggc_pch_read): Likewise.
+ * Makefile.in (ggc-page.o): Remove varray.h.
+
+2003-03-13 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * ChangeLog: Rotated last year's entries to...
+ * ChangeLog.8: New.
+
+ * config/ia64/fde-glibc.c, config/ia64/freebsd.h,
+ config/ia64/hpux.h, config/ia64/hpux_longdouble.h,
+ config/ia64/ia64-c.c, config/ia64/ia64-modes.def,
+ config/ia64/ia64-protos.h, config/ia64/ia64.c,
+ config/ia64/ia64.h, config/ia64/ia64.md,
+ config/ia64/itanium1.md, config/ia64/itanium2.md,
+ config/ia64/quadlib.c, config/ia64/unwind-ia64.c,
+ config/ia64/unwind-ia64.h: It's GCC, not GNU CC.
+
+2003-03-13 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_dwarf_register_span):
+ Differentiate endianness.
+ (s6000_override_options): Use cpu type instead of TARGET_SPE.
+
+2003-03-13 Nick Clifton <nickc@redhat.com>
+
+ * config/arm/arm.c (print_multi_reg): Do not generate a type 2
+ LDM instructions with writeback enabled.
+ (output_return_instruction): Likewise.
+
+ * config/arm/pe.h (FIXED_REGISTERS): Remove definition.
+ (CALL_USED_REGISTERS): Remove definition.
+ (SUBTARGET_CONDITIONAL_REGISTER_USAGE): Define.
+
+2003-03-13 Alan Modra <amodra@bigpond.net.au>
+
+ * config/rs6000/rs6000.c (rs6000_flag_pic): Delete.
+ (rs6000_xcoff_encode_section_info): #ifdef TARGET_XCOFF.
+ (rs6000_binds_local_p, TARGET_BINDS_LOCAL_P): #if TARGET_MACHO.
+ (rs6000_override_options): Don't clear flag_pic for ABI_AIX.
+ (rs6000_legitimize_address): Formatting.
+ (rs6000_emit_move): Likewise.
+ (rs6000_return_addr): Test ABI_AIX as well as flag_pic.
+ (rs6000_emit_prologue <save_LR_around_toc_setup>): Likewise.
+ (rs6000_elf_select_section): Comment reason for shlib being
+ set for ABI_AIX.
+ (rs6000_elf_unique_section): Likewise.
+ (rs6000_elf_encode_section_info): Test !TARGET_AIX as well as ABI_AIX.
+ * config/rs6000/rs6000.h (LEGITIMATE_LO_SUM_ADDRESS_P): Test ABI_AIX
+ as well as flag_pic.
+ * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Likewise.
+ (MINIMAL_TOC_SECTION_ASM_OP): Likewise.
+ * config/rs6000/linux64.h (TARGET_ENCODE_SECTION_INFO): Don't define.
+
+2003-03-13 Richard Henderson <rth@redhat.com>
+
+ * emit-rtl.c (try_split): Handle 1-1 splits of call insns properly.
+
+ * config/ia64/ia64.c (TARGET_FUNCTION_OK_FOR_SIBCALL): New.
+ (ia64_gp_save_reg): Remove.
+ (struct ia64_frame_info): Move to the beginning of the file;
+ add reg_save_gp.
+ (ia64_expand_call): Rearrange for new call patterns.
+ (ia64_reload_gp): New.
+ (ia64_split_call): New.
+ (ia64_compute_frame_size): Allocate reg_save_gp.
+ (ia64_expand_prologue): Save reg_save_gp.
+ (ia64_expand_epilogue): Don't restore gp.
+ (ia64_hard_regno_rename_ok): Remove R4 hack.
+ (ia64_function_ok_for_sibcall): New.
+ (ia64_output_mi_thunk): Set reload_completed, no_new_pseudos;
+ call try_split on sibcall pattern.
+ * config/ia64/ia64-protos.h: Update.
+ * config/ia64/ia64.md (call_nogp, call_value_nogp, sibcall_nogp):
+ Rename from nopic versions. Confiscate 2nd argument to call as
+ a marker.
+ (call_pic, call_value_pic, sibcall_pic): Remove.
+ (call_gp, call_value_gp, sibcall_gp): New.
+ (builtin_setjmp_setup): Remove.
+ (builtin_setjmp_receiver): Call ia64_reload_gp.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * config/dsp16xx/dsp16xx-protos.h, config/dsp16xx/dsp16xx.c,
+ config/dsp16xx/dsp16xx.h, config/dsp16xx/dsp16xx.md: Replace
+ "GNU CC" with "GCC".
+
+ * config/c4x/c4x-c.c, config/c4x/c4x-modes.def,
+ config/c4x/c4x-protos.h, config/c4x/c4x.c, config/c4x/c4x.h,
+ config/c4x/c4x.md, config/c4x/libgcc.S, config/c4x/rtems.h:
+ GCC, not GNU CC.
+
+ * genattrtab.h, hosthooks-def.h, hosthooks.h, langhooks-def.h,
+ langhooks.h, tree-inline.h: Replace "GNU CC" with "GCC".
+
+ * c-pch.c, dummy-conditions.c, genautomata.c, genconditions.c,
+ langhooks.c, tree-inline.c, unwind-dw2-fde-darwin.c,
+ unwind-dw2-fde-glibc.c, unwind-libunwind.c, vmsdbgout.c: Replace
+ "GNU CC" with "GCC".
+
+ * config/v850/lib1funcs.asm, config/v850/rtems.h,
+ config/v850/v850-c.c, config/v850/v850-protos.h,
+ config/v850/v850.c, config/v850/v850.h, config/v850/v850.md:
+ GCC, not GNU CC.
+
+ * config/vax/bsd.h, config/vax/elf.h, config/vax/netbsd-elf.h,
+ config/vax/netbsd.h, config/vax/openbsd.h, config/vax/openbsd1.h,
+ config/vax/ultrix.h, config/vax/vax-protos.h, config/vax/vax.c,
+ config/vax/vax.h, config/vax/vax.md, config/vax/vaxv.h: GCC, not
+ GNU CC.
+
+2003-03-12 Benjamin Kosnik <bkoz@redhat.com>
+
+ * cpppch.c (cpp_valid_state): Use DL_WARNING_SYSHDR, not DL_WARNING.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * fixinc/fixinc.interix: Remove dead code (most of it).
+ * fixinc/fixinc.dgux: Remove.
+
+ * ginclude/float.h, ginclude/iso646.h, ginclude/stdarg.h,
+ ginclude/stdbool.h, ginclude/stddef.h: GCC, not GNU CC.
+
+2003-03-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.c (pa_init_builtins): Fix warning.
+
+2003-03-12 Steve Ellcey <sje@cup.hp.com>
+
+ * config/ia64/ia64.h (ASM_OUTPUT_XDATA_CHAR): Remove.
+ (ASM_OUTPUT_XDATA_SHORT): Remove.
+ (ASM_OUTPUT_XDATA_INT): Remove.
+ (ASM_OUTPUT_XDATA_DOUBLE_INT): Remove.
+ (ASM_OUTPUT_ADDR_DIFF_ELT): Handled 32 bit address diffs.
+ (ASM_PREFERRED_EH_DATA_FORMAT): Handle 32 bit EH pointers.
+ (CASE_VECTOR_MODE): Handle 32 bit pointers in case statement.
+
+2003-03-12 Andrew Lewycky <andrew@mxc.ca>
+
+ PR c++/7050
+ * expr.c (store_expr): Don't attempt to store void-typed trees,
+ just evaluate them for side effects.
+
+2003-03-12 Neil Booth <neil@daikokuya.co.uk>
+
+ * cppfiles.c (cpp_rename_file, cpp_push_include): New.
+ * cppinit.c (push_include): Move with changes to cppfiles.c.
+ (cpp_read_main_file): Mark named operators here...
+ (cpp_finish_options): ...not here. Update.
+ (_cpp_maybe_push_include_file): Update.
+ * cpplib.h (cpp_push_include, cpp_rename_file): New.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * aclocal.m4: Introduce gcc_GAS_VERSION_GTE_IFELSE,
+ _gcc_COMPUTE_GAS_VERSION.
+ * configure.in: Use them.
+ * configure: Regenerate.
+
+2003-03-12 Bob Wilson <bob.wilson@acm.org>
+
+ * config/xtensa/xtensa.md (adddi3): Don't clobber source operand used
+ to detect carry.
+ (subdi3): Reorder emitted instructions.
+
+2003-03-12 Andreas Jaeger <aj@suse.de>
+
+ * config/i386/netbsd64.h (TARGET_OS_CPP_BUILTINS): Remove call to
+ NETBSD_OS_CPP_BUILTINS_LP64.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Makefile.in: Eliminate all.indirect. Update and clean up comments.
+ Rearrange. Reorganize.
+ * configure.in: Rearrange.
+ * configure: Regenerate.
+
+2003-03-12 Andreas Jaeger <aj@suse.de>
+
+ * c-cppbuiltin.c (cb_register_builtins): Define LP64 builtins for
+ LP64 targets.
+
+ * doc/cpp.texi (Common Predefined Macros): Document __LP64__ and
+ _LP64.
+
+ * config/ia64/ia64.h (TARGET_CPU_CPP_BUILTINS): Do not define
+ _LP64 macros here.
+ * config/pa/pa.h (TARGET_CPU_CPP_BUILTINS): Likewise.
+
+ * config/alpha/netbsd.h (TARGET_OS_CPP_BUILTINS): Remove call to
+ NETBSD_OS_CPP_BUILTINS_LP64.
+ * config/sh/netbsd-elf.h (TARGET_OS_CPP_BUILTINS): Likewise.
+ * config/sparc/netbsd-elf.h (TARGET_OS_CPP_BUILTINS): Likewise.
+
+ * config/netbsd.h (NETBSD_OS_CPP_BUILTINS_LP64): Remove.
+
+2003-03-12 Jan Hubicka <jh@suse.cz>
+
+ * i386.c (ix86_setup_incoming_varargs): Set stack_alignment_needed to 128.
+
+2003-03-12 Daniel Jacobowitz <drow@mvista.com>
+
+ Fix PR target/9797 and PR c/9853.
+ * stmt.c (expand_decl_init): Call push_temp_slots () and
+ pop_temp_slots ().
+
+2003-03-12 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.c: Include basic-block.h.
+ (sh_output_mi_thunk, emit_load_ptr): New functions.
+ (TARGET_ASM_OUTPUT_MI_THUNK, TARGET_ASM_CAN_OUTPUT_MI_THUNK): Redefine.
+
+2003-03-12 Nick Clifton <nickc@redhat.com>
+
+ * config/arm/pe.h (FIXED_REGISTERS): Add Maverick registers.
+ (CALL_USED_REGISTERS): Likewise.
+ * config/arm/arm.h (FIRST_PSEUDO_REGISTER): Update comment
+ describing how this value is calculated.
+
+2003-03-12 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * configure.in (rlim_t): Define to long if no valid definition
+ found in sys/resource.h.
+ * config.in, configure: Regenerate.
+
+2003-03-12 Neil Booth <neil@daikokuya.co.uk>
+
+ * config/mcore/mcore-elf.h (CPP_PREDEFINES): Replace with
+ TARGET_OS_CPP_BUILTINS.
+ * config/mcore/mcore-pe.h: Similarly.
+ * config/mcore/mcore.h: Replace CPP_PREDEFINES and part of
+ CPP_SPEC with TARGET_CPU_CPP_BUILTINS.
+
+2003-03-12 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR c/9928
+ * c-decl.c (duplicate_decls): Discard the initializer of the new decl
+ only if it is a VAR_DECL.
+
+2003-03-12 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/9888
+ * config/i386/i386.md (jcc_1): Fix range.
+ (jcc_2): Likewise.
+ (jump): LIkewise.
+ (doloop_end_internal): Likewise.
+
+2003-03-12 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * config/i386/winnt.c (DLL_IMPORT_PREFIX): New define.
+ Use throughout instead of DLL_IMPORT_EXPORT_PREFIX and "e."
+ (DLL_EXPORT_PREFIX): New define. Use throughout instead of
+ DLL_IMPORT_EXPORT_PREFIX and "i."
+ (i386_pe_dllexport_name_p): Here.
+ (i386_pe_dllimport_name_p): Here.
+ (i386_pe_mark_dllexport): Here. Remove DLL_IMPORT_PREFIX,
+ not 9 chars when getting identifier name.
+ (i386_pe_mark_dllimport): Here.
+ (i386_pe_encode_section_info): Here. Remove DLL_IMPORT_PREFIX,
+ not 9 chars when getting identifier name. Correct comment.
+ (i386_pe_strip_name_encoding): Here. Add comments for different
+ cases.
+ (gen_fastcall_suffix): Break down xmalloc() argument to
+ components.
+ (gen_stdcall_suffix): Likewise.
+ Update copyright year.
+
+2003-03-12 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR optimization/9888
+ * config/i386/i386.md (movsi_1): Remove special alternatives
+ for %eax register.
+ (movsi_1_nointernunit): Likewise.
+ (movhi_1): Likewise.
+ * config/i386/i386.c (memory_address_length): Do not use
+ short displacement when there is no base.
+ (ix86_attr_length_address_default): Handle LEA instructions.
+
+2003-03-12 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-cppbuiltin.c (builtin_define_std): Make non-static.
+
+2003-03-11 Loren James Rittle <ljrittle@acm.org>
+
+ * config/freebsd-spec.h (FBSD_CPP_PREDEFINES): Remove.
+ (FBSD_TARGET_OS_CPP_BUILTINS): New port-specific macro.
+ (FBSD_TARGET_CPU_CPP_BUILTINS): New port-specific macro.
+ * config/freebsd.h (CPP_PREDEFINES): Remove.
+ (TARGET_OS_CPP_BUILTINS): New.
+ * config/alpha/freebsd.h: Use overridden FBSD_TARGET_CPU_CPP_BUILTINS
+ instead of TARGET_OS_CPP_BUILTINS.
+ * config/sparc/freebsd.h (CPP_PREDEFINES): Remove.
+
+2003-03-11 Geoffrey Keating <geoffk@apple.com>
+
+ * c-cppbuiltin.c (builtin_define_std): Add ATTRIBUTE_UNUSED.
+
+2003-03-11 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_stack_info): Remove
+ insn_chain_scanned. Use insn_chain_scanned_p in machine_function.
+
+ * config/rs6000/rs6000.h (machine_function): Add insn_chain_scanned_p.
+
+2003-03-11 Alexandre Oliva <aoliva@redhat.com>
+
+ * toplev.c (independent_decode_option): Return success for --help,
+ --target-help and --version.
+
+2003-03-11 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/mips/linux64.h (DRIVER_SELF_SPECS): Add endian_spec.
+ Default to -mips3 on -mabi=64. Don't add -mips* flag if -march is
+ specified.
+ (SUBTARGET_ASM_SPEC): Remove -mips*-adding code obviated by
+ DRIVER_SELF_SPECS.
+ (LINK_SPEC): Let endian options affect the linker emulation name.
+
+2003-03-11 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.md (reload_inqi): Fix mode for source in second set.
+
+2003-03-11 Jan Hubicka <jh@suse.cz>
+
+ * cselib.c (cselib_invalidate_mem_1): Move too ...
+ (cselib_invalidate_mem): ... here; use new list
+ (dummy_val, first_containing_mem): New static variables.
+ (clear_table): Initialize first_containing_mem.
+ (discard_useless_values): Compact the containing_mem list.
+ (add_mem_for_addr): Add to the list.
+ * cselib.h (cselib_val): Add next_containing_mem.
+
+2003-03-11 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_override_options): Disable string
+ instructions for e500.
+
+2003-03-11 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in: Update.
+ * c-cppbuiltin.c: Include tm_p.h.
+
+2003-03-11 Aldy Hernandez <aldyh@redhat.com>
+
+ * doc/tm.texi (Frame Registers): Document DWARF_REG_TO_UNWIND_COLUMN.
+
+ * unwind-dw2.c (DWARF_REG_TO_UNWIND_COLUMN): Define.
+ (_Unwind_GetGR): Use DWARF_REG_TO_UNWIND_COLUMN.
+ (_Unwind_SetGR): Same.
+ (_Unwind_GetGRPtr): New.
+ (_Unwind_SetGRPtr): New.
+ (uw_update_context_1): Use accesor functions instead of accessing
+ context->reg[] directly.
+ (uw_install_context_1): Same.
+ (execute_cfa_program): Same.
+ (__frame_state_for): Same.
+
+ * config/rs6000/rs6000.c (spe_synthesize_frame_save): Use 1200 as
+ the synthetic register offset.
+
+ * config/rs6000/rs6000.h (DWARF_REG_TO_UNWIND_COLUMN): New.
+
+2003-03-11 Hans-Peter Nilsson <hp@axis.com>
+
+ * config/cris/cris.md: Remove lingering EGCS reference.
+ ("*extopqihi_side_biap"): For HI operation, match
+ cris_additive_operand_extend_operator, not
+ cris_operand_extend_operator. Adjust condition.
+ ("*extopqihi_side", "*extopqihi"): Ditto.
+ ("*extopqisi_side_biap"): Correct operand numbers in condition.
+ ("*extophisi_side_biap", "*extopqisi_swap_side_biap"): Ditto.
+ ("*extophisi_swap_side_biap", "*extopqisi_swap"): Ditto.
+ ("*extophisi_swap"): Ditto.
+ ("*extopqihi_swap_side_biap"): For HI operation, match a simple
+ PLUS, not cris_operand_extend_operator. Adjust condition and
+ output template.
+ ("*extopqihi_swap_side", "*extopqihi_swap"): Ditto.
+ * config/cris/cris.h (PREDICATE_CODES): Add
+ cris_additive_operand_extend_operator.
+ * config/cris/cris.c (cris_additive_operand_extend_operator):
+ New predicate.
+
+2003-03-11 Hartmut Penner <hpenner@de.ibm.com>
+
+ * df.c (read_modify_subreg_p): Change from static to global.
+ * df.h (read_modify_subreg_p): Add prototype.
+ * sched-deps.c (sched_analyze_1): Generate true dependency for
+ strict_low_part, certain subregs and zero/sign_extract.
+
+2003-03-11 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in: Update.
+ * c-common.c: Don't include real.h or except.h.
+ (REGISTER_PREFIX): Remove.
+ (builtin_define_std, builtin_define_with_value,
+ builtin_define_with_int_value, builtin_define_with_hex_fp_value,
+ builtin_define_type_max, builtin_define_type_precision,
+ builtin_define_float_constants): Move to c-cppbuiltin.c.
+ (c_stddef_cpp_builtins): New.
+ * c-common.h (builtin_define_with_value, c_stddef_cpp_builtins): New.
+ * c-cppbuiltin.c: New, extracted from c-common.c.
+ (define__GNUC__): New.
+ * cppspec.c (lang_specific_driver): Remove support of -no-gcc.
+ * gcc.c: Remove support of %v1, %v2 and %v3 specs.
+ (cpp_unique_options): Don't support no-gcc.
+ (do_spec_1): Remove support of version specs.
+ * doc/invoke.texi: Remove documentation of %v1, %v2 and %v3.
+ * doc/passes.texi: Update.
+ * doc/tm.texi: Update.
+
+2003-03-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * dwarf2out.c (multiple_reg_loc_descriptor): Fix thinko.
+
+2003-03-10 Andrew Pinski <apinski@apple.com>
+
+ * config/darwin.c (machopic_function_base_name): If dynamic-no-pic
+ is on should not get here.
+ (machopic_indirect_data_reference): If dynamic-no-pic is on just
+ generate high/low parts of the address.
+ (machopic_legitimize_pic_address): Change MACHOPIC_PURE to
+ MACHOPIC_INDIRECT. Dynamic-no-pic uses 0 as the pic base. Generate
+ symbol and labels with a new reg. Dynamic-no-pic does not have a
+ pic_offset_table_rtx.
+ (machopic_select_section): Change references of flag_pic to
+ MACHOPIC_INDIRECT.
+ (machopic_asm_out_destructor): Likewise.
+ * config/darwin.h (ASM_DECLARE_UNRESOLVED_REFERENCE): Change
+ reference of flag_pic to MACHOPIC_INDIRECT.
+ (MACHO_DYNAMIC_NO_PIC_P): Define as TARGET_DYNAMIC_NO_PIC.
+ (MACHOPIC_INDIRECT): Is also true when dynamic-no-pic is on.
+ (MACHOPIC_JUST_INDIRECT): Is also true when dynamic-no-pic is on.
+ (MACHOPIC_PURE): Is not pure when dynamic-no-pic is on.
+ * config/i386/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define as
+ 0 for right now as dynamic-no-pic is not implemented on Darwin/ia32.
+ * config/rs6000/darwin.h (MASK_MACHO_DYNAMIC_NO_PIC): Define.
+ (TARGET_DYNAMIC_NO_PIC): Define.
+ (SUBTARGET_SWITCHES): Define, have sub-target switches for
+ dynamic-no-pic.
+ (SUBTARGET_OVERRIDE_OPTIONS): Move check for -fpic from
+ rs6000_override_options to here. Dynamic-no-pic overrides
+ pic.
+ (CC1_SPEC): Change from not static then pic to not static and not
+ dynamic-no-pic then pic.
+ * config/rs6000/rs6000.c (rs6000_override_options): Move the
+ check for -fpic and DARWIN_ABI to config/rs6000/darwin.h
+ (rs6000_legitimize_reload_address): Add case for loading floating in
+ dynamic-no-pic.
+ (rs6000_emit_move): Add case for dynamic-no-pic. Change reference
+ of flag_pic to MACHOPIC_INDIRECT.
+ (secondary_reload_class): Conditional change the reference of
+ flag_pic to MACHOPIC_INDIRECT.
+ (rs6000_output_mi_thunk): Change reference of flag_pic to
+ MACHOPIC_INDIRECT.
+ (output_profile_hook): Likewise.
+ (machopic_output_stub): Non-pure (dynamic-no-pic) is now supported.
+ * config/rs6000/rs6000.md (movdf_low): Add the case for
+ MACHO_DYNAMIC_NO_PIC_P.
+ (call): Change references for flag_pic in TARGET_MACHO to
+ MACHOPIC_INDIRECT.
+ (SUBTARGET_OVERRIDE_OPTIONS): Add case where -fpic is on and
+ -mdynamic-no-pic is on. Also move case for -fpic from rs6000.c.
+ * doc/invoke.texi (-mdynamic-no-pic): Document.
+
+2003-03-10 Devang Patel <dpatel@apple.com>
+
+ PR c++/9394
+ * gcc.c (DEFAULT_SWITCH_TAKES_ARG): Remove.
+ (DEFAULT_WORD_SWITCH_TAKES_ARG): Remove.
+ * gcc.h (DEFAULT_SWITCH_TAKES_ARG): Add.
+ (DEFAULT_WORD_SWITCH_TAKES_ARG): Add.
+ * cppspec.c (DEFAULT_SWITCH_TAKES_ARG): Remove.
+ (DEFAULT_WORD_SWITCH_TAKES_ARG): Remove.
+
+2003-03-10 Steven Bosscher <s.bosscher@student.tudelft.nl>
+
+ PR optimization/7189
+ * toplev.c (rest_of_compilation): Move
+ check_function_return_warnings up to just after
+ delete_unreachable_blocks.
+
+2003-03-10 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.h (HARD_REGNO_RENAME_OK): Define.
+ * config/m68hc11/m68hc11-protos.h (m68hc11_hard_regno_rename_ok):
+ Declare.
+ * config/m68hc11/m68hc11.c (m68hc11_hard_regno_rename_ok): New function
+ for reg rename optimization to avoid using Z and Y registers.
+
+2003-03-10 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.md ("*addhi3_68hc12"): Accept any constant
+ when adding to X and Y since leax/leay are fast.
+ ("*addhi3"): Accept 'I' constraint when adding to address register.
+ ("rotlhi3"): Operand 1 must be a register_operand.
+ (peephole2): New peephole to optimize some adds.
+ * config/m68hc11/m68hc11.h (CONST_OK_FOR_LETTER_P): Use 'I' constraint
+ to represent -2 .. 2 small integer range.
+
+2003-03-10 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (m68hc11_gen_rotate): Set carry before
+ each 16-bit rotation.
+
+2003-03-10 Zack Weinberg <zack@codesourcery.com>
+
+ * c-opts.c (add_prefixed_path): Don't use concat. When
+ prefixing with cpp_GCC_INCLUDE_DIR, copy only the first
+ cpp_GCC_INCLUDE_DIR_len characters.
+
+2003-03-10 Segher Boessenkool <segher@koffie.nl>
+
+ * testsuite/gcc.dg/altivec-9.c: New file.
+
+ * config/rs6000/rs6000.c (altivec_frame_fixup): Remove.
+ (rs6000_emit_prologue): Use rs6000_frame_related instead.
+
+2003-03-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/spe.h: Define __ev64_*64__ to use single element
+ vectors.
+ (__ev_convert_u64): Remove macro. Define as inline.
+ (__ev_convert_s64): Same.
+
+2003-03-10 Aldy Hernandez <aldyh@redhat.com>
+
+ * config/rs6000/rs6000.h (DWARF_FRAME_REGISTERS): Define.
+ (rs6000_stack_t): Add spe_64bit_regs_used.
+
+ * config/rs6000/rs6000.c (rs6000_stack_info): Calculate
+ spe_64bit_regs_used, and use it to determine the size of the
+ frame.
+ (spe_func_has_64bit_regs_p): New.
+ (spe_synthesize_frame_save): New.
+ (rs6000_frame_related): Handle SPE synthetic registers.
+ (rs6000_emit_prologue): Only save in 64-bits if the function used
+ any registers in 64-bit mode.
+ (rs6000_emit_epilogue): Same, but for restore.
+
+2003-03-10 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.h (enum floating_point_type): Delete. Replace with...
+ (enum fputype): ... new.
+ (FPUTYPE_DEFAULT): Renamed from FP_DEFAULT. Values reworked.
+ * linux-elf.h (FPUTYPE_DEFAULT): Likewise.
+ * arm.md (attr fpu): Reworked for new underlying enum values.
+ * arm.c (arm_fpu_arch): Now enum fputype.
+ (arm_fpu_tune): Renamed from arm_fpu. Now enum fputype.
+ (arm_override_options, arm_output_epilogue, arm_expand_prologue):
+ Update uses of arm_fpu_arch and arm_fpu_tune.
+
+2003-03-10 Josef Zlomek <zlomekj@suse.cz>
+
+ * cfgcleanup.c (outgoing_edges_match): Compare the jump tables.
+ (try_crossjump_to_edge): Replace refereces to one jump table by
+ references to identical jump table.
+ * loop.c (load_mems): Moved setting the JUMP_LABEL to replace_label.
+ (replace_label): Moved to rtlanal.c.
+ (struct rtx_pair): Moved to rtl.h.
+ * rtl.h (struct rtx_pair): Moved from loop.c.
+ (replace_label): New extern function.
+ (subrtx_p): New extern function.
+ (tablejump_p): New extern function.
+ * rtlanal.c (replace_label): Moved from loop.c.
+ (subrtx_p_1): New static function.
+ (subrtx_p): New function.
+ (tablejump_p): New function.
+
+2003-03-10 Jan Hubicka <jh@suse.cz>
+
+ * cfgcleanup.c (try_optimize_cfg): Fix thinko in previous patch.
+
+ * cfgcleanup.c (merge_blocks): Return where to iterate next.
+ (try_optimize_cfg): Use return value of merge_blocks
+
+2003-03-10 Michael Matz <matz@suse.de>
+
+ * cfg.c (unchecked_make_edge): New.
+ (cached_make_edge): Use it.
+ * basic-block.h (unchecked_make_edge): Declare.
+ * cfglayout.c (cfg_layout_duplicate_bb): Use it.
+
+2003-03-10 Richard Earnshaw <rearnsha@arm.com>
+
+ * fpa.md: New file. Move all patterns relating to FPA co-processor
+ to here...
+ * arm.md: ... from here.
+ (cirrus.md, fpa.md): Include at end of description.
+ (divsf3, divdf3, modsf3, movdf3, sqrtsf2, sqrtdf2): New expands.
+ (pic_load_addr_based): Remove register constraint from expander.
+ (seq, sne, sgt, sle, slt, sge, sgeu, sleu, sgtu, sltu, sunordered)
+ (sordered, sungt, sunle, sunge, sunlt): Likewise.
+ (eh_epilogue, tablejump): Likewise.
+
+2003-03-09 David Edelsohn <edelsohn@gnu.org>
+ Mostafa Hagog
+
+ * config/rs6000/rs6000.md (movsi_update1): Add TARGET_UPDATE final
+ condition.
+
+2003-03-09 Neil Booth <neil@daikokuya.co.uk>
+
+ * config/frv/frv.h: Use TARGET_CPU_CPP_BUILTINS, not CPP_PREDEFINES.
+ * config/ip2k/ip2k.h: Similarly.
+ * config/m32r/m32r.h: Similarly.
+ * config/m68hc11/m68hc11.h: Similarly.
+ * config/mn10200/mn10200.h: Similarly.
+ * config/mn10300/mn10300.h: Similarly.
+ * config/pdp11/pdp11.h: Similarly.
+ * config/v850/v850.h: Similarly.
+ * config/rs6000/vxworks.h: Similarly for TARGET_OS_CPP_BUILTINS.
+ * config/v850/retms.h: Similarly for TARGET_OS_CPP_BUILTINS.
+ * config/mips/iris3.h: Remove #if 0 block.
+
+2003-03-09 Roger Sayle <roger@eyesopen.com>
+ Joern Rennecke <joern.rennecke@superh.com>
+
+ * gcc.c (do_spec_1) ['{']: Revert 2003-02-24 patch. Don't handle
+ pending argument upon return from handle_braces here.
+ (do_spec_2): Instead handle it upon return from do_spec_1 here.
+
+2003-03-09 Roger Sayle <roger@eyesopen.com>
+ Joern Rennecke <joern.rennecke@superh.com>
+
+ * gcc.c (do_spec_1) ['{']: Revert 2003-02-24 patch. Don't handle
+ pending argument upon return from handle_braces here.
+ (do_spec_2): Instead handle it upon return from do_spec_1 here.
+
+2003-03-09 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * varasm.c (make_decl_one_only): Use declare_weak().
+
+2003-03-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR middle-end/9986
+ * c-common.c (c_common_nodes_and_builtins): Initialize target builtins
+ after the common builtins.
+ * pa-hpux.h (DONT_HAVE_FPUTC_UNLOCKED): Define.
+ * pa.c (TARGET_INIT_BUILTINS): Define.
+ (pa_init_builtins): New function.
+
+ * pa.md (call, call_value, sibcall, sibcall_value): When sufficient
+ space has been allocated for the outgoing arguments, set the arg
+ pointer for a call emitted after virtuals have been instantiated
+ using the stack pointer offset, otherwise abort.
+
+2003-03-09 DJ Delorie <dj@redhat.com>
+
+ * config/stormy16/stormy16.h (DWARF_LINE_MIN_INSTR_LENGTH): Revert.
+
+2003-03-09 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.md (fix_truncsfsi2, fix_truncdfsi2, arm_fix_truncsfsi2)
+ (arm_fix_truncdfsi2): Add missing fix in floating point mode before
+ conversion to integer.
+ * cirrus.md (cirrus_truncsfsi2, cirrus_truncdfsi2): Likewise.
+
+2003-03-09 Roger Sayle <roger@eyesopen.com>
+
+ * builtins.def: Fix typo and improve grammar.
+ * loop-unroll.c (decide_peel_completely): Tidy log message.
+
+2003-03-09 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*tstsi_upper_bit): New.
+ (*iorsi3_e2f): Likewise.
+
+2003-03-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.c (h8300_and_costs): Return the number of
+ assembly instructions needed.
+ (h8300_shift_costs): Likewise.
+
+2003-03-09 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/cris/aout.h (ENDFILE_SPEC): Undef.
+
+ * optabs.c (gen_move_insn): Move logic for synthesizing MODE_CC
+ moves from here ...
+ * expr.c (emit_move_insn_1): ... to here.
+
+ * config/cris/aout.h (CRIS_CPP_SUBTARGET_SPEC): Move -D__AOUT__ to...
+ (TARGET_OS_CPP_BUILTINS): New macro.
+ * config/cris/cris.h (CRIS_CPP_SUBTARGET_SPEC): Move -D__ELF__ to...
+ (TARGET_OS_CPP_BUILTINS): New macro.
+ (CPP_PREDEFINES): Don't define. Move old definitions and...
+ (CPP_SPEC): ...move -D__CRIS_ABI_version=2 to...
+ (TARGET_CPU_CPP_BUILTINS): New macro.
+ * config/cris/linux.h (CRIS_CPP_SUBTARGET_SPEC): Move constant
+ definitions and the optional __PIC__, __pic__ and
+ __NO_UNDERSCORES__ definitions to...
+ (TARGET_OS_CPP_BUILTINS): New macro.
+
+ * flags.h (flag_leading_underscore): Declare.
+
+ * c-opts.c (c_common_post_options): On fopen failure, return
+ false, not NULL.
+
+2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/cris/cris_abi_symbol.c: #include tconfig.h and tm.h, not
+ config.h.
+ * config/cris/cris.h (HAVE_GAS_HIDDEN): Don't define here.
+ * config/cris/aout.h (HAVE_GAS_HIDDEN): Undef.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * config/sh/rtemself.h (TARGET_OS_CPP_BUILTINS): Use instead of
+ CPP_PREDEFINES.
+ * config/sh/rtems.h (TARGET_OS_CPP_BUILTINS): Use instead of
+ CPP_PREDEFINES.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-common.h (c_common_init, c_common_post_options): Update.
+ * c-objc-common.c (c_objc_common_init): Update for new prototype.
+ * c-opts.c (saved_lineno): New.
+ (c_common_post_options, c_common_init): Update prototypes,
+ move call to cpp_read_main_file from latter to former.
+ * c-tree.h (c_ojbc_common_init): Update.
+ * langhooks-def.h (lhd_post_options): New.
+ (LANG_HOOKS_INIT, LANG_HOOKS_POST_OPTIONS): Update.
+ * langhooks.c (lhd_post_options): New.
+ * langhooks.h (struct lang_hooks): Update post_options and init hooks.
+ * toplev.c (no_backend): New.
+ (process_options): Call post_options hook and set main_input_filename
+ and input_filename here.
+ (lang_dependent_init, do_compile): post_options hook moved to
+ process_options.
+ * objc/objc-act.c (objc_init): Update prototype.
+ * objc/objc-act.h (objc_init): Update prototype.
+
+2003-03-08 Roger Sayle <roger@eyesopen.com>
+
+ * emit-rtl.c (gen_lowpart): Don't attempt to load a part of
+ a complex or vector type, using a load in the original mode.
+
+2003-03-08 Jan Hubicka <jh@suse.cz>
+
+ * Makefile.in (cgraph.o): Depend on gt-cgraph.h and varray.h.
+ * gt-cgraph.h: New GC file.
+ * cgraph.c (known_fns): New static variable.
+ (cgraph_node): Add the decl into varray.
+
+2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/mmix/mmix.md ("*movcc_expanded"): Add missing alternatives.
+
+2003-03-08 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.c (fpa_rhs_operand, fpa_add_operand, const_double_rtx_ok_for_fpa)
+ (neg_const_double_ok_for_fpa, output_mov_long_double_fpa_from_arm)
+ (output_mov_long_double_arm_from_fpa, output_mov_double_fpa_from_arm)
+ (output_mov_double_arm_from_fpa): Renamed to use fpa instead of fpu.
+ All callers changed.
+ * arm.md, arm.h, arm-protos.h: Updated.
+
+ * arm.h (enum reg_class FPA_REGS): Renamed from FPU_REGS.
+ (CLASS_MAX_NREGS, REGISTER_MOVE_COST, REG_CLASS_FROM_LETTER): Updated.
+ * arm.c (arm_regno_class, f_register_operand): Updated.
+
+2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/cris/cris.h: Remove EGCS references.
+ (CPP_SPEC): Remove "-$".
+ (INIT_CUMULATIVE_ARGS): Adjust parameter name to FNDECL.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * config/stormy16/stormy16.h (TARGET_CPU_CPP_BUILTINS): Use in
+ preference to CPP_PREDEFINES.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * cppinit.c (cpp_finish_options): Set first_unused_line to -1.
+
+2003-03-08 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*extzv_16_8): New.
+
+2003-03-08 Jan Hubicka <jh@suse.cz>
+
+ * c-decl.c: (finish_function): Update call of tree_inlinable_function_p.
+ * cgraph.h: (cgraph_local_info): Add can_inline_once
+ (cgraph_global_info): Add inline_once.
+ (cgraph_node): Add previous.
+ (cgraph_remove_node): New.
+ * cgraphunit.c (cgraph_mark_functions_to_inline_once): New static
+ function.
+ (cgraph_optimize): Call it.
+ (cgraph_finalize_function): Set inlinable flags.
+ (cgraph_finalize_compilation_unit): Actually remove the reclaimed nodes.
+ (cgraph_mark_functions_to_output): Use new inlining heuristics flags.
+ (cgraph_expand_function): Likewise.
+ * cgraph.c
+ (cgraph_node): Put nodes into doubly linked chain.
+ (cgraph_remove_node): New function.
+ * flags.h (flag_inline_functions_called_once): Declare.
+ * tree-inline.c: Include cgraph.h
+ (inlinable_functions_p): Add extra argument to bypass limits.
+ (expand_call_inline): Obey cgraph flag.
+ * tree-inline.h (tree_inlinable_function_p): Update prototype.
+
+2003-03-08 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * gcse.c (bypass_block, bypass_conditional_jumps): Do not create
+ irreducible loops.
+
+ * loop-unroll.c (unroll_loop_runtime_iterations): Update irreducible
+ loops info correctly.
+
+2003-03-08 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR middle-end/7796
+ * unroll.c (calculate_giv_inc): Handle constants being
+ loaded with LSHIFTRT.
+
+2003-03-07 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (processor_target_table): Do not disable
+ GP optional instructions on Power3, Power4, 620, and 630.
+
+2003-03-07 Kazu Hirata <kazu@cs.umass.edu>
+
+ * calls.c: Fix comment formatting.
+ * cfgloopanal.c: Likewise.
+ * cfgloopmanip.c: Likewise.
+ * combine.c: Likewise.
+ * dwarf2out.c: Likewise.
+ * ggc-common.c: Likewise.
+ * langhooks.c: Likewise.
+ * loop-unroll.c: Likewise.
+ * loop.c: Likewise.
+ * ra-build.c: Likewise.
+ * sbitmap.c: Likewise.
+ * toplev.c: Likewise.
+
+2003-03-07 James E Wilson <wilson@tuliptree.org>
+
+ * config/sh/sh.h (HARD_REGNO_NREGS): Round up the XD register count.
+
+2003-03-07 Geoffrey Keating <geoffk@apple.com>
+
+ * objc/lang-specs.h (objective-c-header): Use .gch not .pch;
+ support -no-integrated-cpp.
+
+ * c-pch.c (get_ident): Use c_language_kind and flag_objc rather
+ than langhooks.name.
+
+2003-03-07 Michael Matz <matz@suse.de>
+
+ * df.h (enum df_ref_flags.DF_REF_STRIPPED): New.
+ (DF_FOR_REGALLOC): New.
+ * df.c (df_ref_record): Set DF_REF_STRIPPED.
+ (read_modify_subreg_p): Simplify.
+ (df_def_record_1, df_uses_record): Set DF_REF_MODE_CHANGE more often.
+ Use DF_FOR_REGALLOC.
+ * ra.h (struct web): New member subreg_stripped.
+ (invalid_mode_change_regs): Declare.
+ * ra.c (invalid_mode_change_regs): New.
+ (init_ra): Initialize it.
+ * ra-build.c (init_one_web_common, remember_web_was_spilled): Use it.
+ Use CANNOT_CHANGE_MODE_CLASS as ifdef guard.
+ (reinit_one_web, parts_to_web_1): Deal with subreg_stripped.
+ * ra-colorize.c (colorize_one_web): Use invalid_mode_change_regs.
+ Use CANNOT_CHANGE_MODE_CLASS as ifdef guard.
+
+2003-03-07 Richard Earnshaw <rearnsha@arm.com>
+
+ * arm.md (addsf3, adddf3, subsf3, subdf3, mulsf3, muldf3, negsf2)
+ (negdf2, abssi2, abssf2, absdf2, floatsisf2, floatsidf2)
+ (fix_truncsfsi2, fix_truncdfsi2, truncdfsf2): Moved back into main
+ machine description file from ...
+ * cirrus.md: ... here.
+
+2003-03-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Don't use
+ reg_overlap_mentioned_p.
+
+2003-03-06 Geoffrey Keating <geoffk@apple.com>
+
+ * c-pch.c: Include langhooks.h.
+ (IDENT_LENGTH): New.
+ (get_ident): New.
+ (pch_ident): Delete.
+ (pch_init): Use get_ident, IDENT_LENGTH.
+ (c_common_valid_pch): Likewise. Also, use actual language
+ in warning message.
+ * Makefile.in (c-pch.o): Add langhooks.h to dependencies.
+
+ * objc/config-lang.in (gtfiles): Add objc-act.c. Remove duplicate
+ c-parse.in.
+ * objc/Make-lang.in (objc/objc-act.o): Add dependency on
+ gt-objc-objc-act.h.
+ (gt-objc-objc-act.h): New rule.
+ * objc/lang-specs.h: Support PCH.
+ * objc/objc-act.c: Include gt-objc-objc-act.h.
+ (objc_add_static_instance): Move num_static_inst out, mark for PCH.
+ (build_selector_reference_decl): Move idx out, mark for PCH.
+ (build_class_reference_decl): Likewise.
+ (build_objc_string_decl): Move *_idx out, mark for PCH.
+ (build_tmp_function_decl): Move xxx out, mark for PCH.
+
+2003-03-06 Dale Johannesen <dalej@apple.com>
+
+ * config/rs6000/rs6000.c (rs6000_binds_local_p): Consider
+ global functions for inlining on Darwin.
+
+2003-03-06 Vladimir Makarov <vmakarov@redhat.com>
+
+ * haifa-sched.c (schedule_block): Don't call reorder when sorting
+ is prohibited.
+
+2003-03-06 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in (c-ppoutput.o): Update.
+ * c-common.h (init_pp_output): New.
+ (preprocess_file): Update.
+ * c-lex.c (init_c_lex): Move mbchar initialization to cpplib.
+ Register builtins.
+ * c-opts.c (c_common_init): Call init_pp_output if preprocessing.
+ Make call to cpp_read_main_file common to whether preprocessing
+ or not. Don't register builtins.
+ * c-ppoutput.c: Include c-pragma.h.
+ (setup_callbacks): Rename init_pp_output.
+ (preprocess_file): No longer setup callbacks or call
+ cpp_read_main_file.
+ * cpphash.h (_cpp_init_mbchar): New.
+ * cppinit.c (init_library): Call _cpp_init_mbchar.
+ * cpplex.c (_cpp_init_mbchar): New.
+
+2003-03-06 Roger Sayle <roger@eyesopen.com>
+
+ * emit-rtl.c (gen_lowpart): When requesting the low-part of a
+ MEM, try loading the MEM into a register and taking the low-part
+ of that, to help CSE see the use of the MEM in its true mode.
+
+2003-03-05 Tom Tromey <tromey@redhat.com>
+
+ * config/stormy16/stormy16.h (DWARF_LINE_MIN_INSTR_LENGTH):
+ Define.
+
+2003-03-05 Nick Clifton <nickc@cambridge.redhat.com>
+
+ * config/stormy16/stormy16.md ("*eqbranchsi"): Remove '+' on
+ operand 2.
+ ("*ineqbranchsi"): Likewise.
+
+2003-03-05 Andrew Haley <aph@cambridge.redhat.com>
+
+ * config/stormy16/stormy16.c (xstormy16_expand_prologue): Delete
+ mem_fake_push_rtx. Instead construct a SEQUENCE to show the
+ register store followed by a stack increment.
+
+2003-03-05 Chris Moller <cmoller@redhat.com>
+
+ * config/stormy16/stormy16.c (REG_NEEDS_SAVE): added a term
+ to inhibit saving CARRY_REGS.
+
+ * config/stormy16/stormy16.c (xs_hi_general_operand):
+ added predicate to detect and error-out on out-of-range
+ const_ints for movhi.
+ * config/stormy16/stormy16.md (movhi): use
+ xs_hi_general_operand.
+
+ * config/stormy16/stormy16.c (xstormy16_expand_prologue):
+ added a check for local vbl size overflow.
+ * config/stormy16/stormy16.c (xs_hi_nonmemory_operand):
+ added predicate to detect and error-out on out-of-range
+ const_ints for addhi and subhi.
+ * config/stormy16/stormy16.md (addhi3, addchi4, addchi5,
+ subhi3, subchi4, subchi5): used xs_hi_nonmemory_operand.
+
+ * config/stormy16/stormy16.c (xstormy16_legitimate_address_p):
+ add a term to accept PRE_MODIFY addresses.
+ * config/stormy16/stormy16.c (xstormy16_expand_move):
+ add code to expand PRE_MODIFY addresses to an add followed
+ by a move.
+
+2003-03-06 Jason Merrill <jason@redhat.com>
+
+ * tree-inline.c (inlinable_function_p): Revert earlier change
+ pending investigation.
+
+2003-03-06 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a new peephole2): New.
+
+2003-03-06 Jan Hubicka <jh@suse.cz>
+
+ * cgraph.c (cgraph_node): Do not confuse nested functions and methods.
+
+2003-03-06 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * dwarf2out.c (size_of_die): Compute size of external reference to
+ die correctly.
+
+2003-03-06 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * config/mmix/mmix.md ("*movcc_expanded"): New pattern.
+ ("movcc", "movcc_uns", "movcc_fp", "movcc_fpeq", "movcc_fun"): New
+ expanders.
+
+2003-03-05 Roger Sayle <roger@eyesopen.com>
+
+ * expr.h (lang_expand_expr): Delete obsolete prototype.
+
+2003-03-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * emit-rtl.c (gen_highpart_mode): Fix a comment typo.
+
+2003-03-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): Generalize to
+ accept a memory operand.
+
+2003-03-05 Olivier Hainque <hainque@act-europe.fr>
+
+ * config/alpha/alpha.h (PRINT_OPERAND_PUNCT_VALID_P): Add '+'.
+ * config/alpha/alpha.c (print_operand, case '+'): New.
+ * config/alpha/alpha.md (call_osf_1_noreturn): Document and use.
+ (call_value_osf_1_noreturn): Likewise.
+
+2003-03-05 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * stmt.c (fixup_gotos): Change meaning of DONT_JUMP_IN.
+ (expand_end_bindings): Likewise.
+
+2003-03-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * pa.md (return_external_pic): Add !TARGET_PA_20 to constraint.
+ (epilogue): Don't generate return_external_pic when emitting PA 2.0
+ code.
+
+2003-03-05 Aldy Hernandez <aldyh@redhat.com>
+
+ * doc/tm.texi: Document TARGET_DWARF_REGISTER_SPAN.
+
+ * config/rs6000/rs6000.c (rs6000_dwarf_register_span): New.
+
+ * hooks.c (hook_rtx_rtx_null): New.
+
+ * hooks.h (hook_rtx_rtx_null): Protoize.
+
+ * target-def.h (TARGET_DWARF_REGISTER_SPAN): New macro.
+ (TARGET_INITIALIZER): Add TARGET_DWARF_REGISTER_SPAN.
+
+ * target.h (struct gcc_target): Add dwarf_register_span.
+
+ * dwarf2out.c (multiple_reg_loc_descriptor): New.
+ (one_reg_loc_descriptor): New.
+ (reg_loc_descriptor): Add support for values that span more than
+ one register.
+
+2003-03-05 Jan Hubicka <jh@suse.cz>
+
+ * Makefile.in (calls.o, toplev.o alias.o): Depend on cgraph.h
+ * alias.c: Include cgraph.h
+ (mark_constant_function): Use cgraph_rtl_info.
+ * calls.c: Include cgraph.h
+ (flags_from_decl_or_type): Use cgraph_rtl_info to find pure and const
+ calls.
+ (expand_call): Use cgraph_rtl_info to set preferred stack boundary.
+ * cgraph.c (cgraph_rtl_info): New function.
+ * cgraph.h (cgraph_rtl_info): Declare
+ (cgraph_rtl_info): Likewise.
+ * function.h (struct function): Add recursive_call_emit.
+ * toplev.c: Include cgraph.h.
+ (rest_of_compilation): Set preferred_incoming_stack_boundary.
+
+2003-03-05 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.c (output_simode_bld): Clear the
+ destination first if possible.
+ * config/h8300/h8300.md (extzv_1_r_h8300hs): Add an
+ alternative.
+ (extzv_1_r_inv_h8300hs): Likewise.
+
+2003-03-05 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * basic-block.h (EDGE_IRREDUCIBLE_LOOP, EDGE_ALL_FLAGS): New.
+ * cfg.c (dump_edge_info): Add EDGE_IRREDUCIBLE_LOOP flag dump.
+ * cfgloop.c (flow_loop_free): Made global.
+ (establish_preds): New static function.
+ (flow_loop_tree_node_add): Handle subloops of added loop correctly.
+ (get_loop_exit_edges): New.
+ (verify_loop_structure): Verify EDGE_IRREDUCIBLE_LOOP flags.
+ * cfgloop.h (flow_loop_free, get_loop_exit_edges, unloop): Declare.
+ * cfgloopanal.c (mark_irreducible_loops): Mark edges in irreducible
+ loops.
+ * cfgloopmanip.c (loop_delete_branch_edge): Allow to test for
+ removability of an edge.
+ (fix_irreducible_loops): New static function.
+ (find_path, remove_path): Add ability to remove enclosing loops.
+ (unloop): New.
+ (copy_bbs, duplicate_loop_to_header_edge): Use EDGE_IRREDUCIBLE_LOOP
+ flags.
+ * cfgrtl.c (verify_flow_info): Handle EDGE_IRREDUCIBLE_LOOP flag.
+ * loop-unroll.c (peel_loops_completely): Do not duplicate loop if
+ not neccessary.
+ (decide_peel_completely, peel_loops_completely): Allow complete peeling
+ of non-duplicable once rolling loops.
+ * loop-unswitch.c (unswitch_loop): Update EDGE_IRREDUCIBLE_LOOP flags.
+
+2003-03-05 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * sh.h (OVERRIDE_OPTIONS): For TARGET_SHMEDIA, the minimum value
+ for align_jumps is 4.
+
+ (SECONDARY_INPUT_RELOAD_CLASS): If reloading a PLUS into FPUL,
+ use GENERAL_REGS.
+
+2003-03-05 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.h (PAD_VARARGS_DOWN): Define and return
+ according to va_arg type.
+ (EXPAND_BUILTIN_VA_ARG): Remove.
+ * config/m68hc11/m68hc11.c (m68hc11_va_arg): Remove.
+ * config/m68hc11/m68hc11-protos.h (m68hc11_va_arg): Remove.
+
+2003-03-05 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (rs6000_variable_issue): Remove unnecessary
+ else clauses.
+
+2003-03-05 Michael Matz <matz@suse.de>
+
+ * i386/i386.c (ix86_save_reg): Also test
+ current_function_uses_const_pool.
+
+2003-03-05 Michael Matz <matz@suse.de>
+
+ * unwind.h: Add the GPL exception.
+ * Makefile.in (USER_H): Add unwind.h.
+
+2003-03-05 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR c/9799
+ * c-typeck.c (push_init_level): Add sanity check.
+
+2003-03-05 Jan Hubicka <jh@suse.cz>
+
+ * toplev.c (rest_of_compilation): Deffer RTL compilation only when
+ RTL inlining is done.
+
+ * cgraphunit.c (cgraph_mark_local_functions): New local function.
+ (cgraph_optimize): Mark local functions.
+ * i386-protos.h (init_cumulative_args): Update prototype.
+ * i386.c (init_cumulative_args): Use register passing convention for
+ local functions.
+
+ * cgraph.c (cgraph_global_info_ready): New global variable
+ (cgraph_local_info, cgraph_global_info): New functions.
+ * cgraph.h (struct cgraph_local_info, cgraph_global_info): New
+ structures.
+ (cgraph_local_info, cgraph_global_info, cgraph_global_info_ready):
+ Declare.
+ * cgraphunit.c (cgraph_finalize_function): Set inline_many.
+ (cgraph_mark_functions_to_output): Use inline_many.
+ (cgraph_expand_function): Free DECL_SAVED_TREE uncondtionally.
+ (cgraph_expand_functions): Expand inline functions last.
+ (cgraph_optimize): Do not emit uneeded functions.
+
+2003-03-04 Steve Ellcey <sje@cup.hp.com>
+
+ * expr.c (convert_modes): Check for legal hard register.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * doc/sourcebuild.texi (Front End Directory): Document tags.
+ * configure: Rebuilt.
+ * configure.in (target_list): Added tags.
+ * Makefile.in (TAGS): Depend on lang.clean. Include subdirectory
+ TAGS files by reference.
+ * objc/Make-lang.in (objc.tags): New target.
+
+2003-03-04 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * gcov-io.h (gcov_save_position, gcov_reserve_length, gcov_resync,
+ gcov_skip, gcov_skip_string, gcov_write_unsigned, gcov_write_counter,
+ gcov_write_string, gcov_read_unsigned, gcov_read_counter,
+ gcov_read_string, gcov_write_length): Modified to enable reading/
+ writing of whole .da file just once.
+ (da_file_open, da_file_close, da_file_eof, da_file_error,
+ da_file_position, da_file_seek, da_file_write, da_file_read): New
+ functions.
+ (actual_da_file, actual_da_file_position, actual_da_file_length,
+ actual_da_file_buffer, actual_da_file_buffer_size): New static
+ functions.
+ * libgcov.c (gcov_exit): Modified to read/write the whole .da file at
+ just once.
+
+
+2003-03-04 Andreas Schwab <schwab@suse.de>
+
+ * config/m68k/m68k.c (m68k_output_function_prologue): Fix CFA
+ offset without frame pointer.
+
+2003-03-04 Steve Ellcey <sje@cup.hp.com>
+
+ * expr.c (expand_expr): Call promote_mode to set unsignedp.
+
+2003-03-04 Daniel Jacobowitz <drow@mvista.com>
+
+ * configure.in: Don't always define TARGET_SYSTEM_ROOT.
+ * configure: Regenerated.
+ * gcc.c: Check whether TARGET_SYSTEM_ROOT is defined.
+
+2003-03-04 Andreas Jaeger <aj@suse.de>
+
+ * configure.in: Check for <memcheck.h>.
+ * configure: Regenerated.
+
+ * config.in: Define HAVE_MEMCHECK_H.
+
+ * ggc-common.c: Use <memcheck.h> if available instead of
+ <valgrind.h>.
+ * ggc-page.c: Likewise.
+ * cppfiles.c: Likewise.
+
+2003-03-04 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*extzv_8_8): Fix cc and lengths.
+
+2003-03-04 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ PR c/9262
+ * c-typeck.c (do_case): Attach the first case label to the SWITCH_BODY.
+ (c_finish_case): Rechain the next statements to the SWITCH_STMT.
+
+2003-03-04 Jan Hubicka <jh@suse.cz>
+
+ * doc/invoke.texi: Document that unit-at-a-time is enabled for -O3
+ * toplev.c (parse_options_and_default_flags): Enable flag_unit_at_a_time
+ for -O3.
+
+2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * configure.in: Delete three unused variables. Move a variable
+ definition closer to its use. Simplify use_collect2 logic. Start to
+ organize. Simplify tests for in-tree gas and ld.
+ * configure: Regenerate.
+
+2003-03-04 Neil Booth <neil@daikokuya.co.uk>
+
+ * Makefile.in: Update.
+ * c-common.c (flag_no_line_commands, flag_no_output,
+ flag_dump_macros, flag_dump_includes): New.
+ * c-common.h (flag_no_line_commands, flag_no_output,
+ flag_dump_macros, flag_dump_includes, preprocess_file): New.
+ (init_c_lex): Update prototype.
+ * c-lex.c (init_c_lex): Update prototype; move some code to
+ c_common_init.
+ * c-opts.c (preprocess_file): Subsume into c_common_init.
+ (c_common_decode_option): Update flags.
+ (c_common_init): Move code from preprocess_file and init_c_lex.
+ (sanitize_cpp_opts): Update.
+ * c-ppoutput.c: New, cppmain.c almost verbatim.
+ * cpphash.h (struct printer): Remove.
+ (struct cpp_reader): Remove print.
+ * cpplib.h (dump_none, dump_only, dump_names, dump_definitions,
+ cpp_preprocess_file): Remove.
+ (struct cpp_options): Remove no_output, no_line_commands, dump_macros
+ and dump_includes.
+ * cppmain.c: Remove.
+ * doc/passes.texi: Update.
+
+2003-03-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * function.c (STACK_ALIGNMENT_NEEDED): New macro. Default to 1.
+ (assign_stack_local_1): Perform overall stack alignment only when
+ STACK_ALIGNMENT_NEEDED is non-zero.
+ * doc/tm.texi (STACK_ALIGNMENT_NEEDED): Document.
+
+ * pa.c (compute_frame_size): Rename fsize to size. Account for
+ alignment to a word boundary before general register save block. Only
+ account for double-word alignment before floating point register save
+ block if one or more are saved. Don't allocate space for %r3 when
+ frame pointer is needed.
+ (hppa_expand_prologue): Include alignment to word boundary in local
+ frame size.
+ * pa.h (STARTING_FRAME_OFFSET): Define to 8 on both 32 and 64-bit ports.
+ (STACK_ALIGNMENT_NEEDED): Define.
+
+2003-03-04 Kevin Buettner <kevinb@redhat.com>
+
+ * dwarf2out.c (rtl_for_decl_location): Don't return NULL_RTX for
+ global register variables.
+
+2003-03-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * reload.c (reload_adjust_reg_for_mode): New function.
+ (subst_reloads): Call it.
+ (operands_match_p): Adjust registers using HARD_REGNO_NREGS.
+ * reload.h (reload_adjust_reg_for_mode): Declare.
+ * reload1.c (emit_input_reload_insns, emit_output_reload_insns):
+ Call it.
+
+2003-03-03 James E Wilson <wilson@tuliptree.org>
+
+ * optabs.c (add_equal_note): Delete SUBREG_REG use.
+ Fixes PR c/7872.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*ixorsi3_ashift_16): New.
+ (*ixorsi3_lshiftrt_16): New.
+ (*iorsi3_ashift_16): Remove.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*extzv_8_8): Use '?' to simplify the
+ pattern.
+
+2003-03-03 Geoffrey Keating <geoffk@apple.com>
+
+ * doc/install.texi (Specific): Update entry for powerpc-darwin.
+
+2003-03-03 Richard Henderson <rth@redhat.com>
+
+ * config/ia64/ia64.h (HAVE_AS_LTOFFX_LDXMOV_RELOCS): Default to 0.
+
+2003-03-03 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (rs6000_multipass_dfa_lookahead): Delete.
+ (TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD): Delete.
+ (rs6000_variable_issue): Do not return negative value.
+ (rs6000_issue_rate): Uniformly set issue rate to 1 for first
+ scheduling pass.
+
+2003-03-03 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * dwarf2out.c (dwarf2out_finish): Swap order of break_out_includes and
+ prune_unused_types calls.
+
+2003-03-03 Jason Merrill <jason@redhat.com>
+
+ * tree-inline.c (find_builtin_longjmp_call): Save and restore
+ lineno and input_filename.
+ (find_alloca_call): Likewise.
+ (inlinable_function_p): Run the langhook earlier.
+
+ * calls.c (compute_argument_addresses): Give the new MEMs a
+ minimum alignment of PARM_BOUNDARY.
+
+2003-03-03 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * config/sh/sh.h (EXTRA_SPECS): Add subtarget_asm_relax_spec and
+ subtarget_asm_isa_spec.
+ (SUBTARGET_ASM_RELAX_SPEC, SUBTARGET_ASM_ISA_SPEC): Define.
+ (ASM_SPEC): Define as SH_ASM_SPEC.
+ (SH_ASM_SPEC): New; take the role of ASM_SPEC, but safe from svr4.h.
+ Use subtarget_asm_relax_spec and subtarget_asm_isa_spec.
+ * config/sh/elf.h (ASM_SPEC): Use SH_ASM_SPEC.
+ (SUBTARGET_ASM_ISA_SPEC): Undef / define.
+
+ * sh.h (OVERRIDE_OPTIONS): Set default values for align_loops
+ and align_jumps if not set.
+ Force align_jumps to be at least 2.
+ When relaxing, force align_functions to be at least the maximum of
+ align_loops, align_jumps and 4.
+ * sh.c (find_barrier, barrier_align): Honour align_jumps_log.
+ (sh_loop_align): Honour align_loops_log.
+
+ * sh.md (length attribute): Use prev_nonnote_insn instead of PREV_INSN
+ to check for indirect_jump_scratch.
+ (indirect_jump_scratch): Add second set.
+ * sh.c (output_far_jump): Use prev_nonnote_insn instead of PREV_INSN
+ when looking for indirect_jump_scratch.
+ Extract scratch register taking new structure of indirect_jump_scratch
+ into account.
+ (gen_block_redirect): Set INSN_SCOPE for indirect_jump_scratch.
+
+2003-03-03 Jan Hubicka <jh@suse.cz>
+
+ * calls.c (rtx_for_function_call): Take the address as an argument
+ (expand_call): Do not modify the expression.
+
+ * toplev.c (rest_of_compilation): Avoid cfg_cleanup calls when not
+ optimizing.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*ixorsi3_zext_hi): Restrict to
+ TARGET_H8300H and TARGET_H8300S.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (a peephole2): New.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*extzv_8_8): Use shorter code when
+ operands[0] and operands[1] are different.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * reload1.c (reload_cse_move2add): Remove variable success.
+
+2003-03-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * ggc-common.c (ggc_rlimit_bound): Cast RLIM_INFINITY to avoid
+ warnings.
+
+2003-03-02 Richard Henderson <rth@redhat.com>
+
+ * configure.in (HAVE_AS_LTOFFX_LDXMOV_RELOCS): New ia64 test.
+ * config.in, configure: Rebuild.
+ * config/ia64/ia64.c (ia64_ld_address_bypass_p): Accept lo_sum.
+ * config/ia64/ia64.md (load_symptr): Use high/lo_sum for the
+ paired ldtoffx and ldxmov annotations.
+ (load_symptr_internal1): Remove.
+ (load_symptr_high, load_symptr_low): New.
+
+2003-03-02 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-incpath.c (add_path): Fix sysp assignment.
+
+2003-03-02 Kurt Garloff <garloff@suse.de>
+
+ * params.def: Introduce parameter max-inline-insns-rtl for
+ a separate limit for the RTL inliner.
+ * params.h: Likewise.
+ * integrate.c (function_cannot_inline_p): Use it.
+ * toplev.c (decode_f_option): Set multiple parameters
+ controlling inlining with -finline-limit.
+ * params.def: Fix orthographic and typographic errors.
+ * doc/invoke.texi: Document parameters controlling inlining
+ and the way -finline-limit sets multiple of them.
+
+ * tree.h (struct tree_decl): Introduce inlined_function_flag,
+ recording whether the function became eligible for inlining
+ by a compiler flag rather than the declaration.
+ Provide DID_INLINE_FUNC macro to access it.
+ * c-decl.c (grokdeclarator): Set DID_INLINE_FUNC.
+ * cp/decl.c (grokfndecl): Likewise.
+ * toplev.c (rest_of_compilation): Likewise.
+ * cp/optimize (maybe_clone_body): Copy DID_INLINE_FUNC.
+ * print-tree.c (print_node): Report it.
+ * params.def: Introduce new max-inline-insns-auto limit.
+ * params.h: Likewise.
+ * tree-inline.c (inlinable_function_p): Apply it to functions
+ with DID_INLINE_FUNC set.
+ * toplev.c (decode_f_option): Initialize it from -finline-limit
+ value.
+ * doc/invoke.texi: Document new parameter.
+
+2003-03-02 Geoffrey Keating <geoffk@apple.com>
+
+ * fix-header.c (read_scan_file): Don't reference simplify_path.
+
+2003-03-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (m68hc11_override_options): Don't enable
+ min/max instructions by default as may result in reload errors.
+
+2003-03-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.md ("mulqi3"): Allow address register to
+ avoid reload problems; define split for it.
+
+2003-03-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * config/m68hc11/m68hc11.c (m68hc11_shift_operator): New function.
+ * config/m68hc11/m68hc11-protos.h (m68hc11_shift_operator): Declare.
+ * config/m68hc11/m68hc11.h (PREDICATE_CODES): Register.
+ * config/m68hc11/m68hc11.md ("rotrhi3", "rotlhi3"): New patterns for
+ rotatert and rotate.
+ ("rotrhi3_const", "rotlhi3_const"): Rename of old 'rotrhi3' insns.
+ ("*rotrhi3", "*rotlhi3"): New insn pattern for non-const rotatert.
+ ("*rotrhi3_addr"): New split for shift insns on address register.
+ ("*lshrhi3", "*ashrhi3", "*ashlhi3_2"): Use new split.
+ * config/m68hc11/larith.asm (___rotlhi3): New asm function.
+ (___rotrhi3): Likewise.
+ * config/m68hc11/t-m68hc11-gas (LIB1ASMFUNCS): Build them.
+
+2003-03-02 Neil Booth <neil@daikokuya.co.uk>
+
+ * toplev.c (aux_base_name): Moved from toplev.h.
+ (filename): Constify.
+ (lang_dependent_init): Don't duplicate name.
+ (process_options): Set aux_base_name here, not...
+ (do_compile): ...here. Change protoype.
+ (toplev_main): Move some code from do_compile.
+ * toplev.h: Remove aux_base_name.
+
+2003-03-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300-protos.h: Add a prototype for
+ iorxor_operator.
+ * config/h8300/h8300.c (print_operand): Handle 'c'.
+ (iorxor_operator): New.
+ * config/h8300/h8300.h (PREDICATE_CODES): Add iorxor_operator.
+ * config/h8300/h8300.md (*iorhi3_zext): Remove.
+ (*iorsi3_zexthi): Likewise.
+ (*iorsi3_zextsi): Likewise.
+ (*xorhi3_zextqi): Likewise.
+ (*xorsi3_zexthi): Likewise.
+ (*xorsi3_zextsi): Likewise.
+ (*ixorhi3_zext): New.
+ (*ixorsi3_zext_qi): Likewise.
+ (*ixorsi3_zext_hi): Likewise.
+
+2003-03-02 Neil Booth <neil@daikokuya.co.uk>
+
+ * c-incpath.c (remove_component_p, simplify_path): Move back to
+ cppfiles.c.
+ (remove_duplicates): Use cpp_simplify_path.
+ * c-incpath.h (simplify_path): Remove.
+ * c-lex.c: Don't include c-incpath.h.
+ (init_c_lex): Remove simplify_path.
+ * cppfiles.c (remove_component_p, cpp_simplify_path): Restore.
+ (find_or_create_entry, validate_pch): Revert.
+
+2003-03-02 Ashif Harji <asharji@uwaterloo.ca>
+
+ * gcc.c (default_compilers): Add -no-integrated-cpp flag to invoke
+ an external cpp during compilation.
+ (option_map): Likewise.
+ * objc/lang-specs.h (default_compilers): Similarly.
+ * doc/invoke.texi: Document -no-integrated-cpp flag.
+
+2003-03-02 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (zero_extendqisi2): Change to an
+ expander.
+ (*zero_extendqisi2_h8300): New.
+ (*zero_extendqisi2_h8300hs): New.
+ (two splitters): New.
+
+2003-03-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fp-bit.h (float_to_usi): Fix condition wrapping prototype.
+
2003-03-01 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.md (a peephole2): Remove dead code.
@@ -133,7 +3701,7 @@
2003-02-28 Aldy Hernandez <aldyh@redhat.com>
- * floatlib.c: Remove.
+ * floatlib.c: Remove.
2003-02-28 Jason Merrill <jason@redhat.com>
@@ -152,9 +3720,9 @@
2003-02-28 Dale Johannesen <dalej@apple.com>
- * loop.c (struct movable): Add insert_temp, shrink savemode.
+ * loop.c (struct movable): Add insert_temp, shrink savemode.
(scan_loop): Accept invariants that require copying; mark as
- insert_temp.
+ insert_temp.
(combine_movables): Don't combine insert_temp movables.
(move_movables): Insert copies for insert_temp movables.
Don't record the info based on regno for insert_temp's.
@@ -162,7 +3730,7 @@
2003-02-28 Joel Sherrill <joel@OARcorp.com>
PR 9638/other
- * config/i386/i386.c (DEFAULT_PCC_STRUCT_RETURN): Ensure the
+ * config/i386/i386.c (DEFAULT_PCC_STRUCT_RETURN): Ensure the
this constant defaults to 1.
2003-02-28 Bob Wilson <bob.wilson@acm.org>
@@ -171,7 +3739,7 @@
2003-02-28 Richard Earnshaw <rearnsha@arm.com>
- * arm.md (mulhisi3, mulhisi3addsi, mulhidi3adddi): Enable for any
+ * arm.md (mulhisi3, mulhisi3addsi, mulhidi3adddi): Enable for any
ARMv5e processor, not just for XScale. Instructions are predicable.
(mulhisi3tb, mulhisi3bt, mulhisi3tt): New patterns for ARMv5e.
@@ -187,12 +3755,12 @@
(*tst_extzv_memqi_1_n): Likewise.
(a peephole2): New.
-2002-02-28 Richard Sandiford <rsandifo@redhat.com>
+2003-02-28 Richard Sandiford <rsandifo@redhat.com>
* config/mips/mips.h (CRT_CALL_STATIC_FUNCTION): Wrap in
#ifndef __mips16.
-Fri Feb 28 11:09:14 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-28 Jan Hubicka <jh@suse.cz>
* combine.c (gen_lowpart_for_combine): Update handling of
subregs_of_mode
@@ -279,7 +3847,7 @@ Fri Feb 28 11:09:14 CET 2003 Jan Hubicka <jh@suse.cz>
* config.gcc: Add power4 to PowerPC with_cpu list.
-Wed Feb 26 19:46:25 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-26 Jan Hubicka <jh@suse.cz>
* objc-act.c: (mark_referenced_methods): Fix compilation problem.
@@ -324,29 +3892,29 @@ Wed Feb 26 19:46:25 CET 2003 Jan Hubicka <jh@suse.cz>
2003-02-26 Nick Clifton <nickc@redhat.com>
* config/arm/arm.c (is_load_address): Rename to...
- (arm_memory_load_p) ... this and make it check for SUBREGs and
- constant loads that will be converted into loads from the
- minipool.
- (is_cirrus_insn): Rename to ...
- (arm_cirrus_insn_p): ... this, for consistency. Replace test
- of CIRRUS_NO with CIRRUS_NOT.
- (cirrus_reorg): Use renamed functions.
- (note_invalid_constants): Change from a void function to bool.
- Add an extra parameter, saying whether the fixups should be
- pushed. Return true if fixups are needed.
- (arm_reorg): Use renamed functions. Use INSN_P. Replace test
- of CIRRUS_NO with CIRRUS_NOT.
- * config/arm/arm.h (FLOAT_WORDS_BIG_ENDIAN): Mention that
- other floating point co-processors can also affect this.
- * config/arm/arm.md ("type" attribute): Add mav_farith and
- mav_dmult. Replace references to "cirrus_type" attribute with
- "type".
- * config/arm/cirrus.md ("cirrus_fpu" attribute): Delete.
- ("cirrus_type" attribute): Delete - use "type" instead.
- ("cirrus" attribute): Replace 'no' with 'not' and 'yes' with
- 'normal'.
-
-Tue Feb 25 22:46:27 CET 2003 Jan Hubicka <jh@suse.cz>
+ (arm_memory_load_p) ... this and make it check for SUBREGs and
+ constant loads that will be converted into loads from the
+ minipool.
+ (is_cirrus_insn): Rename to ...
+ (arm_cirrus_insn_p): ... this, for consistency. Replace test
+ of CIRRUS_NO with CIRRUS_NOT.
+ (cirrus_reorg): Use renamed functions.
+ (note_invalid_constants): Change from a void function to bool.
+ Add an extra parameter, saying whether the fixups should be
+ pushed. Return true if fixups are needed.
+ (arm_reorg): Use renamed functions. Use INSN_P. Replace test
+ of CIRRUS_NO with CIRRUS_NOT.
+ * config/arm/arm.h (FLOAT_WORDS_BIG_ENDIAN): Mention that
+ other floating point co-processors can also affect this.
+ * config/arm/arm.md ("type" attribute): Add mav_farith and
+ mav_dmult. Replace references to "cirrus_type" attribute with
+ "type".
+ * config/arm/cirrus.md ("cirrus_fpu" attribute): Delete.
+ ("cirrus_type" attribute): Delete - use "type" instead.
+ ("cirrus" attribute): Replace 'no' with 'not' and 'yes' with
+ 'normal'.
+
+2003-02-25 Jan Hubicka <jh@suse.cz>
* objc-act.c: Include cgraph.h
(mark_referenced_methods): New function.
@@ -466,13 +4034,13 @@ Tue Feb 25 22:46:27 CET 2003 Jan Hubicka <jh@suse.cz>
* gcse.c (cprop_jump): Revert the 2003-02-23 change.
2003-02-25 Vladimir Makarov <vmakarov@toke.toronto.redhat.com>
- Richard Henderson <rth@redhat.com>
+ Richard Henderson <rth@redhat.com>
* sched-ebb.c (add_deps_for_risky_insns): Add the dependence when
there is no similar load.
2003-02-25 Vladimir Makarov <vmakarov@redhat.com>
- Richard Henderson <rth@redhat.com>
+ Richard Henderson <rth@redhat.com>
* sched-int.h (INSN_TRAP_CLASS, WORST_CLASS): Move them from
sched-rgn.c.
@@ -490,46 +4058,46 @@ Tue Feb 25 22:46:27 CET 2003 Jan Hubicka <jh@suse.cz>
entry.
(add_forward_dependence): New function.
(compute_forward_dependences): Use the function.
-
+
* sched-ebb.c (earliest_block_with_similiar_load): New function.
(add_deps_for_risky_insns): New function.
(schedule_ebb): Call the function.
2003-02-20 Aldy Hernandez <aldyh@redhat.com>
- * doc/tm.texi: Document Rename TARGET_VECTOR_TYPES_COMPATIBLE to
- TARGET_VECTOR_OPAQUE_P. Document accordingly.
+ * doc/tm.texi: Document Rename TARGET_VECTOR_TYPES_COMPATIBLE to
+ TARGET_VECTOR_OPAQUE_P. Document accordingly.
- * testsuite/gcc.dg/20030218-1.c: Check that initialization of
- opaque types fail.
+ * testsuite/gcc.dg/20030218-1.c: Check that initialization of
+ opaque types fail.
- * c-typeck.c (comptypes): Change call to vector_types_compatible
- to vector_opaque_p.
- (convert_for_assignment): Call vector_opaque_p instead of
- vector_types_compatible.
- (really_start_incremental_init): Disallow initialization of opaque
- types.
+ * c-typeck.c (comptypes): Change call to vector_types_compatible
+ to vector_opaque_p.
+ (convert_for_assignment): Call vector_opaque_p instead of
+ vector_types_compatible.
+ (really_start_incremental_init): Disallow initialization of opaque
+ types.
- * target-def.h: Remove TARGET_VECTOR_TYPES_COMPATIBLE.
- Define TARGET_VECTOR_OPAQUE_P.
- (TARGET_INITIALIZER): Same.
+ * target-def.h: Remove TARGET_VECTOR_TYPES_COMPATIBLE.
+ Define TARGET_VECTOR_OPAQUE_P.
+ (TARGET_INITIALIZER): Same.
- * target.h (struct gcc_target): Remove vector_types_compatible.
- Add vector_opaque_p.
+ * target.h (struct gcc_target): Remove vector_types_compatible.
+ Add vector_opaque_p.
- * config/rs6000/rs6000.c (rs6000_spe_vector_types_compatible):
- Remove.
- (is_ev64_opaque_type): Check for TARGET_SPE and make sure type is
- a vector type. Change return type to bool.
- (TARGET_VECTOR_TYPES_COMPATIBLE): Remove.
- (TARGET_VECTOR_OPAQUE_P): Define.
+ * config/rs6000/rs6000.c (rs6000_spe_vector_types_compatible):
+ Remove.
+ (is_ev64_opaque_type): Check for TARGET_SPE and make sure type is
+ a vector type. Change return type to bool.
+ (TARGET_VECTOR_TYPES_COMPATIBLE): Remove.
+ (TARGET_VECTOR_OPAQUE_P): Define.
- * cp/parser.c (cp_parser_init_declarator): Call vector_opaque_p
- target hook.
- Include target.h.
- (cp_parser_init_declarator): Fix typo in function comments.
+ * cp/parser.c (cp_parser_init_declarator): Call vector_opaque_p
+ target hook.
+ Include target.h.
+ (cp_parser_init_declarator): Fix typo in function comments.
-Tue Feb 25 12:35:34 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-25 Jan Hubicka <jh@suse.cz>
* Makefile.in (lcm.o): Add dependency on function.h
* lcm.c (function.h): Include.
@@ -547,7 +4115,7 @@ Tue Feb 25 12:35:34 CET 2003 Jan Hubicka <jh@suse.cz>
of fourth arg is 'fndecl' not 'indirect'. Update comment
describing the function's parameters.
-Mon Feb 24 22:08:22 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-24 Jan Hubicka <jh@suse.cz>
* combine.c (simplify_shift_const): Fix previous patch.
@@ -564,12 +4132,12 @@ Mon Feb 24 22:08:22 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/extend.texi (Tru64 Pragmas): Reflect this.
* fixinc/inclhack.def (alpha___extern_prefix): Indicate #pragma
- extern_prefix support for Tru64 UNIX V5 <sys/stat.h>.
+ extern_prefix support for Tru64 UNIX V5 <sys/stat.h>.
* fixinc/fixincl.x: Regenerate.
* fixinc/tests/base/sys/stat.h [ALPHA___EXTERN_PREFIX_CHECK]: New
testcase.
Fixes PR c/5059, c/6126, other/9671.
-
+
2003-02-24 Roger Sayle <roger@eyesopen.com>
* gcc.c (do_spec_1) ['{']: Handle pending argument upon return
@@ -598,7 +4166,7 @@ Mon Feb 24 22:08:22 CET 2003 Jan Hubicka <jh@suse.cz>
("load_gbr"): New insn.
* configure.in (HAVE_AS_TLS): Add sh-*-* and sh[34]*-*-* cases.
- * configure: Regenerate.
+ * configure: Regenerate.
2003-02-24 Alan Modra <amodra@bigpond.net.au>
@@ -633,16 +4201,16 @@ Mon Feb 24 22:08:22 CET 2003 Jan Hubicka <jh@suse.cz>
2003-02-22 Kelley Cook <kelley@dwhoops.info>
- * i386.h, i386.c, i386.md (ix86_tune): Rename from ix86_cpu.
+ * i386.h, i386.c, i386.md (ix86_tune): Rename from ix86_cpu.
(ix86_tune_string): Rename from ix86_cpu_string.
2003-02-22 Kelley Cook <kelleycook@comcast.net>
- * config/i386/i386.c: Replace "mcpu" with "mtune".
- * config/i386/i386.h (TARGET_OPTIONS): Likewise.
- (CC1_CPU_SPEC): Likewise. New warning for "-mcpu".
- * doc/invoke.texi (i386 and x86-64 Options): Replace "mcpu"
- with "mtune". Note that "mcpu" is a deprecated synonym for "mtune".
+ * config/i386/i386.c: Replace "mcpu" with "mtune".
+ * config/i386/i386.h (TARGET_OPTIONS): Likewise.
+ (CC1_CPU_SPEC): Likewise. New warning for "-mcpu".
+ * doc/invoke.texi (i386 and x86-64 Options): Replace "mcpu"
+ with "mtune". Note that "mcpu" is a deprecated synonym for "mtune".
2003-02-23 Andreas Schwab <schwab@suse.de>
@@ -650,21 +4218,21 @@ Mon Feb 24 22:08:22 CET 2003 Jan Hubicka <jh@suse.cz>
m68k/t-linux-aout.
* config/m68k/t-linux, config/m68k/t-linux-aout: Removed.
-Sat Feb 22 20:22:19 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* toplev.c (rest_of_compilation): Apply fotgotten hunk
of track scheduling patch.
-Sat Feb 22 19:29:28 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* config/linux.h (TARGET_HAS_F_SETLKW): Define.
* config/alpha/linux.h (TARGET_HAS_F_SETLKW): Likewise
-Sat Feb 22 12:42:16 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* c-decl.c (c_expand_body_1): Fix.
-Sat Feb 22 03:13:36 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* expmed.c (expand_divmod): Undo sign extensions for unsigned operands
@@ -736,7 +4304,7 @@ Sat Feb 22 03:13:36 CET 2003 Jan Hubicka <jh@suse.cz>
* toplev.c (print_version): Output GGC heuristics.
(parse_options_and_default_flags): Call init_ggc_heuristics.
-Sat Feb 22 02:35:07 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* i386.c (def_builtin): Special case 64bit builtins.
(MASK_SSE164, MASK_SSE264): New constants.
@@ -751,7 +4319,7 @@ Sat Feb 22 02:35:07 CET 2003 Jan Hubicka <jh@suse.cz>
_mm_set_epi64x, _mm_set1_epi64x, _mm_cvtsd_si64x, _mm_cvttsd_si64x,
_mm_cvtsi64x_sd, _mm_cvtsi64x_si128, _mm_cvtsi128_si64x): New.
-Sat Feb 22 00:48:22 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-22 Jan Hubicka <jh@suse.cz>
* i386.c (builtin_description): Add __builtin_ia32_paddq and
__builtin_ia32_psubq. Fix __builtin_ia32_paddq128
@@ -774,14 +4342,14 @@ Sat Feb 22 00:48:22 CET 2003 Jan Hubicka <jh@suse.cz>
note_prediction_to_br_prob and note_prediction_to_br_prob
when not optimizing.
-Fri Feb 21 23:10:13 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-21 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (commit_edge_insertions): Call
find_many_sub_basic_block only when some code has been emitted.
(commit_edge_insertions_watch_calls): Bring into sync with
commit_edge_insertions
-Fri Feb 21 20:41:29 2003 J"orn Rennecke <joern.rennecke@superh.com>
+2003-02-21 J"orn Rennecke <joern.rennecke@superh.com>
* sh.h (OVERRIDE_OPTIONS): Fix code that clears 'e' register class.
@@ -802,14 +4370,14 @@ Fri Feb 21 20:41:29 2003 J"orn Rennecke <joern.rennecke@superh.com>
* config/h8300/h8300.md (a peephole2): New.
-Fri Feb 21 11:05:44 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-21 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (commit_one_edge_insertion): Only mark BB for splitting.
(commit_edge_insertions): Call find_many_sub_basic_blocks
* reg-stack.c (convert_regs): Cleax aux for blocks.
-Fri Feb 21 10:29:52 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-21 Jan Hubicka <jh@suse.cz>
* toplev.c (parse_options_and_default_flags): Undo accidental commit.
@@ -850,7 +4418,7 @@ Fri Feb 21 10:29:52 CET 2003 Jan Hubicka <jh@suse.cz>
options to be ignored.
(c_common_decode_option): Ignore them when preprocessing.
-Thu Feb 20 21:41:19 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-20 Jan Hubicka <jh@suse.cz>
* toplev.c (flag_sched2_use_superblocks, flag_sched2_use_traces): New
global variables.
@@ -1070,7 +4638,7 @@ Thu Feb 20 21:41:19 CET 2003 Jan Hubicka <jh@suse.cz>
destination block with multiple predecessors.
(connect_traces): Check whether the block is a start of trace.
-Wed Feb 19 19:00:24 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-19 Jan Hubicka <jh@suse.cz>
* calls.c (expand_call): Update call of INIT_CUMULATIVE_ARGS
* function.c (assign_params): Likewise.
@@ -1116,7 +4684,7 @@ Wed Feb 19 19:00:24 CET 2003 Jan Hubicka <jh@suse.cz>
* fixinc/tests/base/sys/socket.h: New file.
Fixes PR libgcj/9652.
-Wed Feb 19 17:22:51 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-19 Jan Hubicka <jh@suse.cz>
* i386.md (movsfcc_1, movdfcc_1): Fix constrains.
@@ -1135,7 +4703,7 @@ Wed Feb 19 17:22:51 CET 2003 Jan Hubicka <jh@suse.cz>
* expr.c (expand_expr): Use gen_int_mode for the argument
to gen_rtx_MULT.
-Wed Feb 19 14:22:42 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-19 Jan Hubicka <jh@suse.cz>
* i386.md (cosxf2): Fix conditional.
@@ -1158,7 +4726,7 @@ Wed Feb 19 14:22:42 CET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.md: Update all uses of split_adds_subs.
(a peephole2): New.
-Tue Feb 18 23:50:59 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-18 Jan Hubicka <jh@suse.cz>
* cgraph.c (NPREDECESORC, SET_NPREDECESORS): Kill.
(cgraph_expand_function): Rewrite.
@@ -1222,7 +4790,7 @@ Tue Feb 18 23:50:59 CET 2003 Jan Hubicka <jh@suse.cz>
* config/mips/mips.md (define_attr cpu): Sync with processor_type
enum values, including adding entries that were missing.
-Tue Feb 18 20:15:54 2003 J"orn Rennecke <joern.rennecke@superh.com>
+2003-02-18 J"orn Rennecke <joern.rennecke@superh.com>
* sh.c (calc_live_regs): Also check GET_CODE when checking if
initial value for PR_REG is still the PR_REG register.
@@ -1292,7 +4860,7 @@ Tue Feb 18 20:15:54 2003 J"orn Rennecke <joern.rennecke@superh.com>
(__ev_stdw): Same.
(__ev_stdh): Same.
-Mon Feb 17 16:16:54 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-17 Jan Hubicka <jh@suse.cz>
* recog.c (split_all_insns): Fix memory overflow.
@@ -1305,7 +4873,7 @@ Mon Feb 17 16:16:54 CET 2003 Jan Hubicka <jh@suse.cz>
(cmpsi): Likewise.
(7 peephole2): Likewise.
-Sun Feb 16 23:07:52 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-16 Jan Hubicka <jh@suse.cz>
* c-typeck.c (build_c_cast): Fold constant variables into
initial values.
@@ -1603,7 +5171,7 @@ Sun Feb 16 23:07:52 CET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.md (a peephole2): New.
-Wed Feb 12 22:47:18 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-12 Jan Hubicka <jh@suse.cz>
* Makefile.in (CRTSTUFF_CFLAGS): Add -fno-unit-at-a-time
(OBJS): Add callgraph.o
@@ -1661,7 +5229,7 @@ Wed Feb 12 22:47:18 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/install.texi (Specific): Update AVR- and Darwin-related URLs.
-Wed Feb 12 15:19:42 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-12 Jan Hubicka <jh@suse.cz>
* predict.c (estimate_probability): Fix roundoff error.
@@ -1699,7 +5267,7 @@ Wed Feb 12 15:19:42 CET 2003 Jan Hubicka <jh@suse.cz>
* config/alpha/linux.h (TARGET_C99_FUNCTIONS): New.
-Mon Oct 21 17:07:47 CEST 2002 Jan Hubicka <jh@suse.cz>
+2002-10-21 Jan Hubicka <jh@suse.cz>
* i386.c (contains_128bit_aligned_vector_p): New function.
(ix86_function_arg_boundary): Properly align vector modes.
@@ -1746,7 +5314,7 @@ Mon Oct 21 17:07:47 CEST 2002 Jan Hubicka <jh@suse.cz>
* tests/base/stdlib.h: Update.
* tests/base/ctype.h: New file.
-Tue Feb 11 20:44:45 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-11 Jan Hubicka <jh@suse.cz>
* emit-rtl.c (emit_copy_of_insn_after): Copy insn recog cache too.
@@ -1779,7 +5347,7 @@ Tue Feb 11 20:44:45 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/md.texi: Document new pow?f3 and atan2?f3 patterns.
-Tue Feb 11 19:03:22 MET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-11 Jan Hubicka <jh@suse.cz>
* combine.c (combine_simplify_rtx): Fix folding of
nested float_truncates.
@@ -1801,11 +5369,11 @@ Tue Feb 11 19:03:22 MET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.h (PREDICATE_CODES): Add gtuleu_operator.
* config/h8300/h8300.md (a peephole2): New.
-Tue Feb 11 13:32:12 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-11 Jan Hubicka <jh@suse.cz>
* sched-ebb.c (schedule_ebbs): Do not verify_flow_info.
-Tue Feb 11 10:02:54 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-11 Jan Hubicka <jh@suse.cz>
* predict.c (choose_function_section): Choose sections correctly.
@@ -1932,7 +5500,7 @@ Tue Feb 11 10:02:54 CET 2003 Jan Hubicka <jh@suse.cz>
-mcirrus-fix-invalid-insns switch,
(cirrus.md): New file.
-Mon Feb 10 11:40:18 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-10 Jan Hubicka <jh@suse.cz>
* combine.c (combine_simplify_rtx): Simplify using
(float_truncate (float x)) is (float x)
@@ -1965,24 +5533,24 @@ Mon Feb 10 11:40:18 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/extend.texi (C++98 Thread-Local Edits): Add missing @item
tag.
-Mon Feb 10 00:29:17 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-10 Jan Hubicka <jh@suse.cz>
* i386.c (vector_move_operand): New predicate.
(ix86_expand_vector_move): Be happy about 0.
* i386.h (PREDICATE_CODES): Add sse-move_operand.
* i386.md (mov*_internal): Add 'C' alternative.
-Sun Feb 9 23:58:33 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-09 Jan Hubicka <jh@suse.cz>
* i386.md (floathi*): Deal with SSE.
-Sun Feb 9 23:54:59 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-09 Jan Hubicka <jh@suse.cz>
* simplify-rtx.c (simplify_unary_operation,
simplify_binary_operation): Deal with vector modes
(simplify_ternary_operation): Deal with no-op VEC_MERGE.
-2002-02-09 Richard Sandiford <rsandifo@redhat.com>
+2003-02-09 Richard Sandiford <rsandifo@redhat.com>
* toplev.c (rest_of_compilation): Recompute register usage after
split_all_insns.
@@ -2008,7 +5576,7 @@ Sun Feb 9 23:54:59 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/install.texi: Squeeze and streamline section on
testing and regression checking.
-Sun Feb 9 13:33:34 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-09 Jan Hubicka <jh@suse.cz>
* i386.md (ahi?v*3): Set third operand type to TImode.
* i386.c (ix86_expand_binop_builtin): Extend operand when needed.
@@ -2023,7 +5591,7 @@ Sun Feb 9 13:33:34 CET 2003 Jan Hubicka <jh@suse.cz>
* i386.md (vmaskcmp, pinsrw, movd patterns): Fix RTL representation.
-Sat Feb 8 00:21:22 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-08 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (verify_flow_info): Use control_flow_insn_p.
* reload1.c (fixup_abnormal_edges): Split basic blocks when EH edges
@@ -2145,7 +5713,7 @@ Sat Feb 8 00:21:22 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/extend.texi: Document new pow and atan2 builtins, and
their float and long double variants. Realphabetize builtins.
-Fri Feb 7 23:24:28 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-07 Jan Hubicka <jh@suse.cz>
* i386.md (sse2_nandv2di3): Fix.
@@ -2157,7 +5725,7 @@ Fri Feb 7 23:24:28 CET 2003 Jan Hubicka <jh@suse.cz>
* config/i386/i386.h (ix86_return_in_memory): Return aggregate
types of up to 8 bytes via registers if MS_AGGREGATE_RETURN.
-Fri Feb 7 22:22:40 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-07 Jan Hubicka <jh@suse.cz>
* i386.md (movdi_rex64_1): Fix mmx<->int move opcode.
@@ -2191,7 +5759,7 @@ Fri Feb 7 22:22:40 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/c-tree.texi (Namespaces): Fix typo.
-Fri Feb 7 02:18:57 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-07 Jan Hubicka <jh@suse.cz>
* regrename.c (do_replace, find_oldest_value_reg,
copyprop_hardreg_forward_1): Update register attributes.
@@ -2234,7 +5802,7 @@ Fri Feb 7 02:18:57 CET 2003 Jan Hubicka <jh@suse.cz>
* config/i386/i386.c (ix86_function_ok_for_sibcall): Forbid sibcalls
from functions that return a float to functions that don't.
-Thu Feb 6 00:18:38 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-06 Jan Hubicka <jh@suse.cz>
* i386.c (x86_inter_unit_moves): New variable.
(ix86_secondary_memory_needed): Fix 64bit case, honor
@@ -2332,7 +5900,7 @@ Thu Feb 6 00:18:38 CET 2003 Jan Hubicka <jh@suse.cz>
(ctzsi2): New.
* config/arm/arm-protos.h: Update.
-Wed Feb 5 23:12:57 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-05 Jan Hubicka <jh@suse.cz>
* i386-protos.h (x86_emit_floatuns): Declare.
* i386.c (x86_emit_floatuns): New global function.
@@ -2348,7 +5916,7 @@ Wed Feb 5 23:12:57 CET 2003 Jan Hubicka <jh@suse.cz>
* config/ia64/unwind-ia64.c: include coretypes.h, tm.h to get
config/ia64/linux.h
-2002-02-05 Roger Sayle <roger@eyesopen.com>
+2003-02-05 Roger Sayle <roger@eyesopen.com>
* cfgloop.h (flow_bb_inside_loop_p): Correct prototype again.
@@ -2407,11 +5975,11 @@ Wed Feb 5 23:12:57 CET 2003 Jan Hubicka <jh@suse.cz>
PR c/9376
* libgcc2.c (__subvdi3): Fix typo.
-Tue Feb 4 21:46:05 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-04 Jan Hubicka <jh@suse.cz>
* i386.md (movti_rex64): Fix constraint.
-Tue Feb 4 18:40:42 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-04 Jan Hubicka <jh@suse.cz>
* i386.md (vector push splitters): Fix typo in resolving conflict.
@@ -2453,7 +6021,7 @@ Tue Feb 4 18:40:42 CET 2003 Jan Hubicka <jh@suse.cz>
(SPEC_REG_FIRST, SPEC_REG_LAST, SPEC_REG_NUM, COUNT_REGISTER_REGNUM):
Delete unused macros.
-Mon Feb 3 21:19:11 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-03 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_expand_store_builtin): Always force op1 to register.
(mov*_internal): Fix predicates; require one of operands to not be
@@ -2464,7 +6032,7 @@ Mon Feb 3 21:19:11 CET 2003 Jan Hubicka <jh@suse.cz>
(movups/movupd/movdqu patterns): Force one of operands to not be
memory.
-2002-02-03 Roger Sayle <roger@eyesopen.com>
+2003-02-03 Roger Sayle <roger@eyesopen.com>
* hooks.c (hook_rtx_rtx_identity): Generic hook function that
takes a single rtx and returns it unmodified.
@@ -2485,11 +6053,11 @@ Mon Feb 3 21:19:11 CET 2003 Jan Hubicka <jh@suse.cz>
(ix86_find_base_term): Simplify using i386_simplify_dwarf_addr.
(maybe_get_pool_constant): Likewise.
-Mon Feb 3 16:01:17 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-03 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_expand_int_movcc): Fix setcc sign bit case.
-Mon Feb 3 01:30:11 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-03 Jan Hubicka <jh@suse.cz>
* regclass.c (cannot_change_mode_set_regs): Correct argument order.
@@ -2649,7 +6217,7 @@ Mon Feb 3 01:30:11 CET 2003 Jan Hubicka <jh@suse.cz>
* reload.c: Revert 2003-01-31 change.
-Sat Feb 1 14:14:40 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-01 Jan Hubicka <jh@suse.cz>
* combine.c (combine_simplify_rtx): Use reversed_comparison_code_parts.
@@ -2687,7 +6255,7 @@ Sat Feb 1 14:14:40 CET 2003 Jan Hubicka <jh@suse.cz>
(Binaries): Refer to Microsoft Windows instead of listing all
possible variants.
-Sat Feb 1 00:28:30 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-01 Jan Hubicka <jh@suse.cz>
* loop.c (emit_prefetch_instructions): Do conversion at right place in
RTL chain.
@@ -2908,7 +6476,7 @@ Sat Feb 1 00:28:30 CET 2003 Jan Hubicka <jh@suse.cz>
* tree-inline.c (walk_tree): Add CHAR_TYPE.
-Wed Jan 29 10:26:12 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-29 Jan Hubicka <jh@suse.cz>
* i386.md (subdi3_carry_rex64): Fix typo.
@@ -3096,7 +6664,7 @@ Wed Jan 29 10:26:12 CET 2003 Jan Hubicka <jh@suse.cz>
class contains a floating-point register, return the size of the
mode in half words.
-Tue Jan 28 12:15:13 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-28 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_carry_flag_operator): New predicate.
(fcmov_operator): Fix whitespace.
@@ -3457,11 +7025,11 @@ Tue Jan 28 12:15:13 CET 2003 Jan Hubicka <jh@suse.cz>
which blocks have valid PRE information.
(bypass_conditional_jumps): Initialize bypass_last_basic_block.
-Sat Jan 25 22:31:59 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* gcse.c (local_cprop_pass): Update reg_sets table when needed.
-Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
Eric Botcazou <ebotcazou@libertysurf.fr>
PR opt/8492
* gcse.c (one_cprop_pass): Delete unreachable blocks.
@@ -3483,11 +7051,11 @@ Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.c (h8300_shift_needs_scratch_p): Update a
comment.
-2002-01-25 Richard Henderson <rth@redhat.com>
+2003-01-25 Richard Henderson <rth@redhat.com>
* config/m68k/m68k-none.h (ASM_SPEC): Adjust inter-option spacing.
-2002-01-25 Kelley Cook <kelleycook@comcast.net>
+2003-01-25 Kelley Cook <kelleycook@comcast.net>
* ggc-simple.c (debug_ggc_tree): Add PTR cast.
@@ -3505,7 +7073,7 @@ Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
2002-02-19 Robert Lipe <robertlipe@usa.net>
* config/i386/t-sco5gas: (CRTSTUFF_T_CFLAGS_S): Delete -mcoff.
-2002-01-25 Roger Sayle <roger@eyesopen.com>
+2003-01-25 Roger Sayle <roger@eyesopen.com>
* builtins.c (purge_builtin_constant_p): Scan insn stream
sequentially rather than by basic block.
@@ -3515,7 +7083,7 @@ Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
* combine.c (simplify_comparison, case AND): Remove a redundant test.
-2002-01-25 Roger Sayle <roger@eyesopen.com>
+2003-01-25 Roger Sayle <roger@eyesopen.com>
* function.h (struct function): New field calls_constant_p.
(current_function_calls_constant_p): New macro for above.
@@ -3527,7 +7095,7 @@ Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
* integrate.c (expand_inline_function): Set calls_constant_p if
the function being inlined has calls_constant_p set.
-2002-01-25 Roger Sayle <roger@eyesopen.com>
+2003-01-25 Roger Sayle <roger@eyesopen.com>
* cse.c (fold_rtx): Instantiate CONSTANT_P_RTX to 0 when not
optimizing, even if flag_gcse is true.
@@ -3555,12 +7123,12 @@ Sat Jan 25 21:04:33 CET 2003 Jan Hubicka <jh@suse.cz>
* config/ia64/crtbegin.asm [HAVE_INITFINI_ARRAY]: Put it here
instead so that it comes first.
-Sat Jan 25 16:11:22 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* df.c (read_modify_subreg_p): When osize == UNITS_PER_WORD,
subreg is read/modify.
-Sat Jan 25 15:55:08 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_expand_movstr, ix86_expand_clrstr): Consistently
do libcall for large blocks.
@@ -3571,7 +7139,7 @@ Sat Jan 25 15:55:08 CET 2003 Jan Hubicka <jh@suse.cz>
(cse_set_around_loop): Do not create new basic blocks.
* Makefile.in (cse.o): Add dependnecy on except.h
-Sat Jan 25 12:05:17 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* builtins.c (fold_trunc_transparent_mathfn): New function.
(fold_builtin): Use it.
@@ -3583,11 +7151,11 @@ Sat Jan 25 12:05:17 CET 2003 Jan Hubicka <jh@suse.cz>
* Makefile.in (cfgloop.o, cfgloopanal.o, cfgloopmanip.o): Add
dependencies on coretypes.h and $(TM_H).
-Sat Jan 25 11:10:03 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* builtins.c (fold_trunc_transparent_mathfn): Undo accidental commit.
-2002-01-24 Stuart Hastings <stuart@apple.com>
+2003-01-24 Stuart Hastings <stuart@apple.com>
* config/i386/i386.c (x86_output_mi_thunk): Add Darwin/x86 support.
@@ -3602,7 +7170,7 @@ Sat Jan 25 11:10:03 CET 2003 Jan Hubicka <jh@suse.cz>
(UNSPEC_POPQI, UNSPEC_POPQF, UNSPEC_ANDN_ST): Likewise.
(UNSPEC_RPTB_INIT, UNSPEC_TOIEEE, UNSPEC_FRIEEE): Likewise.
-Fri Jan 24 23:44:12 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-24 Jan Hubicka <jh@suse.cz>
* emit-rtl.c (reg_attrs_htab): New static variable.
(reg_attrs_htab_hash, reg_attrs_htab_eq, get_reg_attrs): New static
@@ -3643,7 +7211,7 @@ Fri Jan 24 23:44:12 CET 2003 Jan Hubicka <jh@suse.cz>
* config/xtensa/xtensa-protos.h
(xtensa_function_prologue, xtensa_function_epilogue): Ditto.
-Fri Jan 24 23:03:32 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-24 Jan Hubicka <jh@suse.cz>
* builtins.c (DEF_BUILTIN): Accept 10 arguments.
(implicit_built_in_decls): New global array.
@@ -4227,7 +7795,7 @@ Fri Jan 24 23:03:32 CET 2003 Jan Hubicka <jh@suse.cz>
UNSPEC_PROLOGUE_USE to prevent the link register from being
considered dead.
-Mon Jan 20 14:36:23 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-20 Jan Hubicka <jh@suse.cz>
* i386.md (SSE cmov splitter): Handle memory operand in operand 5.
@@ -4459,7 +8027,7 @@ Mon Jan 20 14:36:23 CET 2003 Jan Hubicka <jh@suse.cz>
* config/m68hc11/m68hc11.h (MASK_M6812): Define.
-Thu Jan 16 21:50:25 2003 J"orn Rennecke <amylaar@onetel.net.uk>
+2003-01-16 J"orn Rennecke <amylaar@onetel.net.uk>
* sh.md (mshflo_w_x): Fix description of operation.
@@ -4630,7 +8198,7 @@ Thu Jan 16 21:50:25 2003 J"orn Rennecke <amylaar@onetel.net.uk>
(ARM_GO_IF_LEGITIMATE_ADDRESS): Handle pre/post-modify addresses.
(ARM_PRINT_OPERAND_ADDRESS): Likewise.
-Wed Jan 15 12:23:21 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-15 Jan Hubicka <jh@suse.cz>
PR f/9258
* global.c (struct allocno): Add no_stack_reg.
@@ -4715,7 +8283,7 @@ Wed Jan 15 12:23:21 CET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.md (*andsi3_lshiftrt_9_sb): New.
(*iorsi3_and_lshiftrt_9_sb): Likewise.
-Tue Jan 14 00:45:33 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-14 Jan Hubicka <jh@suse.cz>
* convert.c (strip_float_extensions): Look for narrowest type handling
FP constants.
@@ -4785,7 +8353,7 @@ Tue Jan 14 00:45:33 CET 2003 Jan Hubicka <jh@suse.cz>
* arm-protos.h (struct cpp_reader): Add declaration.
-Sat Jan 11 11:02:58 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-11 Jan Hubicka <jh@suse.cz>
PR target/9068
* i386.c (output_fp_compare): Fix typo.
@@ -4836,7 +8404,7 @@ Sat Jan 11 11:02:58 CET 2003 Jan Hubicka <jh@suse.cz>
Remove calls.
* mklibgcc.in: Remove uses of RANLIB_TEST_FOR_TARGET.
-Fri Jan 10 22:05:35 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-10 Jan Hubicka <jh@suse.cz>
* ifcvt.c (noce_try_addcc): Do not call emit_conditional_add
with weird operands.
@@ -5832,7 +9400,7 @@ Fri Jan 10 22:05:35 CET 2003 Jan Hubicka <jh@suse.cz>
the generated code.
(write_automata): Call the new function.
-Thu Jan 9 22:47:38 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-09 Jan Hubicka <jh@suse.cz>
* i386.md (unit, prefix_0f, memory attributes): Hanlde sseicvt
correctly.
@@ -5841,7 +9409,7 @@ Thu Jan 9 22:47:38 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/tm.texi (EXTRA_ADDRESS_CONSTRAINT): Fix typo.
-Thu Jan 9 17:26:40 2003 J"orn Rennecke <joern.rennecke@superh.com>
+2003-01-09 J"orn Rennecke <joern.rennecke@superh.com>
* defaults.h (EXTRA_MEMORY_CONSTRAINT): Add STR argument.
(EXTRA_ADDRESS_CONSTRAINT): Likewise.
@@ -5915,7 +9483,7 @@ Thu Jan 9 17:26:40 2003 J"orn Rennecke <joern.rennecke@superh.com>
(volatile_refs_p) [ASM_INPUT]: Likewise.
(side_effects_p) [ASM_INPUT]: Likewise.
-Thu Jan 9 12:00:36 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-09 Jan Hubicka <jh@suse.cz>
* i386.md (*mul*): FIx constraints; remove confused comment; fix
athlon_decode attributes
@@ -6013,7 +9581,7 @@ Thu Jan 9 12:00:36 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.hlp: Delete.
-Thu Jan 9 00:57:15 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-09 Jan Hubicka <jh@suse.cz>
* i386.c (ix86_expand_int_addcc): Fix thinko.
@@ -6096,7 +9664,7 @@ Thu Jan 9 00:57:15 CET 2003 Jan Hubicka <jh@suse.cz>
* config/h8300/h8300.h (CONSTANT_ADDRESS_P): Allow CONST and
HIGH on all variants.
-Wed Jan 8 14:06:34 CET 2003 Josef Zlomek <zlomj9am@artax.karlin.mff.cuni.cz>
+2003-01-08 Josef Zlomek <zlomj9am@artax.karlin.mff.cuni.cz>
* Makefile.in (PARTITION_H): New.
(BASIC_BLOCK_H): Added hard-reg-set.h and $(PARTITION_H).
@@ -6111,7 +9679,7 @@ Wed Jan 8 14:06:34 CET 2003 Josef Zlomek <zlomj9am@artax.karlin.mff.cuni.cz>
(cmpxf_trap): Delete.
(movxf_hard_insn): Remove test of ENABLE_XF_PATTERNS.
-Wed Jan 8 12:10:57 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-08 Jan Hubicka <jh@suse.cz>
* i386.md (adddi3_carry_rex64, subdi3_carry_rex64): Name pattern.
(addhi3_carry, addqi3_carry, subhi3_carry, subqi3_carry): New patterns.
@@ -6139,7 +9707,7 @@ Wed Jan 8 12:10:57 CET 2003 Jan Hubicka <jh@suse.cz>
* config.gcc (m68k-*-linux*): Don't set extra_parts and gnu_ld,
should come from the generic *-*-linux* entry.
-Tue Jan 7 22:29:56 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-07 Jan Hubicka <jh@suse.cz>
* cselib.c (cselib_current_insn_in_libcall): New static variable.
(new_elt_loc_list, cselib_process_insn, cselib_init): Keep track on whether
@@ -6153,7 +9721,7 @@ Tue Jan 7 22:29:56 CET 2003 Jan Hubicka <jh@suse.cz>
* doc/tm.texi (TARGET_SCHED_VARIABLE_ISSUE): CLOBBER and USE do
not normally affect to issue rate.
-Tue Jan 7 21:46:57 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-07 Jan Hubicka <jh@suse.cz>
* genopinit.c (optabs): Add addc_optab.
* ifcvt.c (noce_try_store_flag): Rename to ...
@@ -6578,14451 +10146,4 @@ Tue Jan 7 21:46:57 CET 2003 Jan Hubicka <jh@suse.cz>
* config/v850/v850.h (REGISTER_TARGET_PRAGMAS): Update.
* doc/tm.texi (REGISTER_TARGET_PRAGMAS): Update
-2002-12-31 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Update the prototypes.
- * config/h8300/h8300.c (const_le_2_operand): Change to
- const_int_le_2_operand.
- (const_int_le_6_operand): Change to const_int_le_6_operand.
- * config/h8300/h8300.md (two peepholes): Update the function
- names.
-
-2002-12-31 Tom Tromey <tromey@redhat.com>
-
- * doc/install.texi (Testing): Fixed typo.
-
-2002-12-31 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (TRAMPOLINE_TEMPLATE): Remove.
- (TRAMPOLINE_SIZE): Support the normal mode.
- (INITIALIZE_TRAMPOLINE): Emit the entire trampoline.
-
-2002-12-31 Mark Mitchell <mark@codesourcery.com>
-
- * c-common.h (pending_lang_change): Declare.
-
-2002-12-31 Jerry Quinn <jlquinn@optonline.net>
-
- * gcc/doc/invoke.texi (Optimization Options): Clean up -O flag
- descriptions.
-
-2002-12-31 Jerry Quinn <jlquinn@optonline.net>
-
- * gcc/doc/invoke.texi (Optimization Options): List the options
- enabled by each -O flag.
-
-2002-12-31 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/install.texi (Configuration): Explicitly refer
- gcc/config.gcc for a list of cpu models.
-
-2002-12-31 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h: Fix comment typos.
-
-2002-12-30 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.h (WIDEST_HARDWARE_FP_SIZE): Define.
-
-2002-12-30 Tom Tromey <tromey@redhat.com>
-
- * doc/install.texi (Testing): Mention Jacks.
-
-2002-12-30 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/gcc.texi, doc/gccint.texi: Update last modification dates.
-
-2002-12-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (output_logical_op): Use extu.w in more
- cases.
- (compute_logical_op_length): Update to reflect the change in
- output_logical_op.
- (compute_logical_op_cc): Likewise.
-
-2002-12-30 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/service.texi: Uncomment and update FAQ link.
-
-2002-12-30 Andreas Jaeger <aj@suse.de>
-
- * unwind-dw2-fde.h (last_fde): Add unused attribute for obj.
-
-2002-12-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*addsi3_lshiftrt_16_zexthi): New.
-
-2002-12-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (output_logical_op): Use extu.w if we
- are clearing the most significant byte.
- (compute_logical_op_length): Update to reflect the change in
- output_logical_op.
- (compute_logical_op_cc): Likewise.
-
-2002-12-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Give internal names to anonymous
- insns.
-
-2002-12-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Reorder some insns.
-
-2002-12-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Add prototypes for
- const_int_qi_operand and const_int_hi_operand.
- * config/h8300/h8300.c (const_int_qi_operand): New.
- (const_int_hi_operand): Likewise.
- * config/h8300/h8300.md (three peepholes): New.
-
-2002-12-28 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/cpp.texi, doc/gcc.texi, doc/gccint.texi, doc/install.texi:
- Use @copying.
-
-2002-12-28 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * configure.in: Increase makeinfo version requirement to 4.[2-9].
- * configure: Regenerate.
- * doc/install.texi: Update Texinfo version requirement.
-
-2002-12-28 Andreas Jaeger <aj@suse.de>
-
- * config/i386/i386.c (x86_function_profiler): Mark labelno as
- possibly unused.
-
- * c-parse.in (yyprint): Use HOST_WIDE_INT_PRINT_DOUBLE_HEX for
- correct format.
-
-2002-12-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*iorhi_shift_8): Change the name to
- *iorhi_ashift_8.
- (*iorhi_lshiftrt_8): New.
-
-2002-12-27 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/include/texinfo.tex: Update to version 2002-12-26.16.
-
-2002-12-27 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/contrib.texi (Contributors): Add Abramo and Roberto Bagnara.
-
-2002-12-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Fix comment typos.
- Update copyright.
- * config/h8300/h8300.c: Fix comment typos.
-
-2002-12-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (IDENT_ASM_OP): End with a tab.
-
-2002-12-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/i386/athlon.md: Fix comment typos.
- * config/i386/crtdll.h: Likewise.
- * config/i386/djgpp.h: Likewise.
- * config/i386/i386-interix.h: Likewise.
- * config/i386/i386.c: Likewise.
- * config/i386/i386.h: Likewise.
- * config/i386/i386.md: Likewise.
- * config/i386/k6.md: Likewise.
- * config/i386/mingw32.h: Likewise.
- * config/i386/pentium.md: Likewise.
- * config/i386/sco5.h: Likewise.
- * config/i386/winnt.c: Likewise.
- * config/i386/xmmintrin.h: Likewise.
-
-2002-12-26 Jose Renau <renau@cs.uiuc.edu>
-
- * ssa-dce.c (EXECUTE_IF_UNNECESSARY): Verify INSN is an
- INSN_P before checking to see if it is dead.
- (mark_all_insn_unnecessary): Similarly.
- (ssa_eliminate_dead_code): Similarly.
- * rtl.h (struct rtx_def): Update comments for in_struct usage
- in dead code elimination pass.
- (INSN_DEAD_CODE_P): Allow JUMP_INSN and CALL_INSN as well.
-
-2002-12-26 Andreas Schwab <schwab@suse.de>
-
- * config.gcc (powerpc*-*-*, rs6000-*-*): Fix assignment syntax.
-
-2002-12-25 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_override_options): Convert to
- tartet_flags_explicit.
- * config/rs6000/rs6000.h (MASK_MULTIPLE_SET, MASK_STRING_SET): Delete.
- Compact target_flags bits.
- (TARGET_MULTIPLE_SET, TARGET_STRING_SET): Delete.
- (TARGET_SWITCHES): Delete references to *_SET flags.
-
-Wed Dec 25 20:30:53 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (memory attribute): Fix setcc attribute.
-
-2002-12-25 Kazu Hirata <kazu@cs.umass.edu>
-
- * output.h: Fix comment typos.
- * predict.c: Likewise.
- * print-tree.c: Likewise.
- * profile.c: Likewise.
- * ra-build.c: Likewise.
- * ra-colorize.c: Likewise.
- * ra-debug.c: Likewise.
- * ra-rewrite.c: Likewise.
- * ra.c: Likewise.
- * ra.h: Likewise.
- * real.c: Likewise.
- * recog.c: Likewise.
- * reg-stack.c: Likewise.
- * regclass.c: Likewise.
-
-2002-12-25 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (print_operand_address): Do not negate
- a negative number when printing one.
-
-2002-12-25 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Add prototypes for
- output_plussi, compute_plussi_length, and compute_plussi_cc.
- * config/h8300/h8300.c (output_plussi): New.
- (compute_plussi_length): Likewise.
- (compute_plussi_cc): Likewise.
- * config/h8300/h8300.md (addsi_h8300h): Call
- output_plussi, compute_plussi_length, and compute_plussi_cc.
-
-2002-12-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (two peepholes): Use match_dup instead
- of match_operand in the new patterns.
-
-2002-12-24 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/include/texinfo.tex: Update to version 2002-11-25.11.
-
-2002-12-24 Nathan Sidwell <nathan@codesourcery.com>
-
- * configure.in (enable-coverage): Add SELF_COVERAGE.
- * profile.c (end_branch_prob): Use SELF_COVERAGE.
-
-2002-12-24 Jim Wilson <wilson@redhat.com>
-
- * alias.c (record_set): Handle multi-reg hard registers.
-
-2002-12-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * regmove.c: Fix comment typos.
- * reload.c: Likewise.
- * reload1.c: Likewise.
- * resource.c: Likewise.
- * rtl.def: Likewise.
- * rtl.h: Likewise.
- * rtlanal.c: Likewise.
- * sched-deps.c: Likewise.
- * sched-rgn.c: Likewise.
- * sibcall.c: Likewise.
- * simplify-rtx.c: Likewise.
- * ssa-ccp.c: Likewise.
- * ssa.c: Likewise.
- * stmt.c: Likewise.
- * stor-layout.c: Likewise.
- * system.h: Likewise.
- * tlink.c: Likewise.
- * toplev.c: Likewise.
- * tracer.c: Likewise.
- * tree-inline.c: Likewise.
- * tree.c: Likewise.
- * tree.h: Likewise.
- * unroll.c: Likewise.
- * varasm.c: Likewise.
-
-2002-12-23 Larin Hennessy <larin@science.oregonstate.edu>
-
- * doc/install.texi: Remove i386-*-isc, i860-*-bsd,
- m68k-altos-sysv, m68k-isi-bsd, m68k-sony-bsd entries.
- * doc/invoke.texi: Remove AMD 29K, ARM RISC/iX, Clipper, Convex,
- DG/UX entries.
- * doc/md.texi: Remove AMD 29K entries.
- * doc/trouble.texi: Remove Alliant, DG/UX, Iris 4.0.5F, GAS
- 1.38.1, NewsOS, RT PC, WE32K entries.
-
-2002-12-23 Aldy Hernandez <aldyh@redhat.com>
-
- PR/8763
- * config/rs6000/altivec.md (mulv4sf3): Rewrite to add -0.0 vector.
- (altivec_vspltisw_v4sf): Name pattern.
- (altivec_vslw_v4sf): New pattern.
-
-2002-12-23 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/include/gcc-common.texi: Define DEVELOPMENT.
-
-2002-12-23 Mark Mitchell <mark@codesourcery.com>
-
- * stor-layout.c (update_alignment_for_field): Correct handling of
- unnamed bitfields on PCC_BITFIELD_TYPE_MATTERS machines.
- * doc/tm.texi (PCC_BITFIELD_TYPE_MATTERS): Note that an unnamed
- bitfield does not affect alignment.
-
-2002-12-23 David Edelsohn <edelsohn@gnu.org>
-
- * expr.c (expand_assignment): Apply special treatment to
- ARRAY_TYPE.
-
-2002-12-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Update the prototype of
- expand_a_shift.
- * config/h8300/h8300.c (expand_a_shift): Change the return
- type to void.
- * config/h8300/h8300.md: Update all the uses of
- expand_a_shift.
-
-2002-12-22 Nathan Sidwell <nathan@codesourcery.com>
-
- * tree.c (save_expr): Allow either side of a dyadic operand to be
- constant.
-
- * doc/portability.texi (portability): Update portability goals.
-
-2002-12-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (output_a_shift): Remove unused code.
-
-2002-12-22 Mark Mitchell <mark@codesourcery.com>
-
- * stor-layout.c (update_alignment_for_field): Guard use of
- ADJUST_FIELD_ALIGN with #ifdef.
-
- * stor-layout.c (update_alignment_for_field): Use
- ADJUST_FIELD_ALIGN when computing the alignment for a zero-width
- bitfield when PCC_BITFIELD_TYPE_MATTERS.
-
-2002-12-22 Kazu Hirata <kazu@cs.umass.edu>
-
- * genautomata.c: Fix comment typos.
-
-Sun Dec 22 18:23:44 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * params.def (tracer-min-branch-probability-feedback): Fix default.
- * final.c (compute_alignments): Use profile to avoid code bloat.
-
-2002-12-22 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (get_shift_alg): Make shift insn
- sequences end with a valid cc0 whenever possible.
-
-2002-12-22 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (negsf2): New.
- (*negsf2_h8300): Likewise.
- (*negsf2_h8300hs): Likewise.
-
-2002-12-21 Geoffrey Keating <geoffk@apple.com>
-
- * integrate.c (output_inline_function): Don't hold private
- pointers to 'struct function' over GC calls.
-
-2002-12-21 Kaz kojima <kkojima@gcc.gnu.org>
-
- * config/sh/lib1funcs.asm (__fpscr_values): Conditionalize with
- NO_FPSCR_VALUES.
- * config/sh/t-linux (TARGET_LIBGCC2_CFLAGS): Add -DNO_FPSCR_VALUES.
-
-2002-12-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (zero_extendqisi2): Correct the
- length.
-
-2002-12-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*zero_extendqihi2_h8300): Make the
- second alternative "#".
- (*zero_extendqihi2_h8300hs): Likewise.
- (a define_split): New.
-
-2002-12-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Update the prototype for
- split_adds_subs.
- Add prototypes for const_le_2_operand and const_le_6_operand.
- * config/h8300/h8300.c (split_adds_subs): Add an argument to
- specify whether inc/dec should be used when possible.
- (const_le_2_operand): New.
- (const_le_6_operand): Likewise.
- * config/h8300/h8300.md (two peepholes): New.
-
-2002-12-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/fr30/fr30.md: Fix a comment typo.
- * config/i386/i386.c: Likewise.
- * config/ip2k/ip2k.h: Likewise.
-
-2002-12-20 Jim Wilson <wilson@redhat.com>
-
- * config/rs6000/spe.h (__ev_subifw): Reverse arguments.
- (__ev_subw, __ev_subiw): New.
- (ev_mwlssf, ev_mwlsmf, ev_mwlssfa, ev_mwlsmfa, ev_mwlssfaaw,
- ev_mwlsmfaaw, ev_mwlssfanw, ev_mwlsmfanw): Delete.
-
-2002-12-20 John David Anglin <dave.anglin@nrc.gc.ca>
-
- * pa-linux.h (TARGET_HAS_STUBS_AND_ELF_SECTIONS): Delete define.
- * pa32-linux.h (FUNCTION_OK_FOR_SIBCALL): Delete define.
- * pa.c (pa_function_ok_for_sibcall): Allow non indirect sibcalls on
- TARGET_ELF32. Add comment on sibcall issues for TARGET_64BIT.
-
-2002-12-20 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300-protos.h: Add prototypes for
- incdec_operand and eqne_operator.
- * config/h8300/h8300.c (incdec_operand): New.
- (eqne_operator): Likewise.
- * config/h8300/h8300.h (CONST_OK_FOR_M): Likewise.
- (CONST_OK_FOR_O): Likewise.
- (CONST_OK_FOR_LETTER_P): Use CONST_OK_FOR_M and
- CONST_OK_FOR_O.
- * config/h8300/h8300.md (UNSPEC_INCDEC): New.
- (addhi3_incdec): New.
- (addsi3_incdec): Likewise.
- (two peepholes): Likewise.
-
-2002-12-20 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (dosize): Remove warnings.
- (print_operand): Likewise.
-
-2002-12-20 Richard Henderson <rth@redhat.com>
-
- * config/alpha/alpha.c (decl_has_samegp): New.
- (samegp_function_operand): Use it. Rename from
- current_file_function_operand.
- (direct_call_operand): Handle -msmall-text via symbol->jump.
- (tls_symbolic_operand_1): Use T for tprel64, t for smaller tprel.
- (tls_symbolic_operand_type): Likewise.
- (alpha_encode_section_info): Likewise. Handle -msmall-text.
- (alpha_function_ok_for_sibcall): Use decl_has_samegp.
- (alpha_end_function): Set symbol->jump for functions defined in
- the text section.
- * config/alpha/alpha-protos.h: Update.
- * config/alpha/alpha.h (MASK_SMALL_TEXT, TARGET_SMALL_TEXT): New.
- (TARGET_SWITCHES): Add -msmall-text and -mlarge-text.
- (PREDICATE_CODES): Update.
- * config/alpha/alpha.md (call patterns): Update for
- samegp_function_operand rename; use !samegp reloc if
- TARGET_EXPLICIT_RELOCS.
- * doc/invoke.text: Document -msmall-text and -mlarge-text.
-
-2002-12-20 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * config/ns32k/ns32k.md (movdi): Use "l" instead of "f" to match
- all registers capable of holding a double float.
- (*rcond): change name of "reverse branch" insns to
- something more meaningful.
- (*rbgt, *rblt, *rbge, *rble): Reverse branches to handle IEEE
- comparisons properly.
- (*ffs): Change operand 0 from write to read-modify-write.
- (*ffsssi2): Drop constraints from define_expand.
-
- * config/ns32k/ns32k.h (STORE_RATIO, STORE_BY_PIECES): Avoid using
- MOVE_RATIO as default for store operations.
-
- * config/ns32k/ns32k.h (enum reg_class, REG_CLASS_NAMES): Add
- LONG_REGS class.
- (CANNOT_CHANGE_MODE_CLASS): Can't subreg LONG_REGS.
- (GO_IF_LEGITIMATE_ADDRESS): Remove spurious abort().
- * config/ns32k/ns32k.c (regclass_map): Add LONG_REGS class.
-
- * config/ns32k/STATUS: New File
- * config/ns32k/NOTES: New file.
-
-2002-12-20 Hartmut Penner <hpenner@de.ibm.com>
-
- * doc/invoke.texi: Document -mzarch, -mesa, -mcpu= and -march=
- option for S/390 and zSeries.
- * config/s390/s390.c (s390_cpu, s390_cpu_string, s390_arch,
- s390_arch_string): New variables.
- (override_options): Checking for options and setting of
- appropriate target_flags, cpu and arch flags.
- * config/s390/s390.h: (processor_type): New enum.
- (TARGET_SWITCHES): New switches -mesa/zarch.
- * config/s390/s390.md: New attribute 'cpu'.
-
-2002-12-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * c-pretty-print.h: Fix comment typos.
- * integrate.c: Likewise.
- * varasm.c: Likewise.
- * config/c4x/c4x.h: Likewise.
- * config/c4x/c4x.md: Likewise.
- * config/fr30/fr30.md: Likewise.
- * config/frv/frv.c: Likewise.
- * config/h8300/h8300.c: Likewise.
- * config/i386/i386.c: Likewise.
- * config/i386/i386.h: Likewise.
- * config/ia64/ia64.c: Likewise.
- * config/ia64/ia64.h: Likewise.
- * config/ip2k/ip2k.md: Likewise.
- * config/m68hc11/m68hc11-crt0.S: Likewise.
- * config/m68hc11/m68hc11.h: Likewise.
- * config/m68hc11/m68hc11.md: Likewise.
- * config/m68hc11/m68hc12.h: Likewise.
- * config/mcore/mcore.md: Likewise.
- * config/mips/mips.c: Likewise.
- * config/mips/mips.md: Likewise.
- * config/mmix/mmix-modes.def: Likewise.
- * config/pa/pa.c: Likewise.
- * config/rs6000/rs6000.c: Likewise.
- * config/rs6000/rs6000.h: Likewise.
- * config/rs6000/rs6000.md: Likewise.
-
-2002-12-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (output_a_shift): Clean up the code to
- output shifts using rotation.
-
-2002-12-20 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * flow.c (allocate_reg_life_data): Reset REG_FREQ.
-
-2002-12-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (pushqi_h8300): Don't push the stack
- pointer.
- (pushqi_h8300hs): Likewise.
- (pushhi_h8300): Likewise.
- (pushhi_h8300hs): Likewise.
-
-Thu Dec 19 23:44:09 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sched-rgn.c (init_regions): Update comment.
-
-2002-12-19 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (define_attr type): Remove altivec.
- * config/rs6000/altivec.md (movv4si_internal): Set correct instruction
- attributes.
- (movv8hi_internal,movv16qi_internal,movv4sf_internal): Same.
- (get_vrsave_internal,set_vrsave_internal): Same.
- (altivec_vspltisb,altivec_vspltish,altivec_vspltisw): Same.
- (absv16qi2,absv8hi2,absv4si2,absv4sf2): Same
- (altivec_abss_v16qi,altivec_abss_v8hi,altivec_abss_v4si): Same.
-
-2002-12-19 Casper S. Hornstrup <chorns@users.sourceforge.net>
- Danny Smith <dannysmith@users.sourceforge.net>
- Eric Kohl <ekohl@rz-online.de>
-
- * config/i386/i386.c (ix86_handle_cdecl_attribute): Check for
- attributes incompatible with fastcall attribute.
- (ix86_handle_regparm_attribute): Likewise.
-
- * config/i386/i386.c (ix86_comp_type_attributes): Check for mismatched
- fastcall types.
-
- * config/i386/cygwin.h (TARGET_OS_CPP_BUILTINS): Add fastcall
- attributes.
- (ASM_OUTPUT_LABELREF): Define as i386_pe_output_labelref.
- * config/i386/i386-protos.h (i386_pe_output_labelref): Declare.
- * config/i386/winnt.c (i386_pe_mark_dllimport). Add __imp_ prefix in
- i386_pe_output_labelref rather than here.
- (gen_fastcall_suffix): New function. Decorates a label name with the
- fastcall prefix (@) and the stdcall suffix.
- (i386_pe_encode_section_info): Call gen_fastcall_suffix() if a symbol
- has a fastcall attribute.
- (i386_pe_output_labelref): New function. Outputs a label reference.
- * config/i386/i386.c (ix86_attribute_table): Accept 'fastcall' as a
- valid attribute.
- (ix86_return_pops_args): Fastcall functions pop the stack.
- (init_cumulative_args): Reserve registers ECX and EDX if function has
- fastcall attribute.
- (function_arg): Use registers ECX and EDX if function has fastcall
- attribute.
- * config/i386/i386.h (CUMULATIVE_ARGS): Add fastcall attribute flag.
- (DLL_IMPORT_EXPORT_PREFIX): Redefine as '#'.
- (FASTCALL_PREFIX): Define as '@'.
- * config/i386/mingw32.h (TARGET_OS_CPP_BUILTINS): Add fastcall
- attributes.
- * doc/extend.texi: Add documentation of fastcall attribute.
-
-2002-12-19 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * configure.in: FORBUILD when build!=host changed from
- ../$build-alias to ../build-$build_alias to match change made
- in top directory.
- * configure: Regenerated.
-
-2002-12-19 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR optimization/8988
- * loop.c (maybe_eliminate_biv): Kill REG_EQUAL notes mentioning
- the biv when eliminating.
-
-2002-12-19 Devang Patel <dpatel@apple.com>
- * gcc.c (struct default_compiler): Recognizes input file name with
- .CPP extension as C++ source files
- * cp/lang-spec.h: Same
- * doc/invoke.texi: Add documentation for .CPP support.
-
-2002-12-19 Aldy Hernandez <aldyh@redhat.com>
-
- PR 8553
- * config/rs6000/altivec.md ("absv8hi2"): Add & to clobbered
- registers.
- ("absv16qi2"): Same.
- ("absv4si2"): Same.
- ("absv4sf2"): Same.
- ("altivec_abss_v16qi"): Same.
- ("altivec_abss_v8hi"): Same.
- ("altivec_abss_v4si"): Same.
-
-2002-12-19 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("*tsthiCCT", "*tsthiCCT_cconly",
- "*tstqiCCT", "*tstqiCCT_cconly"): New insns.
-
-2002-12-19 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR target/8340
- * stmt.c (expand_asm_operands): Produce an error when
- the PIC register is clobbered.
-
-2002-12-18 Daniel Berlin <dberlin@dberlin.org>
-
- * Makefile.in (OBJS): Add alloc-pool.o
- (alloc-pool.o): New object.
-
- * alloc-pool.c: New file.
- * alloc-pool.h: New file.
-
-2002-12-18 Loren James Rittle <ljrittle@acm.org>
-
- * gcc.c (validate_switches): Robustify against skipping past '\0'.
-
-2002-12-18 Geoffrey Keating <geoffk@apple.com>
-
- * config.gcc: Set extra_objs in the generic Darwin rule,
- not in the machine-specific rules.
-
-2002-12-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog: Follow spelling conventions.
- * ChangeLog.2: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.5: Likewise.
- * cppexp.c: Likewise.
- * df.c: Likewise.
- * gcov.c: Likewise.
- * gengtype.c: Likewise.
- * reload1.c: Likewise.
- * sched-rgn.c: Likewise.
- * stmt.c: Likewise.
- * stor-layout.c: Likewise.
- * timevar.c: Likewise.
- * toplev.c: Likewise.
- * tree.h: Likewise.
- * varasm.c: Likewise.
- * config/fr30/fr30.md: Likewise.
- * config/i386/i386.c: Likewise.
- * config/ia64/ia64.c: Likewise.
- * config/pa/pa.c: Likewise.
-
-2002-12-18 Roger Sayle <roger@eyesopen.com>
-
- * basic-block.h (flow_bb_inside_loop_p): Correct prototype.
-
-2002-12-18 Aldy Hernandez <aldyh@redhat.com>
-
- PR 8551
- * config/rs6000/altivec.h (vec_cmplt macro): Reverse arguments in
- macro.
- (vec_cmplt C++ functions): Reverse arguments.
-
-2002-12-18 Geoffrey Keating <geoffk@apple.com>
-
- * config/rs6000/t-rs6000: Move contents to t-fprules,
- add rules for dependencies of rs6000.o and to build rs6000-c.o
- * config/rs6000/t-fprules: New file from t-rs6000.
- * config/rs6000/t-beos: Remove soft-fp rules.
- * config/rs6000/t-ppccomm: Likewise.
- * config/rs6000/t-newas: Likewise.
- * config/rs6000/t-rs6000-c-rule: Delete.
- * config.gcc: Use t-fprules for rs6000/ ports when appropriate.
- Use t-rs6000 for all rs6000/ ports instead of t-rs6000-c-rule.
- Create generic Darwin rules.
-
- * gengenrtl.c (gencode): Delete unnecessary rtl_obstack declaration.
-
-2002-12-18 Doug Evans <dje@sebabeach.org>
-
- * m32r/m32r.c (addr24_operand): Fix arg to CONSTANT_POOL_ADDRESS_P
- and LIT_NAME_P.
- (move_src_operand): Remove compile-time warning.
- * m32r/m32r.h (ROUND_ADVANCE_ARG): Ditto.
-
-2002-12-18 Jason Merrill <jason@redhat.com>
-
- * unwind-dw2-fde.c (frame_downheap): Split out from...
- (frame_heapsort): Here.
-
-2002-12-17 Jason Merrill <jason@redhat.com>
-
- * tree.c (make_node): Don't set TREE_TYPE on 's' class nodes.
- (build1): Always set TREE_SIDE_EFFECTS on 's' class nodes.
-
- * gcc.c (do_spec_1) ['W']: End any pending argument from the braces.
-
- * calls.c (expand_call): Don't try to be clever about expanding
- the return slot address.
-
-2002-12-18 Kaz kojima <kkojima@gcc.gnu.org>
-
- * config/sh/linux.h (NO_IMPLICIT_EXTERN_C, CPLUSPLUS_CPP_SPEC):
- Define.
-
-2002-12-17 Jason Merrill <jason@redhat.com>
-
- * genmultilib: Use 'cd ./foo'.
-
-2002-12-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * doc/c-tree.texi: Restore deliberate spelling mistakes.
-
-2002-12-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * doc/c-tree.texi: Fix typos and follow spelling conventions.
- * doc/cpp.texi: Likewise.
- * doc/extend.texi: Likewise.
- * doc/gty.texi: Likewise.
- * doc/install.texi: Likewise.
- * doc/invoke.texi: Likewise.
- * doc/md.texi: Likewise.
- * doc/passes.texi: Likewise.
- * doc/rtl.texi: Likewise.
- * doc/sourcebuild.texi: Likewise.
- * doc/tm.texi: Likewise.
-
-2002-12-17 Jerry Quinn <jlquinn@optonline.net>
-
- * doc/invoke.texi: Minor spelling and grammar fixes.
-
-2002-12-17 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_output_constant_pool): Replace
- ASM_OUTPUT_INTERNAL_LABEL by (*targetm.asm_out.internal_label).
-
-Tue Dec 17 09:47:57 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * convert.c (convert_to_real): Disable function transformation for
- now.
-
-2002-12-16 Geoffrey Keating <geoffk@apple.com>
-
- * gcc.c (handle_braces): Allow '@' as a switch name.
-
-2002-12-16 Jason Merrill <jason@redhat.com>
-
- * calls.c (expand_call): Handle CALL_EXPR_HAS_RETURN_SLOT_ADDR
- with special struct-return ABIs.
-
- * c-semantics.c (add_scope_stmt): Abort if the end SCOPE_STMT
- doesn't match the begin SCOPE_STMT in partialness.
-
-2002-12-16 Geoffrey Keating <geoffk@apple.com>
-
- * genmultilib: Create temporary files in unique subdirectory.
-
- * gcc.c (validate_switches): Allow '@' as a switch name.
-
-2002-12-16 Loren J. Rittle <ljrittle@acm.org>
-
- * Makefile.in (gcov-iov.h): Improve portability.
-
-Mon Dec 16 23:39:19 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * mips.h (ASM_OUTPUT_ADDR_DIFF_ELT): Do not use qpword on API_N32/not
- gas
- * mips.md (tablejump insn): Likewise.
-
-2002-12-16 Mark Mitchell <mark@codesourcery.com>
-
- * doc/include/gcc-common.texi: Change version number to 3.4.
-
-2002-12-16 Bruce Korb <bkorb@gnu.org>
-
- * fixinc/fixlib.h: add: #include <signal.h>
- * fixinc/fixincl.c: remove: #include <signal.h>
-
-Mon Dec 16 17:20:04 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (EXTRA_CONSTRAINT_Z): New macro.
- (EXTRA_CONSTRAINT): Use it.
- * sh.md (anddi3): Use 'Z' constraint for alternative 2.
-
-2002-12-15 Zack Weinberg <zack@codesourcery.com>
-
- * config.gcc (need_64bit_hwint): New variable.
- (alpha*-*-*, x86_64-*-*, ia64-*-*, mips*-*-*, powerpc*-*-*,
- mmix-knuth-mmixware, rs6000*-*-*, sparc64*-*-*, s390*-*-*,
- sh*-*-*, hppa*64*-*-linux, parisc*64*-*-linux, hppa*64*-*-hpux11*,
- sparcv9-*-solaris2*, sparc*-*-solaris2.[789], ultrasparc-*-freebsd*):
- Set it.
- (powerpc*-*-darwin*): Unset it.
- (alpha-*-interix, alpha64-dec-*vms*, i?86-*-interix3*,
- i?86-*-interix*, sparc64-*-openbsd*): Remove references to
- deleted/nonexistent xm-*.h headers.
- * configure.in: AC_DEFINE NEED_64BIT_HOST_WIDE_INT if the
- target set need_64bit_hwint in config.gcc.
- * configure, config.in: Regenerate.
-
- * hwint.h: Overhaul. Don't bother trying int for
- HOST_WIDE_INT. Do try __int64 if long is not enough. Base
- decision to force 64-bit HOST_WIDE_INT on
- NEED_64BIT_HOST_WIDE_INT, not (MAX_)LONG_TYPE_SIZE which is
- not visible at this point. Don't allow prior definition of
- any macro defined by this file.
-
- * config/alpha/xm-vms.h: Don't define HOST_WIDE_INT or
- HOST_BITS_PER_WIDE_INT.
- * config/c4x/c4x.h: Adjust redefinition of
- HOST_WIDE_INT_PRINT_HEX to match changes to hwint.h.
- * config/alpha/xm-alpha-interix.h, config/alpha/xm-vms64.h,
- config/i386/xm-i386-interix.h: Delete file.
-
-2002-12-14 Rodney Brown <rbrown64@csc.com.au>
- John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (output_millicode_call): Convert ASM_OUTPUT_INTERNAL_LABEL.
- * pa64-hpux.h (ASM_OUTPUT_INTERNAL_LABEL): Delete define.
-
-2002-12-14 Zack Weinberg <zack@codesourcery.com>
-
- * mkconfig.sh: Correct comment. Add copyright boilerplate.
-
-2002-12-14 Zack Weinberg <zack@codesourcery.com>
-
- * config/t-darwin, config/arm/t-pe, config/arm/t-strongarm-pe,
- config/c4x/t-c4x, config/i370/t-i370, config/i386/t-cygwin,
- config/i386/t-interix, config/i960/t-960bare, config/ia64/t-ia64,
- config/rs6000/t-rs6000-c-rule, config/sparc/t-sol2,
- config/v850/t-v850: Correct dependencies and normalize
- compilation commands for files that include coretypes.h and tm.h.
-
- * config/sparc/gmon-sol2.c: Include tconfig.h and tsystem.h,
- not config.h and system.h.
-
-Sat Dec 14 20:43:41 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (flags_reg_operand): New function.
- * i386.h (PREDICATE_CODES): Add flags_reg_operand.
- * i386.md (cmov splitter, movqicc): Use new predicate.
-
-Sat Dec 14 17:03:17 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (movqicc splitter): Fix template.
-
-2002-12-13 Jason Merrill <jason@redhat.com>
-
- * tree.h (CALL_EXPR_HAS_RETURN_SLOT_ADDR): New macro.
- * calls.c (expand_call): Handle it.
- * tree-inline.c (struct inline_data): Remove target_exprs field.
- (optimize_inline_calls): Don't initialize it.
- (expand_call_inline): Don't modify it. Handle
- CALL_EXPR_HAS_RETURN_SLOT_ADDR.
- (declare_return_variable): Take return slot addr.
- * langhooks.h (copy_res_decl_for_inlining): Change target_exprs parm
- to return_slot_addr.
- * langhooks-def.h, langhooks.c: Adjust.
- * explow.c (maybe_set_unchanging): Don't set RTX_UNCHANGING_P for
- a decl with no DECL_INITIAL.
-
- * expr.c (expand_expr): Don't discard the target of a call which
- returns in memory.
-
-2002-12-13 Neil Booth <neil@daikokuya.co.uk>
-
- * cppinit.c (path_include): Take an environment variable name.
- Tidy up.
- (init_standard_includes): Simplify environment handling, and
- move to ...
- (cpp_read_main_file): ...here as -nostdinc should not affect
- environment variable paths.
-
-2002-12-13 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (output_millicode_call): Correct typo.
- (output_call): Likewise.
-
-Fri Dec 13 21:07:18 2002 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mn10300/mn10300.c (print_operand) <case N>: Check
- operand's range. Print value directly, without aid from
- output_address.
- <case U>: New.
- <case S>: Make sure argument to fprintf has the right type.
- * config/mn10300/mn10300.h (OK_FOR_T): New macro.
- (EXTRA_CONSTRAINT): Adjust.
- * config/mn10300/mn10300.md: Add new all-QImode pattern for
- bclr. Use %U for immediate operands of bset and bclr.
- (iorqi3): New expand, with insns for AM33 and mn10300.
-
-Fri Dec 13 16:02:27 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (sh_register_operand): New function.
- (prepare_move_operands): Use it.
- * sh.h (PREDICATE_CODES): Add entry for sh_register_operand.
- * sh.md (movsi_media, movsi_media_nofpu): Allow stores of 0.
- (movqi_media, movhi_media, movdi_media, movdi_media_nofpu): Likewise.
- (movdf_media, movdf_media_nofpu, movv4sf_i, movsf_media): Likewise.
- (movsf_media_nofpu, movv2hi_i, movv4hi_i, movv8qi_i): Likewise.
- (movv2si_i): Likewise.
-
-2002-12-13 Jim Wilson <wilson@redhat.com>
-
- * doc/extend.texi (Complex Numbers): Update info on debug info.
-
-2002-12-13 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (addhi3_h8300): Remove the last
- alternative.
-
-2002-12-12 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * hooks.h (hook_tree_tree_bool_false): Declare
- hook_bool_tree_tree_false instead.
-
-2002-12-12 Devang Patel <dpatel@apple.com>
-
- * doc/invoke.texi: Document Darwin linker options, -bundle
- -bind_at_load, -all_load and -arch_errors_fatal
-
-2002-12-12 Jim Wilson <wilson@redhat.com>
-
- * dbxout.c (dbxout_fptype_value): New.
- (dbxout_type, case COMPLEX_TYPE): Call it. Use 'R' instead of 'r'.
-
-2002-12-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * c-decl.c: Fix a comment typo.
- * cfg.c: Likewise.
- * cfgcleanup.c: Likewise.
- * cfglayout.c: Likewise.
- * cfgrtl.c: Likewise.
- * c-typeck.c: Likewise.
- * dominance.c: Likewise.
- * dwarf2asm.c: Likewise.
- * dwarfout.c: Likewise.
- * expmed.c: Likewise.
- * expr.c: Likewise.
- * final.c: Likewise.
- * flow.c: Likewise.
- * function.c: Likewise.
- * gcc.c: Likewise.
- * genautomata.c: Likewise.
- * integrate.c: Likewise.
- * loop.c: Likewise.
- * loop.h: Likewise.
- * output.h: Likewise.
- * profile.c: Likewise.
- * ra.h: Likewise.
- * reload1.c: Likewise.
- * reload.c: Likewise.
- * sched-rgn.c: Likewise.
- * stmt.c: Likewise.
- * tree.h: Likewise.
- * vmsdbgout.c: Likewise.
-
-2002-12-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Add a new peephole2.
-
-2002-12-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (a peephole2): Accept a constant
- that's accepted by CONST_OK_FOR_J.
-
-2002-12-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (CONST_OK_FOR_J): New.
- (CONST_OK_FOR_LETTER_P): Use CONST_OK_FOR_J.
- * config/h8300/h8300.md (*addhi_h8300): Add a new alternative.
- (*addhi_h8300hs): Likewise.
-
-Thu Dec 12 16:24:59 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (reg_class_from_letter): No longer const. Add 'e' entry.
- (sh_register_move_cost): Add clause for SImode fp-fp moves.
- Increase cost for moves involving multiple general purpose registers.
- * sh.h (OVERRIDE_OPTIONS): Set reg_class_from_letter['e'] according to
- TARGET_FMOVD.
- (HARD_REGNO_MODE_OK): Allow V2SFmode and V4SFmode in general purpose
- registers, and SImode in fp registers, for ! TARGET_SHMEDIA.
- (enum reg_class reg_class_from_letter): No longer const.
- (SECONDARY_OUTPUT_RELOAD_CLASS): Use REGCLASS_HAS_FP_REG /
- REGCLASS_HAS_GENERAL_REG.
- Handle SImode moves from/to fp registers.
- ! TARGET_SHMEDIA && TARGET_FMOVD.
- (SECONDARY_INPUT_RELOAD_CLASS): Use REGCLASS_HAS_FP_REG.
- * sh.md (movsi_ie): Add alternatives to move from / to fp regisyters.
-
-2002-12-12 Andreas Schwab <schwab@suse.de>
-
- * config/ia64/ia64.c (ia64_hpux_asm_file_end): Fix typo in last
- change and some warnings.
-
-2002-12-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * doc/md.texi (pushm): Fix a typo.
-
-2002-12-12 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mips/mips.c (mips_output_conditional_branch): Support
- PIC-safe out-of-range branch and branch-likely.
- * config/mips/mips.md (attr length): PIC-safe out-of-range
- branches are longer.
- ("jump"): Support PIC-safe out-of-range-for-branch jumps. Remove
- unused code to support indirect jumps.
-
-2002-12-11 Zack Weinberg <zack@codesourcery.com>
-
- * Makefile.in (GTFILES): Add $(host_xm_file_list) and
- $(tm_file_list).
-
-2002-12-11 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/t-rs6000-c-rule: Add coretypes.h $(TM_H) dependencies.
-
-Wed Dec 11 15:20:45 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (cmove splitters): Avoid creation of unnecesary subregs.
-
-2002-12-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.h (BIGGEST_ALIGNMENT): Change 32-bit value to 64 bits.
- (MAX_PARM_BOUNDARY, STACK_BOUNDARY): Express in terms of
- BIGGEST_ALIGNMENT.
- (PREFERRED_STACK_BOUNDARY): Express in terms of STACK_BOUNDARY.
- (FUNCTION_BOUNDARY): Express in terms of BITS_PER_WORD.
-
-2002-12-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * doc/invoke.texi: Correct dump file names.
-
-2002-12-09 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/ia64.c (ia64_hpux_asm_file_end): Don't send stripped
- name to globalize_label or assemble_name.
-
-Wed Dec 11 20:15:19 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (REG_CLASS_HAS_GENERAL_REG): Only true for SIBCALL_REGS
- if not TARGET_SHMEDIA.
-
-Wed Dec 11 19:05:05 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (REG_CLASS_HAS_FP_REG): New.
- (REGISTER_MOVE_COST) Use it. Put body into a function and
- move it into:
- * sh.c (sh_register_move_cost).
- * sh-protos.h (sh_register_move_cost): Declare.
-
- * sh.c (sh_expand_builtin): Abort for unexpected nop values.
- (sh_adjust_cost): Always return a value.
-
-Wed Dec 11 18:39:52 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (REG_CLASS_HAS_GENERAL_REG): New.
- (REGISTER_MOVE_COST): Use it.
-
-2002-12-11 Richard Henderson <rth@redhat.com>
-
- * tree.h (MODULE_LOCAL_P): Kill.
- * varasm.c (default_binds_local_p_1): Use decl_visibility instead.
-
-2002-12-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (two define_peephole2): New.
-
-2002-12-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (CONST_OK_FOR_J): Remove.
- (CONST_OK_FOR_K): Likewise.
- (CONST_OK_FOR_M): Likewise.
- (CONST_OK_FOR_LETTER_P): Do not use the above macros.
-
-2002-12-11 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (builtin_define_type_max): Handle unsigned
- types too.
-
-2002-12-10 David Edelsohn <edelsohn@gnu.org>
-
- * haifa-sched.c (rank_for_schedule): Correct style.
-
-2002-12-10 Per Bothner <pbothner@apple.com>
-
- * cpplib.h (struct cpp_hashnode): Split a non-portably-signed field
- directive_index into an unsigned field and a new is_directive field.
- * cppinit.c (mark_named_operators): Update to set new fields.
- * cpplex.c (_cpp_lex_direct): Now directive_field is unsigned.
- * cpplib.c [_cpp_handle_directive]: Test is_directive field.
- No longer need to subtract 1 from directive_index.
- (_cpp_init_directives): No longer need to add 1 to directive_index.
- * cpptrad.c (scan_out_logical_line): Use is_directive field.
-
-2002-12-10 Roger Sayle <roger@eyesopen.com>
-
- * builtins.c (fold_builtin): Remove -funsafe-math-optimizations
- check for evaluating sqrt of a constant at compile time.
- * simplify-rtx.c (simplify_unary_operation): Likewise.
-
-2002-12-10 Janis Johnson <janis187@us.ibm.com>
-
- PR other/8882
- * doc/tm.texi (PUSH_ARGS): Remove misplaced line.
-
-2002-12-10 Devang Patel <dpatel@appple.com>
-
- * config/darwin.h(LINK_SPEC): Add darwin specific linker options.
- * doc/invoke.texi: Add new "Darwin Options" section.
-
-2002-12-10 Jim Wilson <wilson@redhat.com>
-
- * rs6000.h (RETURN_IN_MEMORY): If ABI_V4, then TFmode is returned in
- memory.
-
-2002-12-10 Andrew Haley <aph@redhat.com>
-
- * cse.c (cse_insn): Don't cse past a basic block boundary.
-
-2002-12-10 Jakub Jelinek <jakub@redhat.com>
-
- * config/linux.h (LIB_SPEC): If -pthread, add -lpthread even if
- -shared.
- * config/alpha/linux-elf.h (LIB_SPEC): Likewise.
- * config/alpha/linux.h (LIB_SPEC): Likewise.
- * config/arm/linux-elf.h (LIB_SPEC): Likewise.
- * config/pa/pa-linux.h (LIB_SPEC): Likewise.
- * config/sparc/linux.h (LIB_SPEC): Likewise.
- * config/sparc/linux64.h (LIB_SPEC): Likewise.
-
-2002-12-09 Larin Hennessy <larin@science.oregonstate.edu>
-
- * doc/invoke.texi: Document UltraSparc III option.
-
-2002-12-09 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.h (TARGET_CPU_CPP_BUILTINS): Define
- __tune_pentium2__ and __tune_pentium3__ as necessary.
-
-2002-12-09 Richard Henderson <rth@redhat.com>
-
- * target.h (gcc_target): Add cannot_force_const_mem.
- * target-def.h (TARGET_CANNOT_FORCE_CONST_MEM): New.
- (TARGET_INITIALIZER): Add it.
- * varasm.c (force_const_mem): Fail if cannot_force_const_mem.
- * expr.c (emit_move_insn): Be prepared for force_const_mem to fail.
- * reload1.c (reload): Likewise.
- * hooks.c (hook_bool_rtx_false): New.
- * hooks.h: Declare it.
-
- * config/i386/i386.c (ix86_cannot_force_const_mem): New.
- (TARGET_CANNOT_FORCE_CONST_MEM): New.
- (ix86_expand_move): Remove de-const-pooling hack.
-
-Mon Dec 9 21:33:38 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * toplev.c (dump_file): Fix order to match reality.
-
-2002-12-08 Geoffrey Keating <geoffk@apple.com>
-
- * config/rs6000/rs6000.md (load_multiple): Use adjust_address_nv.
- (store_multiple): Likewise.
-
-2002-12-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa/fptr.c (__canonicalize_funcptr_for_compare): Don't canonicalize
- function pointers in page 0.
-
-2002-12-09 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (TARGET_STRUCT_ARG_REG_LITTLE_ENDIAN): Remove
- definition
- (MEMBER_TYPE_FORCES_BLK): Move.
- * config/ia64/ia64.c (ia64_function_arg): Use PARALLEL to pass
- aggregate arguments.
- (ia64_function_value): Use PARALLEL to return aggregate values.
-
-2002-12-09 Steve Ellcey <sje@cup.hp.com>
-
- * doc/tm.texi (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.
- * defaults.h (FUNCTION_ARG_REG_LITTLE_ENDIAN): Remove definition.
- * calls.c (store_unaligned_arguments_into_pseudos) Remove
- FUNCTION_ARG_REG_LITTLE_ENDIAN.
- * stmt.c (expand_return): Ditto.
- * expr.c (move_block_from_reg): Ditto.
- (copy_blkmode_from_reg): Ditto.
- * expmed.c (store_bit_field): Ditto.
-
-2002-12-09 Svein E. Seldal <Svein.Seldal@solidas.com>
-
- * config.gcc: Added tic4x-* target as an alias to c4x-*
-
-Sun Dec 8 14:57:39 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Use force_operand instead of
- constructing insn directly.
-
-2002-12-06 Per Bothner <pbothner@apple.com>
-
- * cpplib.h (struct cpp_hashnode): Change field directive_index from
- char to an int bit-field, for hosts where char is unsigned.
-
-2002-12-07 Roger Sayle <roger@eyesopen.com>
- Richard Henderson <rth@redhat.com>
-
- * real.c (ieee_extended_motorola_format,
- ieee_extended_intel_96_format, ieee_extended_intel_128_format,
- ieee_quad_format, vax_d_format, vax_g_format, i370_double_format):
- Provide appropriate values for new signbit field.
-
-2002-12-07 Roger Sayle <roger@eyesopen.com>
-
- * real.h (real_format): Add signbit field.
- * real.c (ieee_single_format, ieee_double_format,
- ieee_extended_motorola_format, ieee_extended_intel_96_format,
- ieee_extended_intel_128_format, ibm_extended_format,
- ieee_quad_format, vax_f_format, vax_d_format,
- vax_g_format, i370_single_format, i370_double_format,
- c4x_single_format, c4x_extended_format, real_internal_format):
- Provide suitable signbit value, or -1 to avoid bit twiddling.
-
- * optabs.c (expand_unop): Try implementing negation of
- floating point modes by flipping the sign bit.
- (expand_abs): Try implementing abs of floating point modes
- by clearing the sign bit.
-
-Sat Dec 7 22:29:47 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Use force_operand instead
- of constructing insn directly.
-
-2002-12-07 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*iorhi_shift_8): New.
-
-2002-12-06 Bernd Schmidt <bernds@redhat.com>
-
- * doc/invoke.texi: Document FRV port options.
- * doc/md.texi: Document FRV register classes.
-
-2002-12-07 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/install.texi (Configuration): Improve description of cases
- where `make distclean` may fail; clarify --with-gnu-as; fix grammar.
-
-2002-12-06 Per Bothner <pbothner@apple.com>
-
- * cpplib.h (NODE_MACRO_ARG): New flag.
- (struct cpp_hashnode): Give _cpp_hashnode_value tag to value union.
- Remove value.operator field. Move arg_index field to value union.
- (directive_index): Make signed, since also used for C++ operators.
- * cppmacro.c (_cpp_save_parameter): Use NODE_MACRO_ARG flag to
- check for duplicate parameter. Set NODE_MACRO_ARG flag.
- Save node->value, and set node->value.arg_index.
- (_cpp_create_definition): For each paramater, restore node->value.
- (lex_expansion_token): Use NODE_MACRO_ARG flag, and moved arg_index.
- * cpptrad.c (scan_out_logical_line): Likewise.
- (scan_out_logical_line): Check for directive > 0.
- * cpplib.c (cpp_handle_directive): Likewise.
- * cpplex.c (_cpp_lex_direct): Update as value.operator is replaced
- by negative of directive_index.
- * cppinit.c (mark_named_operators): Likewise.
-
- * hashtable.h (struct ht_identifier): Swap fields, for better packing.
-
-2002-12-06 Dhananjay Deshpande <dhananjayd@kpit.com>
-
- * gcc/config/sh/sh.c (calc_live_regs): Save fpscr only if target has
- FPU.
- (push): Generate push_fpscr.
- (pop): Generate pop_fpscr.
- * gcc/config/sh/sh.md : Add define_expand "push_fpscr", "pop_fpscr".
- (fpu_switch): Add alternative to push fpscr. Enable for TARGET_SH3E.
-
-Fri Dec 6 19:36:24 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (dump_table): DImode pool constants need only 32 bit alignment.
- DFmode alignment depends on TARGET_FMOVD && TARGET_ALIGN_DOUBLE.
-
-Fri Dec 6 19:17:49 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (movdi_i): Name. Remove inappropriate comment.
-
-Fri Dec 6 15:44:46 2002 J"orn Rennecke <joern.rennecke@superh.com>
- Merged from basic improvements branch (excerpt):
-
- 2002-11-19 Kaz Kojima <kkojima@gcc.gnu.org>
- * config/sh/sh.h (SH_DBX_REGISTER_NUMBER): Handle PR_MEDIA_REG.
-
-2002-12-06 Jakub Jelinek <jakub@redhat.com>
-
- * expr.c (expand_expr) <case COND_EXPR>: Never modify exp in place.
-
-Thu Dec 5 16:58:25 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (dimode peep2s): Re-add "&& 1".
-
-Thu Dec 5 14:10:15 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_prologue): Add comment, do not use
- fast prologues for cold and normal functions.
-
-Thu Dec 5 00:52:37 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_rep_movl_optimal): New variable.
- (ix86_expand_movstr, ix86_expand_clrstr): Use TARGET_REP_MOVL_OPTIMAL
- * i386.h (TARGET_REP_MOVL_OPTIMAL): New macro.
-
- * i386.md (negsf2_ifs, negdf2_ifs, negdf2_ifs_rex64, abssf2_ifs,
- absdf2_ifs, absdf2_ifs_rex64): Fix constraints.
- neg?f2_ifs, abs?f2_ifs splitters): Refuse memory operand; do not
- generate unnecesary subregs.
-
-2002-12-05 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa32-linux.h (CANONICALIZE_FUNCPTR_FOR_COMPARE_LIBCALL): Move define.
- * pa.h (CANONICALIZE_FUNCPTR_FOR_COMPARE_LIBCALL): To here.
-
-2002-12-05 Dale Johannesen <dalej@apple.com>
-
- * tree.c (unsafe_for_reeval): Consider callee child of CALL_EXPR.
-
-2002-12-05 Danny Smith <dannysmith@users.sourceforge.net>
-
- * config/i386/cygwin.h (SUBTARGET_PROLOGUE): Replace with
- PROFILE_HOOK.
- * config/i386/mingw32.h (SUBTARGET_PROLOGUE): Don't undef.
-
-2002-12-05 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/spe.h (__ev_mwlufi): Remove.
- (__ev_mwlufia): Remove.
- (__ev_mwlumfaaw): Remove.
- (__ev_mwlusfaaw): Remove.
- (__ev_mwlumfanw): Remove.
- (__ev_mwlusfanw): Remove.
-
-2002-12-05 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*andorsi3_shift_8): New.
-
-2002-12-05 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (shift_alg_si): Optimize ashift:HI and
- lshiftrt:SI by 28, 29, and 30 bits when !TARGET_H8300.
- (get_shift_alg): Return optimal assembly instructions for the
- shifts mentioned above.
-
-Wed Dec 4 11:53:07 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Force operand into register for QImode
- condtiional moves.
-
-2002-12-04 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_init_once): Do not use loop to
- implement ashiftrt:HI by 13 bits on H8S.
-
-2002-12-04 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa/fptr.c (__canonicalize_funcptr_for_compare): New file and function.
- * pa.md (canonicalize_funcptr_for_compare): Output library call to
- canonicalize_funcptr_for_compare_libfunc on TARGET_ELF32.
- * pa32-linux.h (CANONICALIZE_FUNCPTR_FOR_COMPARE_LIBCALL,
- CTOR_LIST_BEGIN): New defines.
- * pa/t-linux (LIB2FUNCS_EXTRA): New define.
- (fptr.c): Add make rules.
-
-2002-12-04 Geoffrey Keating <geoffk@apple.com>
-
- * combine.c (combine_simplify_rtx): Add new canonicalizations.
- * doc/md.texi (Insn Canonicalizations): Document new
- canonicalizations for multiply/add combinations.
- * config/rs6000/rs6000.md: Add and modify floating add/multiply
- patterns to ensure they're used whenever they can be.
-
-2002-12-04 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c: Update the comments related to shifts.
-
-2002-12-04 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/mips.md (get_fnaddr): Correct length attribute.
-
-2002-12-04 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*extzv_8_8): New.
- (*extzv_8_16): Likewise.
-
-2002-12-04 Jason Merrill <jason@redhat.com>
-
- PR c++/8461, c++/8625
- * integrate.c (copy_decl_for_inlining): Handle explicit invisible
- references.
- * tree-inline.c (initialize_inlined_parameters): Likewise.
-
- * tree.c (variably_modified_type_p): Just return an error_mark_node.
-
-2002-12-04 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/mips.md (get_fnaddr): Avoid placing an "la"
- macro instruction in a branch delay slot, to avoid assembler
- warnings.
-
-2002-12-04 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR c/7622
- * c-semantics (genrtl_scope_stmt): Do not output inlined
- nested functions that contain no code.
-
-Wed Dec 4 15:20:54 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * cfgrtl.c (force_nonfallthru_and_redirect): Allow abnormal edge
- to be forced into nonfallthru.
-
-2002-12-03 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/t-netbsd (USER_H): Set to $(EXTRA_HEADERS).
-
-2002-12-03 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/spe.md (*movv1di_const0): New pattern.
-
-2002-12-03 Richard Henderson <rth@redhat.com>
-
- * libgcc-std.ver: Inherit GCC_3.3 from GCC_3.0.
-
-2002-12-03 Hans-Peter Nilsson <hp@bitrange.com>
-
- * bitmap.c (bitmap_ior_and_compl, bitmap_union_of_diff):
- Initialize tmp.using_obstack to 0.
-
-2002-12-03 Andreas Schwab <schwab@suse.de>
-
- * config/m68k/m68k.h (EH_RETURN_DATA_REGNO): Define.
- (EH_RETURN_STACKADJ_RTX): Define.
- (EH_RETURN_HANDLER_RTX): Define.
- (ASM_PREFERRED_EH_DATA_FORMAT): Define.
- * config/m68k/m68k.c (m68k_save_reg): New function. Handle eh
- registers and don't save fixed registers.
- (m68k_output_function_prologue): Use it.
- (use_return_insn): Likewise.
- (m68k_output_function_epilogue): Likewise.
-
-2002-12-03 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (single_one_operand): Fix a warning.
- (single_zero_operand): Likewise.
-
-2002-12-02 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * Makefile.in configure configure.in dummy-conditions.c fix-header.c
- gcov-iov.c gen-protos.c genattr.c genattrtab.c genautomata.c
- gencheck.c gencodes.c genconditions.c genconfig.c genconstants.c
- genemit.c genextract.c genflags.c gengenrtl.c gengtype-lex.l
- gengtype-yacc.y gengtype.c genopinit.c genoutput.c genpeep.c
- genpreds.c genrecog.c gensupport.c mkconfig.sh read-rtl.c
- scan-decls.c scan.c config/sh/sh.h doc/configfiles.texi
- doc/install-old.texi: Replace hconfig.h with bconfig.h.
- * Makefile.in: Replace HCONFIG_H with BCONFIG_H.
-
-2002-12-02 Andrew Pinski <pinskia@physics.uc.edu>
-
- * config/rs6000/rs6000.md (ffssi): Convert to expander.
- (ffsdi): Likewise.
- (cntlzw2, cntlzd2): New patterns.
-
-2002-12-02 H.J. Lu <hjl@gnu.org>
-
- * config.gcc (mips*-*-netbsd*): Remove mips/t-netbsd.
- (mips*-*-linux*): Remove mips/t-linux.
-
-Mon Dec 2 19:26:30 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Avoid overflow.
-
-2002-12-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (dosize): Replace argument op with
- sign.
- (h8300_output_function_prologue): Update the call to dosize.
- (h8300_output_function_epilogue): Likewise.
-
-2002-12-02 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/xtensa.h: Delete ifndefs with nothing inside them.
-
-2002-12-02 Craig Rodrigues <rodrigc@gcc.gnu.org>
-
- * configure.in: Use "missing" script to generate warning if
- flex or bison programs not found, instead of invoking "false".
- * configure: Rebuilt.
-
-Mon Dec 2 20:28:48 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * unroll.c (copy_loop_body): Copy CONST_OR_PURE_CALL_P.
-
-Mon Dec 2 19:42:52 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Avoid overflow.
-
-2002-12-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (dosize): Output r7/er7 instead of sp.
- (push): Likewise.
- (pop): Likewise.
- (h8300_output_function_prologue): Likewise.
- (h8300_output_function_epilogue): Likewise.
-
-Mon Dec 2 14:43:22 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * expmed.c (store_bit_field): Use int_mode_for_mode to find
- corresponding mode of non-integer mode, unless it is VOIDmode.
-
-2002-12-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (stm_h8300s_2): New.
- (stm_h8300s_3): Likewise.
- (stm_h8300s_4): Likewise.
- (five define_peephole2): Likewise.
-
-2002-12-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * ra-build.c: Fix a comment typo.
-
-Sun Dec 1 16:50:47 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): fix
- reversed BRANCH_COST test; be curefull about infinite recursion.
-
-2002-12-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_output_function_prologue):
- Remove variable idx.
- (h8300_output_function_epilogue): Likewise.
-
-2002-12-01 Zack Weinberg <zack@codesourcery.com>
-
- * config/frv/xm-frv.h: Delete, unnecessary.
-
-2002-12-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Add comments for define_peephole2.
-
-2002-12-01 Mark Mitchell <mark@codesourcery.com>
-
- * builtin-types.def (BT_SIZE): Use size_type_node.
- * builtins.c (fold_builtin): Make the builtin strlen returns a
- size_t, not a sizetype.
- * c-common.c (c_sizeof_or_alignof_type): Use size_type_node, not
- c_size_type_node.
- (c_alignof_expr): Likewise.
- (c_common_nodes_and_builtins): Likewise.
- * c-common.h (CTI_C_SIZE_TYPE): Remove.
- (c_size_type_node): Likewise.
- * c-format.c (T_ST): Use size_type_node, not c_size_type_node.
- * tree.h (TI_SIZE_TYPE): New enumeral.
- (size_type_node): Likewise.
-
-2002-11-30 Zack Weinberg <zack@codesourcery.com>
-
- * configure.in: Don't put ${tm_file} into host_xm_file,
- build_xm_file, or xm_file. Do put tm-preds.h into tm_p_file.
- Take location of tm-preds.h into account when calculating
- tm_p_file_list.
- * configure: Regenerate.
- * mkconfig.sh: No need for separate TM_DEFINES and XM_DEFINES
- arguments. Do not provide rtx, rtvec, tree, or GTY here.
- Remove special case code for tm_p.h and *config.h; add new
- special case code for tm.h and tconfig.h. Clean up a bit.
-
- * Makefile.in (tm_file, tm_file_list): New variables set from
- @-substitutions.
- (GCONFIG_H): Deleted.
- (GTM_H, TM_H): New.
- (CONFIG_H): Is now just config.h $(host_xm_file_list).
- (TM_P_H): Move up with the other mkconfig.sh-generated
- headers; don't mention tm-preds.h explicitly.
- (tm.h, cs-tm.h): New rule.
- (cs-config.h, cs-hconfig.h, cs-tconfig.h, cs-tm_p.h): Adjust
- invocations of mkconfig.sh for changes to that program.
- (mostlyclean): Delete print-rtl1.c.
- (clean): Delete tm.h.
- Update dependencies for the files listed below.
-
- * mklibgcc.in: Add 'coretypes.h $(TM_H)' to libgcc2_c_dep.
-
- * coretypes.h: New file.
- * system.h: #define malloc to xmalloc and realloc to xrealloc
- when FLEX_SCANNER or YYBISON is defined, independent of the
- value of GCC_VERSION.
- * alias.c, attribs.c, bb-reorder.c, bitmap.c, builtins.c,
- c-aux-info.c, c-common.c, c-convert.c, c-decl.c, c-dump.c,
- c-errors.c, c-format.c, c-lang.c, c-lex.c, c-objc-common.c,
- c-opts.c, c-parse.in, c-pragma.c, c-pretty-print.c,
- c-semantics.c, c-typeck.c, caller-save.c, calls.c, cfg.c,
- cfganal.c, cfgbuild.c, cfgcleanup.c, cfglayout.c, cfgloop.c,
- cfgrtl.c, collect2.c, combine.c, conflict.c, convert.c,
- cppdefault.c, cpperror.c, cppexp.c, cppfiles.c, cpphash.c,
- cppinit.c, cpplex.c, cpplib.c, cppmacro.c, cppmain.c,
- cppspec.c, cpptrad.c, crtstuff.c, cse.c, cselib.c, dbxout.c,
- debug.c, df.c, diagnostic.c, doloop.c, dominance.c,
- dummy-conditions.c, dwarf2asm.c, dwarf2out.c, dwarfout.c,
- emit-rtl.c, errors.c, et-forest.c, except.c, explow.c,
- expmed.c, expr.c, final.c, fix-header.c, flow.c, fold-const.c,
- function.c, gcc.c, gccspec.c, gcov-dump.c, gcov-iov.c, gcov.c,
- gcse.c, gen-protos.c, genattr.c, genattrtab.c, genautomata.c,
- gencheck.c, gencodes.c, genconditions.c, genconfig.c,
- genconstants.c, genemit.c, genextract.c, genflags.c,
- gengenrtl.c, gengtype-lex.l, gengtype-yacc.y, gengtype.c,
- genopinit.c, genoutput.c, genpeep.c, genpreds.c, genrecog.c,
- gensupport.c, ggc-common.c, ggc-none.c, ggc-page.c,
- ggc-simple.c, global.c, graph.c, haifa-sched.c, hashtable.c,
- hooks.c, ifcvt.c, integrate.c, intl.c, jump.c, langhooks.c,
- lcm.c, libgcc2.c, line-map.c, lists.c, local-alloc.c, loop.c,
- main.c, mbchar.c, mips-tdump.c, mips-tfile.c, mkdeps.c,
- optabs.c, params.c, predict.c, prefix.c, print-rtl.c,
- print-tree.c, profile.c, protoize.c, ra-build.c,
- ra-colorize.c, ra-debug.c, ra-rewrite.c, ra.c, read-rtl.c,
- real.c, recog.c, reg-stack.c, regclass.c, regmove.c,
- regrename.c, reload.c, reload1.c, reorg.c, resource.c,
- rtl-error.c, rtl.c, rtlanal.c, sbitmap.c, scan-decls.c,
- scan.c, sched-deps.c, sched-ebb.c, sched-rgn.c, sched-vis.c,
- sdbout.c, sibcall.c, simplify-rtx.c, ssa-ccp.c, ssa-dce.c,
- ssa.c, stmt.c, stor-layout.c, stringpool.c, timevar.c,
- tlink.c, toplev.c, tracer.c, tree-dump.c, tree-inline.c,
- tree.c, unroll.c, varasm.c, varray.c, varray.h, vmsdbgout.c,
- xcoffout.c, config/darwin-c.c, config/darwin.c,
- config/fp-bit.c, config/alpha/alpha.c, config/alpha/vms-cc.c,
- config/alpha/vms-ld.c, config/arc/arc.c, config/arm/arm.c,
- config/arm/pe.c, config/avr/avr.c, config/c4x/c4x-c.c,
- config/c4x/c4x.c, config/cris/cris.c, config/d30v/d30v.c,
- config/dsp16xx/dsp16xx.c, config/fr30/fr30.c,
- config/frv/frv.c, config/h8300/h8300.c, config/i370/i370-c.c,
- config/i370/i370.c, config/i386/i386.c, config/i386/winnt.c,
- config/i960/i960-c.c, config/i960/i960.c,
- config/ia64/ia64-c.c, config/ia64/ia64.c, config/ip2k/ip2k.c,
- config/m32r/m32r.c, config/m68hc11/m68hc11.c,
- config/m68k/m68k.c, config/m88k/m88k.c, config/mcore/mcore.c,
- config/mips/irix6-libc-compat.c, config/mips/mips.c,
- config/mmix/mmix.c, config/mn10200/mn10200.c,
- config/mn10300/mn10300.c, config/ns32k/ns32k.c,
- config/pa/pa.c, config/pdp11/pdp11.c, config/romp/romp.c,
- config/rs6000/rs6000-c.c, config/rs6000/rs6000.c,
- config/s390/s390.c, config/sh/sh.c, config/sparc/gmon-sol2.c,
- config/sparc/sparc.c, config/stormy16/stormy16.c,
- config/v850/v850-c.c, config/v850/v850.c, config/vax/vax.c,
- config/xtensa/xtensa.c, objc/objc-act.c, objc/objc-lang.c:
- Include coretypes.h and tm.h.
-
- * genattrtab.c, genconditions.c, genemit.c, genextract.c,
- gengenrtl.c, gengtype.c, genopinit.c, genoutput.c, genpeep.c,
- genrecog.c: Include coretypes.h and tm.h from the file
- generated by this program.
-
- * unwind-dw2-fde-darwin.c, unwind-dw2-fde-glibc.c,
- unwind-dw2-fde.c, unwind-dw2.c, unwind-sjlj.c: Include
- coretypes.h and tm.h, and tsystem.h when not already included.
- No need to include stddef.h nor stdlib.h.
-
- * fixinc/fixlib.h: Include coretypes.h and tm.h. Do not
- include auto-host.h or ansidecl.h/
- * fixinc/server.h: Do not include stdio.h, unistd.h, or fixlib.h.
- * fixinc/procopen.c: Include server.h after fixlib.h. Do not
- include auto-host.h, ansidecl.h, or system.h.
- * fixinc/server.c: Likewise. Also, do not include signal.h,
- and do not redefine volatile.
-
-Sat Nov 30 17:16:46 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (movdf_integer): Always enable in 64bit.
- (movdf_nointeger): Always disable in 64bit.
-
-2002-11-30 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * cfg.c (dump_flow_info): Use max_reg_num () to determine the largest
- pseudo register number plus 1.
-
-Fri Nov 29 20:10:56 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * expmed.c (store_bit_field): Use int_mode_for_mode to find
- corresponding mode of non-integer mode, unless it is VOIDmode.
-
-2002-11-29 Hans-Peter Nilsson <hp@bitrange.com>
-
- * cpplib.c (_cpp_test_assertion): Default *value to 0.
-
- * cppexp.c (num_part_mul): Initialize result.unsignedp, to 1.
-
-2002-11-29 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/t-crtstuff: New target makefile fragment.
- * config.gcc [s390-*-linux, s390x-*-linux]: Use it.
-
-2002-11-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (movsi_h8300hs): Change the order of
- alternatives to correct the length when the memory operand is
- either pre_dec or post_inc.
-
-2002-11-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (an anonymous pattern): Give an
- internal name *tst_extzv_bitqi_1_n.
- Accept bit_operand instead of bit_memory_operand.
- Do not accept bit tests with the MSB.
- (*tst_extzv_memqi_1_n): New.
-
-Thu Nov 28 23:56:24 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Add copy_rtx to avoid invalid RTX
- sharing when operand is SUBREG.
-
-Thu Nov 28 08:57:26 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * athlon.md (athlon-decodev): New reservation unit.
- (athlon-direct0): New reservation.
- (athlon-vector): New use athlon-decodev.
- (athlon-double, athlon-direct): Better model.
- (athlon_imul_k8): Use athlon-direct0.
- (athlon_movlpd_load): New insn reservation.
-
-2002-11-28 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_eightbit_constant_address_p):
- Fix a comment typo.
- (h8300_tiny_constant_address_p): Likewise.
-
-2002-11-28 Michael Matz <matz@suse.de>
-
- * doc/passes.texi: Mention the other register allocator.
-
-2002-11-28 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (6 new peephole2 patterns): New.
-
-2002-11-28 Jakub Jelinek <jakub@redhat.com>
-
- * config.gcc (x86_64-*-linux*) [tmake_file]: Remove i386/t-crtstuff.
- * config/t-linux (CRTSTUFF_T_CFLAGS_S): Add $(CRTSTUFF_T_CFLAGS).
- * config/i386/t-linux64 (CRTSTUFF_T_CFLAGS): Define.
-
-2002-11-28 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_and_costs): New.
- * config/h8300/h8300.h (RTX_COSTS): Use h8300_and_costs.
- * config/h8300/h8300-protos.h: Add a prototype for
- h8300_and_costs.
-
-Wed Nov 27 20:34:13 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_sse_partial_regs_for_cvtsd2ss): New.
- * i386.h (x86_sse_partial_regs_for_cvtsd2ss): Declare.
- (TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS): New macro.
- * i386.md (truncdfsf patterns and splitters): Use
- TARGET_SSE_PARTIAL_REGS_FOR_CVTSD2SS
-
-2002-11-27 Zack Weinberg <zack@codesourcery.com>
-
- * config/rs6000/rs6000.c (altivec_init_builtins): Make the
- pointer argument in the prototypes of the following builtins
- be (const TYPE *) rather than (TYPE *):
- + __builtin_altivec_ld_internal_4sf
- + __builtin_altivec_ld_internal_4si
- + __builtin_altivec_ld_internal_8hi
- + __builtin_altivec_ld_internal_16qi
- + __builtin_altivec_lvsl
- + __builtin_altivec_lvsr
- + __builtin_altivec_lvebx
- + __builtin_altivec_lvehx
- + __builtin_altivec_lvewx
- + __builtin_altivec_lvxl
- + __builtin_altivec_lvx
- + __builtin_altivec_dst
- + __builtin_altivec_dstt
- + __builtin_altivec_dstst
- + __builtin_altivec_dststt
-
-2002-11-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * except.c (default_exception_section): Move variable into the
- scope where it is used.
-
-2002-11-27 Krister Walfridsson <cato@df.lth.se>
-
- * config.gcc (*-*-netbsd[2-9]*, *-*-netbsdelf[2-9]*): Test for
- correct version.
-
-2002-11-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (OK_FOR_U): Remove extra parentheses.
-
-2002-11-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_shift_costs): New.
- * config/h8300/h8300.h (RTX_COSTS): Use h8300_shift_costs.
- * config/h8300/h8300-protos.h: Add a prototype for
- h8300_shift_costs.
-
-2002-11-27 Jim Wilson <wilson@redhat.com>
-
- * config/rs6000/spe.md (spu_evsplatfi, spu_evsplati): Swap operands
- in output template.
-
-2002-11-27 Casper S. Hornstrup <chorns@users.sourceforge.net>
-
- * config/i386/i386.h (DLL_IMPORT_EXPORT_PREFIX): Define.
- * config/i386/winnt.c (i386_pe_dllexport_name_p): Use
- DLL_IMPORT_EXPORT_PREFIX, not '@'.
- (i386_pe_dllimport_name_p): Likewise.
- (i386_pe_mark_dllexport): Likewise.
- (i386_pe_mark_dllimport): Likewise.
- (i386_pe_encode_section_info): Likewise.
- (i386_pe_strip_name_encoding): Likewise.
-
-2002-11-27 Richard Henderson <rth@redhat.com>
-
- * mkmap-symver.awk (BEGIN): Set sawsymbol false.
- (nm && NF == 3): Set sawsymbol true.
- (END): Exit if no symbols seen.
- (output): Fix map syntax error if no globals for the version.
-
-Wed Nov 27 14:45:46 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * builtins.def (DEF_C99_BUILTIN): Fix.
-
-2002-11-26 Kaz Kojima <kkojima@gcc.gnu.org>
-
- * config/sh/lib1funcs.asm (FUNC, ENDFUNC0, ENDFUNC): New macros.
- (all): Add .size and .type information.
-
-Tue Nov 26 22:43:50 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Do not emit lea for short mode on
- partial_reg_stall target.
-
-Tue Nov 26 22:27:47 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (movhicc): Allow general operand.
- (movqicc): New expander.
- (movqicc_noc): New pattern.
- * i386.c (ix86_expand_carry_flag_compare): New function.
- (ix86_expand_int_movcc): Optimize harder using sbb; support more
- HImode conversion; support QImode conditional moves
-
-Tue Nov 26 16:30:59 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (FAST_PROLOGUE_INSN_COUNT): Set to 20.
- (ix86_expand_prologue): Multiply the count by amount of registers to be
- pushed.
-
-Tue Nov 26 15:55:27 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (override_options): Error about wrong -mcpu on x86-64
- compilation.
-
-2002-11-26 NIIBE Yutaka <gniibe@m17n.org>
-
- * config/sh/linux.h (FUNCTION_PROFILER): Implemented.
-
-Tue Nov 26 00:14:20 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386-protos.h (x86_extended_QIreg_mentioned_p,
- x86_extended_reg_mentioned_p): Declare.
- * i386.c (extended_reg_mentioned_1): New static function.
- (x86_extended_QIreg_mentioned_p,
- x86_extended_reg_mentioned_p): New global functions.
- * i386.h (REX_SSE_REGNO_P): New macro.
- * i386.md (prefix_rex): New attribute.
- (length attribute): Add rex.
-
-2002-11-26 Andrew Haley <aph@redhat.com>
-
- * unwind-sjlj.c (_Unwind_FindEnclosingFunction): Rename
- from_Unwind_Find_Enclosing_Function.
- * unwind-dw2.c (_Unwind_FindEnclosingFunction): Likewise.
- * config/ia64/unwind-ia64.c (_Unwind_FindEnclosingFunction): Likewise.
- * libgcc-std.ver (_Unwind_FindEnclosingFunction): Rename from
- _Unwind_Find_Enclosing_Function, export @@GCC_3.3.
- * unwind.h (_Unwind_FindEnclosingFunction): Add.
-
-2002-11-26 Hartmut Penner <hpenner@de.ibm.com>
-
- * config/s390/s390.c (390_output_constant_pool): Set alignment
- before label in 64 bit mode, behind otherwise.
-
-2002-11-26 Richard Henderson <rth@redhat.com>
-
- * c-common.c (handle_visibility_attribute): Accept "default".
- * tree.h (enum symbol_visibility): New.
- (decl_visibility): Declare.
- * target.h (gcc_target.visibility): Take visibility arg as integer.
- * varasm.c (default_assemble_visibility): Likewise.
- (decl_visibility): New.
- (maybe_assemble_visibility): Use it.
- * output.h (default_assemble_visibility): Update prototype.
- * config/rs6000/rs6000.c (rs6000_assemble_visibility): Take
- visibility arg as integer.
- * doc/extend.texi: Document default visibility.
-
-2002-11-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c: Adjust spacing.
- * config/h8300/h8300.h: Likewise.
-
-2002-11-26 Richard Henderson <rth@redhat.com>
-
- * hooks.c (hook_bool_void_false, hook_void_tree_int,
- hook_void_FILEptr_constcharptr): Rename so that the return
- type is first.
- (hook_int_tree_tree_1, hook_void_tree, hook_void_tree_treeptr,
- hook_bool_tree_false): New.
- * hooks.h: Update.
- * langhooks-def.h: Update for renames.
- * target-def.h: Likewise.
- * tree.c (default_comp_type_attributes,
- default_set_default_type_attributes, default_insert_attributes,
- default_function_attribute_inlinable_p,
- default_ms_bitfield_layout_p): Remove.
- * tree.h: Update.
-
-2002-11-26 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa-protos.h (function_value): New prototype.
- * pa.c (function_value): Use a PARALLEL to return small aggregates on
- TARGET_64BIT.
- * pa.h (FUNCTION_VALUE): Use function_value.
- * pa.md (call_value_internal_symref, call_value_internal_reg_64bit,
- call_value_internal_reg, sibcall_value_internal_symref,
- sibcall_value_internal_symref_64bit): Remove =rf constraint on return
- value.
-
-2002-11-26 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * expr.c (gen_group_rtx, emit_group_move): New functions.
- * expr.h (gen_group_rtx, emit_group_move): Prototype.
- * function.c (expand_function_start): Use gen_group_rtx to create a
- PARALLEL rtx to hold the return value when the real return rtx is a
- PARALLEL.
- (expand_function_end): Use emit_group_move to move the return value
- from a PARALLEL to the real return registers.
- * rtl.h (REG_FUNCTION_VALUE_P): Allow function values to be returned
- in PARALLELs.
-
-2002-11-26 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/t-libc-ok: Fix typo.
-
-2002-11-26 Jakub Jelinek <jakub@redhat.com>
-
- * configure.in: Move AC_CANONICAL_SYSTEM and AC_ARG_PROGRAM back
- before AC_PROG_CC.
- * configure: Rebuilt.
-
-2002-11-26 Nathan Sidwell <nathan@codesourcery.com>
-
- * c-decl.c: (start_struct): Commonize flag setting.
-
-2002-11-26 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/rs6000/rs6000.h (RS6000_CPU_CPP_ENDIAN_BUILTINS): New.
- * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Use
- RS6000_CPU_CPP_ENDIAN_BUILTINS.
- * config/rs6000/netbsd.h (RS6000_CPU_CPP_ENDIAN_BUILTINS): Redefine.
-
-2002-11-26 Hartmut Penner <hpenner@de.ibm.com>
-
- * config/s390/s390.md (literal_pool_64, literal_pool_31 ): New
- insns.
- * config/s390/s390.c (struct machine_function): Introduction of
- struct machine_function.
- (s390_output_symbolic_const): Use of cfun.
- (s390_optimize_prolog): Likewise.
- (s390_fixup_clobbered_return_reg): Likewise.
- (s390_frame_info): Likewise.
- (s390_emit_prologue, s390_emit_epilogue): Likewise.
- (s390_init_machine_status): New function.
- (override_options): call s390_init_machine_status.
- * config/s390/s390-protos.h (s390_output_constant_pool): Changed
- prototype.
-
-2002-11-26 Jakub Jelinek <jakub@redhat.com>
-
- * varasm.c (output_constant_pool): For pool constants in mergeable
- section ensure each constant is padded to multiple of entity size.
-
-2002-11-26 Jakub Jelinek <jakub@redhat.com>
-
- * varasm.c (default_exception_section): Move to...
- * except.c (default_exception_section): ... here. Make
- .gcc_except_table read-only if it is not expected to have any
- dynamic relocations and linker handles it.
- * dwarf2out.c (default_eh_frame_section): Make .eh_frame read-only
- if it is not expected to have any dynamic relocations and linker
- handles it.
- * configure.in (HAVE_LD_RO_RW_SECTION_MIXING): Check what ld does
- when linking read-only and read-write sections together.
- * configure, config.in: Rebuilt.
- * crtstuff.c (EH_FRAME_SECTION_CONST): Define.
- (__EH_FRAME_BEGIN__, __FRAME_END__): Add it.
-
-Mon Nov 25 18:32:37 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (pushsf_rex64): Fix typo.
-
-2002-11-25 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/spe.h (__ev_create_sfix32_fs): Change macro into
- new function.
- (__ev_create_ufix32_fs): Same.
- (__ev_get_sfix32_fs_internal): New.
- (__ev_get_sfix32_fs): Define to use function.
- (__ev_get_ufix32_fs_internal): New.
- (__ev_get_ufix32_fs): Define to use function.
- (__ev_get_upper_ufix32_fs): Call __ev_get_ufix32_fs.
- (__ev_get_lower_ufix32_fs): Same.
- (__ev_get_upper_sfix32_fs): Call __ev_get_sfix32_fs.
- (__ev_get_lower_sfix32_fs): Same.
- (__ev_set_sfix32_fs_internal): New.
- (__ev_set_ufix32_fs_internal): New.
- (__ev_set_sfix32_fs): Call __ev_set_sfix32_fs_internal.
- (__ev_set_ufix32_fs): Call __ev_set_ufix32_fs_internal.
- (__ev_set_upper_sfix32_fs): Call function.
- (__ev_set_lower_sfix32_fs): Same.
- (__ev_set_upper_ufix32_fs): Same.
- (__ev_set_lower_ufix32_fs): Same.
-
-2002-11-25 Douglas B Rupp <rupp@gnat.com>
-
- * gcc.c (do_spec_1): Reset delete_this_arg to zero.
-
-2002-11-25 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/elfos.h (HANDLE_SYSV_PRAGMA): Define as 1.
- * config/interix.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/linux-aout.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/lynx-ng.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/lynx.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/netbsd.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/openbsd.h (HANDLE_SYSV_PRAGMA: Likewise.
- * config/alpha/elf.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/arm/netbsd.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/cris/aout.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/d30v/d30v.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/frv/frv.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/i386/djgpp.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/i386/i386-interix.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/i386/vxi386.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/ia64/ia64.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/m88k/m88k.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/mmix/mmix.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/rs6000/aix.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/rs6000/darwin.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/sparc/linux-aout.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/sparc/vxsparc64.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/stormy16/stormy16.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/alpha/osf.h (HANDLE_SYSV_PRAGMA): Don't undef before
- defining.
- * config/i386/sco5.h (HANDLE_SYSV_PRAGMA): Likewise.
- * config/mips/iris5.h (HANDLE_SYSV_PRAGMA): Likewise.
-
-2002-11-25 Dave Pitts <dpitts@cozx.com>
-
- * gcc/fixinc/mkfixinc.sh: add i370-*-openedition to bypass fixinc list
-
-2002-11-25 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (an anonymous pattern): New.
-
-2002-11-25 Richard Henderson <rth@redhat.com>
-
- * alias.c (find_base_value): Use new_reg_base_value if it's live.
- (copying_arguments): Make boolean.
-
-2002-11-25 Jason Thorpe <thorpej@wasabisystems.com>
-
- * gcc.c (static_spec_functions): Add if-exists-else spec
- function.
- (if_exists_else_spec_function): New function.
- * doc/invoke.texi: Document the if-exists-else spec function.
-
- * config/netbsd-elf.h (NETBSD_STARTFILE_SPEC): For -static, use
- "%:if-exists-else(crtbeginT%O%s crtbegin%O%s)".
-
-2002-11-25 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (powerpc-*-netbsd*): Replace "svr4.h" with
- "netbsd.h netbsd-elf.h" in tm_file. Set tmake_file to
- "${tmake_file} rs6000/t-netbsd".
- * config/rs6000/netbsd.h: Rewrite.
- * config/rs6000/t-netbsd: New file.
-
-2002-11-25 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (an anonymous pattern): Relax the
- condition for the pattern.
-
-2002-11-25 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.h (enum rs6000_builtins): Remove evmwlssf,
- evmwlsmf, evmwlssfa, evmwlsmfa, evmwlssfaaw, evmwlsmfaaw,
- evmwlssfanw, evmwlsmfanw.
-
- * config/rs6000/rs6000.c (bdesc_2arg): Same.
-
- * config/rs6000/spe.md: Same for patterns.
-
-2002-11-25 Christian Ehrhardt <ehrhardt@mathematik.uni-ulm.de>
-
- PR c/8639
- * fold-const.c (extract_muldiv): Don't propagate division unless
- both arguments are multiples of C.
-
-2002-11-25 Andrew Haley <aph@redhat.com>
-
- * libgcc-std.ver (_Unwind_Find_Enclosing_Function): Add.
- * config/ia64/unwind-ia64.c (_Unwind_Find_Enclosing_Function): New.
- * unwind-sjlj.c (_Unwind_Find_Enclosing_Function): Likewise.
- * unwind-dw2.c (_Unwind_Find_Enclosing_Function): Likewise.
-
-Sun Nov 24 10:38:04 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_use_ffreep): New global variable.
- * i386.h (x86_use_frfeep): Declare
- (TARGET_USE_FFREEP): New macro
- * i386.md (movs?f*): Use freep when asked for.
- (push?f): Remove dead code.
-
-2002-11-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_init_once): Fix a typo in the
- target help message.
-
-2002-11-24 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (*-*-netbsd*1.[7-9]*, *-*-netbsd*[2-9]*): Set
- extra_parts to "crtbegin.o crtend.o crtbeginS.o crtendS.o
- crtbeginT.o".
- (arm*-*-netbsd*, i[34567]86-*-netbsd*, m68k*-*-netbsd*)
- (ns32k-*-netbsd*, sparc-*-netbsd*, vax-*-netbsd*): Set extra_parts
- to "" for a.out configurations.
- * config/t-netbsd (CRTSTUFF_T_CFLAGS): Set to "-fPIC".
-
-2002-11-24 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/alpha/netbsd.h (CPP_SUBTARGET_SPEC): Just use
- NETBSD_CPP_SPEC directly.
- (SUBTARGET_EXTRA_SPECS): Remove netbsd_cpp_spec. Add
- netbsd_endfile_spec.
- (ENDFILE_SPEC): Use %(netbsd_endfile_spec).
-
-2002-11-24 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/netbsd-elf.h (STARTFILE_SPEC): Rename to
- NETBSD_STARTFILE_SPEC.
- (STARTFILE_SPEC): Redefine in terms of NETBSD_STARTFILE_SPEC.
- (ENDFILE_SPEC): Likewise.
- * config/netbsd.h (LIB_SPEC, LIBGCC_SPEC): Likewise.
-
-2002-11-24 Andreas Schwab <schwab@suse.de>
-
- * Makefile.in (install-driver): Remove versioned link before
- trying to create it.
-
- * config/m68k/m68k.c: Fix typo in last change defining
- TARGET_ASM_CAN_OUTPUT_MI_THUNK.
-
-2002-11-23 H.J. Lu <hjl@gnu.org>
-
- * aclocal.m4: Include ../config/accross.m4.
- (gcc_AC_COMPILE_CHECK_SIZEOF): Removed.
- (gcc_AC_C_COMPILE_ENDIAN): Removed.
- (gcc_AC_C_FLOAT_FORMAT): Check $ac_cv_c_bigendian
- instead of $ac_cv_c_compile_endian.
-
- * configure.in: Replace gcc_AC_COMPILE_CHECK_SIZEOF with
- AC_COMPILE_CHECK_SIZEOF.
- Replace gcc_AC_C_COMPILE_ENDIAN with AC_C_BIGENDIAN_CROSS.
- * configure: Rebuild.
-
-2002-11-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (print_operand): Update the use of
- h8300_tiny_constant_address_p.
- (h8300_adjust_insn_length): Likewise.
- (h8300_tiny_constant_address_p): Check if the given rtx is a
- variable declared with __attribute__ ((tiny_data)).
-
-2002-11-22 Dale Johannesen <dalej@apple.com>
-
- * toplev.c (rest_of_compilation): Fix comments.
-
-2002-11-22 Geoffrey Keating <geoffk@apple.com>
-
- * aclocal.m4 (ac_cv_func_mmap_dev_zero): Darwin does not
- allow mmap from /dev/zero. Don't make decisions for the host
- based on presence or absence of /dev/zero on the build machine.
- (ac_cv_func_mmap_anon): Darwin does have working MMAP_ANON.
- (AC_FUNC_MMAP_FILE): Darwin does have mmap of a file.
- * configure: Regenerate.
-
-2002-11-22 Daniel Jacobowitz <drow@mvista.com>
-
- * gcc.c (make_relative_prefix, split_directories)
- (free_split_directories): Removed.
-
-2002-11-22 Daniel Jacobowitz <drow@mvista.com>
-
- * configure.in: Set insn=nop for DWARF-2 tests on ARM.
- * configure: Regenerated.
-
-2002-11-22 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (compute_a_shift_length): Fix the insn
- length computation when xor.l is output.
-
-2002-11-21 Douglas B Rupp <rupp@gnat.com>
-
- * alpha.md (movstrdi, clrstrdi): New VMS patterns.
- (call_vms_1, call_value_vms_1): Cleanup syntax.
-
-Thu Nov 21 19:20:27 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * athlon.md (define_atuomaton): Add athlon_load.
- (athlon-double): New reservation.
- (athlon-ieu0): New CPU unit.
- (athlon-load?): Use athlon_load automaton.
- (*_k8 reservations): New.
- (other insn revervations): Activate for K8.
-
-Thu Nov 21 15:07:42 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * cfgrtl.c (verify_flow_info): Accept EDGE_CAN_FALLTHRU flag.
-
-2002-11-21 Jim Wilson <wilson@redhat.com>
-
- * config/rs6000/rs6000.c (function_arg): Set inner mode of SPE
- vectors to SI.
-
-2002-11-21 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/xtensa-protos.h (xtensa_copy_incoming_a7): Declare.
- * config/xtensa/xtensa.c (struct machine_function): Add
- incoming_a7_copied flag.
- (xtensa_copy_incoming_a7): Define.
- (xtensa_emit_move_sequence): Use xtensa_copy_incoming_a7.
- * config/xtensa/xtensa.md (movdi, movsf, movdf): Ditto.
-
-Thu Nov 21 23:52:04 CET 2002 Jan Hubicka <jH@suse.cz>
-
- * i386-protos.h (x86_64_sign_extended_value): Fix prototype.
- * i386.c (x86_64_general_operand, x86_64_szext_general_operand,
- x86_64_nonmemory_operand, x86_64_movabs_operand,
- x86_64_szext_nonmemory_operand, x86_64_immediate_operand,
- ix86_expand_int_movcc): Update call of x86_64_sign_extended_value.
- (local_symbolic_operand): Do not care the 64bit limits.
- (x86_64_sign_extended_value): Remove allow_rip support.
- (legitimate_pic_address_disp_p): Handle all cases allowed
- with RIP addressing.
- (legitimate_address_p): Use legitimate_pic_address_disp_p for PIC.
- (legitimize_pic_address): Reorganize.
- * i386.h (EXTRA_CONSTRAINT): Update call of x86_64_sign_extended_value.
-
-2002-11-21 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (arm*-*-netbsdelf*): Enable configuration.
- * config/arm/netbsd-elf.h: New file.
-
-2002-11-21 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/arm/elf.h (SUBTARGET_EXTRA_SPECS): Add
- subtarget_asm_float_spec.
- (SUBTARGET_ASM_FLOAT_SPEC): Define, moving the
- defaults from...
- (ASM_SPEC): ...here. Use subtarget_asm_float_spec.
-
-2002-11-21 Nick Clifton <nickc@redhat.com>
-
- * config/fr30/fr30.md (movsf_constant_store): Move code to
- detect 0.0 into fr30.c.
- * config/fr30/fr30-protos.h (fr30_const_double_is_zero):
- Prototype.
- * config/fr30/fr30.c (fr30_const_double_is_zero): New
- function. Return true if the rtx is 0.0.
-
-2002-11-21 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/arm/elf.h (ASM_SPEC, LINK_SPEC): Pass -EL
- if -mlittle-endian is specified.
-
-2002-11-21 Richard Earnshaw <rearnsha@arm.com>
-
- PR optimization/2903
- * arm.md (anddi_notzesidi_di): Operand 2 is inverted not operand 1.
- (anddi_notsesidi_di): Likewise.
-
-2002-11-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (print_operand): Use
- h8300_eightbit_constant_address_p and
- h8300_tiny_constant_address_p.
- (h8300_adjust_insn_length): Likewise.
- * config/h8300/h8300.h (EIGHTBIT_CONSTANT_ADDRESS_P): Remove.
- (TINY_CONSTANT_ADDRESS_P): Likewise.
- (OK_FOR_U): Use eightbit_constant_address_p.
-
-2002-11-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/libgcc-libc.ver: Add multilib support.
- * config/s390/linux.h (MULTILIB_DEFAULT): Define.
- * config/s390/t-linux64 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES,
- MULTILIB_OSDIRNAMES, LIBGCC, INSTALL_LIBGCC,
- EXTRA_MULTILIB_PARTS): Define.
-
-2002-11-21 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.c (arm_get_frame_size): A leaf function does not need its
- stack padding to an aligned boundary if it has no frame.
- (thumb_get_frame_size): Likewise.
-
-Wed Nov 20 22:25:53 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * x86-64.h (MCOUNT_NAME): Fix typo in my previous patch.
- (override_options): Likewise.
-
-Wed Nov 20 19:07:17 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * config.gcc: Add k8 target alias support
- * i386.c (_cost): Declare costs for various variants of divides and
- multiplies.
- (k8_cost): New.
- (m_K8, m_ATHLON_K8): New macros.
- (x86_use_leave, x86_push_memory, x86_movx, x86_unroll_strlen,
- x86_cmove, x86_3dnow_a, x86_deep_branch, x86_use_fiop,
- x86_promote_QImode, x86_sub_esp_?, x86_add_esp_?,
- x86_integer_DFmode_moves, x86_partial_reg_dependency,
- x86_memory_mismatch_stall, x86_accumulate_outgoing_args,
- x86_prologue_using_move, x86_epilogue_using_move,
- x86_arch_always_fancy_math_387, x86_sse_partial_regs,
- x86_sse_typeless_stores): Set for K8
- (override_options): Add k8 support; fix athlon alignment;
- complain about non-x86-64 capable CPU being used in x86-64 compilation.
- (ix86_issue_rate): Set for K8.
- (ix86_adjust_cost, ia32_use_dfa_pipeline_interface,
- x86_machine_dependent_reorg): Handle K8 like
- * i386.h
- (x86_costs): Change mult_init and divide into array.
- (TARGET_K8, TARGET_ATHLON): New macros.
- (MODE_INDEX): New macro.
- (RTX_COST): Use new costs.
- (TARGET_CPU_CPP_BUILTINS): Define __k8__ and __tune_k8__.
- (TARGET_CPU_DEFAULT_NAMES): Add k8
- (TARGET_CPU_DEFAULT_k8): New constant
- (enum processor_type): Add PROCESSOR_K8.
- * i386.md (cpu attribute): Add k8.
-
- * invoke.texi: Document -march=k8.
-
- * i386.md (type attribute): Add leave
- (mode attribute): Remove unknownfp.
- (length_immediate, modrm, memory attributes): Handle leave correctly.
- (fp comparison patterns): Determine FP mode.
- (leave, leave_rex64): Remove special cases.
- * ppro.md (ppro_uops, ppro_p2): Add leave
- * pentiun.md (pent_pop): Handle leave too.
- * k6.md (k6_load): Handle leave.
- * athlon.md (athlon_leave, athlon_pop): Fix.
- (athlon_decode): Handle leave.
-
-2002-11-20 Steve Ellcey <sje@cup.hp.com>
-
- * emit-rtl.c (gen_reg_rtx): Simplify mapping of Complex type
- to component type using GET_MODE_INNER.
- * expr.c (emit_move_insn_1): Ditto.
- * optabs.c (expand_binop): Ditto.
- (expand_unop): Ditto.
- (expand_complex_abs): Ditto.
-
-2002-11-20 Douglas B Rupp <rupp@gnat.com>
-
- * hwint.h (HAVE___INT64): Fix typo (was HAVE__INT64).
-
-2002-11-20 DJ Delorie <dj@redhat.com>
-
- * config/stormy16/stormy16.c (s16builtins,
- xstormy16_init_builtins, xstormy16_expand_builtin): New.
- * config/stormy16/stormy16.md (divmodhi4, sdivlh, udivlh): New.
-
-2002-11-20 Hans-Peter Nilsson <hp@bitrange.com>
-
- * Makefile.in (RUN_GEN, VALGRIND_DRIVER_DEFINES): New variables.
- (DRIVER_DEFINES): Add $(VALGRIND_DRIVER_DEFINES).
- (executing gencheck, genconfigs, genconditions, genflags,
- gencodes, genconstants, genemit, genrecog, genopinit, genextract,
- genpeep, genattr, genattrtab, genoutput, gengenrtl, genpreds,
- gengtype, genprotos): Prepend $(RUN_GEN).
- * configure.in: Move host compiler tests before --enable-checking
- tests.
- (--enable-checking=valgrind): New.
- * config.in, configure: Regenerate.
- * cppfiles.c [!ENABLE_VALGRIND_CHECKING] (VALGRIND_DISCARD):
- Define as empty.
- (read_include_file): When doing the mmap+1 trick,
- valgrind-annotate the byte after the mmap:ed area as readable.
- (purge_cache): Remove above annotation.
- * gcc.c (execute) [ENABLE_VALGRIND_CHECKING]: Arrange to prepend
- VALGRIND_PATH -q to each command.
-
- * ggc-common.c [!ENABLE_VALGRIND_CHECKING] (VALGRIND_DISCARD):
- Define as empty.
- (ggc_realloc): Update valgrind annotations.
- * ggc-page.c [!ENABLE_VALGRIND_CHECKING] (VALGRIND_DISCARD):
- Define as empty.
- (alloc_anon, free_page, ggc_alloc, poison_pages): Add machinery to
- valgrind-annotate memory.
-
-2002-11-20 Ulrich Weigand <uweigand@de.ibm.com>
-
- * recog.c (constrain_operands): Prefer exact match over reloadable
- EXTRA_MEMORY_CONSTRAINT or EXTRA_ADDRESS_CONSTRAINT.
-
- * reload.c (find_reloads): Always reload EXTRA_ADDRESS_CONSTRAINT
- operands in Pmode.
-
-2002-11-20 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR c/8518
- * c-decl.c (duplicate_decls): Outline the second definition
- of an extern inline function in all cases.
-
-2002-11-20 Richard Sandiford <rsandifo@redhat.com>
-
- * stor-layout.c (place_field): Update rli->offset as well as
- rli->bitpos.
-
-2002-11-20 Richard Sandiford <rsandifo@redhat.com>
-
- * sched-deps.c (sched_analyze): Check HARD_REGNO_CALL_PART_CLOBBERED.
-
-2002-11-20 Richard Sandiford <rsandifo@redhat.com>
-
- * config/sh/sh.md (udivsi3): Don't put udivsi3_i4_media instructions
- into a libcall block.
- (divsi3): Likewise divsi3_i4_media.
-
-2002-11-20 Richard Sandiford <rsandifo@redhat.com>
-
- * global.c (find_reg): Check HARD_REGNO_NREGS before kicking
- out another register.
-
-2002-11-20 Jakub Jelinek <jakub@redhat.com>
-
- * combine.c (force_to_mode): Only replace with (not Y) if all bits in fuller_mask
- (not just mask) are set in C.
-
-2002-11-19 Steven Bosscher <steven.bosscher@usafa.af.mil>
-
- * config/mips/vr.h (DRIVER_SELF_SPECS): Change %{<mgp32} to %<mgp32.
-
-2002-11-19 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * profile.c (index_counts_file): Fix obvious mistake.
-
-2002-11-19 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * Makefile.in (profile.o): Add hashtab.h dependency.
- * gcov-io.h (GCOV_SUMMARY_LENGTH): New.
- * profile.c: Include hashtab.h.
- (htab_counts_index_hash, htab_counts_index_eq, htab_counts_index_del,
- cleanup_counts_index, index_counts_file, struct section_reference,
- struct da_index_entry, counts_file_name, counts_file_index): New.
- (get_exec_counts, init_branch_prob): Modified.
-
-2002-11-19 Kaz Kojima <kkojima@gcc.gnu.org>
-
- * config.gcc (sh*-*-linux*): Add t-slibgcc-elf-ver and t-linux
- to tmake_file. Remove setting gas and gnu_ld here.
- * config/sh/libgcc-glibc.ver: New file.
- * config/sh/t-linux (EXTRA_MULTILIB_PARTS): Add crtbeginT.o.
- (SHLIB_MAPFILES): New.
- * config/sh/linux.h (MD_EXEC_PREFIX): Undefine.
- (MD_STARTFILE_PREFIX): Likewise.
- (HANDLE_PRAGMA_PACK_PACK_PUSH_POP): Define.
- (DWARF2_UNWIND_INFO): Redefine.
- (ASM_PREFERRED_EH_DATA_FORMAT): Define.
- (LINK_EH_SPEC): Redefine.
- (MD_FALLBACK_FRAME_STATE_FOR): Define except for SH-media.
- (SH_FALLBACK_FRAME_FLOAT_STATE): Define.
- (SH_DWARF_FRAME_GP0, SH_DWARF_FRAME_FP0, SH_DWARF_FRAME_XD0,
- SH_DWARF_FRAME_BT0, SH_DWARF_FRAME_PR, SH_DWARF_FRAME_PR_MEDIA,
- SH_DWARF_FRAME_GBR, SH_DWARF_FRAME_MACH, SH_DWARF_FRAME_MACL,
- SH_DWARF_FRAME_PC, SH_DWARF_FRAME_SR, SH_DWARF_FRAME_FPUL,
- SH_DWARF_FRAME_FPSCR): Likewise.
- * config/sh/sh-protos.h (sh_set_return_address): Declare.
- * config/sh/sh.c (calc_live_regs): Count EH_RETURN_DATA_REGNO
- registers if the current function calls EH return.
- (sh_expand_epilogue): Handle EH stack adjustments.
- (sh_set_return_address): New function.
- * config/sh/sh.h (SH_DBX_REGISTER_NUMBER): Handle PR_MEDIA_REG.
- Don't abort even if the number is mapped to -1.
- (EH_RETURN_DATA_REGNO): Define.
- (EH_RETURN_STACKADJ_RTX): Define.
- * config/sh/sh.md (UNSPEC_EH_RETURN): New.
- (eh_return): New pattern.
- (eh_set_ra_di, eh_set_ra_si): Likewise.
- Add splitter to perform EH return after reload.
-
-Tue Nov 19 12:52:07 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * stor-layout.c (excess_unit_span): New function.
- (place_field): Use it.
-
-2002-11-19 Andreas Schwab <schwab@suse.de>
-
- * unwind.h (_Unwind_GetTextRelBase): Revert last change, this is
- not valid in C++.
-
-2002-11-19 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * configure.in, Makefile.in: Correct BUILD/HOST confusion.
- * configure: Regenerate.
-
-Tue Nov 19 00:11:44 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * convert.c (strip_float_extensions): New function.
- (convert_to_real): Optimize some cases.
-
-2002-11-19 Andreas Jaeger <aj@suse.de>
-
- * loop.c (record_giv): Initialize not_replaceable.
- (check_final_value): Likewise.
-
-2002-11-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_init_once): Replace 1 with
- MASK_H8300S.
-
-2002-11-19 Vijay L. Khuspe <vijayk1@kpit.com>
-
- * config/h8300/h8300.c (h8300_init_once): Allow -mn switch
- only if -mh or -ms present.
- (h8300_eightbit_constant_address_p): Support the normal mode.
- (h8300_tiny_constant_address_p): Likewise.
- * config/h8300/h8300.h (TARGET_NORMAL_MODE): New.
- (POINTER_SIZE): Add 16 bit pointer for the normal mode.
- (Pmode): Evaluate to HImode for the normal mode.
- (SIZE_TYPE): Evaluate to unsigned int for normal mode.
- (PTRDIFF_TYPE): Evaluate to int for the normal mode.
- (ASM_WORD_OP): Evaluate to word for the normal mode.
- * config/h8300/h8300.md (tablejump_normal_mode): New.
- (indirect_jump_normal_mode): New.
- * config/h8300/t-h8300 (MULTILIB_OPTIONS): Pass -mn option to
- directory.
- (MULTILIB_DIRNAMES): Create target dependent directory
- 'normal'.
- (MULTILIB_EXCEPTIONS): Don't turn on -mn on H8/300.
- * doc/invoke.texi (gccoptlist): Describe the new switch -mn.
-
-Tue Nov 19 23:50:56 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (length_immediate): Do not refer to insn address.
- (jcc*, jmp patterns): Compute length explicitly.
-
-2002-11-19 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR c/8588
- * optabs.c (expand_binop): Convert CONST_INTs in shift
- operations too.
-
-2002-11-19 Roger Sayle <roger@eyesopen.com>
-
- * gcse.c (gcse_emit_move_after): Correct typo in REG_EQUAL note.
-
-2002-11-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (an anonymous pattern): Relax the
- condition to accept the same operands and/or subregs.
-
-2002-11-19 Daniel Jacobowitz <drow@mvista.com>
-
- * config/sh/sh.c (gen_shl_and): Revert previous patch.
- * config/sh/sh.md (ashrdi3+1, ashrdi3+2): Predicate on
- reload_completed.
-
-2002-11-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (print_operand): Update the use of
- EIGHTBIT_CONSTANT_ADDRESS_P.
- (h8300_adjust_insn_length): Likewise.
- (h8300_eightbit_constant_address_p): Check if the given rtx is
- a variable with __attribute__((eightbit_data)).
- * config/h8300/h8300.h (OK_FOR_U): Update the use of
- EIGHTBIT_CONSTANT_ADDRESS_P.
-
-2002-11-19 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/contrib.texi (Contributors): Add self as second contact in
- addition to Jeff Law.
-
-2002-11-19 Andreas Jaeger <aj@suse.de>
-
- * tree-inline.c: Move prototpyes of find_alloca_call_1 and
- find_alloca_call to right place.
-
-2002-11-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * cppfiles.c: Fix formatting.
-
-2002-11-19 Jason Thorpe <thorpej@wasabisystems.com>
-
- * gcc.c (The Specs Language): Document spec functions.
- (static_spec_functions, lookup_spec_function)
- (eval_spec_function, handle_spec_function)
- (if_exists_spec_function, alloc_args): New.
- (execute): Abort if processing_spec_function is true.
- (do_spec_1): Hand off spec to handle_spec_function if %:
- is encountered. If processing_spec_function is true,
- end any pending argument when the end of the string is reached.
- (main): Use alloc_args to allocate the initial argument vector.
- * gcc.h (struct spec_function): New.
- (lang_specific_spec_functions): New extern.
-
- * config/netbsd-elf.h (STARTFILE_SPEC): Add if-exists(crti%O%s).
- (ENDFILE_SPEC): Add if-exists(crtn%O%s).
- * config/alpha/netbsd.h (ENDFILE_SPEC): Likewise.
-
- * doc/invoke.texi: Document spec functions.
-
- * cppspec.c (lang_specific_spec_functions): New.
- * gccspec.c: Likewise.
-
-2002-11-18 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux_longdouble.h (FIXUNS_TRUNCTFSI2_LIBCALL): New.
- (FIXUNS_TRUNCTFDI2_LIBCALL): New.
- (fixunstfsi_libfunc): Change.
- (fixunstfdi_libfunc): Change.
- (sdiv_optab): Don't zero out SImode handler.
- (udiv_optab): Don't zero out SImode handler.
- (smod_optab): Don't zero out SImode handler.
- (umod_optab): Don't zero out SImode handler.
-
-2002-11-18 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/8524
- * cpplib.c (run_directive): Remove previous kludge to _Pragma.
- Add a new one in its place, which hopefully works.
- (skip_rest_of_line): Change test for bottom-of-context-stack.
-
-Mon Nov 18 21:29:03 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (addqi_1_slp): Fix output template.
- (subqi_1_slp): Fix type.
-
-Sun Nov 17 00:01:28 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * calls.c (alloca_call_p): New global function.
- * tree.h (alloca_call_p): New.
- * tree-inline.c (inlinable_function_p): Do not inline when
- function calls alloca.
- (find_alloca_call, find_alloca_call_1): New functions.
-
-2002-11-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*andorqi3): Use bor between bld and
- bst. Update the insn length.
- (*andorhi3): Likewise.
- (*andorsi3): Likewise.
-
-2002-11-18 Richard Sandiford <rsandifo@redhat.com>
-
- * config/sh/sh-protos.h (sh_mark_label): Declare.
- * config/sh/sh.c (sh_mark_label): New function, taken from
- movdi_const, but fixing the case when the address has an addend.
- * config/sh/sh.md (movdi_const, movdi_const_32bit): Use it.
-
-2002-11-18 Richard Sandiford <rsandifo@redhat.com>
-
- * config/sh/sh.c (pool_node): New field: part_of_sequence_p.
- (add_constant): Set it.
- (dump_table): Don't reorder a constant if part_of_sequence_p.
- (machine_dependent_reorg): Assume that float constants will
- stay in their original order if used as a sequence.
-
-2002-11-18 Richard Sandiford <rsandifo@redhat.com>
-
- * config/sh/sh.c (calc_live_regs): Update check for PIC liveness
- in compact code.
-
-2002-11-18 Richard Sandiford <rsandifo@redhat.com>
-
- * config/sh/sh.md (initialize_trampoline): Do not force the
- trampoline address into R0_REGS here.
-
-Sun Nov 17 14:01:09 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (negsf2_ifs, negdf2_ifs, negdf2_ifs_rex64, abssf2_ifs,
- absdf2_ifs, absdf2_ifs_rex64): Fix constraints.
- (neg?f2_ifs, abs?f2_ifs splitters): Refuse memory operand; do not
- generate unnecesary subregs.
-
-2002-11-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * df.c: Fix formatting.
-
-2002-11-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (two anonymous patterns): Fix insn
- lengths.
-
-2002-11-17 Daniel Jacobowitz <drow@mvista.com>
-
- * sh.c (gen_shl_and): Don't create a zero_extend if the operand
- is not an arith_reg_operand.
-
-2002-11-17 Graham Stott <graham.stott@btinternet.com>
-
- * real.c (real_to_decimal): Fix buffer overrun when buffer size
- is smaller than representation.
-
-2002-11-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * builtins.c: Fix formatting.
-
-Sat Nov 16 16:49:58 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (truncdfsf2_1_sse, truncdfsf2_1_sse_nooverlap, truncdfsf2_2,
- floats?dff2_i387):
- Work around regclass stupidity.
- (truncdfsf_2_1_sse splitter): Accept !TARGET_PARTIAL_SSE_REGS
-
-Sat Nov 16 02:17:48 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (fop_df_6): New pattern.
- (fop_xf_4, fop_xf_5): Handle both SF and DFmode extensions.
- (fop_xf_6): Rewrite
- (fop_xf_7): Delete.
- (fop_tf_4, fop_tf_5): Handle both SF and DFmode extensions.
- (fop_tf_6): Rewrite
- (fop_tf_7): Delete.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (two anonymous patterns): Fix typos.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Fix formatting.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md: Replace spaces with tabs.
- * config/h8300/t-h8300: Remove a trailing empty line.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * tlink.c: Fix formatting.
-
-2002-11-16 David Edelsohn <edelsohn@gnu.org>
-
- PR 8362
- * config/rs6000/rs6000.c (rs6000_outout_load_multiple): New function.
- * config/rs6000/rs6000.md (movti_string): Remove output modifier
- when scratch register never needed.
- (ldmsi[3-8]): New patterns.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * hard-reg-set.h: Follow spelling conventions.
- * real.c: Likewise.
- * target.h: Likewise.
-
-2002-11-16 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/x86-64.h (MCOUNT_NAME): Change into string literal.
-
-2002-11-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * optabs.c: Fix formatting.
-
-Sat Nov 16 02:06:02 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * athlon.md, k6.md, pentium.md, ppro.md: Handle shift1, rotate1
- * i386.md (attribute type): Add type shift1 and rotate1.
- (*_slp): Rewrite to have just two operands to avoid reload problems.
-
-2002-11-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (4 anonymous patterns): New.
-
-2002-11-15 Geoffrey Keating <geoffk@apple.com>
-
- * params.def (GGC_MIN_HEAPSIZE): Fix GGC_ALWAYS_COLLECT problem.
- * doc/invoke.texi: Correct description of what needs to be done to
- force collection at every ggc_collect call.
-
-2002-11-15 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (optimization_options): Set
- flag_asynchronous_unwind_tables to 1 by default.
-
-2002-11-15 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
-
-Fri Nov 15 14:54:19 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386-protos.h (x86_function_profiler): New function
- * i386.h (MCOUNT_NAME): New.
- (PROFILE_COUNT_REGISTER): New.
- (FUNCTION_PROFILER): Move offline to ...
- * i386.c (x86_function_profiler) ... here; fix 64bit support
- * beos-elf.h (FUNCTION_PROFILER): Kill.
- (MCOUNT_NAME): New.
- * freebsd-aout.h (FUNCTION_PROFILER): Kill.
- (MCOUNT_NAME): New.
- (PROFILE_COUNT_REGISTER): New.
- * linux.h (FUNCTION_PROFILER): Kill.
- (MCOUNT_NAME): New.
- * x86-64.h (FUNCTION_PROFILER): Kill.
- (MCOUNT_NAME): New.
- * freebsd.h (FUNCTION_PROFILER): Kill.
- (MCOUNT_NAME): New.
-
-2002-11-14 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
-
- * config/arm/arm.h (EXPAND_BUILTIN_VA_ARG,
- FUNCTION_ARG_PASS_BY_REFERENCE): Define.
- * config/arm/arm.c (arm_va_arg,
- arm_function_arg_pass_by_reference): New.
- * config/arm/arm-protos.h: Add prototypes.
-
-2002-11-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-single.h: Fix formatting.
-
-2002-11-14 Zack Weinberg <zack@codesourcery.com>
-
- * tree.c (tree_vec_elt_check_failed): New function.
- * tree.h (TREE_VEC_ELT_CHECK): New checking macro.
- (TREE_VEC_ELT): Use it.
-
- * tree-inline.c (optimize_inline_calls): Don't copy a
- zero-length vector.
-
-2002-11-14 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * diagnostic.c (sorry): Don't repeat "sorry, unimplemented" text.
-
-2002-11-14 Jakub Jelinek <jakub@redhat.com>
-
- * varasm.c (output_addressed_constants) [MINUS_EXPR]: Clear reloc if
- both operands contain local relocations.
- (categorize_decl_for_section): Don't use mergeable sections if
- initializer has any relocations.
-
-2002-11-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-vxworks.h: Fix formatting.
-
-2002-11-13 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi (Testing): Document extra Java testing.
- * doc/sourcebuild.texi (Test Suites): Document libgcj testing.
-
-2002-11-13 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa64-hpux.h (LINK_SPEC): Move "+Accept TypeMismatch" switch to the
- beginning of the spec.
- (LDD_SUFFIX, PARSE_LDD_OUTPUT): Delete.
- (LD_INIT_SWITCH, LD_FINI_SWITCH): Define but don't enable. Add comment
- regarding problems with global constructors when using GNU ld.
-
-2002-11-13 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-solaris.h: Fix formatting.
-
-2002-11-13 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-posix.h: Fix formatting.
-
-2002-11-12 Devang Patel <dpatel@apple.com>
- * gcc.c (display_help): Two new options -Xpreprocessor and -Xassembler.
- (process_command): Same.
- * doc/invoke.texi: Info about these two new options.
-
-2002-11-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (*andorsi3): New.
-
-2002-11-12 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- * doc/install.texi (powerpc-*-linux-gnu*): Update binutils requirement.
-
-2002-11-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (tiny_constant_address_p): Parenthesize
- expressions appropriately.
-
-2002-11-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-win32.h: Fix formatting.
-
-2002-11-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (single_one_operand): Correctly compute
- mask when mode is SImode.
- (single_zero_operand): Likewise.
- * config/h8300/h8300.md (two new anonymous insns): New.
-
-2002-11-12 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/contrib.texi (Contributors): Use GCJ instead of gcj to refer
- to that entire project.
-
-2002-11-12 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * config/mips/t-iris6 (MULTILIB_OSDIRNAMES): Restore old
- directories.
-
-2002-11-11 Zack Weinberg <zack@codesourcery.com>
-
- * params.def (ggc-min-expand, ggc-min-heapsize): New parameters.
- * doc/invoke.texi: Document them.
-
- * ggc-page.c: Include params.h. Remove definitions of
- GGC_MIN_EXPAND_FOR_GC, GGC_MIN_LAST_ALLOCATED. Replace
- GGC_POISON with ENABLE_GC_CHECKING in ifdefs, delete #define.
- (init_gcc): Don't set G.allocated_last_gc here.
- (ggc_collect): Use PARAM_VALUE (GGC_MIN_HEAPSIZE) and
- PARAM_VALUE (GGC_MIN_EXPAND) to decide whether or not to
- perform collection.
- * ggc-simple.c: Similarly.
- * Makefile.in (ggc-common.o, ggc-simple.o): Add $(PARAMS_H) to
- dependencies.
-
-2002-11-11 Kazu Hirata <kazu@cs.umass.edu>
-
- * gthr-dce.h: Fix formatting.
-
-2002-11-11 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- PR c/8467
- * stmt.c (tail_recursion_args): Handle DECL_MODE differing from the
- mode of DECL_RTL case.
-
-2002-11-11 Janis Johnson <janis187@us.ibm.com>
-
- * doc/contrib.texi: Merge in the list from the libstdc++ web pages.
-
-Mon Nov 11 12:06:08 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (construct_container): Fix handling of SSE_CLASS.
-
-2002-11-10 Joel Sherrill <joel@gcc.gnu.org>
-
- * config/m68k/t-crtstuff (crti.o): Use this...
- ($(T)crti.o): ... instead.
- (crtn.o): Use this...
- ($(T)crtn.o): ... instead.
-
-2002-11-10 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR c/8439
- * recog.c (validate_replace_rtx_1) [PLUS]: Simplify only
- if there is something new to be simplified.
-
-2002-11-10 H.J. Lu <hjl@gnu.org>
-
- * calls.c (PUSH_ARGS_REVERSED): Define only if not defined.
- * expr.c (PUSH_ARGS_REVERSED): Likewise.
-
- * config/i386/i386.h (PUSH_ARGS_REVERSED): Set to 1.
-
-2002-11-10 Zack Weinberg <zack@codesourcery.com>
-
- * config/rs6000/sysv4.h: Define NO_IMPLICIT_EXTERN_C here...
- * config/rs6000/linux.h, config/rs6000/linux64.h,
- config/rs6000/windiss.h: ... not here.
-
-2002-11-10 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/mips/netbsd.h (TARGET_OS_CPP_BUILTINS): Define
- __ABICALLS__ if TARGET_ABICALLS.
-
-Sun Nov 10 18:49:21 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (MIN_UNITS_PER_WORD): Define to 8 for x86-64 libgcc.
-
-2002-11-10 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * c-decl.c (grokdeclarator): Make error for duplicate type
- qualifiers into a pedwarn, disabled for C99.
-
-2002-11-10 Hans-Peter Nilsson <hp@bitrange.com>
-
- * config/mmix/mmix.h (FUNCTION_ARG_CALLEE_COPIES): Define the same
- as FUNCTION_ARG_PASS_BY_REFERENCE.
-
-2002-11-09 Zack Weinberg <zack@codesourcery.com>
-
- * doc/install.texi: Add *-*-vxworks* specific installation
- instructions.
-
- * config/vxlib.c: Rewrite using generation numbers to identify
- valid TSD keys.
-
-Sat Nov 9 00:10:54 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_machine_dependent_reorg): Fix even more side cases.
-
-2002-11-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.h (STARTING_FRAME_OFFSET): Change offset for TARGET_64BIT to 16.
-
- * config.gcc (hppa*64*-*-linux*): Shorten lines in tm_file define.
- (hppa*64*-*-hpux11*): Likewise. Use elfos.h with gas.
- * pa.c (output_millicode_call): Use symbol difference rather than
- $PIC_pcrel$0 when using HP assembler.
- * pa64-hpux.h (TARGET_GAS): Define to 1 or 0 depending on whether or
- not elfos.h (i.e., gas) is being used.
- (ASM_FILE_START, STRING_ASM_OP, TEXT_SECTION_ASM_OP,
- DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP, ASM_OUTPUT_ALIGNED_COMMON,
- ASM_OUTPUT_ALIGNED_LOCAL, GLOBAL_ASM_OP, ASM_DECLARE_FUNCTION_NAME,
- ASM_OUTPUT_EXTERNAL, ASM_OUTPUT_EXTERNAL_LIBCALL,
- ASM_OUTPUT_INTERNAL_LABEL, ASM_GENERATE_INTERNAL_LABEL): Define when
- using elfos.h.
- (TARGET_ASM_GLOBALIZE_LABEL): Undefine when using elfos.h.
- (DWARF2_ASM_LINE_DEBUG_INFO): Delete.
- (ASM_FILE_START): Add standard .SPACE and .SUBSPA defines when not
- using elfos.h.
- (TEXT_SECTION_ASM_OP, READONLY_DATA_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
- BSS_SECTION_ASM_OP): New HP style defines when not using elfos.h.
- (TARGET_ASM_NAMED_SECTION, MAKE_DECL_ONE_ONLY, ASM_WEAKEN_LABEL):
- Don't define when not using elfos.h.
- (ASM_DECLARE_RESULT): Don't define.
- * doc/install.texi (hppa*-hp-hpux*): Remove statement that HP assembler
- doesn't work on hppa64-hp-hpux11.
- (hppa*-hp-hpux11): Update.
-
-2002-11-09 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/mips/netbsd.h (SUBTARGET_ASM_SPEC): Don't pass -KPIC
- to the assembler if -mno-abicalls was specified.
-
-2002-11-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa-linux.h (PREFERRED_DEBUGGING_TYPE, DWARF2_ASM_LINE_DEBUG_INFO,
- ASM_OUTPUT_DEF): Delete.
-
-2002-11-09 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (COMMAND_LINE_OPTIONS): Fix -Wimplicit.
-
-2002-11-08 Roger Sayle <roger@eyesopen.com>
-
- * real.c (real_sqrt): Update comment with bibliographic reference.
-
-Fri Nov 8 13:33:58 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (sse_loadss, sse2_loadsd): Fix expander.
-
-Fri Nov 8 13:25:41 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_machine_dependent_reorg): Fix handling of empty functions.
-
-Fri Nov 8 13:01:42 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * builtins.c (expand_builtin_mathfn): Handle floor/ceil/trunc/round/nearbyint
- (expand_builtin): Likewise.
- * builtins.def: Add
- __builtin_floor, __builtin_floorf, __builtin_floorl
- __builtin_ceil, __builtin_ceilf, __builtin_ceill
- __builtin_round, __builtin_roundf, __builtin_roundl
- __builtin_trunc, __builtin_truncf, __builtin_truncl
- __builtin_nearbyint, __builtin_nearbyintf, __builtin_nearbyintl.
- * genopinit.c (optabs): Initialize the new optabs.
- * optab.c (init_optabs): Likewise.
- * optabs.h (optab_index): Add OTI_floor, OTI_ceil, OTI_trunc,
- OTI_round, OTI_nearbyint.
- (floor_optab, ceil_optab, trunc_optab, round_optab, nearbyint_optab): New.
- * doc/md.texi: Document new named patterns.
- * doc/extend.texi (builtin functions) Document
- floor, floorf, floorl, ceil, ceilf,
- ceill, round, roundf, roundl, trunc,
- truncf, truncl, nearbyint, nearbyintf, nearbyintl.
-
-Fri Nov 8 11:36:11 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (sse_movdfcc, sse_movsfcc): Fix typo in previous patch.
-
-2002-11-08 Dale Johannesen <dalej@apple.com>
-
- * dbxout.c (dbxout_type): Fix stabs info for vector types.
-
-2002-11-08 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/8497
- PR preprocessor/8501
- * cpptrad.c (scan_out_logical_line): A '#' from a macro doesn't
- start a directive. In assembler, #NUM is not a line directive.
-
-2002-11-08 Neil Booth <neil@daikokuya.co.uk>
-
- * cppmain.c (cpp_preprocess_file): Loop to pop any -included
- buffers.
-
-2002-11-08 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (two anonymous test insns): New.
-
-Fri Nov 8 11:20:19 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * jump.c (mark_jump_label): Handle subregs of label_refs.
-
-Thu Nov 7 21:54:22 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (sse_movdfcc, sse_movsfcc): Avoid overactive matching.
- * i386.c (ix86_expand_fp_movcc): Match the reversed cases.
-
-2002-11-07 David Mosberger <davidm@hpl.hp.com>
-
- * config/ia64/crtend.asm: Include "auto-host.h".
- [HAVE_INITFINI_ARRAY]: Invoke __do_global_ctors_aux via .init_array.
- * config/ia64/crtbegin.asm: Similarly.
- * config/ia64/t-ia64 (crtbegin.o): Include from current directory.
- (crtend.o, crtbeginS.o, crtendS.o): Likewise.
-
- * aclocal.m4 (gcc_AC_INITFINI_ARRAY): New.
- * configure.in: Use it if --enable-initfini-array not specified.
- * doc/install.texi (Configuration): Document --enable-initfini-array.
- * configure, config.in: Rebuild.
-
-2002-11-07 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/arm/arm-protos.h (arm_get_frame_size)
- (thumb_get_frame_size): New prototypes.
- * config/arm/arm.c (arm_get_frame_size)
- (thumb_get_frame_size): New functions.
- (use_return_insn, arm_output_epilogue, arm_output_function_epilogue)
- (arm_compute_initial_elimination_offset, arm_expand_prologue): Use
- arm_get_frame_size.
- (thumb_expand_prologue, thumb_expand_epilogue): Use
- thumb_get_frame_size.
- * config/arm/arm.h (PREFERRED_STACK_BOUNDARY): Define.
- (machine_function): Add frame_size member.
- (THUMB_INITIAL_ELIMINATION_OFFSET): Use thumb_get_frame_size.
-
-2002-11-07 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.c (bit_count): Make argument unsigned long. Return unsigned.
- Adjust code to use portable unsigned bit manipulation.
- (insn_flags, tune_flags): Change type to unsigned.
- (struct processors): Make flags unsigned long.
- (arm_override_options): Change type of count and current_bit_count
- to unsigned.
-
-2002-11-07 Richard Earnshaw <rearnsha@arm.com>
-
- * arm/elf.h (TYPE_OPERAND_FMT): Prefix type with %.
-
-Thu Nov 7 15:50:18 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (DWARF_FRAME_RETURN_COLUMN): Use DWARF_FRAME_REGNUM.
-
-Thu Nov 7 11:18:01 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * reg-stack.c (compensate_edge): Fix sanity check.
-
-2002-11-05 Geoffrey Keating <geoffk@apple.com>
-
- * config.gcc: Don't create crtbegin, crtend on Darwin; do create
- crt2.o. Rearrange t-darwin makefiles.
- * crtstuff.c [OBJECT_FORMAT_MACHO]: Delete.
- * unwind-dw2-fde-darwin.c: New.
- * unwind-dw2-fde-glibc.c: Correct comment.
- * unwind-dw2-fde.c (__register_frame_info_bases)
- [DWARF2_OBJECT_END_PTR_EXTENSION]: Clear fde_end.
- (classify_object_over_fdes): Use last_fde.
- (add_fdes): Likewise.
- (linear_search_fdes): Likewise.
- * unwind-dw2-fde.h (struct object)
- [DWARF2_OBJECT_END_PTR_EXTENSION]: Add fde_end field.
- (last_fde): New.
- * config/darwin.h (STARTFILE_SPEC): Include crt2.o not crtbegin.o.
- (ENDFILE_SPEC): No crtend.o.
- * config/t-darwin: New.
- * config/i386/t-darwin: Delete.
- * config/darwin-crt2.c: New.
- * config/rs6000/t-darwin: Delete contents duplicated in t-rs6000
- or config/t-darwin.
-
-2002-11-06 Douglas B Rupp <rupp@gnat.com>
-
- * config/i386/i386-interix.h (TARGET_SUBTARGET_DEFAULT): Or
- MASK_MS_BITFIELD_LAYOUT
- (SUBTARGET_OVERRIDE_OPTIONS): Warn about and turn off
- MS bitfields for Objective-C.
- (PCC_BIT_FIELD_TYPE_TEST, GROUP_BITFIELDS_BY_ALIGN): Remove
- defines.
-
- * config/i386/i386.c (ix86_ms_bitfield_layout): New function.
- (TARGET_MS_BITFIELD_LAYOUT_P): Define to above function.
- (TARGET_USE_MS_BITFIELD_LAYOUT): Define.
-
- * config/i386/i386.h (MASK_MS_BITFIELD_LAYOUT: New mask.
- TARGET_USE_MS_BITFIELD_LAYOUT): New macro.
- (TARGET_SWITCHES): Add above mask.
-
- * testsuite/gcc.dg/bf-ms-layout.c: New test case.
- * testsuite/gcc.dg/bf-no-ms-layout.c: New test case.
- * testsuite/gcc.dg/i386-bitfield1.c (dg-options): Add appropriate
- flags for interix.
-
-Wed Nov 6 18:54:47 2002 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mips/mips.h (ASM_OUTPUT_ADDR_DIFF_ELT): Output
- .gpword/.gpdword for ABI_N32 and ABI_64 too, if using the GNU
- assembler.
- * config/mips/mips.md (tablejump_internal3): Output .cpadd
- before jump on ABI_N32 too.
- (tablejump_internal4): Ditto on ABI_64. Increase maximum
- length to match.
-
-Wed Nov 6 17:16:48 CET 2002 Jan Hubicka <jh@.suse.cz>
-
- * i386.md (negsf splitter): Accept memory operand in second register.
- (abssf/absdf splitters): Simplify
- (sse_loadss, sse_loadsd): Turn into expander.
-
-2002-11-06 David Edelsohn <edelsohn@gnu.org>
-
- PR target/8480
- * config/rs6000/rs6000.md (movdi_internal64): Discourage
- FPR to FPR moves.
-
-2002-11-06 Janis Johnson <janis187@us.ibm.com>
-
- * doc/contrib.texi: Merge in the list from the Java web pages.
-
-2002-11-06 David O'Brien <obrien@FreeBSD.org>
-
- * config/sparc/freebsd: Fix typo.
-
-2002-11-06 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa64-hpux.h (LDD_SUFFIX, PARSE_LDD_OUTPUT): Define.
-
-2002-11-06 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mips/mips.md (call_value_multiple_internal2): Use dla for
- non-SImode addresses.
-
-Tue Nov 5 14:34:36 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (float_truncate SSE splitter): Ensure that operand is not
- stack register.
- (float SSE splitters): Reorder conditional.
-
-2002-11-05 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/elf.h (LIB_SPEC): Add "-lhal".
-
-2002-11-05 John David Anglin <dave2hiauly1.hia.nrc.ca>
-
- * pa64-hpux.h (LIB_SPEC): Fix p and pg options.
- (STARTFILE_SPEC): Remove p and pg options.
-
-2002-11-05 Andrew Haley <aph@redhat.com>
-
- * fold-const.c (fold): Don't transform (a0 op compound(a1,a2))
- to (compound(a1,a0 op a2)) if a0 or a1 have side effects.
-
-2002-11-05 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.h (CANNOT_CHANGE_MODE_CLASS): Move comment to...
- * config/mips/mips.c (mips_cannot_change_mode_class): ...here.
-
-2002-11-04 Zack Weinberg <zack@codesourcery.com>
-
- * gthr-vxworks.h: Rewritten from scratch.
- * config/vxlib.c: New file.
- * config/t-vxworks: Add config/vxlib.c to LIB2FUNCS_EXTRA.
- * config/rs6000/t-vxworks: Add config/vxlib.c to
- LIB2FUNCS_EXTRA here too, because of clash with
- config/rs6000/t-ppccomm.
-
-2002-11-04 Dale Johannesen <dalej@apple.com>
-
- * doloop.c (doloop_modify_runtime): Fix loop count computation
- for unrolled loops.
- * loop.c (loop_invariant_p): Support calling from unroller.
-
-2002-11-04 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_decompose_address): Use arg_pointer_rtx
- for comparison.
-
-2002-11-04 Aldy Hernandez <aldyh@redhat.com>
-
- * hard-reg-set.h (REG_CANNOT_CHANGE_MODE_P): New.
-
- * config/rs6000/rs6000.h (CLASS_CANNOT_CHANGE_MODE_P): Remove.
- (CLASS_CANNOT_CHANGE_MODE): Remove.
- (CANNOT_CHANGE_MODE_CLASS): New.
-
- * config/alpha/alpha.h: Same.
-
- * config/ia64/ia64.h: Same.
-
- * config/mips/mips.h: Same.
-
- * config/s390/s390.h: Same.
-
- * config/sh/sh.h: Same.
-
- * config/pa/pa64-regs.h: Same.
-
- * config/sh/sh-protos.h (sh_cannot_change_mode_class): Add prototype.
-
- * config/sh/sh.c (sh_cannot_change_mode_class): New.
-
- * config/mips/mips-protos.h (mips_cannot_change_mode_class): Add
- prototype.
-
- * config/mips/mips.c (mips_cannot_change_mode_class): New.
-
- * doc/tm.texi (Register Classes): Remove
- CLASS_CANNOT_CHANGE_MODE and CLASS_CANNOT_CHANGE_MODE_P.
- Document CANNOT_CHANGE_MODE_CLASS.
-
- * reload.c (push_reload): Use CANNOT_CHANGE_MODE_CLASS.
- (push_reload): Same.
-
- * simplify-rtx.c (simplify_subreg): Same.
-
- * reload1.c (choose_reload_regs): Same.
-
- * recog.c (register_operand): Same.
-
- * regrename.c (mode_change_ok): Change to use new
- CANNOT_CHANGE_MODE_CLASS infrastructure.
-
- * regclass.c (cannot_change_mode_set_regs): New.
- Declare subregs_of_mode.
- (regclass): Use subregs_of_mode.
- Remove references to reg_changes_mode.
- (init_reg_sets_1): Remove class_can_change_mode and
- reg_changes_mode code.
- (invalid_mode_change_p): New.
- (dump_regclass): Use invalid_mode_change_p instead of
- class_can_change_mode.
- (regclass): Same.
- (record_operand_costs): Do not set reg_changes_mode.
-
- * local-alloc.c (struct qty): Remove changes_mode field.
- (alloc_qty): Remove changes_mode initialization.
- (update_qty_class): Remove set of changes_mode.
- (find_free_reg): Use subregs_of_mode.
-
- * global.c (find_reg): Use subregs_of_mode info.
-
- * rtl.h (cannot_change_mode_set_regs): New prototype.
- (invalid_mode_change_p): Same.
- (REG_CANNOT_CHANGE_MODE_P): New macro.
-
- * flow.c (mark_used_regs): Calculate subregs_of_mode. Remove
- REG_CHANGES_MODE.
- (life_analysis): Clear subregs_of_mode.
-
- * combine.c (subst): Pass class to CLASS_CANNOT_CHANGE_MODE_P.
- Remove use of CLASS_CANNOT_CHANGE_MODE.
- (simplify_set): Same.
- (gen_lowpart_for_combine): Calculate subregs_of_mode. Remove
- REG_CHANGES_MODE.
-
- * regs.h: Add extern for subregs_of_mode;
- Include hard-reg-set and basic-block.
- (REG_CHANGES_MODE): Delete.
-
-2002-11-03 Roger Sayle <roger@eyesopen.com>
-
- * real.c (real_sqrt): New function to calculate square roots.
- * real.h (real_sqrt): Add function prototype.
- * builtins.c (fold_builtin): Fold sqrt of constant argument.
- * simplify-rtx.c (simplify_unary_operation): Simplify sqrt
- of constant argument.
-
-2002-11-03 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * jump.c (never_reached_warning): Don't set contains_insn until the
- first line note is seen.
-
-2002-11-03 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (movti_string): Use string instructions.
-
-2002-11-03 Roger Sayle <roger@eyesopen.com>
-
- PR c/7128
- * c-typeck.c (c_expand_asm_operands): Defend against
- error_mark_nodes in the output argument to avoid ICE.
-
-2002-11-03 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR middle-end/8408
- * genrecog.c (preds): Handle ADDRESSOF.
- (validate_pattern): Mark it as an lvalue.
-
-2002-11-02 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_override_options): Use string
- instructions when optimizing for size.
-
-2002-11-02 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h: Fix comment typos.
- * config/h8300/h8300.md: Likewise.
- * config/h8300/lib1funcs.asm: Likewise.
-
-2002-11-02 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- Revert this change:
-
- *doc/install.texi (Installing GCC: Configuration): Clarify
- the only supported ways to configure gcc.
-
-2002-11-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (anonymous and:QI pattern): Use 'n'
- instead of 'O' for the constraint for the second operand.
-
-2002-11-01 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/8391
- * toplev.c (rest_of_compilation): Do not refuse to output code for
- an inline function in a local class.
-
-2002-11-01 David O'Brien <obrien@FreeBSD.org>
-
- * config/sparc/freebsd.h (CPP_CPU64_DEFAULT_SPEC): Define __arch64__.
- (TRANSFER_FROM_TRAMPOLINE): Reformat.
- Add comment.
-
-2002-11-01 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (CAN_ELIMINATE): Simplify.
-
-2002-11-01 Toshiyasu Morita <toshiyasu.morita@hsa.hitachi.com>
-
- * config/h8300/h8300.h (OPTIMIZATION_OPTIONS): New.
-
-2002-11-01 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/ia64.h (MASK_INLINE_DIV_LAT): Remove.
- (MASK_INLINE_DIV_THR): Remove.
- (TARGET_INLINE_DIV_LAT): Remove.
- (TARGET_INLINE_DIV_THR): Remove.
- (TARGET_INLINE_DIV): Remove.
- (MASK_INLINE_FLOAT_DIV_LAT): New macro.
- (MASK_INLINE_FLOAT_DIV_THR): New macro.
- (MASK_INLINE_INT_DIV_LAT): New macro.
- (MASK_INLINE_INT_DIV_THR): New macro.
- (TARGET_INLINE_FLOAT_DIV_LAT): New macro.
- (TARGET_INLINE_FLOAT_DIV_THR): New macro.
- (TARGET_INLINE_INT_DIV_LAT): New macro.
- (TARGET_INLINE_INT_DIV_THR): New macro.
- (TARGET_INLINE_FLOAT_DIV): New macro.
- (TARGET_INLINE_INT_DIV): New macro.
- * config/ia64/ia64.md (divsi3): Change to use new macros.
- (modsi3): Ditto.
- (udivsi3): Ditto.
- (umodsi3): Ditto.
- (divsi3_internal): Ditto.
- (divdi3): Ditto.
- (moddi3): Ditto.
- (udivdi3): Ditto.
- (umoddi3): Ditto.
- (divdi3_internal_lat): Ditto.
- (divdi3_internal_thr): Ditto.
- (divsf3): Ditto.
- (divsf3_internal_lat): Ditto.
- (divsf3_internal_thr): Ditto.
- (divdf3): Ditto.
- (divdf3_internal_lat): Ditto.
- (divdf3_internal_thr): Ditto.
- (divtf3): Ditto.
- (divtf3_internal_lat): Ditto.
- (divtf3_internal_thr): Ditto.
- * config/ia64/ia64.c (ia64_override_options): Change
- to check new macros for conflicts in settings.
- * doc/invoke.texi (-minline-divide-min-latency): Remove.
- (-minline-divide-max-throughput): Remove.
- (-minline-float-divide-min-latency): New.
- (-minline-float-divide-max-throughput): New.
- (-minline-int-divide-min-latency): New.
- (-minline-int-divide-max-throughput): New.
-
-2002-11-01 Richard Earnshaw (rearnsha@arm.com)
-
- PR target/7856
- * arm.c (use_return_insn): Don't use a return insn if there are
- saved integer regs, but LR is not one of them.
-
-Fri Nov 1 10:33:15 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * expr.c (emit_move_insn): Use SCALAR_FLOAT_MODE_P
- * machmode.h (SCALAR_FLOAT_MODE_P): New macro.
-
-Thu Oct 31 18:20:50 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (sse_loadss, sse_loadsd): Canonicalize; add expander
- (movps, movpd splitters): Use canonical form.
- (movv2di): Fix merge problem.
-
-Thu Oct 31 16:22:31 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (negdf2_ifs_rex64): Don't allow GPR operand.
-
-2002-10-31 Nathanael Nerode <neroden@gcc.gnu.org>
-
- PR optimization/6162
- * doc/md.texi: Document restriction on commutative operand
- specification.
-
-2002-10-31 Eric Christopher <echristo@redhat.com>
-
- * explow.c (convert_memory_address): Use shallow_copy_rtx.
-
-2002-10-31 Steve Ellcey <sje@cup.hp.com>
-
- * expmed.c (store_bit_field): Check FUNCTION_ARG_REG_LITTLE_ENDIAN.
-
-2002-10-31 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (MEMBER_TYPE_FORCES_BLK): Set for non-floats.
-
-Thu Oct 31 Dale Johannesen <dalej@apple.com>
-
- * config/rs6000/darwin.h: Correct formatting in previous.
-
-Thu Oct 31 Dale Johannesen <dalej@apple.com>
-
- * config/rs6000/darwin.h: Enable -falign-xxx options.
-
-Thu Oct 31 18:08:00 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (override_options): Set defaults for flag_omit_frame_pointer,
- flag_asynchronous_unwind_tables, flag_pcc_struct_return.
- * i386.c (optimization_options): Set flag_omit_frame_pointer,
- flag_asynchronous_unwind_tables, flag_pcc_struct_return to 2.
- Do not clear -momit-leaf-frame-pointer when profiling.
- (ix86_frame_pointer_required): Frame pointer is always required when
- profiling.
-
-Thu Oct 31 16:09:44 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (negdf2_ifs_rex64): Don't allow GPR operand.
-
-Thu Oct 31 12:45:55 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (binary_logical_operator): Declare.
- * sh.c (binary_logical_operator): New function.
- * sh.md (xordi3+1): New combiner splitter pattern.
-
-2002-10-31 David O'Brien <obrien@FreeBSD.org>
-
- * config/sparc/freebsd.h (TRANSFER_FROM_TRAMPOLINE): Define
- __enable_execute_stack function.
-
-2002-10-30 Zack Weinberg <zack@codesourcery.com>
-
- * gthr.h, gthr-dce.h, gthr-posix.h, gthr-rtems.h,
- gthr-solaris.h, gthr-win32.h: Remove __gthread_key_dtor.
- * unwind-sjlj.c (fc_key_dtor): Delete.
- (fc_key_init): Adjust __gthread_key_create call to match.
-
-2002-10-30 Aldy Hernandez <aldyh@redhat.com>
-
- * c-common.c: Add GTY to vector_type_node_list.
-
-2002-10-30 John David Anglin <dave@hiauly.hia.nrc.ca>
-
- * pa-linux.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Define.
- * pa-protos.h (attr_length_millicode_call, attr_length_call,
- pa_init_machine_status): Declare new global functions.
- * pa.c (void copy_fp_args, length_fp_args, get_plabel): Declare and
- implement new functions.
- (attr_length_millicode_call, attr_length_call): Implement.
- (total_code_bytes): Change type to long.
- (pa_output_function_prologue): Compute total_code_bytes on TARGET_64BIT.
- Reset counter if flag_function_sections.
- (output_deferred_plabels): Set output alignment to 3 for TARGET_64BIT.
- (output_cbranch): Move call to gen_label_rtx.
- (output_millicode_call): Rewrite adding long TARGET_64BIT call, expose
- delay slot in all variants, shorten pc-relative calls.
- (output_call): Rewrite adding long TARGET_64BIT call, improved delay
- slot usage and exposure, various new call variants, and shortened
- sequences for some variants on TARGET_PA_20.
- Miscellaneous format changes.
- * pa.h (total_code_bytes): Change type to long.
- (MASK_LONG_CALLS, TARGET_LONG_CALLS, TARGET_LONG_ABS_CALL,
- TARGET_LONG_PIC_SDIFF_CALL, TARGET_LONG_PIC_PCREL_CALL): Define.
- (TARGET_SWITCHES): Add "-mlong-calls" and "-mno-long-calls" options.
- (EXTRA_CONSTRAINT, GO_IF_LEGITIMATE_ADDRESS,
- LEGITIMIZE_RELOAD_ADDRESS): Don't use long floating point loads and
- stores on TARGET_ELF32.
- *pa.md (define_delay): Allow insns in delay on TARGET_PORTABLE_RUNTIME.
- (unnamed patterns for mulsi3, divsi3, udivsi3, modsi3, umodsi3 and
- canonicalize_funcptr_for_compare expanders): Calculate attribute length
- attr_length_millicode_call().
- (call_internal_symref, call_value_internal_symref): Clobber register 1.
- Calculate attribute length using attr_length_call().
- (call_internal_reg_64bit, call_value_internal_reg_64bit): Move gp load
- to delay slot.
- (sibcall, sibcall_value): Rewrite.
- (sibcall_internal_symref, sibcall_value_internal_symref): Clobber
- register 1. Use attr_length_call().
- (sibcall_internal_symref_64bit, sibcall_value_internal_symref_64bit):
- New patterns.
- (unamed pattern for canonicalize_funcptr_for_compare): Rewrite.
- * som.h (MEMBER_TYPE_FORCES_BLK): Define.
- * t-pa64 (TARGET_LIBGCC2_CFLAGS): Add "-mlong-calls".
- * doc/invoke.texi (mlong-calls): Document.
-
-2002-10-30 Roger Sayle <roger@eyesopen.com>
-
- * fold-const.c (fold_binary_op_with_conditional_arg): Improve
- handling of cases where one or both branches of the conditional
- have void type, i.e. throw an exception or don't return.
- (fold): Only apply (and undo) type conversion to the non-void
- branches of a COND_EXPR.
-
-2002-10-30 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/8333
- * varasm.c (asm_output_aligned_bss): Do not call
- ASM_GLOBALIZE_LABEL.
-
-2002-10-30 David Edelsohn <edelsohn@gnu.org>
- Torbjorn Granlund <tege@swox.com>
-
- * config/rs6000/rs6000.md (load_toc_v4_PIC_1): Use preferred form
- for addressibility.
- (load_toc_v4_PIC_1b): Same.
-
-2002-10-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_eightbit_constant_address_p):
- Truncate the addresses for H8/300 using HImode.
-
-Tue Oct 29 23:28:10 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (negdf splitter): Fix construction of the constant.
-
-Tue Oct 29 20:47:06 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (negsf, negdf): Reorganize to use vector modes
- for SSE variants.
- (abssf, absdf): Use force_reg.
- (movv4sf, movv2df): New splitters.
- * i386.h (PREDICATE_CODES): add zero_extended_scalar_load_operand
- * i386.c (zero_extended_scalar_load_operand
-
- * i386-protos.h (ix86_expand_call): Update prototype.
- * i386.c (ix86_function_ok_for_sibcall): Handle 64bit
- (ix86_expand_call): Use r11 for indirect sibcalls.
- * i386.md (call, call_value, untyped_call, call_value_pop):
- update x86_expand_call call.
- (sibcall, sibcall_value): new patterns
- (call_rex64, call_value_rex64): Do not accept sibcalls.
- (sibcall_rex64, sibcall_value_rex64,
- sibcall_rex64_v, sibcall_value_rex64_v): New.
-
-Tue Oct 29 15:37:39 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * toplev.c (rest_of_compilation): Reorganize way reg_scan is called
- before final pass.
-
-2002-10-29 Hans-Peter Nilsson <hp@bitrange.com>
-
- * toplev.c (rest_of_type_compilation): Return early in case of
- errors.
- (check_global_declarations): Don't call debug_hooks->global_decl
- in case of errors.
-
-2002-10-28 Andreas Bauer <baueran@in.tum.de>
-
- * doc/c-tree.texi (Tree overview): Fix typos.
-
-2002-10-29 Phil Edwards <pme@gcc.gnu.org>
-
- * Makefile.in (gnucompare*): Only record bad comparisons
- if there really was a bad comparison.
-
-Tue Oct 29 19:32:16 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (CONST_DOUBLE_OK_FOR_LETTER_P): Remove 'H'
- * i386.md (movsf*, movdf*): Use 'C' instead of 'H'
- * md.texi (machine dependent constraints): Document 'C'
-
- * simplify-rtx.c (simplify_subreg): Fix const_int->vector subregging.
-
- * i386.c (ix86_expand_vector_move): Fix.
-
- * i386.c (ix86_expand_builtin): Use sse2_maskmovdqu_rex64.
- * i386.md (sse2_maskmovdqu_rex64): New pattern
-
- PR target/8322
- * xmmintrin.h (_mm_stream_pi, _mm_stream_pd): Fix cast.
- (ix86_init_mmx_sse_builtins): Fix type.
-
-2002-10-29 Jason Thorpe <thorpej@wasabisystems.com>
-
- * gthr-posix.h: Include <unistd.h> for feature tests.
- (sched_get_priority_max, sched_get_priority_min)
- (pthread_getschedparam, pthread_setschedparam): Only use
- if _POSIX_THREAD_PRIORITY_SCHEDULING is defined.
- (__gthread_objc_thread_set_priority): Don't treat all nonzero
- returns from sched_get_priority_max and sched_get_priority_min
- as an error.
-
-2002-10-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (TARGET_DEFAULT): Make it
- MASK_QUICKCALL.
-
-2002-10-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_eightbit_constant_address_p): New.
- (h8300_tiny_constant_address_p): Likewise.
- * config/h8300/h8300.h (EIGHTBIT_CONSTANT_ADDRESS_P): Use
- h8300_eightbit_constant_address_p.
- (TINY_CONSTANT_ADDRESS_P): Use h8300_tiny_constant_address_p.
- * config/h8300/h8300-protos.h: Add the prototypes for the two
- new functions.
-
-2002-10-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * reload1.c (update_eliminables): Unconditionally check if
- frame_pointer_needed has changed.
-
-Tue Oct 29 15:37:39 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * toplev.c (rest_of_compilation): Reorganize way reg_scan is called
- before final pass.
-
-2002-10-29 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR optimization/8334
- * expr.c (expand_expr) [PLUS]: Don't use simplify_binary_operation;
- check for zero operands explicitly.
-
-2002-10-29 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md (extv, extzv, insv): Set size of referenced
- memory after adjusting to BLKmode.
-
-2002-10-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (MASK_*): New.
- (TARGET_*): Use MASK_*.
-
-2002-10-28 Zack Weinberg <zack@codesourcery.com>
-
- * config.gcc (*-*-vxworks, powerpc-wrs-vxworks*): New stanzas.
- * config/t-vxworks, config/vxworks.h, config/rs6000/t-vxworks,
- config/rs6000/vxworks.h: New files.
- * config/rs6000/sysv4.h: Rip out -mvxworks and all related code.
-
- * config.gcc (alpha*-*-vxworks*, arm-*-vxworks*,
- i?86-wrs-vxworks*, i960-wrs-vxworks* [all],
- m68k-wrs-vxworks*, mips-wrs-vxworks, powerpc-wrs-vxworks*,
- powerpcle-wrs-vxworks*, sparc*-wrs-vxworks* [all],
- sparc-*-vxsim*): Delete stanzas.
- * gthr-vxworks.h: Rip out all substantive code and just
- include gthr-single.h.
-
- * config/alpha/vxworks.h, config/arm/vxarm.h,
- config/i386/vxi386.h, config/i960/t-vxworks960,
- config/i960/vx960-coff.h, config/i960/vx960.h,
- config/m68k/t-vxworks68, config/m68k/vxm68k.h,
- config/mips/vxworks.h, config/rs6000/vxppc.h,
- config/sparc/t-vxsparc, config/sparc/t-vxsparc64,
- config/sparc/vxsim.h, config/sparc/vxsparc.h,
- config/sparc/vxsparc64.h: Delete files.
-
-2002-10-28 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (*-*-netbsd*): Add NETBSD_ENABLE_PTHREADS to
- tm_defines if pthreads are enabled.
- * config/netbsd.h (LIB_SPEC): Only support the -pthread option
- if NETBSD_ENABLE_PTHREADS is defined.
-
-2002-10-28 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog.1: Fix typos.
- * cse.c: Fix a comment typo.
- * reload1.c: Likewise.
-
-2002-10-27 Hans-Peter Nilsson <hp@bitrange.com>
-
- * fixinc/inclhack.def (libc1_G_va_list): Correct test_text.
- * fixinc/tests/base/_G_config.h: New file.
-
-2002-10-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * combine.c: Fix comment formatting.
- * loop.c: Likewise.
- * real.c: Likewise.
- * regclass.c: Likewise.
- * regmove.c: Likewise.
- * regrename.c: Likewise.
- * reg-stack.c: Likewise.
- * reload1.c: Likewise.
- * reload.c: Likewise.
- * reload.h: Likewise.
- * unroll.c: Likewise.
-
-2002-10-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * reload1.c (reload): Fix a comment typo.
-
-Sun Oct 27 10:15:24 CET 2002 Jan Hubicka <jh@suse.cz>
-
- * linux64.h (DEFAULT_PCC_STRUCT_RETURN): Define.
-
-2002-10-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * Makefile.in (dwarf2out.o): Add dependendcy on hashtab.h.
- * dwarf2out.c: Include hashtab.h.
- (is_main_source): New static variable.
- (attr_checksum, die_checksum): Modified to handle die references.
- (same_loc_p, same_dw_val_p, same_attr_p, same_die_p, same_die_p_wrap,
- unmark_all_dies, htab_cu_hash, htab_cu_eq, htab_cu_del, check_duplicate_cu,
- record_comdat_symbol_number): New static functions.
- (output_comp_unit, compute_section_prefix, is_type_die, break_out_includes,
- mark_dies, unmark_dies, dwarf2out_start_source_file): Modified.
- * toplev.c (rest_of_decl_compilation): Call of dwarf2out_decl for type
- declarations added.
-
-2002-10-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (initial_offset): Change to
- h8300_initial_elimination_offset.
- * config/h8300/h8300.h (INITIAL_ELIMINATION_OFFSET): Use
- h8300_initial_elimination_offset.
- * config/h8300/h8300-protos.h: Update the prototype.
-
-2002-10-26 Hans-Peter Nilsson <hp@bitrange.com>
-
- * config/mmix/mmix.h (LIBCALL_VALUE): Use
- MMIX_RETURN_VALUE_REGNUM, not MMIX_OUTGOING_RETURN_VALUE_REGNUM.
- (FUNCTION_VALUE_REGNO_P): Similar, but move code to...
- * config/mmix/mmix.c (mmix_function_value_regno_p): New.
- * config/mmix/mmix-protos.h: Remove needless ifdefs on TREE_CODE
- and RTX_CODE.
- (mmix_function_value_regno_p): Declare.
-
- * config/mmix/mmix.md ("fixuns_truncdfdi2"): Replace unsigned_fix,
- invalid for floating point mode result, with fix.
-
-Fri Oct 25 00:04:21 2002 Alexandre Oliva <aoliva@redhat.com>
-
- * Makefile.in (GCC_FOR_TARGET): Add -L$(objdir)/../ld.
- (STAGE2_FLAGS_TO_PASS): Pass GCC_FOR_TARGET.
- (stage1_build): Likewise.
-
-2002-10-25 Mike Stump <mrs@apple.com>
-
- Fixes gcc.dg/warn-1.c.
- * c-typeck.c (warn_for_assignment): Don't print argument number,
- if zero.
-
-Sat Oct 26 01:44:46 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * toplev.c (dump_file_index): Add DFI_ce3.
- (dump_file_info): Likewise.
- (rest_of_compilation): Run first ifcvt pass before tracer.
-
-2002-10-25 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (BITS_BIG_ENDIAN): Remove.
-
-2002-10-25 Richard Henderson <rth@redhat.com>
-
- * real.c (real_to_decimal): If the >1 tens reduction loop results
- in a negative exponent, fall into the <1 pten computation.
-
-2002-10-25 Zack Weinberg <zack@codesourcery.com>
-
- PR middle-end/6994
- * c-objc-common.c (inline_forbidden_p): Can not inline
- functions containing structures or unions containing VLAs.
- * tree-inline.c (walk_tree): For all class 't' nodes, walk
- TYPE_SIZE and TYPE_SIZE_UNIT.
- (copy_tree_r): Copy types if they are variably modified.
-
-2002-10-25 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md: Remove old-style peepholes.
-
-2002-10-25 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_decompose_address): Do not range check the
- displacement if base or index is the argument pointer register.
-
-2002-10-24 Hans-Peter Nilsson <hp@bitrange.com>
-
- PR other/3337
- PR bootstrap/6763
- PR bootstrap/8122
- * fixinc/inclhack.def (libc1_G_va_list): New fix.
- * fixinc/fixincl.x: Regenerate.
- * config/i386/linux.h: Move MD_FALLBACK_FRAME_STATE_FOR inside
- ifndef IN_LIBGCC2. Wrap it together with signal.h and
- sys/ucontext.h inclusion in ifndef USE_GNULIBC_1.
- * configure.in (gcc_AC_CHECK_DECLS): Check vasprintf too.
- * config.in, configure: Regenerate.
-
-2002-10-24 Igor Shevlyakov <igor@microunity.com>
-
- * varasm.c (struct rtx_const): Array size 16 for V16QImode.
-
-2002-10-24 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.c (x86_output_mi_thunk): Fix x86_64 pic jump.
-
-2002-10-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (initial_offset): Simplify by using
- round_frame_size.
-
-2002-10-24 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * doc/install.texi (avr): Update required binutils version.
-
-2002-10-24 Theodore A. Roth <troth@openavr.org>
-
- * doc/install.texi: Point avr users at more up-to-date information.
-
-2002-10-24 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md (movdi, movsi, movhi, movqi): Add peepholes2
- to pull operands out of the literal pool where possible.
-
-2002-10-24 Denis Chertykov <denisc@overta.ru>
-
- * config/avr/avr.c (init_cumulative_args): Test fntype for zero.
-
-2002-10-24 Steve Ellcey <sje@cup.hp.com>
-
- * expr.c (convert_move): If unsignedp is less then zero there
- is no equivalent code.
-
-2002-10-24 Zack Weinberg <zack@codesourcery.com>
-
- * tree.def: Delete mention of nonexistent ARRAY_TYPE fields.
-
-2002-10-24 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.h: Rework comments; re-sort target macro definitions
- according to the sequence they are defined in the manual.
- (POINTER_BOUNDARY): Remove.
-
-2002-10-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (round_frame_size): Replace 8 with
- BITS_PER_UNIT.
-
-2002-10-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (EIGHTBIT_CONSTANT_ADDRESS_P): Make it
- 64-bit safe.
- (TINY_CONSTANT_ADDRESS_P): Likewise.
-
-2002-10-24 Richard Henderson <rth@redhat.com>
-
- * config/ia64/ia64.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): True.
- (ia64_output_mi_thunk): Rewrite to use rtl, and to handle the
- vcall offset.
-
-2002-10-24 Richard Henderson <rth@redhat.com>
-
- PR opt/7944
- * reload.c (find_reloads_toplev): Mode of X is not important
- when simplifying subregs of constants.
-
-2002-10-24 Richard Sandiford <rsandifo@redhat.com>
-
- * config.gcc (mips64vr-*-elf*, mips64vrel-*-elf*): Add
- MIPS_MARCH_CONTROLS_SOFT_FLOAT=1 to $tm_defines.
- * config/mips/mips.c (MIPS_MARCH_CONTROLS_SOFT_FLOAT): Default to 0.
- (override_options): Base default setting of MASK_SOFT_FLOAT on -march
- if MIPS_MARCH_CONTROLS_SOFT_FLOAT.
-
-2002-10-24 Richard Sandiford <rsandifo@redhat.com>
-
- * optabs.c (expand_binop): Don't reuse the shift target in the
- middle of shift sequences.
-
-Wed Oct 23 22:48:44 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (abs splitters): Do not produce nested subregs.
-
-Wed Oct 23 12:42:32 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (movti_rex64): Fix constraints.
-
-Wed Oct 23 12:01:21 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (abssf,absdf): Use vector operands for SSE
- (abssf2_ifs, absdf2_ifs, absdf2_ifs_rex64 and splitters): Update for
- vector operand.
-
-2002-10-23 Ziemowit Laski <zlaski@apple.com>
-
- * objc/objc-act.c (get_static_reference): Remove unneeded
- TYPE_BINFO initialization.
- (get_object-reference): Likewise.
- (build_constructor): Tighten precondition check.
- (finish_message_expr): Likewise.
-
-2002-10-23 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (local_symbolic_operand): Move LABEL_REF test
- after CONST test.
-
-2002-10-23 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/ia64.c (hfa_element_mode): Don't allow 128 bit floats
- in HFAs.
-
-2002-10-23 Richard Henderson <rth@redhat.com>
-
- * config/alpha/alpha.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): True.
- (alpha_output_mi_thunk_osf): Handle vcall_offset.
-
-2002-10-23 Zack Weinberg <zack@codesourcery.com>
-
- * langhooks.h (struct lang_hooks_for_tree_inlining): Add
- var_mod_type_p.
- * langhooks-def.h: Default for tree_inlining.var_mod_type_p is
- hook_tree_bool_false.
-
- * tree.c (variably_modified_type_p): Moved here from
- cp/tree.c. Use lang_hooks.tree_inlining.var_mod_type_p for
- language-specific cases. Due to this, must weaken some 'if
- and only if' checks to merely 'if'.
- * tree.h: Prototype variably_modified_type_p.
-
- * tree-inline.c (walk_tree): #undef WALK_SUBTREE_TAIL at end.
-
-2002-10-23 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/linux.h (CC1_SPEC, CC1PLUS_SPEC): Remove.
- * config/s390/s390.c (optimization_options): Disable -fcaller-saves.
-
- * config/s390/s390-protos.h (fp_operand): Remove.
- * config/s390/s390.c (fp_operand): Remove.
- * config/s390/s390.md ("movdi"): Replace fp_operand by FP_REG_P.
- ("*movdi_lhi", "*movdi_lli", "*movdi_larl"): Likewise.
- ("movsi", "*movsi_lhi", "*movsi_lli"): Likewise.
- (movdi_31, movdf_31 splitters): Likewise.
-
- * config/s390/s390.h (IEEE_FLOAT): Remove.
- (TARGET_FLOAT_FORMAT): Define in terms of TARGET_IEEE_FLOAT.
- (INT_REGNO_P): Rename to ...
- (GENERAL_REGNO_P): ... this.
- (FLOAT_REGNO_P): Rename to ...
- (FP_REGNO_P): ... this.
- (ADDR_REGNO_P): New macro.
- (GENERAL_REG_P, ADDR_REG_P, FP_REG_P, CC_REG_P): New macros.
- (REGNO_OK_FOR_DATA_P, REGNO_OK_FOR_FP_P): Remove.
- (DATA_REG_P, FP_REG_P, ADDRESS_REG_P): Likewise.
- (HARD_REGNO_NREGS): Adapt to macro renaming.
- (HARD_REGNO_MODE_OK): Likewise.
-
-2002-10-23 David Edelsohn <edelsohn@gnu.org>
- Geoff Keating <geoffk@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_register_move_cost): New function.
- (rs6000_memory_move_cost): New function.
- * config/rs6000/rs6000-protos.h: Declare them.
- * config/rs6000/rs6000.h: Use them.
-
-2002-10-23 Ulrich Weigand <uweigand@de.ibm.com>
-
- * libgcc2.c (__udiv_w_sdiv): Use attribute ((always_inline)) when
- inlining it into other libgcc2 routines.
- (__udivmoddi4): Likewise.
-
-2002-10-22 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * doc/sourcebuild.texi (Test Suites): Improve.
-
-2002-10-22 Stan Shebs <shebs@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_output_mi_thunk): Add missing
- case for Darwin.
-
-2002-10-22 Jim Wilson <wilson@redhat.com>
-
- * config/i386/i386.md (subdi3_1): Add call to ix86_binary_operator_ok.
-
-Wed Oct 23 01:52:36 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- PR other/8289
- * xmmintrin.h: Add const to the argument of loads.
-
- * i386.md (pushv2di): New pattern.
- PR target/6890
- * xmmintrin.h (_MM_TRANSPOSE4_PS): New.
-
-2002-10-22 Richard Henderson <rth@redhat.com>
-
- * target.h (gcc_target.asm_out): Merge output_mi_thunk and
- output_mi_vcall_thunk into a single hook. Add can_output_mi_thunk.
- * target-def.h (TARGET_ASM_OUTPUT_MI_THUNK): Don't conditionalize.
- (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Remove.
- (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
- (TARGET_ASM_OUT): Update.
- * hooks.c (hook_bool_tree_hwi_hwi_tree_false): New.
- (hook_bool_tree_hwi_hwi_tree_true): New.
- (default_can_output_mi_thunk_no_vcall): New.
- * hooks.h: Declare them.
- * system.h (ASM_OUTPUT_MI_THUNK): Poison.
-
- * config/alpha/alpha.c (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
- (alpha_output_mi_thunk_osf): Add VCALL_OFFSET parameter.
- * config/arm/arm.c, config/cris/cris.c, config/frv/frv.c,
- config/i960/i960.c, config/ia64/ia64.c, config/m68k/m68k.c,
- config/mmix/mmix.c, config/pa/pa.c, config/sparc/sparc.c,
- config/stormy16/stormy16.c: Similarly.
-
- * config/i386/i386.c (x86_output_mi_thunk): Merge vcall_offset code.
- Handle 64-bit properly. Streamline.
- (x86_output_mi_vcall_thunk): Remove.
- (x86_this_parameter): Rename from ia32_this_parameter; handle 64-bit.
- (x86_can_output_mi_thunk): New.
- (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Remove.
- (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
- (override_options): Don't zap targetm.asm_out.output_mi_vcall_thunk.
-
- * config/rs6000/rs6000.c (rs6000_output_mi_thunk): Rename from
- output_mi_thunk; make static; always use function_section.
- (TARGET_ASM_OUTPUT_MI_THUNK): New.
- (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
- (rs6000_ra_ever_killed): Test no_new_pseudos not
- targetm.asm_out.output_mi_thunk in conjunction with thunks.
- * config/rs6000/rs6000-protos.h: Update.
- * config/rs6000/sysv4.h (TARGET_ASM_OUTPUT_MI_THUNK): Remove.
- * config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Don't call
- xcoffout_declare_function when using rs6000_output_mi_thunk.
-
- * config/s390/s390.c (s390_output_mi_thunk): Rename from
- s390_output_mi_vcall_thunk.
- (TARGET_ASM_OUTPUT_MI_THUNK): Remove.
- (TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
-
- * config/vax/vax.c (vax_output_mi_thunk): Static; add vcall_offset.
- (TARGET_ASM_OUTPUT_MI_THUNK, TARGET_ASM_CAN_OUTPUT_MI_THUNK): New.
- * config/vax/vax-protos.h: Update.
- * config/vax/vax.h (ASM_OUTPUT_MI_THUNK): Remove.
-
-Wed Oct 23 00:33:11 CEST 2002 Jan Hubicka <jh@suse,cz>
-
- * i386.c (standard_sse_constant_p): Accept vector and integer zeros too.
- * i386.h (EXTRA_CONSTRAINT): Recognize 'C'
- * i386.md (movti_internal): Use 'C'
-
- * xmmintrin.h (_mm_cmplt_epi*): New.
-
-2002-10-22 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("*movdi_64"): Fix op_type attribute.
- ("*movdf_64"): Likewise.
- ("*lshrdi3_64"): Likewise.
- ("blockage"): Add length attribute.
- ("lit"): Likewise.
-
-Tue Oct 22 23:51:34 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md: FIx typo.
- (sse2_cvtsi2sd, sse2_pslrdq): Fix template.
- (sse2_umulv2siv2di3): Fix predicate.
- (sse2_psadbw, ashrv8hi3, ashrv4si3, lshrv8hi3 lshrv4si3,
- lshrv2di3, ashlv8hi3, ashlv4si3, ashlv2di3): Likewise.
- * xmmintrin.h (_mm_mul_epu16): Rename to...
- (_mm_mul_epu32): This one.
- (_mm_cvtsi32_si128, _mm_cvtsi128_si32): New.
-
- (contains_128bit_aligned_vector_p): Undo accidental checkin.
-
-2002-10-22 Eric Christopher <echristo@redhat.com>
-
- * config/sparc/sparc.h: Add #error.
-
-2002-10-22 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config.gcc [s390-*-linux]: Remove s390/t-linux from tmake_file.
- [s390x-*-linux*]: Likewise.
- * config/s390/t-linux: Remove.
- * config/s390/s390.h: Include fixdfdi.h when building libgcc2.
-
-Tue Oct 22 19:07:03 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (builtin_description): Add IX86_BUILTIN_PUNPCKHQDQ128.
- (ix86_expand_builtin): Fix MASKMOVDQU expasion.
- * i386.h (ix86_builtins): Add IX86_BUILTIN_PUNPCKHQDQ128.
- * i386.md (mmx_punpck?dq): Simplify.
- (sse2_pubpcklqdq): Fix.
- (sse2_pubpckhqdq): New.
- * xmmintrin.h (_mm_unpackhi_epi32): New.
-
- * xmmintrin.h (_mm_cvt*, _mm_stream_pd): Fix prototypes.
- (_mm_shufflehi_epi16, _mm_shufflelo_epi16): Fix typo.
-
-2002-10-22 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c++/7209
- * fold_const.c (fold_binary_op_with_conditional_arg): Always
- build compound_expr if we used save_expr.
-
-2002-10-22 Alan Modra <amodra@bigpond.net.au>
-
- * output.h (SECTION_NOTYPE): Define.
- * varasm.c (default_section_type_flags_1): Set SECTION_NOTYPE for
- init array sections.
- (default_elf_asm_named_section): Mind SECTION_NOTYPE.
- * config/arm/arm.c (arm_elf_asm_named_section): Likewise. Also
- merge TLS support.
-
-2002-10-21 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.c (ix86_function_ok_for_sibcall): Look at
- the function type, not the return type.
-
-2002-10-21 Richard Henderson <rth@redhat.com>
-
- * real.c (sticky_rshift_significand): Return inexact, don't
- or it in immediately.
- (sub_significands): Accept incomming carry.
- (div_significands, rtd_divmod): Update for sub_significands change.
- (round_for_format): Update for sticky_rshift_significand change.
- (do_add): Don't involve the inexact bit in addition, do give the
- inexact bit as the subtraction carry-in.
- (encode_internal, decode_internal, real_internal_format): New.
- * real.h (real_internal_format): Declare.
-
-2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * libgcc2.c: Fix __udiv_w_sdiv breakage on platforms that
- don't define sdiv_qrnnd.
-
-2002-10-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (EIGHTBIT_CONSTANT_ADDRESS_P): Simplify
- using IN_RANGE.
- (TINY_CONSTANT_ADDRESS_P): Likewise.
-
-Tue Oct 22 00:04:20 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (builtin_description): Add punpcklqdq and movdq2q
- (ix86_init_mmx_sse_builtins): Add v2di_ftype_void, di_ftype_v2di,
- v16qi_ftype_pchar, void_ftype_pchar_v16qi, v4si_ftype_pchar,
- void_ftype_pchar_v4si; Initialize __builtin_ia32_movdq2q,
- __builtin_ia32_loaddqa, __builtin_ia32_loaddqu, __builtin_ia32_loadd
- __builtin_ia32_storedqa, __builtin_ia32_storedqu, __builtin_ia32_stored
- __builtin_ia32_setzero128.
- (ix86_expand_builtin): Handle IX86_BUILTIN_CLRTI, IX86_BUILTIN_LOADDQA,
- IX86_BUILTIN_LOADDQU, IX86_BUILTIN_LOADD, IX86_BUILTIN_STOREDQA,
- IX86_BUILTIN_STOREDQU, IX86_BUILTIN_STORED, Ix86_BUILTIN_MOVQ.
- * i386.h (ix86_builtins): Add IX86_BUILTIN_LOADDQA, IX86_BUILTIN_LOADDQU,
- IX86_BUILTIN_STOREDQA, IX86_BUILTIN_STOREDQU, IX86_BUILTIN_LOADD,
- IX86_BUILTIN_STORED, IX86_BUILTIN_CLRTI, IX86_BUILTIN_MOVDQ2Q,
- IX86_BUILTIN_PUNPCKLQDQ128, Ix86_BUILTIN_MOVQ.
- * i386.md (sse2_punpcklqdq, sse2_movqsse2_loadd, sse2_stored,
- sse2_movq): New patterns.
- (sse2_movdqa, sse2_movdqu, sse2_movdq2q): Fix.
- * xmmintrin.h (_mm_load_si128, _mm_loadu_si128, _mm_loadl_epi64,
- _mm_store_si128, _mm_storeu_si128, _mm_storel_epi64,
- _mm_setzero_si128, _mm_set_epi64, _mm_set_epi32, _mm_set_epi16,
- _mm_set_epi8, _mm_set1_epi64, _mm_set1_epi32, _mm_set1_epi16,
- _mm_set1_epi8, _mm_setr_epi64, _mm_setr_epi32, _mm_setr_epi16,
- _mm_setr_epi8, _mm_unpacklo_epi64,_mm_set_moveq): New functions.
- (_mm_insert_epi16): Fix.
-
-2002-10-21 Dale Johannesen <dalej@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_reverse_condition): Handle
- unsafe math reversals correctly for RTL generation.
- (output_cbranch): Replace rs6000_reverse_condition call
- by its former definition.
-
-2002-10-21 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (x86_64_sign_extended_value): Add allow_rip
- argument. In CM_SMALL_PIC model consider SYMBOL_REFs binding locally or
- from constant pool or LABEL_REFs as sign extended if allow_rip.
- Change all +-1GB limits to +-16MB.
- (x86_64_general_operand, x86_64_szext_general_operand,
- x86_64_nonmemory_operand, x86_64_movabs_operand,
- x86_64_szext_nonmemory_operand, x86_64_immediate_operand,
- legitimate_address_p, ix86_expand_int_movcc): Update callers.
- (local_symbolic_operand): Don't allow offsets bigger than +-16MB
- in CM_SMALL_PIC model.
- (legitimate_pic_address_disp_p): Don't check offsets before
- calling local_symbolic_operand.
- (legitimize_pic_address): Force offsets bigger than +-16MB into
- register.
- * config/i386/i386.h (EXTRA_CONSTRAINT, CONST_COSTS): Likewise.
- * config/i386/i386-protos.h (x86_64_sign_extended_value): Update
- prototype.
-
- * configure.in: Test for @GOTNTPOFF and @INDNTPOFF on IA-32 too.
- Add x86-64 test. Set tls_first_minor to 14 on IA-32 and x86-64.
- * configure: Rebuilt.
- * config/i386/i386.c (x86_64_sign_extended_value): Don't allow TLS
- SYMBOL_REFs unless enclosed in UNSPEC. Handle UNSPEC_DTPOFF,
- UNSPEC_GOTNTPOFF and UNSPEC_NTPOFF.
- (legitimate_address_p): Allow foo@dtpoff(base) even on TARGET_64BIT
- -fpic.
- (ix86_encode_section_info): Don't ever generate TLSGD or TLSLD for
- non-pic code if TARGET_64BIT.
- (legitimize_address): Generate 64-bit TLS sequences.
- (output_pic_addr_const): Support x86-64 TLS operators.
- (i386_output_dwarf_dtprel): Output 64-bit DTPOFF as .long f@DTPOFF, 0.
- (print_operand_address): Use %fs instead of %gs on TARGET_64BIT.
- Don't append (%rip) in 64-bit TLSGD and TLSLD sequences.
- (output_addr_const_extra): Support x86-64 TLS operators.
- (maybe_get_pool_constant): Handle TARGET_64BIT -fpic.
- (ix86_tls_get_addr): Use __tls_get_addr on TARGET_64BIT
- unconditionally.
- * config/i386/i386.md (*tls_global_dynamic_gnu): Renamed to...
- (*tls_global_dynamic_32_gnu): ..., add !TARGET_64BIT.
- (*tls_global_dynamic_sun): Renamed to...
- (*tls_global_dynamic_32_sun): ..., add !TARGET_64BIT.
- (tls_global_dynamic): Renamed to...
- (tls_global_dynamic_32): ... this.
- (tls_global_dynamic_64, *tls_global_dynamic_64): New.
- (*tls_local_dynamic_base_dynamic_gnu): Renamed to...
- (*tls_local_dynamic_base_dynamic_32_gnu): ..., add !TARGET_64BIT.
- (*tls_local_dynamic_base_dynamic_sun): Renamed to...
- (*tls_local_dynamic_base_dynamic_32_sun): ..., add !TARGET_64BIT.
- (tls_local_dynamic_base_dynamic): Renamed to...
- (tls_local_dynamic_base_dynamic_32): ... this.
- (tls_local_dynamic_base_dynamic_64,
- *tls_local_dynamic_base_dynamic_64): New.
- (*tls_local_dynamic_once): Renamed to...
- (*tls_local_dynamic_32_once): ... this.
-
-2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * libgcc2.c: Inline __udiv_w_sdiv when compiling __udivdi3,
- __divdi3, __umoddi3, or __moddi3.
-
-2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * c-opts.c (missing_arg): Use cl_options[opt_index].opt_code
- instead of just opt_index as switch expression.
-
- * calls.c (store_one_arg): Change type of 'excess_align'
- to unsigned int.
-
- * profile.c (output_gcov_string): Change type of 'temp'
- to size_t.
-
-2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/fixdfdi.h (__fixunsdfdi, __fixdfdi): Add prototypes.
- (__fixunssfdi, __fixsfdi): Likewise.
- * config/s390/s390.c (s390_single_hi): Initialize 'value'.
- (s390_single_qi): Likewise.
- (s390_emit_epilogue): Initialize 'offset'. Remove signed vs.
- unsigned comparison warning.
- (s390_return_addr_rtx): New function.
- * config/s390/s390-protos.h (s390_return_addr_rtx): Declare it.
- * config/s390/s390.h (RETURN_ADDR_RTX): Use it.
- (HARD_REGNO_MODE_OK): Rewrite condition to silence warnings.
-
-2002-10-21 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_output_mi_vcall_thunk): New function.
- (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Define target hook.
- (s390_output_mi_thunk): Remove.
- (TARGET_ASM_OUTPUT_MI_THUNK): Remove.
-
-2002-10-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.h (N_REG_CLASSES): Parenthesize.
-
-2002-10-20 Zack Weinberg <zack@codesourcery.com>
-
- * config/i386/i386.c (ix86_function_ok_for_sibcall): Fix an
- inverted test in the conditional determining the possibility
- of sibcalls in PIC mode.
-
-2002-10-20 Richard Henderson <rth@redhat.com>
-
- * target.h (struct gcc_target): Line wrap.
-
- * config/alpha/alpha.c (alpha_output_mi_thunk_osf): Static.
- (TARGET_ASM_OUTPUT_MI_THUNK): Define here...
- * config/alpha/alpha.h: ... not here.
- * config/alpha/alpha-protos.h: Update.
-
- * config/arm/arm.c, config/arm/arm.h, config/arm/arm-protos.h
- config/cris/cris-protos.h, config/cris/cris.c, config/cris/cris.h,
- config/frv/frv-protos.h, config/frv/frv.c, config/frv/frv.h,
- config/i386/i386-protos.h, config/i386/i386.c, config/i386/openbsd.h,
- config/i386/unix.h, config/i960/i960-protos.h, config/i960/i960.c,
- config/i960/i960.h, config/ia64/ia64-protos.h, config/ia64/ia64.c,
- config/ia64/ia64.h, config/m68k/linux.h, config/m68k/m68k-protos.h,
- config/m68k/m68k.c, config/m68k/netbsd-elf.h, config/m68k/openbsd.h,
- config/mmix/mmix-protos.h, config/mmix/mmix.c, config/mmix/mmix.h,
- config/pa/pa-protos.h, config/pa/pa.c, config/pa/pa.h,
- config/s390/s390-protos.h, config/s390/s390.c, config/s390/s390.h,
- config/sparc/openbsd.h, config/sparc/sparc-protos.h,
- config/sparc/sparc.c, config/sparc/sparc.h,
- config/stormy16/stormy16-protos.h, config/stormy16/stormy16.c,
- config/stormy16/stormy16.h: Similarly.
-
- * config/m68k/m68k.c (m68k_output_mi_thunk): Replicate mnemonic
- selection logic from call patterns.
-
-2002-10-20 Mark Mitchell <mark@codesourcery.com>
-
- * config/m68k/m68k.c (m68k_output_mi_thunk): Fix typo.
-
-2002-10-20 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- PR other/8202
- * i386.c (ix86_init_mmx_sse_builtins, ix86_expand_builtin): Define and
- expand __builtin_ia32_pslldqi128 and __builtin_ia32_psrldqi128.
- * i386.h (IX86_BUILTIN_PSLLDQI128, IX86_BUILTIN_PSRLDQI128): New.
- * xmmintrin.h (_mm_srli_si128, _mm_slli_si128): New.
-
-2002-10-20 Roger Sayle <roger@eyesopen.com>
-
- PR c/761
- * toplev.c (flag_unsafe_profile_arcs): Remove.
- (flag_bounded_pointers): Remove.
- (flag_bounds_check): Correct comments.
- (lang_independent_options): Remove -funsafe-profile-arcs and
- -fbounded-pointers. Correct -fbounds-check comments.
-
- * flags.h: Correct flag_schedule_interblock comments.
- (flag_bounded_pointers): Remove prototype.
- (flag_bounds_check): Correct comments.
-
- * c-opts.c (c_common_init_options): No need to mark
- flag_bounds_check as unspecified.
- (c_common_post_options): And no need to set it from
- flag_bounded_pointers if its still unspecified.
-
- * doc/invoke.texi: Fix some overfull hboxes in "make dvi".
- Document --version, -feliminate-dwarf-2-dups, -fno-sched-interblock,
- -fno-sched-spec, -fsched-spec-load, -fsched-spec-load-dangerous,
- -fsched-verbose=n, -fno-branch-count-reg and -fbounds-check.
-
-Sat Oct 19 22:02:28 2002 Alexandre Oliva <aoliva@redhat.com>
- Angela Marie Thomas <angela@releasedominatrix.com>
- Brendan Kehoe <brendan@zen.org>
- Nick Clifton <nickc@redhat.com>
- Andrew Haley <aph@redhat.com>
-
- * configure.in (--with-sysroot): New. Don't inhibit libc if
- given. AC_SUBST TARGET_SYSTEM_ROOT, TARGET_SYSTEM_ROOT_DEFINE
- and CROSS_SYSTEM_HEADER_DIR.
- * configure: Rebuilt.
- * Makefile.in (CROSS_SYSTEM_HEADER_DIR): Set in configure.
- (TARGET_SYSTEM_ROOT): New.
- (DRIVER_DEFINES): Define CROSS_INCLUDE_DIR from
- CROSS_SYSTEM_HEADER_DIR.
- (install-gcc-tooldir): New target.
- (stmp-fixinc): Do not create $(libsubdir), but rather bail out
- if SYSTEM_HEADER_DIR does not exist and it's not the default
- sys-include directory.
- (deduced.h, stmp-fixproto): Quote SYSTEM_HEADER_DIR properly.
- (install-mkheaders): Likewise.
- * gcc.c (target_system_root): New variable.
- (add_sysrooted_prefix): New function.
- (process_command): Recompute run-time target_system_root from
- gcc_exec_prefix, keeping it unchanged if the relocated sysroot
- does not exist.
- (do_spec_1): Process 'R' spec.
- (main): Add md_exec_prefix to exec_prefixes regardless of
- startfile_prefix_spec. Use add_sysrooted_prefix for
- startfile_prefixes, and don't skip the default ones when cross
- compiling with sysroot enabled. Removed unused case of
- non-absolute standard_startfile_prefix.
- * config/interix.h: Remove the only potential, yet disabled,
- occurrence of non-absolute (empty) standard_startfile_prefix.
- * config/sh/linux.h (LIB_SPEC): Add -rpath-link in non-static
- linking.
- * config/mips/linux.h (LIB_SPEC): Define as in sh/linux.h.
- * doc/install.texi (--with-sysroot): Document.
- (--with-headers, --with-libs): Deprecate.
-
-2002-10-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- Mark Mitchell <mark@codesourcery.com>
-
- * alpha-protos.h (alpha_output_mi_thunk_osf): Update signature to
- match target.h.
- * arm-protos.h, arm.c (arm_output_mi_thunk): Likewise.
- * cris-protos.h, cris.c (cris_asm_output_mi_thunk): Likewise.
- * frv-protos.h, frv.c (frv_asm_output_mi_thunk): Likewise.
- * i386-protos.h, i386.c (x86_output_mi_vcall_thunk,
- x86_output_mi_thunk): Likewise.
- * i960-protos.h, i960.c (i960_output_mi_thunk): Likewise.
- * ia64-protos.h, ia64.c (ia64_output_mi_thunk): Likewise.
- * m68k-protos.h, m68k.c (m68k_output_mi_thunk): Likewise.
- * mmix-protos.h, mmix.c (mmix_asm_output_mi_thunk): Likewise.
- * rs6000-protos.h, rs6000.c (output_mi_thunk): Likewise.
- * s390-protos.h, s390.c (s390_output_mi_thunk): Likewise.
- * stormy16-protos.h, stormy16.c (xstormy16_asm_output_mi_thunk):
- Likewise.
- * vax-protos.h, vax.c (vax_output_mi_thunk): Likewise.
-
- * target.h (gcc_target): Update output_mi_thunk and
- output_mi_vcall_thunk to take a HOST_WIDE_INT delta and
- vcall_index.
-
- * config/alpha/alpha.c: Replace ASM_OUTPUT_MI_THUNK with
- TARGET_ASM_OUTPUT_MI_THUNK in comments.
- * config/alpha/vms.h (ASM_OUTPUT_MI_THUNK): Don't #undef it.
- (TARGET_ASM_OUTPUT_MI_THUNK): #undef it.
- * config/frv/frv.h (DEFAULT_VTABLE_THUNKS): Remove definition.
- * config/i386/i386-protos.h (x86_output_mi_vcall_thunk): Update
- signature.
- * config/i386/i386.c (x86_output_mi_vcall_thunk): Likewise.
- * config/i386/openbsd.h: Replace ASM_OUTPUT_MI_THUNK with
- TARGET_ASM_OUTPUT_MI_THUNK in comments.
- * config/i960/i960.h (ASM_OUTPUT_MI_THUNK): Don't define.
- (TARGET_ASM_OUTPUT_MI_THUNK): Do define.
- * config/m68k/openbsd.h: Replace ASM_OUTPUT_MI_THUNK with
- TARGET_ASM_OUTPUT_MI_THUNK in comments.
- * config/rs6000/rs6000.c (rs6000_ra_ever_killed): Remove #ifdef
- ASM_OUTPUT_MI_THUNK and replace with check of targetm.
-
- * doc/tm.texi (TARGET_ASM_OUTPUT_MI_THUNK): Update signature.
- (TARGET_ASM_OUTPU_MI_VCALL_THUNK): Likewise.
-
-2002-10-19 Brad Lucier <lucier@math.purdue.edu>
-
- * real.c (do_add): Fix 0+0 sign corner case.
- (do_divide): Fix Inf/0 corner case.
-
-Sun Oct 20 00:31:31 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (classify_argument): Pass MMX arguments in memory
- (ix86_expand_builtin): Expand proper address mode for cflush.
- * i386.md (movdqa): Fix typo.
- (sse2_cflush): Accept DImode addresses.
-
- * xmmintrin.h (_mm_sqrt_sd): Accept two arguments.
- (_mm_max_sd): Fix pasto.
- (_mm_storeh_pd, _mm_storel_pd): Fix.
-
- * i386.c (bdesc_comi): Fix to match specification.
- (ix86_expand_sse_comi): Emit the comparison properly.
- * i386.md (sse_comi, sse2_comi, sse_ucomi, sse2_ucomi):
- Do not use comparison operator.
- (vnmaskcmp): Fix template.
-
- * xmmintrin.h (_mm_cvtps_pi16): Fix.
-
-2002-10-19 Sebastian Pop <s.pop@laposte.net>
-
- * dependence.c : Removed.
- * Makefile.in : Remove dependence.o.
-
-Sat Oct 19 10:46:52 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * mmintrin.h (__m64): typedef it to v2si.
- (_mm_cvtsi32_si64, _mm_cvtsi32_si64_mm_sll_pi16,
- _mm_sll_pi32, _mm_sll_pi64, _mm_slli_pi64, _mm_sra_pi16,
- _mm_sra_pi32, _mm_srl_pi16, _mm_srl_pi32, _mm_srl_pi64,
- _mm_srli_pi64, _mm_and_si64, _mm_andnot_si64,
- _mm_or_si64, _mm_xor_si64): Add neccesary casts.
- * xmmintrin.h (_mm_setzero_si64): Likewise.
-
- * i386.h (ALIGN_MODE_128): Update comment; add missing modes
- (SSE_REG_MODE_P, MMX_REG_MODE_P): New macros.
-
- PR target/7693
- Patch by Shawn Wagner
- * mmintrin.h: Replace pi64 by si64.
-
-2002-10-18 David Edelsohn <edelsohn@gnu.org>
-
- * rs6000.md (movdf_hardfloat32): Order alternatives consistently.
- Use length of 4 not *.
- (movdf_hardfloat64): Same. Support DFmode moves to/from CTR/LR.
- (movdf_softfloat64): Likewise.
- (movdi_internal32): Use length of 4 not *.
- (movti_power): Same.
- (ctrsi, ctrdi): Same.
-
-2002-10-18 Zack Weinberg <zack@codesourcery.com>
-
- * c-decl.c (start_decl): Point users of the old initialized-
- typedef extension at __typeof__.
-
-2002-10-18 Richard Henderson <rth@redhat.com>
-
- * real.c (cmp_significand_0, rtd_divmod, ten_to_mptwo): New.
- (real_to_decimal): Re-implement using the logic from the
- gcc 3.2 etoasc. Comment heavily.
- (div_significands): Simplify loop startup and comparison logic.
-
-2002-10-18 Mark Mitchell <mark@codesourcery.com>
-
- * target-def.h (TARGET_ASM_OUTPUT_MI_THUNK): Default to NULL.
- (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Likewise.
- (TARGET_ASM_OUT): Add them.
- * target.h (asm_out): Add output_mi_thunk and
- output_mi_vcall_thunk.
- * config/alpha/alpha.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/arm/arm-protos.h (arm_output_mi_thunk): Declare.
- * config/arm/arm.c (arm_output_mi_thunk): Define.
- * config/arm/arm.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/cris/cris.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/frv/frv.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/i386/i386-protos.h (x86_output_mi_thunk): Adjust
- prototype.
- (x86_output_mi_vcall_thunk): Declare.
- * config/i386/i386.c (override_options): Clear
- output_mi_vcall_thunk in 64-bit mode.
- (ix86_fntype_regparm): New function.
- (ix86_return_pops_args): Use it.
- (ia32_this_parameter): New function.
- (x86_output_mi_vcall_thunk): New function.
- (x86_output_mi_thunk): Use it
- * config/i386/unix.h (TARGET_ASM_OUTPUT_MI_THUNK): Adjust.
- (TARGET_ASM_OUTPUT_MI_VCALL_THUNK): Define.
- * config/i960/i960-protos.h (i960_output_mi_thunk): Declare.
- * config/i960/i960.c (i960_output_mi_thunk): New function.
- * config/i960/i960.h (ASM_OUTPUT_MI_THUNK): Adjust.
- * config/ia64/ia64-protos.h (ia64_output_mi_thunk): Declare.
- * config/ia64/ia64.c (ia64_output_mi_thunk): Define.
- * config/ia64/ia64.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/m68k/m68k-protos.h (m68k_output_mi_thunk): New function.
- * config/m68k/linux.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/m68k/netbsd-elf.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/mmix/mmix.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/pa/pa.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/rs6000/sysv4.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/s390/s390-protos.h (s390_output_mi_thunk): Declare.
- * config/s390/s390.c (s390_output_mi_thunk): Define.
- * config/s390/s390.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/sparc/sparc.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/stormy16/stormy16.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * config/vax/vax-protos.h (vax_output_mi_thunk): Declare.
- * config/vax/vax.c (vax_output_mi_thunk): Define.
- * config/vax/vax.h (ASM_OUTPUT_MI_THUNK): Rename to ...
- (TARGET_ASM_OUTPUT_MI_THUNK): ... this.
- * doc/tm.texi: Adjust documentation.
-
-2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/netbsd.h (NETBSD_ENABLE_EXECUTE_STACK): Define
- __enable_execute_stack function.
- * config/alpha/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Define
- as NETBSD_ENABLE_EXECUTE_STACK.
- * config/i386/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
- * config/i386/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
- * config/i386/netbsd64.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
- * config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
- * config/sparc/netbsd.h (TRANSFER_FROM_TRAMPOLINE): Ditto.
-
-2002-10-18 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/i386/i386.c (x86_initialize_trampoline): Emit a call
- to __enable_execute_stack with the address of the trampoline
- if TRANSFER_FROM_TRAMPOLINE is defined.
- * config/i386/i386.h (TARGET_64BIT): Expand to a compile-time
- constant if building libgcc2.
-
-Thu Oct 17 17:40:05 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (pentium4_cost): Fix according to Intel recommendations.
- (ix86_memory_move_cost): Fix for 64bit compilation.
-
-2002-10-17 Roger Sayle <roger@eyesopen.com>
-
- * doc/c-tree.texi: Update description of COND_EXPR tree nodes.
-
-2002-10-17 Geoffrey Keating <geoffk@apple.com>
-
- * config/rs6000/rs6000.h (HARD_REGNO_MODE_OK): Allow arbitrary modes
- in CTR/LR/MQ.
- * config/rs6000/rs6000.md (movcc_internal1): Support CCmode moves
- to/from CTR/LR/MQ.
- (movsf_hardfloat): Support SFmode moves to/from CTR/LR/MQ.
- (movsf_softfloat): Likewise.
-
-2002-10-17 Janis Johnson <janis187@us.ibm.com>
-
- * Makefile.in (site.exp): Add ALT_CXX_UNDER_TEST and COMPAT_OPTIONS.
-
-2002-10-17 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/alpha/alpha.c (alpha_initialize_trampoline): Use
- tramp, not addr, to pass the trampoline address to
- __enable_execute_stack.
-
-Thu Oct 17 18:40:47 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * mmintrin.h: Guard by __MMX__
- * xmmintrin.h: Guard by __SSE__
-
- PR other/8062
- * xmmintrin.h (_MM_SHUFFLE2): New macro.
- (_mm_load*_?d): New functions.
- (_mm_set*_?d): New functions.
- (_mm_store*_?d): New functions.
-
-Wed Oct 16 15:01:29 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- Really commit patch announced at Oct 14
- PR c/7344
- * predict.c (can_predict_insn_p): New function.
- (estimate_probability): Avoid unnecesary work.
- (process_note_prediction): Likewise.
- * toplev.c (rest_of_compilation): Account early branch prediction pass
- as TV_BRANCH_PROB.
-
- PR other/8048
- Found by Ian Ollmann
- * xmmintrin.h (_mm_shuffle_pd): Fix typo.
- (_mm_load?_pd): Likewise.
- (_mm_store?_pd): Likewise.
-
- PR target/7386
- * i386.c (builtin_description):Drop cmpg[te]s[sd].
- * xmmintrin.h (__mm_cmpg[te]_s[sd]): Rewrite using
- swapped alternative.
-
- PR opt/7630
- * reload1.c (reload_inner_reg_of_subreg): New argument output;
- (push_reload): Update call.
-
-2002-10-17 Richard Sandiford <rsandifo@redhat.com>
-
- * config.gcc (mips*-*-*): Add OBJECT_FORMAT_ELF to $tm_defines
- if using mips/elf.h or mips/elf64.h.
- * config/mips/elf.h (OBJECT_FORMAT_ELF): Remove.
- * config/mips/elf64.h (OBJECT_FORMAT_ELF): Remove.
-
-2002-10-16 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.c (function_arg): Set inner mode of V1DI to
- SI.
-
-2002-10-16 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/linux.h (ASM_DOUBLE, _ASM_OUTPUT_LONG): Remove.
- (LPREFIX): Likewise.
- (ASM_COMMENT_START, LOCAL_LABEL_PREFIX, ASM_FORMAT_PRIVATE_NAME,
- ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT,
- ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP, ASM_OUTPUT_ALIGNED_BSS,
- TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP,
- GLOBAL_ASM_OP, ASM_OUTPUT_MI_THUNK): Move to s390.h.
-
- * config/s390/s390.h (ASM_COMMENT_START, LOCAL_LABEL_PREFIX,
- ASM_FORMAT_PRIVATE_NAME, ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP,
- ASM_OUTPUT_ALIGNED_BSS, TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
- BSS_SECTION_ASM_OP): Move from linux.h.
- (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
- Also, use ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.
-
- * config/s390/s390.c (s390_function_profiler): Use
- ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.
-
-2002-10-15 Eric Christopher <echristo@redhat.com>
-
- * stor-layout.c (layout_type): Call GET_MODE_BITSIZE once.
- * java/parse.y (obtain_incomplete_type): Make pointer
- ptr_mode.
-
-2002-10-15 Richard Henderson <rth@redhat.com>
-
- * real.c (real_to_decimal): Accept BUF_SIZE and CROP_TRAILING_ZEROS
- as arguments. Bound DIGITS by the available buffer size.
- (real_to_hexadecimal): Likewise.
- * real.h (real_to_decimal, real_to_hexadecimal): Update prototypes.
- (REAL_VALUE_TO_DECIMAL): Remove.
- * c-common.c, c-pretty-print.c, print-rtl.c, print-tree.c,
- sched-vis.c, config/arc/arc.c, config/c4x/c4x.c, config/fr30/fr30.c,
- config/i370/i370.h, config/i386/i386.c, config/i960/i960.c,
- config/ip2k/ip2k.c, config/m32r/m32r.c, config/m68hc11/m68hc11.c,
- config/m68k/hp320.h, config/m68k/m68k.h, config/m68k/sun2o4.h,
- config/m68k/sun3.h, config/mips/mips.c, config/ns32k/ns32k.c,
- config/pdp11/pdp11.h, config/vax/vax.h: Update all callers to
- use real_to_decimal directly, and with the proper arguments.
- * doc/tm.texi (REAL_VALUE_TO_DECIMAL): Remove.
-
-2002-10-15 Jim Wilson <wilson@redhat.com>
-
- * reload1.c (merge_assigned_reloads): After converting overlapping
- reloads to RELOAD_OTHER, abort if there are now conflicting reloads.
-
- * config/i386/i386.md (adddi3_1): Add call to ix86_binary_operator_ok.
-
-Tue Oct 15 22:08:35 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * expr.c (do_tablejump): Fix typo in my previous commit.
-
-2002-10-15 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/vr.h (DRIVER_SELF_SPECS): Change %<mgp32 to %{<mgp32}.
-
-2002-10-15 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_split_branches): Add return
- value. Add parameters TEMP_REG and TEMP_USED. Use unspec 104.
-
- (find_base_register_in_addr): New function.
- (find_base_register_ref): New function.
- (replace_base_register_ref): New function.
-
- (struct constant_pool): Add members pool_insn, insns, and anchor.
- Remove member last_insn.
- (s390_start_pool): Initialize them.
- (s390_end_pool): Emit pool placeholder insn.
- (s390_add_pool_insn): New function.
- (s390_find_pool): Use insns bitmap instead of addresses.
- (s390_dump_pool): Replace placeholder insn. Emit anchor.
- Replace unspec 104 by local-pool-relative references.
- (s390_output_constant_pool): Output anchor label if required.
- (s390_output_symbolic_const): Handle unspec 104 and 105.
- (s390_add_pool): Remove, replace by ...
- (s390_add_constant, s390_find_constant): ... these new functions.
- (s390_add_anchor): New function.
-
- (s390_chunkify_pool): Delete, replace by ...
- (s390_chunkify_start, s390_chunkify_finish,
- s390_chunkify_cancel): ... these new functions.
- (s390_optimize_prolog): Add parameter TEMP_REGNO.
- Recompute register live data for special registers.
- (s390_fixup_clobbered_return_reg): New function.
- (s390_machine_dependent_reorg): Rewrite to use new
- s390_chunkify_... routines.
-
- config/s390/s390.md ("reload_base"): Rename to ...
- ("reload_base_31"): ... this.
- ("reload_base_64"): New insn.
- ("reload_base2"): Remove.
- ("reload_anchor"): New insn.
- ("pool"): New insn.
-
- s390.c (s390_pool_overflow): Remove.
- s390.h (s390_pool_overflow): Likewise.
- s390.md ("cjump", "icjump", "doloop_si"): Remove s390_pool_overflow.
-
-Tue Oct 15 16:51:04 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (movv8qi_i+2): Don't split if source is -1.
-
-2002-10-15 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi: Formatting changes for conformance to HTML 4.01.
-
-2002-10-15 Ulrich Weigand <uweigand@de.ibm.com>
-
- PR opt/7409
- * loop.c (loop_regs_scan): Mark registers used for function
- argument passing as MAY_NOT_OPTIMIZE.
-
-Mon Oct 14 19:22:19 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * gcov-io.h (gcov_info): Fix type.
- * profile.c (create_profiler): Fix type mismatch.
-
-Mon Oct 14 20:33:12 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (movv2di_internal): New pattern.
- (movv2df_internal, movv8hi_internal, movv16qi_internal): Fix predicate.
- (movv2di): New expander.
- * i386.c (ix86_preferred_reload_class): Return NO_REGS for vector operands.
-
- * i386.c (ix86_expand_timode_binop_builtin): Delete.
- (builtin_description): Add SSE1 logicals; rename SSE2 logicals.
- (ix86_init_mmx_sse_builtins): Kill SSE1 logicals.
- (ix86_expand_builtin): Likewise.
- * i386.h (sse_andti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
- sse_andti3,
- sse_andnti4_df_1, sse_andti3_df_2, sse_andti3_sf_1, sse_andti3_sf_2,
- sse_andnti3,
- sse_orti4_df_1, sse_orti3_df_2, sse_orti3_sf_1, sse_orti3_sf_2,
- sse_orti3,
- sse_xorti4_df_1, sse_xorti3_df_2, sse_xorti3_sf_1, sse_xorti3_sf_2,
- sse_xorti3): Kill.
- (sse_andv4sf3, sse_andnv4sf3, sse_orv2df3, sse_xorv2df3, sse_andv2df3,
- sse_andnv2df3, sse_orv2df3, sse_xorv2df3): New expanders.
- (*sse_andv4sf3, *sse_andnv2df3, *sse_orv4sf3, *sse_xorv4sf3, *sse_andv2df3,
- *sse_andnv2df3, *sse_orv2df3, *sse_xorv2df3): New patterns.
- (*sse_andsf3, *sse_andndf3, *sse_ordf3, *sse_xordf3, *sse_anddf3,
- *sse_andndf3, *sse_orv2df3, *sse_xorv2df3): New patterns.
-
- * xmmintrin.h (__m128i): Define as __v2di.
-
- PR c++/6419
- (expand_expr): Use DECL_RTL_SET_P.
-
-2002-10-14 Roger Sayle <roger@eyesopen.com>
-
- * combine.c (simplify_set): Treat MODE_CC registers like cc0.
-
-2002-10-14 Roger Sayle <roger@eyesopen.com>
- Zack Weinberg <zack@codesourcery.com>
-
- * config/i386/i386.c (k6_cost): Correct typo.
-
-2002-10-14 Mark Mitchell <mark@codesourcery.com>
-
- PR optimization/6631
- * alias.c (objects_must_conflict_p): Check honor_readonly when
- examining TYPE_READONLY.
- * function.c (assign_stack_temp_for_type): Likewise.
-
-2002-10-14 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
-
- * config/alpha/alpha.md (extendsidi2_nofix, extendsidi2_fix):
- Swap zero extension arguments.
- (umaxhi3): Fix instruction class.
- PR target/7211
- (prefetch): Fix prefetch instructions.
- PR target/7238
- (pkwb): Fix output constraint.
-
-2002-10-14 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mips/mips.c (print_operand): Increase buffer size for
- real numbers.
-
-2002-10-14 Richard Henderson <rth@redhat.com>
-
- PR opt/8165
- * gcse.c (adjust_libcall_notes): Revert last change.
- * simplify-rtx.c (simplify_replace_rtx): Handle LO_SUM.
-
-2002-10-14 Andrew Haley <aph@redhat.com>
-
- * tree-inline.c (remap_block): All local class initialization
- flags go in the outermost scope.
- (expand_call_inline): Call java_inlining_map_static_initializers.
- (expand_call_inline): Call java_inlining_merge_static_initializers.
- * java/lang.c (merge_init_test_initialization): New.
- (java_inlining_merge_static_initializers): New.
- (inline_init_test_initialization): New.
- (java_inlining_map_static_initializers): New.
-
- * tree-inline.c (expand_call_inline): Convert retvar to expected
- type.
-
-2002-10-14 Graham Stott <graham.stott@btinternet.com>
-
- * stmt.c (decl_conflicts_with_clobbers_p): Add REG_P check.
-
-2002-10-14 Aldy Hernandez <aldyh@redhat.com>
-
- * stmt.c: Fix typo in comment.
-
-Mon Oct 14 11:35:49 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * c-common.c (c_common_type_for_mode): Add V2HImode case.
- * tree.c (build_common_tree_nodes_2): Initialize
- unsigned_V2HI_type_node and V2HI_type_node.
- * tree.h (enum tree_index): Add TI_UV2HI_TYPE and TI_V2HI_TYPE.
- (unsigned_V2HI_type_node, V2HI_type_node): Define.
-
-2002-10-14 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
- Handle TARGET_64BIT.
-
-2002-10-14 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/vr.h (DRIVER_SELF_SPECS): Define.
- * config/mips/t-vr (MULTILIB_OPTIONS): Remove mlong32.
- (MULTILIB_DIRNAMES): Remove long32.
- (MULTILIB_EXCEPTIONS): Don't build -mabi=32 -mgp32 multilibs.
- (MULTILIB_REDUNDANT_DIRS): Remove.
-
-2002-10-14 Richard Sandiford <rsandifo@redhat.com>
-
- * doc/tm.texi (DRIVER_SELF_SPECS): Document.
- * gcc.c (driver_self_specs): New variable.
- (do_self_spec): New function.
- (main): Use it to process driver_self_specs.
-
-2002-10-13 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.c (ix86_function_ok_for_sibcall): Reject
- indirect sibcalls when regparm >= 3.
-
- * config/i386/i386.c (sibcall_insn_operand): New.
- * config/i386/i386.h (PREDICATE_CODES): Update.
- * config/i386/i386-protos.h: Update.
- * config/i386/i386.md (sibcall_1, sibcall_value_1): Use it.
-
- * rtl.c (shallow_copy_rtx): Use memcpy for the entire node.
-
-2002-10-12 Roger Sayle <roger@eyesopen.com>
-
- * simplify-rtx.c (simplify_binary_operation) [ASHIFTRT]: Optimize
- arithmetic right shifts of ~0 during RTL simplifications.
-
-2002-10-12 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/7862
- PR preprocessor/8190
- * gcc.c (cpp_unique_options): Don't delete .d files.
- Remove stray whitespace.
-
-2002-10-12 Naohiko Shimizu <pshimizu@fa2.so-net.ne.jp>
-
- * pdp11.h (ASM_OUTPUT_SKIP): Add preceding 0 for octal constant.
- (ASM_OUTPUT_COMMON, ASM_OUTPUT_LOCAL): Likewise.
- * pdp11.c (pdp11_output_function_prologue): 0%o -> %#o.
- (pdp11_output_function_epilogue, output_ascii): Likewise.
- (output_addr_const_pdp11): Likewise.
- * pdp11.md (movdi): Use offsetable memory for floating store.
- (lshrsi3, negsi2): Delete irrelevant comment.
-
-2002-10-11 Andreas Bauer <baueran@in.tum.de>
-
- * config/i386/i386.c (ix86_function_ok_for_sibcall): Allow
- indirect calls to be sibcall optimized.
- * config/i386/i386.md (sibcall_1): New.
- (call_1): Add no-sibcalls condition.
- (sibcall_value_1): New.
- (call_value_1): Add no-sibcalls condition.
-
-2002-10-11 Eric Christopher <echristo@redhat.com>
-
- * output.h (default_valid_pointer_mode): Declare.
- * varasm.c (default_valid_pointer_mode): Define.
- * target-def.h (TARGET_VALID_POINTER_MODE): Use.
- * target.h: Ditto.
- * tree.c (build_pointer_type_for_mode): New function.
- (build_pointer_type): Use.
- (build_reference_type_for_mode): New function.
- (build_reference_type): Use.
- * tree.h: Declare new functions.
- * c-common.c (handle_mode_attribute): Use new functions, check
- for type.
- * stor-layout.c (layout_type): Depend on machine mode for
- REFERENCE_TYPE and POINTER_TYPE.
- * dwarf2out.c (simple_type_size_in_bits): Move upward in file.
- (modified_type_die): Use instead of PTR_SIZE for POINTER_TYPE
- and REFERENCE_TYPE.
- * config/mips/mips.c (mips_valid_pointer_mode): New function.
- (TARGET_VALID_POINTER_MODE): Use and define.
- * config/mips/mips-protos.h (mips_valid_pointer_mode): Declare.
-
-2002-10-11 Geoffrey Keating <geoffk@apple.com>
-
- * cse.c (mention_regs): Set SUBREG_TICKED to the register number,
- not the address of the REG.
- (struct cse_reg_info): Make subreg_ticked unsigned.
-
-2002-10-11 Janis Johnson <janis187@us.ibm.com>
-
- * doc/compat.texi: Add info about C++ libraries.
-
-2002-10-11 Richard Henderson <rth@redhat.com>
-
- PR opt/8165
- * gcse.c (adjust_libcall_notes): Also adjust notes for INSN.
-
-2002-10-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * cfganal.c (dfs_enumerate_from): Use PARAMS.
- * genautomata.c (output_insn_code_cases): Likewise.
- * real.c (real_format): Likewise.
- * tree.c (tree_size): Revise expressions using TREE_CODE_LENGTH to
- ensure value is promoted before doing subtraction.
-
-Fri Oct 11 22:22:38 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * calls.c (expand_call): Simplify noreturn call.
-
- PR c/7344
- * cfgbuild.c (make_edges): Create edge cache when we do have
- large jumptable.
- * expr.c (do_tablejump): Note size of maximal jumptable.
- * function.c (prepare_function_start): Zero out size.
- * function.h (function): Add max_jumptable_ents.
-
- * cfgcleanup.c (insn_match_p): Verify sibcall flag for calls to.
-
-Fri Oct 11 12:34:33 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (movv8qi_i+2): For V8QI destinations, generate V4HI
- register for mperm_w operation.
-
-Fri Oct 11 10:56:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * emit-rtl.c (gen_lowpart_common): When asked to make a vector from
- an integer, use simplify_gen_subreg.
-
-2002-10-10 Diego Novillo <dnovillo@redhat.com>
-
- * calls.c (flags_from_decl_or_type): Make extern.
- (ECF_*): Move ...
- * rtl.h (ECF_*): ... here.
- (flags_from_decl_or_type): Declare.
-
-2002-10-10 Roger Sayle <roger@eyesopen.com>
- Nathan Sidwell <nathan@codesourcery.com>
-
- * fold-const.c (fold) [RSHIFT_EXPR]: Optimize arithmetic right
- shifts of the form -1 >> x.
-
-Thu Oct 10 16:52:55 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * cfgcleanup.c (insn_match_p): Verify sibcall flag for calls to.
-
-2002-10-10 Aldy Hernandez <aldyh@redhat.com>
-
- * extend.texi (Vector Extensions): Remove comment about single
- element vectors.
-
-2002-10-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * fold-const.c (size_htab_hash): Use htab_hash_pointer.
- * function.c (insns_for_mem_hash): Likewise.
- * varasm.c (STRHASH): Likewise.
-
-2002-10-10 Stuart Hastings <stuart@apple.com>
-
- * cse.c (struct cse_reg_info): Add subreg_ticked.
- (SUBREG_TICKED): New.
- (get_cse_reg_info): Initialize SUBREG_TICKED.
- (mention_regs): Use it.
- (invalidate): Set SUBREG_TICKED.
- (invalidate_for_call): Likewise.
- (addr_affects_sp_p): Likewise.
-
-2002-10-10 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.md (tls_local_dynamic_base): Put pic reg
- into proper operand.
-
-2002-10-10 Denis Chertykov <denisc@overta.ru>
-
- * config/ip2k/ip2k.c (function_epilogue): Optimize stack
- deallocation.
- * config/ip2k/libgcc.S: Combine routines used by function
- epilogue.
-
-2002-10-10 Jim Wilson <wilson@redhat.com>
-
- * cse.c (fold_rtx): Don't perform associative optimization for DIV and
- UDIV.
-
-2002-10-10 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/aix52.h: New file.
- * config/rs6000/t-aix52: New File.
- * config.gcc (rs6000-ibm-aix5.1.*): New entry.
- (rs6000-ibm-aix[56789].*): Default to AIX 5.2.
-
-Thu Oct 10 19:37:54 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- PR target/5610
- * invoke.texi (-msse-math): Kill
- (-msse): Add note to mfpmath=sse.
-
-Thu Oct 10 17:08:30 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- PR target/7723
- * i386.c (ix86_expand_vector_move): Do not generate const0->mem moves.
-
-2002-10-10 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/8179
- * gcc.c (cpp_options): Add {ansi}, move %{m*} to same location
- as cc1_options.
- (default_compilers): Pass debug options when preprocessing
- stdin.
-
-2002-10-06 Richard Henderson <rth@redhat.com>
-
- * toplev.c (rest_of_compilation): Revert opt/2960 change.
-
-Wed Oct 9 21:18:43 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (*_cost): Add branch costs.
- (override_options): set ix86_branch_cost.
- (ix86_expand_int_movcc): Use BRANCH_COST.
- * i386.h (costs): Add branch_cost.
-
-2002-10-09 Zack Weinberg <zack@codesourcery.com>
-
- PR c/7353
- * c-decl.c (start_decl): Unconditionally issue error for
- 'typedef foo = bar'.
- (finish_decl): Remove special case for TYPE_DECL with initializer.
-
- * doc/extend.texi: Delete "Naming Types" section. Change all
- cross-references to that section to refer to "Typeof" instead.
- Add the useful safe-max()-macro example from "Naming Types" to
- "Typeof", rewritten using that extension. Add some compatibility
- notes to "Typeof."
-
-2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * loop.c: Revert 2002-08-15 change.
- (LOOP_REGNO_NREGS): Ensure type is int.
-
-2002-10-09 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (extenddftf2): Change to define_insn
- which copies first FPR and clears second.
- (extendsftf2): Same.
- (floatditf2): Fix typo.
- (floatsitf2): Same.
- (fix_trunctfdi2): Same.
- (fix_trunctfsi2): Same.
-
-2002-10-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * conflict.c (arc_hash): Change return type to hashval_t.
- * cselib.c (get_value_hash): Likewise.
- * genautomata.c (automaton_decl_hash, insn_decl_hash, decl_hash,
- state_hash, automata_list_hash): Likewise.
- * read-rtl.c (def_hash): Likewise.
- * tree.c (type_hash_hash): Likewise.
-
-2002-10-08 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.c (rs6000_ra_ever_killed): Call
- prologue_epilogue_contains instead of using REG_MAYBE_DEAD notes.
-
-Wed Oct 9 15:54:49 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (ffssi2): Fix emitted code.
-
-2002-10-09 Ulrich Weigand <uweigand@de.ibm.com>
-
- * cse.c (insn_live_p): Pass insn pattern, not full insn
- to may_trap_p.
-
-2002-10-09 Neil Booth <neil@daikokuya.co.uk>
-
- * cppmacro.c (paste_tokens): Only allow / to paste with =.
-
-2002-10-09 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (movdf splitter): Use gen_int_mode on
- 64-bit hosts.
- (movtf_internal): Reference correct displacement for second value
- in memory.
- (movtf splitter): Correct generation of constants in 64-bit mode.
-
-2002-10-09 Alan Modra <amodra@bigpond.net.au>
-
- * libgcc2.c (__floatdisf): Properly cure double rounding.
-
-2002-10-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * c-common.c (cb_register_builtins): Define __WCHAR_MAX__.
- * doc/cpp.texi (Common Predefined Macros): Document.
-
-2002-10-09 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- PR doc/7484
- * doc/invoke.texi (Option Summary): List
- -Wmissing-declarations as a C only option.
-
-2002-10-08 Roger Sayle <roger@eyesopen.com>
-
- * fold-const.c (fold) [LROTATE_EXPR, RROTATE_EXPR]: Optimize
- left and right rotates of ~0, i.e. integer_all_onesp (arg0).
- [LSHIFT_EXPR, RSHIFT_EXPR]: Optimize shifts and rotates of zero.
-
-Tue Oct 8 01:24:19 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (x86_sse_partial_reg_dependency, x86_sse_partial_regs,
- x86_sse_typeless_stores, x86_sse_load0_by_pxor): New global
- variables.
- (safe_vector_operand): Update sse_clrv4sf call.
- (ix86_expand_buildin): Likewise
- * i386.h (x86_sse_partial_reg_dependency, x86_sse_partial_regs,
- x86_sse_typeless_stores, x86_sse_load0_by_pxor): Declare.
- (TARGET_SSE_PARTIAL_REG_DEPENDENCY, TARGET_SSE_PARTIAL_REGS,
- TARGET_SSE_TYPELESS_STORES, TARGET_SSE_TYPELESS_LOAD0): New
- macros.
- * i386.md (movsf*, movdf*, movti, movv4sf, movv2df, movv16qi, movv8hi,
- movv4si): Obey the new flags.
- (floatsi2sf, floatdi2sf, truncatedf2sf): Emit extra load of 0 to avoid
- reformating penalty.
- (anddf, cmov patterns): Avoid reformating by first converting.
- (sse_cvtsd2ss): Fix predicate.
- (sse2_clrti): Fix mode,
- (sse_clrv4sf): Avoid unspec.
-
-2002-10-08 Jakub Jelinek <jakub@redhat.com>
-
- * config/sparc/t-linux64 (MULTILIB_OPTIONS): Remove
- mno-app-regs|mcmodel=medany.
- (MULTILIB_DIRNAMES, MULTILIB_OSDIRNAMES): Remove alt.
- (MULTILIB_EXCEPTIONS, MULTILIB_EXCLUSIONS, MULTILIB_MATCHES): Remove.
- (CRTSTUFF_T_CFLAGS): Define.
-
-2002-10-08 Roger Sayle <roger@eyesopen.com>
-
- PR target/8087
- * simplify-rtx.c (avoid_constant_pool_reference): Allow constant
- pool references that are constructed using LO_SUM.
-
-2002-10-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * c-opts.c (c_common_decode_option): Add warn_strict_aliasing to
- -Wall.
- * c-typeck.c (build_c_cast): Use warn_strict_aliasing, tweak
- message.
- * flags.h (warn_strict_aliasing): Declare.
- * toplev.c (warn_strict_aliasing): Define.
- (lang_independent_options): Add it.
- * doc/invoke.texi (-Wstrict-aliasing): Document it.
-
-2002-10-08 Zack Weinberg <zack@codesourcery.com>
-
- * system.h (GCCBUGURL): Delete.
- * version.c (bug_report_url): New. Add commentary about
- modifying both these strings in modified distributions.
- * version.h: Declare bug_report_url.
-
- * diagnostic.c, gcc.c, gcov.c: Globally replace GCCBUGURL with
- bug_report_url.
-
-2002-10-08 Nick Clifton <nickc@redhat.com>
-
- * config/rs6000/spe.h (__ev_set_acc_u64): Use __ev_create_u64 to
- convert uint64_t into __ev64_opaque__.
- (__ev_set_acc_s64): Likewise, but using signed types.
-
-2002-10-08 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("*doloop_si_long"): Add missing operand.
- ("*doloop_di_long"): Likewise.
-
-Tue Oct 8 16:50:10 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * print-rtl.c (print_rtx): Increase buffer size for real numbers.
-
-2002-10-08 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md (define_attr cpu): Add r4111.
-
-2002-10-08 Anthony Green <green@redhat.com>
-
- * bitmap.c (bitmap_equal_p): Clear all bitmap_head fields.
-
-2002-10-08 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
-
- * config/c4x/c4x.c (c4x_print_operand): Enlarge buffer
- for REAL_VALUE_TO_DECIMAL output.
-
-2002-10-07 Richard Henderson <rth@redhat.com>
-
- * cse.c (fixed_base_plus_p): Turn FIXED_BASE_PLUS_P into a
- function; cleanup PLUS case by using recursion. Update all users.
- (NONZERO_BASE_PLUS_P): Remove.
- (find_comparison_args): Use rtx_addr_can_trap_p instead.
- (fold_rtx): Use nonzero_address_p.
- * rtl.h (nonzero_address_p): Declare.
- * rtlanal.c (rtx_varies_p): Handle ADDRESSOF.
- (rtx_addr_can_trap_p): Likewise.
- (nonzero_address_p): New.
- * simplify-rtx.c (NONZERO_BASE_PLUS_P): Remove.
- (simplify_relational_operation): Use nonzero_address_p.
-
-2002-10-07 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_override_options): Set
- real_format_for_mode for IBM extended format, if enabled.
- (easy_fp_constant): Add TFmode.
- (rs6000_legitimize_address): Add TFmode.
- (rs6000_legitimate_address): Same.
- (function_arg_advance): TFmode uses two FPRs.
- (rs6000_emit_prologue): Fix warning.
- (rs6000_output_function_epilogue): Add TFmode.
- (output_toc): Add TFmode.
- * rs6000.h (SLOW_UNALIGNED_ACCESS): Add TFmode.
- (LEGITIMATE_OFFSET_ADDRESS_P): Add TFmode.
- * rs6000.md (movtf splitter): Load TFmode constant.
-
-2002-10-07 Dale Johannesen <dalej@apple.com>
-
- * rtl.h: Add NOTE_PRECONDITIONED.
- * unroll.c: Set it.
- * loop.c: Set loop_info->preconditioned from it.
- * doloop.c: Permit doloop treatment when loop_info->preconditoned.
-
-2002-10-07 Richard Henderson <rth@redhat.com>
-
- * config/i960/i960.c (i960_setup_incoming_varargs): Create a
- new rtx for comparing the argument pointer against zero.
- (i960_va_start): Similarly.
-
-2002-10-07 Richard Henderson <rth@redhat.com>
-
- * config/i960/i960.md (*): Use TFmode, not XFmode.
- * config/i960/i960.c (*): Likewise.
- (i960_arg_size_and_align): Remove XFmode alignment hack.
- (i960_round_align): Merge code from ROUND_TYPE_ALIGN.
- * config/i960/i960.h (LONG_DOUBLE_TYPE_SIZE): Use 128, not 96.
- (MAX_LONG_DOUBLE_TYPE_SIZE): Likewise.
- (DATA_ALIGNMENT, ROUND_TYPE_SIZE): Remove.
-
-2002-10-07 Richard Henderson <rth@redhat.com>
-
- * config/fp-bit.c (EXTENDED_FLOAT_STUBS): Flush out all XF/TFmode
- entry points; use void return value and argument list.
-
-2002-10-06 Andreas Bauer <baueran@in.tum.de>
-
- * calls.c (expand_call): Fix function-is-volatile check.
-
-2002-10-05 Naohiko Shimizu <nshimizu@keyaki.cc.u-tokai.ac.jp>
-
- * t-pdp11: Add MULTILIB support for msoft-float.
- * pdp11.h (LEGITIMATE_CONSTANT_P): Fix soft-float case.
-
- * t-pdp11: Add LIB2FUNCS_EXTRA.
- * pdp11.c (pdp11_output_function_prologue): Restrict offset to 16bit,
- add preceding 0 to the octal constant, rename 'fp' to 'r5', rename
- 'fldd' to 'ldd', rename 'fstd' to 'std'.
- (pdp11_output_function_epilogue): Likewise.
- (output_move_quad): Make the comment gas compatible.
- (output_ascii): Add preceding 0 to the octal constant.
- (print_operand_address): Add pre_modify, post_modify.
- (output_addr_const_pdp11): Add preceding 0 to the octal constant.
- * pdp11.h (GO_IF_LEGITIMATE_ADDRESS) : Add 'movb' pre_modify case
- with the indication of Paul Koning.
- (PRINT_OPERAND): Fix floating constant.
- * pdp11.md (movdi): Restrict matching pattern.
- (movqi): Generalize the matching pattern.
- (movdf): Restrict matching pattern.
- (zero_extendqihi2): Change constant representation.
- (floatsidf2): Fix wrong operands.
- (addqi3): Fix wrong instruction name.
- (subqi3): Fix wrong instruction name.
- (andsi3, andhi3, andqi3): Simplify and fix to use 'bic'.
- (xorsi3): Fix wrong insn.
- (one_cmplqi2): Add two operand pattern.
- (lsrsi3): New.
- (negsi2): New.
- (call): Add register indirect case.
- (mod): Fix wrong subreg.
-
-2002-10-06 Eric Botcazou <ebotcazou@libertysurf.fr>
- Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- PR c/7411
- * expr.c (expand_expr) [PLUS]: Simplify after the operands
- have been expanded in EXPAND_NORMAL mode.
-
-2002-10-06 Richard Henderson <rth@redhat.com>
-
- * config/rs6000/rs6000.md (load_toc_v4_PIC_2): Fix base constraint.
-
-2002-10-06 Richard Henderson <rth@redhat.com>
-
- PR optimization/2960
- * toplev.c (rest_of_compilation): Don't copy_loop_headers if
- optimize_size.
-
-2002-10-06 Alexandre Oliva <aoliva@redhat.com>
-
- * config/mips/mips.h (SIZE_TYPE, PTRDIFF_TYPE): Override
- previously definitions.
-
-2002-10-06 Frank Ch. Eigler <fche@redhat.com>
-
- * cppinit.c (init_standard_includes, parse_option): Use strncmp.
- * c-opts.c (find_opt): Similarly.
-
-Sat Oct 5 22:48:06 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * athlon.md: rewrite to DFA.
- * i386 (ix86_adjust_cost): Drop memory latency code.
- (ia32_use_dfa_pipeline_interface): Return true for Athlon.
-
-2002-10-05 Jakub Jelinek <jakub@redhat.com>
-
- * gcc.c (set_multilib_dir): Don't access *end.
- Use memcpy instead of strncpy. Don't write beyond malloced buffer.
- (print_multilib_info): Don't show paths starting with ".:".
- * genmultilib: Add new option, "yes" if multilibs are enabled.
- Update comments. If multilibs not enabled, print .:${osdirout}
- for each directory. If multilibs are enabled, always print
- ${dirout}:${osdirout}, even if the two are the same.
- * Makefile.in (s-mlib): Pass @enable_multilib@ to genmultilib.
- Pass all MULTILIB_* variables to genmultilib even if
- --disable-multilib but MULTILIB_OSDIRNAMES is not empty.
-
-2002-10-04 Zack Weinberg <zack@codesourcery.com>
-
- * gcc.c (process_command): Set .validated for -pipe. Correct
- grammar in comment.
-
-2002-10-04 Bruce Korb <bkorb@gnu.org>
-
- * fixinc/inclhack.def(hpux11_abs): use format fix
- * fixinc/fixincl.x: regenerate
- * fixinc/tests/base/stdlib.h: accommodate new fix test
-
-Sat Oct 5 19:42:45 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * c-common.c (cb_register_builtins): Use really_no_inline.
-
-2002-10-04 David Edelsohn <edelsohn@gnu.org>
-
- * unroll.c (copy_loop_body): Remove REG_EQUAL note attached to
- copied instruction if the note is not loop invariant.
-
-2002-10-04 Loren J. Rittle <ljrittle@acm.org>
-
- * gcc/ginclude/stddef.h: Support the FreeBSD 5 typedef system.
-
-2002-10-04 Steve Ellcey <sje@cup.hp.com>
-
- * doc/invoke.texi (HPPA): Add -mlinker-opt, -mgnu-ld,
- and -mhp-ld options to list of options. Add -mgnu-ld
- and -mhp-ld option descriptions.
-
-2002-10-04 Steve Ellcey <sje@cup.hp.com>
-
- * fixinc/inclhack.def (hpux11_abs): New.
- (stdio_va_list): change __va_list__ to __gnuc_va_list.
- * fixinc/fixincl.x: Rebuild.
-
-2002-10-04 Roger Sayle <roger@eyesopen.com>
-
- * config/i386/i386.h (processor_costs): Add new fields fadd,
- fmul, fdiv, fabs, fchs and fsqrt to costs structure.
- (RTX_COSTS): Use these fields to determine the RTX costs
- of floating point addition/subtraction, multiplication,
- division, fabs, negation and square root respectively.
- * config/i386/i386.c (size_cost): Provide instruction sizes
- for these new fields.
- (i386_cost, i486_cost, pentium_cost, pentiumpro_cost,
- k6_cost, athlon_cost, pentium4_cost): Provide typical cycle
- counts for these new fields for all x86 processor variants.
-
-2002-10-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * mips.c (mips_const_double_ok): Delete unused variable.
-
- * gengtype.c (rtx_next): Change type to int.
-
-2002-10-04 Andreas Jaeger <aj@suse.de>
-
- * config/i386/t-linux64 (MULTILIB_OSDIRNAMES): Fix value.
-
-2002-10-04 Richard Henderson <rth@redhat.com>
-
- * real.h (SIGNIFICAND_BITS): Add one more word.
- (CONST_DOUBLE_FORMAT): Accomodate 6 words.
- * real.c (times_pten): New.
- (real_to_decimal, real_from_string): Use it.
- (sticky_rshift_significand): Use & to find modulus.
- (rshift_significand, lshift_significand): Likewise.
- (do_divide): Apply sticky bit after normalization.
- (real_to_decimal, real_to_hexadecimal): Fix sign of Inf and NaN.
-
-2002-10-03 Andreas Bauer <baueran@in.tum.de>
-
- * doc/tm.texi (FUNCTION_OK_FOR_SIBCALL): Remove.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): New.
-
-2002-10-03 Andreas Jaeger <aj@suse.de>
-
- * gengtype.c (adjust_field_rtx_def): Cast variables of type size_t
- to unsigned long, adjust printf format string.
- (output_mangled_typename): Likewise.
-
-2002-10-03 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/vax/vax.c (vax_output_function_prologue): Use asm_fprintf.
- * config/vax/vax.h (VAX_FUNCTION_PROFILER_NAME): New.
- (FUNCTION_PROFILER): Rewrite to use ASM_GENERATE_INTERNAL_LABEL,
- assemble_name, asm_fprintf, and VAX_FUNCTION_PROFILER_NAME.
- (ASM_OUTPUT_MI_THUNK): Use asm_fprintf instead of REGISTER_PREFIX.
- (PRINT_OPERAND_PUNCT_VALID_P): Fix comment.
- * config/vax/elf.h (FUNCTION_PROFILER): Remove.
- (VAX_FUNCTION_PROFILER_NAME): Redefine as "__mcount".
-
-2002-10-03 Mark Mitchell <mark@codesourcery.com>
-
- * doc/invoke.texi (-Wabi): Document mangling bug.
-
-2002-10-04 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Use a
- name for the tbtab label that depends on the function asm name.
- Don't output tbtab label unless optional_tbtab.
- (output_mi_thunk): Formatting.
-
-2002-10-03 Richard Henderson <rth@redhat.com>
-
- * config/m68k/m68k.h (OVERRIDE_OPTIONS): Move additional code ...
- * config/m68k/m68k.c (override_options): ... here.
- * config/m68k/m68kelf.h (OVERRIDE_OPTIONS): Remove.
- * config/m68k/m68kv4.h (OVERRIDE_OPTIONS): Remove.
- * config/m68k/linux.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
- * config/m68k/netbsd-elf.h (SUBTARGET_OVERRIDE_OPTIONS): Remove.
-
-2002-10-03 Richard Henderson <rth@redhat.com>
-
- * real.h (struct real_value): Use ENUM_BITFIELD.
-
-2002-10-03 Richard Henderson <rth@redhat.com>
-
- * config/i960/i960.md (call, call_value): Use emit_call_insn.
-
-2002-10-03 Steve Ellcey <sje@cup.hp.com>
-
- * config/pa/pa64-hpux.h (INIT_ENVIRONMENT): New.
-
-2002-10-03 Steve Ellcey <sje@cup.hp.com>
-
- * config.gcc (hppa*64*-*-hpux11*): Check gnu_ld.
- * config/pa/pa.h (MASK_GNU_LD): New.
- (TARGET_GNU_LD): New.
- * config/pa/pa64-hpux.h (LINK_SPEC): Set based
- on gnu-ld and MASK_GNU_LD.
- (SUBTARGET_SWITCHES): New gnu-ld & hp-ld flags.
-
-Thu Oct 3 23:35:51 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (athlon_cost): Fix the move costs.
-
-Thu Oct 3 23:20:58 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * final.c (final): Use symbol name as function name for profiling.
- * profile.c (get_exec_counts): Likewise.
- (branch_prob): Likewise.
-
-2002-10-03 Jakub Jelinek <jakub@redhat.com>
-
- * longlong.h (__udiv_qrnnd): Remove PARAMS from prototype.
-
-2002-10-03 Jakub Jelinek <jakub@redhat.com>
-
- * gcc.c (print_multi_os_directory): New variable.
- (option_map): Support --print-multi-os-directory.
- (struct prefix_list): Add os_multilib field.
- (multilib_os_dir): New variable.
- (static_specs): Add multilib_options.
- (find_a_file): Add multilib argument. Search in GCC or OS multilib
- subdirs if nonzero.
- (read_specs, execute): Update callers.
- (find_file): Likewise. Don't prefix name with multilib_dir, instead
- pass 1 as multilib option.
- (display_help): Include --print-multi-os-directory.
- (add_prefix): Add os_multilib argument. Initialize pl->os_multilib.
- (process_command): Update callers. Handle --print-multi-os-directory.
- (do_spec_1) ['D']: Use multilib_os_directory if pl->os_multilib is
- set.
- (main): Update find_a_file and add_prefix callers.
- Handle print_multi_os_directory.
- (struct mdswitchstr): New.
- (mdswitches, n_mdswitches): New variables.
- (used_arg): Add MULTILIB_DEFAULT switches too if they are not
- present on the command line nor their mutually incompatible
- switches.
- (default_arg): Optimize.
- (set_multilib_dir): Compute multilib_os_dir. Initialize mdswitches
- array.
- (print_multilib_info): Only print GCC multilib dir name, not OS
- multilib dirname.
- * genmultilib: Add osdirnames parameter. Output multilib_options
- variable. If osdirnames is specified, output dirnames as
- dirname:osdirname.
- * mklibgcc.in: Use MULTILIB_OSDIRNAMES, --print-multi-directory
- and --print-multi-os-directory instead of SHLIB_SLIBDIR_SUFFIXES
- to compute libgcc_s soname and install path.
- * Makefile.in (libgcc.mk): Pass MULTILIB_OSDIRNAMES instead of
- SHLIB_SLIBDIR_SUFFIXES to mklibgcc.
- (s_mlib): Pass MULTILIB_OSDIRNAMES or nothing as last genmultilib
- argument.
-
- * config/sparc/t-linux64 (MULTILIB_OSDIRNAMES): Set.
- (SHLIB_SLIBDIR_SUFFIXES): Remove.
- * config/sparc/linux64.h (STARTFILE_SPEC32, STARTFILE_SPEC64,
- ENDFILE_SPEC32, ENDFILE_SPEC64, ENDFILE_COMMON): Remove.
- (STARTFILE_SPEC, ENDFILE_SPEC): Don't distinguish between -m32
- and -m64.
- * config/sparc/t-sol2-64 (MULTILIB_OSDIRNAMES): Set.
- (SHLIB_SLIBDIR_SUFFIXES): Remove.
- * config/sparc/sol2-bi.h (STARTFILE_ARCH64_SPEC): Remove.
- (STARTFILE_ARCH_SPEC): Remove.
- * config/i386/t-linux64 (MULTILIB_OSDIRNAMES): Set.
- (SHLIB_SLIBDIR_SUFFIXES): Remove.
- * config/i386/linux64.h (STARTFILE_PREFIX_SPEC): Remove.
- * config/mips/t-iris6 (MULTILIB_OSDIRNAMES): Set.
- (SHLIB_SLIBDIR_SUFFIXES): Remove.
-
-Thu Oct 3 21:42:20 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * predict.c (choose_function_section): Avoid choice for linkonce functions.
-
-Thu Oct 3 15:15:00 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (lea to mul peep2): Fix condition.
-
-2002-10-02 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa-linux.h (FUNCTION_OK_FOR_SIBCALL): Delete macro.
- * pa32-linux.h (FUNCTION_OK_FOR_SIBCALL): Define.
-
-2002-10-02 David Mosberger-Tang <David.Mosberger@acm.org>
-
- * unwind.h (_Unwind_GetTextRelBase): Mark _C argument with
- attribute "unused".
-
- * config/t-libunwind: Mention unwind-sjlj.c.
- * unwind-libunwind.c: Change #ifdef __USING_LIBUNWIND_EXCEPTIONS__
- to #ifndef __USING_SJLJ_EXCEPTIONS__.
-
- * configure.in: Move sjlj-exceptions and --enable-libunwind-exceptions
- before inclusion of config.gcc, but after configuring the compiler etc.
- Determine default value for --enable-libunwind-exceptions based on
- whether the host has a libunwind library (not guaranteed to be correct,
- but it's a reasonable first guess and can always be overridden with an
- explicit --enable/disable-libunwind-exceptions.
- * config.gcc: For target ia64*-*-linux*, mention t-libunwind as a
- tmake_file when $use_libunwind_exceptions is enabled.
- * Makefile.in: Update comment: LIB2ADDEH is updated not just by
- ia64 (e.g., config/t-linux also updates it).
- * gcc.c (init_spec) [USE_LIBUNWIND_EXCEPTIONS]: Mention -lunwind
- along with the shared version of libgcc since the latter requires
- the former.
- * unwind-libunwind.c: New file.
- * config/t-libunwind: Ditto.
-
-2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * config.gcc: Remove support for vax-*-vms*.
- * config/vax/vms.h: Remove.
- * config/vax/xm-vms.h: Remove.
- * config/vax/vax-protos.h: Remove VMS-specific code.
- * config/vax/vax.c: Remove VMS-specific code.
-
-2002-10-02 Richard Henderson <rth@redhat.com>
-
- PR opt/7124
- * config/i386/i386.c (ix86_register_move_cost): Increase cost
- for secondary_memory_needed pairs.
-
-2002-10-02 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * doc/vms.texi: Blow away false include file section.
-
-2002-10-02 Roger Sayle <roger@eyesopen.com>
-
- PR optimization/6627
- * toplev.c (force_align_functions_log): New global variable.
- * flags.h (force_align_functions_log): Add extern prototype.
- * varasm.c (assemble_start_function): Use it to force minimum
- function alignment.
- * config/i386/i386.h (FUNCTION_BOUNDARY): Set the correct
- minimum function alignment to one byte.
- (TARGET_PTRMEMFUNC_VBIT_LOCATION): Store the virtual bit in
- the least significant bit of vtable member function pointers.
- * tree.h (enum ptrmemfunc_vbit_where_t): Move definition to
- here from cp/cp-tree.h.
-
-Wed Oct 2 17:01:36 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (print_operand_address): Use RIP addressing for offsetted
- label refs too.
-
-2002-09-30 David S. Miller <davem@redhat.com>
-
- PR middle-end/7151
- * config/sparc/sparc.md (movdi_insn_sp32_v9): Accept 'e' regs.
- (movdi reg/reg split): Match only on sparc32, and v9 when int regs.
-
-2002-10-01 Andreas Bauer <baueran@in.tum.de>
-
- * calls.c (expand_call): Remove the `no indirect check'
- for sibcall optimization; use function_ok_for_sibcall
- target hook; refine check for `function is volatile'.
- (FUNCTION_OK_FOR_SIBCALL): Remove the redefinition.
- * hooks.c (hook_tree_tree_bool_false): New.
- * hooks.h (hook_tree_tree_bool_false): Declare.
- * target-def.h (TARGET_FUNCTION_OK_FOR_SIBCALL): New.
- (TARGET_INITIALIZER): Add it.
- * target.h (struct gcc_target): Add function_ok_for_sibcall.
- * config/alpha/alpha.c: (alpha_function_ok_for_sibcall): New.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/alpha/alpha.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/arm/arm-protos.h: (arm_function_ok_for_sibcall):
- Remove function declaration.
- * config/arm/arm.c: (arm_function_ok_for_sibcall): Make
- function static and accept another argument of type `tree'.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/arm/arm.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/frv/frv.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/i386/i386.c: (ix86_function_ok_for_sibcall): New.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/i386/i386.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/pa/pa-linux.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- (TARGET_HAS_STUBS_AND_ELF_SECTIONS): New definition.
- * config/pa/pa.c: (pa_function_ok_for_sibcall): New.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/pa/pa.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/rs6000/rs6000-protos.h: (function_ok_for_sibcall):
- Remove function declaration.
- * config/rs6000/rs6000.c: (rs6000_function_ok_for_sibcall):
- Rename function_ok_for_sibcall to rs6000_function_ok_for_sibcall;
- rename first argument to `decl'; accept another argument
- of type `tree'; make static.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/rs6000/rs6000.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/sh/sh.c: (sh_function_ok_for_sibcall): New.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/sh/sh.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/sparc/sparc.c: (sparc_function_ok_for_sibcall): New.
- (TARGET_FUNCTION_OK_FOR_SIBCALL): Redefine accordingly.
- * config/sparc/sparc.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
- * config/xtensa/xtensa.h: (FUNCTION_OK_FOR_SIBCALL): Remove.
-
-2002-10-01 Roger Sayle <roger@eyesopen.com>
-
- * unroll.c (loop_iterations): Revert 2002-09-08 change.
-
-2002-10-01 Richard Henderson <rth@redhat.com>
-
- * real.c (real_to_decimal): Crop trailing zeros for DIGITS < 0.
- (real_to_hexadecimal): Likewise.
- * print-rtl.c (print_rtx): If we are linked with real.c, don't
- dump the XWINT fields of a floating point CONST_DOUBLE.
-
-2002-10-01 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/vax/elf.h (FUNCTION_PROFILER): Fix __mcount call.
-
-2002-10-01 Richard Henderson <rth@redhat.com>
-
- * calls.c (precompute_register_parameters): Force non-legitimate
- constants into pseudos.
-
-2002-10-01 Nick Clifton <nickc@redhat.com>
-
- * config/rs6000/spe.md (spe_evrlwi): Add missing third operand
- to assembler template.
-
-2002-10-01 Richard Henderson <rth@redhat.com>
-
- * dwarf2out.c (loc_descriptor_from_tree): Relax requirement
- for TLS debug info to !DECL_EXTERNAL.
-
-2002-10-01 Matt Thomas <matt@3am-software.com>
- Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (vax-*-netbsdelf*): Enable configuration.
- * config/elfos.h (PCC_BITFIELD_TYPE_MATTERS): Define only
- if not already defined.
- * config/vax/elf.h: New file.
- * config/vax/netbsd-elf.h: New file.
- * config/vax/vax.c: Include "debug.h".
- (vax_output_function_prologue): Add dwarf2 support. Use
- MAIN_NAME_P when checking for VMS_TARGET stack adjust.
- * config/vax/vax.h (CONST_OK_FOR_LETTER_P): Add cases for
- 'J' [0..63], 'K' [-128..127], 'L' [-32768..32767],
- 'M' [0..255], 'N' [0..65535], and, 'O' [-63..-1].
- (VAX_ISTREAM_SYNC): Remove.
- (INITIALIZE_TRAMPOLINE): Use gen_sync_istream.
- (JUMP_TABLES_IN_TEXT_SECTION): Define.
- (ASM_OUTPUT_REG_POP): Use reg_names for the stack pointer.
- (ASM_OUTPUT_ADDR_VEC_ELT): Use ASM_GENERATE_INTERNAL_LABEL
- and assemble_name.
- (ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
- (PRINT_OPERAND_PUNCT_VALID_P): Accept '|'.
- (PRINT_OPERAND): Output REGISTER_PREFIX for '|'.
- (INCOMING_RETURN_ADDR_RTX): Define.
- * config/vax/vax.md (VUNSPEC_BLOCKAGE)
- (VUNSPEC_SYNC_ISTREAM): Define.
- (blockage): Use VUNSPEC_BLOCKAGE.
- (sync_istream): New insn.
-
-2002-10-01 Richard Henderson <rth@redhat.com>
-
- * config/vax/vax.md (call_pop, *call_pop, call_value_pop)
- (*call_value_pop, call, call_value): Add dwarf2 EH support.
- (*call): New insn.
-
-2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
-
- PR c/8083
- * c-typeck.c (build_c_cast): Warn about type punning which breaks
- type based aliasing.
-
-2002-10-01 Mark Mitchell <mark@codesourcery.com>
-
- * stor-layout.c (update_alignment_for_field): New function.
- (place_union_field): Use it.
- (place_field): Likewise.
-
-2002-10-01 Nathan Sidwell <nathan@codesourcery.com>
-
- PR other/8077
- * gcc.c (cc1_options): Add space on -auxbase-strip.
-
-2002-10-01 Jim Wilson <wilson@redhat.com>
-
- * config/v850/v850.h (EPILOGUE_USES): Define.
-
-2002-09-30 Andrew Haley <aph@redhat.com>
-
- * flow.c (insn_dead_p): When using non-call-exceptions, don't
- eliminate insns that may trap.
- * cse.c (insn_live_p): Likewise.
-
-2002-10-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.h (PROCESSOR_R4121): Rename to PROCESSOR_R4120.
- (TARGET_MIPS4121): Rename to TARGET_MIPS4120.
- * config/mips/mips.c (mips_cpu_info): Rename vr4121 to vr4120.
- * config/mips/mips.md: Apply same renaming here.
-
-2002-10-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.c (PROCESSOR_R4320, TARGET_MIPS4320): Remove.
- (GENERATE_MULT3_SI): Remove use of TARGET_MIPS4320.
- * config/mips/mips.c (mips_cpu_info): Remove vr4320 entry.
- * config/mips/mips.md (define_attr cpu): Remove r4320.
- Remove vr4320 scheduler and uses of TARGET_MIPS4320.
-
-2002-10-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.c (mips16_strings): New variable.
- (mips_output_function_epilogue): Clear the SYMBOL_REF_FLAG of every
- symbol in mips16_strings. Free the list.
- (mips_encode_section_info): Keep track of local strings.
-
-2002-10-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md (bunge, bltgt, bungt): New define_expands.
- (sordered_df, sordered_sf): Remove.
- * config/mips/mips.c (get_float_compare_codes): New fn.
- (gen_int_relational, gen_conditional_move): Use it.
-
-2002-10-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips-protos.h (mips_emit_fcc_reload): Declare.
- * config/mips/mips.h (PREDICATE_CODES): Add fcc_register_operand.
- * config/mips/mips.c (fcc_register_operand): New function.
- (mips_emit_fcc_reload): New function, extracted from reload_incc.
- (override_options): Allow TFmode values in float registers
- if ISA_HAS_8CC.
- * cnfig/mips/mips.md (reload_incc): Change destination prediate
- to fcc_register_operand. Remove misleading source constraint.
- Use mips_emit_fcc_reload.
- (reload_outcc): Duplicate reload_incc.
-
-2002-09-30 Zack Weinberg <zack@codesourcery.com>
-
- * gcc.c (validate_switches): Handle all new forms of spec
- syntax introduced recently. Now returns a char *.
- (validate_all_switches): Repetitive logic broken out to...
- (validate_switches_from_spec): ...here.
- * mklibgcc.in: Don't @-flag commands to generate .oS files.
-
-2002-09-30 Ulrich Weigand <uweigand@de.ibm.com>
-
- * longlong.h: Partially synchronize with GMP-4.1 version:
- Use i370 definitions also for s390.
- Add generic definition of umul_ppmm in terms of smul_ppmm.
- [s390] (umul_ppmm): Remove.
- [s390] (smul_ppmm): Fix incorrect assembler constraints.
- [s390] (smul_ppmm, sdiv_qrnnd): Rename __xx to __x.
-
-2002-09-30 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/xtensa.h (REG_CLASS_NAMES, REG_CLASS_CONTENTS):
- Add new RL_REGS register class.
- (PREFERRED_RELOAD_CLASS, PREFERRED_OUTPUT_RELOAD_CLASS):
- Call xtensa_preferred_reload_class for both input and output reloads.
- * config/xtensa/xtensa.c (xtensa_regno_to_class): Use new RL_REGS class.
- (xtensa_preferred_reload_class): Handle output reloads; use RL_REGS
- instead of either AR_REGS or GR_REGS classes.
- (xtensa_secondary_reload_class): Use new RL_REGS class.
- * config/xtensa/xtensa-protos.h (xtensa_preferred_reload_class): Update.
-
-2002-09-30 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (hppa_encode_label): Don't drop '*' from function labels.
- (pa_strip_name_encoding): Strip '@' and '*', in that order.
- * pa.h (ASM_OUTPUT_LABELREF): Output user_label_prefix except when
- there is a '*' prefix in NAME.
-
-Mon Sep 30 21:33:23 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * reload.c (push_reload): Handle subregs and secondary memory.
- * reload1.c (gen_reload): Likewise.
-
- * jump.c (reg_or_subregno): New function.
- * rtl.h (reg_or_subregno): Declare
- * unroll.c (find_splittable_givs): Handle subregs.
-
-2002-09-30 Mark Mitchell <mark@codesourcery.com>
-
- * store-layout.c (finish_record_layout): Add free_p parameter.
- (layout_type): Pass it.
- * tree.h (finish_record_layout): Update prototype.
-
-Mon Sep 30 14:57:18 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (TARGET_CPP_CPU_BUILTINS): Define __SSE_MATH__.
-
- * gcse.c (cprop_jump): Check that the register has not
- been modified
- (cprop_jump): Likewise.
-
-2002-09-30 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h (BASE_REG_CLASS): Always return LO_REGS for Thumb.
- (MODE_BASE_REG_CLASS, case Thumb): Only return BASE_REGS if we know
- that we have a SImode access, and only then if reload hasn't completed;
- for all other cases, use LO_REGS.
-
-2002-09-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * openbsd.h: Fix typo in last change.
-
-2002-09-29 Richard Henderson <rth@redhat.com>
-
- * real.c (real_from_string): Apply sign last. Tidy exponent handling.
-
-2002-09-29 Richard Henderson <rth@redhat.com>
-
- PR c/8002
- * combine.c (force_to_mode): Handle FLOAT_MODE destinations
- for CONST_INT.
-
-2002-09-29 David Edelsohn <edelsohn@gnu.org>
-
- * real.h (ibm_extended_format): Declare.
- * real.c (encode_ibm_extended, decode_ibm_extended): New
- functions.
-
-2002-09-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * darwin-protos.h (darwin_asm_output_dwarf_delta): Prototype.
-
- * ia64.c (ia64_hpux_asm_file_end): Const-ify.
-
-2002-09-29 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * expmed.c (extract_bit_field): Fix bit-field extraction from SUBREGs.
-
-2002-09-29 Kazu Hirata <kazu@cs.umass.edu>
-
- * builtins.def: Fix comment formatting.
- * c-common.def: Likewise.
- * cfgcleanup.c: Likewise.
- * combine.c: Likewise.
- * gengtype.c: Likewise.
- * params.def: Likewise.
- * predict.def: Likewise.
- * rtl.def: Likewise.
- * stab.def: Likewise.
- * stor-layout.c: Likewise.
- * tree.def: Likewise.
- * config/darwin.c: Likewise.
- * config/darwin.h: Likewise.
- * config/dbxcoff.h: Likewise.
- * config/elfos.h: Likewise.
- * config/fp-bit.c: Likewise.
- * config/freebsd-spec.h: Likewise.
- * config/interix.h: Likewise.
- * config/libgloss.h: Likewise.
- * config/linux-aout.h: Likewise.
- * config/linux.h: Likewise.
- * config/lynx-ng.h: Likewise.
- * config/lynx.h: Likewise.
- * config/netbsd-aout.h: Likewise.
- * config/netbsd.h: Likewise.
- * config/netware.h: Likewise.
- * config/psos.h: Likewise.
- * config/ptx4.h: Likewise.
-
-2002-09-28 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog.4: Fix typos.
- * ChangeLog.6: Likewise.
- * FSFChangeLog.10: Likewise.
- * genattrtab.c: Fix comment typos.
- * haifa-sched.c: Likewise.
- * real.c: Likewise.
- * tree.h: Likewise.
- * config/arm/arm.c: Likewise.
- * config/arm/crti.asm: Likewise.
- * config/arm/crtn.asm: Likewise.
- * config/frv/frv.c: Likewise.
- * config/frv/frv.md: Likewise.
- * config/h8300/h8300.md: Likewise.
- * config/i386/rtemself.h: Likewise.
- * config/ia64/unwind-ia64.c: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/m88k/m88k.c: Likewise.
- * config/m88k/m88k.md: Likewise.
- * config/mips/sr71k.md: Likewise.
- * config/mmix/mmix.c: Likewise.
- * config/rs6000/rs6000.c: Likewise.
- * config/sh/sh.md: Likewise.
-
-2002-09-26 Theodore A. Roth <troth@verinet.com>
-
- * config/avr/avr.c: Eliminate use of _PC_ in pc relative insns.
- * config/avr/avr.md: Ditto.
-
-2002-09-27 Alexander N. Kabaev <ak03@gte.com>
-
- PR preprocessor/8055
- * cppmacro.c (stringify_arg): Do not overflow the buffer
- with the terminating NUL when the argument to be stringified
- has no tokens.
-
-2002-09-27 Richard Henderson <rth@redhat.com>
-
- * unroll.c (simplify_cmp_and_jump_insns): New.
- (unroll_loop): Use it. Use simplify_gen_foo+force_operand
- instead of expand_simple_foo.
-
-2002-09-27 Richard Henderson <rth@redhat.com>
-
- PR optimization/7520
- * cfganal.c (flow_active_insn_p): New.
- (forwarder_block_p): Use it.
-
-2002-09-27 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (active_insn_p): Revert last change.
-
-2002-09-27 Jakub Jelinek <jakub@redhat.com>
-
- * doc/extend.texi (tls_model): Document.
- * varasm.c (decl_tls_model): New.
- * c-common.c (handle_tls_model_attribute): New.
- (c_common_attribute_table): Add tls_model.
- * config/alpha/alpha.c (alpha_encode_section_info): Use
- decl_tls_model.
- * flags.h (enum tls_model, flag_tls_default): Move...
- * tree.h (enum tls_model, flag_tls_default): ...here.
- (decl_tls_model): New prototype.
- * config/ia64/ia64.c (ia64_encode_section_info): Likewise.
- * config/i386/i386.c (ix86_encode_section_info): Likewise.
- * config/i386/i386.md (tls_global_dynamic, tls_local_dynamic_base):
- Allow !flag_pic.
-
-2002-09-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * LANGUAGES: Follow spelling conventions.
- * rtl.def: Likewise.
- * sbitmap.c: Likewise.
- * sched-int.h: Likewise.
- * sched-rgn.c: Likewise.
- * sibcall.c: Likewise.
- * simplify-rtx.c: Likewise.
- * ssa.c: Likewise.
- * stab.def: Likewise.
- * stmt.c: Likewise.
- * stor-layout.c: Likewise.
- * target.h: Likewise.
- * timevar.c: Likewise.
- * toplev.c: Likewise.
- * tree-dump.c: Likewise.
- * tree-inline.c: Likewise.
- * tree.c: Likewise.
- * tree.def: Likewise.
- * tree.h: Likewise.
- * unroll.c: Likewise.
- * varasm.c: Likewise.
- * vmsdbgout.c: Likewise.
- * treelang/treelang.texi: Likewise.
- * treelang/treetree.c: Likewise.
-
-2002-09-27 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (compute_saved_regs): Use a macro
- instead of a hard register number.
- (get_shift_alg): Use an enumerated type instead of numbers.
- (h8300_shift_needs_scratch_p): Likewise.
-
-2002-09-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * varasm.c (force_data_section): Remove.
- (assemble_constant_align): Likewise.
- * output.h: Remove corresponding prototypes.
-
-2002-09-26 Roger Sayle <roger@eyesopen.com>
-
- * stmt.c (expand_exit_loop_if_false): Expand a simple conditional
- jump, if the loop to exit is the top of the current nesting stack.
-
-2002-09-26 Torbjorn Granlund <tege@swox.com>
-
- * libgcc2.c (fixunsdfdi, fixunssfdi): Rewrite, avoiding `long long'
- arithmetic.
-
-2002-09-26 David S. Miller <davem@redhat.com>
-
- PR optimization/7335
- * calls.c (emit_library_call_value_1): Passing args by reference
- converts a CONST function into a PURE one.
-
-2002-09-26 David Edelsohn <edelsohn@gnu.org>
-
- * dbxout.c (FORCE_TEXT): Switch to current_function_decl, not
- text_section.
- * xcoffout.h (DBX_STATIC_BLOCK_START): Remove explicit change to
- text section.
- * config/rs6000/rs6000.c (rs6000_override_options): Allow
- function-sections and data-sections functionality on AIX.
-
-2002-09-26 David Edelsohn <edelsohn@gnu.org>
- Dale Johannesen <dalej@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_emit_move): Insert zero-extend
- in RTL for sub-word loads from memory.
-
-2002-09-26 Richard Henderson <rth@redhat.com>
-
- PR c/7160
- * sched-deps.c (sched_analyze_insn): Make clobber insns depend
- on call insns.
-
-2002-09-26 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (const_double_htab_eq): Remove unused variable.
-
-2002-09-26 Chris Lattner <sabre@nondot.org>
-
- * ssa.c (rename_insn_1): Handle RENAME_NO_RTX correctly when
- handling undefined values.
-
-2002-09-26 Richard Henderson <rth@redhat.com>
-
- PR opt/7520
- * emit-rtl.c (active_insn_p): Consider a clobber of the
- function return value to be active even after reload.
-
-2002-09-27 Alan Modra <amodra@bigpond.net.au>
-
- * doloop.c (doloop_modify_runtime <biv skips initial incr>): Adjust
- by absolute loop increment, not loop increment.
-
-2002-09-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * c-common.h: Follow spelling conventions.
- * cpplex.c: Likewise.
- * cpplib.h: Likewise.
- * gthr-dce.h: Likewise.
- * gthr-posix.h: Likewise.
- * optabs.c: Likewise.
- * output.h: Likewise.
- * profile.c: Likewise.
- * protoize.c: Likewise.
- * ra-rewrite.c: Likewise.
- * real.c: Likewise.
- * recog.c: Likewise.
- * reg-stack.c: Likewise.
- * regclass.c: Likewise.
- * regmove.c: Likewise.
- * reload.c: Likewise.
- * reload.h: Likewise.
- * reload1.c: Likewise.
- * reorg.c: Likewise.
- * resource.c: Likewise.
- * rtl.h: Likewise.
- * rtlanal.c: Likewise.
-
-2002-09-26 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/ia64.c (ia64_expand_load_address): Ensure correct mode
- for symbol address.
-
-2002-09-24 Eric Christopher <echristo@redhat.com>
-
- * config/mips/elf.h: Add HANDLE_SYSV_PRAGMA.
- * config/mips/elf64.h: Ditto.
-
-2002-09-24 Eric Christopher <echristo@redhat.com>
-
- * except.c (expand_builtin_extract_return_address): Handle case
- where Pmode != ptr_mode.
-
-2002-09-26 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (ASM_OUTPUT_EXTERNAL_LIBCALL): New
-
-2002-09-26 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (TARGET_DEFAULT): Include TARGET_ILP32.
-
-2002-09-26 Igor Shevlyakov <igor@microunity.com>
-
- * combine.c (simplify_set): Don't call to force_to_mode if size
- of integer type is larger than HOST_BITS_PER_WIDE_INT.
-
-2002-09-26 Janis Johnson <janis187@us.ibm.com>
-
- * Makefile.in (qmtest-g++): Fix file path.
-
-2002-09-26 Ulrich Weigand <uweigand@de.ibm.com>
-
- * expr.c (expand_expr) [MINUS_EXPR]: Convert A - const to
- A + (-const) on RTX level, even for unsigned types.
-
-2002-09-26 Ulrich Weigand <uweigand@de.ibm.com>
-
- * reload.c (dup_replacements): New function.
- (find_reloads): Use it to duplicate replacements at the top level
- of match_dup operands.
-
-2002-09-26 Miles Bader <miles@gnu.org>
-
- * v850.md ("length"): Change default value to 4.
-
-2002-09-26 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog.1: Follow spelling conventions.
- * ChangeLog.4: Likewise.
- * ChangeLog.6: Likewise.
- * FSFChangeLog.11: Likewise.
- * doc/cpp.texi: Likewise.
- * doc/invoke.texi: Likewise.
- * doc/tm.texi: Likewise.
-
-2002-09-26 Nick Clifton <nickc@redhat.com>
-
- * config.gcc: Add x prefix to v850e case for handling
- --with-cpu=v850e.
-
-2002-09-25 Zack Weinberg <zack@codesourcery.com>
-
- * gcc.c (input_suffix_matches, switch_matches,
- mark_matching_switches, process_marked_switches,
- process_brace_body): New functions - split from handle_braces.
- (handle_braces): Rewrite; handle %{S:X;T:Y;:D} syntax; accept
- and ignore whitespace in more places.
- (specs documentation comment): Document %{S:X;T:Y;:D}.
- Clarify other %{...} docs.
- * doc/invoke.texi: Document %{S:X;T:Y;:D}. Clarify other
- %{...} docs.
-
- * config/arm/aof.h (LINK_SPEC): Change %{ov*,*} to %{ov*}.
- * config/rs6000/sysv4.h: Use N-way choice spec syntax.
-
-2002-09-25 David S. Miller <davem@redhat.com>
-
- PR target/7842
- * config/sparc/sparc.c (set_extends): SImode ASHIFT does not
- extend.
-
-2002-09-25 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (const_double_htab_eq): Distinguish integer and
- fp CONST_DOUBLE; use real_identical.
-
-2002-09-25 Mark Mitchell <mark@codesourcery.com>
-
- * doc/invoke.texi: Add more -Wabi examples.
-
-2002-09-25 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.h (TARGET_MIPS4100): Add missing bracket.
-
-2002-09-24 Nathan Sidwell <nathan@codesourcery.com>
-
- * profile.c (end_branch_prob): Only look for __gcov_init on
- weak-enabled native compilers.
-
-2002-09-24 Denis Chertykov <denisc@overta.ru>
-
- * config/ip2k/ip2k.c (function_epilogue): Fix wrong numbers in
- cases of optimizing "add sp,w" to "inc sp".
-
-2002-09-24 Adam Nemet <anemet@lnxw.com>
-
- * config/arm/arm.c (thumb_unexpanded_epilogue): Don't generate
- epilogue for naked functions.
-
-2002-09-24 Adam Nemet <anemet@lnxw.com>
- Nick Clifton <nickc@redhat.com>
-
- * config/arm/arm.h (THUMB_FUNCTION_PROFILER): Remove.
- (FUNCTION_PROFILER): Only invoke THUMB_FUNCTION_PROFILER if it
- is defined.
-
-2002-09-24 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (preferred_la_operand_p): New function.
- * config/s390/s390-protos.h (preferred_la_operand_p): Declare it.
- * config/s390/s390.md ("addaddr_esame", "*la_ccclobber"): Replace by ...
- ("*la_64_cc", "*la_31_cc", splitters): ... these.
- ("*la_31"): Deactivate for TARGET_64BIT.
- ("*la_31_and", "*la_31_and_cc"): New.
-
-2002-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * real.h (real_value): Make `exp' explicitly signed.
-
-2002-09-24 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/elfos.h: Follow spelling conventions.
- * config/alpha/alpha.h: Likewise.
- * config/arc/arc.h: Likewise.
- * config/arm/arm.md: Likewise.
- * config/avr/avr.h: Likewise.
- * config/cris/cris.md: Likewise.
- * config/d30v/d30v.h: Likewise.
- * config/frv/frv.c: Likewise.
- * config/frv/frv.h: Likewise.
- * config/h8300/h8300.c: Likewise.
- * config/h8300/h8300.h: Likewise.
- * config/h8300/h8300.md: Likewise.
- * config/i386/cygwin.h: Likewise.
- * config/i386/i386.h: Likewise.
- * config/i386/sysv3.h: Likewise.
- * config/i960/i960.h: Likewise.
- * config/ia64/ia64.h: Likewise.
- * config/ia64/ia64.md: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/m32r/m32r.h: Likewise.
- * config/m68k/m68k.h: Likewise.
- * config/m88k/m88k.h: Likewise.
- * config/mcore/mcore.c: Likewise.
- * config/mcore/mcore.h: Likewise.
- * config/mcore/mcore.md: Likewise.
- * config/mips/mips.h: Likewise.
- * config/mmix/mmix.h: Likewise.
- * config/mmix/mmix.md: Likewise.
- * config/ns32k/netbsd.h: Likewise.
- * config/ns32k/ns32k.h: Likewise.
- * config/ns32k/ns32k.md: Likewise.
- * config/pa/pa.h: Likewise.
- * config/romp/romp.h: Likewise.
- * config/rs6000/rs6000.h: Likewise.
- * config/rs6000/rs6000.md: Likewise.
- * config/sparc/sparc.h: Likewise.
- * config/stormy16/stormy-abi: Likewise.
- * config/stormy16/stormy16.h: Likewise.
- * config/vax/vax.h: Likewise.
-
-2002-09-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/alpha/alpha.h: Remove commented-out macro
- definitions of HAVE_{POST|PRE}_{INC|DEC}REMENT.
- * config/avr/avr.h: Likewise.
- * config/d30v/d30v.h: Likewise.
- * config/dsp16xx/dsp16xx.h: Likewise.
- * config/i370/i370.h: Likewise.
- * config/i386/i386.h: Likewise.
- * config/i960/i960.h: Likewise.
- * config/m68k/m68k.h: Likewise.
- * config/m88k/m88k.h: Likewise.
- * config/mips/mips.h: Likewise.
- * config/ns32k/ns32k.h: Likewise.
- * config/pdp11/pdp11.h: Likewise.
- * config/romp/romp.h: Likewise.
- * config/rs6000/rs6000.h: Likewise.
- * config/s390/s390.h: Likewise.
- * config/sh/sh.h: Likewise.
- * config/sparc/sparc.h: Likewise.
- * config/stormy16/stormy16.h: Likewise.
- * config/vax/vax.h: Likewise.
-
-2002-09-23 Kazu Hirata <kazu@cs.umass.edu>
-
- * function.c (push_temp_slots_for_block): Remove.
- (push_temp_slots_for_target): Likewise.
- (get_target_temp_slot_level): Likewise.
- (set_target_temp_slot_level): Likewise.
- (get_first_block_beg): Likewise.
- * function.h: Remove corresponding prototypes.
-
-2002-09-23 Zack Weinberg <zack@codesourcery.com>
-
- * version.c (version_string): Now const char[].
- * version.h: Update to match.
-
-2002-09-23 Richard Henderson <rth@redhat.com>
-
- * config/i386/i386.h (MASK_ACCUMULATE_OUTGOING_ARGS_SET, MASK_MMX_SET,
- MASK_SSE_SET, MASK_SSE2_SET, MASK_3DNOW_SET, MASK_3DNOW_A_SET): Kill.
- (TARGET_SWITCHES): Don't reference them.
- * config/i386/i386.c (override_options): Use target_flags_explicit
- to examine bits set by the user.
-
-2002-09-23 Dale Johannesen <dalej@apple.com>
-
- * dbxout.c (dbxout_parms): Set current_sym_code for params
- passed on stack by invisible reference.
-
-2002-09-23 Richard Earnshaw <rearnsha@arm.com>
-
- * arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_DECL_LOCAL): Always allocate
- at least one byte of space.
-
-2002-09-23 Mark Mitchell <mark@codesourcery.com>
-
- * c-common.h (flag_abi_version): Fix typo in comment.
- * doc/invoke.texi (flag_abi_version): Document default value.
-
-2002-09-23 Hans-Peter Nilsson <hp@axis.com>
-
- * doc/extend.texi (Extended Asm): Clarify that overlap between
- asm-declared register variables used in an asm and the asm clobber
- list is not allowed.
- * stmt.c (decl_conflicts_with_clobbers_p): New function.
- (expand_asm_operands): Keep track of clobbered registers. Call
- decl_conflicts_with_clobbers_p for each input and output operand.
- If no conflicts found before, also do conflict sanity check when
- emitting clobbers.
-
-2002-09-23 Richard Henderson <rth@redhat.com>
-
- * c-common.c (cpp_define_data_format): Remove.
- (cb_register_builtins): Don't define __WCHAR_BIT__, __SHRT_BIT__,
- __INT_BIT__, __LONG_BIT__, __LONG_LONG_BIT__, __FLOAT_BIT__,
- __DOUBLE_BIT__, __LONG_DOUBLE_BIT__.
- * doc/cpp.texi: Don't document them either.
- (__SCHAR_MAX__, __SHRT_MAX__, __INT_MAX__, __LONG_MAX__,
- __LONG_LONG_MAX__): Document.
- (__TARGET_FLOAT_FORMAT__): Remove.
-
-2002-09-23 Richard Henderson <rth@redhat.com>
-
- * real.c (do_multiply): Normalize U before addition.
-
-2002-09-23 Mark Mitchell <mark@codesourcery.com>
-
- * c-common.c (flag_abi_version): New variable.
- * c-common.h (flag_abi_version): Declare it.
- * c-opts.c (missing_arg): Add -fabi-version.
- (c_common_decode_option): Process -fabi-version.
- * doc/invoke.texi (-fabi-version): Document it.
- (-Wabi): Add information about bit-fields in unions.
-
-2002-09-22 Roger Sayle <roger@eyesopen.com>
-
- * expr.c (STORE_BY_PIECES_P): New target macro.
- (can_store_by_pieces, store_by_pieces): Use STORE_BY_PIECES_P
- instead of MOVE_BY_PIECES_P.
- * doc/tm.texi: Document this new macro.
-
-2002-09-22 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/mips/netbsd.h (SUBTARGET_ASM_SPEC): Always pass -KPIC
- unless -fno-pic or -fno-PIC is specified.
-
-2002-09-22 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * c-common.c (preprocessing_trad_p): Define.
- * pa-hiux.h, pa-hpux.h, pa-hpux7.h (CPP_PREDEFINES): Delete.
- (TARGET_OS_CPP_BUILTINS, SUBTARGET_SWITCHES): Define.
- * pa-hpux10.h (TARGET_OS_CPP_BUILTINS, CPP_SPEC): Define.
- * pa-hpux11.h (TARGET_OS_CPP_BUILTINS): Define.
- * pa-linux.h (CPP_PREDEFINES): Delete.
- (TARGET_OS_CPP_BUILTINS, CPP_SPEC): Define.
- * pa32-linux.h, pa64-linux.h (CPP_SPEC): Delete.
- * pa-osf.h, pa-pro-end.h, rtems.h (CPP_PREDEFINES): Delete.
- (TARGET_OS_CPP_BUILTINS): Define.
- * pa.h (MASK_SIO, TARGET_SIO, TARGET_PA_10): Define.
- (TARGET_SWITCHES): Reformat. Use N_() macro. Add SUBTARGET_SWITCHES.
- (SUBTARGET_SWITCHES): Provide default definition.
- (TARGET_OPTIONS): Reformat. Use N_() macro.
- (CPP_PA10_SPEC, CPP_PA11_SPEC, CPP_PA20_SPEC, CPP_64BIT_SPEC,
- CPP_CPU_DEFAULT_SPEC, CPP_64BIT_DEFAULT_SPEC, SUBTARGET_EXTRA_SPECS,
- EXTRA_SPECS, CPP_SPEC, CPLUSPLUS_CPP_SPEC, CPP_PREDEFINES): Delete.
- (TARGET_CPU_CPP_BUILTINS): Define.
- (TARGET_OS_CPP_BUILTINS): Define for BSD-like systems.
- * doc/invoke.texi (msio, mwsio): Document new hppa options.
- * doc/tm.texi (TARGET_CPU_CPP_BUILTINS): Document macro
- preprocessing_trad_p().
-
-2002-09-22 Jason Thorpe <thorpej@wasabisystems.com>
-
- * doc/install.texi: Document behavior of --with-headers and
- --with-libs when arguments are omitted.
-
-2002-09-22 Kazu Hirata <kazu@cs.umass.edu>
-
- * dbxout.c: Follow spelling conventions.
- * defaults.h: Likewise.
- * df.c: Likewise.
- * diagnostic.h: Likewise.
- * doloop.c: Likewise.
- * dwarf2out.c: Likewise.
- * dwarfout.c: Likewise.
- * emit-rtl.c: Likewise.
- * except.c: Likewise.
- * explow.c: Likewise.
- * expmed.c: Likewise.
- * expr.c: Likewise.
- * expr.h: Likewise.
- * flags.h: Likewise.
- * flow.c: Likewise.
- * fold-const.c: Likewise.
- * function.c: Likewise.
- * function.h: Likewise.
- * gcc.c: Likewise.
- * gcov-io.h: Likewise.
- * gcov.c: Likewise.
- * gcse.c: Likewise.
- * genattrtab.c: Likewise.
- * genconfig.c: Likewise.
- * genrecog.c: Likewise.
- * ggc-page.c: Likewise.
- * ggc.h: Likewise.
- * global.c: Likewise.
- * gthr-win32.h: Likewise.
- * integrate.c: Likewise.
- * jump.c: Likewise.
- * langhooks.c: Likewise.
- * langhooks.h: Likewise.
- * line-map.h: Likewise.
- * local-alloc.c: Likewise.
- * longlong.h: Likewise.
- * loop.c: Likewise.
- * loop.h: Likewise.
-
-Tue Aug 27 22:26:35 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (BIGGEST_FIELD_ALIGNMENT): Set proper default for x86_64.
-
-Tue Aug 27 20:07:01 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (overwrite_options): Set -mpreferred-stack-boundary to 128
- for -Os/TARGET_64BIT too.
-
-2002-09-21 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog: Follow spelling conventions.
- * ChangeLog.0: Likewise.
- * ChangeLog.1: Likewise.
- * ChangeLog.2: Likewise.
- * ChangeLog.3: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.5: Likewise.
- * ChangeLog.6: Likewise.
- * FSFChangeLog.10: Likewise.
- * FSFChangeLog.11: Likewise.
- * alias.c: Likewise.
- * basic-block.h: Likewise.
- * c-aux-info.c: Likewise.
- * c-common.c: Likewise.
- * c-common.h: Likewise.
- * c-decl.c: Likewise.
- * c-format.c: Likewise.
- * c-semantics.c: Likewise.
- * c-typeck.c: Likewise.
- * calls.c: Likewise.
- * cfganal.c: Likewise.
- * cfgloop.c: Likewise.
- * collect2.c: Likewise.
- * combine.c: Likewise.
- * conflict.c: Likewise.
- * cppexp.c: Likewise.
- * cppfiles.c: Likewise.
- * cpphash.h: Likewise.
- * cppinit.c: Likewise.
- * cpplex.c: Likewise.
- * cpplib.c: Likewise.
- * cpplib.h: Likewise.
- * cppmacro.c: Likewise.
- * cse.c: Likewise.
-
-2002-09-21 Richard Earnshaw <rearnsha@arm.com>
-
- * netbsd-aout.h (NETBSD_LINK_SPEC_AOUT): New, takes old definition of
- LINK_SPEC.
- (LINK_SPEC): Define to NETBSD_LINK_SPEC_AOUT.
- * arm/netbsd.h (SUBTARGET_EXTRA_SEPCS): Add NETBSD_LINK_SPEC_AOUT.
- (LINK_SPEC): Rework to use NETBSD_LINK_SPEC_AOUT).
-
-2002-09-21 Richard Earnshaw <rearnsha@arm.com>
-
- PR opt/7930
- * cse.c (fold_rtx): Calculate old_cost before we fold each
- operand.
-
-2002-09-21 Richard Henderson <rth@redhat.com>
-
- * c-common.c (cpp_define_data_format): Remove __GCC_LITTLE_ENDIAN__,
- __GCC_BIG_ENDIAN__, __TARGET_BITS_ORDER__, __TARGET_BYTES_ORDER__,
- __TARGET_INT_WORDS_ORDER__, __TARGET_FLOAT_WORDS_ORDER__,
- __TARGET_USES_VAX_F_FLOAT__, __TARGET_USES_VAX_D_FLOAT__,
- __TARGET_USES_VAX_G_FLOAT__, __TARGET_USES_VAX_H_FLOAT__.
- * doc/cpp.texi: Don't document them.
-
-2002-09-21 Richard Henderson <rth@redhat.com>
-
- * c-common.c (builtin_define_float_constants): Use real_format
- to get the floating-point parameters.
-
-2002-09-21 Richard Henderson <rth@redhat.com>
-
- * real.c (struct real_format): Move to real.h.
- (real_format_for_mode): Rename from fmt_for_mode; update all users;
- initialize with ieee defaults.
- (real_to_target_fmt, real_from_target_fmt): New.
- (ieee_single_format, ieee_double_format, ieee_extended_motorola_format,
- ieee_extended_intel_96_format, ieee_extended_intel_128_format,
- ieee_quad_format, i370_single_format, i370_double_format,
- c4x_single_format, c4x_extended_format): Rename from s/_format//.
- (ieee_quad_format): Fix emin.
- (format_for_size, init_real_once): Remove.
- * real.h (struct real_format): Move from real.c.
- (real_format_for_mode): Declare.
- (real_to_target_fmt, real_from_target_fmt): Declare.
- (ieee_single_format, ieee_double_format, ieee_extended_motorola_format,
- ieee_extended_intel_96_format, ieee_extended_intel_128_format,
- ieee_quad_format, vax_f_format, vax_d_format, vax_g_format,
- i370_single_format, i370_double_format, c4x_single_format,
- c4x_extended_format): Declare.
- * toplev.c (do_compile): Don't call init_real_once.
-
- * defaults.h (INTEL_EXTENDED_IEEE_FORMAT): Remove.
- * doc/tm.texi (INTEL_EXTENDED_IEEE_FORMAT): Remove.
-
- * config/alpha/alpha.h (TARGET_FLOAT_FORMAT): Define.
- * config/alpha/osf5.h (LONG_DOUBLE_TYPE_SIZE): 64, if vax mode.
- * config/alpha/alpha.c (override_options): Set real_format_for_mode
- for VAX, if enabled.
-
- * config/c4x/c4x.c (c4x_override_options): Set real_format_for_mode
- for C4X.
-
- * config/i370/i370.h (OVERRIDE_OPTIONS): New.
- * config/i370/i370.c (override_options): New.
- * config/i370/i370-protos.h: Update.
-
- * config/i386/i386.c (override_options): Set real_format_for_mode
- for Intel 80-bit extended.
- * config/i386/i386.h (INTEL_EXTENDED_IEEE_FORMAT): Remove.
-
- * config/i960/i960.h (LONG_DOUBLE_TYPE_SIZE): Mind -mlong-double-64.
- (OVERRIDE_OPTIONS): Move code...
- * config/i960/i960.c (i960_initialize): ... here. Set
- real_format_for_mode for Intel 80-bit extended.
-
- * config/ia64/ia64.c (ia64_override_options): Set real_format_for_mode
- for Intel 80-bit extended, if enabled.
-
- * config/m68k/m68k.c (override_options): Set real_format_for_mode
- for Motorola 96-bit extended.
-
- * config/vax/vax.h (OVERRIDE_OPTIONS): New.
- * config/vax/vax.c (override_options): New.
- * config/vax/vax-protos.h: Update.
-
-2002-09-21 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.md (builtin_setjmp_receiver): Add
- #if TARGET_MACHO.
-
- * config/rs6000/rs6000.md (floatdisf2_internal2): Combine
- insns. Supply missing clobber of scratch reg.
-
-2002-09-20 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/m32r/m32r.c: Follow spelling conventions.
- * config/m32r/m32r.h: Likewise.
- * config/m32r/m32r.md: Likewise.
- * config/m68k/m68k.c: Likewise.
- * config/m88k/m88k.c: Likewise.
- * config/mcore/mcore.c: Likewise.
- * config/mips/mips.c: Likewise.
- * config/mips/mips.h: Likewise.
- * config/mmix/mmix.c: Likewise.
- * config/mn10200/mn10200.c: Likewise.
- * config/ns32k/ns32k.h: Likewise.
- * config/pa/pa.c: Likewise.
- * config/pa/pa64-linux.h: Likewise.
- * config/pdp11/pdp11.h: Likewise.
- * config/romp/romp.c: Likewise.
- * config/romp/romp.h: Likewise.
- * config/rs6000/eabi.asm: Likewise.
- * config/rs6000/linux64.h: Likewise.
- * config/rs6000/rs6000.c: Likewise.
- * config/rs6000/rs6000.h: Likewise.
- * config/rs6000/rs6000.md: Likewise.
- * config/rs6000/sysv4.h: Likewise.
- * config/rs6000/xcoff.h: Likewise.
-
-2002-09-20 Jim Wilson <wilson@redhat.com>
-
- * config/v850/v850/lib1funcs.asm (__muldi3): Change r5 to r28.
-
-2002-09-20 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.md (UNSPEC_GOTNTPOFF, UNSPEC_INDNTPOFF): New.
- * config/i386/i386.c (legitimate_pic_address_disp_p): Handle
- UNSPEC_GOTNTPOFF and UNSPEC_INDNTPOFF like UNSPEC_GOTTPOFF.
- (legitimate_address_p): Likewise.
- (legitimize_address): Use @gotntpoff and @indntpoff.
- (output_pic_addr_const): Handle UNSPEC_GOTNTPOFF and UNSPEC_INDNTPOFF.
- (output_addr_const_extra): Likewise.
-
-2002-09-20 Jim Wilson <wilson@redhat.com>
-
- * combine.c (try_combine): When split an instruction pair, where the
- first has a sign_extend src, verify that the src and dest modes match.
-
-2002-09-20 Richard Henderson <rth@redhat.com>
-
- * config/mips/mips.c (dfhigh, dflow, sfhigh, sflow): Remove.
- (override_options): Do not initialize them.
- (mips_const_double_ok): Allow no fp constants except zero,
- and not even that for mips16.
- (const_float_1_operand): Use dconst1.
- * config/mips/mips.md (movsf, movsf_internal1, movsf_internal2,
- movdf, movdf_internal1, movdf_internal1a, movdf_internal2):
- Don't allow arbitrary constants; fix predicates and C constraint.
-
-2002-09-20 Neil Booth <neil@daikokuya.co.uk>
-
- * cppmacro.c: Don't warn about function-like macros without
- '(' during pre-expansion.
-
-2002-09-20 Jim Wilson <wilson@redhat.com>
-
- * config/v850/v850.c (current_function_anonymous_args): Delete.
- (expand_prologue): Use current_function_args_info.anonymous_args.
- (expand_epilogue): Delete use of current_function_anonymous_args.
- * config/v850/v850.h (struct cum_arg): Add anonymous_args field.
- (INIT_CUMULATIVE_ARGS): Clear anonymous_args field.
- (current_function_anonymous_args): Delete extern declaration.
- (SETUP_INCOMING_VARARGS): Set anonymous_args field.
-
-2002-09-20 Geoffrey Keating <geoffk@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_emit_prologue): Update for change
- to load_macho_picbase.
- * config/rs6000/rs6000.md: Document Darwin-specific unspec IDs.
- (load_macho_picbase): Take the symbol to use as a parameter.
- (macho_correct_pic): New insn.
- (builtin_setjmp_reciever): On Darwin, restore the PIC register.
-
- * config/rs6000/rs6000.h (ELIMINABLE_REGS): Use
- RS6000_PIC_OFFSET_TABLE_REGNUM rather than hardcoding 30.
- (CAN_ELIMINATE): Likewise.
- (INITIAL_ELIMINATION_OFFSET): Likewise.
- (TOC_REGISTER): Likewise.
-
-2002-09-20 Richard Henderson <rth@redhat.com>
-
- * real.c (real_hash): New.
- * real.h: Declare it.
- * cse.c (canon_hash): Use it.
- * cselib.c (hash_rtx): Likewise.
- * emit-rtl.c (const_double_htab_hash): Likewise.
- * rtl.h (CONST_DOUBLE_REAL_VALUE): New.
- * varasm.c (struct rtx_const): Reduce vector size; separate
- integer and fp vectors.
- (HASHBITS): Remove.
- (const_hash_1): Rename from const_hash. Use real_hash. Do not
- take modulus MAX_HASH_TABLE.
- (const_hash): New. Do take modulus MAX_HASH_TABLE.
- (output_constant_def): Do not take modulus MAX_HASH_TABLE.
- (SYMHASH): Don't use HASHBITS.
- (decode_rtx_const): Copy only active bits from REAL_VALUE_TYPE.
- Fix CONST_VECTOR thinko wrt fp vectors. Fix kind comparison.
- (simplify_subtraction): Fix kind comparison.
- (const_hash_rtx): Return unsigned int. Don't use HASHBITS.
- Use a union to pun integer array.
- * config/rs6000/rs6000.c (rs6000_hash_constant): Use real_hash;
- only hash two words of integral CONST_DOUBLE.
-
-2002-09-20 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (STARTFILE_SPEC): Modify.
- (STARTFILE_PREFIX_SPEC): New.
- (LINK_SPEC): Modify.
- (LIB_SPEC): Modify.
- (LIBGCC_SPEC): New.
-
-2002-09-20 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (legitimate_pic_address_disp_p): Allow
- UNSPEC_NTPOFF and UNSPEC_DTPOFF to be offsetted by constant.
-
-2002-09-20 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
-
- * config/arm/arm.md (sign_extract_onebit, not_signextract_onebit):
- Add clobber of the condition code register.
-
-2002-09-20 Richard Henderson <rth@redhat.com>
-
- * real.c (do_fix_trunc): Static.
- (encode_ieee_single, encode_ieee_double, encode_ieee_extended,
- encode_ieee_quad, encode_vax_f, encode_vax_d, encode_vax_g,
- encode_i370_single, encode_i370_double, encode_c4x_single,
- encode_c4x_extended): Add default abort case.
-
-2002-09-20 Richard Henderson <rth@redhat.com>
-
- * real.h (enum real_value_class, SIGNIFICAND_BITS, EXP_BITS,
- MAX_EXP, SIGSZ, SIG_MSB, struct real_value): Move from real.c.
- (struct realvaluetype): Remove.
- (REAL_VALUE_TYPE): Use struct real_value.
- (REAL_VALUE_TYPE_SIZE): Use SIGNIFICAND_BITS.
- (test_real_width): New.
- * real.c: Global replace struct real_value with REAL_VALUE_TYPE.
- (real_arithmetic): Avoid hoops for REAL_VALUE_TYPE parameters.
- (real_compare, real_exponent, real_ldexp, real_isinf, real_isnan,
- real_isneg, real_isnegzero, real_identical, exact_real_inverse,
- real_to_integer, real_to_integer2, real_to_decimal,
- real_to_hexadecimal, real_from_string, real_from_integer,
- real_inf, real_nan, real_2expN, real_convert, real_to_target,
- real_from_target): Likewise.
- * tree.h (struct tree_real_cst): Use real_value not realvaluetype.
- * gengtype-yacc.y (bitfieldopt): Accept an ID as well.
-
-2002-09-20 Richard Henderson <rth@redhat.com>
-
- * real.h (UNKNOWN_FLOAT_FORMAT, IEEE_FLOAT_FORMAT, VAX_FLOAT_FORMAT,
- IBM_FLOAT_FORMAT, C4X_FLOAT_FORMAT, TARGET_FLOAT_FORMAT): Move ...
- * defaults.h: ... here.
- * config/arm/arm.h, config/avr/avr.h, config/d30v/d30v.h,
- config/fr30/fr30.h, config/frv/frv.h, config/ia64/ia64.h,
- config/ip2k/ip2k.h, config/mips/mips.h, config/stormy16/stormy16.h,
- config/xtensa/xtensa.h (TARGET_FLOAT_FORMAT): Remove.
-
-2002-09-20 Hans-Peter Nilsson <hp@bitrange.com>
-
- * config/mmix/mmix.md ("negdf2"): Rewrite.
- ("*expanded_negdf2"): New.
-
-2002-09-19 Jim Wilson <wilson@redhat.com>
-
- * combine.c (simplify_set): When optimizing a subreg src with a
- cc0 dest, use GET_MODE (src) for mask instead of inner_mode.
-
-2002-09-19 Dale Johannesen <dalej@apple.com>
- * combine.c (make_extraction): Don't create
- invalid subreg.
-
-2002-09-19 Roger Sayle <roger@eyesopen.com>
-
- * tree.c (integer_nonzerop): New predicate for nonzero integers.
- * tree.h (integer_nonzerop): Add function prototype.
- * stmt.c (expand_end_loop): Don't rotate the loop when there
- are no instructions in the test, i.e. the loop is unconditional.
- (expand_exit_loop_if_false): Optimize RTL generation of loop
- tests when the condition is always true or always false.
- * c-semantics.c (genrtl_do_stmt): Optimize RTL generation of
- do-loops when the condition is always true.
- (genrtl_for_stmt): Optimize RTL generation of for-loops when
- the for-expression is empty.
-
-2002-09-19 Zack Weinberg <zack@codesourcery.com>
-
- * gcc.c (use_pipes): New flag.
- (process_command): Set it. Adjust check for -pipe conflicting
- with -time or -save-temps.
- (do_spec_1): Use it. Handle %|SUFFIX, %mSUFFIX, and
- %<SWITCH. Drop %| (without a SUFFIX).
- (handle_braces): Drop %{<SWITCH}, %{^SWITCH}, %{|...}.
- (give_switch): Third argument eliminated.
- (invoke_as, @assembler_with_cpp spec): Use %|.s or %m.s
- depending on AS_NEEDS_DASH_FOR_PIPED_INPUT.
- (specs documentation comment): Update.
-
- * config/netbsd-aout.h, config/openbsd.h, config/ptx4.h,
- config/svr4.h, config/i386/freebsd-aout.h,
- config/m68k/netbsd-elf.h, config/m68k/netbsd.h,
- config/m68k/openbsd.h, config/mips/openbsd.h,
- config/sparc/sparc.h: Define AS_NEEDS_DASH_FOR_PIPED_INPUT
- instead of putting %| into ASM_SPEC and/or ASM_FINAL_SPEC.
- * config/avr/avr.h: Delete do-nothing ASM_FINAL_SPEC.
- * config/cris/cris.h: Update comment.
-
- * ada/lang-specs.h: Use %(invoke_as). Straighten out
- error messages. Don't use %{^SWITCH}.
- * ada/misc.c (gnat_decode_option): Handle -I with a
- separate argument.
-
- * f/lang-specs.h: Use %| and %m.
- * java/jvspec.c: Use %m and %(invoke_as). Change all
- uses of %{<SWITCH} to %<SWITCH.
-
- * doc/invoke.texi: Update documentation of specs.
- * doc/tm.texi: Document AS_NEEDS_DASH_FOR_PIPED_INPUT.
-
-2002-09-19 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (addr_generation_dependency_p): Handle SUBREG
- and STRICT_LOW_PART within SET_DEST.
- * config/s390/s390.md ("*extractqi", "*extracthi"): New insns with
- splitters, replacing pre-reload splitters.
- ("*zero_extendhisi2_31", "*zero_extendqisi2_31",
- "*zero_extendqihi2_31"): New insns.
- ("*zero_extendqihi2_64"): Do not clobber CC.
-
-2002-09-18 Devang Patel <dpatel@apple.com>
-
- * cp/cp-tree.h: New prototype for walk_vtables().
- * cp/decl.c (walk_vtables_r): New function.
- (struct cp_binding_level): Add new members, namespaces,
- names_size and vtables.
- (add_decl_to_level): Add decl in namespaces or vtables
- chain, if conditions match.
- (walk_vtables): New function.
- (walk_namespaces_r): Travers separate namespace chain
- for namespace decls.
- (wrapup_globals_for_namespace): Use names_size instead
- of list_length().
- * cp/decl2.c (finish_file): Use walk_vtables() instead of
- walk_globals() to walk vtable decls.
-
-2002-09-19 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (CTORS_SECTION_ASM_OP): New.
- (DTORS_SECTION_ASM_OP): Ditto.
- (READONLY_DATA_SECTION_ASM_OP): Moved.
- (DATA_SECTION_ASM_OP): New.
- (SDATA_SECTION_ASM_OP): New.
- (BSS_SECTION_ASM_OP): New.
- (SBSS_SECTION_ASM_OP): New.
- (TEXT_SECTION_ASM_OP): New.
-
-2002-09-19 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/fp-bit.c: Follow spelling conventions.
- * config/d30v/d30v.c: Likewise.
- * config/d30v/d30v.h: Likewise.
- * config/fr30/fr30.c: Likewise.
- * config/fr30/fr30.h: Likewise.
- * config/fr30/fr30.md: Likewise.
- * config/frv/frv.c: Likewise.
- * config/frv/frv.h: Likewise.
- * config/h8300/h8300.c: Likewise.
- * config/h8300/lib1funcs.asm: Likewise.
- * config/i370/i370.c: Likewise.
- * config/i386/i386.h: Likewise.
- * config/i386/i386.md: Likewise.
- * config/i386/pentium.md: Likewise.
- * config/i386/winnt.c: Likewise.
- * config/i960/i960.c: Likewise.
- * config/ia64/ia64.h: Likewise.
- * config/ip2k/ip2k.c: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/ip2k/ip2k.md: Likewise.
- * config/ip2k/libgcc.S: Likewise.
-
-2002-09-19 Stephen Clarke <stephen.clarke@superh.com>
-
- * config/sh/sh.h (UNSPEC_GOTOFF_P): Define.
- (GOTOFF_P): Extend to allow gotoff plus constant.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * ifcvt.c (noce_process_if_block): Correctly detect X modified
- with INSN_B before COND_EARLIEST. Don't check A and B for
- modification in condition range. Reorder INSN_B for A==B properly.
- (if_convert): Iterate until no matches for a block.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * calls.c (store_one_arg): Rename default_align to parm_align;
- always adjust parm_align for downward padding.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * toplev.c (backend_init): Move init_real_once invocation ...
- (do_compile): ... here.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * sibcall.c (optimize_sibling_and_tail_recursive_call): Also remove
- RTX_UNCHANGING_P markers for successful tail-recursive replacement.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * real.c (round_for_format): Collect sticky as unsigned long, not bool.
-
-2002-09-19 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.md: (floatdisf2): Rename to
- floatdisf2_internal1.
- (floatdisf2): New define_expand.
- (floatdisf2_internal2): Likewise.
-
-2002-09-18 Richard Henderson <rth@redhat.com>
-
- * real.c (sticky_rshift_significand): Collect sticky as
- unsigned long, not bool.
-
-2002-09-18 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_address_cost): New function.
- config/s390/s390-protos.h (s390_address_cost): Add prototype.
- config/s390/s390.h (ADDRESS_COST): Call s390_address_cost.
- (RTX_COST): Use COSTS_N_INSNS.
-
-2002-09-18 Douglas Rupp <rupp@gnat.com>
- Donn Terry <donnte@microsoft.com>
-
- * stor-layout.c (place_field): Handle alignment of whole
- structures when MSVC compatible bitfields are involved.
- Change method of computing location of MS bitfields to
- be compatible with #pragma pack(n).
-
- * tree.h (record_layout_info): Add new field
- remaining_in_alignment.
-
- * doc/tm.texi: (TARGET_MS_BITFIELD_LAYOUT_P): Update.
- (pragma pack): Add paragraph on MSVC bitfield packing.
-
-2002-09-18 Richard Earnshaw (reanrsha@arm.com)
-
- PR optimization/7967
- * arm.md (ne_zeroextractsi): Add clobber of the condition code
- register.
-
-2002-09-18 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/s390/s390.c: Follow spelling conventions.
- * config/sh/lib1funcs.asm: Likewise.
- * config/sh/sh.c: Likewise.
- * config/sh/sh.h: Likewise.
- * config/sparc/sparc.c: Likewise.
- * config/sparc/sparc.h: Likewise.
- * config/sparc/sparc.md: Likewise.
- * config/stormy16/stormy16.c: Likewise.
- * config/stormy16/stormy16.h: Likewise.
- * config/v850/v850.c: Likewise.
- * config/v850/v850.h: Likewise.
- * config/vax/vax.c: Likewise.
- * config/vax/vax.h: Likewise.
-
-2002-09-18 Nick Clifton <nickc@redhat.com>
-
- * config/rs60000/rs6000.c (rs6000_emit_move): Handle V1DImode moves.
- * config/rs60000/rs6000.c (SPE_VECTOR_MODE): Include V1DImode.
- * config/rs6000/spe.md (movv1di, movv1di_internal): New patterns.
-
-2002-09-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * function.c (max_parm_reg_num): Remove.
- * stmt.c (in_control_zone_p, stmt_loop_nest_empty,
- drop_through_at_end_p, move_cleanups_up,
- expand_end_case_dummy, case_index_expr_type): Likewise.
- * stor-layout.c (pos_from_byte): Likewise.
- * tree.c (chain_member_value, chain_member_purpose, listify,
- tree_int_cst_msb, index_type_equal): Likewise.
- * tree.h: Remove prototypes for unused functions.
-
-2002-09-17 Zack Weinberg <zack@codesourcery.com>
-
- * ABOUT-GCC-NLS: Remove reference to enquire, and out-of-date
- statement that the only translation is to en_UK.
-
-2002-09-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/alpha/alpha.c: Follow spelling conventions.
- * config/alpha/alpha.h: Likewise.
- * config/alpha/alpha.md: Likewise.
- * config/arc/arc.h: Likewise.
- * config/arm/arm.c: Likewise.
- * config/arm/arm.h: Likewise.
- * config/arm/arm.md: Likewise.
- * config/arm/pe.c: Likewise.
- * config/arm/unknown-elf.h: Likewise.
- * config/avr/avr.c: Likewise.
- * config/avr/avr.h: Likewise.
- * config/c4x/c4x.c: Likewise.
- * config/cris/cris.c: Likewise.
- * config/cris/cris.h: Likewise.
-
-2002-09-17 Samuel Figueroa <figueroa@apple.com>
-
- * final.c (final_scan_insn): Use new macro ASM_OUTPUT_ALIGN_WITH_NOP.
- * config/sparc/sparc.h (ASM_OUTPUT_ALIGN_WITH_NOP) New macro.
- * doc/tm.texi (ASM_OUTPUT_ALIGN_WITH_NOP) New description.
-
-2002-09-17 Dale Johannesen <dalej@apple.com>
-
- * cfgcleanup.c (try_forward_edges): Do not forward a
- branch to just after a loop exit before loop optimization;
- this interfered with doloop detection.
-
-2002-09-17 Nick Clifton <nickc@redhat.com>
-
- * config/arm/arm.c (output_return_instruction): Do not
- writeback the stack pointer when it is being loaded.
- (arm_output_epilogue): Likewise.
-
-2002-09-17 Kazu Hirata <kazu@cs.umass.edu>
-
- * optabs.c (prepare_cmp_insn): Let emit_library_call_value
- generate a pseudo reg that receives the result of a libcall.
- (prepare_float_lib_cmp): Likewise.
-
-2002-09-17 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/elf.h: Remove CPP_PREDEFINES.
-
-Tue Sep 17 13:58:04 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- Fix PR/7014 and related objc bugs:
- * c-typeck.c (comp_target_types): Added a reflexive argument.
- Pass it to ObjC when/if calling objc_comptypes(). Updated all
- callers to provide the appropriate reflexive argument.
- * objc/objc-act.c (objc_comptypes): Carefully checked and fixed
- typechecking for all cases of comparisons and assignments,
- particularly the obscure and less common ones involving protocols.
-
-2002-09-17 Nick Clifton <nickc@redhat.com>
-
- * machmode.def (V1DImode): New mode. A single element vector.
- * tree.h (TI_UV1DI_TYPE, TI_V1DI_TYPE): New tree_index enums.
- (unsigned_V1DI_type_node, V1D1_type_node): New type nodes.
- * tree.c (build_common_tree_nodes_2): Build
- unsigned_V1DI_type_node and V1D1_type_node.
- * c-common.c (c_common_type_for_mode): Return
- unsigned_V1DI_type_node or V1D1_type_node for V1DImode.
- * rtl.c (class_narrowest_): Start integer vector nodes with V1DImode.
-
-Tue Sep 17 13:40:13 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- * doc/objc.texi (Constant string objects): Extended documentation
- to make clear that the constant string class ivar layout is
- completely fixed.
-
-2002-09-17 Roger Sayle <roger@eyesopen.com>
-
- * cfgrtl.c (flow_delete_block_noexpunge): Delete orphaned
- NOTE_INSN_LOOP_CONT notes when deleting basic blocks.
-
-2002-09-16 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * config/mips/mips.c (save_restore_insns): Remove unused variable.
- * gcc.c (make_relative_prefix): Likewise.
- * loop.c (check_final_value): Likewise.
- * jump.c (init_label_info): Remove return value.
- * cse.c (prev_insn): Move variable between #ifdef HAVE_cc0 ... #endif.
-
-2002-09-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * dsp16xx.h (ASM_FORMAT_PRIVATE_NAME): Delete.
- (ASM_PN_FORMAT): Define.
-
-2002-09-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha.h, alpha/vms.h, arc.h, arm/aof.h, arm/aout.h, avr.h,
- c4x.h, cris.h, d30v.h, fr30.h, frv.h, h8300.h, i370.h, i386.h,
- i960.h, ia64.h, ip2k.h, m32r.h, m68hc11.h, m68k/3b1.h,
- m68k/hp320.h, m68k.h, m68k/mot3300.h, m68k/sgs.h, m68k/tower-as.h,
- m88k.h, mcore.h, mips.h, mmix.h, mn10200.h, mn10300.h, ns32k.h,
- pa.h, pdp11.h, romp.h, rs6000.h, s390/linux.h, sh.h, sparc.h,
- stormy16.h, v850.h, vax.h, xtensa.h (ASM_FORMAT_PRIVATE_NAME):
- Delete.
- * alpha/vms.h, h8300.h, i370.h, ia64.h, m68k/3b1.h, m68k/hp320.h,
- m68k/mot3300.h, m68k/sgs.h, m68k/tower-as.h, mmix.h, mn10200.h,
- mn10300.h, pa.h, v850.h (ASM_PN_FORMAT): Define.
-
- * defaults.h (ASM_PN_FORMAT, ASM_FORMAT_PRIVATE_NAME): Define.
- * doc/tm.texi (ASM_FORMAT_PRIVATE_NAME): Update documentation.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * expr.c (emit_block_move): Set memory block size as appropriate
- for the copy.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- PR fortran/3924
- * sdbout.c (sdbout_symbol): Don't handle offsets from a symbol.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (set_mem_attributes_minus_bitpos): Adjust SIZE
- as well as OFFSET for BITPOS.
-
-2002-09-16 Jeff Garzik <jgarzik@mandrakesoft.com>
-
- * config.gcc: Treat winchip_c6-*|winchip2-*|c3-* as pentium-mmx.
- * config/i386/i386.c (processor_alias_table): Add winchip-c6,
- winchip2 and c3.
- * doc/invoke.texi: Mention new aliases.
-
-2002-09-16 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * calls.c (store_one_arg): Set default alignment for BLKmode arguments
- to BITS_PER_UNIT when ARGS_GROW_DOWNWARD and the padding direction is
- downward.
- * function.c (pad_below): Always compile.
- (locate_and_pad_parm): If defined ARGS_GROW_DOWNWARD, pad argument to
- alignment when it is not in a register or REG_PARM_STACK_SPACE is true.
- Pad below when the argument is not in a register and the padding
- direction is downward.
-
- * pa-64.h (MUST_PASS_IN_STACK): Move define to pa.h.
- (PAD_VARARGS_DOWN): Define.
- * pa.c (function_arg_padding): Revise padding directions to make them
- compatible with the 32 and 64-bit runtime architecture documentation.
- (hppa_va_arg): Add code to handle variable and size zero arguments
- passed by reference on TARGET_64BIT. Reformat.
- (function_arg): Use a PARALLEL for BLKmode and aggregates args on
- TARGET_64BIT. Use a DImode PARALLEL for BLKmode args 5 to 8 bytes
- wide when !TARGET_64BIT. Move forward check for mode==VOIDmode.
- Add comments.
- * pa.h (MAX_PARM_BOUNDARY): Correct define for TARGET_64BIT.
- (RETURN_IN_MEMORY): Return size zero types in memory.
- (FUNCTION_VALUE): Return TFmode in general registers.
- (MUST_PASS_IN_STACK): Define.
- (FUNCTION_ARG_BOUNDARY): Simplify.
- (FUNCTION_ARG_PASS_BY_REFERENCE): Pass variable and zero sized types
- by reference.
- (FUNCTION_ARG_CALLEE_COPIES): Define to FUNCTION_ARG_PASS_BY_REFERENCE.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * real.c (do_fix_trunc): New.
- (real_arithmetic): Call it.
- * simplify-rtx.c (simplify_unary_operation): Handle FIX
- with a floating-point result mode.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * builtin-types.def (BT_FN_FLOAT_CONST_STRING): New.
- (BT_FN_DOUBLE_CONST_STRING, BT_FN_LONG_DOUBLE_CONST_STRING): New.
- * builtins.def (__builtin_nan, __builtin_nanf, __builtin_nanl): New.
- (__builtin_nans, __builtin_nansf, __builtin_nansl): New.
- * builtins.c (fold_builtin_nan): New.
- (fold_builtin): Call it.
- * real.c (real_nan): Parse a non-empty string.
- (round_for_format): Fix NaN significand truncation.
- * real.h (real_nan): Return bool.
- * doc/extend.texi: Document new builtins.
-
-2002-09-16 Jason Merrill <jason@redhat.com>
- Danny Smith <dannysmith@users.sourceforge.net>
-
- * config/i386/winnt.c (ix86_handle_dll_attribute): Set
- DECL_EXTERN and TREE_PUBLIC for dllimported variables here...
- (i386_pe_mark_dllimport): Not here.
-
-2002-09-16 Nathan Sidwell <nathan@codesourcery.com>
-
- * c-semantics.c (genrtl_do_stmt): Cope with NULL cond.
-
-2002-09-16 Geoffrey Keating <geoffk@redhat.com>
-
- * config/rs6000/rs6000.c (build_mask64_2_operands): Suppress
- warnings about unused operands when HOST_BITS_PER_WIDE_INT is
- < 64.
- (rs6000_emit_cmove): Use real_isinf not target_isinf.
-
-2002-09-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * calls.c (emit_library_call_value_1): Don't refer to
- hard_libcall_value.
- * optabs.c (prepare_float_lib_cmp): Likewise.
-
-2002-09-16 Geoffrey Keating <geoffk@apple.com>
-
- * ggc-common.c (ggc_mark_rtx_children_1): Update for changed name
- mangling.
-
- The following changes are merged from pch-branch:
-
- * doc/gty.texi (GTY Options): Document %a.
- * gengtype.c (do_scalar_typedef): New function.
- (process_gc_options): Handle `length' option.
- (set_gc_used_type): A pointer to an array of structures doesn't
- qualify as a pointer to a structure.
- (output_escaped_param): Add `%a' escape.
- (write_gc_structure_fields): Allow 'desc' on array of unions.
- (main): Define `uint8', `jword' and `JCF_u2' as scalars; use
- do_scalar_typedef.
-
- * gengtype.c (enum rtx_code): Make global.
- (rtx_format): Make global.
- (rtx_next): New.
- (gen_rtx_next): New.
- (write_rtx_next): New.
- (adjust_field_rtx_def): Skip fields marked by chain_next.
- (open_base_files): Delete redundant prototype.
- (write_enum_defn): New.
- (output_mangled_typename): Correct abort call.
- (write_gc_marker_routine_for_structure): Handle chain_next and
- chain_prev options.
- (finish_root_table): Don't output redundant \n.
- (main): Call gen_rtx_next, write_rtx_next, write_enum_defn.
- * c-tree.h (union lang_tree_node): Add chain_next option.
-
- * gengtype.h (NUM_PARAM): New definition.
- (struct type): For TYPE_PARAM_STRUCT, allow multiple parameters.
- * gengtype.c (find_param_structure): New.
- (adjust_field_type): Handle param<n>_is option.
- (process_gc_options): Detect use_params option. Update callers.
- (set_gc_used_type): Add 'param' parameter, update callers. Handle
- 'use_params' option.
- (open_base_files): Add splay-tree.h to list of files included.
- (output_mangled_typename): New.
- (write_gc_structure_fields): Update 'param' parameter to support
- multiple parameters. Change name mangling. Allow parameterized
- fields to have an apparent scalar type. Handle param<n>_is options,
- use_param option.
- (write_gc_marker_routine_for_structure): Update for change to name
- mangling. Better guess the output file for parameterized types.
- (write_gc_types): Update for change to name mangling.
- (write_gc_root): Update for change to name mangling. Handle (ignore)
- param<n>_is options.
- * doc/gty.texi (GTY Options): Add description of param<n>_is
- options, use_params option.
- * ggc.h (ggc_mark_rtx): Update for changed name mangling.
- * gengtype-lex.l: Produce token for param<n>_is.
- * gengtype-yacc.y: Parse param<n>_is.
-
- * gengtype.c (adjust_field_tree_exp): Don't name a variable 'rindex'.
-
- * rtl.c: Update comment describing rtx_format.
- * rtl.h (union rtunion): Separate definition and typedef.
- (struct rtx_def): Use gengtype to mark.
- * Makefile.in (gengtype.o): Also depend on rtl.def.
- * ggc.h (ggc_mark_rtx_children): Delete prototype.
- (ggc_mark_rtx): Change to alias of gengtype-generated routine.
- * ggc-common.c (ggc_mark_rtx_children): Delete.
- (ggc_mark_rtx_children_1): Delete.
- (gt_ggc_m_rtx_def): Delete.
- * gengtype.c (adjust_field_rtx_def): New.
- (adjust_field_type): Call adjust_field_rtx_def.
- (write_gc_structure_fields): Add 'default' case to switch if none
- is specified; remove unused code.
-
- * tree.h (struct tree_exp): Update for change to meaning
- of special.
- * gengtype.c (adjust_field_tree_exp): New function.
- (adjust_field_type): Handle `tree_exp' special here.
- (write_gc_structure_fields): Don't handle `tree_exp' special here.
- Handle new `dot' option.
-
- * gengtype.h: Make `info' a pointer-to-const.
- * gengtype-yacc.y (yacc_ids): Use xasprintf.
-
- * gengtype.c (write_gc_structure_fields): Remove implementation
- of `always' option, add `default' option.
- * doc/gty.texi (GTY Options): Remove documentation of `always',
- add `default'.
-
-2002-09-16 Hans-Peter Nilsson <hp@bitrange.com>
-
- * output.h: Remove #ifdef RTX_CODE and #ifdef TREE_CODE.
-
-2002-09-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * m68hc11.md (addhi_sp): Fix uninitialized variable bug.
-
- * c4x-c.c, c4x.c, darwin.c, i370-c.c, m32r.c: Include tm_p.h
- instead of the *-protos.h file directly.
- * t-c4x, t-i370, t-v850: Depend on $(TM_P_H).
- * darwin.c (machopic_output_stub): Move prototype ...
- * darwin-protos.h (machopic_output_stub): ... here.
- * rs6000-protos.h (machopic_output_stub): Don't declare.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * c-common.c (builtin_define_float_constants): Emit __FOO_DENORM_MIN__.
-
-2002-09-16 Richard Henderson <rth@redhat.com>
-
- * real.c, real.h: Rewrite from scratch.
-
- * Makefile.in (simplify-rtx.o): Depend on TREE_H.
- (paranoia): New target.
- * builtins.c (fold_builtin_inf): Use new real.h interface.
- * c-common.c (builtin_define_with_hex_fp_value): Likewise.
- * c-lex.c (interpret_float): Likewise.
- * emit-rtl.c (gen_lowpart_common): Likewise.
- * optabs.c (expand_float): Use real_2expN.
- * config/ia64/ia64.md (divsi3, udivsi3): Likewise.
- * defaults.h (INTEL_EXTENDED_IEEE_FORMAT): New.
- (FLOAT_WORDS_BIG_ENDIAN): New.
- * cse.c (find_comparison_args): Don't pass FLOAT_STORE_FLAG_VALUE
- directly to REAL_VALUE_NEGATIVE.
- * loop.c (canonicalize_condition): Likewise.
- * simplify-rtx.c: Include tree.h.
- (simplify_unary_operation): Don't handle FIX and UNSIGNED_FIX
- with floating-point result modes.
- * toplev.c (backend_init): Call init_real_once.
-
- * fold-const.c (force_fit_type): Don't call CHECK_FLOAT_VALUE.
- * tree.c (build_real): Likewise.
- * config/alpha/alpha.c, config/vax/vax.c (float_strings,
- float_values, inited_float_values, check_float_value): Remove.
- * config/alpha/alpha.h, config/m68hc11/m68hc11.h,
- config/m88k/m88k.h, config/vax/vax.h (CHECK_FLOAT_VALUE): Remove.
- * doc/tm.texi (CHECK_FLOAT_VALUE): Remove.
- (VAX_HALFWORD_ORDER): Remove.
-
-2002-09-16 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c: (legitimize_la_operand): Remove, replace by ...
- (s390_load_address): ... this new function.
- (s390_decompose_address): Allow the argument pointer and all
- virtual registers as 'pointer' registers.
- (s390_expand_plus_operand): Use s390_load_address.
- config/s390/s390.md (movti, movdi, movdf splitters): Likewise.
- ("force_la_31"): New insn pattern.
- config/s390/s390-protos.h (legitimize_la_operand): Remove.
- (s390_load_address): Add prototype.
-
- * config/s390/s390.c: Include "optabs.h".
- (s390_expand_movstr, s390_expand_clrstr, s390_expand_cmpstr): New.
- config/s390/s390-protos.h (s390_expand_movstr, s390_expand_clrstr,
- s390_expand_cmpstr): Add prototypes.
- config/s390/s390.md ("movstrdi", "movstrsi"): Call s390_expand_movstr.
- ("movstrdi_short"): Rename to "movstr_short_64". Change predicates
- for operands 0 and 1 to "memory_operand". Add type attribute.
- ("movstrsi_short"): Rename to "movstr_short_31". Change predicates
- for operands 0 and 1 to "memory_operand". Add type attribute.
- ("movstrdi_long", "movstrsi_long"): Remove.
- ("movstrdi_64"): Rename to "movstr_long_64". Add type attribute.
- ("movstrsi_31"): Rename to "movstr_long_31". Add type attribute.
- ("clrstrdi", "clrstrsi"): Call s390_expand_clrstr.
- ("clrstrsico"): Remove, replace by ...
- ("clrstr_short_64", "clrstr_short_31"): ... these new patterns.
- ("clrstrsi_64"): Rename to "clrstr_long_64".
- ("clrstrsi_31"): Rename to "clrstr_long_31".
- ("cmpstrdi", "cmpstrsi"): Call s390_expand_cmpstr.
- ("cmpstr_const"): Remove, replace by ...
- ("cmpstr_short_64", "cmpstr_short_31"): ... these new patterns.
- ("cmpstr_64"): Rename to "cmpstr_long_64".
- ("cmpstr_31"): Rename to "cmpstr_long_31".
-
-2002-09-16 Kazu Hirata <kazu@cs.umass.edu>
-
- * ABOUT-NLS: Follow spelling conventions.
- * ChangeLog: Likewise.
- * ChangeLog.1: Likewise.
- * ChangeLog.2: Likewise.
- * ChangeLog.3: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.5: Likewise.
- * ChangeLog.6: Likewise.
- * FSFChangeLog.10: Likewise.
- * FSFChangeLog.11: Likewise.
- * c-common.c: Likewise.
- * c-lex.c: Likewise.
- * c-objc-common.c: Likewise.
- * cppexp.c: Likewise.
- * cppinit.c: Likewise.
- * cpplex.c: Likewise.
- * doloop.c: Likewise.
- * flow.c: Likewise.
- * function.c: Likewise.
- * integrate.c: Likewise.
- * loop.c: Likewise.
- * reg-stack.c: Likewise.
- * reload.h: Likewise.
- * ssa.c: Likewise.
-
-2002-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (vmsdbgout.o): Depend on $(TARGET_H)
- * vmsdbgout.c: Include "target.h".
-
-2002-09-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog: Follow spelling conventions.
- * ChangeLog.0: Likewise.
- * ChangeLog.1: Likewise.
- * ChangeLog.2: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.6: Likewise.
- * config.gcc: Likewise.
- * dwarfout.c: Likewise.
- * reload1.c: Likewise.
- * simplify-rtx.c: Likewise.
- * unwind-sjlj.c: Likewise.
- * config/avr/avr.h: Likewise.
- * config/d30v/d30v.h: Likewise.
- * config/frv/frv.c: Likewise.
- * config/frv/frv.h: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/m88k/m88k-move.sh: Likewise.
- * config/stormy16/stormy16.c: Likewise.
- * config/stormy16/stormy16.h: Likewise.
- * doc/extend.texi: Likewise.
- * doc/interface.texi: Likewise.
- * doc/invoke.texi: Likewise.
- * doc/md.texi: Likewise.
- * doc/rtl.texi: Likewise.
- * doc/tm.texi: Likewise.
- * doc/trouble.texi: Likewise.
- * ginclude/float.h: Likewise.
- * treelang/treelang.texi: Likewise.
-
-2002-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * i386-protos.h (i386_pe_dllexport_name_p,
- i386_pe_dllimport_name_p, i386_pe_unique_section,
- i386_pe_declare_function_type, i386_pe_record_external_function,
- i386_pe_record_exported_symbol, i386_pe_asm_file_end): Add
- prototype.
- * i386/t-cygwin (winnt.o): Depend on $(TM_P_H).
- * i386/t-interix (winnt.o): Likewise.
-
- * v850-protos.h (v850_output_addr_const_extra): Prototype.
-
-2002-09-15 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/mips/netbsd.h (TARGET_OS_CPP_BUILTINS): Add
- MIPS ABI CPP macros.
- (TARGET_CPU_CPP_BUILTINS): Redefine.
- (SUBTARGET_EXTRA_SPECS): Remove subtarget_endian_default.
- (SUBTARGET_ENDIAN_DEFAULT_SPEC): Remove.
-
-2002-09-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ia64/aix.h (TARGET_OS_CPP_BUILTINS): Fix typo.
-
-2002-09-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog: Follow spelling conventions.
- * ChangeLog.0: Likewise.
- * ChangeLog.1: Likewise.
- * ChangeLog.2: Likewise.
- * ChangeLog.3: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.5: Likewise.
- * ChangeLog.6: Likewise.
- * FSFChangeLog.10: Likewise.
- * FSFChangeLog.11: Likewise.
- * c-common.c: Likewise.
- * c-common.h: Likewise.
- * c-format.c: Likewise.
- * c-opts.c: Likewise.
- * cpplib.c: Likewise.
- * langhooks.h: Likewise.
- * real.c: Likewise.
- * reg-stack.c: Likewise.
- * toplev.c: Likewise.
- * config/arm/arm.c: Likewise.
- * config/arm/arm.md: Likewise.
- * config/arm/linux-gas.h: Likewise.
- * config/arm/netbsd.h: Likewise.
- * config/c4x/c4x.c: Likewise.
- * config/c4x/c4x.h: Likewise.
- * config/c4x/c4x.md: Likewise.
- * config/c4x/libgcc.S: Likewise.
- * config/fr30/fr30.md: Likewise.
- * config/frv/frv.md: Likewise.
- * config/ia64/ia64.md: Likewise.
- * config/mips/mips.h: Likewise.
- * config/mn10300/mn10300.c: Likewise.
- * config/stormy16/stormy16.c: Likewise.
- * config/v850/v850.md: Likewise.
- * doc/extend.texi: Likewise.
- * doc/invoke.texi: Likewise.
- * doc/md.texi: Likewise.
-
-2002-09-15 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/netbsd.h (LIB_SPEC): Include the appropriate pthread
- library if -pthread is specified.
-
-2002-09-15 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (*-*-netbsd*): Set thread_file to 'posix'
- for --enable-threads=yes and --enable-threads=posix.
-
-2002-09-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/sparc/cypress.md: Replace Sparc with SPARC.
- * config/sparc/freebsd.h: Likewise.
- * config/sparc/gmon-sol2.c: Likewise.
- * config/sparc/hypersparc.md: Likewise.
- * config/sparc/lb1spc.asm: Likewise.
- * config/sparc/lb1spl.asm: Likewise.
- * config/sparc/linux.h: Likewise.
- * config/sparc/linux64.h: Likewise.
- * config/sparc/lynx.h: Likewise.
- * config/sparc/sol2.h: Likewise.
- * config/sparc/sparc-modes.def: Likewise.
- * config/sparc/sparc.c: Likewise.
- * config/sparc/sparc.h: Likewise.
- * config/sparc/sparc.md: Likewise.
- * config/sparc/sparclet.md: Likewise.
- * config/sparc/supersparc.md: Likewise.
- * config/sparc/sysv4.h: Likewise.
- * config/sparc/vxsim.h: Likewise.
- * config/sparc/vxsparc64.h: Likewise.
-
-2002-09-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * c-lex.c (cb_ident): Mark variable with ATTRIBUTE_UNUSED.
- * collect2.c (ignore_library, aix_std_libs): Move into the context
- where it is used.
- * m68hc11.c (m68hc11_autoinc_compatible_p): Delete prototype.
- (autoinc_mode, m68hc11_make_autoinc_notes): Add prototypes.
- * m88k.c (output_call): Wrap variables with macro controlling use.
- * rs6000.md: Likewise. Const-ify variable.
- * sh.h (ASM_OUTPUT_LABELREF): Likewise.
- * final.c (only_leaf_regs_used): Likewise.
- * regrename.c (maybe_mode_change): Mark parameter with
- ATTRIBUTE_UNUSED.
- * reload.c (find_valid_class): Likewise. Likewise for variable.
- (find_reloads_address_1): Likewise.
- * varasm.c (weak_finish): Wrap variable with macro controlling use.
-
-2002-09-14 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * config/avr/avr.c (output.h): Move after inclusion of tree.h.
-
-2002-09-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * ChangeLog: Follow spelling conventions.
- * ChangeLog.0: Likewise.
- * ChangeLog.2: Likewise.
- * ChangeLog.3: Likewise.
- * ChangeLog.4: Likewise.
- * ChangeLog.5: Likewise.
- * ChangeLog.6: Likewise.
- * cppfiles.c: Likewise.
- * cppinit.c: Likewise.
- * cpplib.h: Likewise.
- * cse.c: Likewise.
- * debug.h: Likewise.
- * df.c: Likewise.
- * dominance.c: Likewise.
- * hashtable.c: Likewise.
- * hashtable.h: Likewise.
- * loop.c: Likewise.
- * config/arm/README-interworking: Likewise.
- * config/arm/arm.c: Likewise.
- * config/arm/arm.h: Likewise.
- * config/arm/arm.md: Likewise.
- * config/dsp16xx/dsp16xx.h: Likewise.
- * config/frv/frv.c: Likewise.
- * config/frv/frv.h: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/rs6000/rs6000.c: Likewise.
- * config/stormy16/stormy-abi: Likewise.
- * config/stormy16/stormy16.h: Likewise.
- * config/v850/v850.c: Likewise.
-
-2002-09-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * loop.c: Fix a comment typo.
-
-2002-09-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/fr30/fr30.h: Fix comment typos.
- * config/frv/frv.c: Likewise.
- * config/i386/xmmintrin.h: Likewise.
- * config/mips/mips.c: Likewise.
- * config/sh/sh.c: Likewise.
-
-2002-09-14 Kazu Hirata <kazu@cs.umass.edu>
-
- * haifa-sched.c: Follow spelling conventions.
- * regclass.c: Likewise.
- * regrename.c: Likewise.
- * config/fp-bit.c: Likewise.
- * config/frv/frv.h: Likewise.
- * config/m88k/m88k.c: Likewise.
- * config/mcore/mcore.c: Likewise.
- * config/rs6000/darwin.h: Likewise.
- * config/rs6000/gnu.h: Likewise.
- * config/rs6000/linux.h: Likewise.
- * config/rs6000/linux64.h: Likewise.
- * config/rs6000/rs6000.c: Likewise.
- * config/rs6000/rs6000.h: Likewise.
- * config/sh/sh.c: Likewise.
- * config/sparc/sparc.c: Likewise.
- * config/sparc/ultra1_2.md: Likewise.
-
-2002-09-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.md ("movdi_internal"): Allow any offsetable
- memory operand when source is 0 (K constraint).
- ("movsi_internal"): Likewise.
- ("movdf_internal"): Likewise.
- ("movsf_internal"): Likewise.
-
-2002-09-14 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (rs6000_elf_encode_section_info): Use
- targetm.binds_local_p to set SYMBOL_REF_FLAG.
- (rs6000_xcoff_encode_section_info): Likewise.
- * config/rs6000/xcoff.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
-
-2002-09-10 Theodore A. Roth <troth@verinet.com>
-
- * gcc/config/avr/avr.h: Set default options for C++ for avr.
-
-2002-09-13 Roger Sayle <roger@eyesopen.com>
-
- * stmt.c (struct nexting): Remove unused alt_end_label field.
- (expand_start_loop): Delete initialization of alt_end_label.
- (expand_start_null_loop): Likewise.
- (expand_exit_loop_if_false): Delete updating of alt_end_label.
-
-2002-09-13 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (toplev.o): Depend on real.h.
- (print-rtl.o, varasm.o, ifcvt.o): Likewise.
-
-2002-09-14 Alan Modra <amodra@bigpond.net.au>
-
- * doc/tm.texi (DBX_OUTPUT_NFUN): Describe.
- * dbxout.c (dbxout_function_end): Use DBX_OUTPUT_NFUN.
- * config/rs6000/linux64.h (DBX_OUTPUT_NFUN): Define.
-
-2002-09-13 Nathan Sidwell <nathan@codesourcery.com>
-
- * ggc-common.c (ggc_mark_roots): Don't iterate NULL hash tables.
-
-2002-09-13 Steve Ellcey <sje@cup.hp.com>
-
- * config.gcc (ia64*-*-aix*, ia64*-*-elf*, ia64*-*-freebsd*,
- ia64*-*-linux*): Set extra_parts.
- * config/ia64/t-aix (EXTRA_PARTS): Remove.
- * config/ia64/t-ia64 (EXTRA_PARTS): Remove.
-
-2002-09-13 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/fixunssfsi.c: Replace H8/S with H8S.
- * config/h8300/h8300.c: Likewise.
- * config/h8300/h8300.h: Likewise.
- * config/h8300/h8300.md: Likewise.
- * doc/invoke.texi: Likewise.
-
-2002-09-13 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (h8300_init_once): Fix formatting.
-
-2002-09-13 Richard Henderson <rth@redhat.com>
-
- * config/alpha/alpha.md (attr type): Add callpal.
- (imb, trap, load_tp, set_tp): Use it.
- * config/alpha/ev4.md (ev4_callpal): New.
- * config/alpha/ev5.md (ev5_callpal): New.
- * config/alpha/ev6.md (ev6_ibr): Handle callpal.
- * config/alpha/alpha.c (alphaev4_insn_pipe): Handle TYPE_CALLPAL.
- (alphaev5_insn_pipe): Likewise.
-
-2002-09-13 Andreas Jaeger <aj@suse.de>
-
- * Makefile.in (print-rtl.o): Depend on CONFIG_H.
-
-2002-09-13 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/t-hpux (LIBGCC1_TEST, STMP_FIXPROTO,
- LIB2ADDEH): New, set to NULL.
- (SHLIB_EXT, SHLIB_LINK, SHLIB_INSTALL, SHLIB_MKMAP): New.
-
-2002-09-13 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/quadlib.c (_U_Qfcmp): Make extern.
- (_U_Qfcnvfxt_quad_to_sgl): Remove declaration.
- (_U_Qfeq, _U_Qfne, _U_Qfgt, _U_Qfge, U_Qflt, U_Qfle, _U_Qfcomp):
- Add declarations.
- (_U_Qfneg): Remove.
-
-2002-09-13 Dhananjay Deshpande <dhananjayd@kpit.com>
-
- * config/h8300/h8300.h (EIGHTBIT_CONSTANT_ADDRESS_P): Add support
- for H8/300, H8S aa:8 mode.
- (TINY_CONSTANT_ADDRESS_P): Add support for H8S aa:16 mode.
- * config/h8300/h8300.c (h8300_adjust_insn_length): Adjust length
- for H8/300 aa:8 mode.
-
-2002-09-13 Hartmut Penner <hpenner@de.ibm.com>
-
- * config/s390/s390.md ("trap", "conditional_trap", "*trap"): New
- insns.
-
-2002-09-12 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (HOST_PRINT): Use print-rtl1.o
- (print-rtl.o): Don't define GENERATOR_FILE.
- (print-rtl1.o): Rename from $(BUILD_PREFIX_1)print-rtl.o.
- * print-rtl.c (print_rtx): Include CONST_DOUBLE fp decimal output
- unless GENERATOR_FILE.
-
-2002-09-12 Stan Shebs <shebs@apple.com>
-
- * config/darwin.h (USER_LABEL_PREFIX): Define here...
- * config/i386/darwin.h: ... instead of here.
-
- * target.h (struct gcc_target): New field
- terminate_dw2_eh_frame_info.
- * target-def.h (TARGET_TERMINATE_DW2_EH_FRAME_INFO): Define.
- (TARGET_INITIALIZER): Add it.
- * dwarf2out.c (output_call_frame_info): Use target hook.
- * dwarf2asm.c (dw2_asm_output_delta): Use macro
- ASM_OUTPUT_DWARF_DELTA if defined.
- * doc/tm.texi (TARGET_TERMINATE_DW2_EH_FRAME_INFO): Document.
- (ASM_OUTPUT_DWARF_DELTA): Ditto.
- (ASM_OUTPUT_DWARF_OFFSET): Ditto.
- (ASM_OUTPUT_DWARF_PCREL): Ditto.
- * config.gcc (i[34567]86-*-darwin*): Define extra_parts.
- (powerpc-*-darwin*): Ditto.
- * crtstuff.c [OBJECT_FORMAT_MACHO]: Update the Mach-O bits
- to work correctly for Darwin.
- * config/darwin.h (OBJECT_FORMAT_MACHO): Define.
- (STARTFILE_SPEC): Add crtbegin.o.
- (ENDFILE_SPEC): Define.
- (EXTRA_SECTION_FUNCTIONS): Put gcc_except_tab in data segment.
- (ASM_PREFERRED_EH_DATA_FORMAT): Handle more cases.
- (ASM_OUTPUT_DWARF_DELTA): Define.
- (TARGET_TERMINATE_DW2_EH_FRAME_INFO): Define.
- * config/darwin.c (darwin_asm_output_dwarf_delta): New function.
-
-2002-09-13 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (rs6000_emit_load_toc_table): Remove "if"
- nesting. Correct test for non-PowerPC64 ELF ABI_AIX.
- * config/rs6000/rs6000.md (load_toc_v4_PIC*): Disable when ABI_AIX.
-
-2002-09-12 Zack Weinberg <zack@codesourcery.com>
-
- * toplev.c: Move default definition of USER_LABEL_PREFIX...
- * defaults.h: ... here.
-
-2002-09-12 Richard Henderson <rth@redhat.com>
-
- * vax.c: Include tree.h earlier.
-
-2002-09-12 Stan Shebs <shebs@apple.com>
-
- * config/darwin.c (machopic_finish): Remove #if 0 chunks.
- (machopic_operand_p): Ditto.
-
-2002-09-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/arm/arm.c (arm_compute_initial_elimination_offset):
- Fix a comment typo.
-
-2002-09-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * toplev.c (do_abort): Fix a comment typo.
-
-2002-09-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * cselib.c: Fix comment formatting.
- * gengtype.c: Likewise.
-
-2002-09-12 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (udivmodqi4): Do not use an expander.
- (udivmodhi4): Likewise.
-
-2002-09-12 Graham Stott <graham.stott@btinternet.com>
- Roger Sayle <roger@eyesopen.com>
-
- * i386.c (any_fp_register_operand, fp_register_operand,
- register_and_not_any_fp_reg_operand, register_and_not_fp_reg_operand):
- New predicate functions.
- * i386-protos.h: Add their prototypes.
- * i386.h: Add them to PREDICATE_CODES.
- * i386.md ("*pushsf_rex64"+2, "*pushsf_rex64"+3, "*pushdf_integer"+1,
- "*pushdf_integer"+2, "*pushtf_integer"+1, "*pushtf_integer"+2,
- "*pushtf_integer"+3, "*pushtf_integer"+4, "*dummy_extendsfdf2"+1,
- "*dummy_extendsfdf2"+2, "*dummy_extendsfxf2"+1,
- "*dummy_extendsftf2"+1, "*dummy_extendsftf2"+2,
- "*dummy_extenddfxf2"+1, "*dummy_extenddftf2"+1,
- "*dummy_extenddftf2"+2, "*negsf2_if"+1, "*negsf2_if"+2,
- "*negdf2_if_rex64"+1, "*negdf2_if_rex64"+2, "*negxf2_if"+1,
- "*negxf2_if"+2, "*negtf2_if"+1, "*negtf2_if"+2, "*abssf2_if"+1,
- "*abssf2_if"+2, "*absdf2_if_rex64"+1, "*absdf2_if_rex64"+2,
- "*absxf2_if"+1, "*absxf2_if"+2, "*abstf2_if"+1, "*abstf2_if"+2):
- Use these new predicates to simplify and correct the use of
- FP_REG_P, ANY_FP_REG_P, FP_REGNO_P and any ANY_FP_REGNO_P.
-
-2002-09-12 Jason Merrill <jason@redhat.com>
-
- * diagnostic.c (output_add_identifier): New fn.
- * diagnostic.h: Declare it.
-
- * calls.c (store_one_arg): Use size_in_bytes to determine the
- amount of space to push.
-
-2002-09-12 Jakub Jelinek <jakub@redhat.com>
-
- * config/sparc/linux64.h (STARTFILE_SPEC32): Fix a typo.
-
-2002-09-12 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390-modes.def (CCAPmode, CCANmode): New CC modes.
- * config/s390/s390.c (s390_match_ccmode_set): Support new CC modes.
- (s390_select_ccmode): Likewise.
- (s390_branch_condition_mask): Likewise.
- (optimization_options): Do not set flag_branch_on_count.
- (s390_split_branches): Handle doloop branches.
- (s390_chunkify_pool): Likewise.
- * config/s390/s390.md ("*adddi3_imm_cc", "*addsi3_imm_cc"): New insns.
- ("doloop_end"): New expander.
- ("doolop_si", "*doloop_si_long", "doloop_di", "*doloop_di_long",
- associated splitters): New.
-
-2002-09-11 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * genattrtab.c (simplify_cond): Remove unused variable(s).
- * global.c (record_conflicts): Likewise.
- * jump.c (rebuild_jump_labels): Likewise.
- * loop.c (scan_loop, check_final_value): Likewise.
- * ra-colorize.c (colorize_one_web, assign_colors): Likewise.
- * reload1.c (eliminate_regs_in_insn, do_input_reload): Likewise.
- * rtlanal.c (reg_set_p): Likewise.
- * stmt.c (expand_asm_operands, expand_decl): Likewise.
- * genautomata.c (empty_reserv): Remove.
- * loop.c (max_luid): Likewise.
- * sched-rgn.c (bitlst_table_size): Likewise.
-
-2002-09-11 Nathan Sidwell <nathan@codesourcery.com>
-
- Reimplement gcov format.
- * gcov-io.h: Replace.
- * gcov.c: Reimplement.
- * gcov-iov.c: New file.
- * gcov-dump.c: New file.
- * libgcc2.c (L_bb): Replace with ...
- (L_gcov): ... this.
- (struct bb_function_info, struct bb): Remove.
- (inhibit_libc): Never inhibit.
- (gcov_list, gcov_crc): New static variables.
- (gcov_version_mismatch): New static function.
- (__bb_exit_func): Renamed to ...
- (__gcov_exit): ... here. Made static. Reimplement.
- (__gcov_init_func): Rename to ...
- (__gcov_init): ... here. Check version, update crc.
- (__bb_fork_func): Rename to ...
- (__gcov_flush): ... here.
- * libgcc2.h (struct bb, __bb_exit_func, __bb_init_func,
- __bb_fork_func, gcov_type, __bb_find_arc_counters): Remove.
- * calls.c (expand_call): Call __gcov_flush.
- * profile.c (bb_file, last_bb_file_name): Remove.
- (bbg_file_name): New global variable.
- (output_gcov_string): Remove.
- (get_exec_counts): Reimplement.
- (branch_prob): Reimplement gcov file writing.
- (init_branch_prob): Create bbg_file_name, don't create
- bb_file_name.
- (end_branch_prob): Adjust. Don't remove counter file when
- instrumenting ourselves.
- (create_profiler): Adjust.
- * doc/gcov.texi (Gcov Data Files): Remove detailed specification,
- point to gcov-io.h.
- * Makefile.in (LANGUAGES): Add gcov-dump.
- (coverageexts): Remove .bb.
- (STAGESTUFF): Add gcov-dump.
- (LIB2FUNCS_ST): Replace _bb with _gcov.
- (profile.o): Depend on gcov-iov.h.
- (final.o): Don't depend on profile.h, gcov.h.
- (gcov.o): Depend on gcov-iov.h.
- (gcov-iov.o): New target.
- (gcov-iov): New target.
- (gcov-iov.h): New target.
- (gcov-dump.o): New target.
- (GCOV_DUMP_OBJS): New variable.
- (gcov-dump): New target.
- (distclean): Remove coverageexts.
- (stage1): Remove coverageexts.
-
-2002-09-11 Hartmut Penner <hpenner@de.ibm.com>
-
- * fold-const.c (make_range): Only narrow to signed range if
- the signed range is smaller than the unsigned range.
-
-2002-09-12 Alan Modra <amodra@bigpond.net.au>
-
- * emit-rtl.c (set_mem_size): New function.
- * expr.h (set_mem_size): Declare.
- * config/rs6000/rs6000.c (expand_block_move_mem): Exterminate.
- (expand_block_move): Instead, use adjust_address and
- replace_equiv_address to generate proper aliasing info.
- Move common code out of conditionals. Localize vars.
-
-2002-09-11 Eric Botcazou <ebotcazou@libertysurf.fr>
-
- * optabs.c (expand_binop): Minor cleanup.
- (expand_twoval_binop): Convert CONST_INTs like in expand_binop.
-
-2002-09-11 Dan Nicolaescu <dann@ics.uci.edu>
-
- * print-tree.c (print_node): Print the restrict qualifier.
-
-2002-09-11 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi: Fix typos.
-
-2002-09-11 Zack Weinberg <zack@codesourcery.com>
-
- * Makefile.in: Remove all references to s-under and underscore.c.
- * collect2.c, tlink.c: Change all uses of prepends_underscore
- to look directly at USER_LABEL_PREFIX.
-
-2002-09-11 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_xcoff_asm_named_section): Append
- alignment to csect.
- (rs6000_xcoff_unique_section): Only set section name for public
- data.
- (rs6000_xcoff_section_type_flags): Store log2 alignment in flags.
- * config/rs6000/xcoff.h (TARGET_ASM_SELECT_SECTION): Remove
- duplicate definition.
-
-2002-09-10 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.md (extzv): Check predicates before emitting extzv_32.
- (insv): Likewise.
-
-2002-09-10 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.h (MOVE_MAX): Define to correct value.
- (MAX_MOVE_MAX): Define.
- (MOVE_BY_PIECES_P): Define.
- (CLEAR_BY_PIECES_P): Define.
-
-2002-09-10 Denis Chertykov <denisc@overta.ru>
-
- * config/avr/avr.md (movstrhi): Use right operands for conversion.
-
-2002-09-10 Richard Earnshaw <rearnsha@arm.com>
-
- PR c/7873
- * arm.md (insv): Use reg_or_int_operand for operand[3].
-
-2002-09-10 David Edelsohn <edelsohn@gnu.org>
-
- * rs6000.c (rs6000_assemble_visibility): Protect declaration
- inside macro. Correct function definition typo.
- (rs6000_xcoff_section_type_flags): New function.
- (TARGET_SECTION_TYPE_FLAGS): Remove definition.
- (rs6000_elf_section_type_flags): Call default_section_type_flags_1
- with appropriate PIC test.
- (rs6000_xcoff_select_section): Use decl_readonly_section_1 to
- determine readonly.
- (rs6000_binds_local_p): Combine PIC flags.
- * sysv4.h (TARGET_SECTION_TYPE_FLAGS): Define.
- * xcoff.h (TARGET_SECTION_TYPE_FLAGS): Define.
-
-2002-09-09 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * h8300.md: Fix signed/unsigned warnings.
- * mcore.md: Likewise.
- * mn10300.c (mask_ok_for_mem_btst): Likewise.
-
-2002-09-09 Per Bothner <per@bothner.com>
-
- * print-tree.c (print_node): In a STRING_CST, escape non-ascii
- characters, and only print TREE_STRING_LENGTH chars.
-
-2002-09-09 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/hpux.h (TARGET_HPUX_LD): New, define true.
- (ASM_FILE_END) New.
- * config/ia64/ia64.h (TARGET_HPUX_LD): New, define false.
- * config/ia64/ia64-protos.h (ia64_hpux_asm_file_end): New.
- * config/ia64/ia64.c (ia64_asm_output_external): Create list
- of external functions if TARGET_HPUX_LD is true.
- (ia64_hpux_add_extern_decl): New, routine to put names on
- list of external functions.
- (ia64_hpux_asm_file_end): Put out declarations for external
- functions if and only if they are used.
-
-2002-09-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.md (exception_receiver, builtin_setjmp_receiver): Add blockage
- on TARGET_64BIT before pic register restore.
-
-2002-09-09 David Edelsohn <edelsohn@gnu.org>
-
- * doc/tm.texi (TARGET_HAVE_SRODATA_SECTION): New description.
- (TARGET_HAVE_TLS): New description.
-
-2002-09-09 Janis Johnson <janis187@us.ibm.com>
-
- * doc/extend.texi (Statement Exprs): Fix broken link.
-
-2002-09-09 Denis Chertykov <denisc@overta.ru>
-
- * config/avr/avr.md (movstrhi, clrstrhi): Use gen_int_mode for
- right conversion of operands[1].
-
-2002-09-09 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("*tmdi_reg", "*tmsi_reg"): Do not mark as
- commutative. Use "nonimmediate_operand" instead of "register_operand"
- as predicate for operand 0. Move to after the "*tmXX_mem" insns.
-
- ("*tmdi_mem", "*tmsi_mem", "*tmhi_mem", "*tmqi_mem"): Do not mark
- as commutative.
-
- ("*anddi3_ni", "*andsi3_ni", "*iordi3_ni", "*iorsi3_ni"): Do not
- mark as commutative. Use "nonimmediate_operand" instead of
- "register_operand" as predicate for operand 1.
-
- ("movstrictsi"): Fix typo in insn name.
-
-2002-09-09 Jan Hubicka <jh@suse.cz>
-
- * i386.c (index_register_operand): New.
- * i386.h (predicate_codes): Add new predicate.
- * i386.md (lea_general_*): Use index_register_operand
- (ashift to lea splitter): Do not produce invalid leas
- (ashift to mov+ashift split): New.
-
-2002-09-09 Nick Clifton <nickc@redhat.com>
-
- * config/fr30/fr30.c (output.h): Move after inclusion of tree.h.
- Fix folding marks.
-
-2002-09-09 Toshiyasu Morita <toshiyasu.morita@hsa.hitachi.com>
- J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh/sh.h (OVERRIDE_OPTIONS): align_functions is in bytes, not bits.
-
-2002-09-09 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (rs6000_binds_local_p): Return bool.
- (function_ok_for_sibcall): Use binds_local_p. Respect longcall
- attributes.
-
-2002-09-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * basic_block.h (gcov_type): Explain why it is signed.
- * final.c: Don't include profile.h.
- (struct function_list, functions_head, functions_tail,
- end_final): Moved to profile.c
- (final): Move arc chaining code to profile.c.
- * function.c (prepare_function_start): Remove duplicate line.
- * output.h (end_final): Remove prototype.
- * predict.c (estimate_loops_at_level): Use gcov_type.
- * profile.c (struct function_list, functions_head,
- functions_tail): Moved from final.c
- (need_func_profiler): Remove.
- (instrument_edges): Don't set need_func_profiler.
- (get_exec_counts): Avoid signed/unsigned warning.
- (compute_checksum): Use crc32.
- (branch_prob): Adjust. Chain onto functions_head.
- (init_branch_prob): Absorb init_edge_profiler.
- (init_edge_profiler): Remove.
- (create_profiler): Moved and renamed from final.c:end_final.
- Emit data and constructor.
- (output_func_start_profiler): Remove.
- * profile.h (struct profile_info): checksum is unsigned.
- * rtl.h (output_func_start_profiler): Remove prototype.
- (create_profiler): Declare.
- * toplev.c (compile_file): Call create_profiler, if instrumenting
- arcs. Don't call end_final.
-
-2002-09-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * fr30.c (fr30_print_operand): Fix bug in output of CONST_DOUBLE.
-
-2002-09-08 Richard Henderson <rth@redhat.com>
-
- * dwarf2.h (DW_OP_call_ref): Rename from DW_OP_calli.
- (DW_OP_GNU_push_tls_address): New.
- (DW_OP_lo_user): Fix.
- * dwarf2out.c (INTERNAL_DW_OP_tls_addr): New.
- (dwarf_stack_op_name): Handle it, plus other dwarf3 opcodes.
- (size_of_loc_descr): Likewise.
- (output_loc_operands): Handle INTERNAL_DW_OP_tls_addr.
- (add_AT_location_description): Take a dw_loc_descr_ref not an rtx.
- (loc_descriptor_from_tree): Handle TLS variables.
- (rtl_for_decl_location): Do avoid_constant_pool_reference here ...
- (add_location_or_const_value_attribute): ... not here. Defer
- to loc_descriptor_from_tree for TLS variables.
-
- * config/i386/i386.h (ASM_OUTPUT_DWARF_DTPREL): New.
- * config/i386/i386.c (i386_output_dwarf_dtprel): New.
- * config/i386/i386-protos.h: Update.
-
-2002-09-08 Roger Sayle <roger@eyesopen.com>
-
- PR optimization/6405
- * unroll.c (loop_iterations): last_loop_insn should be the previous
- non-note instruction before loop->end.
- * loop.c (strength_reduce): The conditional jump is the last
- non-note instruction before loop->end (as above).
-
-2002-09-08 Roger Sayle <roger@eyesopen.com>
-
- * combine.c (try_combine): Handle the case that undobuf.other_insn
- has been turned into a return or unconditional jump, by inserting
- a BARRIER if necessary.
- (simplify_set): Test if a condition code setter has a constant
- comparison at compile time, if so convert this insn to a no-op move
- and update/simplify the condition code user (undobuf.other_insn).
-
-2002-09-08 Krister Walfridsson <cato@df.lth.se>
-
- * config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Redefine.
- (CLEAR_INSN_CACHE): Define.
-
-2002-09-08 Kazu Hirata <kazu@cs.umass.edu>
-
- * basic-block.h: Fix comment formatting.
- * c-common.c: Likewise.
- * c-common.h: Likewise.
- * c-lex.c: Likewise.
- * c-pretty-print.c: Likewise.
- * cfglayout.c: Likewise.
- * cfgloop.c: Likewise.
- * defaults.h: Likewise.
- * et-forest.c: Likewise.
- * explow.c: Likewise.
- * function.h: Likewise.
- * gcov.c: Likewise.
- * genattrtab.c: Likewise.
- * gengtype.c: Likewise.
- * ifcvt.c: Likewise.
- * libgcc2.c: Likewise.
- * loop.c: Likewise.
- * profile.c: Likewise.
- * ra-build.c: Likewise.
- * real.c: Likewise.
- * rtl.h: Likewise.
- * tracer.c: Likewise.
- * tree-inline.c: Likewise.
- * varasm.c: Likewise.
-
-2002-09-08 Jan Hubicka <jh@suse.cz>
-
- * emit-rtl.c (set_mem_attributes_minus_bitpos): Fix array_ref
- handling.
-
- * loop.c (loop_givs_reduce): Emit addition after.
-
-2002-09-08 Alan Modra <amodra@bigpond.net.au>
-
- * varasm.c (default_assemble_visibility): Rename from
- assemble_visibility.
- * output.h: Here too.
- * target-def.h (TARGET_ASM_ASSEMBLE_VISIBILITY): And here.
- * config/rs6000/rs6000.c (rs6000_assemble_visibility): And here.
-
-2002-09-08 Alan Modra <amodra@bigpond.net.au>
-
- * reload.c (find_reloads <p constraint>): Pass operand_mode to
- find_reloads_address.
-
-2002-09-08 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (udivmodqi4): Enable on H8/300.
- (anonymous pattern): Likewise.
-
-2002-09-07 Igor Shevlyakov <igor@microunity.com>
-
- * machmode.def: Add modes for half-float vectors.
-
-2002-09-07 Scott Snyder <snyder@fnal.gov>
-
- PR target/7374
- * config/alpha/alpha.md (abstf2): Fix typo: 'neg' for 'abs'.
-
-2002-09-07 Roger Sayle <roger@eyesopen.com>
-
- * basic-block.h (struct loop): Remove unused cont_dominator field.
-
-2002-09-07 Igor Shevlyakov <igor@microunity.com>
-
- * varasm.c (decode_rtx_const): Don't check undefined field for
- CONST_VECTOR.
-
-2002-09-07 Glen Nakamura <glen@imodulo.com>
-
- PR opt/7814
- * sched-deps.c (sched_analyze_insn): Make sure to add insn
- to reg_last->sets after flushing the dependency lists to guarantee
- that subsequent clobbers will be dependent on it.
-
-2002-09-07 Igor Shevlyakov <igor@microunity.com>
-
- * combine.c (simplify_shift_const): Calculate rotate count
- correctly for vector operands.
-
-2002-09-07 Ansgar Esztermann <ansgar@thphy.uni-duesseldorf.de>
-
- * c-typeck.c (c_tree_expr_nonnegative_p): New function.
- (build_binary_op): Call c_tree_expr_nonnegative_p rather than
- tree_expr_nonnegative_p.
- (build_conditional_expr): Likewise.
- * c-tree.h (c_tree_expr_nonnegative_p): Declare.
-
-2002-09-07 Richard Henderson <rth@redhat.com>
-
- * builtins.def (inf, inff, infl): Mark const.
- (huge_val, huge_valf, huge_vall): Likewise.
- (BUILT_IN_GETEXP, BUILT_IN_GETMAN): Remove.
-
- * real.c (ereal_inf): Clear E before use.
-
-2002-09-07 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.md (udivmodqi4): Split the pattern into
- an expander and an anonymous pattern. Zero out the upper half
- of the dividend in the expander.
- (udivmodqi4): Likewise.
-
-2002-09-07 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c: Fix formatting.
- * config/h8300/h8300.h: Likewise.
- * config/h8300/h8300.md: Likewise.
-
-2002-09-07 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * cfgcleanup.c (try_crossjump_to_edge): Fix updating of liveness
- information.
-
-2002-09-07 Graham Stott <graham.stott@btinternet.com>
-
- * rtlanal.c (dead_or_set_regno_p): Fix typo.
-
-2002-09-07 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/linux64.h (ASM_PREFERRED_EH_DATA_FORMAT): Define.
-
- * doc/tm.texi (TARGET_ASM_ASSEMBLE_VISIBILITY): Describe.
- * target-def.h (TARGET_ASM_ASSEMBLE_VISIBILITY): Define.
- (TARGET_ASM_OUT): Add the above here.
- * target.h (struct gcc_target): Add "visibility" field.
- * varasm.c (maybe_assemble_visibility): Call targetm visibility func.
- * config/rs6000/rs6000.c (rs6000_assemble_visibility): New function.
- (TARGET_ASM_ASSEMBLE_VISIBILITY): Define.
- (rs6000_legitimize_reload_address, first_reg_to_save): Formatting.
-
-2002-09-06 Ziemowit Laski <zlaski@apple.com>
-
- * c-lang.c (objc_is_id): New stub.
- * c-tree.h (objc_is_id): New forward declaration.
- * c-typeck.c (build_c_cast): Do not strip protocol
- qualifiers from 'id' type.
- * objc/objc-act.c (objc_comptypes): Correct handling
- of protocol qualifiers.
- (objc_is_id): New.
-
-Fri Sep 6 13:10:08 2002 Jeffrey A Law (law@redhat.com)
-
- * pentium.md (pentium-firstvboth): Fix typo.
-
-2002-09-06 Dhananjay Deshpande <dhananjayd@kpit.com>
-
- * h8300.c (enum shift_alg): Move to earlier in h8300.c.
- (enum shift_type, enum h8_cpu): Likewise.
- (INL, ROT, LOP, SPC macros): Likewise.
- (shift_alg_qi, shift_alg_hi, shift_alg_si): Likewise. Lose
- const designator.
- (h8300_init_once): Update shift_alg_{qi,hi,si} to use more
- space efficient algorithms when optimize for codesize.
-
-Fri Sep 6 16:35:32 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- Fix PR/1727 and long-standing failing testcase
- objc/formal-protocol-6.m.
- * objc-act.c (build_protocol_expr): If compiling for the GNU
- runtime, create a list of Protocol statically allocated instances
- if it doesn't exist, then add the Protocol object to this same
- list.
- (get_objc_string_decl): Fixed typo/bug - TREE_VALUE had been used
- instead of TREE_CHAIN.
-
-Fri Sep 6 16:17:33 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- * objc/objc-act.c (dump_interface): Enlarged the char * buffer to
- 10k. Fixed category dumping - print out category names with the
- proper syntax. Print '@end\n' and not '\n@end' at the end of the
- interface.
- (finish_objc): Fixed the -gen-decls option. It was printing out
- only the last class. Dump an interface declaration of all classes
- being compiled instead.
-
-2002-09-06 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/arm/arm-protos.h (arm_gen_return_addr_mask): New
- prototype.
- * config/arm/arm.c (arm_gen_return_addr_mask): New function.
- * config/arm/arm.h (MASK_RETURN_ADDR): Use arm_gen_return_addr_mask
- if not APCS26 and not Thumb or ARMv4-or-higher. Use gen_int_mode
- rather than GEN_INT.
- * config/arm/arm.md (UNSPEC_CHECK_ARCH): Define.
- (return_addr_mask, *check_arch2): New.
-
-2002-09-06 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("*adddi3_cc", "*adddi3_cconly",
- "*adddi3_cconly2", "*adddi3_64", "*adddi3_31", "adddi3",
- "*addsi3_carry1_cc", "*addsi3_carry1_cconly",
- "*addsi3_carry2_cc", "*addsi3_carry2_cconly",
- "*addsi3_cc", "*addsi3_cconly", "*addsi3_cconly2", "addsi3",
- "adddf3", "*adddf3", "*adddf3_ibm",
- "addsf3", "*addsf3", "*addsf3_ibm",
- "muldi3", "mulsi3", "mulsidi3",
- "muldf3", "*muldf3", "*muldf3_ibm",
- "mulsf3", "*mulsf3", "*mulsf3_ibm",
- "*anddi3_cc", "*anddi3_cconly", "anddi3",
- "*andsi3_cc", "*andsi3_cconly", "andsi3",
- "*iordi3_cc", "*iordi3_cconly", "iordi3",
- "*iorsi3_cc", "*iorsi3_cconly", "iorsi3",
- "*xordi3_cc", "*xordi3_cconly", "xordi3",
- "*xorsi3_cc", "*xorsi3_cconly", "xorsi3"): Use "nonimmediate_operand"
- instead of "register_operand" as predicate for "%0" operand.
-
-2002-09-06 Jakub Jelinek <jakub@redhat.com>
-
- * configure.in (HAVE_AS_OFFSETABLE_LO10): Use -xarch=v9
- unconditionally when gcc_cv_as_flags64 checks are gone.
- * configure: Rebuilt.
-
-2002-09-06 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.md (extzvsi_internal2): Revert most of
- 2002-07-26 change. Comment.
-
-2002-09-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * frv.c (frv_unique_section, frv_select_section,
- frv_select_rtx_section): Delete.
- (frv_in_small_data_p): New.
- (TARGET_ASM_UNIQUE_SECTION, TARGET_ASM_SELECT_SECTION,
- TARGET_ASM_SELECT_RTX_SECTION): Delete.
- (TARGET_IN_SMALL_DATA_P): Define.
-
-2002-09-05 Dale Johannesen <dalej@apple.com>
-
- * reload1.c (reload): Retain only those memory clobbers
- added for variable-array handling.
-
-2002-09-05 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/arm/arm.c (arm_return_in_memory): Implement ATPCS
- return-in-memory rules.
- * config/arm/arm.h (ARM_FLAG_ATPCS, TARGET_ATPCS): Define.
-
-2002-09-05 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/xcoff.h (HOT_TEXT_SECTION_NAME): Delete.
- (UNLIKELY_EXECUTED_TEXT_SECTION_NAME): Delete.
-
-2002-09-05 Jason Thorpe <thorpej@wasabisystems.com>
-
- * real.c: Avoid parse error if FLOAT_WORDS_BIG_ENDIAN is
- not a compile-time constant for the non-IBM case.
- * config/arm/arm-protos.h (arm_float_words_big_endian): New
- prototype.
- * config/arm/arm.c (arm_float_words_big_endian): New function.
- * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __VFP_FP__
- if TARGET_VFP and not TARGET_HARD_FLOAT.
- (ARM_FLAG_VFP, TARGET_VFP): Define.
- (FLOAT_WORDS_BIG_ENDIAN): Use arm_float_words_big_endian.
-
-2002-09-05 David Edelsohn <edelsohn@gnu.org>
-
- * doc/install.texi: Correct text of s390-*-linux* and s390x-*-linux*
- URLs. Fix AIX wording.
-
-2002-09-05 Stan Shebs <shebs@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_override_options): Make -fpic and
- -fPIC equivalent on Darwin.
-
-Thu Sep 5 16:27:47 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (sh_expand_builtin): Return early if encountering an
- error_mark for a type.
-
-2002-09-05 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_expand_plus_operand): Do not require
- double-word scratch register.
- config/s390/s390.md ("reload_indi", "reload_insi"): Adapt.
-
- ("*tmqi_ext", "*tmdi_mem", "*tmsi_mem", "*tmhi_mem", "*tmqi_mem",
- "*cli"): Replace s_operand by memory_operand.
- ("cmpstrdi", "cmpstrsi"): Replace s_operand by general_operand.
-
-2002-09-05 Kazu Hirata <kazu@cs.umass.edu>
-
- * config/h8300/h8300.c (asm_file_start): Add a missing
- semicolon.
-
-2002-09-04 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
-
- * c-typeck.c (build_function_call): Remove unused variable(s).
- (build_c_cast): Likewise.
- * calls.c (rtx_for_function_call): Likewise.
- * cfglayout.c (duplicate_insn_chain): Likewise.
- * cfgloop.c (flow_loop_nodes_find): Likewise.
- * cfgrtl.c (split_edge): Likewise.
- * df.c (df_ref_create): Likewise.
- * except.c (expand_end_catch): Likewise.
- * expr.c (emit_push_insn, store_constructor, expand_expr): Likewise.
- * function.c (emit_return_into_block): Likewise.
- (reposition_prologue_and_epilogue_notes): Likewise.
- * gengtype.c (get_file_basename, write_gc_structure_fields): Likewise.
- * combine.c (subst_prev_insn, need_refresh): Remove.
- * dwarf2out.c (primary_filename): Remove.
- * final.c (new_block): Remove.
- * gcse.c (orig_bb_count): Remove.
-
-2002-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * dsp16xx-protos.h (dsp16xx_compare_gen): Change to bool.
- * dsp16xx.c (dsp16xx_compare_gen): Likewise.
- * dsp16xx.md: Treat dsp16xx_compare_gen as a bool. Call functions
- directly instead of using a function pointer.
-
-2002-09-04 Krister Walfridsson <cato@df.lth.se>
-
- * config/i386/i386.h (GOT_SYMBOL_NAME): Define.
- * config/i386/i386.c (output_set_got): Use GOT_SYMBOL_NAME.
- (ix86_output_addr_diff_elt) Likewise.
- (x86_output_mi_thunk) Likewise.
- * config/i386/netbsd.h (GOT_SYMBOL_NAME): Redefine.
-
-2002-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * frv.c (frv_encode_section_info): Fix error in last change.
-
-2002-09-04 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_flag_pic): New variable.
- (rs6000_elf_encode_section_info): ATTRIBUTE_UNUSED.
- (TARGET_BINDS_LOCAL_P): Define.
- (rs6000_override_options): Save original flag_pic value.
- (rs6000_elf_select_section): Call default_elf_select_section_1.
- (rs6000_elf_unique_section): Call default_unique_section_1.
- (rs6000_elf_in_small_data_p): New function.
- (rs6000_xcoff_asm_named_section): Determine storage mapping class.
- (rs6000_xcoff_select_section): Update based on defaults.
- (rs6000_xcoff_unique_section): Set to basic name if not common.
- (rs6000_binds_local_p): New function.
- * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Set
- targetm.have_srodata_section if SDATA_EABI.
- (TARGET_IN_SMALL_DATA_P): Define.
-
-2002-09-04 Dale Johannesen <dalej@apple.com>
-
- * varasm.c (struct rtx_const, decode_rtx_const):
- Make veclo and vechi fields not share storage.
-
-Thu Sep 5 00:34:33 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * loop.c (scan_loop): Don't mark separate insns out of a libcall
- for moving.
- (move_movables): Abort if we see the first insn of a libcall.
-
-2002-09-04 Richard Henderson <rth@redhat.com>
-
- * builtin-types.def (BT_FN_FLOAT): New.
- (BT_FN_DOUBLE, BT_FN_LONG_DOUBLE): New.
- * builtins.def (BUILT_IN_INF, BUILT_IN_INFF, BUILT_IN_INFL,
- BUILT_IN_HUGE_VAL, BUILT_IN_HUGE_VALF, BUILT_IN_HUGE_VALL): New.
- * builtins.c (fold_builtin_inf): New.
- (fold_builtin): Call it.
- * real.c (ereal_inf): New.
- * real.h: Declare it.
- * doc/extend.texi: Document new builtins.
-
-2002-09-04 Richard Henderson <rth@redhat.com>
-
- * cse.c (cse_insn): Avoid subreg games if the equivalence
- is already in the proper mode.
-
-2002-09-04 Eric Botcazou <ebotcazou@multimania.com>
-
- PR c/7102
- * optabs.c (expand_binop): Convert CONST_INTs in all cases.
-
-2002-09-04 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.md (setccfp0, setccfp1): New patterns.
-
-2002-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * frv-protos.h (frv_init_builtins, frv_expand_builtin,
- frv_select_section, frv_select_rtx_section,
- frv_encode_section_info, frv_unique_section): Delete.
- * frv.c: Update for target hooks.
- * frv.h (STRIP_NAME_ENCODING, SLOW_ZERO_EXTEND, SELECT_SECTION,
- SELECT_RTX_SECTION, ENCODE_SECTION_INFO, UNIQUE_SECTION,
- EASY_DIV_EXPR, MD_INIT_BUILTINS, MD_EXPAND_BUILTIN): Delete.
-
-2002-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ip2k-protos.h (function_prologue, function_epilogue,
- encode_section_info): Update to match target hook specification.
- * ip2k.c: Wrap `MDR' code in IP2K_MD_REORG_PASS.
- (function_prologue, function_epilogue, encode_section_info):
- Update to match target hook specification.
- * ip2k.h (SELECT_SECTION, SELECT_RTX_SECTION, ASM_OPEN_PAREN,
- ASM_CLOSE_PAREN, EASY_DIV_EXPR): Delete.
- (NOTICE_UPDATE_CC): Cast to void.
- * ip2k.md: Add defaults in switch statements.
-
-2002-09-04 Janis Johnson <janis187@us.ibm.com>
-
- * doc/trouble.texi (Interoperation): Update information about C++ ABI
- issues.
-
-2002-09-04 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/sparc/t-netbsd64: Disable multilib for now.
-
-2002-09-04 David Edelsohn <edelsohn@gnu.org>
-
- * target-def.h (TARGET_HAVE_SRODATA_SECTION): New macro.
- * target.h (gcc_target): Add have_srodata_section member.
- * varasm.c (section_category): Add SECCAT_SRODATA.
- (categorize_decl_for_section): Return SECCAT_SRODATA for sdata if
- READONLY_SDATA_SECTION defined.
- (decl_readonly_section_1): True for SECCAT_SRODATA also.
- (default_elf_select_section_1): Map SECCAT_SRODATA to .sdata2.
- (default_unique_section_1): Likewise.
-
-2002-09-04 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * expr.c (emit_group_load): Revise to allow splitting TCmode source
- into DImode pieces.
-
- * pa-64.h (LONG_DOUBLE_TYPE_SIZE): Define to 128.
- * pa64-regs.h (CLASS_CANNOT_CHANGE_MODE_P): Inhibit changes from SImode
- for floating-point register class.
- * pa.c (function_arg): Fix handling of modes wider than one word for
- TARGET_64BIT.
-
-Wed Sep 4 18:48:10 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * combine.c (make_compound_operation): Don't generate zero / sign
- extensions in floating point modes.
-
-2002-09-04 Janis Johnson <janis187@us.ibm.com>
-
- * doc/c-tree.texi: Fix overfull hboxes.
- * doc/cppopts.texi: Ditto.
- * doc/extend.texi: Ditto.
- * doc/gty.texi: Ditto.
- * doc/invoke.texi: Ditto.
- * doc/makefile.texi: Ditto.
- * doc/rtl.texi: Ditto.
- * doc/standards.texi: Ditto.
- * doc/tm.texi: Ditto.
-
-2002-09-04 Richard Henderson <rth@redhat.com>
-
- * c-common.c (builtin_define_with_hex_fp_value): New.
- (builtin_define_float_constants): Use it. Fix H_FLOAT mant_dig.
-
-2002-09-04 Janis Johnson <janis187@us.ibm.com>
-
- * doc/invoke.texi (-fshort-wchar): Move to Code Generation Options.
- (-fpcc-struct-return, -freg-struct-return, -fshort-enums,
- -fshort-double, -fshort-wchar, -fpack-struct, -fleading-underscore):
- Warn that these options can break ABI compatibility.
-
-2002-09-04 Richard Henderson <rth@redhat.com>
-
- * real.c (ereal_to_decimal): Add digits parameter.
- * real.h (REAL_VALUE_TO_DECIMAL): Remove format; add digits parameter.
- * c-pretty-print.c (pp_c_real_literal): Update call.
- * print-rtl.c (print_rtx): Likewise.
- * print-tree.c (print_node_brief, print_node): Likewise.
- * sched-vis.c (print_value): Likewise.
- * config/arc/arc.c (arc_print_operand): Likewise.
- * config/c4x/c4x.c (c4x_print_operand): Likewise.
- * config/i370/i370.h (PRINT_OPERAND): Likewise.
- * config/i386/i386.c (print_operand): Likewise.
- * config/i960/i960.c (i960_print_operand): Likewise.
- * config/ip2k/ip2k.c (asm_output_float): Likewise.
- * config/m32r/m32r.c (m32r_print_operand): Likewise.
- * config/m68hc11/m68hc11.c (print_operand): Likewise.
- * config/m68k/hp320.h (PRINT_OPERAND, ASM_OUTPUT_FLOAT_OPERAND,
- ASM_OUTPUT_DOUBLE_OPERAND, ASM_OUTPUT_LONG_DOUBLE_OPERAND): Likewise.
- * config/m68k/m68k.h (ASM_OUTPUT_FLOAT_OPERAND,
- ASM_OUTPUT_DOUBLE_OPERAND, ASM_OUTPUT_LONG_DOUBLE_OPERAND): Likewise.
- * config/m68k/sun2o4.h (ASM_OUTPUT_FLOAT_OPERAND,
- ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
- * config/m68k/sun3.h (ASM_OUTPUT_FLOAT_OPERAND,
- ASM_OUTPUT_DOUBLE_OPERAND): Likewise.
- * config/mips/mips.c (print_operand): Likewise.
- * config/ns32k/ns32k.c (print_operand): Likewise.
- * config/pdp11/pdp11.h (PRINT_OPERAND): Likewise.
- * config/vax/vax.h (PRINT_OPERAND): Likewise.
- * doc/tm.texi (REAL_VALUE_TO_DECIMAL): Update docs.
-
-2002-09-04 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/elf.h (TARGET_SECTION_TYPE_FLAGS): Define to
- xtensa_multibss_section_type_flags.
- * config/xtensa/xtensa.c (xtensa_multibss_section_type_flags): Define.
-
-2002-09-04 Richard Henderson <rth@redhat.com>
-
- * doc/install-old.texi: Don't mention enquire.
- * doc/sourcebuild.texi: Update float.h description.
-
-Wed Sep 4 11:22:14 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (mperm_w_little, mperm_w_big): Supply mode for zero_extract.
-
-2002-09-03 Roger Sayle <roger@eyesopen.com>
-
- * builtins.c (build_function_call_expr): Remove prototype, export
- as non-static and add a comment above function definition.
- (builtin_mathfn_code): New function to check for math builtins.
- (fold_builtin): Optimize sqrt(0.0) as 0.0, sqrt(1.0) as 1.0,
- exp(0.0) as 1.0, and log(1.0) as 0.0. Optimize exp(log(x)) and
- log(exp(x)) as x. Optimize sqrt(exp(x)) as exp(x/2.0) and
- log(sqrt(x)) as log(x)/2.0.
-
- * tree.h: Prototype build_function_call_expr and builtin_mathfn_code
- in new "builtins.c" section. Place the build_range_type prototype
- with the other prototypes from "tree.c".
-
- * fold-const.c (fold) [ABS_EXPR]: Fold fabs(sqrt(x)) as sqrt(x)
- and fabs(exp(x)) as exp(x). [MULT_EXPR]: Fold sqrt(x)*sqrt(y)
- as sqrt(x*y) and exp(x)*exp(y) as exp(x+y). [RDIV_EXPR]: Fold
- x/exp(y) as x*exp(-y).
-
-2002-09-03 David Edelsohn <edelsohn@gnu.org>
-
- * varasm.c (default_section_type_flags): Append _1 to name with
- shlib parameter. Use original name to call new function with
- implicit flag_pic.
- (decl_readonly_section): Likewise.
- (default_elf_select_section): Likewise.
- (default_unique_section): Likewise.
- (default_bind_local_p): Likewise.
- (categorize_decl_for_section): Add shlib parameter to use in place
- of implicit flag_pic.
- * output.h: Declare new functions with _1 and shlib argument.
-
-2002-09-03 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi: Fix typos, formatting problems, and obvious
- overfull/underfull boxes.
-
- * Makefile.in (TEXI_GCC_FILES): Add compat.texi.
- * doc/gcc.texi (Top): Add new chapter, Binary Compatibility, and
- include its file, compat.texi.
- * doc/compat.texi: New file with new chapter, Binary Compatibility.
-
-2002-09-03 Neil Booth <neil@daikokuya.co.uk>
-
- Debian BTS Bug #157416
- * cpphash.h (FIRST, LAST, CUR, RLIMIT): Fix definitions.
- * cpplib.c (destringize_and_run): Kludge around getting
- tokens from in-progress macros.
- (_cpp_do__Pragma): Simplify.
-
-2002-09-03 Steve Ellcey <sje@cup.hp.com>
-
- * config/ia64/ia64.h (EXTRA_SPECS): Remove cpp_cpu.
- (CPP_CPU_SPEC): Remove.
- (TARGET_CPU_CPP_BUILTINS): New.
- * config/ia64/hpux.h (CPP_PREDEFINES): Remove.
- (CPP_SPEC): Remove.
- (TARGET_OS_CPP_BUILTINS): New.
- * config/ia64/linux.h (CPP_PREDEFINES): Remove.
- (TARGET_OS_CPP_BUILTINS): New.
- * config/ia64/aix.h (CPP_SPEC): Move some stuff to
- TARGET_OS_CPP_BUILTINS.
- (CPP_PREDEFINES): Remove.
- (CPLUSPLUS_CPP_SPEC): Remove.
- (TARGET_OS_CPP_BUILTINS): New.
-
-2002-09-03 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (USER_H): Add ginclude/float.h.
- (FLOAT_H): Remove.
- (stmp-int-hdrs, install-mkheaders): Don't handle FLOAT_H.
- (mostlyclean): Don't remove float.h intermediate files.
- (distclean): Don't remove float.h.
- * config.gcc: Remove all float_format references.
- * configure.in (float_format, float_h_file): Remove.
-
- * c-common.c: Include tree-inline.h.
- (builtin_define_with_int_value): New.
- (builtin_define_type_precision): Use it.
- (builtin_define_float_constants): New.
- (cb_register_builtins): Use it. Define __FLT_RADIX__ and
- __FLT_EVAL_METHOD__.
- * defaults.h (TARGET_FLT_EVAL_METHOD): New.
- * config/i386/i386.h (TARGET_FLT_EVAL_METHOD): New.
- * config/m68k/m68k.h (TARGET_FLT_EVAL_METHOD): New.
- * doc/tm.texi (INTEL_EXTENDED_IEEE_FORMAT): Mention moto 96-bit format.
- (TARGET_FLT_EVAL_METHOD): New.
-
- * config/float-c4x.h, config/float-i128.h, config/float-i32.h,
- config/float-i386.h, config/float-i64.h, config/float-m68k.h,
- config/float-sh.h, config/float-sparc.h, config/float-vax.h: Remove.
- * ginclude/float.h: New.
-
-2002-09-03 Stan Shebs <shebs@apple.com>
-
- * config/darwin.h (WARN_FOUR_CHAR_CONSTANTS): Remove, never used.
- (DWARF2_DEBUGGING_INFO): Remove until assembler accepts Dwarf-2.
- (PREFERRED_DEBUGGING_TYPE): Ditto.
- (ASM_OUTPUT_IDENT): Remove empty definition.
-
-2002-09-03 Steve Ellcey <sje@cup.hp.com>
-
- * config.gcc (ia64*-*-hpux*): Add ia64-c.o to c_target and
- cxx_target.
- * config/ia64/hpux.h (REGISTER_TARGET_PRAGMAS): Register pragma
- handling routine for builtin pragma.
- * config/ia64/ia64-protos.h (ia64_hpux_handle_builtin_pragma):
- Registered pragma handling routine.
- * ia64-c.c (ia64_hpux_handle_builtin_pragma): Ditto.
- (ia64_hpux_add_pragma_builtin) New subroutine used by above.
- If builtin pragma seen for math routine and C89 conformance is
- requested use different math function in order to set errno.
- * t-ia64 (ia64-c.o): Add new rule for new file.
-
-2002-09-03 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.md ("movti"): Add Q->Q alternative.
- ("*movdi_64", "*movdi_31", "*movsi", "movhi", "movqi_64",
- "movqi", "*movdf_64", "*movdf_31", "*movsf"): Likewise.
-
- ("*movti_ss", "*movdi_ss", "*movsi_ss", "*movdf_ss",
- "*movsf_ss"): Remove.
-
-2002-09-03 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa32-regs.h (CLASS_CANNOT_CHANGE_MODE, CLASS_CANNOT_CHANGE_MODE_P):
- Delete macros.
-
-2002-09-03 Arati Dikey <aratid@kpit.com>
-
- * h8300.c (asm_file_start): Corrected optimization comment.
-
-2002-09-03 Stan Shebs <shebs@apple.com>
-
- * c-lang.c (recognize_objc_keyword): Remove, no longer used.
- * c-tree.h (recognize_objc_keyword): Remove decl.
- * c-typeck.c (comp_target_types): Update a comment.
-
-2002-09-03 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (s390_decompose_address): Remove STRICT parameter
- and register validity checks.
- (general_s_operand): Adapt to s390_decompose_address interface change.
- (q_constraint): Likewise.
- (s390_expand_plus_operand): Likewise.
- (legitimiate_address_p): Likewise.
- (legitimate_la_operand_p): Likewise.
- (legitimize_la_operand): Likewise.
- (print_operand_address): Likewise.
- (print_operand): Likewise.
-
-Tue Sep 3 11:32:14 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- PR objc/5956:
- * objc/objc-act.c (build_typed_selector_reference): Fix typo which
- was causing the new selector never to match the existing ones
- (Patch by Alexander Malmberg <alexander@malmberg.org>).
-
-2002-09-03 Graham Stott <graham.stott@btinternet.com>
-
- * config/i386/i386.md ("femms"): Add "memory" attr "none".
-
-2002-09-03 Graham Stott <graham.stott@btinternet.com>
-
- * expr.c (expand_expr): Remove extraneous comment and code.
-
-2002-09-02 Nathan Sidwell <nathan@codesourcery.com>
-
- * stor-layout (finish_builtin_struct): Renamed and moved from c++
- frontend. Take chain of fields. Allow NULL alignment type.
- * tree.h (finish_builtin_struct): Declare.
-
-2002-09-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * config/alpha/alpha.c config/alpha/alpha.h config/alpha/alpha.md
- config/alpha/elf.h config/alpha/unicosmk.h config/alpha/vms.h
- config/arc/arc.c config/arc/arc.h config/arm/aout.h
- config/arm/arm.c config/arm/arm.h config/arm/arm.md
- config/avr/avr.h config/d30v/d30v.h config/dbxcoff.h
- config/dbxelf.h config/elfos.h config/fr30/fr30.h config/frv/frv.h
- config/i386/i386.c config/i386/i386.md config/i386/sco5.h
- config/ia64/ia64.h config/ip2k/ip2k.h config/m68hc11/m68hc11.md
- config/m68k/hp320.h config/m68k/m68k.c config/m68k/m68k.md
- config/m68k/mot3300.h config/m68k/sgs.h config/m68k/tower-as.h
- config/m88k/m88k.c config/m88k/m88k.h config/mcore/mcore-pe.h
- config/mcore/mcore.c config/mips/mips.c config/mips/mips.h
- config/ns32k/ns32k.md config/pa/pa-linux.h config/pa/pa.c
- config/pa/pa.h config/pa/pa.md config/romp/romp.h
- config/rs6000/linux64.h config/rs6000/lynx.h
- config/rs6000/rs6000.c config/rs6000/sysv4.h config/rs6000/xcoff.h
- config/s390/s390.c config/s390/s390.md config/sh/sh.c
- config/sparc/sparc.c config/sparc/sysv4.h
- config/stormy16/stormy16.h dbxout.c defaults.h dwarf2out.c
- dwarfout.c except.c final.c varasm.c vmsdbgout.c: Replace
- ASM_OUTPUT_INTERNAL_LABEL macro with a call to the target hook.
-
- * doc/tm.texi: Update docs.
- * default.h (ASM_OUTPUT_INTERNAL_LABEL): Don't define.
- * system.h (ASM_OUTPUT_INTERNAL_LABEL): Poison.
-
-2002-08-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (sdbout.o, insn-output.o): Depend on $(TARGET_H).
- * arc.c (arc_internal_label): New function.
- (TARGET_ASM_INTERNAL_LABEL): Set.
- * arc.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * arm.c (arm_internal_label): New function.
- (TARGET_ASM_INTERNAL_LABEL): Set.
- * arm.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * arm/elf.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * i370.c (i370_internal_label): New function.
- (TARGET_ASM_INTERNAL_LABEL): Set.
- * i370.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * m68k/hp320.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * m68k.c (m68k_hp320_internal_label): New function.
- (TARGET_ASM_INTERNAL_LABEL): Set.
- * m88k.c (m88k_internal_label): New function.
- (TARGET_ASM_INTERNAL_LABEL): Set.
- * m88k.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * defaults.h (ASM_OUTPUT_INTERNAL_LABEL): Set to target hook.
- * genoutput.c (output_prologue): Include target.h in output file.
- * output.h (default_internal_label): Declare.
- * sdbout.c: Include target.h.
- * target-def.h (TARGET_ASM_INTERNAL_LABEL): Set and add to
- TARGET_ASM_OUT.
- * target.h (internal_label): Add to struct gcc_target.
- * varasm.c (default_internal_label): New function.
-
-2002-08-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha.h (ASM_OUTPUT_INTERNAL_LABEL): Delete.
- * avr.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * c4x.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * cris.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * d30v.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * darwin.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * dsp16xx.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * elfos.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * h8300.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/att.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/bsd.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/i386-coff.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/lynx-ng.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/lynx.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i386/sco5.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * i960/i960.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/3b1.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/amix.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/atari.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/mot3300.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/tower-as.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m88k.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * mcore.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * mips.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * mmix-protos.h (mmix_asm_output_internal_label): Likewise.
- * mmix.c (mmix_asm_output_internal_label): Likewise.
- * mmix.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * ns32k.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * pa.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * pdp11.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * romp.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * rs6000/xcoff.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sh/coff.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sh/elf.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/freebsd.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/linux.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/linux64.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/netbsd-elf.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/pbd.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/sol2.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * sparc/vxsim.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * stormy16.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * svr3.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * vax.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
-
- * defaults.h (ASM_OUTPUT_INTERNAL_LABEL): Define.
-
-2002-08-31 Richard Henderson <rth@redhat.com>
-
- * expr.c (block_move_libcall_safe_for_call_parm): Fix thinko.
-
-2002-08-31 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (pa_globalize_label): Add ATTRIBUTE_UNUSED to prototype.
-
-2002-08-30 Richard Henderson <rth@redhat.com>
-
- PR opt/7515
- * c-objc-common.c: Include target.h.
- (c_cannot_inline_tree_fn): Don't auto-inline functions that
- don't bind locally. Factor setting DECL_UNINLINABLE.
- * Makefile.in (c-objc-common.o): Update.
-
-2002-08-30 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi (Configuration, Building): Fix a typo and
- some formatting directives.
-
-2002-08-30 Paul Koning <pkoning@equallogic.com>
-
- * doc/c-tree.texi (RDIV_EXPR): Fix typo.
- * doc/rtl.texi (post_modify): Remove misplaced text, remove "not
- implemented" note.
- * doc/md.texi (IP2K): Move machine-specific constraints before MIPS
- for alphabetic order.
- * doc/tm.texi (TARGET_FLOAT_FORMAT): Update description for
- VAX_FLOAT_FORMAT. Remove reference to HOST_FLOAT_FORMAT.
- (VAX_HALFWORD_ORDER): Document.
- (LARGEST_EXPONENT_IS_NORMAL): Remove note about being only for
- IEEE float format.
- (TARGET_SCHED_ISSUE_RATE): Reword reference to MAX_DFA_ISSUE_RATE.
- (ASM_OUTPUT_LABEL_REF): Fix font.
- (CASE_VECTOR_SHORTEN_MODE): Ditto.
-
-2002-08-30 Denis Chertykov <denisc@overta.ru>
-
- * config/ip2k/ip2k.c (ip2k_set_compare): Remove all const_double
- stuff.
- (ip2k_gen_unsigned_comp_branch): Handle CONST_INT and
- CONST_DOUBLE constants.
-
-2002-08-30 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/alpha/alpha.h (TARGET_CPU_CPP_BUILTINS): Move language-
- related defines to...
- (SUBTARGET_LANGUAGE_CPP_BUILTINS): ...here.
- * config/alpha/netbsd.h (SUBTARGET_LANGUAGE_CPP_BUILTINS): Redefine
- as a no-op.
-
-2002-08-30 Krister Walfridsson <cato@df.lth.se>
-
- * config/arm/arm.c (arm_asm_output_labelref): New function.
- * config/arm/arm.h (ASM_OUTPUT_LABELREF): Call arm_asm_output_labelref.
- * config/arm/arm-protos.h: Add prototype for arm_asm_output_labelref.
-
-2002-08-29 Rodney Brown <rbrown64@csc.com.au>
-
- * doc/install.texi (Specific, alpha*-dec-osf*): Add "virtual
- memory exhausted" workarounds.
-
-2002-08-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * diagnostic.c (fancy_abort): Don't repeat "internal error".
- * toplev.c (crash_signal): Likewise.
-
-Fri Aug 30 00:33:37 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- * doc/cpp.texi (__NEXT_RUNTIME__): Extended documentation.
- * doc/invoke.texi (-fnext-runtime, -Wno-protocol, -Wselector):
- Extended, updated documentation.
- (-Wundeclared-selector): Documented.
-
-2002-08-29 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/chorus.h: Consistently define *_DEBUGGING_INFO with
- the value 1. Do not undef before defining.
- * config/darwin.h: Likewise.
- * config/dbx.h: Likewise.
- * config/dbxcoff.h: Likewise.
- * config/dbxelf.h: Likewise.
- * config/elfos.h: Likewise.
- * config/interix.h: Likewise.
- * config/lynx-ng.h: Likewise.
- * config/lynx.h: Likewise.
- * config/netware.h: Likewise.
- * config/psos.h: Likewise.
- * config/svr3.h: Likewise.
- * config/alpha/alpha.h: Likewise.
- * config/alpha/elf.h: Likewise.
- * config/alpha/vms.h: Likewise.
- * config/arc/arc.h: Likewise.
- * config/arm/aout.h: Likewise.
- * config/arm/coff.h: Likewise.
- * config/c4x/c4x.h: Likewise.
- * config/h8300/h8300.h: Likewise.
- * config/i386/cygwin.h: Likewise.
- * config/i386/djgpp.h: Likewise.
- * config/i386/gas.h: Likewise.
- * config/i386/gstabs.h: Likewise.
- * config/i386/i386-coff.h: Likewise.
- * config/i386/i386-interix.h: Likewise.
- * config/i386/sco5.h: Likewise.
- * config/i386/svr3dbx.h: Likewise.
- * config/i386/sysv3.h: Likewise.
- * config/i386/win32.h: Likewise.
- * config/i386/x86-64.h: Likewise.
- * config/i960/i960.h: Likewise.
- * config/ia64/ia64.h: Likewise.
- * config/ip2k/ip2k.h: Likewise.
- * config/m32r/m32r.h: Likewise.
- * config/m68k/3b1.h: Likewise.
- * config/m68k/3b1g.h: Likewise.
- * config/m68k/ccur-GAS.h: Likewise.
- * config/m68k/coff.h: Likewise.
- * config/m68k/hp2bsd.h: Likewise.
- * config/m68k/hp310g.h: Likewise.
- * config/m68k/hp320g.h: Likewise.
- * config/m68k/hp3bsd.h: Likewise.
- * config/m68k/hp3bsd44.h: Likewise.
- * config/m68k/linux-aout.h: Likewise.
- * config/m68k/m68k-aout.h: Likewise.
- * config/m68k/mot3300.h: Likewise.
- * config/m68k/netbsd.h: Likewise.
- * config/m68k/openbsd.h: Likewise.
- * config/m68k/pbb.h: Likewise.
- * config/m68k/plexus.h: Likewise.
- * config/m68k/sun2.h: Likewise.
- * config/m68k/sun3.h: Likewise.
- * config/m68k/tower-as.h: Likewise.
- * config/m68k/vxm68k.h: Likewise.
- * config/m88k/aout-dbx.h: Likewise.
- * config/m88k/m88k-aout.h: Likewise.
- * config/mcore/mcore-elf.h: Likewise.
- * config/mcore/mcore-pe.h: Likewise.
- * config/mips/elf.h: Likewise.
- * config/mips/elf64.h: Likewise.
- * config/mips/iris5gas.h: Likewise.
- * config/mips/iris6.h: Likewise.
- * config/mips/mips.h: Likewise.
- * config/mips/sni-gas.h: Likewise.
- * config/mmix/mmix.h: Likewise.
- * config/ns32k/netbsd.h: Likewise.
- * config/pa/pa64-hpux.h: Likewise.
- * config/romp/romp.h: Likewise.
- * config/rs6000/sysv4.h: Likewise.
- * config/rs6000/xcoff.h: Likewise.
- * config/sh/coff.h: Likewise.
- * config/sh/elf.h: Likewise.
- * config/sparc/linux64.h: Likewise.
- * config/sparc/liteelf.h: Likewise.
- * config/sparc/netbsd.h: Likewise.
- * config/sparc/openbsd.h: Likewise.
- * config/sparc/pbd.h: Likewise.
- * config/sparc/sp64-elf.h: Likewise.
- * config/sparc/sp86x-elf.h: Likewise.
- * config/sparc/sparc.h: Likewise.
- * config/vax/vax.h: Likewise.
- * config/vax/vaxv.h: Likewise.
-
-2002-08-29 "Dhananjay R. Deshpande" <dhananjayd@kpit.com>
-
- * h8300.c (shift_alg_hi): Various tweaks to improve performance
- of HImode shifts.
- (get_shift_alg): Corresponding changes.
-
-2002-08-29 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * som.h (ALWAYS_STRIP_DOTDOT): Define to 1.
-
-2002-08-29 Richard Henderson <rth@redhat.com>
-
- * expr.h (enum block_op_methods): New.
- (emit_block_move): Update prototype.
- * expr.c (block_move_libcall_safe_for_call_parm): New.
- (emit_block_move_via_loop): New.
- (emit_block_move): Use them. New argument METHOD.
- (emit_push_insn): Always respect the given alignment.
- (expand_assignment): Update call to emit_block_move.
- (store_expr, store_field, expand_expr): Likewise.
- * builtins.c (expand_builtin_apply): Likewise.
- (expand_builtin_memcpy, expand_builtin_va_copy): Likewise.
- * function.c (expand_function_end): Likewise.
- * config/sh/sh.c (sh_initialize_trampoline): Likewise.
- * config/sparc/sparc.c (sparc_va_arg): Likewise.
- * calls.c (expand_call, emit_library_call_value_1): Likewise.
- (save_fixed_argument_area): Use emit_block_move with
- BLOCK_OP_CALL_PARM instead of move_by_pieces.
- (restore_fixed_argument_area): Likewise.
- (store_one_arg): Fix alignment parameter to emit_push_insn.
-
-2002-08-29 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * install.texi (hppa64-hp-hpux11*): Document installation procedure.
-
-2002-08-29 Catherine Moore <clm@redhat.com>
-
- * config/v850/v850.h (MULDI3_LIBCALL, UCMPDI2_LIBCALL, CMPDI2_LIBCALL,
- NEGDI2_LIBCALL, INIT_TARGET_OPTABS, MASK_STRICT_ALIGN): Define.
- (PREDICATE_CODES): Include new predicates.
- (RTX_COSTS): Handle UMOD and UDIV. Tune MULT for v850e.
- (TARGET_SWITCHES): Add strict-align.
- (TARGET_STRICT_ALIGN): New.
- (MASK_DEFAULT, STRICT_ALIGNMENT): Redefine.
- * config/v850/t-v850 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
- Define.
- (LIB1ASMFUNCS): Add v850_negdi2, v850_cmpdi2, v850_ucmpdi2,
- v850_muldi3.
- * config/v850/lib1funcs.asm (L_callt_save_r2_r29, L_return_r2_r29,
- L_callt_save_r2_r31, L_return_r2_r31,
- L_save_all_interrupt): Change addi to add.
- (L_save_interrupt, L_return_interrupt): Rework.
- (__return_r31): Correct .size directive.
- (mulsi3, divsi3, udivsi3, umodsi3, modsi3): Tune for v850e.
- (v850_negdi2, v850_cmpdi2, v850_ucmpdi2, v850_muldi3):
- New routines.
- * config/v850/v850.c (expand_prologue): Call
- gen_callt_save_interrupt, gen_callt_restore_all_interrupt,
- gen_callt_return_interrupt and gen_callt_save_all_interrupt.
- (reg_or_int9_operand): New predicate.
- (reg_or_const_operand): New routine.
- * config/v850/v850.md (return_interrupt): Changed from
- restore_interrupt.
- (callt_save_all_interrupt): Changed from save_all_interrupt_v850e.
- (callt_save_interrupt): Change save sequence.
- (callt_return_interrupt): New.
- (save_interrupt): Don't use runtime function for LONG_CALLS
- and TARGET_PROLOG_FUNCTION.
- (save_all_interrupt): Likewise.
- (mulsi3): Use new predicate.
- (moviscc): Disallow some combination of constants.
- Fix define_split for sasf insns, so that it will not generate bad
- code if operand0 and operand5 are the same.
- * config/v850/v850-protos.h: Prototype new predicates.
-
-2002-08-29 Zack Weinberg <zack@codesourcery.com>
-
- * config/rs6000/rs6000.c (processor_target_table): Add 405f.
- * config/rs6000/rs6000.h (ASM_CPU_SPEC): Likewise.
-
-2002-08-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * c-common.c (builtin_define_type_precision): New function.
- (cb_register_builtins): Use it. Define __WCHAR_UNSIGNED__ is
- wchar_t is unsigned in C++.
- * doc/cpp.texi (Common Predefined Macros): Document
- __WCHAR_UNSIGNED__, __CHAR_BIT__, __WCHAR_BIT__, __SHRT_BIT__,
- __INT_BIT__, __LONG_BIT__, __LONG_LONG_BIT__, __FLOAT_BIT__,
- __DOUBLE_BIT__, __LONG_DOUBLE_BIT__.
-
-2002-08-28 Sylvain Pion <pion@cs.nyu.edu>
-
- * doc/invoke.texi (-Wreorder): Remove remaining pieces from the generic
- section. Mention that it is enabled by -Wall.
- (-Wall): Mention that there can be language-specific warnings as well.
- (-Wctor-dtor-privacy): Mention that it is enabled by default.
- (-Wnon-virtual-dtor): Mention that it is enabled by -Wall.
-
-Wed Aug 28 15:35:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (calc_live_regs): Save FPSCR_REG in an interrupt handler
- if it is ever live.
-
- * sh.c (sh_handle_interrupt_handler_attribute): Reject interrupt_handler
- attribute for SHCOMPACT.
-
- * sh.h (OVERRIDE_OPTIONS): If align_function isn't set, set it
- appropriately.
- (FUNCTION_BOUNDARY): Specify only the minimum alignment required
- by the ABI.
-
- * sh.h (SH5_WOULD_BE_PARTIAL_NREGS): Also handle TImode case.
-
-2002-08-28 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config.gcc (mips*-*-netbsd*): Set target_cpu_default to
- "MASK_GAS|MASK_ABICALLS".
- * config/mips/netbsd.h (TARGET_ENDIAN_DEFAULT)
- (TARGET_DEFAULT): Remove.
- (MACHINE_TYPE): Undefine before defining.
- (DBX_DEBUGGING_INFO, PREFERRED_DEBUGGING_TYPE): Remove.
-
-2002-08-27 Mark Mitchell <mark@codesourcery.com>
-
- * c-common.c (warn_abi): New variable.
- * c-common.h (warn_abi): Likewise.
- * c-opts.c (COMMAND_LINE_OPTIONS): Add -Wabi.
- (c_common_decode_option): Handle it.
- * doc/invoke.texi: Document -Wabi.
-
-Tue Aug 27 23:03:52 2002 Nicola Pero <n.pero@mi.flashnet.it>
-
- * c-common.c (warn_undeclared_selector): New variable.
- * c-common.h (warn_undeclared_selector): Idem.
- * c-opts.c (c_common_decode_option): Set warn_undeclared_selector
- to on when -Wundeclared-selector is found.
- (COMMAND_LINE_OPTIONS): Added -Wundeclared-selector.
- * objc/objc-act.c (build_selector_expr): If
- warn_undeclared_selector is set, check that the selector has
- already been defined, and emit a warning if not.
-
-2002-08-27 Nick Clifton <nickc@redhat.com>
- Catherine Moore <clm@redhat.com>
- Jim Wilson <wilson@cygnus.com>
-
- * config.gcc: Add v850e-*-* target.
- Add --with-cpu= support for v850.
- * config/v850/lib1funcs.asm: Add v850e callt functions.
- * config/v850/v850.h: Add support for v850e target.
- * config/v850/v850.c: Add functions to support v850e target.
- * config/v850/v850-protos.h: Add prototypes for new functions in v850.c.
- * config/v850/v850.md: Add patterns for v850e instructions.
- * doc/invoke.texi: Document new v850e command line switches.
-
-Tue Aug 27 18:30:47 2002 J"orn Rennecke <joern.rennecke@superh.com>
- Aldy Hernandez <aldyh at redhat dot com>
-
- * doc/tm.texi: Applied numerous fixes to the automaton based
- scheduler descrition.
-
-Tue Aug 27 19:51:05 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (classify_argument): Handle variable sized objects.
-
-Tue Aug 27 19:18:16 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_expand_int_movcc): Fix RTL sharing problem
-
-Tue Aug 27 18:01:45 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * libgcc2.c (__bb_exit_func): Properly write the summarized statistics.
-
-Tue Aug 27 18:00:11 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (classify_argument): Properly compute word size of the analyzed object.
-
-Tue Aug 27 14:39:09 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (attribute type): Add types mt_group, fload, pcfload, fpul_gp,
- mac_gp ftrc_s and cwb. Add / Adjust definitions in individual insn
- accordingly.
- (attribute insn_class): Provide default definitions based on type.
- Remove all insn-specific settings.
- (various function units): Remove old SH4 scheduling.
- (branch_zero, dfp_comp, late_fp_use, any_fp_comp, any_int_load):
- New attributes. Set them where appropriate.
- (cpu unit FS): Don't define / use.
- (F3, load_store): New cpu units.
- (F01): New reservation.
- (all insn_reservations): Make dependent on sh4 pipeline model.
- Fix latencies.
- (nil, reg_mov, freg_mov, sh4_fpul_gp, sh4_call): New insn_reservations.
- (sh4_mac_gp, fp_arith_ftrc, arith3, arith3b): Likewise.
- (mt insn_reservation): Use type mt_group.
- (insn_reservation load_store): Split into sh4_load, sh4_load_si,
- sh4_fload and sh4_store.
- (insn_reservation branch_zero and branch): Replace with sh4_branch.
- (insn_reservation branch_far): Replace with sh4_return.
- (insn_reservation return_from_exp): Rename to:
- (sh4_return_from_exp). Change to be just d_lock*5.
- (insn_reservation lds_to_pr): Rename to:
- (sh4_lds_to_pr). Change to be just d_lock*2.
- (insn_reservation ldsmem_to_pr, sts_from_pr): Change to be just
- d_lock*2.
- (insn_reservation prload_mem): Rename to:
- (sh4_prstore_mem). Change to d_lock*2,nothing,memory.
- (insn_reservation fpscr_store): Rename to:
- (fpscr_load). Change to d_lock,nothing,F1*3.
- (insn_reservation fpscr_store_mem): Rename to:
- (fpscr_load_mem). Change to d_lock,nothing,(F1+memory),F1*2.
- (insn_reservation multi): Change to
- d_lock,(d_lock+f1_1),(f1_1|f1_2)*3,F2.
- (insn_reservation fp_arith): Change to issue,F01,F2.
- (insn_reservation fp_div: Change to issue,F01+F3,F2+F3,F3*7,F1+F3,F2.
- (insn_reservation dp_float): Change to issue,F01,F1+F2,F2.
- (insn_reservation fp_double_arith): Change to issue,F01,F1+F2,fpu*4,F2.
- (insn_reservation fp_double_cmp): Change to
- d_lock,(d_lock+F01),F1+F2,F2.
- (insn_reservation dp_div): Change to
- issue,F01+F3,F1+F2+F3,F2+F3,F3*16,F1+F3,(fpu+F3)*2,F2.
- * sh.c (flow_dependent_p, flow_dependent_p_1): New functions.
- (sh_adjust_cost, SHcompact): Differentiate between different
- kinds of dependencies. Drop factor of ten for superscalar.
- Use new instruction types. Add new exception rules.
-
- * sh.md (mulhisi3, umulhisi3: Add a REG_EQUAL note.
-
- * sh.md (mperm_w): Add DONE.
-
-2002-08-27 David Edelsohn <edelsohn@gnu.org>
-
- * longlong.h: Import current PowerPC defintion from GMP-4.1.
-
- * config/rs6000/rs6000.h (MIN_UNITS_PER_WORD): Add IN_LIBGCC2 case.
-
- * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Undef before define.
-
-Tue Aug 27 13:53:57 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (MAX_FIXED_MODE_SIZE): Define.
-
-2002-08-27 Gabriel Dos Reis <gdr@soliton.integrable-solutions.net>
-
- * doc/cpp.texi (Common Predefined Macros): Don't mess with table
- delimiter.
-
-2002-08-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * c-common.c (cpp_define_data_format): New function.
- (cb_register_builtins): Call it.
-
- * doc/cpp.texi (Common Predefined Macros): Document
- __TARGET_BITS_ORDER__, __TARGET_BYTES_ORDER__,
- __TARGET_INT_WORDS_ORDER__, __TARGET_FLOAT_WORDS_ORDER__,
- __TARGET_FLOAT_FORMAT__, __TARGET_USES_VAX_F_FLOAT__,
- __TARGET_USES_VAX_D_FLOAT__, __TARGET_USES_VAX_G_FLOAT__,
- __TARGET_USES_VAX_H_FLOAT__.
-
-2002-08-26 Ziemowit Laski <zlaski@apple.com>
-
- * objc/objc-act.c (get_super_receiver): If inside a class method
- of a category, cast the receiver to 'id' before accessing the 'isa'
- field so that <objc/objc-class.h> is not needed. For NeXT runtime.
-
-2002-08-26 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390-protos.h (s390_function_prologue,
- s390_function_epilogue): Remove.
- config/s390/s390.c (s390_function_prologue, s390_function_epilogue,
- TARGET_ASM_FUNCTION_PROLOGUE, TARGET_ASM_FUNCTION_EPILOGUE): Remove.
-
- config/s390/s390.c (s390_machine_dependent_recorg): New function.
- config/s390/s390-protos.h (s390_machine_dependent_reorg): Declare it.
- config/s390/s390.h (MACHINE_DEPENDENT_REORG): Call it.
- config/s390/s390.c (s390_split_branches, s390_chunkify_pool): Adapt
- to being called from MACHINE_DEPENDENT_REORG. Update regs_ever_live.
-
- config/s390/s390.c (s390_frame_info): Inline save_fprs_p. Always
- assume BASE_REGISTER and RETURN_REGNUM need to be saved.
- (s390_emit_prologue): Assume RETURN_REGNUM to be saved iff
- function is not a leaf function. Use save_gprs and restore_gprs.
- (s390_emit_epilogue): Likewise.
- (save_gprs, restore_gprs): New functions.
- (struct s390_frame): Remove return_reg_saved_p member.
- (save_fprs_p): Remove.
- (s390_optimize_prolog): New function.
- (s390_legitimate_reload_constant): Remove now unnecessary check.
-
- (s390_function_count): Remove.
- (s390_output_symbolic_const): Replace s390_function_count by
- current_function_funcdef_no.
- (s390_output_constant_pool): Likewise.
-
- (legitimize_pic_address): Use regs_ever_live to track PIC register
- instead of current_function_uses_pic_offset_table.
- (s390_emit_prologue): Likewise.
- config/s390/s390.md ("call", "call_value"): Likewise.
-
-2002-08-26 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (find_opt): Don't complain about wrong languages
- here. Return exact matches even for wrong language.
- (c_common_decode_option): Complain about wrong languages
- here.
-
-2002-08-24 Stuart Hastings <stuart@apple.com>
-
- * function.h (struct function): Add flag
- all_throwers_are_sibcalls.
- * except.c (set_nothrow_function_flags): Replaces
- nothrow_function_p. Set new flag.
- * except.h (set_nothrow_function_flags): Replaces
- nothrow_function_p.
- * dwarf2out.c (struct dw_fde_struct): Add flag
- all_throwers_are_sibcalls.
- (output_call_frame_info): Test it.
- (dwarf2out_begin_prologue) Propagate it from cfun to
- dw_fde_struct.
- * toplev.c (rest_of_compilation): Update calls to
- nothrow_function_p.
-
-2002-08-23 Zack Weinberg <zack@codesourcery.com>
-
- * ggc-page.c (compute_inverse): Short circuit calculation for
- object sizes larger than half a page.
-
-2002-08-23 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_elf_select_section): Treat
- DEFAULT_ABI == ABI_AIX like PIC. Test PIC & reloc for readonly
- default.
- (rs6000_elf_unique_section): Likewise.
-
-2002-08-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ns32k.c (ns32k_globalize_label): Delete.
- * ns32k.h (ASM_OUTPUT_LABEL, TARGET_ASM_GLOBALIZE_LABEL): Delete.
-
-2002-08-23 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (output_mi_thunk): Don't determine insns
- for loading delta with num_insns_constant_wide. Calculate
- delta_low, delta_high without using a conditional.
-
-2002-08-22 Jason Merrill <jason@redhat.com>
-
- * c-common.h (RETURN_STMT_EXPR): Rename from RETURN_EXPR.
- * c-common.def: Adjust.
- * c-dump.c (c_dump_tree): Adjust.
- * c-semantics.c (genrtl_return_stmt): Adjust.
- * c-pretty-print.c (pp_c_statement): Adjust.
- * tree-inline.c (copy_body_r): Adjust.
-
-2002-08-22 Zack Weinberg <zack@codesourcery.com>
-
- * ggc-page.c: Avoid division in ggc_set_mark.
- (DIV_MULT, DIV_SHIFT, OFFSET_TO_BIT, inverse_table,
- compute_inverse): New.
- (ggc_set_mark, ggc_marked_p): Use OFFSET_TO_BIT.
- (init_ggc): Initialize inverse_table.
-
-2002-08-22 Tom Tromey <tromey@redhat.com>
-
- * doc/install.texi (Configuration): Document --datadir.
-
-2002-08-22 Alexandre Oliva <aoliva@redhat.com>
-
- * Makefile.in ($(BUILD_PREFIX_1)varray.o): Depend on $(GGC_H).
-
-2002-08-22 Hans-Peter Nilsson <hp@bitrange.com>
-
- * gengtype-lex.l (ID): Allow underscore as first character.
-
-2002-08-21 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_xcoff_asm_globalize_label): New
- function.
- (rs6000_xcoff_asm_named_section): Rename.
- * config/rs6000/xcoff.h (TARGET_ASM_GLOBALIZE_LABEL): Define.
-
-2002-08-21 Tom Tromey <tromey@redhat.com>
-
- For PR java/6005 and PR java/7611:
- * fold-const.c (fold_truthop): Use can_use_bit_fields_p.
- (fold): Likewise.
- * langhooks.c (lhd_can_use_bit_fields_p): New function.
- * langhooks-def.h (lhd_can_use_bit_fields_p): Declare.
- (LANG_HOOKS_CAN_USE_BIT_FIELDS_P): New define.
- (LANG_HOOKS_INITIALIZER): Use it.
- * langhooks.h (struct lang_hooks) [can_use_bit_fields_p]: New
- field.
-
-2002-08-21 Stan Shebs <shebs@apple.com>
-
- * tree.c (finish_vector_type): Fix a typo in a comment.
- * Makefile.in: Fix "the the" stutters in comments.
- * genautomata.c: Ditto.
- * ifcvt.c: Ditto.
- * regrename.c: Ditto.
- * config/alpha/alpha.c: Ditto.
- * config/alpha/vms-crt0-64.c: Ditto.
- * config/alpha/vms-crt0.c: Ditto.
- * config/alpha/vms-psxcrt0-64.c: Ditto.
- * config/alpha/vms-psxcrt0.c: Ditto.
- * config/d30v/d30v.h: Ditto.
- * config/fr30/fr30.h: Ditto.
- * config/rs6000/rs6000.c: Ditto.
- * config/stormy16/stormy16.h: Ditto.
- * doc/md.texi: Ditto.
-
-2002-08-21 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * cppinit.c (remove_dup_nonsys_dirs): Fix warning and return value.
-
-2002-08-21 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * c-decl.c (grokdeclarator): Make invalid combinations with long,
- short, signed or unsigned into hard errors. Fixes PR c/4319.
- Also make duplicate modifiers such as "short short" into hard
- errors.
-
-2002-08-21 Andrew Pinski <pinskia@physics.uc.edu>
- Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * doc/tm.texi (TARGET_ASM_GLOBALIZE_LABEL): Move '@end deftypefn'
- to the actual end. Add '@end table' and '@table @code'.
-
-2002-08-20 Geoffrey Keating <geoffk@redhat.com>
-
- * doc/tm.texi (Label Output): Add missing '@end deftypefn'.
-
- * unroll.c (biv_total_increment): Don't try to compute the total
- increment for FP BIVs.
-
-2002-08-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha.c (TARGET_ASM_GLOBALIZE_LABEL): Define for unicosmk.
- * alpha/elf.h (ASM_OUTPUT_EXTERNAL_LIBCALL,
- ASM_OUTPUT_ALIGNED_BSS): Use target hook.
- * alpha/osf.h (ASM_OUTPUT_WEAK_ALIAS): Likewise.
- * alpha/unicosmk.h (ASM_GLOBALIZE_LABEL): Delete.
- * arm/aof.h (ASM_GLOBALIZE_LABEL): Likewise.
- (GLOBAL_ASM_OP): Define.
- * arm.c (aof_globalize_label): New function.
- (TARGET_ASM_GLOBALIZE_LABEL): Define for AOF.
- * arm/unknown-elf.h (ASM_OUTPUT_ALIGNED_BSS): Use target hook.
- * c4x.c (c4x_globalize_label): New function.
- (TARGET_ASM_GLOBALIZE_LABEL): Define for c4x.
- * c4x.h (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
- * cris/aout.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Use target hook.
- * darwin-protos.h (darwin_globalize_label): Declare.
- * darwin.c (darwin_globalize_label): New function.
- * darwin.h (ASM_DECLARE_CLASS_REFERENCE): Use target hook.
- (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP, TARGET_ASM_GLOBALIZE_LABEL): Define.
- * dsp16xx.c (asm_output_common): Use target hook.
- * elfos.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Likewise.
- * frv.h (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
- * i370.c (i370_globalize_label): New function.
- (TARGET_ASM_GLOBALIZE_LABEL): Define for i370.
- * i370.h (ASM_GLOBALIZE_LABEL): Delete.
- * i386.c (ix86_asm_file_end): Use target hook.
- * i386/sco5.h (ASM_GLOBALIZE_LABEL): Don't undef.
- (ASM_OUTPUT_EXTERNAL_LIBCALL): Use target hook.
- * ia64.c (ia64_asm_output_external): Likewise.
- * ia64/sysv4.h: Update comment.
- * m32r.h (ASM_OUTPUT_ALIGNED_BSS): Use target hook.
- * mips/elf.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
- * mips/iris5.h (ASM_OUTPUT_WEAK_ALIAS): Use target hook.
- * mips/linux.h (ASM_OUTPUT_ALIGNED_BSS): Likewise.
- * mips.h (ASM_OUTPUT_ALIGNED_DECL_COMMON): Use target hook.
- * mmix-protos.h (mmix_asm_globalize_label): Delete.
- * mmix.c (mmix_asm_globalize_label): Likewise.
- * mmix.h (ASM_GLOBALIZE_LABEL): Likewise.
- (GLOBAL_ASM_OP): Define.
- * ns32k.c (ns32k_globalize_label): New function.
- * ns32k.h (TARGET_ASM_GLOBALIZE_LABEL): Define for ns32k.
- (ASM_GLOBALIZE_LABEL): Delete.
- * pa/pa-linux.h (ASM_GLOBALIZE_LABEL): Don't undef.
- (TARGET_ASM_GLOBALIZE_LABEL): Undefine.
- * pa.c (pa_globalize_label): New function.
- * pa.h (ASM_GLOBALIZE_LABEL): Delete.
- (TARGET_ASM_GLOBALIZE_LABEL): Define for pa.
- * rs6000/darwin.h (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
- (TARGET_ASM_GLOBALIZE_LABEL): Undef.
- * rs6000/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Use target hook.
- * rs6000/xcoff.h (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
- * v850.c (v850_output_aligned_bss): Use target hook.
- * vax.c (vms_globalize_label): New function.
- (TARGET_ASM_GLOBALIZE_LABEL): Define for vms.
- * vax/vms.h (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
- * defaults.h (ASM_GLOBALIZE_LABEL): Delete.
- * doc/tm.texi: Update docs.
- * dwarf2out.c (default_eh_frame_section, output_die_symbol): Use
- target hook.
- * final.c (output_alternate_entry_point): Likewise.
- * hooks.c (hook_FILEptr_constcharptr_void): New function.
- * hooks.h (hook_FILEptr_constcharptr_void): Declare.
- * output.h (assemble_global): Delete.
- (default_globalize_label): Declare.
- * system.h (ASM_GLOBALIZE_LABEL): Poison.
- * target-def.h (TARGET_ASM_GLOBALIZE_LABEL): Define.
- (TARGET_ASM_OUT): Add TARGET_ASM_GLOBALIZE_LABEL.
- * target.h (gcc_target): Add globalize_label member.
- * varasm.c (asm_output_bss, asm_output_aligned_bss,
- globalize_decl): Use target hook.
- (assemble_global): Delete.
- (default_globalize_label): New function.
-
-2002-08-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * dsp16xx.h (dsp16xx_umulhi3_libcall): Delete.
-
-2002-08-20 Devang Patel <dpatel@apple.com>
- * tree.c (get_qualified_type): Add TYPE_CONTEXT check.
-
-2002-08-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * arc.c (output_shift): Use stdio instead of asm_fprintf.
- * arm.c (thumb_output_function_prologue): Likewise.
- * avr.c (print_operand): Likewise.
- * c4x.c (c4x_print_operand): Likewise.
- * c4x.h (ASM_OUTPUT_INTERNAL_LABEL, TRAMPOLINE_TEMPLATE,
- ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Likewise.
- * cris.c (cris_target_asm_function_prologue,
- cris_asm_output_mi_thunk): Likewise.
- * h8300.c (print_operand): Likewise.
- * h8300.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
- * ip2k.c (print_operand): Likewise. Fix format specifier.
- * m68hc11.c (asm_print_register, print_operand,
- print_operand_address): Use stdio instead of asm_fprintf.
- (print_operand_address): Fix format specifier.
- * m68hc11.h (FUNCTION_PROFILER, ASM_OUTPUT_ADDR_DIFF_ELT,
- ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ALIGN): Use stdio instead of
- asm_fprintf.
- * m68k/amix.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k/atari.h (ASM_OUTPUT_INTERNAL_LABEL): Likewise.
- * m68k.c (m68k_output_function_prologue,
- m68k_output_function_epilogue, print_operand): Likewise.
- * mmix.c (mmix_asm_output_mi_thunk, mmix_asm_weaken_label):
- Likewise. Fix format specifier.
- * mn10200.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
- * mn10300.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
- * v850.h (ASM_OUTPUT_ADDR_VEC_ELT): Likewise.
-
-2002-08-15 Eric Christopher <echristo@redhat.com>
- Jeff Knaggs <jknaggs@redhat.com>
-
- * config.gcc (mipsisa64sr71k-elf): New target.
- * config/mips/sr71k.md: New file.
- * config/mips/mips.md: Use it.
- (rot*): Add sr71k specifics.
- * config/mips/t-sr71k: New file.
- * config/mips/mips.h (sr71k): New cpu.
- (TARGET_SR71K): Use it.
- (TUNE_SR71K): Ditto.
- (GENERATE_BRANCHLIKELY): Ditto.
- (ISA_HAS_MULHI, ISA_HAS_MULS, ISA_HAS_MSAC, ISA_HAS_MACC,
- ISA_HAS_ROTR_SIISA_HAS_ROTR_DI): Ditto.
- * config/mips/mips.c (sr71k): New cpu.
- (mips_use_dfa_pipeline_interface): Use.
-
-2002-08-15 Eric Christopher <echristo@redhat.com>
- Richard Sandiford <rsandifo@redhat.com>
- Aldy Hernandez <aldyh@redhat.com>
- Graham Stott <grahams@redhat.com>
- Michael Meissner <meissner@redhat.com>
- Gavin Romig-Koch <gavin@redhat.com>
- Ken Raeburn <raeburn@cygnus.com>
- Alexandre Oliva <aoliva@redhat.com>
-
- * config.gcc (mips64vr-elf): New target.
- * config/mips/5400.md: New file.
- * config/mips/5500.md: Ditto.
- * config/mips/mips.md: Use them.
- (frsqrt): New.
- * config/mips/mips.c (vr4111, vr4121, vr4320, vr5400, vr5500): New
- cpus.
- (mips_issue_rate): Use them.
- (mips_use_dfa_pipeline_interface): New function. Use for 5400 and 5500.
- (TARGET_SCHEDUSE_DFA_PIPELINE_INTERFACE): Define. Use above.
- * config/mips/mips.h (vr4111, vr4121, vr4320, vr5400, vr5500): New
- cpus.
- (TARGET_MIPSx): Use them.
- (TUNE_MIPSx): Ditto.
- (GETNATE_MULT3_SI): Ditto.
- (ISA_HAS_BRANCHLIKELY): Ditto.
- (ISA_HAS_CONDMOVE): Ditto.
- (ISA_HAS_NMADD_NMSUB): Ditto.
- (ISA_HAS_MULHI): New. Ditto.
- (ISA_HAS_MULS): Ditto.
- (ISA_HAS_MSAC): Ditto.
- (ISA_HAS_MACC): Ditto.
- (ISA_HAS_ROTR_SI): Ditto.
- (ISA_HAS_ROTR_DI): Ditto.
- (RTX_COSTS): Use.
-
-2002-08-20 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * cppinit.c (remove_dup_dir): Add head_ptr argument to handle removal
- at head.
- (remove_dup_nonsys_dirs): New function.
- (remove_dup_dirs): Change argument head to head_ptr. Remove warnings.
- (merge_include_chains): Remove non-system include directories from
- quote and bracket include chains when they duplicate equivalent system
- directories.
- * doc/cpp.texi (-I): Update.
- * doc/cppopts.texi (-I): Update.
- * doc/install.texi (--with-local-prefix): Further document usage of
- this option.
- * doc/invoke.texi (-I): Update.
-
-2002-08-20 Richard Henderson <rth@redhat.com>
-
- * expr.c (TARGET_MEM_FUNCTIONS): Transform to boolean.
- (emit_block_move): Split out subroutines.
- (emit_block_move_via_movstr): New.
- (emit_block_move_via_libcall): New. Emit bcopy via normal call also.
- (emit_block_move_libcall_fn): New. Construct function prototype for
- bcopy as well.
- (clear_storage): Split out subroutines.
- (clear_storage_via_clrstr): New.
- (clear_storage_via_libcall): New. Emit bzero as a normal call also.
- (clear_storage_libcall_fn): New. Construct function prototype for
- bzero as well.
- (emit_push_insn): Use emit_block_move.
- (expand_assignment): Booleanize TARGET_MEM_FUNCTIONS.
- (store_constructor): Likewise.
-
-2002-08-19 Ziemowit Laski <zlaski@apple.com>
-
- * objc/objc-act.c (building_objc_message_expr): Rename to
- current_objc_message_selector.
-
-2002-08-19 Ziemowit Laski <zlaski@apple.com>
-
- * objc/objc-act.c (build_ivar_chain): Remove.
- (objc_copy_list): Likewise.
- (get_class_ivars): Inline call to removed build_ivar_chain
- function. Save off a clean copy of ivars in the CLASS_OWN_IVARS
- slot; use that slot (rather than CLASS_IVARS) when accessing
- ivars for base classes. Call copy_list and chainon instead of
- objc_copy_list.
- (build_private_template): Call get_class_ivars instead of
- build_ivar_chain.
- (start_class): Allocate room for the CLASS_OWN_IVARS slot.
- (continue_class): Call get_class_ivars instead of
- build_ivar_chain.
- (encode_field_decl): Check for DECL_BIT_FIELD_TYPE instead
- of DECL_BIT_FIELD (which may have been cleared).
- * objc/objc-act.h (CLASS_OWN_IVARS): New accessor macro.
-
-2002-08-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * genautomata.c (output_translate_vect, output_state_ainsn_table,
- output_min_issue_delay_table): Mark variable with ATTRIBUTE_UNUSED
- in output file.
- (output_internal_min_issue_delay_func): Initialize variable in
- output file.
-
-2002-08-19 Alexandre Oliva <aoliva@redhat.com>
-
- * Makefile.in (GCC_FOR_TARGET): Prepend STAGE_CC_WRAPPER.
- (stage2_build, stage3_build, stage4_build): Likewise, to CC.
-
-2002-08-19 Geoffrey Keating <geoffk@redhat.com>
- Steve Ellcey <sje@cup.hp.com>
-
- * machmode.h (SCALAR_INT_MODE_P): New macro to test for
- scaler integer mode (MODE_INT or MODE_PARTIAL_INT).
- * explow.c (trunc_int_for_mode): Abort when the mode is not
- a scaler integer mode.
- * combine.c (expand_compound_operation): Don't expand Vector
- or Complex modes into shifts.
- (expand_field_assignment): Don't do bitwise arithmatic and
- shifts on Vector or Complex modes.
- (simplify_comparison): Don't call trunc_int_for_mode
- for VOIDmode.
- * recog.c (general_operand): Likewise.
- (immediate_operand): Likewise.
- (nonmemory_operand): Likewise.
-
-2002-08-19 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.c (rs6000_emit_set_const): Inline
- multi-instruction SImode constant. Add REG_EQUAL note.
- * config/rs6000/rs6000.md (movsi splitter): Use
- rs6000_emit_set_const.
-
-2002-08-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * tree-inline.c (initialize_inlined_parameters): Wrap variable in
- the macro test controlling its use.
-
-2002-08-18 H.J. Lu (hjl@gnu.org)
-
- * config.gcc (*-*-linux*): Set extra_parts="crtbegin.o
- crtbeginS.o crtbeginT.o crtend.o crtendS.o", gas=yes and
- gnu_ld=yes.
- (alpha*-*-linux*, cris-*-linux*, i370-*-linux*,
- i[34567]86-*-linux*, x86_64-*-linux*, mips*-*-linux*,
- s390-*-linux*, s390x-*-linux*, sparc-*-linux*, sparc64-*-linux*,
- xtensa-*-linux*): Remove setting extra_parts, gas, and gnu_ld
- here.
- (cris-*-linux*): Remove setting thread_file here.
-
-2002-08-18 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/7602
- * cppinit.c (path_include): Treat the system environment
- variables as being cxx_aware.
-
-2002-08-17 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * c-decl.c (flexible_array_type_p): New function.
- (grokdeclarator, finish_struct): Use it.
- * doc/extend.texi: Document constraints on use of structures with
- flexible array members.
-
-2002-08-17 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/t-coff, config/mips/t-elf, config/mips/t-isa3264,
- config/mips/t-r3900 (MULTILIB_MATCHES): Define.
- * config/mips/mips.h (ASM_SPEC): Use %(endian_spec).
-
-2002-08-16 Stan Shebs <shebs@apple.com>
-
- * c-common.c (cb_register_builds): Define __NEXT_RUNTIME__
- for ObjC with -fnext-runtime.
- * doc/cpp.texi: Document it.
-
-2002-08-16 Janis Johnson <janis187@us.ibm.com>
-
- * doc/install.texi (Final installation): Replace links to individual
- build status pages with a link to a common page that lists them all.
-
-2002-08-16 Sylvain Pion <pion@cs.nyu.edu>
-
- * doc/invoke.texi: Fix typo.
-
-2002-08-16 David Edelsohn <edelsohn@gnu.org>
-
- * doc/install.texi (*-ibm-aix*): Explain AIX shared object versioning.
-
-2002-08-16 Andrew Haley <aph@redhat.com>
-
- * tree-inline.c: Add includes for Java inliner.
- (remap_decl): Don't handle anonymous types for Java.
- (remap_block): Add handling for Java trees.
- (copy_scope_stmt): Conditionalize for non-Java use only.
- (copy_body_r): Handle Java trees. Add handling for
- LABELED_BLOCK_EXPR, EXIT_BLOCK_EXPR, Java blocks.
- (initialize_inlined_parameters): Handle Java trees.
- (declare_return_variable): Likewise.
- (expand_call_inline): Handle Java trees.
- (walk_tree): Likewise.
- (copy_tree_r): Don't handle SCOPE_STMTs for Java.
- (add_stmt_to_compound): New function.
-
-2002-08-15 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (LOOSE_WARN): Remove -fno-common.
- (NOCOMMON_FLAG): New substitution point.
- (GCC_WARN_CFLAGS): Include it.
- * configure.in (ac_checking): Set nocommon_flag.
- (nocommon_flag): New substitution point.
-
-2002-08-15 Alexandre Oliva <aoliva@redhat.com>
-
- * c-tree.h (skip_evaluation): Move declaration...
- * c-common.h: ... here.
- * c-typeck.c (build_external_ref): Don't assemble_external nor
- mark a tree as used if skip_evaluation is set.
- * c-parse.in (typeof): New non-terminal to set skip_evaluation
- around TYPEOF.
- (typespec_nonreserved_nonattr): Use it.
-
-2002-08-15 Douglas B Rupp <rupp@gnat.com>
-
- * dbxout.c (dbx_debug_hooks): Update end_prologue, end_epilogue.
- (xcoff_debug_hooks): Update end_prologue.
- * debug.c (do_nothing_debug_hooks): Update end_prologue, end_epilogue.
- * debug.h (end_prologue): Add file arg.
- (end_epilogue): Add line and file args.
- (dwarf2out_end_epilogue): Add line and file args.
- (vmsdbgout_after_prologue): Remove.
- * dwarf2out.c (dwarf2out_end_epilogue): Add line and file args.
- (dwarf2_debug_hooks): Update end_prologue.
- * dwarfout.c (dwarfout_end_epilogue): Add line and file args.
- (dwarfout_end_prologue): Add file arg.
- * final.c (vmsdbgout_after_prologue): Remove
- (final_end_function): Update end_epilogue call.
- (final_scan_insn): Update end_prologue call.
- * sdbout.c (sdbout_end_epilogue): Add line and file args.
- (sdbout_end_prologue): Add file arg.
- (sdb_debug_hooks): Update end_prologue.
- (sdb_begin_prologue): Update sdbout_end_prologue call.
- * vmsdbgout.c (vmsdbg_debug_hooks): Add vmsdbgout_end_prologue,
- vmsdbgout_end_function.
- (vmsdbgout_end_prologue): New function renamed from
- vmsdbgout_after_prologue. Call vmsdbgout_source_line.
- (vmsdbgout_end_function): New function.
- (vmsdbgout_end_epilogue): Add line and file args. Call
- vmsdbgout_source_line.
- (write_pclines): Write only valid line numbers.
- (write_srccorr): Don't write source correlation records if 0 lines.
- * xcoffout.c (xcoffout_end_epilogue): Add line and file args.
-
-2002-08-15 Steve Ellcey <sje@cup.hp.com>
-
- * gcc/unwind.h (_Unwind_Ptr): Make 64 bits on IA64 HP-UX.
- (_Unwind_Internal_Ptr): 32 bit version for use in
- read_encoded_value_with_base.
- * gcc/unwind-pe.h (read_encoded_value_with_base): Use
- _Unwind_Internal_Ptr instead of _Unwind_Ptr in order to get the
- right size.
-
-2002-08-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * loop.c (scan_loop, move_movables, count_one_set): Cast to avoid
- signed/unsigned warnings.
-
- * regclass.c (init_reg_sets_1, choose_hard_reg_mode,
- record_reg_classes): Likewise.
-
- * reload.c (reload_inner_reg_of_subreg, push_reload,
- find_reloads_address_1): Likewise.
-
-2002-08-15 David Edelsohn <edelsohn@gnu.org>
-
- * rs6000.c (output_mi_thunk): Return to function section on
- TARGET_ELF.
-
- * rs6000-c.c (rs6000_cpu_cpp_builtins): Define __PPC405__ if PPC405.
-
-2002-08-15 Ulrich Weigand <uweigand@de.ibm.com>
-
- * config/s390/s390.c (legitimize_address): Optimize loading
- of large displacements.
-
-2002-08-14 Douglas B Rupp <rupp@gnat.com>
-
- * config/alpha/alpha-protos.h: Update.
-
- * config/alpha/alpha.c: (LINKAGE_SYMBOL_REF_P): New macro.
- (alpha_legitimate_address_p): Test LINKAGE_SYMBOL_REF_P.
- (alpha_linkage_symbol_p): New static function.
- (print_operand_address): Print linkage operand.
-
- (alpha_funcs_num, alpha_funcs_tree, alpha_links_tree): New static
- variables.
- (reloc_kind): New enum.
- (struct alpha_funcs): New struct.
- (struct alpha_links): Add reloc_kind field. Rename links_kind field.
-
- (alpha_need_linkage): Rewrite.
- (alpha_use_linkage): New global function.
- (alpha_write_linkage): Rewrite and make static.
- (alpha_write_one_linkage): Rewrite
-
- (alpha_start_function): Remove procedure descriptor output.
- (alpha_end_function): Write linkages at end of each function.
-
- * config/alpha/alpha.md (call_vms, call_value_vms): Rewrite.
- (call_vms_1, call_value_vms_1): Rewrite.
-
- * config/alpha/vms.h (ASM_FILE_END): Remove.
-
-2002-08-14 Richard Henderson <rth@redhat.com>
-
- * ggc-page.c (RTL_SIZE): New.
- (extra_order_size_table): Add specializations for 2 and 10 rtl slots.
- * rtl.def (BARRIER, NOTE): Pad to 9 slots.
-
-2002-08-14 Richard Henderson <rth@redhat.com>
-
- * calls.c: Include target.h.
- * Makefile.in (calls.o): Update.
-
- * config/alpha/alpha.c (alpha_end_function): Use targetm.binds_local_p.
- * config/alpha/alpha.h (FUNCTION_OK_FOR_SIBCALL): Likewise.
-
-2002-08-14 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (LOOSE_WARN): Add -fno-common.
- * c-common.h (constant_string_class_name): Add missing extern.
-
-2002-08-15 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/7358
- * c-opts.c (check_deps_environment_vars): Ignore main file
- for SUNPRO_DEPENDENCIES.
- * cppfiles.c (stack_include_file): Ignore main file if
- appropriate.
- * cpplib.h (struct cpp_options): New member in deps.
- * doc/cppenv.texi: Update.
-
-2002-08-14 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/7526
- * cpplib.c (run_directive): Kludge so _Pragma dependency works.
-
-2002-08-14 Nathan Sidwell <nathan@codesourcery.com>
-
- * doc/invoke.texi (-a): Remove documentation.
- (-fprofile-arcs): Remove reference to -a, -ax options.
- * doc/gcov.texi (Gcov Data Files): Data might be merged.
-
-2002-08-14 Gabriel Dos Reis <gdr@nerim.net>
-
- Fix PR/7566
- * c-semantics.c (genrtl_case_label): Don't (mis)use
- warning_with_decl.
-
-2002-08-14 Dale Johannesen <dalej@apple.com>
-
- * explow.c (emit_stack_restore): Emit memory clobbers
- preceding the stack pop, to prevent the scheduler from
- moving refs to variable arrays below this pop.
- * reload1.c (reload): Preserve these clobbers for sched2.
- * doc/rtl.texi: Document clobber (mem:BLK (scratch)).
-
-2002-08-14 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (c_common_post_options): Correct test.
-
-2002-08-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * m88k.h (ASM_OUTPUT_SOURCE_FILENAME): Fix incorrect argument
- order in call to fprintf.
-
-2002-08-14 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * config/sparc/sol2.h (SUBTARGET_EXTRA_SPECS): Define.
-
-2002-08-14 Ulrich Weigand <uweigand@de.ibm.com>
-
- * reload.c (find_reloads): Handle constraint letters marked by
- EXTRA_ADDRESS_CONSTRAINT and EXTRA_MEMORY_CONSTRAINT.
- (alternative_allows_memconst): Likewise.
- * reload1.c (maybe_fix_stack_asms): Likewise.
- * recog.c (asm_operand_ok, preprocess_constraints,
- constrain_operands): Likewise.
- * regclass.c (record_operand_costs, record_reg_classes): Likewise.
- * local-alloc.c (block_alloc, requires_inout): Likewise.
- * stmt.c (parse_output_constraint, parse_input_constraint): Likewise.
-
- * defaults.h (EXTRA_MEMORY_CONSTRAINT): Provide a default.
- (EXTRA_ADDRESS_CONSTRAINT): Likewise.
- * doc/tm.texi: Document these two new target macros.
-
- * config/s390/s390.c (s390_expand_plus_operand): Accept already
- valid operands.
- (q_constraint): New function.
- config/s390/s390-protos.h (q_constraint): Declare it.
- config/s390/s390.h (EXTRA_CONSTRAINT): Use it.
- (EXTRA_MEMORY_CONSTRAINT): New macro.
-
- * config/s390/s390.md: Throughout the machine description,
- replace all instances of the constraint combinations 'Qo'
- or 'oQ' with simply 'Q'.
-
-2002-08-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.h (LINK_SPEC): Support -mrelax.
- * config/m68hc11/t-m68hc11-gas (LIBGCC2_DEBUG_CFLAGS): Can use -g now.
- (LIBGCC2_CFLAGS): Compile with -mrelax.
-
-2002-08-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * doc/invoke.texi: Document -minmax for 68HC12.
-
- * config/m68hc11/m68hc11.md ("umaxqi3"): Use TARGET_MIN_MAX.
- ("uminqi3"): Likewise.
- ("uminhi3", "umaxhi3"): Likewise.
-
- * config/m68hc11/m68hc11.h (MASK_MIN_MAX): Define.
- (TARGET_MIN_MAX): Define.
- (TARGET_SWITCHES): New option -minmax/-mnominmax.
-
-2002-08-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/t-m68hc11-gas (LIB1ASMFUNCS): Build __far_trampoline.
- (MULTILIB_OPTIONS): Must also generate for -mlong-calls.
-
- * config/m68hc11/larith.asm: Put a mode for ELF ABI flags.
- (ret, declare, farsym): New gas macros.
- (__premain, exit, abort, _cleanup, memcpy, memset, ___adddi3,
- ___subdi3, ___notdi2, __mulhi32, __mulsi3): Use them to use 'rtc'
- and declare the symbol far when compiled with -mlong-calls.
- (__far_trampoline): New for 68HC12 trampoline code to invoke a
- far handler using jsr/bsr.
-
- * config/m68hc11/m68hc11-crt0.S: Put a mode for ELF ABI flags.
- (jsr): New macro to transform a 'jsr' into a 'call'.
-
-2002-08-14 Stephane Carrez <stcarrez@nerim.fr>
-
- * doc/invoke.texi: Document -mlong-calls for 68HC12.
-
- * config/m68hc11/m68hc11.h (CPP_SPEC): Pass -D__USE_RTC__ when
- -mlong-calls is specified.
- (ASM_DECLARE_FUNCTION_NAME): Define to generate .far and .interrupt
- assembler directives.
- (TARGET_LONG_CALL, MASK_LONG_CALL): Declare.
- (TARGET_SWITCHES): Add -mlong-calls options.
- (current_function_far): Declare.
-
- * config/m68hc11/m68hc11.c (m68hc11_initial_elimination_offset): Take
- into account the page register saved on the stack.
- (m68hc11_override_options): Take into account -mlong-calls option.
- (m68hc11_asm_file_start): Put a mode for the ELF flags ABI.
-
- * config/m68hc11/m68hc11.md ("*return_32bit"): Return rtc
- if the function is going to be in 68HC12 banked memory (-mlong-calls).
- ("*return_16bit"): Likewise.
- ("*return_void"): Likewise.
- ("call", "call_value"): Use call for a far function call.
-
-2002-08-14 Neil Booth <neil@daikokuya.co.uk>
-
- * toplev.c (parse_options_and_default_flags): Don't call
- post_options here.
- (general_init): Initialize GC, pools and tree hash here,
- instead of lang_independent_init.
- (lang_independent_init): Rename backend_init.
- (do_compile): Call post_options hook; exit early if there
- have been errors after switch processing.
- (toplev_main): Update.
-
-2002-08-14 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-pretty-print.h: Guard against multiple inclusion.
- Robustify macros.
- (pp_c_attributes): Declare.
- * c-pretty-print.c (pp_c_attributes): New function.
-
-2002-08-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * m68k.c (m68k_output_function_prologue,
- m68k_output_function_epilogue): Delete versions for DPX2/MOTOROLA
- and NEWS/MOTOROLA.
- * genattrtab.c: Remove dpx2 comment.
- * libgcc2.c (__enable_execute_stack): Delete versions for
- NeXT/__MACH__, __convex__, __sysV88__, __pyr__ and
- sony_news/SYSTYPE_BSD.
- * longlong.h: Delete code for __a29k__, _AM29K, __clipper__,
- __gmicro__, __i860__, __NeXT__ and __pyr__.
- * rtl.h: Remove convex comment.
- * varasm.c: Likewise.
-
-2002-08-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * c-opts.c (lang_flags): Const-ify.
- * ra-build.c (undef_table): Likewise.
- * ra.c (eliminables): Likewise.
-
-2002-08-14 Gabriel Dos Reis <gdr@nerim.net>
-
- * tree.h: Guard against multiple inclusion.
-
-2002-08-14 Hans-Peter Nilsson <hp@bitrange.com>
-
- * reload1.c (reload_cse_simplify): Before checking
- REG_FUNCTION_VALUE_P, check REG_P.
-
-2002-08-13 Geoffrey Keating <geoffk@redhat.com>
-
- * Makefile.in (attribs.o): Remove $(OBSTACK_H) dependency.
-
-2002-08-13 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (c_common_init_options): Extra braces needed.
-
-Tue Aug 13 17:40:25 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (sh_init_builtins): Add PARAMS to declaration.
- (sh_media_init_builtins, sh_expand_builtin): Likewise.
- (sh_expand_unop_v2sf): Use PARAMS for variable declaration.
- (sh_expand_binop_v2sf): Likewise.
- * sh-protos.h (sh_expand_unop_v2sf): Add PARAMS to declaration.
- (sh_expand_binop_v2sf, sh_cfun_interrupt_handler_p): Likewise.
- (sh_initialize_trampoline): Likewise.
-
-2002-08-13 Ulrich Weigand <uweigand@de.ibm.com>
-
- * s390-modes.def [CCL1, CCL2, CCT1, CCT2, CCT3, CCUR, CCSR]: Declare
- new condition code modes.
- s390.c (s390_match_ccmode_set): Handle those new CC modes.
- (s390_select_ccmode): Likewise.
- (s390_branch_condition_mask): Likewise.
-
- * s390-protos.h (s390_tm_ccmode): Declare.
- s390.c (s390_tm_ccmode): New function.
- (s390_match_ccmode): Allow VOIDmode as REQ_MODE.
-
- * s390.md ("*cmpdi_tm2"): Rename to "*tmdi_ext".
- ("*cmpsi_tm2"): Rename to "*tmsi_ext".
- ("*cmpqi_tm2"): Rename to "*tmqi_ext".
-
- ("*cmpdi_tm_reg", "*cmpdi_tm_mem", "*cmpsi_tm_reg", "*cmpsi_tm_mem",
- "*cmphi_tm_sub","*cmphi_cct_0", "*cmpqi_tm", "*cmpqi_tm_sub",
- "*cmpqi_cct_0", "*tm_0"): Remove, replace by ...
- ("*tmdi_reg", "*tmsi_reg", "*tmdi_mem", "*tmsi_mem", "*tmhi_mem",
- "*tmqi_mem", "*tmhi_full", "*tmqi_full"): ... these new patterns.
-
- ("*ltgr", "*cmpdi_ccs_0_64", "*cmpdi_ccs_0_31", "*ltr", "*icm15",
- "*icm15_cconly", "*cmpsi_ccs_0", "*icm3", "*cmphi_ccs_0", "*icm1",
- "*cmpqi_ccs_0"): Remove, replace by ...
- ("*tstdi_sign", "*tstdi", "*tstdi_cconly", "*tstdi_cconly_31",
- "*tstsi", "*tstsi_cconly", "*tstsi_cconly2", "*tsthi", "*tsthi_cconly",
- "*tstqi", "*tstqi_cconly"): ... these new patterns.
-
- ("*cmpsidi_ccs"): Remove, replace by ...
- ("*cmpsi_ccs_sign"): ... this new pattern.
- ("*cmpdi_ccs_sign", "*cmpdi_ccu_zero"): New patterns.
-
- ("*cmpqi_ccu_0", "*cmpqi_ccu_immed"): Remove, replace by ...
- ("*cli"): ... this new pattern.
-
- ("*adddi3_sign", "*adddi3_zero_cc", "*adddi3_zero_cconly",
- "*adddi3_zero", "*adddi3_cc", "*adddi3_cconly", "*adddi3_cconly2"):
- New patterns.
- ("adddi3_64"): Rename to "*adddi3_64".
- ("adddi3_31"): Replace by insn and splitter "*adddi3_31".
- ("adddi3"): Adapt expander.
-
- ("*addsi3_cc"): Allow "general_operand" for operand 2.
- ("*addsi3_carry1_cc", "*addsi3_carry1_cconly",
- "*addsi3_carry2_cc", "*addsi3_carry2_cconly"): New patterns.
-
- ("addhi3", "addqi3"): Remove, replace by ...
- ("*addsi3_sign", "*addsi3_sub"): ... these new patterns.
-
- ("*subdi3_sign", "*subdi3_zero_cc", "*subdi3_zero_cconly",
- "*subdi3_zero", "*subdi3_cc", "*subdi3_cconly"): New patterns.
- ("subdi3"): Replace by insn and splitter "*subdi3_31".
- ("subdi3"): New expander.
-
- ("*subsi3_borrow_cc", "*subsi3_borrow_cconly"): New patterns.
-
- ("subhi3", "subqi3"): Remove, replace by ...
- ("*subsi3_sign", "*subsi3_sub"): ... these new patterns.
-
- ("*muldi3_sign"): New pattern.
- ("muldi3"): Do not clobber CC.
- ("mulsi3"): Likewise.
- ("mulsi_6432"): Likewise.
-
-2002-08-13 Denis Chertykov <denisc@overta.ru>
-
- * config/avr/avr.md: Call CC_STATUS_INIT in all peepnoles
- which can change CC0.
-
-Tue Aug 13 14:49:20 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * gcse.c (adjust_libcall_notes): New function.
- (do_local_cprop): Use it. Add fourth parameter. Changed caller.
-
-2002-08-13 Nathan Sidwell <nathan@codesourcery.com>
-
- * libgcc2.c (L_bb): Remove unneeded #includes.
- (__global_counters, __gthreads_active): Remove unused globals.
- (__bb_exit_func): Merge counts into files rather than appending.
- * Makefile.in (INTERNAL_CFLAGS): Move COVERAGE_FLAGS from here ...
- (ALL_CFLAGS): ... to here.
-
-2002-08-13 Denis Chertykov <denisc@overta.ru>
-
- * config/ip2k/ip2k.c (commands_in_file): Variable removed.
- (function_epilogue): Don't calculate function size.
- (ip2k_set_compare): Don't use lookup_const_double.
- (asm_file_start): Initialization of commands_in_file removed.
- (asm_file_end): Output of commands_in_file removed.
-
- * config/ip2k/ip2k.c (CPP_PREDEFINES): Remove definition of
- __INT_MAX__.
-
-2002-08-13 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (c_common_init_options): Check option array is
- sorted if checking enabled.
-
-2002-08-13 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-pretty-print.c: #include "c-tree.h".
- (pp_c_simple_type_specifier): Tweak.
- (pp_c_storage_class_specifier): New.
- (pp_c_function_specifier): Likewise.
- (pp_c_declaration_specifiers): Likewise.
- (pp_c_init_declarator): Likewise.
- (pp_c_declaration): Likewise.
- (pp_c_direct_declarator): Stub.
- (pp_c_declarator): Likewise.
- (pp_c_parameter_declaration): Likewise.
-
-2002-08-13 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (deps_seen, deps_file, deferred_count, deferred_size,
- handle_deferred_opts, sanitize_cpp_opts, defer_opt,
- struct deferred_opt): New.
- (COMMAND_LINE_OPTIONS): Add -M*.
- (missing_arg): Update.
- (c_common_decode_option): Handle -M*.
- (c_common_post_options): Handle -M*. Use sanitize_cpp_opts;
- don't call cpp_post_options.
- (c_common_finish, check_deps_environment_vars): Update.
- * cppfiles.c (stack_include_file, handle_missing_header): Update.
- * cpphash.h (CPP_PRINT_DEPS): Remove.
- * cppinit.c: Don't include version.h.
- (cpp_create_reader): Don't call deps_init. Initialize
- warn_long_long.
- (cpp_read_main_file): Init deps if necessary.
- (cpp_destroy): Conditionally free deps.
- (cpp_finish): Update.
- (no_tgt): Remove.
- (COMMAND_LINE_OPTIONS, cpp_handle_option): Remove -M*.
- (cpp_post_options): Rename post_options.
- * cpplib.h (struct cpp_options): Remove some dependency options;
- move others to a new structure.
- (cpp_post_options): Remove.
- (cpp_finish): Comment.
- * fix-header.c (read_scan_file): Don't call cpp_post_options.
-
-2002-08-12 Hans-Peter Nilsson <hp@bitrange.com>
-
- * config/mmix/mmix.md (define_constants): Add MMIX_rR_REGNUM.
- ("divdi3", "*divdi3_nonknuth", "moddi3", "*moddi3_nonknuth"): Mark
- MMIX_rR_REGNUM as clobbered.
- * config/mmix/mmix.h (MMIX_REMAINDER_REGNUM): Use MMIX_rR_REGNUM.
-
-2002-08-12 Gabriel Dos Reis <gdr@nerim.net>
-
- * diagnostic.h (output_formatted_scalar): Rename from
- output_formatted_integer.
- * diagnostic.def: Add DK_DEBUG.
- * diagnostic.c (output_decimal): Adjust.
- (output_long_decimal): Likewise.
- (output_unsigned_decimal): Likewise.
- (output_octal): Likewise.
- (output_long_octal): Likewise.
- (output_hexadecimal): Likewise.
- (output_long_hexadecimal): Likewise.
- * c-pretty-print.c (pp_c_type_specifier): New function.
- (pp_c_specifier_qualifier_list): Likewise.
- (pp_c_abstract_declarator): Likewise.
- (pp_c_char): Replace pp_format_integer with pp_format_scalar.
-
-2002-08-12 David Edelsohn <edelsohn@gnu.org>
-
- * doc/trouble.texi (Disappointments): Add static constructor and
- destructor dependency information for AIX.
-
-2002-08-12 Neil Booth <neil@daikokuya.co.uk>
-
- * cpphash.h (struct printer): New from cppmain.c.
- (cpp_reader): New member.
- * cppmain.c (struct printer): Move to cpphash.h.
- (options, print): Remove.
- (account_for_newlines, print_line, maybe_print_line,
- cpp_preprocess_file, setup_callbacks, scan_translation_unit,
- scan_translation_unit_trad, cb_line_change, cb_ident,
- cb_define, cb_undef, cb_include, cb_file_change, dump_macro,
- cb_def_pragma): Make reentrant.
-
-2002-08-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * real.c (ieee_64): Always define.
- (ieee_113): Guard with INTEL_EXTENDED_IEEE_FORMAT == 0.
- (dec_h): Not used yet, hide it.
- (emdnorm): Mark parameter in ATTRIBUTE_UNUSED. Guard label with
- macro controlling use.
- (TFbignan, TFlittlenan): Guard with INTEL_EXTENDED_IEEE_FORMAT == 0.
-
-Mon Aug 12 12:48:20 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (tablejump): Sign extend the operand.
- * i386.c (classify_argument): Fix missed case from previous patch.
-
-2002-08-12 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (STDC_0_IN_SYSTEM_HEADERS, c_common_init): Move
- to c-copts.c.
- (warn_multichar): Die.
- (cb_register_builtins): Export.
- * c-common.h (warn_multichar, preprocess_file): Remove.
- (cb_register_builtins): New.
- * c-lang.c (c_init): Remove.
- (LANG_HOOKS_INIT): Use c_objc_common_init.
- * c-lex.c (init_c_lex): Don't canonicalize filename.
- * c-opts.c (in_fname, STDC_0_IN_SYSTEM_HEADERS): New.
- (preprocess_file): Make static. Update for cpplib.
- (c_common_decode_option): Remove warn_multichar. Use in_fname.
- (c_common_post_options): Set some cpp options here.
- (c_common_init): Move from c-common.c.
- * cppinit.c (cpp_post_options): Don't canonicalize in_fname.
- * cpplib.h (struct cpp_options): Remove in_fname.
- (cpp_preprocess_file): Update.
- * cppmain.c (cpp_preprocess_file): Update for new prototypes.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * config.gcc (mips*-*-netbsd*): Include ${tm_file}.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * i370.h (TARGET_CPU_CPP_BUILTINS): Remove spurious trailing
- backslash in comment preceeding macro definition.
- * i370/linux.h (TARGET_OS_CPP_BUILTINS): Likewise.
- * i370/mvs.h (TARGET_OS_CPP_BUILTINS): Likewise.
- * i370/oe.h (TARGET_OS_CPP_BUILTINS): Likewise.
-
-2002-08-12 Hans-Peter Nilsson <hp@bitrange.com>
-
- * expr.c (store_expr): In condition for checking if value is
- generated in TARGET, move call to expr_size last.
-
-2002-08-11 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (c_common_init): Call preprocess_file instead.
- (c_common_finish): Move to c-opts.c.
- * c-common.h (preprocess_file): new.
- * c-opts.c (out_fname, out_stream, deps_append, preprocess_file,
- check_deps_environment_vars, c_common_finish): New.
- (c_common_decode_option): Update for out_fname and dependencies.
- * cppinit.c (init_dependency_output, output_deps): Remove.
- (cpp_destroy): Update prototype.
- (cpp_add_dependency_target): New.
- (cpp_read_main_file): Don't overlay a buffer.
- (cpp_finish): Take a deps output stream and write deps to it.
- Return the error count.
- (cpp_post_options): Don't canonicalize out_fname, or do anything
- with dependencies.
- * cpplib.h (struct cpp_options): Remove out_fname and
- preprocess_only.
- (cpp_add_dependency_target): New.
- (cpp_destroy, cpp_finish, cpp_preprocess_file): Update.
- * cppmain.c (cpp_preprocess_file): Update prototype. Don't
- set preprocess_only. Don't handle the output stream directly.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * dsp16xx.c (print_operand): Fix format specifier.
- * dsp16xx.md: Avoid automatic aggregate initialization.
- * frv.h (REG_CLASS_FROM_LETTER): Avoid char as array index.
- * h8300.c (emit_a_rotate, h8300_adjust_insn_length): Avoid U
- integer constant modifier.
- * ip2k.c (ip2k_set_compare): Avoid signed/unsigned warning.
- * mmix-protos.h (mmix_use_simple_return): Move outside TREE_CODE
- guards.
- * sh/netbsd-elf.h (FUNCTION_PROFILER): Fix format specifier.
- * v850.c (v850_select_section): Mark parameter with
- ATTRIBUTE_UNUSED.
- * global.c (global_alloc): Const-ify.
- * ra-colorize.c (hardregset_to_string): Fix format specifier.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * darwin-c.c (darwin_pragma_options): Const-ify.
- * darwin.c (machopic_non_lazy_ptr_name,
- machopic_validate_stub_or_non_lazy_ptr): Likewise.
- (machopic_indirect_data_reference): Wrap variables in macros
- controlling their use.
- (machopic_finish, update_non_lazy_ptrs, update_stubs): Const-ify.
- (machopic_select_section): Use parentheses around && within ||.
- * i386/darwin.h (ASM_OUTPUT_ALIGN): Avoid ambiguous-else.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ip2k.c (mdr_resequence_xy_yx, mdr_propagate_reg_equivs,
- mdr_try_move_dp_reload, ip2k_check_can_adjust_stack_ref,
- ip2k_adjust_stack_ref, mdr_try_move_pushes, mdr_try_propagate_clr,
- ip2k_xexp_not_uses_reg_for_mem, mdr_try_propagate_move,
- mdr_try_remove_redundant_insns, track_w_reload,
- mdr_try_wreg_elim): Make function static to match prototype.
- * mmix.c (mmix_target_asm_function_epilogue): Likewise. Mark
- parameter with ATTRIBUTE_UNUSED.
-
-2002-08-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * arc.c (arc_init): Don't use ISO C style function definitions.
- * arm.c (count_insns_for_constant, thumb_far_jump_used_p,
- arm_get_strip_length, arm_strip_name_encoding): Likewise.
- * avr.h (progmem_section): Likewise.
- * h8300.c h8300_asm_insn_count): Likewise.
- * m32r.c (init_idents): Likewise.
- * s390.c (s390_split_branches, s390_chunkify_pool): Likewise.
- * sh.c (sh_cfun_interrupt_handler_p): Likewise.
- * xtensa.c (xtensa_build_va_list): Likewise.
-
-2002-08-11 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.h (enum c_language_kind): Emphasize that clk_c is 0.
- * c-opts.c (parse_option): Rename find_opt.
- (set_std_c99): New function.
- (COMMAND_LINE_OPTIONS): Handle -remap and -o. Remove OPT_std_bad.
- (missing_arg): Remove OPT_std_bad. Handle -o.
- (c_common_decode_option): Handle input and output file names,
- -o and -remap. Clean up -std= handling.
- * cppinit.c (COMMAND_LINE_OPTIONS): Remove OPT_o and OPT_remap.
- (cpp_handle_option): Similarly. Don't handle filenames.
-
-Sun Aug 11 14:43:17 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (classify_argument): Fix computing of field's offsets.
-
-2002-08-11 Andreas Jaeger <aj@suse.de>
-
- PR target/7531:
- * doc/invoke.texi (i386 and x86-64 Options): Document -mcmodel.
-
-2002-08-10 Ziemowit Laski <zlaski@apple.com>
-
- * config/alpha/alpha.h (TARGET_CPU_CPP_BUILTINS): Replace
- reference to clk_objective_c with flag_objc.
- * config/i386/i386-interix.h (TARGET_OS_CPP_BUILTINS):
- Likewise.
- * config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Likewise.
-
-2002-08-10 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (set_std_cxx98, set_std_c89): New.
- (COMMAND_LINE_OPTIONS): Move more from cppinit.c.
- (c_common_decode_option): Handle new switches from cppinit.c.
- Add -std=gnu++98.
- * cppinit.c (set_lang): Rename cpp_set_lang. Export.
- (no_arg, no_num): Remove.
- (COMMAND_LINE_OPTIONS): Move more to c-opts.c. Drop all lang-
- switches apart from -lang-objc and lang-asm.
- (cpp_handle_option): Similarly.
- * cpplib.h (cpp_set_lang): New.
- * doc/cppopts.texi, doc/invoke.texi: Document -std=c++98,
- -std=gnu++98.
- * objc/lang-specs.h: Remove -ansi.
-
-Sat Aug 10 19:59:43 CEST 2002 Jan Hubicka <jh@suse.cz>
- Graham Stott
-
- * cfg.c (redirect_edge_succ_nodup): Avoid overflows due to roundoff
- errors.
-
-2002-08-10 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * emit-rtl.c (emit_jump_insn_before, emit_call_insn_before,
- emit_jump_insn): Fix uninitialized variable.
- * gcov.c (init_line_info): Likewise.
- * genautomata.c (transform_3): Add braces around ambiguous
- else.
- * ifcvt.c (cond_exec_process_insns): Mark parameter with
- ATTRIBUTE_UNUSED.
- * ra-build.c (parts_to_webs_1): Fix uninitialized variable.
- * regrename.c (copyprop_hardreg_forward): Fix uninitialized
- variable.
-
- * gengtype.c (write_gc_structure_fields): Avoid signed/unsigned
- warnings in output files.
-
-2002-08-09 Ziemowit Laski <zlaski@apple.com>
-
- * c-common.c (flag_objc): New.
- * c-common.h (c_language_kind): Get rid of clk_objective_c
- enum value.
- (flag_objc): New extern declaration.
- * c-decl.c (implicitly_declare): Call objc_check_decl
- instead of maybe_objc_check_decl.
- (finish_decl): Likewise.
- (grokfield): Likewise.
- (finish_struct): Likewise.
- * c-lang.c (maybe_objc_check_decl): Rename to objc_check_decl.
- (maybe_objc_comptypes): Rename to objc_comptypes.
- (maybe_building_objc_message_expr): Rename to
- objc_message_selector.
- * c-lex.c (lex_charconst): Remove uses of clk_objective_c,
- replace with flag_objc as needed.
- * c-opts.c (c_common_init_options): Likewise.
- (c_common_decode_option): Likewise.
- * c-parse.in (init_reswords): Likewise.
- * c-tree.h (maybe_objc_check_decl): Rename to objc_check_decl.
- (maybe_objc_comptypes): Rename to objc_comptypes.
- (maybe_building_objc_message_expr): Rename to
- objc_message_selector.
- * c-typeck.c (comptypes): Call objc_comptypes instead of
- maybe_objc_comptypes, and/or objc_message_selector instead of
- maybe_building_objc_message_expr.
- (comp_target_types): Likewise.
- (convert_for_assignment): Likewise.
- (warn_for_assignment): Likewise.
- * cppinit.c (init_builtins): Set __OBJC__ manifest constant
- independently of those for other languages.
- * objc/objc-act.c (maybe_objc_comptypes): Delete.
- (maybe_objc_check_decl): Delete.
- (maybe_building_objc_message_expr): Rename to
- objc_message_selector.
- * objc/objc-lang.c (objc_init_options): Use clk_c instead of
- clk_objective_c; set flag_objc flag.
-
-2002-08-09 Toshiyasu Morita <toshiyasu.morita@hsa.hitachi.com>
-
- * ifcvt.c (find_if_case_2): Test correct basic block for size.
-
-2002-08-09 Dale Johannesen <dalej@apple.com>
-
- * config/rs6000/rs6000.md: Add sibcall patterns.
- * config/rs6000/rs6000.h (FUNCTION_OK_FOR_SIBCALL): Define.
- * config/rs6000/rs6000.c (rs6000_ra_ever_killed):
- Rewritten to handle sibcalls.
- * config/rs6000/rs6000.c (function_ok_for_sibcall): New.
- * config/rs6000/rs6000-protos.h (function_ok_for_sibcall): New.
-
-2002-08-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * profile.c (da_file_name): New static var.
- (init_branch_prob): Initialize it.
- (end_branch_prob): Remove da file.
-
- * Makefile.in (stage1_build): Pass empty COVERAGE_FLAGS.
- * configure.in (coverage_flags): Default to nothing.
- * configure: Rebuilt.
-
-2002-08-09 Neil Booth <neil@daikokuya.co.uk>
-
- * Makefile.in (c-opts.o): Update
- * c-opts.c: Include intl.h.
- (print_help): Move from cppinit.c. Remove unused options.
- (COMMAND_LINE_OPTIONS): Move more from cppinit.c.
- (missing_arg): Complain for switches without an argument.
- (c_common_decode_option): Reject missing joined arguments.
- Handle new switches from cppinit.c.
- * cppinit.c (COMMAND_LINE_OPTIONS): Move some switches to c-opts.c.
- (cpp_handle_option): Similarly.
- (print_help): Moved to c-opts.c.
- * cpplib.h (struct cpp_options): Remove help_only.
- * gcc.c (cpp_unique_options): Remove -$.
- * doc/cppopts.texi: Undocument -h.
-
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (legitimate_constant_p): UNSPEC_TP is not
- legitimate constant.
- (legitimate_pic_operand_p): Neither pic operand.
- (legitimate_address_p): But legitimate address.
- (get_thread_pointer): Generate MEM/u instead of CONST around
- UNSPEC_TP.
- (print_operand): Remove printing of UNSPEC_TP.
- (print_operand_address): And print it here.
-
-2002-08-08 Devang Patel <dpatel@apple.com>
-
- * objc/objc-act.c (build_selector_translation_table): Issue warning,
- when -Wselector is used,if method for which selector is being
- created does not exist.
-
-2002-08-08 Stephen Clarke <stephen.clarke@superh.com>
-
- * config/sh/sh.c (prepare_move_operands): Only call
- target_reg_operand if TARGET_SHMEDIA.
-
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * config/rs6000/rs6000.h, config/rs6000/aix.h,
- config/rs6000/darwin.h, config/rs6000/linux64.h: Revert last
- two patches.
- * config/rs6000/sysv4.h: Likewise, remove #undef ADJUST_FIELD_ALIGN.
-
-2002-08-08 Lars Brinkhoff <lars@nocrew.org>
- Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (gen_rtx_REG): After reload, only return
- frame_pointer_rtx or hard_frame_pointer_rtx if frame_pointer_needed.
-
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * config/rs6000/rs6000-protos.h (rs6000_field_alignment): Remove.
- * config/rs6000/rs6000.c (rs6000_field_alignment): Move...
- * config/rs6000/rs6000.h (ADJUST_FIELD_ALIGN): ...inline into the
- macro.
-
-2002-08-08 Adam Nemet <anemet@lnxw.com>
-
- * config/arm/arm.c (thumb_unexpanded_epilogue): Stack the PIC
- register.
- (thumb_expand_prologue): Likewise.
- (thumb_output_function_prologue): Likewise.
- * config/arm/arm.h (THUMB_INITIAL_ELIMINATION_OFFSET): Account for
- the additional push of the PIC register.
-
-2002-08-08 Nathan Sidwell <nathan@codesourcery.com>
-
- * configure.in (enable_coverage): New enable switch.
- * configure: Rebuilt.
- * Makefile.in (COVERAGE_FLAGS, coverageexts): New variables.
- (INTERNAL_CFLAGS): Append COVERAGE_FLAGS.
- (ALL_FLAGS): Reorder so INTERNAL_CFLAGS comes after CFLAGS.
- (mostlyclean): Remove coverage files.
- * doc/install.texi: Document enable_coverage.
-
- * cp/Make-lang.in (c++.mostlyclean): Remove coverage files.
- * ada/Make-lang.in (ada.mostlyclean): Remove coverage files.
- * f/Make-lang.in (f.mostlyclean): Remove coverage files.
- * java/Make-lang.in (java.mostlyclean): Remove coverage files.
- * objc/Make-lang.in (objc.mostlyclean): Remove coverage files.
- * treelang/Make-lang.in (treelang.mostlyclean): Remove coverage
- files.
-
-2002-08-08 Neil Booth <neil@daikokuya.co.uk>
-
- * c-opts.c (cpp_opts): New.
- (COMMAND_LINE_OPTIONS): Add switches from cppinit.c.
- (c_common_decode_options): Handle cpplib switches.
- (c_common_init_options): Set cpp_opts.
- * cppinit.c (COMMAND_LINE_OPTIONS): Move some switches to c-opts.c.
- (cpp_handle_option): Similarly.
-
-2002-08-08 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/aix.h (TARGET_ALTIVEC): Define to 0.
- (TARGET_ALTIVEC_ABI): Same.
- (TARGET_ALTIVEC_VRSAVE): Same.
-
- * config/rs6000/rs6000.c (rs6000_expand_ternop_builtin): Check
- icode not CODE_FOR_nothing. Change switch to if.
-
-2002-08-08 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.h (ASM_CPU_SPEC): Pass -mpower4 when cpu=power4.
-
-2002-08-08 Jakub Jelinek <jakub@redhat.com>
-
- * stor-layout.c (place_union_field): For bitfields if
- PCC_BITFIELD_TYPE_MATTERS and TYPE_USER_ALIGN, set record's
- TYPE_USER_ALIGN.
-
-2002-08-07 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (struct deferred_plabel): Constify name field.
-
-2002-08-07 Neil Booth <neil@daikokuya.co.uk>
-
- * cppmacro.c (_cpp_builtin_macro_text): Remove unused variable.
-
-2002-08-07 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * configure.in (PREFIX_INCLUDE_DIR): Don't define if prefix and
- local_prefix are the same.
- * configure: Rebuilt.
-
-2002-08-07 Jakub Jelinek <jakub@redhat.com>
- Richard Henderson <rth@redhat.com>
-
- * stor-layout.c (place_union_field): Apply ADJUST_FIELD_ALIGN
- to type_align when PCC_BITFIELD_TYPE_MATTERS. Only apply
- ADJUST_FIELD_ALIGN if not DECL_USER_ALIGN resp. TYPE_USER_ALIGN.
- (place_field): Likewise.
- * config/i386/i386.c (x86_field_alignment): Don't check
- DECL_USER_ALIGN here.
- * config/rs6000/rs6000.c (rs6000_field_alignment): New.
- * config/rs6000/rs6000-protos.h (rs6000_field_alignment): New
- prototype.
- * config/rs6000/rs6000.h (ADJUST_FIELD_ALIGN): Define.
- * config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Remove.
- * config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Remove.
- * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Remove.
- * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Remove.
- * doc/tm.texi (ADJUST_FIELD_ALIGN): Update description.
-
-2002-08-07 Neil Booth <neil@daikokuya.co.uk>
-
- * Makefile.in (c-opts.o, c-common.o, C_AND_OBJC_OBJS): Update.
- * c-common.c: Don't include tree-inline.h.
- (c_common_init_options, c_common_post_options): Move to c-opts.c.
- * c-common.h (c_common_decode_option): New.
- * c-decl.c (c_decode_option): Remove.
- * c-lang.c (LANG_HOOKS_DECODE_OPTION): Use c_common_decode_option.
- * c-opts.c: New file.
- * c-tree.h (c_decode_option): Remove.
- * doc/passes.texi: Update.
- * objc/objc-act.c (objc_decode_option): Remove.
- * objc/objc-act.h (objc_decode_option): Remove.
- * objc/ojbc-lang.c (LANG_HOOKS_DECODE_OPTION): Use
- c_common_decode_option.
-
-2002-08-07 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/mips.md (sunlt_sf, suneq_sf, sunle_sf): Remove
- dependency on TARGET_DOUBLE_FLOAT.
-
-2002-08-07 Stephen Clarke <stephen.clarke@superh.com>
-
- * config/sh/lib1funcs.asm (GCC_shcompact_incoming_args): Don't
- overwrite callee-save registers. Fix comment.
-
-2002-08-06 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/mips.c (override_options): Set MASK_BRANCHLIKELY
- in target_flags based on ISA, if it was not set on the command
- line. Warn if MASK_BRANCHLIKLEY is set but the ISA does not
- support Branch Likely instructions.
- * config/mips/mips.h (MASK_BRANCHLIKLEY): New macro.
- (TARGET_BRANCHLIKELY): Likewise.
- (TARGET_SWITCHES): Add -mbranch-likely and -mno-branch-likely.
- (GENERATE_BRANCHLIKELY): Use TARGET_BRANCHLIKELY rather than
- ISA_HAS_BRANCHLIKELY.
- (ISA_HAS_BRANCHLIKELY): Do not include MIPS16 check.
- * doc/invoke.texi: Document new MIPS -mbranch-likely and
- -mno-branch-likely options.
-
-2002-08-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ip2k.c (ip2k_set_compare): Add missing iteration variable.
-
- * Makefile.in (dummy-conditions.o): Depend on $(HCONFIG_H) not
- $(GCONFIG_H).
-
-2002-08-06 Aldy Hernandez <aldyh@redhat.com>
-
- * c-decl.c (duplicate_decls): Error out for incompatible TLS
- declarations.
-
- * testsuite/gcc.dg/tls/diag-3.c: New.
-
-2002-08-06 Dale Johannesen <dalej@apple.com>
-
- * c-common.c (fname_decl): Use line number 0 for
- __func__, to avoid confusing debuggers.
-
-2002-08-06 Nathan Sidwell <nathan@codesourcery.com>
-
- * gcov.c: Tidy.
- (struct line_info, struct coverage): New structures.
- (gcov_file_name, gcov_file): Remove globals.
- (output_data): Take source file parameter. Fix memory leak. Break
- up into ...
- (init_line_info, output_line_info, make_gcov_file_name,
- accumulate_branch_counts): ... here.
- (calculate_branch_probs, function_summary): Adjust.
- (main): Adjust.
- (function_*): Remove global variables.
-
-2002-08-06 Neil Booth <neil@daikokuya.co.uk>
-
- * dwarf2out.c: Remove unused macros.
-
-2002-08-06 Neil Booth <neil@daikokuya.co.uk>
-
- * function.c (TRAMPOLINE_ALIGNMENT): Always defined.
-
-2002-08-06 Neil Booth <neil@daikokuya.co.uk>
-
- * cppinit.c (struct lang_flags): Rename trigraphs std.
- (set_lang): Update.
- * cpplib.h (struct cpp_options): New member std.
- * cppmacro.c (_cpp_builtin_macro_text): Use std.
- (collect_args): Flag whether to swallow a possible future
- comma pasted with varargs.
- (replace_args): Use this flag.
- * doc/cpp.texi: Update varargs extension documentation.
-
-2002-08-06 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/mmintrin.h (__m64): Make the type 64-bit aligned.
-
-2002-08-06 Jakub Jelinek <jakub@redhat.com>
-
- * config/i386/i386.c (x86_field_alignment): Apply min for all MODE_INT
- and MODE_CLASS_INT modes.
-
-2002-08-06 Jakub Jelinek <jakub@redhat.com>
-
- * config.gcc (*-*-linux*): Default to --enable-threads=posix if no
- --{enable,disable}-threads is given to configure.
- (alpha*-*-linux*, hppa*-*-linux*, i[34567]86-*-linux*,
- x86_64-*-linux*, ia64*-*-linux*, m68k-*-linux*, mips*-*-linux*,
- powerpc-*-linux-gnualtivec*, powerpc-*-linux*, s390-*-linux*,
- s390x-*-linux*, sh-*-linux*, sparc-*-linux*, sparc64-*-linux*):
- Remove thread_file setting here.
-
-2002-08-06 David Edelsohn <edelsohn@gnu.org>
-
- * doc/install.texi (Binaries): Update Bull Freeware URL.
-
-2002-08-06 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * doc/gcc.texi (Top): Rename Index to Keyword Index.
-
-2002-08-05 Nathan Sidwell <nathan@codesourcery.com>
-
- * gcov.c (output_data): Round to % to nearest, tweak formatting.
-
-2002-08-05 Jakub Jelinek <jakub@redhat.com>
-
- * fold-const.c (associate_trees): Only optimize NEGATE_EXPR in one
- of the operands into MINUS_EXPR if code is PLUS_EXPR.
-
-2002-08-05 Douglas B Rupp <rupp@gnat.com>
-
- * config.gcc (i[34567]86-*-interix*): Replace interix.o with winnt.o
- * config/i386/i386-interix.h (TARGET_NOP_FUN_DLLIMPORT,
- drectve_section): Define.
- * config/i386/t-interix: Replace interix.o rule with winnt.o.
- * config/i386/interix.c: Remove.
-
-2002-08-05 Geoffrey Keating <geoffk@redhat.com>
-
- * attribs.c: Don't include obstack.h.
- * builtins.c: Likewise.
- * cfganal.c: Likewise.
- * cfgbuild.c: Likewise.
- * cfgcleanup.c: Likewise.
- * emit-rtl.c: Likewise.
- * loop.c: Likewise.
- * stmt.c: Likewise.
-
- * Makefile.in (s-gtype): Re-add dependency on $(GTFILES).
-
-2002-08-05 Gabriel Dos Reis <gdr@nerim.net>
-
- * doc/c-tree.texi (Expression trees): Document VA_ARG_EXPR
-
-2002-08-04 Chris Demetriou <cgd@broadcom.com>
-
- * doc/invoke.texi: Remove duplicated paragraph describing
- TARGET_SWITCHES.
-
-2002-08-04 Geoffrey Keating <geoffk@redhat.com>
-
- * Makefile.in (sdbout.o): Doesn't need $(OBSTACK_H).
- * collect2.h (permanent_obstack): Delete declaration.
- * collect2.c (permanent_obstack): Delete definition.
- (main): Don't initialize permanent_obstack. Use xstrdup instead.
- * expr.c: Don't include obstack.h.
- (permanent_obstack): Delete declaration.
- * function.c: Don't include obstack.h.
- (permanent_obstack): Delete declaration.
- * integrate.c: Don't include obstack.h.
- (function_maybepermanent_obstack): Delete declaration.
- * print-tree.c (debug_tree): Use x*alloc not permalloc.
- * sdbout.c (gen_fake_label): Use x*alloc not permalloc.
- * tlink.c (pfgets): Use xstrdup not permanent_obstack.
- * toplev.c (lang_independent_init): Rename init_obstacks to init_ttree.
- * tree.h: Rename init_obstacks to init_ttree. Remove declarations
- of permalloc, expralloc, perm_calloc.
- * tree.c (permanent_obstack): Delete definition.
- (init_ttree): Rename from init_obstacks.
- (permalloc): Delete.
- (perm_calloc): Delete.
- (dump_tree_statistics): Don't print information about
- permanent_obstack.
- * varasm.c (assemble_start_function): Use xstrdup instead of
- permalloc/strcpy.
- (assemble_variable): Likewise.
- * config/alpha/alpha.c (unicosmk_need_dex): Use xmalloc instead of
- permalloc.
- (unicosmk_add_extern): Likewise.
- * config/c4x/c4x.c (c4x_external_ref): Likewise.
- (c4x_global_label): Likewise.
- * config/frv/frv.c (frv_encode_section_info): Likewise.
- * config/i386/winnt.c (i386_pe_record_external_function): Likewise.
- (i386_pe_record_exported_symbol): Likewise.
- * config/mips/mips.c (mips_output_external): Likewise.
- (mips_output_external_libcall): Likewise.
- * config/pa/pa.c: (permanent_obstack): Delete declaration.
- (output_call): Use ggc_strdup instead of allocating on
- permanent_obstack.
- * config/romp/romp.c: Include ggc.h.
- (get_symref): Don't declare permanent_obstack, use ggc_strdup
- intead of permanent_obstack.
- * config/rs6000/aix31.h (ASM_OUTPUT_EXTERNAL): Use concat
- instead of permalloc.
- * config/rs6000/rs6000.c (rs6000_gen_section_name): Use xmalloc
- instead of permalloc
- * config/rs6000/xcoff.h (ASM_OUTPUT_EXTERNAL): Use concat
- instead of permalloc.
- * config/vax/vax.c (vms_check_external): Use xmalloc instead of
- permalloc.
-
-2002-08-04 Bernd Schmidt <bernds@redhat.com>
-
- Contribute a port developed primarily by Michael Meissner,
- Catherine Moore, and Richard Sandiford <rsandifo@redhat.com>.
- * config.gcc: Add frv-elf target.
- * config/frv/cmovd.c: New file.
- * config/frv/cmovh.c: New file.
- * config/frv/cmovw.c: New file.
- * config/frv/frv-abi.h: New file.
- * config/frv/frv-asm.h: New file.
- * config/frv/frv-modes.def: New file.
- * config/frv/frv-protos.h: New file.
- * config/frv/frv.c: New file.
- * config/frv/frv.h: New file.
- * config/frv/frv.md: New file.
- * config/frv/frvbegin.c: New file.
- * config/frv/frvend.c: New file.
- * config/frv/lib1funcs.asm: New file.
- * config/frv/media.h: New file.
- * config/frv/modi.c: New file.
- * config/frv/t-frv: New file.
- * config/frv/uitod.c: New file.
- * config/frv/uitof.c: New file.
- * config/frv/ulltod.c: New file.
- * config/frv/ulltof.c: New file.
- * config/frv/umodi.c: New file.
- * config/frv/xm-frv.h: New file.
-
- * config/frv/media.h: Removed again.
-
-2002-08-04 Nathan Sidwell <nathan@codesourcery.com>
-
- * gcov.c (bb_file_time): New static variable.
- (object_directory): May also be object file.
- (preserve_paths): New static variable.
- (print_usage): Adjust.
- (options): Adjust.
- (process_args): Adjust.
- (open_files): Simplify. Cope when OBJECT_DIRECTORY is an object
- file. Find modification date on bb file.
- (read_profile): Don't rewind a NULL file.
- (format_hwint): New static function.
- (function_summary): Use format_hwint.
- (output_data): SOURCE_FILE_NAME is never relative to
- OBJECT_DIRECTORY. Use format_hwint. Adjust gcov file name
- mangling. Adjust output format to make it more machine readable.
- * doc/gcov.texi: Document & clarify semantics.
-
-2002-08-04 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * doc/include/gcc-common.texi (version-GCC): Increase to 3.3.
-
-2002-08-04 Nathan Sidwell <nathan@codesourcery.com>
-
- * gcc.c (cc1_options): Pass output file as auxbase when
- appropriate.
- * profile.c (init_branch_prob): FILENAME has already had ending
- stripped.
- * final.c (end_final): Likewise.
- * toplev.c (aux_base_name): New global.
- (compile_file): Pass aux_base_name to init init_branch_prob and
- end_final.
- (independent_decode_option, case 'a'): New auxinfo options.
- (case 'd'): Protect against mising basename.
- (do_compile): Initialize aux_base_name.
- * toplev.h (aux_base_name): New global.
- * doc/invoke.texi: Adjust documentation.
-
-2002-08-04 Nathan Sidwell <nathan@codesourcery.com>
-
- * config/i386/i386.c (x86_field_alignment): Remove duplicate test
- of TARGET_ALIGN_DOUBLE.
-
-2002-08-04 Gabriel Dos Reis <gdr@nerim.net>
-
- * diagnostic.c (inform): New function.
- * diagnostic.h (inform): Declare.
-
-2002-08-03 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (movsi_internal1): Add nop mnemonic.
- (movhi_internal): Same.
- (movqi_internal): Same.
- (movdi_internal64): Same.
-
- * config/rs6000/t-ppccomm (MULTILIB_MATCHES_FLOAT): Add mcpu=405.
-
- * config/rs6000/xcoff.h (SKIP_ASM_OP): Define.
- (ASM_OUTPUT_SKIP): Use it. SIZE unsigned.
- (COMMON_ASM_OP): Define.
- (ASM_OUTPUT_ALIGNED_COMMON): Use it. SIZE unsigned.
- Use ALIGN parameter.
- (LOCAL_COMMON_ASM_OP): Define.
- (ASM_OUTPUT_LOCAL): Use it. SIZE unsigned.
-
-2002-08-03 Roger Sayle <roger@eyesopen.com>
-
- * builtins.def: Define new builtin functions exp, expf, expl,
- log, logf and logl (and their __builtin_* variants).
- * optabs.h (enum optab_index): Add new OTI_exp and OTI_log.
- Define exp_optab and log_optab.
- * optabs.c (init_optans): Initialize exp_optab and log_optab.
- * genopinit.c (optabs): Implement exp_optab and log_optab
- using exp?f2 and log?f2 patterns.
- * builtins.c (expand_builtin_mathfn): Handle BUILT_IN_EXP*
- and BUILT_IN_LOG* using exp_optab and log_optab respectively.
- (expand_builtin): Ignore the new builtins (and all cos and
- sin variants) when not optimizing. Expand new builtins via
- expand_builtin_mathfn when flag_unsafe_math_optimizations.
-
- * doc/extend.texi: Document new exp and log builtins.
- * doc/md.texi: Document new exp?f2 and log?f2 patterns
- (and previously undocumented cos?f2 and sin?f2 patterns).
-
-2002-08-03 Jason Merrill <jason@redhat.com>
-
- * explow.c (int_expr_size): New fn.
- * expr.c (expand_expr) [CONSTRUCTOR]: Use it.
- * expr.h: Declare it.
-
-2002-08-02 Krister Walfridsson <cato@df.lth.se>
-
- * Makefile.in (gengtype-lex.o, gengtype-yacc.o): Add path to
- gengtype-* dependencies.
-
-2002-08-02 Eric Christopher <echristo@redhat.com>
-
- * config.gcc (mips*-*-linux*): Fix ordering of tm_file.
- * config/mips/mips.h (READONLY_DATA_SECTION_ASM_OP): Change
- #ifndef to #undef.
- (TARGET_MEM_FUNCTIONS): Define instead of define to 1.
-
-2002-08-02 David Edelsohn <edelsohn@gnu.org>
-
- PR optimize/7067
- * config/rs6000/rs6000.h (RTX_COSTS): Artificially make MULT
- small if optimizing for size.
-
-2002-08-02 Daniel Jacobowitz <drow@mvista.com>
-
- * configure.in (FORBUILD): Use $build_alias.
- * configure: Regenerated.
-
-2002-08-02 Richard Sandiford <rsandifo@redhat.com>
-
- * config.gcc: Don't include mips/abi64.h in $tm_file.
- * hard-reg-set.h (call_really_used_regs): Declare.
- * config/mips/abi64.h: Remove file.
- * config/mips/linux.h,
- * config/mips/iris6.h: Don't include it.
- * config/mips/mips-protos.h (mips_conditional_register_usage): Declare.
- * config/mips/mips.h (CONDITIONAL_REGISTER_USAGE): Use it.
- (REG_PARM_STACK_SPACE, STACK_BOUNDARY, STRICT_ARGUMENT_NAMING,
- FUNCTION_ARG_PASS_BY_REFERENCE, FUNCTION_ARG_PADDING,
- FUNCTION_ARG_CALLEE_COPIES, MUST_PASS_IN_STACK, MIPS_STACK_ALIGN):
- Bring across definitions from abi64.h.
- (GP_ARG_LAST, FP_ARG_LAST): Use MAX_ARGS_IN_REGISTERS.
- (BIGGEST_MAX_ARGS_IN_REGISTERS): New.
- (struct mips_args): Use it.
- * config/mips/mips.c (mips_conditional_register_usage): Define.
-
-2002-08-02 Jason Merrill <jason@redhat.com>
-
- * langhooks-def.h (LANG_HOOKS_EXPR_SIZE): New macro.
- * langhooks.c (lhd_expr_size): Define default.
- * langhooks.h (struct lang_hooks): Add expr_size.
- * explow.c (expr_size): Call it.
- * expr.c (store_expr): Don't copy an expression of size zero.
- (expand_expr) [CONSTRUCTOR]: Use expr_size to calculate how much
- to store.
- * Makefile.in (builtins.o): Depend on langhooks.h.
-
-2002-08-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (ra-debug.o): Depend on $(TM_P_H).
- * ra-debug.c: Include "tm_p.h".
- * ra-rewrite.c (is_partly_live_1): Change return type to bool.
-
-2002-08-02 Toon Moene <toon@moene.indiv.nluug.nl>
-
- * simplify-rtx.c (simplify_binary_operation): x * 1 is allowed
- when not honoring signalling NaNs.
- (simplify_ternary_operation): a == b has a definite value
- when not honoring NaNs.
-
-2002-08-02 Jason Merrill <jason@redhat.com>
-
- * gdbinit.in (pct): New macro.
-
-2002-08-01 Stan Shebs <shebs@apple.com>
- Andreas Tobler <toa@pop.agri.ch>
-
- * ginclude/stddef.h (_BSD_SIZE_T_DEFINED_): Define if not defined,
- plays nice with Darwin headers.
- (_BSD_RUNE_T_DEFINED_): Likewise.
-
-2002-08-01 Zack Weinberg <zack@codesourcery.com>
-
- * c-common.c (c_common_init): -Wtraditional also implies -Wlong-long.
- * cppinit.c (cpp_post_options): Likewise.
-
- * cppexp.c (cpp_classify_number): Suppress -Wtraditional
- warning about 'LL' suffix (but not 'ULL' etc) when
- -Wno-long-long is in effect.
-
- * cppmacro.c (_cpp_builtin_macro_text) [BT_TIME, BT_DATE]:
- Check for failing time()/localtime(), issue a warning, and
- make __TIME__ and __DATE__ expand to fallback strings.
-
- * doc/cpp.texi, doc/extend.texi: Document behavior of __DATE__
- and __TIME__ when the date and time cannot be determined.
-
-2002-08-02 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (output_cbranch): Hint differently for power4.
-
-2002-08-01 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in ($(BUILD_PREFIX_1)ggc-none.o): Use $(GGC_H).
-
-2002-08-01 Chris Demetriou <cgd@broadcom.com>
-
- * config.gcc (mipsisa64sb1-*-elf*): New configuration.
- (mipsisa64sb1el-*-elf*): Likewise.
- * config/mips/mips.c (mips_cpu_info_table): Add sb1.
- * config/mips/mips.h (processor_type): Add PROCESSOR_SB1.
- (TARGET_SB1, TUNE_SB1): New macros.
- * doc/invoke.texi: Add sb1 to documentation for MIPS -march and
- -mtune flags.
-
-2002-08-01 David Edelsohn <edelsohn@gnu.org>
-
- * varasm.c (asm_emit_uninitialized): Return false if global BSS
- and ASM_EMIT_BSS not supported by target.
- (assemble_variable): Do not duplicate uninitialized logic.
- Fall through if asm_emit_uninitialized failed.
-
-2002-08-01 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/mips.h (BRANCH_LIKELY_P): Remove unused macro.
-
-2002-08-02 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/linux64.h (DBX_OUTPUT_BRAC): Define.
- (DBX_OUTPUT_LBRAC, DBX_OUTPUT_RBRAC): Define.
-
- * config/rs6000/rs6000.c (output_toc): Don't use lshift_double when
- HOST_BITS_PER_WIDE_INT == 64.
-
-2002-08-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * df.c (df_insn_table_realloc): Change parameter to unsigned.
- * optabs.c (expand_binop): Make variable unsigned.
- * simplify-rtx.c (simplify_subreg): Likewise.
- * unroll.c (unroll_loop): Cast to avoid signed/unsigned warnings.
-
-2002-08-01 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- * c-common.c (cb_register_builtins): Always define __GXX_ABI_VERSION.
-
-2002-08-01 Richard Henderson <rth@redhat.com>
-
- * toplev.c (parse_options_and_default_flags): Don't set
- flag_reorder_blocks for -Os.
-
- * config/avr/avr.c (avr_optimization_options): Remove.
- * config/avr/avr.h (OPTIMIZATION_OPTIONS): Remove.
- * config/m68hc11/m68hc11.c (m68hc11_optimization_options): Remove.
- * config/m68hc11/m68hc11.h (OPTIMIZATION_OPTIONS): Remove.
-
-2002-08-01 H.J. Lu <hjl@gnu.org>
- Richard Henderson <rth@redhat.com>
-
- * output.h (DECL_READONLY_SECTION): Remove.
- (decl_readonly_section): Declare.
- * varasm.c (decl_readonly_section): New.
- (default_section_type_flags, default_select_section): Use it.
- * config/arm/pe.c (arm_pe_unique_section): Likewise.
- * config/i386/interix.c (i386_pe_unique_section): Likewise.
- * config/i386/winnt.c (i386_pe_unique_section): Likewise.
- * config/mcore/mcore.c (mcore_unique_section): Likewise.
- * config/mips/mips.c (mips_unique_section): Likewise.
-
-2002-08-01 Richard Henderson <rth@redhat.com>
-
- * integrate.c (copy_rtx_and_substitute): Squash MEM_EXPR when it
- refers to a subroutine parameter.
-
-2002-08-01 Jakub Jelinek <jakub@redhat.com>
-
- * varasm.c (assemble_visibility): Strip name encoding.
-
-2002-08-01 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * config/ns32k/ns32k.h (TARGET_IEEE_COMPARE): Correct earlier patch.
- (RETURN_ADDR_RTX): Cannot determine return address for FRAME > 0
- when there is no frame pointer.
- (INITIAL_FRAME_POINTER_OFFSET): Count stack space for saved fp
- registers properly.
- * config/ns32k/__unorddf2.c: New file.
- * config/ns32k/__unordsf2.c: New file.
- * config/ns32k/t-ns32k: New file.
- * config.gcc (ns32k-*-netbsd*): Use it.
-
-2002-08-01 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.h (SPU_CONST_OFFSET_OK): Change to 0xff.
-
-2002-08-01 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (__GXX_ABI_VERSION): Correct spelling.
-
-2002-08-01 Benjamin Kosnik <bkoz@redhat.com>
-
- * c-common.c (cb_register_builtins): Set __GXX_ABI_VERSION__ to 102.
-
-2002-08-01 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md: Add [!]TARGET_MIPS16 to sgtu conditions.
-
-2002-08-01 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
-
- * gcse.c (expr_hash_table_size, n_exprs, set_hash_table_size,
- n_sets): Removed.
- (expr_hash_table, set_hash_table): Type changed to ...
- (struct hash_table): New type.
- (hash_scan_insn, hash_scan_set, hash_scan_clobber, hash_scan_call,
- insert_expr_in_table, insert_set_in_table, compute_hash_table,
- dump_hash_table, lookup_expr, lookup_set, compute_local_properties,
- compute_ae_gen, compute_ae_kill): Modified to pass the table explicitly.
- (alloc_set_hash_table, alloc_expr_hash_table): Merged to ...
- (alloc_hash_table): New.
- (free_set_hash_table, free_expr_hash_table): Merged to ...
- (free_hash_table): New.
- (compute_set_hash_table, compute_expr_hash_table): Merged to ...
- (compute_hash_table_work): New.
- (classic_gcse, one_classic_gcse_pass, compute_cprop_data,
- find_avail_set, one_cprop_pass, find_bypass_set, compute_pre_data,
- pre_edge_insert, pre_insert_copies, pre_delete, pre_gcse,
- one_pre_gcse_pass, compute_transpout, compute_code_hoist_vbeinout,
- hoist_code, one_code_hoisting_pass,
- trim_ld_motion_mems): Altered due to changed type of hash tables.
-
-2002-08-01 Zack Weinberg <zack@codesourcery.com>
-
- * final.c (output_alternate_entry_point):
- If ASM_OUTPUT_TYPE_DIRECTIVE is defined, use it.
-
-2002-08-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * objc/objc-act.c (encode_complete_bitfield): Add prototype and
- avoid ISO C style function definition.
-
- * expr.c (expand_assignment): Delete unused variable.
-
-2002-08-01 Toon Moene <toon@moene.indiv.nluug.nl>
-
- * c-common.c (cb_register_builtins): Set
- __FINITE_MATH_ONLY__ to 1 if -ffinite-math-only
- is given, and to 0 otherwise.
- * combine.c (simplify_if_then_else): HONOR_NANS
- implies FLOAT_MODE_P.
-
-2002-08-01 Neil Booth <neil@daikokuya.co.uk>
-
- * cppinit.c (COMMAND_LINE_OPTIONS): Remove OPT_dollar.
- (cpp_handle_option): Don't handle it.
- (print_help): Update.
- * doc/cppopts.texi: Update.
-
-2002-08-01 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (cb_register_builtins): If C++, define
- __EXCEPTIONS, __DEPRECATED and __GXX_ABI_VERSION as appropriate.
- * gcc.c (cpp_unique_options): Remove __GXX_ABI_VERSION.
-cp:
- * lang-specs.h: Simplify in accordance with new code in
- c-common.c.
-
-2002-08-01 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c: Define all C/ObjC/C++ warning and flag variables.
- * c-common.h: Declare all C/ObjC/C++ warning and flag variables.
- * c-decl.c: Move all warning and flag variables to c-common.c.
- * c-format.c: Move all warning variables to c-common.c.
- * c-tree.h: Move all warning and flag declarations to c-common.h.
- * objc/objc-act.c: Move all warning variables to c-common.c.
- (flag_warn_protocol): Rename warn_protocol.
-
-2002-07-31 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa-linux.h (GLOBAL_ASM_OP): Fix typo.
-
-2002-07-31 Graham Stott <graham.stott@btinternet.com>
-
- * config/stormy16/stormy16.h (BSS_SECTION_ASM_OP): Add missing
- .section prefix.
-
-2002-07-31 Stan Shebs <shebs@apple.com>
-
- * config.gcc (i[34567]86-*-darwin*): New configuration.
- * config/darwin.h (TARGET_ENCODE_SECTION_INFO): Undefine before
- defining.
- (TARGET_ENCODE_SECTION_INFO): Ditto.
- (ASM_PREFERRED_EH_DATA_FORMAT): Ditto.
- * config/darwin.c (machopic_indirect_data_reference): Remove
- setting of RTX_UNCHANGING_P.
- (machopic_legitimize_pic_address): Move RTX_UNCHANGING_P up so as
- not to be applied to sums.
- * config/i386/t-darwin: New file.
- * config/i386/darwin.h: New file.
- * config/i386/i386.h (TARGET_MACHO): Add default definition.
- * config/i386/i386.md (tablejump): Add TARGET_MACHO case.
- * config/i386/i386.c (output_set_got): For Mach-O, output Mach-O
- label and not the GOT add.
- (constant_address_p): For Mach-O, seeing a CONST is enough.
- (legitimate_pic_address_disp_p): Add a Mach-O case.
- (legitimate_address_p): Also test machopic_operand_p if Mach-O.
- (legitimize_pic_address): Use generic Mach-O code to legitimize.
- (output_pic_addr_const): Suppress @PLT if Mach-O, and parens
- if outputting a difference.
- (ix86_output_addr_diff_elt): Add Mach-O case.
- (ix86_expand_move): Similarly.
- (ix86_expand_call): Similarly.
- (current_machopic_label_num): New global.
- (machopic_output_stub): New function.
- (ix86_value_regno): New function.
- (ix86_function_value): Use it instead of VALUE_REGNO.
- (ix86_libcall_value): Ditto.
- * config/i386/unix.h (VALUE_REGNO): Remove.
-
-2002-07-31 Graham Stott <grahas@btinternet.com>
-
- * config/rs6000/rs6000.c(rs6000_hash_constant): Fix
- hash for LABEL_REF's.
-
-2002-07-31 Graham Stott <grahams@btinternet.com>
-
- * config/rs6000/rs6000.c (spe_init_builtins,
- altivec_init_builtins, rs6000_common_init_builtins):
- Replace ANSI with K&R function def.
-
-2002-07-31 David Edelsohn <edelsohn@gnu.org>
-
- * rs6000.c (validate_condition_mode): Test flag_finite_math_only
- for CCFPmode.
-
-2002-07-31 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/crtn.asm: Don't use __mips16 to determine the
- return-address offset. Define RA to a suitable temporary
- register for the return address.
-
-2002-07-31 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md (eh_set_lr_si, eh_set_lr_di): Change
- constraints to 'd'.
-
-2002-07-30 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/elf.h (STARTFILE_SPEC): Define differently if
- default ABI is MEABI. (Undoes incorrect change in Eric Christopher's
- patch on 2002-07-29.)
- * config/mips/elf64.h (STARTFILE_SPEC): Likewise.
-
-2002-07-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha.h, arc.h, arm/aout.h, avr.h, cris.h, d30v.h, dsp16xx.h,
- fr30.h, h8300.h, i370.h, i386/sco5.h, i386/unix.h, i960.h, ia64.h,
- ip2k.h, m32r.h, mcore.h, mips.h, mn10200.h, mn10300.h, ns32k.h,
- openbsd.h, pa/pa-linux.h, pdp11.h, romp.h, rs6000/sysv4.h,
- s390/linux.h, sh.h, sparc.h, stormy16.h, v850.h, vax.h, xtensa.h:
- (ASM_GLOBALIZE_LABEL): Delete.
- (GLOBAL_ASM_OP): Define.
-
- * m68hc11.h, m68k.h, m88k.h (ASM_GLOBALIZE_LABEL): Delete.
-
- * defaults.h (ASM_GLOBALIZE_LABEL): Provide a default.
- * doc/tm.texi (ASM_GLOBALIZE_LABEL): Update docs.
-
-2002-07-30 Geoffrey Keating <geoffk@redhat.com>
-
- * doc/extend.texi (Hints implementation): Document that GCC
- mostly ignores `register'.
-
-2002-07-30 Toon Moene <toon@moene.indiv.nluug.nl>
-
- * flags.h: Declare flag_finite_math_only.
- Use it in definition of HONOR_NANS and
- HONOR_INFINITIES.
- * c-common.c (cb_register_builtins): Emit
- __FINITE_MATH_ONLY__ when flag_finite_math_only
- is set.
- * combine.c (simplify_if_then_else): If
- flag_finite_math_only is set, a == b has a
- definite value.
- * toplev.c: Initialize flag_finite_math_only.
- (set_flags_fast_math): Set it on -ffast-math.
- (flag_fast_math_set_p): Test it.
- * doc/invoke.texi: Document -ffinite-math-only.
-
-2002-07-30 Richard Henderson <rth@redhat.com>
-
- * ifcvt.c (noce_get_alt_condition): Use reg_overlap_mentioned_p.
- (noce_process_if_block): Likewise.
-
-2002-07-30 Bernd Schmidt <bernds@redhat.com>
-
- * ifcvt.c (cond_exec_process_if_block): Fix a merging error.
- Bail out early if false_expr is NULL and we'd crash due to this.
- * genemit.c (gen_expand): Recognize return insns even if the return
- appears in a parallel.
- * libgcc2.c: Expand macro DECLARE_LIBRARY_RENAMES if it is defined.
- * config/fp-bit.c: Likewise.
- * doc/tm.texi: Document it.
-
-2002-07-30 David Edelsohn <edelsohn@gnu.org>
- Zack Weinberg <zack@codesourcery.com>
-
- * rs6000.c (rs6000_expand_unop_builtin): Check icode not
- CODE_FOR_nothing. Change switch to if.
- (rs6000_expand_binop_builtin): Same.
- (rs6000_expand_builtin): Expand builtin if target support enabled.
- (rs6000_init_builtins): Init builtin if target support enabled.
- (rs6000_common_init_builtins): Check icode not CODE_FOR_nothing.
-
-2002-07-30 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- * gcc.c (cpp_unique_options): Define __GXX_ABI_VERSION, bump it to 101.
-
-2002-07-30 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.h (SUBTARGET_ASM_DEBUGGING_SPEC): Fix typo.
-
-Tue Jul 30 18:31:31 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (cond_delay_slot): New attribute.
- (cbranch delay): Use it for anulled-true case.
- (stuff_delay_slot): New pattern.
- * sh.c (print_operand, case '.'): Don't print .s / /s fore zero-length
- delay slot insn.
- (gen_far_branch): Emit stuff_delay_slot pattern.
-
-Tue Jul 30 11:21:44 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * unroll.c (copy_loop_body): Don't copy NOTE_INSN_LOOP_CONT.
-
-2002-07-30 Kazu Hirata <kazu@cs.umass.edu>
-
- * fold-const.c: Fix comment typos.
- * gcse.c: Likewise.
- * reload1.c: Likewise.
-
-2002-07-29 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.md: Disallow CCEQ compare with crnor/crnot
- for TARGET_SPE.
-
-2002-07-30 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-pretty-print.h (pp_c_statement): Declare.
- * c-pretty-print.c (pp_c_postfix_expression): #if 0 support for SRCLOC.
- (pp_c_statement): Define.
-
-2002-07-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha.h, arc.h, arm/aout.h, avr.h, c4x.h, cris.h, d30v.h,
- darwin.h, dsp16xx.h, fr30.h, h8300.h, i370.h, i386.h, i960.h,
- ip2k.h, m32r.h, m68hc11.h, m68k.h, m88k.h, mcore.h, mips.h,
- mn10200.h, mn10300.h, ns32k.h, pa/pa-linux.h, pdp11.h, romp.h,
- rs6000/sysv4.h, s390/linux.h, sh.h, sparc.h, stormy16.h,
- v850.h, vax.h, xtensa.h (ASM_OUTPUT_LABEL): Delete definition.
-
- * defaults.h (ASM_OUTPUT_LABEL): Provide a default.
- * doc/tm.texi (ASM_OUTPUT_LABEL): Update docs.
-
-2002-07-30 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-pretty-print.c (pp_c_primary_expression): Handle STMT_EXPR.
- (pp_c_postfix_expression): Handle ARROW_EXPR, FFS_EXPR,
- COMPOUND_LITERAL_EXPR, VA_ARG_EXPR.
- (pp_c_expression): Update.
-
-2002-07-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * alpha/vms-cc.c (preprocess_args, main): Use xstrdup and/or
- concat in lieu of xmalloc/strcpy/memcpy/sprintf.
- * alpha/vms-ld.c (main): Likewise.
- * dsp16xx.c (double_reg_to_memory): Likewise.
- * mcore.c (mcore_expand_prolog): Likewise.
- * cppfiles.c (read_name_map): Likewise.
- * gensupport.c (process_rtx, identify_predicable_attribute,
- alter_test_for_insn): Likewise.
- * vmsdbgout.c (write_rtnbeg, vmsdbgout_init): Likewise.
-
-2002-07-29 Roger Sayle <roger@eyesopen.com>
-
- * builtins.c (expand_builtin): Change the default behavior to
- only issue an error if the builtin function doesn't have a
- fallback library call. Remove several cases handled by the
- new default.
-
-2002-07-29 John David Anglin <dave@hiauly1.hia.nrc>
-
- * real.c (ieee_24, ieee_53, ieee_64, ieee_113): Define only if the
- floating point format of the target is IEEE.
- * (dec_f, dec_d, dec_g, dec_h): Define only if the floating point
- format of the target is DEC.
-
-2002-07-29 Richard Henderson <rth@redhat.com>
-
- * unroll.c (verify_addresses): Remove.
- (find_splittable_givs): Never split DEST_ADDR givs.
-
-2002-07-29 Geoffrey Keating <geoffk@redhat.com>
-
- * doc/gty.texi (GGC Roots): Clarify that the list of syntaxes
- is exhaustive.
- (Files): Improve documentation on generated source files.
-
- * doc/extend.texi (Translation implementation): Document what
- diagnostics look like.
- (Identifiers implementation): Document that there's normally no
- limit on identifier names.
- (Integers implementation): Document two's complement.
- (Hints implementation): Document that GCC honors 'inline', mostly.
- (Preprocessing directives implementation): Document that GCC
- requires the current time.
-
-2002-07-30 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-pretty-print.h (struct c_pretty_print_info): Add new member.
- (pp_initializer): New macro.
- (pp_c_initializer): Declare.
- * c-pretty-print.c (pp_c_primary_expression): HAndle TARGET_EXPR.
- (pp_c_initializer): Define.
- (pp_c_initializer_list): New function.
- (pp_c_postfix_expression): Handle ABS_EXPR, COMPLEX_CST,
- VECTOR_CST, CONSTRUCTOR.
- (pp_c_unary_expression): Handle CONJ_EXPR, REALPART_EXPR,
- IMAGPART_EXPR.
- (pp_c_cast_expression): Handle FLOAT_EXPR.
- (pp_c_assignment_expression): Handle INIT_EXPR.
- (pp_c_expression): Update.
-
-2002-07-30 Neil Booth <neil@daikokuya.co.uk>
-
- * objc/objc-act.c (objc_init): Return immediately if filename
- is NULL.
-
-2002-07-29 Eric Christopher <echristo@redhat.com>
-
- * config/mips/elf.h: Remove ecoff.h and gofast includes.
- (DWARF2_DEBUGGING_INFO, DBX_DEBUGGING_INFO): Define unconditionally.
- (SDB_DEBUGGING_INFO): Undefine.
- (PREFERRED_DEBUGGING_TYPE): Set to DWARF2_DEBUG.
- (PUT_SDB_SIZE): Remove.
- (SUBTARGET_ASM_DEBUGGING_SPEC): Redefine.
- (STARTFILE_SPEC): Add isa3264 define.
- * config/mips/elf64.h: Ditto. Move TARGET_MEM_FUNCTIONS from here...
- * config/mips/ecoff.h: Remove. and here...
- * config/mips/iris3.h: and here...
- * config/mips/sni-svr4.h: and here...
- * config/mips/mips.h: To here. Remove OBJECT_FORMAT_ROSE ifdefs.
- Add assembler -mmdebug options for non-dwarf debugging.
- * config/mips/r3900.h: Remove debug info defines.
- * config/mips/isa32-linux.h: Remove, move functionality to config.gcc.
- * config/mips/isa3264.h: Ditto.
- * config/mips/t-isa3264: Fix up for file removal and gofast configure
- change.
- * config/mips/t-elf: Ditto.
- * config/mips/t-ecoff: Ditto.
- * config/mips/t-r3900: Ditto.
- * config/mips/t-iris5-6: Ditto.
- * config/mips/t-isa3264: Ditto.
- * config/mips/t-linux: Remove.
- * config/mips/t-netbsd: Remove.
- * config/mips/t-mips: New file.
- * config/mips/t-gofast: Ditto.
- * config/mips/netbsd.h: Remove unnecessary undefines.
- * config/mips/linux.h: Remove #include of mips.h.
- * config.gcc: Add mips.h include for elf targets. Remove tm_file
- for ecoff. Add gofast configure option for mips.
-
-2002-07-29 Chris Demetriou <cgd@broadcom.com>
-
- * configure.in (mips*-*-*): Add a test to see if MIPS libgloss
- linker scripts use STARTUP directives consistently.
- * configure: Regenerate.
- * config.in: Regenerate.
- * config/mips/elf.h (STARTFILE_SPEC): Define conditionally, based
- on whether HAVE_MIPS_LIBGLOSS_STARTUP_DIRECTIVES is defined.
- * config/mips/elf64.h (STARTFILE_SPEC): Likewise.
- * config/mips/isa3264.h (STARTFILE_SPEC): Do not redefine if
- HAVE_MIPS_LIBGLOSS_STARTUP_DIRECTIVES is set; the result
- will be the same.
-
-2002-07-29 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.md ("cpu"): Add ppc8540 to attribute.
-
-2002-07-29 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.h (RTX_COSTS): Add MULT case for 8540.
-
-2002-07-29 Aldy Hernandez <aldy@quesejoda.com>
-
- * config/rs6000/rs6000.md: Move altivec patterns from here...
-
- * config/rs6000/altivec.md: ...to here.
-
-2002-07-29 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/spe.md ("spe_evmra"): Change to unspec.
-
-2002-07-29 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (set_mem_attributes_minus_bitpos): Rename from
- set_mem_attributes and add BITPOS argument. Subtract it from
- OFFSET when same is adjusted.
- (set_mem_attributes): New wrapper function.
- * expr.c (expand_assignment): Use set_mem_attributes_minus_bitpos;
- remove offset adjustment hack.
- * expr.h (set_mem_attributes_minus_bitpos): Declare.
-
-2002-07-29 Gabriel Dos Reis <gdr@nerim.net>
-
- * Makefile.in (C_OBJS): Include c-pretty-print.o
- (c-pretty-print.o): Add depency rule.
- * pretty-print.h: Add more macros.
- * c-pretty-print.c: New file.
- * c-pretty-print.h: Likewise.
-
-2002-07-29 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/spe.h (__internal_ev_mwhgumian): Cast vector
- constants to __ev64_s32__.
- (__internal_ev_mwhgsmian): Same.
- (__internal_ev_mwhgsmfan): Same.
- (__internal_ev_mwhgssfan): Same.
- (__internal_ev_mwhgumiaa): Same.
- (__internal_ev_mwhgsmiaa): Same.
- (__internal_ev_mwhgsmfaa): Same.
- (__internal_ev_mwhgssfaa): Same.
-
-2002-07-29 David Edelsohn <edelsohn@gnu.org>
-
- * varasm.c (assemble_variable): Narrow test for uninitialized
- without BSS target support.
-
-2002-07-29 Nathan Sidwell <nathan@codesourcery.com>
-
- * profile.c: Add file comment describing the overall algorithm and
- structures.
- (struct edge_info): Add comments.
- (struct bb_info): Add comments.
- * basic-block.h (EDGE_*): Add comments.
- * doc/gcov.texi (Gcov Data Files): Document bit flags.
-
-2002-07-29 Bob Wilson <bob.wilson@acm.org>
-
- * config/xtensa/elf.h, config/xtensa/linux.h
- (TARGET_OS_CPP_BUILTINS): Define.
- (CPP_PREDEFINES): Remove.
- * config/xtensa/xtensa.h (TARGET_CPU_CPP_BUILTINS): Define.
- (CPP_SPEC): Remove.
-
-2002-07-29 Zack Weinberg <zack@codesourcery.com>
-
- * gensupport.c: Include hashtab.h.
- (insn_elision, condition_table, hash_c_test, cmp_c_test,
- maybe_eval_c_test): New routines and data structures to
- support insn elision.
- (init_md_reader): Read and initialize the condition_table.
- (read_md_rtx): Discard insn patterns whose C test is provably
- always false.
- * gensupport.h: Declare new functions and data structures.
-
- * genconditions.c, dummy-conditions.c: New files.
- * Makefile.in: Build genconditions; run it to construct
- insn-conditions.c; build that and link it into most gen*
- programs.
- (HOST_SUPPORT, HOST_EARLY_SUPPORT): New variables.
- (GEN): Delete, unused.
- (STAGESTUFF): Update.
-
- * gencodes.c: (gen_insn): #define CODE_FOR_xxx equal to
- CODE_FOR_nothing for all elided patterns.
- (main): Tweaked to support this.
- * genflags.c (gen_proto): Emit a static inline generator
- function here for all elided patterns, which simply returns
- NULL_RTX.
- (gen_insn): Do not define HAVE_xxx for elided patterns.
- (main): Tweaked to support this. No need to forward-declare
- struct rtx_def.
- * genrecog.c: Do not bother emitting the C test if it's known
- to be true at compile time.
-
-2002-07-29 Mike Stump <mrs@apple.com>
-
- * config.gcc (target_gtfiles): Initialize, as otherwise cross
- compilers hosted on powerpc-apple-darwin6.0 won't even build.
-
-2002-07-29 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.md (sibcall, sibcall_value): Add RETURN as part of the pattern,
- remove clobber of LR.
- (sibcall_insn, sibcall_value_insn): Update accordingly.
- (sibcall_epilogue): Remove debugging comment from assembler stream.
-
-2002-07-29 Gabriel Dos Reis <gdr@nerim.net>
-
- * pretty-print.h: Define more macros.
- * diagnostic.h (output_formatted_integer): Moved from...
- * diagnostic.c: ... here.
-
-2002-07-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * stormy16.h (ASM_OUTPUT_SYMBOL_REF): Use ASM_OUTPUT_LABEL_REF.
-
-2002-07-28 Zack Weinberg <zack@codesourcery.com>
-
- * defaults.h (ASM_OUTPUT_MEASURED_SIZE): Take only two
- arguments. Always use ".-symbol" as expression argument.
- * doc/tm.texi: Update to match. Document requirement for
- ".size symbol, .-symbol" to be acceptable to assembler.
-
- * config/elfos.h, config/netbsd-aout.h, config/openbsd.h,
- config/arm/elf.h, config/avr/avr.h, config/cris/aout.h,
- config/i386/freebsd-aout.h, config/i386/sco5.h,
- config/ip2k/ip2k.h, config/m88k/m88k.h, config/xtensa/elf.h,
- config/xtensa/linux.h: Update uses of ASM_OUTPUT_MEASURED_SIZE.
-
-2002-07-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (gengtype-lex.c): Fix error in last change.
-
- * alpha/freebsd.h (TARGET_OS_CPP_BUILTINS): Add missing
- backslash.
-
- * Makefile.in (vmsdbgout.o): Depend on function.h.
-
- * vmsdbgout.c: Include function.h.
-
-2002-07-28 Alan Modra <amodra@bigpond.net.au>
-
- * prefix.c (update_path): Don't strip single `.' path components
- unless stripping a later `..' component. Exit loop as soon as
- a valid path is found.
-
-2002-07-27 Roger Sayle <roger@eyesopen.com>
-
- * builtins.def [DEF_GCC_BUILTIN]: Require an explicit ATTRS
- argument. Mark BUILT_IN_RETURN, BUILT_IN_EH_RETURN,
- BUILT_IN_LONGJMP and BUILT_IN_TRAP as noreturn, the ISO C99
- floating point unordered comparisons (e.g. __builtin_isgreater)
- as const, and leave the remaining GCC_BUILTINs unchanged.
-
- * c-decl.c (builtin_function): No need to explicitly mark
- BUILT_IN_RETURN and BUILT_IN_EH_RETURN as noreturn.
-
-2002-07-27 Roger Sayle <roger@eyesopen.com>
-
- * Makefile.in: rtlanal.o now depends upon real.h.
-
- * flags.h [flag_signaling_nans]: New flag.
- [HONOR_SNANS]: New macro.
-
- * toplev.c [flag_signaling_nans]: Initialize to false.
- (f_options): Add processing for "-fsignaling-nans".
- (set_fast_math_flags): Clear flag_signaling_nans with -ffast-math.
- (process_options): flag_signaling_nans implies flag_trapping_math.
-
- * c-common.c (cb_register_builtins): Define __SUPPORT_SNAN__
- when -fsignaling-nans. First step to implementing WG14's N965.
-
- * fold-const.c (fold) [MULT_EXPR]: Conditionalize transforming
- 1.0 * x into x, and -1.0 * x into -x on !HONOR_SNANS.
- [RDIV_EXPR]: Conditionalize x/1.0 into x on !HONOR_SNANS.
-
- * simplify-rtx.c (simplify_relational_operation): Conditionalize
- transforming abs(x) < 0.0 into false on !HONOR_SNANS.
-
- * rtlanal.c: #include real.c for TARGET_FLOAT_FORMAT definitions
- required by HONOR_SNANS. (may_trap_p): Floating point DIV, MOD,
- UDIV, UMOD, GE, GT, LE, LT and COMPARE may always trap with
- -fsignaling_nans. EQ and NE only trap for flag_signaling_nans
- not flag_trapping_math (i.e. HONOR_SNANS but not HONOR_NANS).
-
- * doc/invoke.texi: Document new -fsignaling-nans compiler option.
-
-2002-07-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (gengtype-lex.c): Work around a bug in flex.
- * gengtype-lex.l (YY_USE_PROTOS): Undef.
- (YY_DECL): Define.
-
-2002-07-27 Roger Sayle <roger@eyesopen.com>
-
- * doc/invoke.texi: Document that both -fno-builtin-foo and
- -fno-builtin are supported by the g++ front-end.
-
-2002-07-27 Stan Shebs <shebs@apple.com>
-
- * configure.in: Rename config_gtfiles to target_gtfiles.
- * configure: Regenerate.
- * doc/gty.texi: Update reference.
- * config.gcc (powerpc-*-darwin*): Set target_gtfiles
- instead of appending to it.
-
-2002-07-25 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.c (function_arg_advance): SPE vararg
- vectors are split into two registers.
- (function_arg): Same.
-
-Thu Jul 26 23:00:13 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * pa.md (extv): Check predicates before emitting extv_32.
-
-2002-07-27 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (rs6000_traceback_name): New var.
- (rs6000_traceback): New var.
- (rs6000_override_options): Set rs6000_traceback.
- (rs6000_output_function_epilogue): Implement traceback options.
- * config/rs6000/rs6000.h (TARGET_OPTIONS): Add "traceback=".
- (rs6000_traceback_name): Declare.
-
- * config/rs6000/rs6000.c (output_profile_hook): Don't generate profile
- label reference when NO_PROFILE_COUNTERS.
-
-2002-07-26 Jason Merrill <jason@redhat.com>
-
- * function.c (assign_parms): Handle frontend-directed pass by
- invisible reference.
-
-2002-07-26 Neil Booth <neil@daikokuya.co.uk>
-
- * doc/cppopts.texi: Update.
-
-2002-07-26 Neil Booth <neil@daikokuya.co.uk>
-
- * cppmacro.c (_cpp_create_definition): Don't attempt redefinition
- warnings on assertions.
-
-2002-07-26 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.h (RID_AND, RID_AND_EQ, RID_NOT, RID_NOT_EQ,
- RID_OR, RID_OR_EQ, RID_XOR, RID_XOR_EQ, RID_BITAND, RID_BITOR,
- RID_COMPL): Remove.
- * c-parse.in (rid_to_yy): Similarly.
-
-2002-07-26 Jason Merrill <jason@redhat.com>
-
- * c-dump.c: Resurrect.
- * tree-dump.c: Move C-specific stuff to c-dump.c.
- * c-common.h: Declare c_dump_tree.
- * c-lang.c (LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN): Define.
- * Makefile.in (C_AND_OBJC_OBJS): Add c-dump.o.
- (c-dump.o): New rule.
-
-2002-07-26 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.md: Enable patterns using rlwinm for
- PowerPC64. Replace "T" and "S" constraints with "n" when the
- predicate will do. Formatting fixes.
- (extzvsi_internal2): Use "andi.", "andis." and attr type of "compare"
- as for extzvsi_internal1.
-
-2002-07-25 Neil Booth <neil@daikokuya.co.uk>
-
- * dwarfout.c (VERSION_ASM_OP, DERIV_BEGIN_LABEL_FMT,
- DERIV_END_LABEL_FMT): Remove.
- (SL_BEGIN_LABEL_FMT, SL_END_LABEL_FMT): Move.
-
-2002-07-25 Neil Booth <neil@daikokuya.co.uk>
-
- * objc/objc-act.c (UTAG_STATICS, UTAG_PROTOCOL_LIST, USERTYPE):
- Remove.
-
-2002-07-25 Stan Shebs <shebs@apple.com>
-
- * config/rs6000/rs6000.c (rs6000_emit_prologue): Remove unused
- local var dwarfp.
- (output_compiler_stub): Remove unused locals.
- (output_call): Always initialize line number.
-
-Thu Jul 25 20:34:50 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (LOAD_EXTEND_OP): QImode zero-extends on SHmedia.
- * sh.md (truncdiqi2, movqi_media): Likewise.
-
-2002-07-25 Neil Booth <neil@daikokuya.co.uk>
-
- * gcse.c (obstack_chunk_alloc): Remove.
- (gcse_alloc): Fix to count allocated bytes.
- * collect2.c (SYMBOL__MAIN): Remove.
-
-2002-07-25 Neil Booth <neil@daikokuya.co.uk>
-
- * gcc.c (TARGET_EXECUTABLE_SUFFIX): Only used if
- HAVE_TARGET_EXECUTABLE_SUFFIX.
-
-Thu Jul 25 18:57:50 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * rtl.h (mem_attrs): Spell out more clearly the roles of ALIGN,
- SIZE, EXPR and OFFSET.
-
-2002-07-25 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (set_mem_attributes): Fix size and alignment thinkos
- in ARRAY_REF of DECL_P case.
-
-2002-07-25 Richard Sandiford <rsandifo@redhat.com>
-
- * doc/invoke.texi: Document -mabi=meabi, and expand on the EABI
- description. Document -mips32, -mips64, and the associated -march
- values. Describe the "mipsN" arguments to -march. Say that the
- -mipsN options are equivalent to -march. Reword the description
- of default type sizes.
- * toplev.h (target_flags_explicit): Declare.
- * toplev.c (target_flags_explicit): New var.
- (set_target_switch): Update target_flags_explicit.
- * config/mips/abi64.h (SUBTARGET_TARGET_OPTIONS): Undefine.
- * config/mips/elf64.h (MIPS_ISA_DEFAULT): Undefine.
- * config/mips/iris6.h (SUBTARGET_ASM_SPEC): -mabi=64 implies -mips3.
- * config/mips/isa3264.h (MIPS_ENABLE_EMBEDDED_O32): Undefine.
- * config/mips/mips.h (mips_cpu_info): New struct.
- (mips_cpu_string, mips_explicit_type_size_string): Remove.
- (mips_cpu_info_table, mips_arch_info, mips_tune_info): Declare.
- (MIPS_CPP_SET_PROCESSOR): New macro.
- (TARGET_CPP_BUILTINS): Declare a macro for each supported processor.
- Define _MIPS_ARCH and _MIPS_TUNE.
- (MIPS_ISA_DEFAULT): Don't provide a default value. Instead...
- (MIPS_CPU_STRING_DEFAULT): Set to "from-abi" if neither it nor
- MIPS_ISA_DEFAULT were already defined.
- (MULTILIB_DEFAULTS): Add MULTILIB_ABI_DEFAULT.
- (TARGET_OPTIONS): Remove -mcpu and -mexplicit-type-size.
- (ABI_NEEDS_32BIT_REGS, ABI_NEEDS_64BIT_REGS): New.
- (GAS_ASM_SPEC): Remove -march, -mcpu, -mgp* and -mabi rules.
- (ABI_GAS_ASM_SPEC): Remove.
- (MULTILIB_ABI_DEFAULT, ASM_ABI_DEFAULT_SPEC): New macros.
- (ASM_SPEC): Add -mgp32, -mgp64, -march, -mabi=eabi and -mabi=o64.
- Invoke %(asm_abi_default_spec) if no ABI was specified.
- (CC1_SPEC): Remove ISA -> register-size rules.
- (EXTRA_SPECS): Remove abi_gas_asm_spec. Add asm_abi_default_spec.
- * config/mips/mips.c (mips_arch_info, mips_tune_info): New vars.
- (mips_cpu_string, mips_explicit_type_size_string): Remove.
- (mips_cpu_info_table): New array.
- (mips_set_architecture, mips_set_tune): New fns.
- (override_options): Rework to make -mipsN equivalent to -march.
- Detect more erroneous cases, including those removed from CC1_SPEC.
- Don't change the ABI based on architecture, or vice versa.
- Unify logic with GAS.
- (mips_asm_file_start): Get architecture name from mips_arch_info.
- (mips_strict_matching_cpu_name_p, mips_matching_cpu_name_p): New fns.
- (mips_parse_cpu): Take the name of the option as argument. Handle
- 'from-abi'. Raise an error if the option is wrong.
- (mips_cpu_info_from_isa): New fn.
-
-2002-07-25 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md (tablejump_mips161): Use gen_rtx_LABEL_REF.
- (tablejump_mips162): Likewise.
-
-Thu Jul 25 10:23:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * simpify-rtx.c (simplify_subreg): Don't pass MODE_CC mode to
- int_mode_for_mode.
-
-2002-07-25 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-common.c (c_sizeof_or_alignof_type): Take a third argument for
- complaining.
- * c-common.h (c_sizeof): Adjust definition.
- (c_alignof): Likewise.
- * c-tree.h (c_sizeof_nowarn): Now macro.
- * c-typeck.c (c_sizeof_nowarn): Remove definition.
-
-2002-07-25 Neil Booth <neil@daikokuya.co.uk>
-
- * c-decl.c (c_decode_option): No need to handle switches
- cpplib handles.
-
-2002-07-24 Zack Weinberg <zack@codesourcery.com>
-
- * defaults.h (ASM_OUTPUT_TYPE_DIRECTIVE, ASM_OUTPUT_SIZE_DIRECTIVE,
- ASM_OUTPUT_MEASURED_SIZE): New default definitions of new macros.
- * doc/tm.texi: Document them. Also document SIZE_ASM_OP,
- TYPE_ASM_OP, and TYPE_OPERAND_FMT.
-
- * config/elfos.h, config/netbsd-aout.h, config/openbsd.h,
- config/alpha/elf.h, config/arm/elf.h, config/avr/avr.h,
- config/cris/aout.h, config/i386/freebsd-aout.h,
- config/i386/sco5.h, config/ia64/ia64.c, config/ip2k/ip2k.h,
- config/m68k/m68kelf.h, config/m68k/m68kv4.h, config/m88k/m88k.h,
- config/mcore/mcore-elf.h, config/mips/elf.h, config/mips/elf64.h,
- config/mips/iris6.h, config/mips/linux.h, config/pa/pa-linux.h,
- config/pa/pa64-hpux.h, config/rs6000/sysv4.h,
- config/xtensa/elf.h, config/xtensa/linux.h:
- Use the new macros.
- Where possible, remove redundant definitions of SIZE_ASM_OP,
- TYPE_ASM_OP, and TYPE_OPERAND_FMT.
-
-2002-07-24 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/eabi.h: Define TARGET_SPE_ABI, TARGET_SPE,
- TARGET_ISEL, and TARGET_FPRS.
-
- * doc/invoke.texi (RS/6000 and PowerPC Options): Document
- -mabi=spe, -mabi=no-spe, and -misel=.
-
- * config/rs6000/rs6000-protos.h: Add output_isel.
- Move vrsave_operation prototype here.
-
- * config/rs6000/rs6000.md (sminsi3): Allow pattern for TARGET_ISEL.
- (smaxsi3): Same.
- (uminsi3): Same.
- (umaxsi3): Same.
- (abssi2_nopower): Disallow when TARGET_ISEL.
- (*ne0): Same.
- (negsf2): Change to expand and rename old pattern to *negsf2.
- (abssf2): Change to expand and rename old pattern to *abssf2.
-
- New expanders: fix_truncsfsi2, floatunssisf2, floatsisf2,
- fixunssfsi2.
-
- Change patterns that check for TARGET_HARD_FLOAT or
- TARGET_SOFT_FLOAT to also check TARGET_FPRS.
-
- * config/rs6000/rs6000.c: New globals: rs6000_spe_abi,
- rs6000_isel, rs6000_fprs, rs6000_isel_string.
- (rs6000_override_options): Add 8540 case to
- processor_target_table.
- Set rs6000_isel for the 8540.
- Call rs6000_parse_isel_option.
- (enable_mask_for_builtins): New.
- (rs6000_parse_isel_option): New.
- (rs6000_parse_abi_options): Add spe and no-spe.
- (easy_fp_constant): Treat !TARGET_FPRS as soft-float.
- (rs6000_legitimize_address): Check for TARGET_FPRS when checking
- for TARGET_HARD_FLOAT.
- Add case for SPE_VECTOR_MODE.
- (rs6000_legitimize_reload_address): Handle SPE vector modes.
- (rs6000_legitimate_address): Disallow PRE_INC/PRE_DEC for SPE
- vector modes.
- Check for TARGET_FPRS when checking for TARGET_HARD_FLOAT.
- (rs6000_emit_move): Check for TARGET_FPRS.
- Add cases for SPE vector modes.
- (function_arg_boundary): Return 64 for SPE vector modes.
- (function_arg_advance): Check for TARGET_FPRS and
- Handle SPE vectors.
- (function_arg): Same.
- (setup_incoming_varargs): Check for TARGET_FPRS.
- (rs6000_va_arg): Same.
- (struct builtin_description): Un-constify mask field. Move up in
- file.
- (bdesc_2arg): Un-constify and add SPE builtins.
- (bdesc_1arg): Same.
- (bdesc_spe_predicates): New.
- (bdesc_spe_evsel): New.
- (rs6000_expand_unop_builtin): Add SPE 5-bit literal builtins.
- (rs6000_expand_binop_builtin): Same.
- (bdesc_2arg_spe): New.
- (spe_expand_builtin): New.
- (spe_expand_predicate_builtin): New.
- (spe_expand_evsel_builtin): New.
- (rs6000_expand_builtin): Call spe_expand_builtin for SPE.
- (rs6000_init_builtins): Initialize SPE builtins. Call
- rs6000_common_init_builtins.
- (altivec_init_builtins): Move all non-altivec builtin code to...
- (rs6000_common_init_builtins): ...here. New function.
- (branch_positive_comparison_operator): Allow NE code for SPE.
- (ccr_bit): Return correct ccr bit for SPE fp.
- (print_operand): Emit crnor in 'D' case for SPE.
- New case 't'.
- Add SPE code for 'y' case.
- (rs6000_generate_compare): Generate rtl for SPE fp.
- (output_cbranch): Handle SPE hard floats.
- (rs6000_emit_cmove): Handle isel.
- (rs6000_emit_int_cmove): New.
- (output_isel): New.
- (rs6000_stack_info): Adjust stack frame so GPRs are saved in
- 64-bits for SPE.
- (debug_stack_info): Add SPE info.
- (gen_frame_mem_offset): New.
- (rs6000_emit_prologue): Save GPRs in 64-bits for SPE abi.
- Change mode of frame pointer, when saving it, to Pmode.
- (rs6000_emit_epilogue): Restore GPRs in 64-bits for SPE abi.
- Misc cleanups and use gen_frame_mem_offset when appropriate.
-
- * config/rs6000/rs6000.h (processor_type): Add PROCESSOR_PPC8540.
- (TARGET_SPE_ABI): New.
- (TARGET_SPE): New.
- (TARGET_ISEL): New.
- (TARGET_FPRS): New.
- (FIXED_SCRATCH): New.
- (RTX_COSTS): Add PROCESSOR_PPC8540.
- (ASM_CPU_SPEC): Add case for 8540.
- (TARGET_OPTIONS): Add isel= case.
- (rs6000_spe_abi): New.
- (rs6000_isel): New.
- (rs6000_fprs): New.
- (rs6000_isel_string): New.
- (UNITS_PER_SPE_WORD): New.
- (LOCAL_ALIGNMENT): Adjust for SPE.
- (HARD_REGNO_MODE_OK): Same.
- (DATA_ALIGNMENT): Same.
- (MEMBER_TYPE_FORCES_BLK): New.
- (FIRST_PSEUDO_REGISTER): Set to 113.
- (FIXED_REGISTERS): Add SPE registers.
- (reg_class): Same.
- (REG_CLASS_NAMES): Same.
- (REG_CLASS_CONTENTS): Same.
- (REGNO_REG_CLASS): Same.
- (REGISTER_NAMES): Same.
- (DEBUG_REGISTER_NAMES): Same.
- (ADDITIONAL_REGISTER_NAMES): Same.
- (CALL_USED_REGISTERS): Same.
- (CALL_REALLY_USED_REGISTERS): Same.
- (SPE_ACC_REGNO): New.
- (SPEFSCR_REGNO): New.
- (SPE_SIMD_REGNO_P): New.
- (HARD_REGNO_NREGS): Adjust for SPE.
- (VECTOR_MODE_SUPPORTED_P): Same.
- (REGNO_REG_CLASS): Same.
- (FUNCTION_VALUE): Same.
- (LIBCALL_VALUE): Same.
- (LEGITIMATE_OFFSET_ADDRESS_P): Same.
- (SPE_VECTOR_MODE): New.
- (CONDITIONAL_REGISTER_USAGE): Disable FPRs when target does FP on
- the GPRs. Set FIXED_SCRATCH fixed in SPE case.
- (rs6000_stack): Add spe_gp_size, spe_padding_size,
- spe_gp_save_offset.
- (USE_FP_FOR_ARG_P): Check for TARGET_FPRS.
- (LEGITIMATE_LO_SUM_ADDRESS_P): Same.
- (SPE_CONST_OFFSET_OK): New.
- (rs6000_builtins): Add SPE builtins.
-
- * testsuite/gcc.dg/ppc-spe.c: New.
-
- * config/rs6000/eabispe.h: New.
-
- * config/rs6000/spe.h: New.
-
- * config/rs600/spe.md: New.
-
- * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define
- __SIMD__ for TARGET_SPE.
-
- * config.gcc: Add powerpc-*-eabispe* case.
- Add spe.h to user headers for powerpc.
-
-2002-07-24 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/elf.h (STARTFILE_SPEC): Undo previous change.
- * config/mips/elf64.h (STARTFILE_SPEC): Likewise.
- * config/mips/isa3264.h (STARTFILE_SPEC): Likewise.
-
-2002-07-24 Richard Henderson <rth@redhat.com>
-
- * expr.c (expand_expr) [TRY_FINALLY_EXPR]: Use GOTO_SUBROUTINE_EXPR
- form when not optimizing.
-
-2002-07-24 David Mosberger <davidm@hpl.hp.com>
-
- * config/ia64/ia64.c (gen_thread_pointer): Fix typo in marking
- thread_pointer_rtx as unchanging.
-
-2002-07-24 Michael Matz <matz@suse.de>
-
- * ra-colorize.c (INV_REG_ALLOC_ORDER): New macro.
- (free_reg): Use it.
-
-2002-07-24 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.md (arm_buneq, arm_bltgt): put '\' before ';' in output
- pattern.
- (arm_buneq_reversed, arm_bltgt_reversed): Likewise.
- (movsicc, movsfcc, movdfcc): FAIL if UNEQ or LTGT.
-
-2002-07-24 Chris Demetriou <cgd@broadcom.com>
-
- * config/mips/elf.h (STARTFILE_SPEC): Never include crt0.o.
- * config/mips/elf64.h (STARTFILE_SPEC): Likewise.
- * config/mips/isa3264.h (STARTFILE_SPEC): Do not redefine.
-
-Wed Jul 24 17:59:12 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * toplev.c (rest_of_compilation): Dump loops before clobbering
- the structure.
-
-Wed Jul 24 17:23:16 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * rtlanal.c (keep_with_call_p): Avoid overflow in fixed_regs.
-
-2002-07-24 Frank van der Linden <fvdl@wasabisystems.com>
-
- PR optimization/7291
- * config/i386/i386.c (ix86_expand_clrstr): Fix bzero alignment
- problem on x86_64.
-
-2002-07-24 Gabriel Dos Reis <gdr@nerim.net>
-
- * pretty-print.h: Add macros from cp/error.c
-
-2002-07-24 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000-protos.h (mask_operand_wrap): Declare.
- (mask64_2_operand): Declare.
- (build_mask64_2_operands): Declare.
- (and64_2_operand): Declare.
- (extract_MB): Declare.
- (extract_ME): Declare.
- * config/rs6000/rs6000.c (mask64_operand): Allow all ones. Remove
- CONST_DOUBLE code.
- (mask_operand_wrap): New insn predicate.
- (mask64_2_operand): Likewise.
- (and64_2_operand): Likewise.
- (build_mask64_2_operands): New function.
- (extract_MB): New function.
- (extract_ME): New function.
- (print_operand <case m,M>): Use extract_MB and extract_ME.
- (print_operand <case S>): Allow all ones. Remove CONST_DOUBLE support.
- * config/rs6000/rs6000.h (EXTRA_CONSTRAINT): Add 't'.
- (PREDICATE_CODES): Add and64_2_operand, mask_operand_wrap and
- mask64_2_operand. Remove CONST_DOUBLE from mask64_operand.
- * config/rs6000/rs6000.md (andsi3_internal3): New
- (andsi3_internal3+1): Enable split for powerpc64.
- (andsi3_internal3+2): New split.
- (andsi3_internal4): Renamed old andsi3_internal3.
- (andsi3_internal5): New.
- (andsi3_internal5+1): Enable split for powerpc64.
- (andsi3_internal5+2): New split.
- (andsi3_internal6, andsi3_internal7, andsi3_internal8): New.
- (anddi3): Handle 't' constraint.
- (anddi3+1): New split.
- (anddi3_internal2): Handle 't' constraint.
- (anddi3_internal2+1): New split.
- (anddi3_internal3): Handle 't' constraint.
- (anddi3_internal3+1): New split.
-
-2002-07-24 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.md: Remove scratch reg on insns using
- addze and similar (plus (comparison r1 r2) r3) insns. Add
- missing scratch reg in one case. Formatting fixes.
-
-2002-07-24 Neil Booth <neil@daikokuya.co.uk>
-
- * cppexp.c (parse_defined): Mark macro used.
- * cpphash.h (struct cpp_macro): New member "used".
- (_cpp_mark_macro_used, _cpp_warn_if_unused_macro): New.
- (struct cpp_reader): New member.
- * cppinit.c (cpp_finish_options): Set first_unused_line.
- (cpp_finish): Warn of unused macros if requested.
- (OPT_TABLE): New switches.
- (cpp_handle_option): Handle them.
- * cpplib.c (do_undef): Warn if macro unused.
- (do_ifdef, do_ifndef): Mark macro used.
- * cpplib.h (struct cpp_options): New member.
- * cppmacro.c (_cpp_warn_if_unused_macro): New.
- (enter_macro_context): Mark macro used.
- (_cpp_create_definition): Mark macro unused; warn if unused
- when redefined.
- * cpptrad.c (scan_out_logcial_line, push_replacement_text):
- Mark macros used.
- * doc/cppopts.texi: Update.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * dwarf2out.c (SECTION_ASM_OP,
- ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Remove.
- * system.h (SECTION_ASM_OP): Poison.
- * tree.c (FILE_FUNCTION_PREFIX_LEN): Remove.
- * config/alpha/alpha-interix.h, config/mips/linux.h
- (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Remove.
- * config/mmix/mmix-protos.h, config/mmix/mmix.c
- (mmix_asm_output_define_label_difference_symbol): Remove.
- * config/mmix/mmix.h
- (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Remove.
- * doc/tm.texi: Remove documentation.
-
-Tue Jul 23 21:49:24 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * recog.c (asm_operand_ok): Allow float CONST_VECTORs for 'F'.
- (constrain_operands): Likewise.
- * regclass.c (record_reg_classes): Likewise.
- * reload.c (find_reloads): Likewise.
- * doc/md.texi: Likewise.
-
- * reload.c (find_reloads_toplev): Use simplify_gen_subreg.
- * simplify-rtx.c (simplify_subreg): When converting to a non-int
- mode, try to convert to an integer mode of matching size first.
-
- * simplify-rtx.x (simplify_subreg): When constructing a CONST_VECTOR
- from individual subregs, check that each subreg has been generated
- sucessfully.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * genautomata.c (VLA_HWINT_SHORTEN, VLA_HWINT_LAST): Remove.
- * df.c (HANDLE_SUBREG, FOR_EACH_BB_IN_BITMAP_REV,
- FOR_EACH_BB_IN_SBITMAP): Remove.
- * gcse.c (NEVER_SET, FOLLOW_BACK_EDGES): Remove.
- * haifa-sched.c (DONE_PRIORITY, MAX_PRIORITY, TAIL_PRIORITY,
- LAUNCH_PRIORITY, DONE_PRIORITY_P, LOW_PRIORITY_P): Remove.
- * loop.c (PREFETCH_BLOACK_IN_LOOP_MIN,
- PREFETCH_LIMIT_TO_SIMULTANEOUS): Remove.
- * regrename.c (REGNO_MODE_OK_FOR_BASE_P): Remove.
-
-2002-07-23 Gabriel Dos Reis <gdr@nerim.net>
-
- * pretty-print.h: New file.
-
-2002-07-23 Paul Koning <pkoning@equallogic.com>
-
- * real.c (REAL_WORDS_BIG_ENDIAN): Make 1 for DEC.
- (LARGEST_EXPONENT_IS_NORMAL): Ditto.
- (VAX_HALFWORD_ORDER): Define (1 for DEC VAX, 0 otherwise).
- (TARGET_G_FLOAT): Default to 0 if not defined.
- (ieeetoe): New, common routine to convert target format floats
- to internal form.
- (e24toe, e53toe): Change to use ieeetoe, distinguish DEC
- vs. others.
- (e113toe): Change to use ieeetoe.
-
-2002-07-23 Roman Lechtchinsky <rl@cs.tu-berlin.de>
-
- * real.c (REAL_WORDS_BIG_ENDIAN): Make sure it is 0 for DEC and 1 for
- IBM.
- (e53toe): Assume IEEE if non of DEC, IBM and C4X is defined.
- (e64toe): Remove special cases for DEC and IBM. Remove support for
- ARM_EXTENDED_IEEE_FORMAT.
- (e24toe): Remove special cases for DEC.
- (significand_size): Simplify. Indent.
- (ieee_format, ieee_24, ieee_53, ieee_64, ieee_113): New.
- (etoieee, toieee): New.
- (etoe113, toe113, etoe64, toe64, etoe53, toe53, etoe24, toe24): Use
- etoieee and toieee for IEEE arithmetic.
-
-2002-07-23 Gabriel Dos Reis <gdr@nerim.net>
-
- * doc/extend.texi: Say ISO C90, not ISO C89.
- * doc/invoke.texi: Likewise.
- * doc/standards.texi: Likewise.
-
-2002-07-23 Steve Ellcey <sje@cup.hp.com>
-
- * gcc/explow.c (convert_memory_address): Fix conversion of CONSTs.
- Fix permutation of conversion and plus/mult.
- * gcc/builtins.c (expand_builtin_memcpy) Ensure return pointer is
- ptr_mode and not Pmode when POINTERS_EXTEND_UNSIGNED is defined.
- (expand_builtin_strncpy) Ditto.
- (expand_builtin_memset) Ditto.
-
-2002-07-23 Gabriel Dos Reis <gdr@nerim.net>
-
- Fix PR/7363:
- * c-common.c (c_sizeof_or_alignof_type): New function.
- (c_alignof): Remove definition.
- * c-common.h (c_sizeof, c_alignof): Define as macros.
- (c_sizeof_or_alignof_type): Declare.
- (my_friendly_assert): Moved from cp/cp-tree.h
- * c-typeck.c (c_sizeof): Remove definition.
-
-2002-07-23 Jan Hubicka <jh@suse.cz>
-
- * gcse.c (try_replace_reg): Use num_changes_pending.
- * recog.c (num_changes_pending): New function.
- (validate_replace_src): Use validate_repalce_src_group.
- (validate_replace_src_group): New.
- * recog.h (validate_repalce_src_group): New.
- (num_changes_pending): Likewise.
-
-Tue Jul 23 12:16:58 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * calls.c (emit_library_call_value_1): If
- FUNCTION_ARG_PASS_BY_REFERENCE is true, pretend this is neither
- libcall, const call nor pure call.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * config/m88k/m88k.h (SECTION_ASM_OP): Remove.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * vmsdbgout.c (SECTION_ASM_OP): Remove.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * config/i386/i386.c (AT_BP): Remove.
-
-2002-07-23 Neil Booth <neil@daikokuya.co.uk>
-
- * defaults.h (obstack_chunk_alloc, obstack_chunk_free):
- Default definition.
- * gcse.c: Don't define obstack_chunk_free.
- * collect2.c, conflict.c, df.c, diagnostic.c, fix-header.c,
- flow.c, gcc.c, genattrtab.c, genautomata.c, genflags.c, gensupport.c,
- integrate.c, loop.c, ra.c, read-rtl.c, regrename.c, reload1.c,
- reorg.c, tlink.c, tree.c, config/arm/arm.c, objc/objc-act.c:
- Don't define obstack macros.
-
-2002-07-22 Stephane Carrez <stcarrez@nerim.fr>
-
- PR target/6744
- * config/m68hc11/m68hc11.c (m68hc11_z_replacement): Also replace
- ASM_OPERANDS instructions.
-
-2002-07-22 Stephane Carrez <stcarrez@nerim.fr>
-
- PR target/7361
- * config/m68hc11/m68hc11.c (go_if_legitimate_address_internal): Accept
- constant addresses only on 68HC12.
-
-2002-07-22 Neil Booth <neil@daikokuya.co.uk>
-
- * cppfiles.c (stack_include_file): Correct test of whether
- a dependency should be output.
-
-2002-07-22 David Edelsohn <edelsohn@gnu.org>
-
- * collect2.c (is_ctor_dtor): Add other possible JOINER values.
-
-2002-07-22 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.md (movqi): If optimizing and we can create pseudos, use
- a ZERO_EXTEND to load from memory, then copy the result into the
- target.
- (movhi): Likewise, but only for ARMv4.
-
-2002-07-22 Neil Booth <neil@daikokuya.co.uk>
-
- * ssa-ccp.c (PHI_PARMS): Remove.
-
-2002-07-22 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.h (CLASS_CANNOT_CHANGE_MODE): Include FP_REGS
- on big-endian targets.
-
-2002-07-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * hwint.h (HOST_WIDE_INT_PRINT_DEC_SPACE,
- HOST_WIDE_INT_PRINT_UNSIGNED_SPACE,
- HOST_WIDEST_INT_PRINT_DEC_SPACE, HOST_WIDEST_INT_PRINT_DEC_SPACE):
- New formatting macros.
-
- * ra-debug.c (dump_static_insn_cost): Avoid string concatenation.
-
-Mon Jul 22 15:27:25 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * rtlanal.c (subreg_regno_offset): Return correct offset for
- big endian paradoxical subregs.
-
- * optabs.c (expand_vector_unop): Don't expand using sub_optab
- if we got the wrong mode.
-
- * hwint.c (define HOST_WIDE_INT_PRINT_DEC_C): New define.
- * genrecog.c (write_switch, write_cond): Use it.
- * genemit.c (gen_exp): Likewise.
-
-2002-07-22 Jakub Jelinek <jakub@redhat.com>
-
- * c-decl.c (build_compound_literal): Set decl TREE_READONLY from TYPE.
-
-2002-07-22 Jakub Jelinek <jakub@redhat.com>
-
- * c-decl.c (build_compound_literal): Defer compound literal decls
- until until file end to emit them only if they are actually used.
-
-2002-07-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * ra-build.c (check_conflict_numbers): Hide unused function.
- (livethrough_conflicts_bb): Avoid automatic aggregate
- initialization.
- (parts_to_webs_1): Avoid `U' integer constant modifier.
- (conflicts_between_webs): Wrap a variable in the macro controlling
- its usage.
- * ra-debug.c (ra_debug_msg): Use VA_OPEN/VA_CLOSE.
- (dump_igraph, dump_graph_cost): Avoid string concatenation
- (dump_static_insn_cost): Avoid automatic aggregate
- initialization.
- * ra-rewrite.c (insert_stores): Avoid automatic aggregate
- initialization.
- (dump_cost): Avoid string concatenation
-
-2002-07-21 Richard Henderson <rth@redhat.com>
-
- * expr.c (expand_expr) [TRY_FINALLY_EXPR]: Don't use
- GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded.
-
-2002-07-21 Richard Henderson <rth@redhat.com>
-
- * unroll.c (find_splittable_givs): Do not split DEST_ADDR givs
- that are not unrolled completely.
-
-2002-07-21 Richard Henderson <rth@redhat.com>
-
- * loop.h (LOOP_AUTO_UNROLL): Rename from LOOP_FIRST_PASS.
- * loop.c (strength_reduce): Update.
- * toplev.c (rest_of_compilation): Do unrolling in the first
- loop pass, not the second.
-
-2002-07-21 Richard Henderson <rth@redhat.com>
-
- * emit-rtl.c (set_mem_attributes): Preserve indirection of PARM_DECL
- when flag_argument_noalias == 2.
- * alias.c (nonoverlapping_memrefs_p): Handle that.
- * print-rtl.c (print_mem_expr): Likewise.
-
-2002-07-21 Hartmut Schirmer <hartmut.schirmer@arcor.de>
-
- * libgcc2.c (__divdi3, __moddi3): Use unary minus operator
- instead of __negdi2 directly.
-
-2002-07-21 Neil Booth <neil@daikokuya.co.uk>
-
- * gengenrtl.c (gencode): Don't define obstack_alloc_rtx.
- * function.c (SYMBOL__MAIN): Remove definition.
- * global.c (SET_CONFLICT, REGBITP, ALLOCNO_LIVE_P): Remove.
- * predict.c (PROB_NEVER, PROB_LIKELY, PROB_UNLIKELY): Remove.
- * profile.c (GCOV_INDEX_TO_BB): Remove.
- * sched-rgn.c (ABS_VALUE, MIN_DIFF_PRIORITY, MIN_PROB_DIFF): Remove.
- * simplify-rtx.c (FIXED_BASE_PLUS_P): Remove.
-
-2002-07-21 Neil Booth <neil@daikokuya.co.uk>
-
- * c-lex.c (GET_ENVIRONMENT): Remove.
- * collect2.c (GET_ENV_PATH_LIST): Remove.
- (prefix_from_env): Use GET_ENVIRONMENT.
- * cppinit.c (GET_ENV_PATH_LIST): Remove.
- (init_standard_includes): Use GET_ENVIRONMENT.
- * defaults.h (GET_ENVIRONMENT): Define here if not already.
- * gcc.c (GET_ENV_PATH_LIST): Remove.
- (make_relative_prefix, process_command): Update.
- * protoize.c (GET_ENV_PATH_LIST): Remove.
- (do_processing): Update.
-
-2002-07-21 Gabriel Dos Reis <gdr@nerim.net>
-
- * c-decl.c (build_array_declarator): Say 'ISO C90', not 'ISO C89'.
- (grokdeclarator): Likewise.
- * c-format.c (C_STD_NAME): Likewise.
- * c-lex.c (interpret_integer): Likewise.
- * c-typeck.c (build_array_ref): Likewise.
- * cpplex.c (_cpp_lex_direct): Likewise.
- * toplev.c (documented_lang_options): Likewise.
-
-2002-07-21 Neil Booth <neil@daikokuya.co.uk>
-
- * c-format.c (T99_I, T99_UI): Remove.
-
-2002-07-21 Neil Booth <neil@daikokuya.co.uk>
-
- * c-typeck.c (SAVE_SPELLING_DEPTH): Remove.
-
-Sun Jul 21 21:36:41 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * gcse.c (do_local_cprop): Do not extend lifetimes of registers set by
- do_local_cprop.
-
-2002-07-21 Andreas Jaeger <aj@suse.de>
-
- * reload1.c (fixup_abnormal_edges): Remove unused variable.
-
-2002-07-21 Bernd Schmidt <bernds@redhat.com>
-
- Improvements for the ifcvt pass from Michael Meissner, with patches
- by Richard Sandiford <rsandifo@redhat.com>
- * basic-block.h (struct ce_if_block, ce_if_block_t): New types.
- * ifcvt.c (cond_exec_changed_p): New static variable.
- (last_active_insn): New function, renamed from last_active_insn_p
- and changed to return the last active insn in a basic block. All
- callers updated.
- (block_fallthru): New function.
- (cond_exec_process_insns): New argument CE_INFO. Pass it to
- IFCVT_MODIFY_INSN. All callers updated.
- Return false if START or END are NULL.
- Handle case where we're processing an insn that is already
- conditional.
-
- (noce_process_if_block): CE_INFO argument rather than
- multiple args containing the involved basic blocks. All callers
- changed.
- (process_if_block, merge_if_block, find_if_block,
- cond_exec_process_if_block): Likewise.
-
- (cond_exec_process_if_block): New arg DO_MULTIPLE_P. All callers
- changed.
- Use new function last_active_insn to simplify some code.
- New code to handle multiple tests.
- Call IFCVT_MODIFY_CANCEL in all failure cases, otherwise set
- cond_exec_changed_p to TRUE.
-
- (process_if_block): New code to handle multiple tests.
- (merge_if_block): Likewise.
- (find_if_header): New arg PASS. Changed to return the currently
- processed basic block or NULL instead of true/false. All callers
- changed.
- Call IFCVT_INIT_EXTRA_FIELDS.
- (block_jumps_and_fallthru_p): New function.
- (find_if_block): Discover opportunities to convert multiple tests.
- Add additional debugging output.
- Update the ce_info structure before returning.
-
- (if_convert): Run multiple passes of if-conversion.
- * doc/tm.texi (IFCVT_MODIFY_TESTS, IFCVT_MODIFY_INSN,
- IFCVT_MODIFY_FINAL, IFCVT_MODIFY_CANCEL, IFCVT_MODIFY_MULTIPLE_TESTS,
- IFCVT_INIT_EXTRA_FIELDS, IFCVT_EXTRA_FIELDS): Update documentation for
- these macros.
-
-Sun Jul 21 00:54:54 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * gcse.c: Include cselib.h
- (constptop_register): Break out from ...
- (cprop_insn): ... here; kill basic_block argument.
- (do_local_cprop, local_cprop_pass): New functions.
- (one_cprop_pass): Call local_cprop_pass.
-
-2002-07-20 Roger Sayle <roger@eyesopen.com>
-
- * simplify-rtx.c (simplify_relational_operation): Optimize
- abs(x) < 0.0 (and abs(x) >= 0.0 when using -ffast-math).
-
-2002-07-20 Michae Matz <matz@suse.de>
-
- * ra-build.c: (remember_web_was_spilled): Use GENERAL_REGS.
-
-2002-07-20 Neil Booth <neil@daikokuya.co.uk>
-
- * cppexp.c (struct op): Add token pointer.
- (check_promotion, CHECK_PROMOTION): New.
- (optab): Update.
- (_cpp_parse_expr): Update, use token pointer of struct op.
- (reduce): Warn about change of sign owing to promotion.
- * cppinit.c (cpp_handle_option): New warning if -Wall.
- * cpplib.h (struct cpp_options): New member.
-
-2002-07-19 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md: Remove ppc630 fpcompare from single
- fpu list. Separate Power4 compare and delayed_compare. Correct
- Power4 fpcompare.
- (fix_truncdfsi2_internal): Restore FPR preference.
- * config/rs6000/t-aix43 (MULTILIB_MATCHES): Add mcpu?power3,
- mcpu?power4, mcpu?604e. Remove mpower, mpower2, mpowerpc.
-
-2002-07-19 Momchil Velikov <velco@fadata.bg>
-
- * reload1.c (reload_as_needed): Duplicate oldpat.
-
-2002-07-20 Alan Modra <amodra@bigpond.net.au>
-
- PR optimization/7130
- * loop.h (struct loop_info): Add "preconditioned".
- * unroll.c (unroll_loop): Set it.
- * doloop.c (doloop_modify_runtime): Correct count for unrolled loops.
-
-2002-07-19 Zack Weinberg <zack@codesourcery.com>
-
- * rtl.def (CODE_LABEL): Remove slot 8.
- * rtl.h (struct rtx_def): Document new uses of jump and call fields.
- (LABEL_ALTERNATE_NAME): Delete.
- (LABEL_KIND, SET_LABEL_KIND, LABEL_ALT_ENTRY_P): New.
- * defaults.h: Remove default for ASM_OUTPUT_ALTERNATE_LABEL_NAME.
-
- * final.c (output_alternate_entry_point): New.
- (final_scan_insn): Use it instead of
- ASM_OUTPUT_ALTERNATE_LABEL_NAME. Do not consider possibility
- of a case label being an alternate entry point.
-
- * cfgbuild.c (make_edges, find_bb_boundaries): Use LABEL_ALT_ENTRY_P.
- * emit-rtl.c (gen_label_rtx): Adjust call to gen_rtx_CODE_LABEL.
- Do not clear LABEL_NUSES (unnecessary) or LABEL_ALTERNATE_NAME
- (field deleted).
- * print-rtl.c, ra-debug.c: Update code to output CODE_LABELs.
-
- * doc/rtl.texi: Document LABEL_KIND, SET_LABEL_KIND, and
- LABEL_ALT_ENTRY_P; not LABEL_ALTERNATE_NAME.
- * doc/tm.texi: Delete documentation of
- ASM_OUTPUT_ALTERNATE_LABEL_NAME.
-
-2002-07-19 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * config/mips/iris5gas.h (DWARF2_DEBUGGING_INFO): Define.
- (PREFERRED_DEBUGGING_TYPE): Use DWARF2_DEBUG.
- (LINK_SPEC): Define.
- (STARTFILE_SPEC): Define.
- (ENDFILE_SPEC): Define.
-
- * config/mips/iris6-o32.h (LINK_SPEC): Move ...
- * config/mips/iris6-o32-as.h (LINK_SPEC): ... here.
-
- * config/mips/iris6-o32-gas.h: New file.
- * config.gcc (mips-sgi-irix6*o32): Use it.
-
- * config/mips/t-iris5-gas: New file.
- * config.gcc (mips-sgi-irix6*o32, mips-sgi-irix5*): Use it.
-
-2002-07-19 Neil Booth <neil@daikokuya.co.uk>
-
- * cppexp.c (ALWAYS_EVAL): Remove.
- (optab, reduce): Always evaluate.
- (num_unary_op, num_binary_op, num_div_op): Issue diagnostics
- only if not skipping evaluation.
-
-2002-07-19 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * config/avr/avr.c (debug_hard_reg_set): Remove.
-
-2002-07-19 Chris Demetriou <cgd@broadcom.com>
-
- * gcc.c (cpp_options): Include "%1" (cc1_spec).
-
-2002-07-19 Richard Henderson <rth@redhat.com>
-
- * loop.c (loop_givs_rescan): Delete the REG_EQUAL note, not the insn.
-
-2002-07-19 Alan Modra <amodra@bigpond.net.au>
-
- * prefix.c (update_path): Don't zap single `.' path components
- unless followed by another `.' and fix typo last patch.
-
-2002-07-18 Neil Booth <neil@daikokuya.co.uk>
-
- * cppexp.c (cpp_num_mul): Remove unused parameter.
- (UNARY, BINARY, OTHER, binary_handler): Remove.
- (ALWAYS_EVAL): New.
- (optab): Update.
- (reduce): Refactor to a large switch, don't use a function
- pointer.
-
-2002-07-18 Bo Thorsen <bo@berlioz.suse.de>
-
- * config/i386/linux64.h (STARTFILE_PREFIX_SPEC): Define this always.
-
-Thu Jul 18 19:39:18 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh-protos.h (sh_expand_unop_v2sf): Move inside #ifdef RTX_CODE guard.
- (sh_expand_binop_v2sf): Likewise.
- * sh.c (machine_dependent_reorg): Add move for UNSPEC_MOVA.
- (int_gpr_dest, trunc_hi_operand): New functions.
- * sh.h (PREDICATE_CODES): Add any_register_operand, int_gpr_dest and
- trunc_hi_operand.
- (SPECIAL_MODE_PREDICATES, any_register_operand): Define.
- * sh.md (cmpeqdi_t+1): Remove comments that genrecog warns about.
- (adddi3_compact+1, subdi3_compact+1, ashlsi3_n+1, ashlhi3+1): Likewise.
- (ashrsi2_16+1, ashrsi2_31+1, lshrsi3_n+1, ashrdi3+[12]): Likewise.
- (and_shl_scratch+[12], zero_extendhidi2+1): Likewise.
- (zero_extendhisi2_media+1, extendhidi2+1, extendqidi2+1): Likewise.
- (extendhisi2_media+1, extendqisi2_media+1): Likewise.
- (movsi_media_nofpu+[12], movhi_media+1, movdi_media_nofpu+1): Likewise.
- (movdi_const_16bit+[12], movdf_i4+[123], reload_outdf+[2-5]): Likewise.
- (movsf_ie+1): Likewise.
- (loaddi_trunc): Use int_gpr_dest predicate.
- (use_sfunc_addr, indirect_jump_scratch, sibcall_compact): Add mode(s).
- (mova, mova_const, GOTaddr2picreg, ptrel, casesi_worker_0): Likewise.
- (casesi_worker_0+[12], casesi_worker): Likewise.
- (shcompact_preserve_incoming_args): Likewise.
- (mov_nop): Use any_register_operand predicate.
- (mperm_w0): Use trunc_hi_operand predicate.
-
-2002-07-18 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa-linux.h (DWARF2_UNWIND_INFO): Delete define.
- * pa.h (EH_RETURN_DATA_REGNO): Revise TARGET_64BIT and correct
- numbering.
-
-2002-07-18 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.c (output_deferred_plabels): Remove unused millicode enum mulU.
-
-2002-07-18 Richard Henderson <rth@redhat.com>
-
- PR optimization/7147
- * ifcvt.c (noce_get_condition): Make certain that the condition
- is valid at JUMP.
-
-Thu Jul 18 13:44:51 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (barrier_align, push): Shut up compiler warnings.
- (initial_elimination_offset,sh_media_init_builtins): Likewise.
- (reg_no_subreg_operand): Delete.
-
-2002-07-17 Bo Thorsen <bo@suse.de>
-
- * config/i386/linux64.h (LINK_SPEC): Remove bogus -Y option.
- (STARTFILE_PREFIX_SPEC): Define for NATIVE_CROSS compilations.
- (STARTFILE_SPEC): Remove hardcoded library paths.
- (ENDFILE_SPEC): Likewise.
-
-Thu Jul 18 09:38:59 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * gcse.c (hoist_expr_reaches_here_p): Stop once expr_bb is reached.
-
- * gcse.c (try_replace_reg): Do not return false positives.
-
-2002-07-18 Alan Modra <amodra@bigpond.net.au>
-
- * prefix.c: (update_path): Strip ".." components when prior dir
- doesn't exist. Pass correct var to UPDATE_PATH_HOST_CANONICALIZE.
-
- * config/rs6000/sysv4.h (ASM_OUTPUT_REG_PUSH): Remove 64-bit support.
- (ASM_OUTPUT_REG_POP): Likewise.
-
-2002-07-18 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/rs6000.c (first_reg_to_save): Remove bogus
- adjustments to first_reg for profiling case.
- (output_function_profiler): Correct lr save slot for ABI_AIX_NODESC.
- Disable profiling for 64 bit code on both ABI_V4 and ABI_AIX_NODESC.
- Save static chain reg to sp + 12 on ABI_AIX_NODESC.
- * config/rs6000/sysv4.h (ASM_OUTPUT_REG_PUSH): Define.
- (ASM_OUTPUT_REG_POP): Define.
- * config/rs6000/linux64.h (ASM_OUTPUT_REG_PUSH): Undef.
- (ASM_OUTPUT_REG_POP): Undef.
-
-2002-07-17 Neil Booth <neil@daikokuya.co.uk>
-
- * cpplib.c (do_sccs): Handle #sccs on all systems.
- * system.h (SCCS_DIRECTIVE): Poison.
- * config/darwin.h, config/freebsd.h, config/netbsd.h,
- config/ptx4.h, config/svr3.h, config/svr4.h, config/alpha/elf.h,
- config/arm/linux-elf.h, config/c4x/c4x.h, config/d30v/d30v.h,
- config/i370/i370.h, config/i386/gas.h, config/i386/sco5.h,
- config/i960/i960.h, config/m68hc11/m68hc11.h, config/m68k/3b1.h,
- config/m68k/3b1g.h, config/m68k/crds.h, config/m68k/mot3300.h,
- config/m68k/pbb.h, config/m88k/m88k.h, config/mips/mips.h,
- config/sparc/pbd.h, config/stormy16/stormy16.h, config/vax/vaxv.h:
- Remove all references to SCCS_DIRECTIVE.
- * doc/cpp.texi, doc/tm.texi: Update.
-
-Wed Jul 17 19:23:32 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * regrename.c (maybe_mode_change): New function.
- (find_oldest_value_reg, copyprop_hardreg_forward_1): Use it.
-
-2002-07-17 Rodney Brown <rbrown64@csc.com.au>
-
- * config/i386/i386.c (ix86_expand_int_movcc): In the general case
- suppress addition when either ct or cf are zero.
-
-2002-07-17 Eric Botcazou <ebotcazou@multimania.com>
- Glen Nakamura <glen@imodulo.com>
-
- PR optimization/6713
- * loop.c (loop_givs_rescan): Explicitly delete the insn that
- sets a non-replaceable giv after issuing the new one.
-
-2002-07-17 Neil Booth <neil@daikokuya.co.uk>
-
- * cppexp.c (cpp_interpret_integer, append_digit, parse_defined,
- eval_token): Clarify and correct use of "bool" variables.
- * cpplib.h (struct cpp_options): Similarly.
- * cppmacro.c (parse_params, _cpp_save_parameter): Ditto.
- * cpptrad.c (recursive_macro): Similarly.
-
-Wed Jul 17 17:08:06 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * config/sh/lib1funcs.asm (udivsi3_i4): Implement SHcompact version in
- SHmedia code.
-
- * sh.md (cmpgtudi_media): Remove spurious @.
-
- * config/sh/lib1funcs.asm (FMOVD_WORKS): Don't define for little endian.
- * sh.h (OVERRIDE_OPTIONS): Don't set FMOVD_BIT for little endian.
-
- * config/sh/lib1funcs.asm (init_trampoline): New entry point.
- * sh-protos.h (sh_initialize_trampoline): Declare.
- * sh.c (sh_initialize_trampoline): New function.
- * sh.h (TRAMPOLINE_SIZE): Only 24 for TARGET_SHMEDIA32.
- (TRAMPOLINE_ALIGNMENT): Need cache-line alignment for TARGET_SHMEDIA.
- (INITIALIZE_TRAMPOLINE): Call sh_initialize_trampoline.
- (TRAMPOLINE_ADJUST_ADDRESS): Not needed for SHcompact.
- * sh.md (initialize_trampoline, double_shori): New patterns.
- (initialize_trampoline_compact): Likewise.
- (shmedia32_initialize_trampoline_big): Remove.
- (shmedia32_initialize_trampoline_little): Likewise.
-
- * sh-protos.h (binary_float_operator): Remove declaration.
- (sh_expand_unop_v2sf, sh_expand_binop_v2sf): Declare.
- * sh.c (print_operand, case 'N'): Check against CONST0_RTX.
- (unary_float_operator, sh_expand_unop_v2sf): New functions.
- (sh_expand_binop_v2sf): Likewise.
- (zero_vec_operand): Delete.
- (SH_BLTIN_UDI): New builtin shared signature define. Renumbered
- all non-shared ones.
- (bdesc): Change all the mextr builtins to use SH_BLTIN_UDI.
- Enable nsb and byterev.
- * sh.h (CONDITIONAL_REGISTER_USAGE): Initialize DF_HI_REGS.
- (HARD_REGNO_MODE_OK): Allow TImode in fp regs. Allow V2SFmode
- in general regs.
- (enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add DF_HI_REGS.
- (SECONDARY_OUTPUT_RELOAD_CLASS): Likewise. Remove clause for
- immediate operands.
- (SECONDARY_INPUT_RELOAD_CLASS): Add clause for immediate operands.
- Add DF_HI_REGS.
- (CLASS_CANNOT_CHANGE_MODE, CLASS_CANNOT_CHANGE_MODE_P): Allow
- lowpart fp regs - only for big endian for now.
- (LEGITIMATE_CONSTANT_P): Don't allow nonzero float vectors
- when FPU is in use.
- (EXTRA_CONTRAINT_U): Check against CONST0_RTX.
- (LOAD_EXTEND_OP): NIL for SImode.
- (REGISTER_MOVE_COST): Add DF_HI_REGS. Const for moves between
- general and fp registers is 4.
- PREDICATE_CODES: Amend binary_float_operator entry.
- Remove zero_vec_operand. Add unary_float_operator.
- * sh.md (udivsi3_i4_media): Use truncate instead of paradoxical
- subreg SET_DEST.
- (truncdisi2, truncdihi2, movv2sf): Allow memory destinations.
- (truncdiqi2): Do sign extension.
- (movsi_media, movdi_media): Allow to use r63 to an fp register.
- (movdf_media, movsf_media): Likewise.
- (movv2sf_i, movv2sf_i+1): Don't use f{ld,st}.p or SUBREGS.
- Collapse to one define_insn_and_split. Allow immediate sources.
- (addv2sf3, subv2sf3, mulv2sf3, divv2sf3): New patterns.
- (movv4sf_i): Allow immediate sources. Use simplify_gen_subreg.
- (movv4sf): Allow immediate sources.
- (movsf_media_nofpu+1): Don't split moves to FP registers.
- (unary_sf_op, binary_sf_op, mshflo_w_x, concat_v2sf): New patterns.
- (movv8qi_i+3): Check against CONST0_RTX.
- (mextr1, mextr2. mextr3. mextr4, mextr5, mextr6, mextr7): Use DImode
- for input and output operands. Fix argument 3 to gen_mextr_rl.
- (mmul23_wl, mmul01_wl, mmulsum_wq_i): s/const_vector/parallel/
- (msad_ubq_i, mshf4_b, mshf0_b, mshf4_l, mshf0_l, mshf4_w): Likewise.
- (mshf0_w, fipr, ftrv): Likewise.
- (mshfhi_l_di): Now insn_and_split. Can handle FP regs.
-
-2002-07-17 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
-
- * arm.h (ARM_NUM_INTS, ARM_NUM_REGS, ARM_NUM_REGS2): Renamed from
- NUM_INTS, NUM_REGS and ARM_NUM_REGS2 respectively. All uses changed.
- * arm.c: Similarly.
-
-2002-07-17 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips-protos.h (mips_sign_extend): Declare.
- * config/mips/mips.h (MASK_DEBUG_H, TARGET_DEBUG_H_MODE): Remove.
- (TARGET_SWITCHES): Remove debugh.
- (ISA_HAS_TRUNC_W): New macro.
- (CLASS_CANNOT_CHANGE_MODE): Include FP_REGS if TARGET_FLOAT64.
- (PREDICATE_CODES): Remove se_nonimmediate_operand.
- * config/mips/mips.c (movdi_operand): Allow sign-extensions of
- any SImode move_operand.
- (se_nonimmediate_operand): Remove.
- (mips_sign_extend): New.
- (mips_move_2words): Use it for sign-extended source operands.
- (override_options): Allow integers to be put into single FPRs.
- (mips_secondary_reload_class): Handle integers in float registers.
- * config/mips/mips.md (extendsidi2): Turn into a define_expand.
- (fix_truncsfsi2, fix_truncdfsi2): Likewise.
- (fix_truncdfsi2_insn, fix_truncdfsi2_macro): New.
- (fix_truncsfsi2_insn, fix_truncsfsi2_macro): New.
- (fix_truncdfdi2): Provide only a single alternative, in which the
- integer is in a float register. Depend on TARGET_FLOAT64 rather
- than TARGET_64BIT.
- (fix_truncsfdi2, floatdidf2, floatdisf2): Likewise.
- (floatsidf2, floatsisf2): Likewise, but no TARGET_FLOAT64 dependency.
- (movdi_internal2): Don't allow the source operand to be sign-extended.
- Add alternatives for float registers.
- (*movdi_internal2_extend): New. Version of movdi_internal2 that
- allows sign-extension.
- (*movdi_internal2_mips16): Name the existing mips16 movdi pattern.
- (movsi_internal2): Rename to movsi_internal. Add alternatives for
- float registers. Remove TARGET_DEBUG_H_MODE test.
- (movhi_internal1): Rename to movhi_internal. Don't check
- TARGET_DEBUG_H_MODE. Fix transposed *d and *f source constraints.
- (movqi_internal1): Rename to movqi_internal and remove
- TARGET_DEBUG_H_MODE dependency.
- (movsi_internal1, movhi_internal2, movqi_internal2): Remove.
-
-2002-07-16 Jim Wilson <wilson@redhat.com>
-
- * toplev.c (lang_dependent_init): Create function context for
- init_expr_once.
-
-2002-07-16 Hans-Peter Nilsson <hp@axis.com>
-
- * config/cris/linux.h (CRIS_LINK_SUBTARGET_SPEC): Don't
- --gc-sections if -r.
- * config/cris/cris.h: Ditto.
-
-2002-07-16 Rodney Brown <rbrown64@csc.com.au>
-
- * config/i386/i386.c (ix86_expand_int_movcc): In the case where
- the comparison directly gives a mask suppress addition when cf is
- zero by complementing the mask.
-
-2002-07-16 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * Makefile.in: Delete references to enquire.
- * enquire.c: Move to contrib.
-
-2002-07-16 Stan Shebs <shebs@apple.com>
-
- * config/darwin.h (ASM_OUTPUT_LABEL): Move to here from
- config/rs6000/darwin.h.
- (ASM_OUTPUT_SKIP): Ditto.
- (TEXT_SECTION_ASM_OP): Ditto.
- (DATA_SECTION_ASM_OP): Ditto.
- (ASM_APP_ON): Define.
- (ASM_APP_OFF): Define.
- * config/rs6000/darwin.h (ASM_OUTPUT_LABEL, ASM_OUTPUT_SKIP,
- TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP): Remove.
-
- * config/darwin.c (func_name_maybe_scoped): Remove unused decl.
- (machopic_function_base_name): Declare result to be const.
- (machopic_non_lazy_ptr_name): Ditto.
- (machopic_stub_name): Ditto.
- * config/darwin-protos.h: Ditto for the prototypes.
-
-Wed Jul 17 00:22:39 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * m68hc11.c (m68hc11_reorg): Do not rebuild CFG.
-
-Wed Jul 17 00:20:48 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (prefetch): Fix for 64bit mode.
- (prefetch_sse_rex, prefetch_3dnow_rex): New patterns.
-
-Wed Jul 17 00:19:20 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.h (MACHINE_DEPENDENT_REORG): New macro.
- * i386.c (x86_machine_dependent_reorg): New function.
- * i386-protos.h (x86_machine_dependent_reorg): Declare.
-
-2002-07-16 Zack Weinberg <zack@codesourcery.com>
-
- * builtins.c (std_expand_builtin_va_start): Remove unused
- first argument.
- (expand_builtin_va_start): Call EXPAND_BUILTIN_VA_START and
- std_expand_builtin_va_start with just two arguments.
- * expr.h: Update prototypes.
-
- * alpha-protos.h, alpha.h, alpha.c, arc-protos.h, arc.h,
- arc.c, d30v-protos.h, d30v.h, d30v.c, i386-protos.h, i386.h,
- i386.c, i960-protos.h, i960.h, i960.c, m88k-protos.h, m88k.h,
- m88k.c, mips-protos.h, mips.h, mips.c, mn10300-protos.h,
- mn10300.h, mn10300.c, pa-protos.h, pa.h, pa.c,
- rs6000-protos.h, rs6000.h, rs6000.c, s390-protos.h, s390.h,
- s390.c, sh-protos.h, sh.h, sh.c, sparc-protos.h, sparc.h,
- sparc.c, stormy16-protos.h, stormy16.h, stormy16.c,
- xtensa-protos.h, xtensa.h, xtensa.c: Remove unused first
- argument from all implementations of EXPAND_BUILTIN_VA_START
- and all uses of std_expand_builtin_va_start.
-
-Tue Jul 16 19:32:58 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * regrename.c (copy_value): Don't record high part copies.
-
-2002-07-16 Steve Ellcey <sje@cup.hp.com>
-
- * gcc/config/pa/long_double.h (FIXUNS_TRUNCTFDI2_LIBCALL): New define.
- (fixunstfdi_libfunc): Change to use FIXUNS_TRUNCTFDI2_LIBCALL.
- * gcc/config/pa/quadlib.c (_U_Qfcnvfxt_quad_to_udbl): New function.
-
-2002-07-16 Ian Dall <ian@sibyl.beware.dropbear.id.au>
-
- * doc/invoke.texi (NS32K Options): Document -mieee-compare option
-
- * config/ns32k/ns32k.md (addsi3, *frame_addr, *stack_addr): merge
- into addsi3 using register class "x" and "y".
-
- * config/ns32k/ns32k.md (*madddf, *maddsf, *msubdf, *msubsf):
- "earlyclobber" constraint modifier for some alternative.
-
- * config/ns32k/ns32k.md (tstdf, tstsf, cmpdf, cmpsf, blt, ble)
- (*ble, *blt): Flag to indicate bCOND and sCOND should check for
- unordered.
- config/ns32k/ns32k.h (CC_UNORD): define corresponding mask.
-
- * config/ns32k/ns32k.h (TARGET_IEEE_COMPARE, MASK_IEEE_COMPARE)
- (TARGET_SWITCHES): Add -mieee-compare option.
- (OVERRIDE_OPTIONS): 32332 is a subset of
- 32532. Don't use IEEE_COMPARE -funsafe-math-optimizations.
- (TARGET_SWITCHES): Fix description of bitfield option.
- * config/ns32k/netbsd.h (TARGET_DEFAULT): Add
- -mieee-compare option. Remove 32332 flag.
-
-2002-07-16 Steve Ellcey <sje@cup.hp.com>
-
- * explow.c (convert_memory_address): Remove special handling
- when POINTERS_EXTEND_UNSIGNED < 0.
- * config/ia64.md (movsi_symbolic): New instruction for ILP32 mode.
- (movedi_symbolic): Fix typo.
- (load_fptr): Remove mode restriction so it works for SI and DI.
- (load_fptr_internal1): Ditto.
- (load_gprel): Ditto.
- (load_symptr_internal1): Ditto.
- (call_pic): Ditto.
- * config/ia64.c (call_operand): Modify mode check.
- (ia64_expand_load_address): Handle DI and SI addresses and symbols.
- (ia64_expand_move): Ditto.
- (ia64_assemble_integer): Handle SImode function pointers.
- (ia64_expand_fetch_and_op): Handle SImode mem addresses.
- (ia64_expand_op_and_fetch): Ditto.
- (ia64_expand_compare_and_swap): Ditto.
- (ia64_expand_lock_test_and_set): Ditto.
- (ia64_expand_lock_release): Ditto.
-
-2002-07-16 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
-
- * arm.c (emit_sfm): Don't set RTX_FRAME_RELATED_P on DWARF.
-
-2002-07-16 Jeroen Dobbelaere <jeroen.dobbelaere@acunia.com>
- Richard Earnshaw <rearnsha@arm.com>
-
- * arm.h (LEGITIMATE_PIC_OPERAND_P): Only test
- CONSTANT_POOL_ADDRESS_P if a SYMBOL_REF. Simplify logic.
-
-2002-07-16 Richard Earnshaw <rearnsha@arm.com>
-
- * arm.md (stack_tie): New insn. Use an idiom that the alias code
- understands to be a memory clobber.
- * arm.c (arm_expand_prologue): Use it.
-
-2002-07-16 Daniel Berlin <dberlin@dberlin.org>
-
- * ra-rewrite.c: #include reload.h, insn-config.h
- * ra-build.c: #include reload.h
- * Makefile.in: Update ra-rewrite.o, ra-build.o dependencies to
- depend on reload.h, insn-config.h.
-
-Tue Jul 16 11:57:45 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * expr.c (emit_move_insn_1): Handle arbitrary moves that are
- the same size as a word.
-
- * regrename.c (find_oldest_value_reg): Take WORDS_BIG_ENDIAN /
- BYTES_BIG_ENDIAN into account.
-
-Tue Jul 16 12:22:44 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.md (prefetch): Fix for 64bit mode.
- (prefetch_sse_rex, prefetch_3dnow_rex): New patterns.
-
- * i386.md (movss, movsd): Use xorps/xorpd for Athlon.
-
-2002-07-16 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * hard-reg-set.h (TEST_HARD_REG_BIT): Return 1 if the bit is set.
-
-2002-07-15 Zack Weinberg <zack@codesourcery.com>
-
- * ginclude/varargs.h: Replace with stub which issues #error.
- * ginclude/stdarg.h: __builtin_stdarg_start is renamed
- __builtin_va_start.
-
- * builtins.def (BUILT_IN_VARARGS_START): Delete.
- (BUILT_IN_VA_START): New.
- * builtins.c (expand_builtin_va_start): Eliminate first
- argument and code to implement pre-ISO varargs.
- (std_expand_builtin_va_start): Ignore first argument; it is
- always 1.
- (expand_builtin): Handle BUILT_IN_VA_START and
- BUILT_IN_STDARG_START identically. Delete
- BUILT_IN_VARARGS_START case.
-
- * function.c (assign_parms): Delete hide_last_arg and all
- its uses.
- (mark_varargs): Delete function.
- * function.h (struct function): Delete 'varargs' bit.
- (current_function_varargs): Delete macro.
- * tree.h: Don't declare mark_varargs.
-
- * c-decl.c (c_function_varargs, c_mark_varargs): Delete.
- (c_expand_body): Don't call mark_varargs.
- * c-objc-common.c: Handle BUILT_IN_VA_START and
- BUILT_IN_STDARG_START identically. Delete
- BUILT_IN_VARARGS_START case.
- * c-tree.h: Don't declare c_mark_varargs.
- * c-parse.in: Remove grammar rules for '&...' (which has been
- commented out since before 2.7.2) and for '...' in K+R
- argument declarations.
-
- * builtins.c, function.c, integrate.c, sibcall.c,
- config/alpha/unicosmk.h, config/arc/arc.c, config/arc/arc.h,
- config/avr/avr.c, config/cris/cris.c, config/fr30/fr30.c,
- config/i960/i960.c, config/i960/i960.md, config/m32r/m32r.c,
- config/m32r/m32r.h, config/m88k/m88k.c, config/m88k/m88k.h,
- config/mips/mips.c, config/mmix/mmix.c, config/mmix/mmix.h,
- config/mn10300/mn10300.c, config/pa/som.h, config/s390/s390.c,
- config/sh/sh.c, config/sh/sh.h, config/sparc/sparc.h,
- config/stormy16/stormy16.c: Delete all references to
- current_function_varargs, and code predicated on that flag.
-
- * config/alpha/alpha.c (alpha_va_start),
- config/arc/arc.c (arc_va_start),
- config/i386/i386.c (ix86_va_start),
- config/mips/mips.c (mips_va_start),
- config/mn10300/mn10300.c (mn10300_va_start),
- config/rs6000/rs6000.c (rs6000_va_start),
- config/s390/s390.c (s390_va_start),
- config/sh/sh.c (sh_va_start),
- Ignore first argument; it is always 1.
-
- * config/c4x/c4x-protos.h, config/c4x/c4x.c: Delete c4x_va_start.
- * config/ia64/ia64-protos.h, config/ia64/ia64.c: Delete ia64_va_start.
- * config/m68hc11/m68hc11-protos.h, config/m68hc11/m68hc11.c:
- Delete m68hc11_va_start.
- * config/c4x/c4x.h, config/ia64/ia64.h, config/m68hc11/m68hc11.h:
- No need to define EXPAND_BUILTIN_VA_START.
-
- * doc/invoke.texi, doc/sourcebuild.texi, doc/tm.texi,
- doc/trouble.texi: Remove references to GCC-provided <varargs.h>.
-
-2002-07-15 Eric Botcazou <ebotcazou@multimania.com>
-
- PR optimization/7153
- * regmove.c (optimize_reg_copy_3): Don't optimize if the register
- dies in more than one insn.
-
-2002-07-15 Jason Thorpe <thorpej@wasabisystems.com>
-
- * config/sparc/netbsd-elf.h (TRANSFER_FROM_TRAMPOLINE): Remove.
-
-2002-07-15 Michael Matz <matz@suse.de>,
- Daniel Berlin <dberlin@dberlin.org>,
- Denis Chertykov <denisc@overta.ru>
-
- Add a new register allocator.
-
- * ra.c: New file.
- * ra.h: New file.
- * ra-build.c: New file.
- * ra-colorize.c: New file.
- * ra-debug.c: New file.
- * ra-rewrite.c: New file.
-
- * Makefile.in (ra.o, ra-build.o, ra-colorize.o, ra-debug.o,
- (ra-rewrite.o): New .o files for libbackend.a.
- (GTFILES): Add basic-block.h.
-
- * toplev.c (flag_new_regalloc): New.
- (f_options): New option "new-ra".
- (rest_of_compilation): Call initialize_uninitialized_subregs()
- only for the old allocator. If flag_new_regalloc is set, call
- new allocator, instead of local_alloc(), global_alloc() and
- friends.
-
- * doc/invoke.texi: Document -fnew-ra.
- * basic-block.h (FOR_ALL_BB): New.
- * config/rs6000/rs6000.c (print_operand): Write small constants
- as @l+80.
-
- * df.c (read_modify_subreg_p): Narrow down cases for a rmw subreg.
- (df_reg_table_realloc): Make size at least as large as max_reg_num().
- (df_insn_table_realloc): Size argument now is absolute, not relative.
- Changed all callers.
-
- * gengtype.c (main): Add the pseudo-type "HARD_REG_SET".
- * regclass.c (reg_scan_mark_refs): Ignore NULL rtx's.
-
- 2002-06-20 Michael Matz <matz@suse.de>
-
- * df.h (struct ref.id): Make unsigned.
- * df.c (df_bb_reg_def_chain_create): Remove unsigned cast.
-
- 2002-06-13 Michael Matz <matz@suse.de>
-
- * df.h (DF_REF_MODE_CHANGE): New flag.
- * df.c (df_def_record_1, df_uses_record): Set this flag for refs
- involving subregs with invalid mode changes, when
- CLASS_CANNOT_CHANGE_MODE is defined.
-
- 2002-05-07 Michael Matz <matz@suse.de>
-
- * reload1.c (fixup_abnormal_edges): Don't insert on NULL edge.
-
- 2002-05-03 Michael Matz <matz@suse.de>
-
- * sbitmap.c (sbitmap_difference): Accept sbitmaps of different size.
-
- Sat Feb 2 18:58:07 2002 Denis Chertykov <denisc@overta.ru>
-
- * regclass.c (regclass): Work with all regs which have sets or
- refs.
- (reg_scan_mark_refs): Count regs inside (clobber ...).
-
- 2002-01-04 Michael Matz <matzmich@cs.tu-berlin.de>
-
- * df.c (df_ref_record): Correctly calculate SUBREGs of hardregs.
- (df_bb_reg_def_chain_create, df_bb_reg_use_chain_create): Only
- add new refs.
- (df_bb_refs_update): Don't clear insns_modified here, ...
- (df_analyse): ... but here.
-
- * sbitmap.c (dump_sbitmap_file): New.
- (debug_sbitmap): Use it.
-
- * sbitmap.h (dump_sbitmap_file): Add prototype.
-
- 2001-08-07 Daniel Berlin <dan@cgsoftware.com>
-
- * df.c (df_insn_modify): Grow the UID table if necessary, rather
- than assume all emits go through df_insns_modify.
-
- 2001-07-26 Daniel Berlin <dan@cgsoftware.com>
-
- * regclass.c (reg_scan_mark_refs): When we increase REG_N_SETS,
- increase REG_N_REFS (like flow does), so that regclass doesn't
- think a reg is useless, and thus, not calculate a class, when it
- really should have.
-
- 2001-01-28 Daniel Berlin <dberlin@redhat.com>
-
- * sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP_REV): New macro, needed for
- dataflow analysis.
-
-2002-07-15 Jakub Jelinek <jakub@redhat.com>
-
- PR middle-end/7245
- * config/i386/i386.c (const_int_1_31_operand): New.
- * config/i386/i386.h (PREDICATE_CODES): Add it.
- * config/i386/i386.md (ashlsi3_cmp, ashlsi3_cmp_zext, ashlhi3_cmp,
- ashlqi3_cmp, ashrsi3_cmp, ashrsi3_cmp_zext, ashrhi3_cmp, ashrqi3_cmp,
- lshrsi3_cmp, lshrsi3_cmp_zext, lshrhi3_cmp, lshrqi3_cmp): Use it.
-
-2002-07-14 Alan Modra <amodra@bigpond.net.au>
-
- PR target/7282
- * config/rs6000/rs6000.md (floatsidf2): Enable for POWERPC64.
- (floatunssidf2): Likewise.
- (floatsidf_ppc64): New insn_and_split.
- (floatunssidf_ppc64): Likewise.
-
-2002-07-14 Andreas Jaeger <aj@suse.de>
-
- * config.gcc (sh64): Remove unused
- target_requires_64bit_host_wide_int.
-
-2002-07-12 Roger Sayle <roger@eyesopen.com>
-
- * expr.c [CLEAR_RATIO]: New macro defining the maximum number
- of move instructions to use when clearing memory, c.f. MOVE_RATIO.
- [CLEAR_BY_PIECES]: New macro, using CLEAR_RATIO, to determine
- whether clear_by_pieces should be used to clear storage.
- (clear_storage): Use CLEAR_BY_PIECES instead of MOVE_BY_PIECES.
-
- * doc/tm.texi: Document these two new target macros.
-
-2002-07-12 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.md ("zero_extendsidi2"): Use D_REG only for
- the scratch register.
- ("*movhi2_push"): Accept Z_REG because a split pattern can make use
- of it, forbid reload to use it.
-
-2002-07-12 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * config/avr/avr.c (test_hard_reg_class): Fix TEST_HARD_REG_BIT
- usage on 64-bit hosts, return value was truncated to 32 bits.
-
-Fri Jul 12 00:49:36 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * simplify-rtx.c (simplify_subreg): Handle floating point
- CONST_DOUBLEs. When an integer subreg of a smaller mode than
- the element mode is requested, compute a subreg with an
- integer mode of the same size as the element mode first.
-
-Thu Jul 11 22:02:57 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * combine.c (try_combine): When converting a paradoxical subreg
- to an extension, take LOAD_EXTEND_OP into account.
-
-2002-07-11 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * config.gcc (mips-sgi-irix6*o32): New configuration.
-
- * configure.in (libgcc_visibility): Disable for mips-sgi-irix6*o32
- configurations.
- * configure: Regenerate.
-
- * config/mips/iris6-o32-as.h: New file.
- * config/mips/iris6-o32.h: New file.
-
- * config/mips/iris5gas.h (TARGET_ASM_NAMED_SECTION): Define.
- (NM_FLAGS): Define.
- (HAVE_AS_SHF_MERGE): Undefine.
-
- * config/mips/t-iris5-as: New file.
- * config.gcc (mips-sgi-irix6*o32, mips-sgi-irix5*): Use it.
-
- * config/mips/t-iris6 (SHLIB_EXT, SHLIB_SOLINK, SHLIB_SONAME,
- SHLIB_NAME, SHLIB_MAP, SHLIB_OBJS, SHLIB_SLIBDIR_QUAL, SHLIB_LINK,
- SHLIB_INSTALL, SHLIB_MKMAP, SHLIB_MAPFILES, FPBIT, DPBIT,
- dp-bit.c, fp-bit.c): Move ...
- * config/mips/t-iris5-6: ... here.
- New file, shared by IRIX 5 and IRIX 6.
- * config.gcc (mips-sgi-irix6*o32, mips-sgi-irix6*,
- mips-sgi-irix5*): Use it.
-
- * config/mips/iris6.h: Remove duplicate comment.
-
- * config/mips/mips.c (TARGET_ASM_UNALIGNED_DI_OP) [TARGET_IRIX5 &&
- !TARGET_IRIX6]: Define.
- (mips_asm_file_start): Don't emit mdebug.<ABI> sections on IRIX 5/6.
-
- * config/mips/mips.h (ASM_DECLARE_FUNCTION_NAME): Fix comment.
-
-2002-07-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.md (adddi3): Change predicate of operand 2 to adddi3_operand
- and delete code to force constant to register.
- * pa-protos.h (adddi3_operand): Add prototype.
- * pa.c (adddi3_operand): New function.
-
-2002-07-11 Roger Sayle <roger@eyesopen.com>
-
- * c-decl.c (duplicate_decls): Preserve the noreturn attribute on
- non-ANSI builtin functions.
-
-Thu Jul 11 11:31:12 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * rtl.h (gen_rtx_CONST_VECTOR): Declare.
- * gengenrtl.c (special_rtx): Check for CONST_VECTOR.
- * emit-rtl.c (gen_rtx_CONST_VECTOR): New function.
- (gen_const_vector_0): Use it.
-
-2002-07-11 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * pa.md (adddi3): For 32-bit targets, force constants to a register
- if they don't fit in an 11-bit immediate. Change insn predicate to
- arith11_operand. Remove comment.
- * pa.c (cint_ok_for_move): Fix comment.
- (emit_move_sequence): Don't directly split DImode constants on 32-bit
- targets.
-
-2002-07-11 Tim Josling <tej@melbpc.org.au>
-
- Remove front end hard coding from gengtype.c.
-
- * Makefile.in
- (STAGESTUFF): add gtyp-gen.h
- (GTFILES): Remove front end specific files.
- (GTFILES_FILES_LANGS): New, from configure..
- (GTFILES_FILES_FILES): Likewise.
- (GTFILES_LANG_DIR_NAMES): Likewise.
- (GTFILES_SRCDIR): Likewise.
- (gtyp-gen.h): Build from configure information.
- (s-gtype): Remove command line parameters from gengtype.
- (gengtype.o): Remove dependency on GTFILES. Depend on gtyp-gen.h.
- (mostlyclean): Delete files generated by and for gengtype.
-
- * c-config-lang.in: New file.
-
- * configure.in (all_gtfiles_files_langs): New. Accumulate files
- for each language.
- (all_gtfiles_files_files): New. Accumulate language for each file
- accumulated.
- (gtfiles): Pick up value for C.
- (srcdir): AC-SUBST this variable.
- (all_gtfiles_files_langs): AC-SUBST this variable.
- (all_gtfiles_files_files): AC-SUBST this variable.
-
- * configure: Regenerate.
-
- * gengtype-lex.l (parse_file): Make parameter const.
-
- * gengtype.c (toplevel): include gtyp-gen.h.
- (BASE_FILE_<language> unnamed enum): Delete.
- (lang_names): Delete (replaced by gtyp-gen.h)
- (lang_dir_names): From gtyp-gen.h, replaces lang_names; changed
- all references.
- (NUM_GT_FILES): New.
- (NUM_LANG_FILES): New.
- (srcdir_len): New.
- (NUM_BASE_FILES): Change calculation.
- (open_base_files): Change prototype to avoid warning.
- (startswith): Delete.
- (get_file_basename): Iterate through generated language list not
- hard coded list.
- (get_base_file_bitmap): Use generated list of files and languages.
- (close_output_files): Add prototype to rmove warning.
- (main): Iterate through list of generated files from gtyp-gen.h
- rather than command line paramaters. Ignore duplicated file
- names.
-
- * gengtype.h (parse_file): Amend prototype for const parameter.
-
- * doc/sourcebuild.texi: Document gtfiles variable.
-
- * doc/gty.texi: Document changes to gtfiles variable for front
- ends.
-
- * objc/config-lang.in (gtfiles): Add files needed for objc front
- end.
-
-2002-07-10 Roger Sayle <roger@eyesopen.com>
-
- PR c/2454
- * combine.c (nonzero_bits): LOAD_EXTEND_OP should only apply
- to SUBREGs of MEMs. (num_sign_bit_copies): Likewise.
-
-2002-07-10 Roger Sayle <roger@eyesopen.com>
- Zack Weinberg <zack@codesourcery.com>
-
- * builtins.def: Make the argument types of abort and exit
- independent of the front-end.
-
-2002-07-11 Alan Modra <amodra@bigpond.net.au>
-
- * config/rs6000/linux64.h (ASM_SPEC): Define.
-
-2002-07-10 Aldy Hernandez <aldyh@redhat.com>
-
- * config/rs6000/rs6000.c (emit_frame_save): New.
- (rs6000_frame_related): Replace reg2 before reg.
- (rs6000_emit_prologue): Use emit_frame_save for saving gprs, fprs,
- and eh_return registers.
-
-2002-07-10 Toon Moene <toon@moene.indiv.nluug.nl>
-
- Revert all patches for optimization of Complex .op. Real.
- * complex_part_zero_p: Remove
- * expand_cmplxdiv_straight: Replace complex_part_zero_p(x)
- with x.
- * expand_cmplxdiv_wide: Ditto.
- * expand_binop: Ditto.
-
-2002-07-10 Marek Michalkiewicz <marekm@amelek.gda.pl>
-
- * config/avr/avr.md: Fix two 0x80000000 constants to make them
- negative also on 64-bit hosts.
-
- Default to -fno-reorder-blocks when optimizing for size.
- * config/avr/avr-protos.h (avr_optimization_options): Declare.
- * config/avr/avr.c (avr_optimization_options): New function.
- * config/avr/avr.h (OPTIMIZATION_OPTIONS): New.
-
- Optimize returning from simple functions.
- * config/avr/avr-protos.h (avr_simple_epilogue): Declare.
- * config/avr/avr.c (avr_simple_epilogue): New function.
- * config/avr/avr.md (return): New insn.
-
-2002-07-10 Douglas B Rupp <rupp@gnat.com>
-
- * config/i386/i386.c (ix86_svr3_asm_out_constructor): Add
- HAS_INIT_SECTION to protection.
-
-2002-07-10 Mark Mitchell <mark@codesourcery.com>
-
- * doc/invoke.texi (Debugging Options): Mention that -gdwarf is
- deprecated.
-
-Wed Jul 10 19:50:03 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * combine.c (gen_lowpart_for_combine): Handle vector modes.
- Supply non-VOID mode to simplify_gen_subreg.
-
-Wed Jul 10 18:48:55 CEST 2002 Jan Hubicka <jh@suse.cz>
-
- * i386.c (ix86_init_mmx_sse_builtins): Fix thinko.
-
-2002-07-10 Jeffrey A Law <law@redhat.com>
-
- * mn10200.c (expand_prologue): Create REG_MAYBE_DEAD notes
- as appropriate.
-
- * mn10200.c (expand_epilogue): Fix test to determine which scratch
- register to use.
-
-Wed Jul 10 16:06:00 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * cse.c (cse_insn): Supply proper SUBREG_BYTE to simplify_gen_subreg.
- Get mode from dest.
- If simplify_gen_subreg fails, try next equivalent.
-
-2002-07-09 Gabriel Dos Reis <gdr@codesourcery.com>
-
- * diagnostic.h: #include location.h
- (location_t): Move definition to..
- * location.h: ... here. New file.
- * tree.h: #include location.h
- (DECL_SOURCE_LOCATION): New macro.
- (DECL_SOURCE_FILE): Use.
- (DECL_SOURCE_LINE): Likewise.
- (struct tree_decl): REplace filename and linenum with locus.
- * Makefile.in (TREE_H): add location.h
- (diagnostic.o): Depends on gt-location.h
- (gt-location.h): Depends on s-gtype
-
-2002-07-09 Matt Kraai <kraai@alumni.cmu.edu>
-
- * config/rs6000/aix.h: Convert CPP_PREDEFINES to
- TARGET_OS_CPP_BUILTINS.
- * config/rs6000/aix31.h: Likewise.
- * config/rs6000/aix41.h: Likewise.
- * config/rs6000/aix43.h: Likewise.
- * config/rs6000/aix51.h: Likewise.
- * config/rs6000/beos.h: Likewise.
- * config/rs6000/darwin.h: Likewise.
- * config/rs6000/eabi.h: Likewise.
- * config/rs6000/eabisim.h: Likewise.
- * config/rs6000/linux.h: Likewise.
- * config/rs6000/linux64.h: Likewise.
- * config/rs6000/lynx.h: Likewise.
- * config/rs6000/mach.h: Likewise.
- * config/rs6000/rtems.h: Likewise.
- * config/rs6000/sysv4.h: Likewise.
- * config/rs6000/vxppc.h: Likewise.
-
-2002-07-09 Devang Patel <dpatel@apple.com>
- * objc/objc-act.c (adjust_type_for_id_default): Fix my previous patch.
- Do not allow ObjC objects as a parameter type for Objective-C methods.
- My previous patch restricted 'struct' also.
-
-2002-07-09 Neil Booth <neil@daikokuya.co.uk>
-
- * cpperror.c (cpp_error): Default to directive_line within
- directives here.
- * cppexp.c (cpp_interpret_integer): Only use traditional
- number semantics in directives.
- * cpplib.c (prepare_directive_trad): Don't reset pfile->line.
- (do_include_common): Similarly.
- * cpptrad.c (scan_out_logical_line): Implement accurate
- quoting of <> in #include.
- * doc/cpp.texi: Update.
-
-Tue Jul 9 22:37:44 2002 Stephen Clarke <stephen.clarke@superh.com>
- J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (sh_adjust_cost): Special handling of SHMEDIA code.
- * sh.md (attribute issues): Replace with:
- (attribute pipe_model). All users changed.
- (attribute type): Change pt / ptabs to pt_media / ptabs_media.
- All users changed.
- (function units sh5issue, sh5fds): New.
- (attribute is_mac_media): New.
- (adddi3_media, subdi3_media, divsi3_i1_media, anddi3): Add type.
- (andcdi3, iordi3, xordi3, ashldi3_media, lshrdi3_media): Likewise.
- (ashrdi3_media, negdi_media, extendsidi2, movqi_media): Likewise.
- (movhi_media, shori_media, movv2sf_i, jump_media): Likewise.
- (call_media, call_value_media, sibcall_media): Likewise.
- (casesi_jump_media, casesi_shift_media, casesi_load_media): Likewise.
- (return_media_i, addsf3_media, subsf3_media, mulsf3_media): Likewise.
- (mac_media, divsf3_media, floatdisf2, floatsisf2_media): Likewise.
- (fix_truncsfdi2, fix_truncsfsi2_media, cmpeqsf_media): Likewise.
- (cmpgtsf_media, cmpgesf_media, cmpunsf_media, negsf2_media): Likewise.
- (sqrtsf2_media, abssf2_media, adddf3_media, subdf3_media): Likewise.
- (muldf3_media, divdf3_media, floatdidf2, floatsidf2_media): Likewise.
- (fix_truncdfdi2, fix_truncdfsi2_media, cmpeqdf_media): Likewise.
- (cmpgtdf_media, cmpgedf_media,cmpundf_media, negdf2_media): Likewise.
- (sqrtdf2_media, absdf2_media, extendsfdf2_media): Likewise.
- (truncdfsf2_media): Likewise.
- (movsi_media, movsi_media_nofpu, movdi_media): Use new types.
- (movdi_media_nofpui, movdf_media, movdf_media_nofpu): Likewise.
-
-Tue Jul 9 21:39:50 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (PREDICATE_CODES): Add general_extend_operand and inqhi_operand.
- * sh.c (general_extend_operand, inqhi_operand): New functions.
- * sh.md (cmpeqdi_media, cmpgtdi_media, cmpgtudi_media): Collapse
- alternatives using 'N' modifier. Add type.
- (adddi3z_media): Likewise. Enable generator function generation.
- (movdicc_false, movdicc_true, addsi3_media, subsi3_media): Use more
- exact predicates / constraints. Add type.
- (subsi3): Allow 0 for SHMEDIA.
- (udivsi3_i4_media): Use match_operand for input values
- rather than hard registers.
- (udivsi3 - TARGET_SHMEDIA_FPU case): Don't ferry values
- unnecessarily through hard registers. Keep copies of pseudo
- registers outside of the libcall sequence.
- (mulsidi3_media, umulsidi3_media): Use more exact predicates. Add type.
- (ashlsi3_media, ashrsi3_media, lshrsi3_media): Likewise.
- (zero_extendsidi2, zero_extendhidi2, zero_extendqidi2): Likewise.
- (extendhidi2, extendqidi2): Likewise.
- (andsi3_compact): Name.
- (andcdi3): Enable generator function generation.
- (zero_extendhisi2, zero_extendqisi2): Rename to
- (zero_extendhisi2_compact, zero_extendqisi2_compact).
- (extendhisi2, extendqisi2): Rename to
- (extendhisi2_compact, extendqisi2_compact).
- (rotldi3, rotldi3_mextr, rotrdi3, rotrdi3_mextr): New patterns.
- (loaddi_trunc, zero_extendhisi2, zero_extendhisi2_media): Likewise.
- (zero_extendhisi2_media+1, zero_extendqisi2): Likewise.
- (zero_extendqisi2_media, extendhisi2, extendhisi2_media): Likewise.
- (extendhisi2_media, extendhisi2_media+1, extendqisi2): Likewise.
- (extendqisi2_media, extendqisi2_media+1, truncdisi2): Likewise.
- (truncdihi2, truncdiqi2, reload_inqi, reload_inhi): Likewise.
- (shmedia32_initialize_trampoline_big): Likewise.
- (shmedia32_initialize_trampoline_little): Likewise.
- (nsb, nsbsi, nsbdi, ffsdi2, ffssi2, byterev): Likewise.
- (negdi2): Remove spurious T clobber.
- (zero_extendhidi2+1, extendhidi2+1, extendqidi2+1): Handle TRUNCATE.
- (movsi_media, movsi_media_nofpu): Remove spurious *k after b.
- (movdi_media, movdi_media_nofpu, pt, ptb): Likewise.
- (movsi_media_nofpu+2, movhi_media+1): Only do split after reload.
- (ic_invalidate_line_media): Write back data cache before invalidating
- instruction cache. Add type.
- (movsf_media): Sign-extend when the destination is a general
- purpose register. Add type.
- (bgt_media, bge_media, bgtu_media, bgeu_media, blt_media_i): Allow 0.
- (casesi_worker_0+1): Only increment ref count for proper label.
- (casesi_worker_0+2): Likewise.
-
-2002-07-09 Mark Mitchell <mark@codesourcery.com>
-
- * dwarfout.c (dwarfout_init): Warn that DWARF1 is deprecated.
-
-2002-07-09 Steve Ellcey <sje@cup.hp.com>
-
- * gcc/except.c (expand_eh_region_end_cleanup): Change exception pointer
- from Pmode to ptr_mode.
- (get_exception_pointer): Ditto.
- (connect_post_landing_pads): Ditto.
- (dw2_build_landing_pads): Ditto.
-
-2002-07-08 Steve Ellcey <sje@cup.hp.com>
- * gcc/c-pragma.h (add_to_renaming_pragma_list): New function.
- * gcc/c-pragma.c (add_to_renaming_pragma_list): New function.
- (handle_pragma_redefine_extname): Change to use new function.
-
-2002-07-08 Roger Sayle <roger@eyesopen.com>
-
- * combine.c (combine_simplify_rtx): Add an explicit cast
- to avoid signed/unsigned comparison warning.
- (simplify_if_then_else): Likewise.
- (extended_count): Likewise.
- (simplify_shift_const): Likewise.
- (simplify_comparison): Likewise.
-
-2002-07-08 Richard Sandiford <rsandifo@redhat.com>
-
- * config/mips/mips.md: Add imadd type. Update scheduler description
- to use imadd as well as imul.
- (*mul_acc_si, *madsi): Change imul alternatives to imadd.
- (*mul_acc_di, *mul_acc_64bit_di): Likewise.
- (*mul_sub_si): Likewise for first alternative. Change second
- alternative from imul to multi.
-
-2002-07-07 Neil Booth <neil@daikokuya.co.uk>
-
- * c-common.c (c_common_post_options): Update prototype;
- don't init backends if preprocessing only.
- * langhooks-def.h (LANG_HOOKS_POST_OPTIONS): Update.
- * langhooks.h (struct lang_hooks): Update post_options to
- return a boolean.
- * toplev.c (parse_options_and_default_flags, do_compile,
- lang_independent_init): Update prototypes. Allow the
- front end to specify that there is no need to initialize
- the back end.
- (general_init): Move call to hex_init here...
- (toplev_main): ...from here. Pass flag for back end init
- suppression.
-
-Sun Jul 7 20:38:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.h (PRINT_OPERAND_PUNCT_VALID_P): Allow '\''.
- (PREDICATE_CODES): Add entries for equality_comparison_operator,
- greater_comparison_operator and less_comparison_operator.
- * sh.c (print_operand): Add '\'' code. Make 'o' handle
- more operators.
- (equality_comparison_operator): New function.
- (greater_comparison_operator, less_comparison_operator): Likewise.
- * sh.md (beq_media_i): Disable generator function generation.
- Use match_operator to handle a whole class of comparisons. Add
- modifier in output template to provide branch prediction. Add type.
- (bgt_media_i, ble_media_i): Likewise. Allow zero operands.
- (bne_media_i, bge_media_i, bgtu_media_i, bgeu_media_i): Delete.
- (blt_media_i, bleu_media_i, bltu_media_i): Likewise.
- (bgt, blt, ble, bge, bgtu, bltu, bgeu, bleu): Allow zero operands.
-
-2002-07-07 Hans-Peter Nilsson <hp@bitrange.com>
-
- Emit MMIX function prologue and epilogue as rtl.
- * config/mmix/mmix.md ("call"): Use mmix_get_hard_reg_initial_val,
- not unprototyped get_hard_reg_initial_val.
- ("call_value", "nonlocal_goto_receiver"): Ditto.
- ("return"): Make define_expand. Move real insn to...
- ("*expanded_return"): New pattern.
- ("prologue", "epilogue"): New define_expands.
- * config/mmix/mmix.h (MMIX_rO_REGNUM): New macro.
- (struct machine_function): New member in_prologue.
- (FIRST_PSEUDO_REGISTER): Adjust for including rO as register.
- (FIXED_REGISTERS, CALL_USED_REGISTERS): Ditto.
- (MMIX_MMIXWARE_ABI_REG_ALLOC_ORDER): Ditto.
- (MMIX_GNU_ABI_REG_ALLOC_ORDER, REG_CLASS_CONTENTS): Ditto.
- (REGISTER_NAMES, ADDITIONAL_REGISTER_NAMES): Ditto.
- (LOCAL_REGNO): Define. Adjust comment.
- * config/mmix/mmix.c (MMIX_CFUN_NEEDS_SAVED_EH_RETURN_ADDRESS):
- Consider regs_ever_live[MMIX_rJ_REGNUM], not just
- leaf_function_p.
- (MMIX_OUTPUT_REGNO): Don't translate registers while outputting
- the prologue.
- (mmix_target_asm_function_prologue): Make static. Just mark that
- the prologue is being emitted. Move guts to...
- (mmix_expand_prologue): New function. Adjust for emitting
- prologue as rtl. For sizes, use HOST_WIDE_INT only.
- (mmix_target_asm_function_epilogue): Make static. Simply emit a
- \n. Move guts to...
- (mmix_expand_epilogue): New function. Adjust for emitting
- epilogue as rtl. For sizes, use HOST_WIDE_INT only.
- (mmix_target_asm_function_end_prologue): Mark that the prologue
- has ended.
- (TARGET_ASM_FUNCTION_END_PROLOGUE): Define.
- (mmix_conditional_register_usage): Improve comments.
- (mmix_local_regno): New function.
- (mmix_emit_sp_add, mmix_get_hard_reg_initial_val): Ditto.
- * config/mmix/mmix-protos.h (mmix_local_regno): Prototype.
- (mmix_expand_prologue, mmix_expand_epilogue): Ditto.
- (mmix_get_hard_reg_initial_val): Ditto.
-
-2002-07-06 Andreas Jaeger <aj@suse.de>
-
- * toplev.c (set_fast_math_flags): Don't use ISO C style function
- definitions.
- * gengtype.c (open_base_files): Likewise.
- (close_output_files): Likewise.
- * tracer.c (find_best_predecessor): Likewise.
- (find_best_successor): Likewise.
- (ignore_bb_p): Likewise.
-
-2002-07-05 Roger Sayle <roger@eyesopen.com>
-
- PR c++/7099
- * builtin-attrs.def: Define new attribute lists for use in
- builtins.def.
- * builtins.def [DEF_BUILTIN]: Modify to take an additional
- ATTRS argument, an enumerated value defined in builtin-attrs.def
- that represents the attribute list for the builtins. Modify
- all builtin functions to pass an appropriate attribute list.
- Specify "abort", "exit", "_exit" and "_Exit" builtins here with
- their required noreturn attributes.
- * tree.h (enum_builtin_function): Ignore the additional parameter
- to DEF_BUILTIN.
- * builtins.c (built_in_names): Likewise.
- * c-common.c: (builtin_function_2): Replace the "int noreturn_p"
- argument with a tree representing the functions attribute list.
- Pass this "attrs" argument to builtin_function. No longer handle
- the noreturn_p processing manually.
- (built_in_attributes): Move the definitions from builtin-attrs.def
- before c_common_nodes_and_builtins.
- (c_common_nodes_and_builtins): Handle the new ATTRS parameter in
- DEF_BUILTIN, passing it to both builtin_function and the changed
- builtin_function_2.
-
- * doc/extend.texi: Document __builtin_abort, __builtin_exit,
- __builtin__exit and __builtin__Exit.
-
-2002-07-05 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.md ("*movqi_68hc12"): Avoid allocating
- QI mode registers in soft registers.
- ("zero_extendqihi2"): Do not take into account soft registers
- for register allocation (use '*' constraint).
-
-2002-07-05 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.md ("*ashlsi3"): Avoid saving y if we know
- it is dead.
- ("*ashrsi3"): Likewise.
- ("*lshrsi3"): Likewise.
-
-2002-07-05 Vladimir Makarov <vmakarov@redhat.com>
-
- * genautomata.c (output_max_insn_queue_index_def): Take latencies
- into account.
-
-2002-07-05 Stephane Carrez <stcarrez@nerim.fr>
-
- * config/m68hc11/m68hc11.md (peephole2): New peephole2 to optimize
- address computation and memory moves.
-
-2002-07-03 Mark Mitchell <mark@codesourcery.com>
-
- PR c++/6706
- * dwarfout.c (output_reg_number): Fix warning message.
- (output_bound_representation): Check SAVE_EXPR_RTL is not NULL
- before using it.
-
-2002-07-05 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * gcc/gcc.c (asm_debug): Move initialization ...
- (init_spec): ... here.
-
-2002-07-05 Nathan Sidwell <nathan@codesourcery.com>
-
- * c-parse.in (extdef): Append ';'.
- (old_style_parm_decls): Append ';'.
-
-2002-07-04 Daniel Jacobowitz <drow@mvista.com>
-
- * configure.in: Correct typos: gcc_cv_as_gdwarf2_debug_flag to
- gcc_cv_as_gdwarf2_flag and gcc_cv_as_gstabs_debug_flag
- to gcc_cv_as_gstabs_flag.
- * configure: Rebuilt.
-
-2002-07-04 Geoffrey Keating <geoffk@redhat.com>
-
- * ggc.h (ggc_add_root): Document as obsolete.
-
-Thu Jul 4 07:58:01 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.md (mshfhi_b, mshflo_b, mshfhi_l, mshflo_l, mshfhi_w): Add DONE.
- (mshflo_w): Likewise.
-
-Thu Jul 4 07:36:29 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * simplify-rtx.c (simplify_subreg): Reduce problem of finding
- vector mode subregs of constants to finding integer mode
- subregs of constants.
- * cse.c (cse_insn): Use simplify_gen_subreg.
- * convert.c (convert_to_integer): Don't strip a NOP_EXPR
- From a vector mode expression of different size than the
- target mode.
-
-2002-07-03 Eric Christopher <echristo@redhat.com>
-
- * config/mips/linux.h: Add #undef for SUBTARGET_CPP_SPEC.
- * config/mips/mips.h: Remove deprecated -m<processor> options
- and cc1_cpu_spec associated.
- (CONSTANT_ADDRESS_P): Fix last patch.
- (ASM_DECLARE_FUNCTION_NAME): Declare. Fix comment.
- * config/mips/mips.md (bungt, bunge, sungt_df, sungt_sf, sunge_df,
- sunge_sf): Remove.
-
-2002-07-03 Stan Shebs <shebs@apple.com>
-
- * config/darwin.h (APPLE_CC): Remove, not meaningful in FSF GCC.
- (STRINGIFY_THIS, REALLY_STRINGIFY): Remove.
- (CPP_SPEC): Remove insertion of APPLE_CC definition.
-
-2002-07-03 Roger Sayle <roger@eyesopen.com>
-
- * combine.c (struct_undo): Change types of recorded substitutions
- to be either "int" or "rtx", instead of "unsigned int" and "rtx".
- (do_SUBST_INT): Change types of the substitution from unsigned int
- to int, to avoid compilation warning from SUBST_INT's only caller.
-
- (make_extraction): Add cast to avoid compilation warning.
- (force_to_mode): Remove cast to avoid compilation warning.
-
-2002-07-03 Eric Botcazou <ebotcazou@multimania.com>
- Jeff Law <law@redhat.com>
-
- * i386.md (length_immediate attribute): Fix typo.
- (length_address attribute): Likewise.
- (modrm attribute): Set it to 0 for immediate call instructions.
- (jcc_1 pattern): Set modrm attribute to 0.
- (jcc_2 pattern ): Likewise.
- (jump pattern): Likewise.
- (doloop_end_internal pattern): Explicitly set length.
- (leave pattern): Fix typo.
- (leave_rex64 pattern): Likewise.
-
-2002-07-03 David Edelsohn <edelsohn@gnu.org>
-
- * config/rs6000/rs6000.md (fix_truncdfsi2_internal): Ignore DImode
- in FPR as preference.
- (fctiwz): Same.
- (floatdidf2, fix_truncdfdi2): Same.
- (floatdisf2, floatditf2, fix_trunctfdi2): Same.
- (floatditf2): Same.
- (floatsitf2, fix_trunctfsi2): SImode in GPR.
- (ctrdi): Remove FPR alternative and splitter.
-
-2002-07-03 Will Cohen <wcohen@redhat.com>
-
- * config/i386/i386.c (x86_integer_DFmode_moves): Disable for PPro.
-
-Wed Jul 3 10:24:16 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * optabs.c (expand_vector_binop): Don't store using a SUBREG smaller
- than UNITS_PER_WORD, unless this is little endian and the first unit
- in this word. Let extract_bit_field decide how to load an element.
- Force arguments to matching mode.
- (expand_vector_unop): Likewise.
-
- * simplify-rtx.c (simplify_subreg): Don't assume that all vectors
- consist of word_mode elements.
- * c-typeck.c (build_binary_op): Allow vector types for BIT_AND_EXPR,
- BIT_ANDTC_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR.
- (build_unary_op): Allow vector types for BIT_NOT_EPR.
- * emit-rtl.c (gen_lowpart_common): Use simplify_gen_subreg for
- CONST_VECTOR.
- * optabs.c (expand_vector_binop): Try to perform operation in
- smaller vector modes with same inner size. Add handling of AND, IOR
- and XOR. Reject expansion to inner-mode sized scalars when using
- OPTAB_DIRECT. Use simplify_gen_subreg on constants.
- (expand_vector_unop): Try to perform operation in smaller vector
- modes with same inner size. Add handling of one's complement.
- When there is no vector negate operation, try a vector subtract
- operation. Use simplify_gen_subreg on constants.
- * simplify-rtx.c (simplify_subreg): Add capability to convert vector
- constants into smaller vectors with same inner mode, and to
- integer CONST_DOUBLEs.
-
-2002-07-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * c-parse.in (parsing_iso_function_signature): New variable.
- (extdef_1): New, copied from...
- (extdef): ... here. Reset parsing_iso_function_signature.
- (old_style_parm_decls): Reset parsing_iso_function_signature.
- (old_style_parm_decls_1): New, copied from old_style_parm_decls.
- Warn about ISO C style function definitions.
- (nested_function, notype_nested_function): Reset
- parsing_iso_function_signature.
- (parmlist_2): Set parsing_iso_function_signature.
-
- * doc/invoke.texi (-Wtraditional): Document new behavior.
-
-2002-07-02 Chris Demetriou <cgd@broadcom.com>
-
- * config.gcc (mips*el-*-*): Use tm_defines to set
- TARGET_ENDIAN_DEFAULT, rather than including mips/little.h.
- * config/mips/little.h: Remove.
-
-2002-07-02 Devang Patel <dpatel@apple.com>
-
- * objc/objc-act.c (adjust_type_for_id_default): Do not allow an
- object as parameter. Prevent something like 'NSObject' to be
- used as the type for a method argument.
-
-2002-07-03 Neil Booth <neil@daikokuya.co.uk>
-
- * cpptrad.c: Update comment.
-
-2002-07-02 Neil Booth <neil@daikokuya.co.uk>
-
- * doc/cpp.texi: Update for traditional preprocessing changes.
- * goc/cppopts.texi: Similarly.
-
-2002-07-02 Ziemowit Laski <zlaski@apple.com>
-
- * c-parse.in (designator): Enable designated initializers if ObjC.
- (objcmessageexpr): Remove references to objc_receiver_context.
- * objc/objc-act.h (objc_receiver_context): Remove decl.
- * objc/objc-act.c (objc_receiver_context): Remove.
- (lookup_objc_ivar): Test objc_method_context instead of
- objc_receiver_context.
-
-Tue Jul 2 18:45:45 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (print_operand, case 'N'): Allow zero vector.
- (arith_reg_or_0_operand): Likewise.
- (zero_vec_operand): Check for CONST_VECTOR, not PARALLEL.
- * sh.h (CONST_COSTS): 0 has 0 cost. Check OUTER_CODE for
- IOR, XOR, PLUS and SET and take their respective constant
- ranges into account.
- (PREDICATE_CODES, arith_reg_or_0_operand): Can be CONST_VECTOR.
- * sh.md (subdi3, subdi3_media): Allow zero operand.
- (movv8qi_i+3): Only vector that is not split is the zero vector.
- Fix operand 3 to simplify_subreg.
- (movv2si_i): Split alternative 1.
- (mshfhi_l_di_rev+1): New splitter.
-
-2002-07-02 Neil Booth <neil@daikokuya.co.uk>
-
- PR preprocessor/7029
- * cppinit.c (cpp_handle_option): Suppress warnings with an
- implicit "-w" for "-M" and "-MM".
- * doc/cppopts.texi: Update.
-
-2002-07-01 Roger Sayle <roger@eyesopen.com>
-
- * config/sh/sh.c (sh_media_init_builtins): Change use of poisoned
- identifier "bzero" to "memset". Pass extra NULL_TREE argument to
- builtin_function.
-
-2002-07-02 Alan Modra <amodra@bigpond.net.au>
-
- * README.Portability: Fix typos.
-
-2002-07-01 Hans-Peter Nilsson <hp@axis.com>
-
- PR target/7177
- * config/cris/cris.h (LEGITIMIZE_RELOAD_ADDRESS): Correct number
- of indirections for register inside sign-extended mem part.
-
-2002-07-01 Roger Sayle <roger@eyesopen.com>
-
- * tree.h: Modify builtin_function interface to take an extra
- argument ATTRS, which is a tree representing an attribute list.
-
- * c-decl.c (builtin_function): Accept additional parameter.
- * objc/objc-act.c (builtin_function): Likewise.
- * f/com.c (builtin_function): Likewise.
- * java/decl.c (builtin_function): Likewise.
- * ada/utils.c (builtin_function): Likewise.
- * cp/decl.c (builtin_function): Likewise.
- (builtin_function_1): Likewise.
-
- * c-common.c (c_common_nodes_and_builtins): Pass an additional
- NULL_TREE argument to builtin_function. (builtin_function_2):
- Likewise.
- * cp/call.c (build_java_interface_fn_ref): Likewise.
- * objc/objc-act.c (synth_module_prologue): Likewise.
- * java/decl.c (java_init_decl_processing): Likewise.
- * f/com.c (ffe_com_init_0): Likewise.
-
- * config/alpha/alpha.c (alpha_init_builtins): Pass an additional
- NULL_TREE argument to builtin_function.
- * config/arm/arm.c (def_builtin): Likewise.
- * config/c4x/c4x.c (c4x_init_builtins): Likewise.
- * config/i386/i386.c (def_builtin): Likewise.
- * config/ia64/ia64.c (def_builtin): Likewise.
- * config/rs6000/rs6000.c (def_builtin): Likewise.
-
-2002-07-01 Zack Weinberg <zack@codesourcery.com>
-
- * config/ip2k/t-ip2k: Remove LIBGCC1, CROSS_LIBGCC1, and LIBGCC1_TEST.
- * config/mips/t-isa3264: Likewise.
- * config/mmix/t-mmix: Likewise.
-
-2002-07-01 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * emit-rtl.c (init_emit_once): Add missing cast to HOST_WIDE_INT.
-
-2002-07-01 Roger Sayle <roger@eyesopen.com>
-
- PR opt/4046
- * fold-const.c (fold) [COND_EXPR]: Simplify A ? 0 : 1 to !A,
- A ? B : 0 to A && B and A ? B : 1 into !A || B if both A and
- B are truth values.
-
-2002-07-01 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * config/mmix/t-mmix: Eliminate last reference to LIBGCC1_TEST.
-
-2002-07-01 Matt Kraai <kraai@alumni.cmu.edu>
-
- * README.Portability (Function prototypes): Give an example of
- declaring and defining a function with no arguments.
-
- * README.Portability (Function prototypes): Document new
- variable-argument function macros.
-
-Mon Jul 1 19:55:17 2002 J"orn Rennecke <joern.rennecke@superh.com>
-
- * sh.c (langhooks.h): Include.
- (sh_init_builtins, sh_media_init_builtins): New functions.
- (sh_expand_builtin, arith_reg_dest,and_operand): Likewise.
- (mextr_bit_offset, extend_reg_operand, zero_vec_operand): Likewise.
- (sh_rep_vec, sh_1el_vec, sh_const_vec): Likewise.
- (builtin_description): New struct tag.
- (signature_args, bdesc): New arrays.
- (TARGET_INIT_BUILTINS, TARGET_EXPAND_BUILTIN): Undef / define.
- (print_operand): Add 'N' modifier.
- * sh.h (VECTOR_MODE_SUPPORTED_P): Add SHmedia vector modes.
- (EXTRA_CONSTRAINT_U, EXTRA_CONSTRAINT_W): New macros.
- (EXTRA_CONSTRAINT): Add 'U' and 'W' cases.
- (CONST_COSTS): Add special case for SHmedia AND.
- (PREDICATE_CODES): Add and_operand, arith_reg_dest,
- extend_reg_operand, extend_reg_or_0_operand, mextr_bit_offset,
- sh_const_vec, sh_1el_vec, sh_rep_vec, zero_vec_operand.
- target_operand can also be const or unspec.
- * sh.md (UNSPEC_INIT_TRAMP, UNSPEC_FCOSA UNSPEC_FSRRA): New constants.
- (UNSPEC_FSINA, UNSPEC_NSB, UNSPEC_ALLOCO): Likewise.
- (attribute type): Add new types.
- (anddi3): Add splitter.
- (movdi_const_16bit+1): Add code to handle vector constants and
- bitmasks efficiently.
- (shori_media): Have generator function made.
- (movv8qi, movv8qi_i, movv8qi_i+1, movv8qi_i+2): New patterns.
- (movv8qi_i+3, movv2hi, movv2hi_i, movv4hi, movv4hi_i): Likewise.
- (movv2si, movv2si_i, absv2si2, absv4hi2, addv2si3, addv4hi3): Likewise.
- (ssaddv2si3, usaddv8qi3, ssaddv4hi3, negcmpeqv8qi): Likewise.
- (negcmpeqv2si, negcmpeqv4hi, negcmpgtuv8qi, negcmpgtv2si): Likewise.
- (negcmpgtv4hi, mcmv, mcnvs_lw, mcnvs_wb, mcnvs_wub): Likewise.
- (mextr_rl, mextr_lr, mextr1, mextr2, mextr3, mextr4, mextr5): Likewise.
- (mextr6, mextr7, mmacfx_wl, mmacfx_wl_i, mmacnfx_wl): Likewise.
- (mmacnfx_wl_i, mulv2si3, mulv4hi3, mmulfx_l, mmulfx_w): Likewise.
- (mmulfxrp_w, mmulhi_wl, mmullo_wl, mmul23_wl, mmul01_wl): Likewise.
- (mmulsum_wq, mmulsum_wq_i, mperm_w, mperm_w_little): LIkewise.
- (mperm_w_big, mperm_w0, msad_ubq, msad_ubq_i, mshalds_l): Likewise.
- (mshalds_w, ashrv2si3, ashrv4hi3, mshards_q, mshfhi_b): Likewise.
- (mshflo_b, mshf4_b, mshf0_b, mshfhi_l, mshflo_l, mshf4_l): Likewsie.
- (mshf0_l, mshfhi_w, mshflo_w, mshf4_w, mshf0_w, mshfhi_l_di): Likewise.
- (mshfhi_l_di_rev, mshflo_l_di, mshflo_l_di_rev): Likewise.
- (mshflo_l_di_x, mshflo_l_di_x_rev, ashlv2si3, ashlv4hi3): Likewise.
- (lshrv2si3, lshrv4hi3, subv2si3, subv4hi3, sssubv2si3): Likewise.
- (ussubv8qi3, sssubv4hi3, fcosa_s, fsina_s, fipr, fsrra_s): Likewise.
- (ftrv): Likewise.
-
- (fpu_switch+1, fpu_switch+2): Remove constraint.
-
-2002-07-01 Aldy Hernandez <aldyh@redhat.com>
-
- * tree.c (build_function_type_list): Update function comment.
- Rename first argument to return_type.
-
-2002-07-01 Neil Booth <neil@daikokuya.co.uk>
-
- * Makefile.in: Remove all trace of tradcpp.c, tradcpp.h,
- tradcif.y and related files.
-
-2002-07-01 Neil Booth <neil@daikokuya.co.uk>
-
- * cpptrad.c (skip_whitespace): Pass pointer to prior char.
-
-2002-07-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * mips.h (FUNCTION_ARG_REGNO_P): Fix parentheses.
-
-See ChangeLog.7 for earlier changes.
+See ChangeLog.8 for earlier changes.
diff --git a/gcc/ChangeLog.tree-ssa b/gcc/ChangeLog.tree-ssa
index dd7aef03b60..1b5c3071449 100644
--- a/gcc/ChangeLog.tree-ssa
+++ b/gcc/ChangeLog.tree-ssa
@@ -1,3 +1,22 @@
+2003-04-09 Diego Novillo <dnovillo@redhat.com>
+
+ * gimplify.c (simplify_expr): Handle VECTOR_CST nodes.
+ * tree-cfg.c (make_blocks): Ignore empty statement containers.
+ Create a basic block before processing containers that only have
+ empty statements.
+ (make_loop_expr_blocks): Use the container instead of the statement
+ when setting NEXT_BLOCK_LINK.
+ (make_cond_expr_blocks): Likewise.
+ (make_switch_expr_blocks): Likewise.
+ (make_bind_expr_blocks): Likewise.
+ (successor_block): If the last statement of the block is the empty
+ statement, use its container to get NEXT_BLOCK_LINK.
+ (stmt_starts_bb_p): Return false if the statement is NULL.
+ * tree-pretty-print.c (dump_generic_node): Handle VECTOR_CST nodes.
+ * tree-simple.c (is_simple_const): Accept VECTOR_CST as constants.
+ * objc/objc-lang.c (LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P):
+ Define.
+
2003-04-06 Diego Novillo <dnovillo@redhat.com>
* tree-cfg.c (remove_bb): Call ssa_remove_edge.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 8cbb45c6970..abfe191bf55 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1,6 +1,8 @@
-# Makefile for GNU C compiler.
-# Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
-# 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+# Makefile for GNU Compiler Collection
+# Run 'configure' to generate Makefile from Makefile.in
+
+# Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
+# 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
#This file is part of GCC.
@@ -25,17 +27,53 @@
# stage1, stage2, stage3, stage4.
# This is the default target.
-all:
+# Set by autoconf to "all.internal" for a native build, or
+# "all.cross" to build a cross compiler.
+all: @ALL@
+
+# Depend on this to specify a phony target portably.
+force:
+
+# This tells GNU make version 3 not to export the variables
+# defined in this file into the environment (and thus recursive makes).
+.NOEXPORT:
+# And this tells it not to automatically pass command-line variables
+# to recursive makes.
+MAKEOVERRIDES =
# Suppress smart makes who think they know how to automake Yacc files
.y.c:
+# The only suffixes we want for implicit rules are .c and .o, so clear
+# the list and add them. This speeds up GNU Make, and allows -r to work.
+# For i18n support, we also need .gmo, .po, .pox.
+# This must come before the language makefile fragments to allow them to
+# add suffixes and rules of their own.
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo
+
+# -------------------------------
+# Standard autoconf-set variables
+# -------------------------------
+
# Directory where sources are, from where we are.
-srcdir = @srcdir@
VPATH = @srcdir@
-# Pointer to the GCC Project website
-website=http://gcc.gnu.org
+build_canonical = @build_canonical@
+host_canonical = @host_canonical@
+target=@target@
+target_alias=@target_alias@
+
+# Sed command to transform gcc to installed name.
+program_transform_name = @program_transform_name@
+program_transform_cross_name = s,^,$(target_alias)-,
+
+# -----------------------------
+# Directories used during build
+# -----------------------------
+
+# Directory where sources are, from where we are.
+srcdir = @srcdir@
# These directories contain files that are provided as part of a FSF tarball,
# but not provided in CVS. Some GCC integrators like to use the CVS sources
@@ -44,20 +82,27 @@ website=http://gcc.gnu.org
parsedir = $(srcdir)
docobjdir = $(srcdir)/doc
+# Top build directory, relative to here.
+top_builddir = .
+# objdir is set by configure.
+# It's normally the absolute path to the current directory.
+objdir = @objdir@
+
+# --------
+# UNSORTED
+# --------
+
# Variables that exist for you to override.
# See below for how to change them for certain systems.
# List of language subdirectories.
-# This is overridden by configure.
SUBDIRS =@subdirs@
# Selection of languages to be made.
-# This is overridden by configure.
CONFIG_LANGUAGES = @all_languages@
LANGUAGES = c gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
# Selection of languages to be made during stage1 build.
-# This is overridden by configure.
BOOT_LANGUAGES = c @all_boot_languages@
# Various ways of specifying flags for compilations:
@@ -97,7 +142,7 @@ coverageexts = .{da,bbg}
# stage1, as not all versions of gcc understand -Wno-long-long.
LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
STRICT_WARN = @strict1_warn@
-STRICT2_WARN = -pedantic -Wno-long-long
+STRICT2_WARN = -pedantic -Wno-long-long @WERROR@
# This is set by --enable-checking. The idea is to catch forgotten
# "extern" tags in header files.
@@ -109,7 +154,7 @@ VALGRIND_DRIVER_DEFINES = @valgrind_path_defines@
# This is how we control whether or not the additional warnings are applied.
.-warn = $(STRICT_WARN)
-GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $(WERROR) $($@-warn)
+GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
# These files are to have -Werror bypassed in stage2:
# These are very hard to completely clean due to target complexities.
@@ -124,10 +169,20 @@ c-parse.o-warn = -Wno-error
# warnings when converting to GIMPLE form. The warnings are triggered when
# the gimplifier re-writes va_start with a temporary instead of using the
# last named argument of the function.
+bitmap.o-warn = -Wno-error
+combine.o-warn = -Wno-error
c-semantics.o-warn = -Wno-error
+c-typeck.o-warn = -Wno-error
+dwarf2out.o-warn = -Wno-error
emit-rtl.o-warn = -Wno-error
+expr.o-warn = -Wno-error
+fold-const.o-warn = -Wno-error
genattrtab.o-warn = -Wno-error
+reload1.o-warn = -Wno-error
+reload.o-warn = -Wno-error
+rtlanal.o-warn = -Wno-error
tree.o-warn = -Wno-error
+varasm.o-warn = -Wno-error
# The warning for 'prev_file_name' in profile.c is odd. The variable *is*
# initialized before being used.
profile.o-warn = -Wno-error
@@ -157,6 +212,11 @@ AR = ar
AR_FLAGS = rc
DLLTOOL = dlltool
RANLIB = @RANLIB@
+
+# -------------------------------------------
+# Programs which operate on the build machine
+# -------------------------------------------
+
SHELL = @SHELL@
# pwd command to use. Allow user to override default by setting PWDCMD in
# the environment to account for automounters. The make variable must not
@@ -178,18 +238,22 @@ MAKEINFOFLAGS =
TEXI2DVI = texi2dvi
TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
POD2MAN = pod2man --center="GNU" --release="gcc-$(version)"
-# For GNUmake: let us decide what gets passed to recursive makes.
-MAKEOVERRIDES =
-@SET_MAKE@
-# Some compilers can't handle cc -c blah.c -o foo/blah.o.
-# In stage2 and beyond, we force this to "-o $@" since we know we're using gcc.
-OUTPUT_OPTION = @OUTPUT_OPTION@
-
# Some versions of `touch' (such as the version on Solaris 2.8)
# do not correctly set the timestamp due to buggy versions of `utime'
# in the kernel. So, we use `echo' instead.
STAMP = echo timestamp >
+# Make sure the $(MAKE) variable is defined.
+@SET_MAKE@
+
+# --------
+# UNSORTED
+# --------
+
+# Some compilers can't handle cc -c blah.c -o foo/blah.o.
+# In stage2 and beyond, we force this to "-o $@" since we know we're using gcc.
+OUTPUT_OPTION = @OUTPUT_OPTION@
+
# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is
# -I../zlib, unless we were configured with --with-system-zlib, in which
# case both are empty.
@@ -213,6 +277,7 @@ USER_H = $(srcdir)/ginclude/float.h \
$(srcdir)/ginclude/stdbool.h \
$(srcdir)/ginclude/stddef.h \
$(srcdir)/ginclude/varargs.h \
+ $(srcdir)/unwind.h \
$(EXTRA_HEADERS)
# The GCC to use for compiling libgcc.a and crt*.o.
@@ -225,21 +290,9 @@ GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isyste
# It also specifies -isystem ./include to find, e.g., stddef.h.
GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -isystem ./include $(TCFLAGS)
-# Sed command to transform gcc to installed name. Overwritten by configure.
-program_transform_name = @program_transform_name@
-program_transform_cross_name = s,^,$(target_alias)-,
-
-build_canonical = @build_canonical@
-host_canonical = @host_canonical@
-
-# Tools to use when building a cross-compiler.
-# These are used because `configure' appends `cross-make'
-# to the makefile when making a cross-compiler.
-
-# Use the tools from the build tree, if they are available.
-
-# objdir is set by configure.
-objdir = @objdir@
+# ---------------------------------------------------
+# Programs which produce files for the target machine
+# ---------------------------------------------------
AR_FOR_TARGET = ` \
if [ -f $(objdir)/../binutils/ar ] ; then \
@@ -277,6 +330,10 @@ NM_FOR_TARGET = ` \
fi; \
fi`
+# --------
+# UNSORTED
+# --------
+
# Where to find some libiberty headers.
HASHTAB_H = $(srcdir)/../include/hashtab.h
OBSTACK_H = $(srcdir)/../include/obstack.h
@@ -299,8 +356,10 @@ STMP_FIXINC = @STMP_FIXINC@
# Test to see whether <limits.h> exists in the system header files.
LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
-target=@target@
-target_alias=@target_alias@
+# Directory for prefix to system directories, for
+# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
+TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
+
xmake_file=@dep_host_xmake_file@
tmake_file=@dep_tmake_file@
out_file=$(srcdir)/config/@out_file@
@@ -333,6 +392,10 @@ gcc_version_trigger=@gcc_version_trigger@
version=$(gcc_version)
mainversion=`grep version_string $(srcdir)/version.c | sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/'`
+# ------------------------
+# Installation directories
+# ------------------------
+
# Common prefix for installation directories.
# NOTE: This directory must exist when you start installation.
prefix = @prefix@
@@ -347,6 +410,11 @@ exec_prefix = @exec_prefix@
bindir = @bindir@
# Directory in which to put the directories used by the compiler.
libdir = @libdir@
+
+# --------
+# UNSORTED
+# --------
+
# Directory in which the compiler finds executables, libraries, etc.
libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(version)
# Used to produce a relative $(gcc_tooldir) in gcc.o
@@ -385,9 +453,6 @@ man7dir = $(mandir)/man7
# Dir for temp files.
tmpdir = /tmp
-# Top build directory, relative to here.
-top_builddir = .
-
# Whether we were configured with NLS.
USE_NLS = @USE_NLS@
@@ -458,7 +523,6 @@ EXTRA_OBJS = @extra_objs@
EXTRA_GCC_OBJS =@host_extra_gcc_objs@
# List of additional header files to install.
-# Often this is edited directly by `configure'.
EXTRA_HEADERS =@extra_headers_list@
# It is convenient for configure to add the assignment at the beginning,
@@ -494,7 +558,6 @@ GENERATED_MANPAGES = @GENERATED_MANPAGES@
OTHER_FIXINCLUDES_DIRS=
# A list of all the language-specific executables.
-# This is overridden by configure.
COMPILERS = cc1$(exeext) @all_compilers@
# List of things which should already be built whenever we try to use xgcc
@@ -540,10 +603,6 @@ CPP_CROSS_NAME = `echo cpp|sed '$(program_transform_cross_name)'`
PROTOIZE_CROSS_NAME = `echo protoize|sed '$(program_transform_cross_name)'`
UNPROTOIZE_CROSS_NAME = `echo unprotoize|sed '$(program_transform_cross_name)'`
-# Set by autoconf to "all.internal" for a native build, or
-# "all.cross" to build a cross compiler.
-ALL = @ALL@
-
# Setup the testing framework, if you have one
EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \
echo $${rootme}/../expect/expect ; \
@@ -580,15 +639,6 @@ SPECS = specs
# End of variables for you to override.
-# Definition of `all' is here so that new rules inserted by sed
-# do not specify the default target.
-# The real definition is under `all.internal' (for native compilers)
-# or `all.cross' (for cross compilers).
-all: all.indirect
-
-# This tells GNU Make version 3 not to put all variables in the environment.
-.NOEXPORT:
-
# GTM_H lists the config files that the generator files depend on,
# while TM_H lists the ones ordinary gcc files depend on, which
# includes several files generated by those generators.
@@ -641,8 +691,6 @@ TREE_FLOW_H = tree-flow.h tree-flow-inline.h bitmap.h $(BASIC_BLOCK_H) \
#
# Now figure out from those variables how to compile and link.
-all.indirect: $(ALL)
-
# IN_GCC distinguishes between code compiled into GCC itself and other
# programs built during a bootstrap.
# autoconf inserts -DCROSS_COMPILE if we are building a cross compiler.
@@ -676,6 +724,9 @@ LIBS = $(INTLLIBS) @LIBS@ $(LIBIBERTY) $(BANSHEELIB)
# Any system libraries needed just for GNAT.
SYSLIBS = @GNAT_LIBEXC@
+# Libs needed (at present) just for jcf-dump.
+LDEXP_LIB = @LDEXP_LIB@
+
# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
BUILD_LIBS = $(BUILD_LIBIBERTY)
@@ -702,14 +753,10 @@ INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
.c.o:
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
-# This tells GNU make version 3 not to export all the variables
-# defined in this file into the environment.
-.NOEXPORT:
#
-# Support for additional languages (other than c and objc).
-# ??? objc can be supported this way too (leave for later).
+# Support for additional languages (other than C).
+# C can be supported this way too (leave for later).
-# These next lines are overridden by configure.
LANG_MAKEFILES = @all_lang_makefiles@
LANG_STAGESTUFF = @all_stagestuff@
@@ -774,7 +821,7 @@ CXX_TARGET_OBJS=@cxx_target_objs@
# Language-specific object files for C and Objective C.
C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
- c-incpath.o cppdefault.o \
+ c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
c-objc-common.o c-dump.o c-pch.o libcpp.a $(C_TARGET_OBJS) \
c-simplify.o c-call-graph.o tree-mudflap.o c-mudflap.o c-pretty-print.o
@@ -791,7 +838,8 @@ OBJS = tree-cfg.o tree-dfa.o tree-ssa.o tree-optimize.o tree-simple.o \
cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o \
cfgrtl.o combine.o conflict.o convert.o cse.o cselib.o dbxout.o \
- debug.o dependence.o df.o diagnostic.o doloop.o dominance.o \
+ debug.o df.o diagnostic.o dojump.o doloop.o dominance.o \
+ dependence.o \
dwarf2asm.o dwarf2out.o dwarfout.o emit-rtl.o except.o explow.o \
expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o \
genrtl.o ggc-common.o global.o graph.o gtype-desc.o \
@@ -859,14 +907,6 @@ TPBIT_FUNCS = _pack_tf _unpack_tf _addsub_tf _mul_tf _div_tf \
# unwinder info.
LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
-# The only suffixes we want for implicit rules are .c and .o, so clear
-# the list and add them. This speeds up GNU Make, and allows -r to work.
-# For i18n support, we also need .gmo, .po, .pox.
-# This must come before the language makefile fragments to allow them to
-# add suffixes and rules of their own.
-.SUFFIXES:
-.SUFFIXES: .c .o .po .pox .gmo
-
#
# Language makefile fragments.
@@ -893,6 +933,10 @@ LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
# End of language makefile fragments.
#
+# -----------------------------
+# Rebuilding this configuration
+# -----------------------------
+
Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \
$(xmake_file) $(tmake_file) $(LANG_MAKEFILES)
$(SHELL) $(srcdir)/configure.frag $(srcdir) "$(SUBDIRS)" \
@@ -981,6 +1025,10 @@ config.status: $(srcdir)/configure $(srcdir)/config.gcc version.c
LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --recheck; \
fi
+# --------
+# UNSORTED
+# --------
+
all.internal: start.encap rest.encap doc
# This is what to compile if making a cross-compiler.
all.cross: native gcc-cross cpp$(exeext) specs \
@@ -1254,6 +1302,8 @@ c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(RTL_H) debug.h $(C_TREE_H) c-common.h real.h c-incpath.h cppdefault.h \
c-pragma.h input.h intl.h flags.h toplev.h output.h \
mbchar.h $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
+c-ppoutput.o : c-ppoutput.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ c-common.h $(TREE_H) $(CPPLIB_H) cpphash.h $(TM_P_H) c-pragma.h
c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(C_TREE_H) $(RTL_H) insn-config.h integrate.h $(EXPR_H) $(C_TREE_H) \
flags.h toplev.h tree-inline.h diagnostic.h integrate.h $(VARRAY_H) \
@@ -1290,15 +1340,19 @@ tlink.o: tlink.c $(DEMANGLE_H) $(HASHTAB_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h
# A file used by all variants of C.
c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
- $(OBSTACK_H) $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) \
- $(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def $(TARGET_H) \
- diagnostic.h except.h gt-c-common.h real.h langhooks.h varray.h
+ $(OBSTACK_H) $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h intl.h \
+ $(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def \
+ diagnostic.h gt-c-common.h langhooks.h varray.h $(RTL_H) $(TARGET_H)
c-pretty-print.o : c-pretty-print.c c-pretty-print.h pretty-print.h \
$(C_COMMON_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h
-c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_COMMON_H) \
+c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
c-pragma.h flags.h toplev.h langhooks.h tree-inline.h diagnostic.h \
- intl.h
+ intl.h debug.h $(C_COMMON_H)
+
+c-cppbuiltin.o : c-cppbuiltin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+ $(TREE_H) $(C_COMMON_H) c-pragma.h flags.h toplev.h langhooks.h \
+ output.h except.h real.h $(TM_P_H)
# A file used by all variants of C and some other languages.
@@ -1317,7 +1371,7 @@ c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(C_TREE_H) $(TREE_DUMP_H)
c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(CPPLIB_H) $(TREE_H) \
- c-common.h output.h toplev.h c-pragma.h $(GGC_H) debug.h
+ c-common.h output.h toplev.h c-pragma.h $(GGC_H) debug.h langhooks.h
# Language-independent files.
@@ -1405,7 +1459,7 @@ ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H)
flags.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
- flags.h toplev.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
+ flags.h toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
$(TREE_H) $(GGC_H) gt-stringpool.h
@@ -1524,7 +1578,7 @@ toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_
graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \
ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
langhooks.h insn-flags.h options.h cfglayout.h real.h cfgloop.h \
- hosthooks.h $(LANGHOOKS_DEF_H)
+ hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DTARGET_NAME=\"$(target_alias)\" \
-c $(srcdir)/toplev.c $(OUTPUT_OPTION)
@@ -1569,13 +1623,16 @@ expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) f
function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h insn-attr.h insn-config.h \
$(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
except.h reload.h $(GGC_H) langhooks.h intl.h $(TM_P_H) real.h
+dojump.o : dojump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
+ flags.h function.h $(EXPR_H) $(OPTABS_H) insn-attr.h insn-config.h \
+ langhooks.h
builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H)\
flags.h $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) insn-config.h \
$(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
except.h $(TM_P_H) $(PREDICT_H) libfuncs.h real.h langhooks.h
calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
$(EXPR_H) langhooks.h $(TARGET_H) \
- libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H)
+ libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) cgraph.h
expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
flags.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \
toplev.h $(TM_P_H) langhooks.h
@@ -1611,7 +1668,7 @@ xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(
emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
flags.h function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
$(EXPR_H) $(srcdir)/../include/obstack.h hard-reg-set.h bitmap.h toplev.h \
- $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h
+ $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h gt-emit-rtl.h
real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h $(TM_P_H)
integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
flags.h debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
@@ -1625,7 +1682,7 @@ simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RT
$(REGS_H) hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
cgraph.o : cgraph.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
+ langhooks.h tree-inline.h toplev.h flags.h ggc.h $(TARGET_H) cgraph.h gt-cgraph.h
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
cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
@@ -1664,7 +1721,7 @@ tree-ssa-copyprop.o : tree-ssa-copyprop.c $(CONFIG_H) system.h errors.h \
$(TREE_H) $(RTL_H) $(TM_P_H) $(TREE_FLOW_H) diagnostic.h $(TIMEVAR_H) \
$(TREE_DUMP_H) coretypes.h $(TREE_SIMPLE_H) $(TM_H)
df.o : df.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
- insn-config.h $(RECOG_H) function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h \
+ insn-config.h $(RECOG_H) function.h $(REGS_H) alloc-pool.h hard-reg-set.h \
$(BASIC_BLOCK_H) df.h $(FIBHEAP_H)
conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \
$(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
@@ -1766,7 +1823,7 @@ reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) condition
alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
$(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H) \
- gt-alias.h $(TIMEVAR_H)
+ gt-alias.h $(TIMEVAR_H) cgraph.h
regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
$(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
$(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
@@ -2027,7 +2084,7 @@ GTFILES = $(srcdir)/location.h $(srcdir)/coretypes.h $(srcdir)/cpplib.h \
$(srcdir)/varray.h $(srcdir)/ssa.h $(srcdir)/insn-addr.h $(srcdir)/cselib.h \
$(srcdir)/basic-block.h $(srcdir)/location.h \
$(srcdir)/c-common.h $(srcdir)/c-tree.h \
- $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c \
+ $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
$(srcdir)/dependence.c \
$(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
$(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
@@ -2047,7 +2104,7 @@ GTFILES_FILES_FILES = @all_gtfiles_files_files@
GTFILES_LANG_DIR_NAMES = @subdirs@
GTFILES_SRCDIR = @srcdir@
-gtype-desc.h gtype-desc.c gt-except.h gt-function.h : s-gtype; @true
+gt-cgraph.h gtype-desc.h gtype-desc.c gt-except.h gt-function.h : s-gtype; @true
gt-integrate.h gt-stmt.h gt-tree.h gt-varasm.h gt-emit-rtl.h : s-gtype; @true
gt-explow.h gt-stor-layout.h gt-regclass.h gt-lists.h : s-gtype; @true
gt-alias.h gt-cselib.h gt-fold-const.h gt-gcse.h gt-profile.h : s-gtype; @true
@@ -2256,7 +2313,7 @@ gengtype$(build_exeext) : gengtype.o gengtype-lex.o gengtype-yacc.o \
gengtype.o gengtype-lex.o gengtype-yacc.o $(BUILD_LIBS)
gengtype.o : gengtype.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
- real.h rtl.def gtyp-gen.h
+ real.h $(RTL_BASE_H) gtyp-gen.h
$(BUILD_CC) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
$(srcdir)/gengtype.c $(OUTPUT_OPTION)
@@ -2382,8 +2439,8 @@ PREPROCESSOR_DEFINES = \
@TARGET_SYSTEM_ROOT_DEFINE@
LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \
- cpphash.o cpperror.o cppinit.o cppmain.o \
- hashtable.o line-map.o mkdeps.o prefix.o mbchar.o cpppch.o
+ cpphash.o cpperror.o cppinit.o \
+ hashtable.o line-map.o mkdeps.o mbchar.o cpppch.o
LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
$(OBSTACK_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
@@ -2395,8 +2452,6 @@ libcpp.a: $(LIBCPP_OBJS)
$(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS)
-$(RANLIB) libcpp.a
-cppmain.o: cppmain.c $(LIBCPP_DEPS)
-
cpperror.o: cpperror.c $(LIBCPP_DEPS)
cppexp.o: cppexp.c $(LIBCPP_DEPS)
cpplex.o: cpplex.c $(LIBCPP_DEPS) mbchar.h
@@ -2405,7 +2460,7 @@ cpplib.o: cpplib.c $(LIBCPP_DEPS)
cpphash.o: cpphash.c $(LIBCPP_DEPS)
cpptrad.o: cpptrad.c $(LIBCPP_DEPS)
cppfiles.o: cppfiles.c $(LIBCPP_DEPS) $(SPLAY_TREE_H) mkdeps.h
-cppinit.o: cppinit.c $(LIBCPP_DEPS) mkdeps.h prefix.h
+cppinit.o: cppinit.c $(LIBCPP_DEPS) mkdeps.h
cpppch.o: cpppch.c $(LIBCPP_DEPS) mkdeps.h
cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
@@ -2545,6 +2600,11 @@ specs.ready: specs
$(STAMP) specs.ready; \
fi
+# Until someone fixes this recursive make nightmare (please note where
+# BUILD_CFLAGS and WARN_CFLAGS are first expanded below versus which
+# later make invocation has the fine-grain -warn markings for fixinc):
+fixinc.sh-warn = -Wno-error
+
FIXINCSRCDIR=$(srcdir)/fixinc
fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
$(FIXINCSRCDIR)/procopen.c $(FIXINCSRCDIR)/gnu-regex.c \
@@ -2623,9 +2683,9 @@ xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_
# This is nominally a 'build' program, but it's run only when host==build,
# so we can (indeed, must) use $(LIBDEPS) and $(LIBS).
fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
- c-incpath.o cppdefault.o $(LIBDEPS) libcpp.a
+ c-incpath.o cppdefault.o prefix.o $(LIBDEPS) libcpp.a
$(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ fix-header.o \
- c-incpath.o cppdefault.o scan-decls.o scan.o libcpp.a $(LIBS)
+ c-incpath.o cppdefault.o scan-decls.o prefix.o scan.o libcpp.a $(LIBS)
fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
xsys-protos.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(CPPLIB_H)
@@ -2695,7 +2755,7 @@ TEXI_GCCINT_FILES = $(docdir)/gccint.texi \
$(docdir)/gnu.texi $(docdir)/include/gpl.texi \
$(docdir)/include/fdl.texi $(docdir)/contrib.texi \
$(docdir)/languages.texi $(docdir)/sourcebuild.texi \
- $(docdir)/gty.texi
+ $(docdir)/gty.texi $(docdir)/libgcc.texi
TEXI_GCCINSTALL_FILES = $(docdir)/install.texi $(docdir)/install-old.texi \
$(docdir)/include/fdl.texi
@@ -3496,12 +3556,18 @@ paranoia: paranoia.o real.o $(LIBIBERTY)
# These exist for maintenance purposes.
# Update the tags table.
-TAGS: force
- (cd $(srcdir); \
- mkdir tmp-tags; \
- mv -f c-parse.[ch] =*.[chy] tmp-tags; \
- etags *.y *.h *.c; \
- mv tmp-tags/* .; \
+TAGS: lang.tags
+ (cd $(srcdir); \
+ incs= ; \
+ list='$(SUBDIRS)'; for dir in $$list; do \
+ if test -f $$dir/TAGS; then \
+ incs="$$incs --include $$dir/TAGS"; \
+ fi; \
+ done; \
+ mkdir tmp-tags; \
+ mv -f c-parse.[ch] tmp-tags; \
+ etags *.y *.h *.c $$incs; \
+ mv tmp-tags/* .; \
rmdir tmp-tags)
# A list of files to be destroyed during "lean" builds.
@@ -3660,7 +3726,7 @@ cleanstrap:
$(MAKE) LANGUAGES="$(LANGUAGES)" bootstrap
unstrap:
- -rm -rf stage[234]*
+ -rm -rf stage[234]* stage_last
$(MAKE) unstage1
# Differs from cleanstrap in that it starts from the earlier stage1 build,
@@ -3872,8 +3938,6 @@ risky-stage4: stage4
.PHONY: stage1 stage2 stage3 stage4 clean maintainer-clean TAGS bootstrap
.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4
-force:
-
# Rules for generating translated message descriptions.
# Disabled by autoconf if the tools are not available.
diff --git a/gcc/ONEWS b/gcc/ONEWS
index 4d4b54b65c1..f4b358102ee 100644
--- a/gcc/ONEWS
+++ b/gcc/ONEWS
@@ -1,112 +1,28 @@
This file contains information about GCC releases up to GCC 2.8.1, and
-some information about EGCS releases. For more details of changes in
-EGCS releases, and details of changes in GCC 2.95 and more recent
-releases, see the release notes on the GCC web site and the file NEWS
-which contains the most relevant parts of those release notes in text
-form.
+a tiny bit of information on EGCS.
-Noteworthy changes in GCC for EGCS 1.1.
----------------------------------------
-
-The compiler now implements global common subexpression elimination (gcse) as
-well as global constant/copy propagation. (link to gcse page).
-
-More major improvements have been made to the alias analysis code. A new
-option to allow front-ends to provide alias information to the optimizers
-has also been added (-fstrict-aliasing). -fstrict-aliasing is off by default
-now, but will be enabled by default in the future. (link to alias page)
-
-Major changes continue in the exception handling support. This release
-includes some changes to reduce static overhead for exception handling. It
-also includes some major changes to the setjmp/longjmp based EH mechanism to
-make it less pessimistic. And finally, major infrastructure improvements
-to the dwarf2 EH mechanism have been made to make our EH support extensible.
-
-We have fixed the infamous security problems with temporary files.
-
-The "regmove" optimization pass has been nearly completely rewritten. It now
-uses much more information about the target to determine profitability of
-transformations.
+For details of changes in EGCS releases and GCC 2.95 and later releases,
+see the release notes on the GCC web site or the file NEWS which contains
+the most relevant parts of those release notes in text form.
-The compiler now recomputes register usage information immediately before
-register allocation. Previously such information was only not kept up to
-date after instruction combination which led to poor register allocation
-choices by our priority based register allocator.
-
-The register reloading phase of the compiler has been improved to better
-optimize spill code. This primarily helps targets which generate lots of
-spills (like the x86 ports and many register poor embedded ports).
-
-A few changes in the heuristics used by the register allocator and scheduler
-have been made which can significantly improve performance for certain
-applications.
-
-The compiler's branch shortening algorithms have been significantly improved
-to work better on targets which align jump targets.
+Changes in GCC for EGCS (that are not listed in the web release notes)
+---------------------------------------------------------------------
The compiler now supports the "ADDRESSOF" optimization which can significantly
reduce the overhead for certain inline calls (and inline calls in general).
-The compiler now supports a code size optimization switch (-Os). When enabled
-the compiler will prefer optimizations which improve code size over those
-which improve code speed.
-
-The compiler has been improved to completely eliminate library calls which
-compute constant values. This is particularly useful on machines which
-do not have integer mul/div or floating point support on-chip.
-
-GCC now supports a "--help" option to print detailed help information.
-
-cpplib has been greatly improved. It is probably usable for some sites now
-(major missing feature is trigraphs).
-
-Memory footprint for the compiler has been significantly reduced for certain
-pathalogical cases.
-
-Build time improvements for targets which support lots of sched parameters
-(alpha and mips primarily).
-
Compile time for certain programs using large constant initializers has been
improved (affects glibc significantly).
-Plus an incredible number of infrastructure changes, warning fixes, bugfixes
-and local optimizations.
-
Various improvements have been made to better support cross compilations. They
are still not easy, but they are improving.
-Target specific NEWS
-
- Sparc: Now includes V8 plus and V9 support, lots of tuning for Ultrasparcs
- and uses the Haifa scheduler by default.
-
- Alpha: EV6 tuned, optimized expansion of memcpy/bzero.
-
- x86: Data in the static store is aligned per Intel recommendations. Jump
- targets are aligned per Intel recommendations. Improved epilogue
- sequences for Pentium chips. Backend improvements which should help
- register allocation on all x86 variants. Support for PPro conditional
- move instructions has been fixed and enabled. Random changes
- throughout the port to make generated code more Pentium friendly.
- Improved support for 64bit integer operations.
- Unixware 7, a System V Release 5 target is now supported.
- SCO OpenServer targets can support GAS. See gcc/INSTALL for details.
-
- RS6000/PowerPC: Includes AIX4.3 support as well as PowerPC64 support.
- Haifa instruction scheduling is enabled by default now.
-
- MIPS: Multiply/Multiply-Add support has been largely rewritten to generate
- more efficient code. Includes mips16 support.
-
- M68K: Various micro-optimizations and Coldfire fixes.
+Target-specific changes:
M32r: Major improvements to this port.
Arm: Includes Thumb and super interworking support.
-EGCS includes all gcc2 changes up to and including the June 9, 1998 snapshot.
-
-
Noteworthy changes in GCC version 2.8.1
---------------------------------------
diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4
index 6e5fa4ab6a3..34690faf41b 100644
--- a/gcc/aclocal.m4
+++ b/gcc/aclocal.m4
@@ -885,145 +885,6 @@ elif test $ac_cv_c_charset = EBCDIC; then
[Define if the host execution character set is EBCDIC.])
fi])
-dnl Utility macro used by next two tests.
-dnl AC_EXAMINE_OBJECT(C source code,
-dnl commands examining object file,
-dnl [commands to run if compile failed]):
-dnl
-dnl Compile the source code to an object file; then convert it into a
-dnl printable representation. All unprintable characters and
-dnl asterisks (*) are replaced by dots (.). All white space is
-dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the
-dnl output, but runs of newlines are compressed to a single newline.
-dnl Finally, line breaks are forcibly inserted so that no line is
-dnl longer than 80 columns and the file ends with a newline. The
-dnl result of all this processing is in the file conftest.dmp, which
-dnl may be examined by the commands in the second argument.
-dnl
-AC_DEFUN([gcc_AC_EXAMINE_OBJECT],
-[AC_LANG_SAVE
-AC_LANG_C
-dnl Next bit cribbed from AC_TRY_COMPILE.
-cat > conftest.$ac_ext <<EOF
-[#line __oline__ "configure"
-#include "confdefs.h"
-$1
-]EOF
-if AC_TRY_EVAL(ac_compile); then
- od -c conftest.o |
- sed ['s/^[0-7]*[ ]*/ /
- s/\*/./g
- s/ \\n/*/g
- s/ [0-9][0-9][0-9]/./g
- s/ \\[^ ]/./g'] |
- tr -d '
- ' | tr -s '*' '
-' | fold | sed '$a\
-' > conftest.dmp
- $2
-ifelse($3, , , else
- $3
-)dnl
-fi
-rm -rf conftest*
-AC_LANG_RESTORE])
-
-dnl Floating point format probe.
-dnl The basic concept is the same as the above: grep the object
-dnl file for an interesting string. We have to watch out for
-dnl rounding changing the values in the object, however; this is
-dnl handled by ignoring the least significant byte of the float.
-dnl
-dnl Does not know about VAX G-float or C4x idiosyncratic format.
-dnl It does know about PDP-10 idiosyncratic format, but this is
-dnl not presently supported by GCC. S/390 "binary floating point"
-dnl is in fact IEEE (but maybe we should have that in EBCDIC as well
-dnl as ASCII?)
-dnl
-AC_DEFUN([gcc_AC_C_FLOAT_FORMAT],
-[AC_CACHE_CHECK(floating point format, ac_cv_c_float_format,
-[gcc_AC_EXAMINE_OBJECT(
-[/* This will not work unless sizeof(double) == 8. */
-extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
-
-/* This structure must have no internal padding. */
-struct possibility {
- char prefix[8];
- double candidate;
- char postfix[8];
-};
-
-#define C(cand) { "\nformat:", cand, ":tamrof\n" }
-struct possibility table [] =
-{
- C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
- C( 3.53802595280598432000e+18), /* D__float - VAX */
- C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
- C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
- C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
-};],
- [if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (big-endian)'
- elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (big-endian)'
- elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (little-endian)'
- elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (little-endian)'
- elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='VAX D-float'
- elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='PDP-10'
- elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IBM 370 hex'
- else
- AC_MSG_ERROR(Unknown floating point format)
- fi],
- [AC_MSG_ERROR(compile failed)])
-])
-# IEEE is the default format. If the float endianness isn't the same
-# as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
-# (which is a tristate: yes, no, default). This is only an issue with
-# IEEE; the other formats are only supported by a few machines each,
-# all with the same endianness.
-format=
-fbigend=
-case $ac_cv_c_float_format in
- 'IEEE (big-endian)' )
- if test $ac_cv_c_bigendian = no; then
- fbigend=1
- fi
- ;;
- 'IEEE (little-endian)' )
- if test $ac_cv_c_bigendian = yes; then
- fbigend=0
- fi
- ;;
- 'VAX D-float' )
- format=VAX_FLOAT_FORMAT
- ;;
- 'PDP-10' )
- format=PDP10_FLOAT_FORMAT
- ;;
- 'IBM 370 hex' )
- format=IBM_FLOAT_FORMAT
- ;;
-esac
-if test -n "$format"; then
- AC_DEFINE_UNQUOTED(HOST_FLOAT_FORMAT, $format,
- [Define to the floating point format of the host machine, if not IEEE.])
-fi
-if test -n "$fbigend"; then
- AC_DEFINE_UNQUOTED(HOST_FLOAT_WORDS_BIG_ENDIAN, $fbigend,
- [Define to 1 if the host machine stores floating point numbers in
- memory with the word containing the sign bit at the lowest address,
- or to 0 if it does it the other way around.
-
- This macro should not be defined if the ordering is the same as for
- multi-word integers.])
-fi
-])
-
#serial AM2
dnl From Bruno Haible.
@@ -1642,3 +1503,53 @@ if test $enable_initfini_array = yes; then
AC_DEFINE(HAVE_INITFINI_ARRAY, 1,
[Define .init_array/.fini_array sections are available and working.])
fi])
+
+dnl # _gcc_COMPUTE_GAS_VERSION
+dnl # Used by gcc_GAS_VERSION_GTE_IFELSE
+dnl #
+dnl # WARNING:
+dnl # gcc_cv_as_gas_srcdir must be defined before this.
+dnl # This gross requirement will go away eventually.
+AC_DEFUN([_gcc_COMPUTE_GAS_VERSION],
+[gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
+for f in $gcc_cv_as_bfd_srcdir/configure \
+ $gcc_cv_as_gas_srcdir/configure \
+ $gcc_cv_as_gas_srcdir/configure.in \
+ $gcc_cv_as_gas_srcdir/Makefile.in ; do
+ gcc_cv_gas_version=`grep '^VERSION=[[0-9]]*\.[[0-9]]*' $f`
+ if test x$gcc_cv_gas_version != x; then
+ break
+ fi
+done
+gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([[0-9]]*\)"`
+gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.\([[0-9]]*\)"`
+gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)"`
+]) []dnl # _gcc_COMPUTE_GAS_VERSION
+
+dnl # gcc_GAS_VERSION_GTE_IFELSE(major, minor, patchlevel,
+dnl # [command_if_true = :], [command_if_false = :])
+dnl # Check to see if the version of GAS is greater than or
+dnl # equal to the specified version.
+dnl #
+dnl # The first ifelse() shortens the shell code if the patchlevel
+dnl # is unimportant (the usual case). The others handle missing
+dnl # commands. Note that the tests are structured so that the most
+dnl # common version number cases are tested first.
+AC_DEFUN([gcc_GAS_VERSION_GTE_IFELSE],
+[AC_REQUIRE([_gcc_COMPUTE_GAS_VERSION]) []dnl
+ifelse([$3],[0],
+[if test $gcc_cv_gas_major_version -eq $1 \
+&& test $gcc_cv_gas_minor_version -ge $2 \
+|| test $gcc_cv_gas_major_version -gt $1 ; then
+],
+[if test $gcc_cv_gas_major_version -eq $1 \
+&& (test $gcc_cv_gas_minor_version -gt $2 \
+ || (test $gcc_cv_gas_minor_version -eq $2 \
+ && test $gcc_cv_gas_patch_version -ge $3 )) \
+|| test $gcc_cv_gas_major_version -gt $1 ; then
+])
+ifelse([$4],[],[:],[$4])
+ifelse([$5],[],[],[else $5])
+fi
+]) []dnl # gcc_GAS_VERSION_GTE_IFELSE
+
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 5caebc3949a..2b8bf05bb77 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,55 @@
+2003-04-03 Jason Merrill <jason@redhat.com>
+
+ * misc.c (gnat_adjust_rli): #if 0.
+
+2003-03-31 Geert Bosch <bosch@gnat.com>
+
+ PR ada/10020
+ * link.c : Fix misspelled "const" keyword
+
+2003-03-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7086
+ * utils2.c: Adjust calls to put_var_into_stack.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * Make-lang.in, Makefile.in, config-lang.in: GCC, not GNU CC.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * misc.c (gnat_init): Update for new prototype.
+
+2003-03-05 Olivier Hainque <hainque@gnat.com>
+
+ ada/9961
+ * raise.c (__gnat_Unwind_RaiseException): Add prototype to avoid
+ warning, and fix return type for the IN_RTS && !SJLJ case.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * Make-lang.in (ada.tags): New target.
+
+2003-03-04 Olivier Hainque <hainque@act-europe.fr>
+
+ ada/9911
+ * a-except.adb (Unwind_RaiseException): Import a GNAT specific
+ wrapper, which name remains constant whatever underlying GCC
+ scheme.
+
+ * raise.c (__gnat_Unwind_RaiseException): New wrappers, providing
+ the stable interface needed for a-except.
+
+2003-03-02 Andreas Jaeger <aj@suse.de>
+
+ * gnat_ug_unx.texi, gnat_ug_vms.texi, gnat_ug_vxw.texi,
+ gnat_ug_wnt.texi: Regenerate.
+
+2003-03-02 Laurent Guerby <guerby@acm.org>
+
+ * Makefile.in (install-gnatlib): Match previous change there
+ so it works.
+
2003-02-28 Andreas Schwab <schwab@suse.de>
* Make-lang.in (install-gnatlib): Change to ada directory before
@@ -40,8 +92,8 @@
PR ada/8344
* final.c: rename to adafinal.c to avoid file name conflicts with gcc file.
- * Makefile.in: match previous change.
- * Make-lang.in: match previous change.
+ * Makefile.in: match previous change.
+ * Make-lang.in: match previous change.
2003-01-29 Joel Sherrill <joel@OARcorp.com>
@@ -459,9 +511,9 @@
(REAL_VALUE_RNDZINT, REAL_VALUE_UNSIGNED_RNDZINT): Remove.
2002-08-25 Andre Leis <a.leis@gmx.net>
- David Billinghurst (David.Billinghurst@riotinto.com>
+ David Billinghurst (David.Billinghurst@riotinto.com>
- * sysdep.c (__gnat_ttyname): include <termios.h> on cygwin
+ * sysdep.c (__gnat_ttyname): include <termios.h> on cygwin
2002-08-13 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in
index 157b63dc2d3..c357ddbaf95 100644
--- a/gcc/ada/Make-lang.in
+++ b/gcc/ada/Make-lang.in
@@ -2,20 +2,20 @@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
-#This file is part of GNU CC.
+#This file is part of GCC.
-#GNU CC is free software; you can redistribute it and/or modify
+#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.
-#GNU CC is distributed in the hope that it will be useful,
+#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 GNU CC; see the file COPYING. If not, write to
+#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.
@@ -83,7 +83,7 @@ ADA_FLAGS_TO_PASS = \
# FIXME: need to add $(ALL_ADA_CFLAGS) to .c.o suffix rule
# Use loose warnings for this front end, but add some special flags
-ada-warn = $(ALL_ADA_CFLAGS)
+ada-warn = $(ALL_ADA_CFLAGS) $(WERROR)
# unresolved warnings in a couple of files
ada/tracebak.o-warn = -Wno-error
ada/b_gnatb.o-warn = -Wno-error
@@ -341,6 +341,9 @@ ada.all.cross:
ada.start.encap:
ada.rest.encap:
+
+ada.tags: force
+ cd $(srcdir)/ada; etags *.c *.h *.ads *.adb
# Generate documentation.
#
diff --git a/gcc/ada/Makefile.in b/gcc/ada/Makefile.in
index dfae32c9672..87cac08b1cc 100644
--- a/gcc/ada/Makefile.in
+++ b/gcc/ada/Makefile.in
@@ -1,20 +1,20 @@
# Makefile for GNU Ada Compiler (GNAT).
# Copyright (C) 1994-2003 Free Software Foundation, Inc.
-#This file is part of GNU CC.
+#This file is part of GCC.
-#GNU CC is free software; you can redistribute it and/or modify
+#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.
-#GNU CC is distributed in the hope that it will be useful,
+#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 GNU CC; see the file COPYING. If not, write to
+#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.
@@ -750,7 +750,25 @@ ifeq ($(strip $(filter-out mips sgi irix%,$(targ))),)
LIBRARY_VERSION := $(strip $(shell grep Library_Version $(fsrcpfx)gnatvsn.ads | sed -e 's/.*GNAT Lib v\(.*\)[ "].*/\1/'))
endif
-ifeq ($(strip $(filter-out hppa% hp hpux%,$(targ))),)
+ifeq ($(strip $(filter-out hppa% hp hpux10%,$(targ))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-excpol.adb<4wexcpol.adb \
+ a-intnam.ads<4hintnam.ads \
+ s-inmaop.adb<7sinmaop.adb \
+ s-interr.adb<5ginterr.adb \
+ s-intman.adb<7sintman.adb \
+ s-osinte.adb<5hosinte.adb \
+ s-osinte.ads<5hosinte.ads \
+ s-parame.ads<5hparame.ads \
+ s-osprim.adb<7sosprim.adb \
+ s-taprop.adb<5htaprop.adb \
+ s-taspri.ads<5htaspri.ads \
+ s-tpopsp.adb<7stpopsp.adb \
+ g-soccon.ads<3hsoccon.ads \
+ system.ads<5hsystem.ads
+endif
+
+ifeq ($(strip $(filter-out hppa% hp hpux11%,$(targ))),)
LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<4hintnam.ads \
s-inmaop.adb<7sinmaop.adb \
@@ -766,7 +784,7 @@ ifeq ($(strip $(filter-out hppa% hp hpux%,$(targ))),)
g-soccon.ads<3hsoccon.ads \
system.ads<5hsystem.ads
- TGT_LIB = /usr/lib/libcl.a -lpthread
+ TGT_LIB = /usr/lib/libcl.a
THREADSLIB = -lpthread -lc_r
SYMLIB = -laddr2line -lbfd $(INTLLIBS)
soext = .sl
@@ -789,6 +807,7 @@ ifeq ($(strip $(filter-out hppa% hp hpux%,$(targ))),)
g-soccon.ads<3hsoccon.ads \
system.ads<5hsystem.ads
+ TGT_LIB =
THREADSLIB = -lcma
endif
endif
@@ -1717,19 +1736,19 @@ install-gnatlib: ../stamp-gnatlib
$(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
-$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR)
-$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR)
- -$(INSTALL_DATA) ada/rts/Makefile.adalib $(DESTDIR)$(ADA_RTL_OBJ_DIR)
- for file in ada/rts/*.ali; do \
+ -$(INSTALL_DATA) rts/Makefile.adalib $(DESTDIR)$(ADA_RTL_OBJ_DIR)
+ for file in rts/*.ali; do \
$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
done
- -for file in ada/rts/*$(arext);do \
+ -for file in rts/*$(arext);do \
$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
done
ifeq ($(strip $(filter-out alpha% dec vms% openvms% alphavms%,$(targ))),)
- -for file in ada/rts/lib*$(soext);do \
+ -for file in rts/lib*$(soext);do \
$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
done
else
- -for file in ada/rts/lib*-**$(soext);do \
+ -for file in rts/lib*-**$(soext);do \
$(INSTALL_DATA) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR); \
done
endif
@@ -1738,7 +1757,7 @@ endif
-( cd $(DESTDIR)$(ADA_RTL_OBJ_DIR) && \
$(LN_S) libgnarl-*$(soext) libgnarl$(soext) )
# This copy must be done preserving the date on the original file.
- for file in ada/rts/*.adb ada/rts/*.ads; do \
+ for file in rts/*.adb rts/*.ads; do \
$(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR); \
done
cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb
diff --git a/gcc/ada/a-except.adb b/gcc/ada/a-except.adb
index e18d0e8fa53..979f11e41c9 100644
--- a/gcc/ada/a-except.adb
+++ b/gcc/ada/a-except.adb
@@ -199,7 +199,7 @@ package body Ada.Exceptions is
function Unwind_RaiseException
(E : access GNAT_GCC_Exception)
return Unwind_Reason_Code;
- pragma Import (C, Unwind_RaiseException, "_Unwind_RaiseException");
+ pragma Import (C, Unwind_RaiseException, "__gnat_Unwind_RaiseException");
-----------------------
-- Local Subprograms --
diff --git a/gcc/ada/config-lang.in b/gcc/ada/config-lang.in
index 445551eed8b..8c5a883a73a 100644
--- a/gcc/ada/config-lang.in
+++ b/gcc/ada/config-lang.in
@@ -1,20 +1,20 @@
# Top level configure fragment for GNU Ada (GNAT).
# Copyright (C) 1994-2001 Free Software Foundation, Inc.
-#This file is part of GNU CC.
+#This file is part of GCC.
-#GNU CC is free software; you can redistribute it and/or modify
+#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.
-#GNU CC is distributed in the hope that it will be useful,
+#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 GNU CC; see the file COPYING. If not, write to
+#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.
diff --git a/gcc/ada/gnat_ug_unx.texi b/gcc/ada/gnat_ug_unx.texi
index 45e09632934..e0924e4750f 100644
--- a/gcc/ada/gnat_ug_unx.texi
+++ b/gcc/ada/gnat_ug_unx.texi
@@ -1913,7 +1913,7 @@ gnatmake my_main.adb -largs file1.o file2.o
@cindex Binder output file
@noindent
-If the main program is in some language other than Ada, Then you may
+If the main program is in some language other than Ada, you may
have more than one entry point in the Ada subsystem. You must use a
special option of the binder to generate callable routines to initialize
and finalize the Ada units (@pxref{Binding with Non-Ada Main Programs}).
diff --git a/gcc/ada/gnat_ug_vms.texi b/gcc/ada/gnat_ug_vms.texi
index 60c5b4d9922..d712ec5797c 100644
--- a/gcc/ada/gnat_ug_vms.texi
+++ b/gcc/ada/gnat_ug_vms.texi
@@ -1818,7 +1818,7 @@ GNAT MAKE MY_MAIN.ADB /LINKER_QUALIFIERS FILE1.OBJ FILE2.OBJ
@cindex Binder output file
@noindent
-If the main program is in some language other than Ada, Then you may
+If the main program is in some language other than Ada, you may
have more than one entry point in the Ada subsystem. You must use a
special option of the binder to generate callable routines to initialize
and finalize the Ada units (@pxref{Binding with Non-Ada Main Programs}).
diff --git a/gcc/ada/gnat_ug_vxw.texi b/gcc/ada/gnat_ug_vxw.texi
index 8eb9b3883eb..50d7c9dd9ba 100644
--- a/gcc/ada/gnat_ug_vxw.texi
+++ b/gcc/ada/gnat_ug_vxw.texi
@@ -2040,7 +2040,7 @@ gnatmake my_main.adb -largs file1.o file2.o
@cindex Binder output file
@noindent
-If the main program is in some language other than Ada, Then you may
+If the main program is in some language other than Ada, you may
have more than one entry point in the Ada subsystem. You must use a
special option of the binder to generate callable routines to initialize
and finalize the Ada units (@pxref{Binding with Non-Ada Main Programs}).
diff --git a/gcc/ada/gnat_ug_wnt.texi b/gcc/ada/gnat_ug_wnt.texi
index 04b18c61e23..24390ffb555 100644
--- a/gcc/ada/gnat_ug_wnt.texi
+++ b/gcc/ada/gnat_ug_wnt.texi
@@ -1927,7 +1927,7 @@ gnatmake my_main.adb -largs file1.o file2.o
@cindex Binder output file
@noindent
-If the main program is in some language other than Ada, Then you may
+If the main program is in some language other than Ada, you may
have more than one entry point in the Ada subsystem. You must use a
special option of the binder to generate callable routines to initialize
and finalize the Ada units (@pxref{Binding with Non-Ada Main Programs}).
diff --git a/gcc/ada/link.c b/gcc/ada/link.c
index 36fd17ab126..6cdbc9f1880 100644
--- a/gcc/ada/link.c
+++ b/gcc/ada/link.c
@@ -132,7 +132,7 @@ const char *object_library_extension = ".a";
const char *object_file_option = "-Wl,-f,";
const char *run_path_option = "";
int link_max = 15000;
-cnonst unsigned char objlist_file_supported = 1;
+const unsigned char objlist_file_supported = 1;
char shared_libgnat_default = STATIC;
unsigned char using_gnu_linker = 0;
const char *object_library_extension = ".a";
diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c
index a8293e709fb..1a5c9dbd252 100644
--- a/gcc/ada/misc.c
+++ b/gcc/ada/misc.c
@@ -79,7 +79,7 @@ extern FILE *asm_out_file;
extern int save_argc;
extern char **save_argv;
-static const char *gnat_init PARAMS ((const char *));
+static bool gnat_init PARAMS ((void));
static void gnat_init_options PARAMS ((void));
static int gnat_decode_option PARAMS ((int, char **));
static HOST_WIDE_INT gnat_get_alias_set PARAMS ((tree));
@@ -337,9 +337,8 @@ internal_error_function (msgid, ap)
/* Perform all the initialization steps that are language-specific. */
-static const char *
-gnat_init (filename)
- const char *filename;
+static bool
+gnat_init ()
{
/* Performs whatever initialization steps needed by the language-dependent
lexical analyzer.
@@ -350,7 +349,7 @@ gnat_init (filename)
gnat_init_decl_processing ();
/* Add the input filename as the last argument. */
- gnat_argv[gnat_argc] = (char *) filename;
+ gnat_argv[gnat_argc] = (char *) main_input_filename;
gnat_argc++;
gnat_argv[gnat_argc] = 0;
@@ -361,10 +360,7 @@ gnat_init (filename)
set_lang_adjust_rli (gnat_adjust_rli);
- if (filename == 0)
- filename = "";
-
- return filename;
+ return true;
}
/* If we are using the GCC mechanism for to process exception handling, we
@@ -567,8 +563,11 @@ gnat_expand_expr (exp, target, tmode, modifier)
static void
gnat_adjust_rli (rli)
- record_layout_info rli;
+ record_layout_info rli ATTRIBUTE_UNUSED;
{
+#if 0
+ /* This code seems to have no actual effect; record_align should already
+ reflect the largest alignment desired by a field. jason 2003-04-01 */
unsigned int record_align = rli->unpadded_align;
tree field;
@@ -580,6 +579,7 @@ gnat_adjust_rli (rli)
if (TYPE_PACKED (rli->t))
rli->record_align = record_align;
+#endif
}
/* Make a TRANSFORM_EXPR to later expand GNAT_NODE into code. */
diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c
index 087448a4d50..a9841740d88 100644
--- a/gcc/ada/raise.c
+++ b/gcc/ada/raise.c
@@ -88,10 +88,20 @@ __gnat_unhandled_terminate ()
}
/* Below is the code related to the integration of the GCC mechanism for
- exception handling. */
+ exception handling. Still work in progress. */
#include "unwind.h"
+/* If the underlying GCC scheme for exception handling is SJLJ, the standard
+ propagation routine (_Unwind_RaiseException) is actually renamed using a
+ #define directive (see unwing-sjlj.c). We need a consistently named
+ interface to import from a-except, so stubs are defined here, at the end
+ of this file. */
+
+_Unwind_Reason_Code
+__gnat_Unwind_RaiseException PARAMS ((struct _Unwind_Exception *));
+
+
/* Exception Handling personality routine for Ada.
??? It is currently inspired from the one for C++, needs cleanups and
@@ -597,21 +607,45 @@ __gnat_eh_personality (version, actions, exception_class, ue_header, context)
}
-#else /* IN_RTS - For eh personality routine */
+/* Stubs for the libgcc unwinding interface, to be imported by a-except. */
+
+#ifdef __USING_SJLJ_EXCEPTIONS__
+
+_Unwind_Reason_Code
+__gnat_Unwind_RaiseException (e)
+ struct _Unwind_Exception *e;
+{
+ return _Unwind_SjLj_RaiseException (e);
+}
+
+#else
+/* __USING_SJLJ_EXCEPTIONS__ not defined */
+
+_Unwind_Reason_Code
+__gnat_Unwind_RaiseException (e)
+ struct _Unwind_Exception *e;
+{
+ return _Unwind_RaiseException (e);
+}
+
+#endif
+
+#else
+/* IN_RTS not defined */
/* The calls to the GCC runtime interface for exception raising are currently
issued from a-except.adb, which is used by both the runtime library and
the compiler. As the compiler binary is not linked against the GCC runtime
library, we need a stub for this interface in the compiler case. */
+/* Since we don't link the compiler with a host libgcc, we should not be
+ using the GCC eh mechanism for the compiler and so expect this function
+ never to be called. */
_Unwind_Reason_Code
-_Unwind_RaiseException (e)
+__gnat_Unwind_RaiseException (e)
struct _Unwind_Exception *e ATTRIBUTE_UNUSED;
{
- /* Since we don't link the compiler with a host libgcc, we should not be
- using the GCC eh mechanism for the compiler and so expect this function
- never to be called. */
abort ();
}
diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c
index 1d76d91ffd6..131aeec4d7e 100644
--- a/gcc/ada/utils2.c
+++ b/gcc/ada/utils2.c
@@ -2038,7 +2038,7 @@ gnat_mark_addressable (expr_node)
case VAR_DECL:
case PARM_DECL:
case RESULT_DECL:
- put_var_into_stack (expr_node);
+ put_var_into_stack (expr_node, /*rescan=*/true);
TREE_ADDRESSABLE (expr_node) = 1;
return true;
diff --git a/gcc/alias.c b/gcc/alias.c
index 9be3aa05534..49b53c9b5d7 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -41,6 +41,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "langhooks.h"
#include "timevar.h"
#include "target.h"
+#include "cgraph.h"
/* The alias sets assigned to MEMs assist the back-end in determining
which MEMs can alias which other MEMs. In general, two MEMs in
@@ -97,7 +98,6 @@ rtx get_addr PARAMS ((rtx));
static int memrefs_conflict_p PARAMS ((int, rtx, int, rtx,
HOST_WIDE_INT));
static void record_set PARAMS ((rtx, rtx, void *));
-static rtx find_base_term PARAMS ((rtx));
static int base_alias_check PARAMS ((rtx, rtx, enum machine_mode,
enum machine_mode));
static rtx find_base_value PARAMS ((rtx));
@@ -1117,6 +1117,7 @@ canon_rtx (x)
}
/* Return 1 if X and Y are identical-looking rtx's.
+ Expect that X and Y has been already canonicalized.
We use the data in reg_known_value above to see if two registers with
different numbers are, in fact, equivalent. */
@@ -1135,9 +1136,6 @@ rtx_equal_for_memref_p (x, y)
if (x == 0 || y == 0)
return 0;
- x = canon_rtx (x);
- y = canon_rtx (y);
-
if (x == y)
return 1;
@@ -1176,24 +1174,42 @@ rtx_equal_for_memref_p (x, y)
case ADDRESSOF:
return (XINT (x, 1) == XINT (y, 1)
- && rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0)));
+ && rtx_equal_for_memref_p (XEXP (x, 0),
+ XEXP (y, 0)));
default:
break;
}
- /* For commutative operations, the RTX match if the operand match in any
- order. Also handle the simple binary and unary cases without a loop. */
- if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
+ /* canon_rtx knows how to handle plus. No need to canonicalize. */
+ if (code == PLUS)
return ((rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)))
|| (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 1))
&& rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 0))));
+ /* For commutative operations, the RTX match if the operand match in any
+ order. Also handle the simple binary and unary cases without a loop. */
+ if (code == EQ || code == NE || GET_RTX_CLASS (code) == 'c')
+ {
+ rtx xop0 = canon_rtx (XEXP (x, 0));
+ rtx yop0 = canon_rtx (XEXP (y, 0));
+ rtx yop1 = canon_rtx (XEXP (y, 1));
+
+ return ((rtx_equal_for_memref_p (xop0, yop0)
+ && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop1))
+ || (rtx_equal_for_memref_p (xop0, yop1)
+ && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)), yop0)));
+ }
else if (GET_RTX_CLASS (code) == '<' || GET_RTX_CLASS (code) == '2')
- return (rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0))
- && rtx_equal_for_memref_p (XEXP (x, 1), XEXP (y, 1)));
+ {
+ return (rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
+ canon_rtx (XEXP (y, 0)))
+ && rtx_equal_for_memref_p (canon_rtx (XEXP (x, 1)),
+ canon_rtx (XEXP (y, 1))));
+ }
else if (GET_RTX_CLASS (code) == '1')
- return rtx_equal_for_memref_p (XEXP (x, 0), XEXP (y, 0));
+ return rtx_equal_for_memref_p (canon_rtx (XEXP (x, 0)),
+ canon_rtx (XEXP (y, 0)));
/* Compare the elements. If any pair of corresponding elements
fail to match, return 0 for the whole things.
@@ -1217,13 +1233,14 @@ rtx_equal_for_memref_p (x, y)
/* And the corresponding elements must match. */
for (j = 0; j < XVECLEN (x, i); j++)
- if (rtx_equal_for_memref_p (XVECEXP (x, i, j),
- XVECEXP (y, i, j)) == 0)
+ if (rtx_equal_for_memref_p (canon_rtx (XVECEXP (x, i, j)),
+ canon_rtx (XVECEXP (y, i, j))) == 0)
return 0;
break;
case 'e':
- if (rtx_equal_for_memref_p (XEXP (x, i), XEXP (y, i)) == 0)
+ if (rtx_equal_for_memref_p (canon_rtx (XEXP (x, i)),
+ canon_rtx (XEXP (y, i))) == 0)
return 0;
break;
@@ -1281,7 +1298,7 @@ find_symbolic_term (x)
return 0;
}
-static rtx
+rtx
find_base_term (x)
rtx x;
{
@@ -1548,9 +1565,11 @@ addr_side_effect_eval (addr, size, n_refs)
}
if (offset)
- addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0), GEN_INT (offset));
+ addr = gen_rtx_PLUS (GET_MODE (addr), XEXP (addr, 0),
+ GEN_INT (offset));
else
addr = XEXP (addr, 0);
+ addr = canon_rtx (addr);
return addr;
}
@@ -1560,6 +1579,7 @@ addr_side_effect_eval (addr, size, n_refs)
C is nonzero, we are testing aliases between X and Y + C.
XSIZE is the size in bytes of the X reference,
similarly YSIZE is the size in bytes for Y.
+ Expect that canon_rtx has been already called for X and Y.
If XSIZE or YSIZE is zero, we do not know the amount of memory being
referenced (the reference was BLKmode), so make the most pessimistic
@@ -1587,13 +1607,13 @@ memrefs_conflict_p (xsize, x, ysize, y, c)
else if (GET_CODE (x) == LO_SUM)
x = XEXP (x, 1);
else
- x = canon_rtx (addr_side_effect_eval (x, xsize, 0));
+ x = addr_side_effect_eval (x, xsize, 0);
if (GET_CODE (y) == HIGH)
y = XEXP (y, 0);
else if (GET_CODE (y) == LO_SUM)
y = XEXP (y, 1);
else
- y = canon_rtx (addr_side_effect_eval (y, ysize, 0));
+ y = addr_side_effect_eval (y, ysize, 0);
if (rtx_equal_for_memref_p (x, y))
{
@@ -1716,7 +1736,7 @@ memrefs_conflict_p (xsize, x, ysize, y, c)
{
if (GET_CODE (y) == AND || ysize < -INTVAL (XEXP (x, 1)))
xsize = -1;
- return memrefs_conflict_p (xsize, XEXP (x, 0), ysize, y, c);
+ return memrefs_conflict_p (xsize, canon_rtx (XEXP (x, 0)), ysize, y, c);
}
if (GET_CODE (y) == AND && GET_CODE (XEXP (y, 1)) == CONST_INT)
{
@@ -1726,7 +1746,7 @@ memrefs_conflict_p (xsize, x, ysize, y, c)
a following reference, so we do nothing with that for now. */
if (GET_CODE (x) == AND || xsize < -INTVAL (XEXP (y, 1)))
ysize = -1;
- return memrefs_conflict_p (xsize, x, ysize, XEXP (y, 0), c);
+ return memrefs_conflict_p (xsize, x, ysize, canon_rtx (XEXP (y, 0)), c);
}
if (GET_CODE (x) == ADDRESSOF)
@@ -2668,9 +2688,9 @@ mark_constant_function ()
if (insn)
;
else if (nonlocal_memory_referenced)
- DECL_IS_PURE (current_function_decl) = 1;
+ cgraph_rtl_info (current_function_decl)->pure_function = 1;
else
- TREE_READONLY (current_function_decl) = 1;
+ cgraph_rtl_info (current_function_decl)->const_function = 1;
}
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index bf123a21a7d..2e8dcf41ac4 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -150,12 +150,15 @@ typedef struct edge_def {
#define EDGE_DFS_BACK 32 /* A backwards edge */
#define EDGE_CAN_FALLTHRU 64 /* Candidate for straight line
flow. */
-#define EDGE_TRUE_VALUE 128 /* Edge taken when controlling
+#define EDGE_IRREDUCIBLE_LOOP 128 /* Part of irreducible loop. */
+
+#define EDGE_TRUE_VALUE 512 /* Edge taken when controlling
predicate is non zero. */
-#define EDGE_FALSE_VALUE 256 /* Edge taken when controlling
+#define EDGE_FALSE_VALUE 1024 /* Edge taken when controlling
predicate is zero. */
-#define EDGE_EXECUTABLE 512 /* Edge is executable. Only
+#define EDGE_EXECUTABLE 2048 /* Edge is executable. Only
valid during SSA-CCP. */
+#define EDGE_ALL_FLAGS 4095
#define EDGE_COMPLEX (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH)
@@ -352,6 +355,8 @@ extern void remove_fake_edges PARAMS ((void));
extern void add_noreturn_fake_exit_edges PARAMS ((void));
extern void connect_infinite_loops_to_exit PARAMS ((void));
extern int flow_call_edges_add PARAMS ((sbitmap));
+extern edge unchecked_make_edge PARAMS ((basic_block,
+ basic_block, int));
extern edge cached_make_edge PARAMS ((sbitmap *, basic_block,
basic_block, int));
extern edge make_edge PARAMS ((basic_block,
@@ -550,7 +555,7 @@ extern void init_flow PARAMS ((void));
extern void reorder_basic_blocks PARAMS ((void));
extern void dump_bb PARAMS ((basic_block, FILE *));
extern void debug_bb PARAMS ((basic_block));
-extern void debug_bb_n PARAMS ((int));
+extern basic_block debug_bb_n PARAMS ((int));
extern void dump_regset PARAMS ((regset, FILE *));
extern void debug_regset PARAMS ((regset));
extern void allocate_reg_life_data PARAMS ((void));
diff --git a/gcc/bitmap.c b/gcc/bitmap.c
index db5ed367016..4575f62a531 100644
--- a/gcc/bitmap.c
+++ b/gcc/bitmap.c
@@ -501,7 +501,6 @@ bitmap_last_set_bit (a)
if (word == 0)
word_num = 0, word = ptr->bits[0];
#else
- word = 0; /* [GIMPLE] Avoid uninitialized use warning. */
for (word_num = BITMAP_ELEMENT_WORDS; word_num-- > 0; )
if ((word = ptr->bits[word_num]) != 0)
break;
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 2e062bfefc4..b33bdd5741e 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -127,7 +127,8 @@ static rtx expand_builtin_memset PARAMS ((tree, rtx,
static rtx expand_builtin_bzero PARAMS ((tree));
static rtx expand_builtin_strlen PARAMS ((tree, rtx));
static rtx expand_builtin_alloca PARAMS ((tree, rtx));
-static rtx expand_builtin_unop PARAMS ((tree, rtx, rtx, optab));
+static rtx expand_builtin_unop PARAMS ((enum machine_mode,
+ tree, rtx, rtx, optab));
static rtx expand_builtin_frame_address PARAMS ((tree));
static tree stabilize_va_list PARAMS ((tree, int));
static rtx expand_builtin_expect PARAMS ((tree, rtx));
@@ -3926,7 +3927,8 @@ expand_builtin_alloca (arglist, target)
SUBTARGET may be used as the target for computing one of EXP's operands. */
static rtx
-expand_builtin_unop (arglist, target, subtarget, op_optab)
+expand_builtin_unop (target_mode, arglist, target, subtarget, op_optab)
+ enum machine_mode target_mode;
tree arglist;
rtx target, subtarget;
optab op_optab;
@@ -3943,7 +3945,8 @@ expand_builtin_unop (arglist, target, subtarget, op_optab)
op_optab, op0, target, 1);
if (target == 0)
abort ();
- return target;
+
+ return convert_to_mode (target_mode, target, 0);
}
/* Simplify a call to the fputs builtin.
@@ -4016,8 +4019,12 @@ simplify_builtin_fputs (arglist, ignore, unlocked)
/* FALLTHROUGH */
case 1: /* length is greater than 1, call fwrite. */
{
- tree string_arg = TREE_VALUE (arglist);
+ tree string_arg;
+ /* If optimizing for size keep fputs. */
+ if (optimize_size)
+ return 0;
+ string_arg = TREE_VALUE (arglist);
/* New argument list transforming fputs(string, stream) to
fwrite(string, 1, len, stream). */
arglist = build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)));
@@ -4292,6 +4299,7 @@ expand_builtin (exp, target, subtarget, mode, ignore)
tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
tree arglist = TREE_OPERAND (exp, 1);
enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl);
+ enum machine_mode target_mode = TYPE_MODE (TREE_TYPE (exp));
/* Perform postincrements before expanding builtin functions.  */
emit_queue ();
@@ -4535,7 +4543,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_FFS:
case BUILT_IN_FFSL:
case BUILT_IN_FFSLL:
- target = expand_builtin_unop (arglist, target, subtarget, ffs_optab);
+ target = expand_builtin_unop (target_mode, arglist, target,
+ subtarget, ffs_optab);
if (target)
return target;
break;
@@ -4543,7 +4552,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_CLZ:
case BUILT_IN_CLZL:
case BUILT_IN_CLZLL:
- target = expand_builtin_unop (arglist, target, subtarget, clz_optab);
+ target = expand_builtin_unop (target_mode, arglist, target,
+ subtarget, clz_optab);
if (target)
return target;
break;
@@ -4551,7 +4561,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_CTZ:
case BUILT_IN_CTZL:
case BUILT_IN_CTZLL:
- target = expand_builtin_unop (arglist, target, subtarget, ctz_optab);
+ target = expand_builtin_unop (target_mode, arglist, target,
+ subtarget, ctz_optab);
if (target)
return target;
break;
@@ -4559,8 +4570,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_POPCOUNT:
case BUILT_IN_POPCOUNTL:
case BUILT_IN_POPCOUNTLL:
- target = expand_builtin_unop (arglist, target, subtarget,
- popcount_optab);
+ target = expand_builtin_unop (target_mode, arglist, target,
+ subtarget, popcount_optab);
if (target)
return target;
break;
@@ -4568,7 +4579,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
case BUILT_IN_PARITY:
case BUILT_IN_PARITYL:
case BUILT_IN_PARITYLL:
- target = expand_builtin_unop (arglist, target, subtarget, parity_optab);
+ target = expand_builtin_unop (target_mode, arglist, target,
+ subtarget, parity_optab);
if (target)
return target;
break;
@@ -4972,15 +4984,41 @@ fold_builtin (exp)
|| fcode == BUILT_IN_EXPL))
{
tree expfn = TREE_OPERAND (TREE_OPERAND (arg, 0), 0);
- arg = build (RDIV_EXPR, type,
- TREE_VALUE (TREE_OPERAND (arg, 1)),
- build_real (type, dconst2));
+ arg = fold (build (RDIV_EXPR, type,
+ TREE_VALUE (TREE_OPERAND (arg, 1)),
+ build_real (type, dconst2)));
arglist = build_tree_list (NULL_TREE, arg);
return build_function_call_expr (expfn, arglist);
}
}
break;
+ case BUILT_IN_SIN:
+ case BUILT_IN_SINF:
+ case BUILT_IN_SINL:
+ if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+ {
+ tree arg = TREE_VALUE (arglist);
+
+ /* Optimize sin(0.0) = 0.0. */
+ if (real_zerop (arg))
+ return build_real (type, dconst0);
+ }
+ break;
+
+ case BUILT_IN_COS:
+ case BUILT_IN_COSF:
+ case BUILT_IN_COSL:
+ if (validate_arglist (arglist, REAL_TYPE, VOID_TYPE))
+ {
+ tree arg = TREE_VALUE (arglist);
+
+ /* Optimize cos(0.0) = 1.0. */
+ if (real_zerop (arg))
+ return build_real (type, dconst1);
+ }
+ break;
+
case BUILT_IN_EXP:
case BUILT_IN_EXPF:
case BUILT_IN_EXPL:
@@ -5045,13 +5083,75 @@ fold_builtin (exp)
tree arg0 = TREE_VALUE (arglist);
tree arg1 = TREE_VALUE (TREE_CHAIN (arglist));
- /* Optimize pow(x,0.0) = 1.0. */
- if (real_zerop (arg1))
- return omit_one_operand (type, build_real (type, dconst1), arg0);
-
/* Optimize pow(1.0,y) = 1.0. */
if (real_onep (arg0))
return omit_one_operand (type, build_real (type, dconst1), arg1);
+
+ if (TREE_CODE (arg1) == REAL_CST
+ && ! TREE_CONSTANT_OVERFLOW (arg1))
+ {
+ REAL_VALUE_TYPE c;
+ c = TREE_REAL_CST (arg1);
+
+ /* Optimize pow(x,0.0) = 1.0. */
+ if (REAL_VALUES_EQUAL (c, dconst0))
+ return omit_one_operand (type, build_real (type, dconst1),
+ arg0);
+
+ /* Optimize pow(x,1.0) = x. */
+ if (REAL_VALUES_EQUAL (c, dconst1))
+ return arg0;
+
+ /* Optimize pow(x,-1.0) = 1.0/x. */
+ if (REAL_VALUES_EQUAL (c, dconstm1))
+ return fold (build (RDIV_EXPR, type,
+ build_real (type, dconst1),
+ arg0));
+
+ /* Optimize pow(x,2.0) = x*x. */
+ if (REAL_VALUES_EQUAL (c, dconst2)
+ && (*lang_hooks.decls.global_bindings_p) () == 0
+ && ! contains_placeholder_p (arg0))
+ {
+ arg0 = save_expr (arg0);
+ return fold (build (MULT_EXPR, type, arg0, arg0));
+ }
+
+ /* Optimize pow(x,-2.0) = 1.0/(x*x). */
+ if (flag_unsafe_math_optimizations
+ && REAL_VALUES_EQUAL (c, dconstm2)
+ && (*lang_hooks.decls.global_bindings_p) () == 0
+ && ! contains_placeholder_p (arg0))
+ {
+ arg0 = save_expr (arg0);
+ return fold (build (RDIV_EXPR, type,
+ build_real (type, dconst1),
+ fold (build (MULT_EXPR, type,
+ arg0, arg0))));
+ }
+
+ /* Optimize pow(x,0.5) = sqrt(x). */
+ if (flag_unsafe_math_optimizations
+ && REAL_VALUES_EQUAL (c, dconsthalf))
+ {
+ tree sqrtfn;
+
+ if (fcode == BUILT_IN_POW)
+ sqrtfn = implicit_built_in_decls[BUILT_IN_SQRT];
+ else if (fcode == BUILT_IN_POWF)
+ sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTF];
+ else if (fcode == BUILT_IN_POWL)
+ sqrtfn = implicit_built_in_decls[BUILT_IN_SQRTL];
+ else
+ sqrtfn = NULL_TREE;
+
+ if (sqrtfn != NULL_TREE)
+ {
+ tree arglist = build_tree_list (NULL_TREE, arg0);
+ return build_function_call_expr (sqrtfn, arglist);
+ }
+ }
+ }
}
break;
diff --git a/gcc/builtins.def b/gcc/builtins.def
index 48fd19762ae..f0df8bbc5c2 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -59,7 +59,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
compiler. For instance C90 reserves floorf function, but does not
define it's meaning. When user uses floorf we may assume that the
floorf has the meaning we expect, but we can't produce floorf by
- simplifing floor((double)float) since runtime don't need to implement it. */
+ simplifying floor((double)float) since the runtime need not implement
+ it. */
/* A GCC builtin (like __builtin_saveregs) is provided by the
compiler, but does not correspond to a function in the standard
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 531936dcbb7..2bdd8b735df 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1,6 +1,6 @@
/* Subroutines shared by all languages that are variants of C.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002 Free Software Foundation, Inc.
+ 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@@ -23,8 +23,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "system.h"
#include "coretypes.h"
#include "tm.h"
+#include "intl.h"
#include "tree.h"
-#include "real.h"
#include "flags.h"
#include "toplev.h"
#include "output.h"
@@ -40,9 +40,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "cpplib.h"
#include "target.h"
#include "langhooks.h"
-#include "except.h" /* For USING_SJLJ_EXCEPTIONS. */
#include "tree-inline.h"
+
cpp_reader *parse_in; /* Declared in c-pragma.h. */
/* We let tm.h override the types used here, to handle trivial differences
@@ -87,10 +87,6 @@ cpp_reader *parse_in; /* Declared in c-pragma.h. */
: "long long unsigned int"))
#endif
-#ifndef REGISTER_PREFIX
-#define REGISTER_PREFIX ""
-#endif
-
/* The variant of the C language being processed. */
enum c_language_kind c_language;
@@ -198,8 +194,26 @@ int allow_pch = 1;
/* Switches common to the C front ends. */
/* Nonzero if prepreprocessing only. */
+
int flag_preprocess_only;
+/* Nonzero means don't output line number information. */
+
+char flag_no_line_commands;
+
+/* Nonzero causes -E output not to be done, but directives such as
+ #define that have side effects are still obeyed. */
+
+char flag_no_output;
+
+/* Nonzero means dump macros in some fashion. */
+
+char flag_dump_macros;
+
+/* Nonzero means pass #include lines through to the output. */
+
+char flag_dump_includes;
+
/* The file name to which we should write a precompiled header, or
NULL if no header will be written in this compile. */
@@ -793,18 +807,6 @@ static void check_nonnull_arg PARAMS ((void *, tree,
static bool nonnull_check_p PARAMS ((tree, unsigned HOST_WIDE_INT));
static bool get_nonnull_operand PARAMS ((tree,
unsigned HOST_WIDE_INT *));
-void builtin_define_std PARAMS ((const char *));
-static void builtin_define_with_value PARAMS ((const char *, const char *,
- int));
-static void builtin_define_with_int_value PARAMS ((const char *,
- HOST_WIDE_INT));
-static void builtin_define_with_hex_fp_value PARAMS ((const char *, tree,
- int, const char *,
- const char *));
-static void builtin_define_type_max PARAMS ((const char *, tree, int));
-static void builtin_define_type_precision PARAMS ((const char *, tree));
-static void builtin_define_float_constants PARAMS ((const char *,
- const char *, tree));
/* Table of machine-independent attributes common to all C-like languages. */
const struct attribute_spec c_common_attribute_table[] =
@@ -3415,8 +3417,6 @@ c_common_nodes_and_builtins ()
= build_pointer_type (build_qualified_type
(char_type_node, TYPE_QUAL_CONST));
- (*targetm.init_builtins) ();
-
/* This is special for C++ so functions can be overloaded. */
wchar_type_node = get_identifier (MODIFIED_WCHAR_TYPE);
wchar_type_node = TREE_TYPE (identifier_global_value (wchar_type_node));
@@ -3605,6 +3605,8 @@ c_common_nodes_and_builtins ()
#include "builtins.def"
#undef DEF_BUILTIN
+ (*targetm.init_builtins) ();
+
main_identifier_node = get_identifier ("main");
}
@@ -4215,8 +4217,8 @@ c_add_case_label (cases, cond, low_value, high_value)
return case_label;
}
-/* Finish an expression taking the address of LABEL. Returns an
- expression for the address. */
+/* Finish an expression taking the address of LABEL (an
+ IDENTIFIER_NODE). Returns an expression for the address. */
tree
finish_label_address_expr (label)
@@ -4232,6 +4234,9 @@ finish_label_address_expr (label)
pedwarn ("ISO C forbids taking the address of a label");
}
+ if (label == error_mark_node)
+ return error_mark_node;
+
label = lookup_label (label);
if (label == NULL_TREE)
result = null_pointer_node;
@@ -4748,461 +4753,15 @@ boolean_increment (code, arg)
return val;
}
-/* Define NAME with value TYPE precision. */
-static void
-builtin_define_type_precision (name, type)
- const char *name;
- tree type;
-{
- builtin_define_with_int_value (name, TYPE_PRECISION (type));
-}
-
-/* Define the float.h constants for TYPE using NAME_PREFIX and FP_SUFFIX. */
-static void
-builtin_define_float_constants (name_prefix, fp_suffix, type)
- const char *name_prefix;
- const char *fp_suffix;
- tree type;
-{
- /* Used to convert radix-based values to base 10 values in several cases.
-
- In the max_exp -> max_10_exp conversion for 128-bit IEEE, we need at
- least 6 significant digits for correct results. Using the fraction
- formed by (log(2)*1e6)/(log(10)*1e6) overflows a 32-bit integer as an
- intermediate; perhaps someone can find a better approximation, in the
- mean time, I suspect using doubles won't harm the bootstrap here. */
-
- const double log10_2 = .30102999566398119521;
- double log10_b;
- const struct real_format *fmt;
-
- char name[64], buf[128];
- int dig, min_10_exp, max_10_exp;
- int decimal_dig;
-
- fmt = real_format_for_mode[TYPE_MODE (type) - QFmode];
-
- /* The radix of the exponent representation. */
- if (type == float_type_node)
- builtin_define_with_int_value ("__FLT_RADIX__", fmt->b);
- log10_b = log10_2 * fmt->log2_b;
-
- /* The number of radix digits, p, in the floating-point significand. */
- sprintf (name, "__%s_MANT_DIG__", name_prefix);
- builtin_define_with_int_value (name, fmt->p);
-
- /* The number of decimal digits, q, such that any floating-point number
- with q decimal digits can be rounded into a floating-point number with
- p radix b digits and back again without change to the q decimal digits,
-
- p log10 b if b is a power of 10
- floor((p - 1) log10 b) otherwise
- */
- dig = (fmt->p - 1) * log10_b;
- sprintf (name, "__%s_DIG__", name_prefix);
- builtin_define_with_int_value (name, dig);
-
- /* The minimum negative int x such that b**(x-1) is a normalized float. */
- sprintf (name, "__%s_MIN_EXP__", name_prefix);
- sprintf (buf, "(%d)", fmt->emin);
- builtin_define_with_value (name, buf, 0);
-
- /* The minimum negative int x such that 10**x is a normalized float,
-
- ceil (log10 (b ** (emin - 1)))
- = ceil (log10 (b) * (emin - 1))
-
- Recall that emin is negative, so the integer truncation calculates
- the ceiling, not the floor, in this case. */
- min_10_exp = (fmt->emin - 1) * log10_b;
- sprintf (name, "__%s_MIN_10_EXP__", name_prefix);
- sprintf (buf, "(%d)", min_10_exp);
- builtin_define_with_value (name, buf, 0);
-
- /* The maximum int x such that b**(x-1) is a representable float. */
- sprintf (name, "__%s_MAX_EXP__", name_prefix);
- builtin_define_with_int_value (name, fmt->emax);
-
- /* The maximum int x such that 10**x is in the range of representable
- finite floating-point numbers,
-
- floor (log10((1 - b**-p) * b**emax))
- = floor (log10(1 - b**-p) + log10(b**emax))
- = floor (log10(1 - b**-p) + log10(b)*emax)
-
- The safest thing to do here is to just compute this number. But since
- we don't link cc1 with libm, we cannot. We could implement log10 here
- a series expansion, but that seems too much effort because:
-
- Note that the first term, for all extant p, is a number exceedingly close
- to zero, but slightly negative. Note that the second term is an integer
- scaling an irrational number, and that because of the floor we are only
- interested in its integral portion.
-
- In order for the first term to have any effect on the integral portion
- of the second term, the second term has to be exceedingly close to an
- integer itself (e.g. 123.000000000001 or something). Getting a result
- that close to an integer requires that the irrational multiplicand have
- a long series of zeros in its expansion, which doesn't occur in the
- first 20 digits or so of log10(b).
-
- Hand-waving aside, crunching all of the sets of constants above by hand
- does not yield a case for which the first term is significant, which
- in the end is all that matters. */
- max_10_exp = fmt->emax * log10_b;
- sprintf (name, "__%s_MAX_10_EXP__", name_prefix);
- builtin_define_with_int_value (name, max_10_exp);
-
- /* The number of decimal digits, n, such that any floating-point number
- can be rounded to n decimal digits and back again without change to
- the value.
-
- p * log10(b) if b is a power of 10
- ceil(1 + p * log10(b)) otherwise
-
- The only macro we care about is this number for the widest supported
- floating type, but we want this value for rendering constants below. */
- {
- double d_decimal_dig = 1 + fmt->p * log10_b;
- decimal_dig = d_decimal_dig;
- if (decimal_dig < d_decimal_dig)
- decimal_dig++;
- }
- if (type == long_double_type_node)
- builtin_define_with_int_value ("__DECIMAL_DIG__", decimal_dig);
-
- /* Since, for the supported formats, B is always a power of 2, we
- construct the following numbers directly as a hexadecimal
- constants. */
-
- /* The maximum representable finite floating-point number,
- (1 - b**-p) * b**emax */
- {
- int i, n;
- char *p;
-
- strcpy (buf, "0x0.");
- n = fmt->p * fmt->log2_b;
- for (i = 0, p = buf + 4; i + 3 < n; i += 4)
- *p++ = 'f';
- if (i < n)
- *p++ = "08ce"[n - i];
- sprintf (p, "p%d", fmt->emax * fmt->log2_b);
- }
- sprintf (name, "__%s_MAX__", name_prefix);
- builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
-
- /* The minimum normalized positive floating-point number,
- b**(emin-1). */
- sprintf (name, "__%s_MIN__", name_prefix);
- sprintf (buf, "0x1p%d", (fmt->emin - 1) * fmt->log2_b);
- builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
-
- /* The difference between 1 and the least value greater than 1 that is
- representable in the given floating point type, b**(1-p). */
- sprintf (name, "__%s_EPSILON__", name_prefix);
- sprintf (buf, "0x1p%d", (1 - fmt->p) * fmt->log2_b);
- builtin_define_with_hex_fp_value (name, type, decimal_dig, buf, fp_suffix);
-
- /* For C++ std::numeric_limits<T>::denorm_min. The minimum denormalized
- positive floating-point number, b**(emin-p). Zero for formats that
- don't support denormals. */
- sprintf (name, "__%s_DENORM_MIN__", name_prefix);
- if (fmt->has_denorm)
- {
- sprintf (buf, "0x1p%d", (fmt->emin - fmt->p) * fmt->log2_b);
- builtin_define_with_hex_fp_value (name, type, decimal_dig,
- buf, fp_suffix);
- }
- else
- {
- sprintf (buf, "0.0%s", fp_suffix);
- builtin_define_with_value (name, buf, 0);
- }
-
- /* For C++ std::numeric_limits<T>::has_infinity. */
- sprintf (name, "__%s_HAS_INFINITY__", name_prefix);
- builtin_define_with_int_value (name,
- MODE_HAS_INFINITIES (TYPE_MODE (type)));
- /* For C++ std::numeric_limits<T>::has_quiet_NaN. We do not have a
- predicate to distinguish a target that has both quiet and
- signalling NaNs from a target that has only quiet NaNs or only
- signalling NaNs, so we assume that a target that has any kind of
- NaN has quiet NaNs. */
- sprintf (name, "__%s_HAS_QUIET_NAN__", name_prefix);
- builtin_define_with_int_value (name, MODE_HAS_NANS (TYPE_MODE (type)));
-}
-
-/* Hook that registers front end and target-specific built-ins. */
+/* Built-in macros for stddef.h, that require macros defined in this
+ file. */
void
-cb_register_builtins (pfile)
- cpp_reader *pfile;
+c_stddef_cpp_builtins()
{
- /* -undef turns off target-specific built-ins. */
- if (flag_undef)
- return;
-
- if (c_language == clk_cplusplus)
- {
- if (SUPPORTS_ONE_ONLY)
- cpp_define (pfile, "__GXX_WEAK__=1");
- else
- cpp_define (pfile, "__GXX_WEAK__=0");
- if (flag_exceptions)
- cpp_define (pfile, "__EXCEPTIONS");
- if (warn_deprecated)
- cpp_define (pfile, "__DEPRECATED");
- }
-
- /* represents the C++ ABI version, always defined so it can be used while
- preprocessing C and assembler. */
- cpp_define (pfile, "__GXX_ABI_VERSION=102");
-
- /* libgcc needs to know this. */
- if (USING_SJLJ_EXCEPTIONS)
- cpp_define (pfile, "__USING_SJLJ_EXCEPTIONS__");
-
- /* stddef.h needs to know these. */
builtin_define_with_value ("__SIZE_TYPE__", SIZE_TYPE, 0);
builtin_define_with_value ("__PTRDIFF_TYPE__", PTRDIFF_TYPE, 0);
builtin_define_with_value ("__WCHAR_TYPE__", MODIFIED_WCHAR_TYPE, 0);
builtin_define_with_value ("__WINT_TYPE__", WINT_TYPE, 0);
-
- /* limits.h needs to know these. */
- builtin_define_type_max ("__SCHAR_MAX__", signed_char_type_node, 0);
- builtin_define_type_max ("__SHRT_MAX__", short_integer_type_node, 0);
- builtin_define_type_max ("__INT_MAX__", integer_type_node, 0);
- builtin_define_type_max ("__LONG_MAX__", long_integer_type_node, 1);
- builtin_define_type_max ("__LONG_LONG_MAX__", long_long_integer_type_node, 2);
- builtin_define_type_max ("__WCHAR_MAX__", wchar_type_node, 0);
-
- builtin_define_type_precision ("__CHAR_BIT__", char_type_node);
-
- /* float.h needs to know these. */
-
- builtin_define_with_int_value ("__FLT_EVAL_METHOD__",
- TARGET_FLT_EVAL_METHOD);
-
- builtin_define_float_constants ("FLT", "F", float_type_node);
- builtin_define_float_constants ("DBL", "", double_type_node);
- builtin_define_float_constants ("LDBL", "L", long_double_type_node);
-
- /* For use in assembly language. */
- builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
- builtin_define_with_value ("__USER_LABEL_PREFIX__", user_label_prefix, 0);
-
- /* Misc. */
- builtin_define_with_value ("__VERSION__", version_string, 1);
-
- /* Other target-independent built-ins determined by command-line
- options. */
- if (optimize_size)
- cpp_define (pfile, "__OPTIMIZE_SIZE__");
- if (optimize)
- cpp_define (pfile, "__OPTIMIZE__");
-
- if (flag_hosted)
- cpp_define (pfile, "__STDC_HOSTED__=1");
- else
- cpp_define (pfile, "__STDC_HOSTED__=0");
-
- if (fast_math_flags_set_p ())
- cpp_define (pfile, "__FAST_MATH__");
- if (flag_really_no_inline)
- cpp_define (pfile, "__NO_INLINE__");
- if (flag_signaling_nans)
- cpp_define (pfile, "__SUPPORT_SNAN__");
- if (flag_finite_math_only)
- cpp_define (pfile, "__FINITE_MATH_ONLY__=1");
- else
- cpp_define (pfile, "__FINITE_MATH_ONLY__=0");
-
- if (flag_iso)
- cpp_define (pfile, "__STRICT_ANSI__");
-
- if (!flag_signed_char)
- cpp_define (pfile, "__CHAR_UNSIGNED__");
-
- if (c_language == clk_cplusplus && TREE_UNSIGNED (wchar_type_node))
- cpp_define (pfile, "__WCHAR_UNSIGNED__");
-
- /* Make the choice of ObjC runtime visible to source code. */
- if (flag_objc && flag_next_runtime)
- cpp_define (pfile, "__NEXT_RUNTIME__");
-
- /* A straightforward target hook doesn't work, because of problems
- linking that hook's body when part of non-C front ends. */
-# define preprocessing_asm_p() (cpp_get_options (pfile)->lang == CLK_ASM)
-# define preprocessing_trad_p() (cpp_get_options (pfile)->traditional)
-# define builtin_define(TXT) cpp_define (pfile, TXT)
-# define builtin_assert(TXT) cpp_assert (pfile, TXT)
- TARGET_CPU_CPP_BUILTINS ();
- TARGET_OS_CPP_BUILTINS ();
-}
-
-/* Pass an object-like macro. If it doesn't lie in the user's
- namespace, defines it unconditionally. Otherwise define a version
- with two leading underscores, and another version with two leading
- and trailing underscores, and define the original only if an ISO
- standard was not nominated.
-
- e.g. passing "unix" defines "__unix", "__unix__" and possibly
- "unix". Passing "_mips" defines "__mips", "__mips__" and possibly
- "_mips". */
-void
-builtin_define_std (macro)
- const char *macro;
-{
- size_t len = strlen (macro);
- char *buff = alloca (len + 5);
- char *p = buff + 2;
- char *q = p + len;
-
- /* prepend __ (or maybe just _) if in user's namespace. */
- memcpy (p, macro, len + 1);
- if (!( *p == '_' && (p[1] == '_' || ISUPPER (p[1]))))
- {
- if (*p != '_')
- *--p = '_';
- if (p[1] != '_')
- *--p = '_';
- }
- cpp_define (parse_in, p);
-
- /* If it was in user's namespace... */
- if (p != buff + 2)
- {
- /* Define the macro with leading and following __. */
- if (q[-1] != '_')
- *q++ = '_';
- if (q[-2] != '_')
- *q++ = '_';
- *q = '\0';
- cpp_define (parse_in, p);
-
- /* Finally, define the original macro if permitted. */
- if (!flag_iso)
- cpp_define (parse_in, macro);
- }
-}
-
-/* Pass an object-like macro and a value to define it to. The third
- parameter says whether or not to turn the value into a string
- constant. */
-static void
-builtin_define_with_value (macro, expansion, is_str)
- const char *macro;
- const char *expansion;
- int is_str;
-{
- char *buf;
- size_t mlen = strlen (macro);
- size_t elen = strlen (expansion);
- size_t extra = 2; /* space for an = and a NUL */
-
- if (is_str)
- extra += 2; /* space for two quote marks */
-
- buf = alloca (mlen + elen + extra);
- if (is_str)
- sprintf (buf, "%s=\"%s\"", macro, expansion);
- else
- sprintf (buf, "%s=%s", macro, expansion);
-
- cpp_define (parse_in, buf);
-}
-
-/* Pass an object-like macro and an integer value to define it to. */
-static void
-builtin_define_with_int_value (macro, value)
- const char *macro;
- HOST_WIDE_INT value;
-{
- char *buf;
- size_t mlen = strlen (macro);
- size_t vlen = 18;
- size_t extra = 2; /* space for = and NUL. */
-
- buf = alloca (mlen + vlen + extra);
- memcpy (buf, macro, mlen);
- buf[mlen] = '=';
- sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
-
- cpp_define (parse_in, buf);
-}
-
-/* Pass an object-like macro a hexadecimal floating-point value. */
-static void
-builtin_define_with_hex_fp_value (macro, type, digits, hex_str, fp_suffix)
- const char *macro;
- tree type ATTRIBUTE_UNUSED;
- int digits;
- const char *hex_str;
- const char *fp_suffix;
-{
- REAL_VALUE_TYPE real;
- char dec_str[64], buf[256];
-
- /* Hex values are really cool and convenient, except that they're
- not supported in strict ISO C90 mode. First, the "p-" sequence
- is not valid as part of a preprocessor number. Second, we get a
- pedwarn from the preprocessor, which has no context, so we can't
- suppress the warning with __extension__.
-
- So instead what we do is construct the number in hex (because
- it's easy to get the exact correct value), parse it as a real,
- then print it back out as decimal. */
-
- real_from_string (&real, hex_str);
- real_to_decimal (dec_str, &real, sizeof (dec_str), digits, 0);
-
- sprintf (buf, "%s=%s%s", macro, dec_str, fp_suffix);
- cpp_define (parse_in, buf);
-}
-
-/* Define MAX for TYPE based on the precision of the type. IS_LONG is
- 1 for type "long" and 2 for "long long". We have to handle
- unsigned types, since wchar_t might be unsigned. */
-
-static void
-builtin_define_type_max (macro, type, is_long)
- const char *macro;
- tree type;
- int is_long;
-{
- static const char *const values[]
- = { "127", "255",
- "32767", "65535",
- "2147483647", "4294967295",
- "9223372036854775807", "18446744073709551615",
- "170141183460469231731687303715884105727",
- "340282366920938463463374607431768211455" };
- static const char *const suffixes[] = { "", "U", "L", "UL", "LL", "ULL" };
-
- const char *value, *suffix;
- char *buf;
- size_t idx;
-
- /* Pre-rendering the values mean we don't have to futz with printing a
- multi-word decimal value. There are also a very limited number of
- precisions that we support, so it's really a waste of time. */
- switch (TYPE_PRECISION (type))
- {
- case 8: idx = 0; break;
- case 16: idx = 2; break;
- case 32: idx = 4; break;
- case 64: idx = 6; break;
- case 128: idx = 8; break;
- default: abort ();
- }
-
- value = values[idx + TREE_UNSIGNED (type)];
- suffix = suffixes[is_long * 2 + TREE_UNSIGNED (type)];
-
- buf = alloca (strlen (macro) + 1 + strlen (value) + strlen (suffix) + 1);
- sprintf (buf, "%s=%s%s", macro, value, suffix);
-
- cpp_define (parse_in, buf);
}
static void
@@ -5257,14 +4816,23 @@ c_common_insert_default_attributes (decl)
#undef DEF_FN_ATTR
}
-/* Output a -Wshadow warning MSGID about NAME, an IDENTIFIER_NODE, and
- additionally give the location of the previous declaration DECL. */
+/* Output a -Wshadow warning MSGCODE about NAME, and give the location
+ of the previous declaration DECL. MANDATORY says whether this is a
+ mandatory warning (i.e. use pedwarn). */
void
-shadow_warning (msgid, name, decl)
- const char *msgid;
- tree name, decl;
+shadow_warning (msgcode, mandatory, name, decl)
+ enum sw_kind msgcode;
+ int mandatory; /* really bool */
+ const char *name;
+ tree decl;
{
- warning ("declaration of `%s' shadows %s", IDENTIFIER_POINTER (name), msgid);
+ static const char *const msgs[] = {
+ /* SW_PARAM */ N_("declaration of \"%s\" shadows a parameter"),
+ /* SW_LOCAL */ N_("declaration of \"%s\" shadows a previous local"),
+ /* SW_GLOBAL */ N_("declaration of \"%s\" shadows a global declaration")
+ };
+
+ (mandatory ? pedwarn : warning) (msgs[msgcode], name);
warning_with_file_and_line (TREE_FILENAME (decl),
TREE_LINENO (decl),
"shadowed declaration is here");
diff --git a/gcc/c-common.h b/gcc/c-common.h
index 902063f0a6a..cf054c76f9f 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -1,6 +1,6 @@
/* Definitions for c-common.c.
Copyright (C) 1987, 1993, 1994, 1995, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@@ -333,12 +333,13 @@ extern tree walk_stmt_tree PARAMS ((tree *,
void *));
extern void prep_stmt PARAMS ((tree));
extern void expand_stmt PARAMS ((tree));
-extern void shadow_warning PARAMS ((const char *,
- tree, tree));
extern tree c_begin_if_stmt PARAMS ((void));
extern tree c_begin_while_stmt PARAMS ((void));
extern void c_finish_while_stmt_cond PARAMS ((tree, tree));
+enum sw_kind { SW_PARAM = 0, SW_LOCAL, SW_GLOBAL };
+extern void shadow_warning PARAMS ((enum sw_kind, int,
+ const char *, tree));
/* Extra information associated with a DECL. Other C dialects extend
this structure in various ways. The C front-end only uses this
@@ -364,6 +365,24 @@ extern int allow_pch;
extern int flag_preprocess_only;
+/* Nonzero means don't output line number information. */
+
+extern char flag_no_line_commands;
+
+/* Nonzero causes -E output not to be done, but directives such as
+ #define that have side effects are still obeyed. */
+
+extern char flag_no_output;
+
+/* Nonzero means dump macros in some fashion; contains the 'D', 'M' or
+ 'N' of the command line switch. */
+
+extern char flag_dump_macros;
+
+/* Nonzero means pass #include lines through to the output. */
+
+extern char flag_dump_includes;
+
/* The file name to which we should write a precompiled header, or
NULL if no header will be written in this compile. */
@@ -937,8 +956,8 @@ extern void disable_builtin_function PARAMS ((const char *));
extern tree build_va_arg PARAMS ((tree, tree));
extern void c_common_init_options PARAMS ((enum c_language_kind));
-extern bool c_common_post_options PARAMS ((void));
-extern const char *c_common_init PARAMS ((const char *));
+extern bool c_common_post_options PARAMS ((const char **));
+extern bool c_common_init PARAMS ((void));
extern void c_common_finish PARAMS ((void));
extern void c_common_parse_file PARAMS ((int));
extern HOST_WIDE_INT c_common_get_alias_set PARAMS ((tree));
@@ -1206,9 +1225,9 @@ extern int c_staticp PARAMS ((tree));
extern int c_common_unsafe_for_reeval PARAMS ((tree));
-extern const char *init_c_lex PARAMS ((const char *));
+extern void init_c_lex PARAMS ((void));
-extern void cb_register_builtins PARAMS ((cpp_reader *));
+extern void c_cpp_builtins PARAMS ((cpp_reader *));
/* Positive if an implicit `extern "C"' scope has just been entered;
negative if such a scope has just been exited. */
@@ -1226,7 +1245,7 @@ struct c_fileinfo
struct c_fileinfo *get_fileinfo PARAMS ((const char *));
extern void dump_time_statistics PARAMS ((void));
-extern int c_dump_tree PARAMS ((void *, tree));
+extern bool c_dump_tree PARAMS ((void *, tree));
extern int c_simplify_expr PARAMS ((tree *, tree *, tree *));
extern tree c_walk_subtrees PARAMS ((tree*, int*, walk_tree_fn, void*, void*));
@@ -1254,5 +1273,14 @@ extern void c_common_read_pch PARAMS ((cpp_reader *pfile,
int fd,
const char *orig));
extern void c_common_write_pch PARAMS ((void));
+extern void builtin_define_with_value PARAMS ((const char *,
+ const char *, int));
+extern void c_stddef_cpp_builtins PARAMS ((void));
+extern void fe_file_change PARAMS ((const struct line_map *));
+
+/* In c-ppoutput.c */
+extern void init_pp_output PARAMS ((FILE *));
+extern void preprocess_file PARAMS ((cpp_reader *));
+extern void pp_file_change PARAMS ((const struct line_map *));
#endif /* ! GCC_C_COMMON_H */
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index a4f9f2c3543..a29dc2c591c 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -272,7 +272,8 @@ tree static_ctors, static_dtors;
/* Forward declarations. */
-static struct binding_level * make_binding_level PARAMS ((void));
+static struct binding_level *make_binding_level PARAMS ((void));
+static struct binding_level *get_function_binding_level PARAMS ((void));
static void pop_binding_level PARAMS ((struct binding_level **));
static void clear_limbo_values PARAMS ((tree));
static int duplicate_decls PARAMS ((tree, tree, int));
@@ -313,7 +314,6 @@ c_print_identifier (file, node, indent)
print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
- print_node (file, "error locus", IDENTIFIER_ERROR_LOCUS (node), indent + 4);
print_node (file, "limbo value", IDENTIFIER_LIMBO_VALUE (node), indent + 4);
if (C_IS_RESERVED_WORD (node))
{
@@ -364,6 +364,17 @@ make_binding_level ()
return (struct binding_level *) ggc_alloc (sizeof (struct binding_level));
}
+/* Return the outermost binding level for the current function. */
+static struct binding_level *
+get_function_binding_level ()
+{
+ struct binding_level *b = current_binding_level;
+
+ while (b->level_chain->parm_flag == 0)
+ b = b->level_chain;
+ return b;
+}
+
/* Remove a binding level from a list and add it to the level chain. */
static void
@@ -1153,7 +1164,8 @@ duplicate_decls (newdecl, olddecl, different_binding_level)
to variables that were declared between olddecl and newdecl. This
will make the initializer invalid for olddecl in case it gets
assigned to olddecl below. */
- DECL_INITIAL (newdecl) = 0;
+ if (TREE_CODE (newdecl) == VAR_DECL)
+ DECL_INITIAL (newdecl) = 0;
}
/* TLS cannot follow non-TLS declaration. */
else if (TREE_CODE (olddecl) == VAR_DECL && TREE_CODE (newdecl) == VAR_DECL
@@ -1592,12 +1604,14 @@ static void
warn_if_shadowing (x, oldlocal)
tree x, oldlocal;
{
- tree name;
+ tree sym;
+ const char *name;
if (DECL_EXTERNAL (x))
return;
- name = DECL_NAME (x);
+ sym = DECL_NAME (x);
+ name = IDENTIFIER_POINTER (sym);
/* Warn if shadowing an argument at the top level of the body. */
if (oldlocal != 0
@@ -1608,14 +1622,7 @@ warn_if_shadowing (x, oldlocal)
/* Check that the decl being shadowed
comes from the parm level, one level up. */
&& chain_member (oldlocal, current_binding_level->level_chain->names))
- {
- if (TREE_CODE (oldlocal) == PARM_DECL)
- pedwarn ("declaration of `%s' shadows a parameter",
- IDENTIFIER_POINTER (name));
- else
- pedwarn ("declaration of `%s' shadows a symbol from the parameter list",
- IDENTIFIER_POINTER (name));
- }
+ shadow_warning (SW_PARAM, true, name, oldlocal);
/* Maybe warn if shadowing something else. */
else if (warn_shadow
/* No shadow warnings for internally generated vars. */
@@ -1634,14 +1641,14 @@ warn_if_shadowing (x, oldlocal)
else if (oldlocal)
{
if (TREE_CODE (oldlocal) == PARM_DECL)
- shadow_warning ("a parameter", name, oldlocal);
+ shadow_warning (SW_PARAM, false, name, oldlocal);
else
- shadow_warning ("a previous local", name, oldlocal);
+ shadow_warning (SW_LOCAL, false, name, oldlocal);
}
- else if (IDENTIFIER_GLOBAL_VALUE (name) != 0
- && IDENTIFIER_GLOBAL_VALUE (name) != error_mark_node)
- shadow_warning ("a global declaration", name,
- IDENTIFIER_GLOBAL_VALUE (name));
+ else if (IDENTIFIER_GLOBAL_VALUE (sym) != 0
+ && IDENTIFIER_GLOBAL_VALUE (sym) != error_mark_node)
+ shadow_warning (SW_GLOBAL, false, name,
+ IDENTIFIER_GLOBAL_VALUE (sym));
}
}
@@ -2020,6 +2027,17 @@ pushdecl (x)
return x;
}
+/* Record that the local value of NAME is shadowed at function scope.
+ This is used by build_external_ref in c-typeck.c. */
+void
+record_function_scope_shadow (name)
+ tree name;
+{
+ struct binding_level *b = get_function_binding_level ();
+ b->shadowed = tree_cons (name, IDENTIFIER_LOCAL_VALUE (name),
+ b->shadowed);
+}
+
/* Like pushdecl, only it places X in GLOBAL_BINDING_LEVEL, if appropriate. */
tree
@@ -2559,11 +2577,8 @@ c_make_fname_decl (id, type_dep)
if (current_function_decl)
{
/* Add the decls to the outermost block. */
- struct binding_level *b = current_binding_level;
- struct binding_level *old = b;
- while (b->level_chain->parm_flag == 0)
- b = b->level_chain;
- current_binding_level = b;
+ struct binding_level *old = current_binding_level;
+ current_binding_level = get_function_binding_level ();
pushdecl (decl);
current_binding_level = old;
}
@@ -4092,7 +4107,20 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
}
if (size_varies)
- itype = variable_size (itype);
+ {
+ /* We must be able to distinguish the
+ SAVE_EXPR_CONTEXT for the variably-sized type
+ so that we can set it correctly in
+ set_save_expr_context. The convention is
+ that all SAVE_EXPRs that need to be reset
+ have NULL_TREE for their SAVE_EXPR_CONTEXT. */
+ tree cfd = current_function_decl;
+ if (decl_context == PARM)
+ current_function_decl = NULL_TREE;
+ itype = variable_size (itype);
+ if (decl_context == PARM)
+ current_function_decl = cfd;
+ }
itype = build_index_type (itype);
}
}
@@ -4571,6 +4599,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
needed, and let dwarf2 know that the function is inlinable. */
else if (flag_inline_trees == 2 && initialized)
{
+ if (!DECL_INLINE (decl))
+ DID_INLINE_FUNC (decl) = 1;
DECL_INLINE (decl) = 1;
DECL_DECLARED_INLINE_P (decl) = 0;
}
@@ -5224,38 +5254,9 @@ finish_struct (t, fieldlist, attributes)
DECL_SIZE (x) = bitsize_int (width);
DECL_BIT_FIELD (x) = 1;
SET_DECL_C_BIT_FIELD (x);
-
- if (width == 0
- && ! (* targetm.ms_bitfield_layout_p) (t))
- {
- /* field size 0 => force desired amount of alignment. */
-#ifdef EMPTY_FIELD_BOUNDARY
- DECL_ALIGN (x) = MAX (DECL_ALIGN (x), EMPTY_FIELD_BOUNDARY);
-#endif
-#ifdef PCC_BITFIELD_TYPE_MATTERS
- if (PCC_BITFIELD_TYPE_MATTERS)
- {
- DECL_ALIGN (x) = MAX (DECL_ALIGN (x),
- TYPE_ALIGN (TREE_TYPE (x)));
- DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
- }
-#endif
- }
}
}
- else if (TREE_TYPE (x) != error_mark_node)
- {
- unsigned int min_align = (DECL_PACKED (x) ? BITS_PER_UNIT
- : TYPE_ALIGN (TREE_TYPE (x)));
-
- /* Non-bit-fields are aligned for their type, except packed
- fields which require only BITS_PER_UNIT alignment. */
- DECL_ALIGN (x) = MAX (DECL_ALIGN (x), min_align);
- if (! DECL_PACKED (x))
- DECL_USER_ALIGN (x) |= TYPE_USER_ALIGN (TREE_TYPE (x));
- }
-
DECL_INITIAL (x) = 0;
/* Detect flexible array member in an invalid context. */
@@ -5550,11 +5551,6 @@ finish_enum (enumtype, values, attributes)
tree enu = TREE_PURPOSE (pair);
TREE_TYPE (enu) = enumtype;
- DECL_SIZE (enu) = TYPE_SIZE (enumtype);
- DECL_SIZE_UNIT (enu) = TYPE_SIZE_UNIT (enumtype);
- DECL_ALIGN (enu) = TYPE_ALIGN (enumtype);
- DECL_USER_ALIGN (enu) = TYPE_USER_ALIGN (enumtype);
- DECL_MODE (enu) = TYPE_MODE (enumtype);
/* The ISO C Standard mandates enumerators to have type int,
even though the underlying type of an enum type is
@@ -5882,6 +5878,8 @@ start_function (declspecs, declarator, attributes)
declare_parm_level (1);
current_binding_level->subblocks_tag_transparent = 1;
+ make_decl_rtl (current_function_decl, NULL);
+
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
/* Promote the value to int before returning it. */
if (c_promoting_integer_type_p (restype))
@@ -6464,9 +6462,14 @@ finish_function (nested, can_defer_p)
predicates depend on cfun and current_function_decl to
function completely. */
timevar_push (TV_INTEGRATION);
- uninlinable = ! tree_inlinable_function_p (fndecl);
-
- if (! uninlinable && can_defer_p
+ uninlinable = ! tree_inlinable_function_p (fndecl, 0);
+
+ if (can_defer_p
+ /* We defer functions marked inline *even if* the function
+ itself is not inlinable. This is because we don't yet
+ know if the function will actually be used; we may be
+ able to avoid emitting it entirely. */
+ && (! uninlinable || DECL_DECLARED_INLINE_P (fndecl))
/* Save function tree for inlining. Should return 0 if the
language does not support function deferring or the
function could not be deferred. */
@@ -6523,6 +6526,25 @@ c_expand_deferred_function (fndecl)
}
}
+/* Called to move the SAVE_EXPRs for parameter declarations in a
+ nested function into the nested function. DATA is really the
+ nested FUNCTION_DECL. */
+
+static tree
+set_save_expr_context (tree *tp,
+ int *walk_subtrees,
+ void *data)
+{
+ if (TREE_CODE (*tp) == SAVE_EXPR && !SAVE_EXPR_CONTEXT (*tp))
+ SAVE_EXPR_CONTEXT (*tp) = (tree) data;
+ /* Do not walk back into the SAVE_EXPR_CONTEXT; that will cause
+ circularity. */
+ else if (DECL_P (*tp))
+ *walk_subtrees = 0;
+
+ return NULL_TREE;
+}
+
/* Generate the RTL for the body of FNDECL. If NESTED_P is nonzero,
then we are already in the process of generating RTL for another
function. If can_defer_p is zero, we won't attempt to defer the
@@ -6549,9 +6571,6 @@ c_expand_body_1 (fndecl, nested_p)
/* Initialize the RTL code for the function. */
current_function_decl = fndecl;
input_filename = TREE_FILENAME (fndecl);
-#if 0
- make_decl_rtl (fndecl, NULL);
-#endif
init_function_start (fndecl, input_filename, TREE_LINENO (fndecl));
lineno = TREE_LINENO (fndecl);
@@ -6596,6 +6615,15 @@ c_expand_body_1 (fndecl, nested_p)
/* Set up parameters and prepare for return, for the function. */
expand_function_start (fndecl, 0);
+ /* If the function has a variably modified type, there may be
+ SAVE_EXPRs in the parameter types. Their context must be set to
+ refer to this function; they cannot be expanded in the containing
+ function. */
+ if (decl_function_context (fndecl)
+ && variably_modified_type_p (TREE_TYPE (fndecl)))
+ walk_tree (&TREE_TYPE (fndecl), set_save_expr_context, fndecl,
+ NULL);
+
/* If this function is `main', emit a call to `__main'
to run global initializers, etc. */
if (DECL_NAME (fndecl)
diff --git a/gcc/c-dump.c b/gcc/c-dump.c
index 541910b6b9d..7f3464b38a0 100644
--- a/gcc/c-dump.c
+++ b/gcc/c-dump.c
@@ -49,7 +49,7 @@ dump_next_stmt (di, t)
/* Dump any C-specific tree codes and attributes of common codes. */
-int
+bool
c_dump_tree (dump_info, t)
void *dump_info;
tree t;
@@ -194,5 +194,5 @@ c_dump_tree (dump_info, t)
break;
}
- return 0;
+ return false;
}
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index 96bf69d7e28..abd738c027e 100644
--- a/gcc/c-incpath.c
+++ b/gcc/c-incpath.c
@@ -47,7 +47,6 @@ static void add_env_var_paths PARAMS ((const char *, int));
static void add_standard_paths PARAMS ((const char *, const char *, int));
static void free_path PARAMS ((struct cpp_path *, int));
static void merge_include_chains PARAMS ((cpp_reader *, int));
-static int remove_component_p PARAMS ((const char *));
static struct cpp_path *
remove_duplicates PARAMS ((cpp_reader *, struct cpp_path *,
struct cpp_path *, struct cpp_path *, int));
@@ -128,10 +127,30 @@ add_standard_paths (sysroot, iprefix, cxx_stdinc)
int cxx_stdinc;
{
const struct default_include *p;
- size_t len = 0;
+ size_t len;
- if (iprefix)
- len = cpp_GCC_INCLUDE_DIR_len;
+ if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
+ {
+ /* Look for directories that start with the standard prefix.
+ "Translate" them, ie. replace /usr/local/lib/gcc... with
+ IPREFIX and search them first. */
+ for (p = cpp_include_defaults; p->fname; p++)
+ {
+ if (!p->cplusplus || cxx_stdinc)
+ {
+ /* Should we be translating sysrooted dirs too? Assume
+ that iprefix and sysroot are mutually exclusive, for
+ now. */
+ if (sysroot && p->add_sysroot)
+ continue;
+ if (!strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
+ {
+ char *str = concat (iprefix, p->fname + len, NULL);
+ add_path (str, SYSTEM, p->cxx_aware);
+ }
+ }
+ }
+ }
for (p = cpp_include_defaults; p->fname; p++)
{
@@ -142,11 +161,6 @@ add_standard_paths (sysroot, iprefix, cxx_stdinc)
/* Should this directory start with the sysroot? */
if (sysroot && p->add_sysroot)
str = concat (sysroot, p->fname, NULL);
- /* Does this directory start with the prefix? If so, search
- "translated" versions of GNU directories. These have
- /usr/local/lib/gcc... replaced by iprefix. */
- else if (len && !strncmp (p->fname, cpp_GCC_INCLUDE_DIR, len))
- str = concat (iprefix, p->fname + len, NULL);
else
str = update_path (p->fname, p->component);
@@ -177,7 +191,7 @@ remove_duplicates (pfile, head, system, join, verbose)
int reason = REASON_QUIET;
cur = *pcur;
- simplify_path (cur->name);
+ cpp_simplify_path (cur->name);
if (stat (cur->name, &st))
{
@@ -310,7 +324,7 @@ add_path (path, chain, cxx_aware)
p->next = NULL;
p->name = path;
if (chain == SYSTEM || chain == AFTER)
- p->sysp = 1 + (cxx_aware != 0);
+ p->sysp = 1 + !cxx_aware;
else
p->sysp = 0;
@@ -355,156 +369,3 @@ register_include_chains (pfile, sysroot, iprefix,
cpp_set_include_chains (pfile, heads[QUOTE], heads[BRACKET],
quote_ignores_source_dir);
}
-
-/* Returns true if it is safe to remove the final component of path,
- when it is followed by a ".." component. We use lstat to avoid
- symlinks if we have it. If not, we can still catch errors with
- stat (). */
-static int
-remove_component_p (path)
- const char *path;
-{
- struct stat s;
- int result;
-
-#ifdef HAVE_LSTAT
- result = lstat (path, &s);
-#else
- result = stat (path, &s);
-#endif
-
- /* There's no guarantee that errno will be unchanged, even on
- success. Cygwin's lstat(), for example, will often set errno to
- ENOSYS. In case of success, reset errno to zero. */
- if (result == 0)
- errno = 0;
-
- return result == 0 && S_ISDIR (s.st_mode);
-}
-
-/* Simplify a path name in place, deleting redundant components. This
- reduces OS overhead and guarantees that equivalent paths compare
- the same (modulo symlinks).
-
- Transforms made:
- foo/bar/../quux foo/quux
- foo/./bar foo/bar
- foo//bar foo/bar
- /../quux /quux
- //quux //quux (POSIX allows leading // as a namespace escape)
-
- Guarantees no trailing slashes. All transforms reduce the length
- of the string. Returns PATH. errno is 0 if no error occurred;
- nonzero if an error occurred when using stat () or lstat (). */
-void
-simplify_path (path)
- char *path ATTRIBUTE_UNUSED;
-{
-#ifndef VMS
- char *from, *to;
- char *base, *orig_base;
- int absolute = 0;
-
- errno = 0;
- /* Don't overflow the empty path by putting a '.' in it below. */
- if (*path == '\0')
- return;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Convert all backslashes to slashes. */
- for (from = path; *from; from++)
- if (*from == '\\') *from = '/';
-
- /* Skip over leading drive letter if present. */
- if (ISALPHA (path[0]) && path[1] == ':')
- from = to = &path[2];
- else
- from = to = path;
-#else
- from = to = path;
-#endif
-
- /* Remove redundant leading /s. */
- if (*from == '/')
- {
- absolute = 1;
- to++;
- from++;
- if (*from == '/')
- {
- if (*++from == '/')
- /* 3 or more initial /s are equivalent to 1 /. */
- while (*++from == '/');
- else
- /* On some hosts // differs from /; Posix allows this. */
- to++;
- }
- }
-
- base = orig_base = to;
- for (;;)
- {
- int move_base = 0;
-
- while (*from == '/')
- from++;
-
- if (*from == '\0')
- break;
-
- if (*from == '.')
- {
- if (from[1] == '\0')
- break;
- if (from[1] == '/')
- {
- from += 2;
- continue;
- }
- else if (from[1] == '.' && (from[2] == '/' || from[2] == '\0'))
- {
- /* Don't simplify if there was no previous component. */
- if (absolute && orig_base == to)
- {
- from += 2;
- continue;
- }
- /* Don't simplify if the previous component was "../",
- or if an error has already occurred with (l)stat. */
- if (base != to && errno == 0)
- {
- /* We don't back up if it's a symlink. */
- *to = '\0';
- if (remove_component_p (path))
- {
- while (to > base && *to != '/')
- to--;
- from += 2;
- continue;
- }
- }
- move_base = 1;
- }
- }
-
- /* Add the component separator. */
- if (to > orig_base)
- *to++ = '/';
-
- /* Copy this component until the trailing null or '/'. */
- while (*from != '\0' && *from != '/')
- *to++ = *from++;
-
- if (move_base)
- base = to;
- }
-
- /* Change the empty string to "." so that it is not treated as stdin.
- Null terminate. */
- if (to == path)
- *to++ = '.';
- *to = '\0';
-#else /* VMS */
- errno = 0;
-#endif /* !VMS */
-}
diff --git a/gcc/c-incpath.h b/gcc/c-incpath.h
index 860ea3cdc95..e5b02182a82 100644
--- a/gcc/c-incpath.h
+++ b/gcc/c-incpath.h
@@ -19,6 +19,5 @@ extern void split_quote_chain PARAMS ((void));
extern void add_path PARAMS ((char *, int, int));
extern void register_include_chains PARAMS ((cpp_reader *, const char *,
const char *, int, int, int));
-extern void simplify_path PARAMS ((char *));
enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index e0617bd142d..95419c5b37e 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -41,7 +41,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tm_p.h"
#include "splay-tree.h"
#include "debug.h"
-#include "c-incpath.h"
#ifdef MULTIBYTE_CHARS
#include "mbchar.h"
@@ -87,16 +86,14 @@ static int dump_one_header PARAMS ((splay_tree_node, void *));
static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int));
static void cb_ident PARAMS ((cpp_reader *, unsigned int,
const cpp_string *));
-static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *));
static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
static void cb_define PARAMS ((cpp_reader *, unsigned int,
cpp_hashnode *));
static void cb_undef PARAMS ((cpp_reader *, unsigned int,
cpp_hashnode *));
-const char *
-init_c_lex (filename)
- const char *filename;
+void
+init_c_lex ()
{
struct cpp_callbacks *cb;
struct c_fileinfo *toplevel;
@@ -113,19 +110,11 @@ init_c_lex (filename)
toplevel->time = body_time;
}
-#ifdef MULTIBYTE_CHARS
- /* Change to the native locale for multibyte conversions. */
- setlocale (LC_CTYPE, "");
- GET_ENVIRONMENT (literal_codeset, "LANG");
-#endif
-
cb = cpp_get_callbacks (parse_in);
cb->line_change = cb_line_change;
cb->ident = cb_ident;
- cb->file_change = cb_file_change;
cb->def_pragma = cb_def_pragma;
- cb->simplify_path = simplify_path;
cb->valid_pch = c_common_valid_pch;
cb->read_pch = c_common_read_pch;
@@ -137,35 +126,6 @@ init_c_lex (filename)
cb->define = cb_define;
cb->undef = cb_undef;
}
-
- /* Start it at 0. */
- lineno = 0;
-
- return cpp_read_main_file (parse_in, filename, ident_hash);
-}
-
-/* A thin wrapper around the real parser that initializes the
- integrated preprocessor after debug output has been initialized.
- Also, make sure the start_source_file debug hook gets called for
- the primary source file. */
-
-void
-c_common_parse_file (set_yydebug)
- int set_yydebug ATTRIBUTE_UNUSED;
-{
-#if YYDEBUG != 0
- yydebug = set_yydebug;
-#else
- warning ("YYDEBUG not defined");
-#endif
-
- (*debug_hooks->start_source_file) (lineno, input_filename);
- cpp_finish_options (parse_in);
-
- pch_init();
-
- yyparse ();
- free_parser_stacks ();
}
struct c_fileinfo *
@@ -258,9 +218,8 @@ cb_line_change (pfile, token, parsing_args)
src_lineno = SOURCE_LINE (map, token->line);
}
-static void
-cb_file_change (pfile, new_map)
- cpp_reader *pfile ATTRIBUTE_UNUSED;
+void
+fe_file_change (new_map)
const struct line_map *new_map;
{
unsigned int to_line = SOURCE_LINE (new_map, new_map->to_line);
diff --git a/gcc/c-objc-common.c b/gcc/c-objc-common.c
index efbe3b78f14..3bb963209ed 100644
--- a/gcc/c-objc-common.c
+++ b/gcc/c-objc-common.c
@@ -250,15 +250,13 @@ c_warn_unused_global_decl (decl)
}
/* Initialization common to C and Objective-C front ends. */
-const char *
-c_objc_common_init (filename)
- const char *filename;
+bool
+c_objc_common_init ()
{
c_init_decl_processing ();
- filename = c_common_init (filename);
- if (filename == NULL)
- return NULL;
+ if (c_common_init () == false)
+ return false;
/* These were not defined in the Objective-C front end, but I'm
putting them here anyway. The diagnostic format decoder might
@@ -278,7 +276,7 @@ c_objc_common_init (filename)
VARRAY_TREE_INIT (deferred_fns, 32, "deferred_fns");
- return filename;
+ return true;
}
/* Register a function tree, so that its optimization and conversion
diff --git a/gcc/c-opts.c b/gcc/c-opts.c
index c5f25c99384..5de5019499b 100644
--- a/gcc/c-opts.c
+++ b/gcc/c-opts.c
@@ -34,11 +34,18 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "intl.h"
#include "cppdefault.h"
#include "c-incpath.h"
+#include "debug.h" /* For debug_hooks. */
#ifndef TARGET_SYSTEM_ROOT
# define TARGET_SYSTEM_ROOT NULL
#endif
+#ifndef TARGET_EBCDIC
+# define TARGET_EBCDIC 0
+#endif
+
+static int saved_lineno;
+
/* CPP's options. */
static cpp_options *cpp_opts;
@@ -76,9 +83,15 @@ static bool std_cxx_inc = true;
/* If the quote chain has been split by -I-. */
static bool quote_chain_split;
+/* If -Wunused-macros. */
+static bool warn_unused_macros;
+
/* Number of deferred options, deferred options array size. */
static size_t deferred_count, deferred_size;
+/* Number of deferred options scanned for -include. */
+static size_t include_cursor;
+
static void missing_arg PARAMS ((size_t));
static size_t find_opt PARAMS ((const char *, int));
static void set_Wimplicit PARAMS ((int));
@@ -90,10 +103,12 @@ static void set_std_cxx98 PARAMS ((int));
static void set_std_c89 PARAMS ((int, int));
static void set_std_c99 PARAMS ((int));
static void check_deps_environment_vars PARAMS ((void));
-static void preprocess_file PARAMS ((void));
static void handle_deferred_opts PARAMS ((void));
static void sanitize_cpp_opts PARAMS ((void));
static void add_prefixed_path PARAMS ((const char *, size_t));
+static void push_command_line_include PARAMS ((void));
+static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *));
+static void finish_options PARAMS ((void));
#ifndef STDC_0_IN_SYSTEM_HEADERS
#define STDC_0_IN_SYSTEM_HEADERS 0
@@ -138,8 +153,10 @@ static void add_prefixed_path PARAMS ((const char *, size_t));
#define COMMAND_LINE_OPTIONS \
OPT("-help", CL_ALL, OPT__help) \
OPT("-output-pch=", CL_ALL | CL_ARG, OPT__output_pch) \
+ OPT("A", CL_ALL | CL_ARG, OPT_A) \
OPT("C", CL_ALL, OPT_C) \
OPT("CC", CL_ALL, OPT_CC) \
+ OPT("D", CL_ALL | CL_ARG, OPT_D) \
OPT("E", CL_ALL, OPT_E) \
OPT("H", CL_ALL, OPT_H) \
OPT("I", CL_ALL | CL_ARG, OPT_I) \
@@ -153,6 +170,7 @@ static void add_prefixed_path PARAMS ((const char *, size_t));
OPT("MQ", CL_ALL | CL_ARG, OPT_MQ) \
OPT("MT", CL_ALL | CL_ARG, OPT_MT) \
OPT("P", CL_ALL, OPT_P) \
+ OPT("U", CL_ALL | CL_ARG, OPT_U) \
OPT("Wabi", CL_CXX, OPT_Wabi) \
OPT("Wall", CL_ALL, OPT_Wall) \
OPT("Wbad-function-cast", CL_C, OPT_Wbad_function_cast) \
@@ -287,6 +305,8 @@ static void add_prefixed_path PARAMS ((const char *, size_t));
OPT("fxref", CL_CXX, OPT_fxref) \
OPT("gen-decls", CL_OBJC, OPT_gen_decls) \
OPT("idirafter", CL_ALL | CL_ARG, OPT_idirafter) \
+ OPT("imacros", CL_ALL | CL_ARG, OPT_imacros) \
+ OPT("include", CL_ALL | CL_ARG, OPT_include) \
OPT("iprefix", CL_ALL | CL_ARG, OPT_iprefix) \
OPT("isysroot", CL_ALL | CL_ARG, OPT_isysroot) \
OPT("isystem", CL_ALL | CL_ARG, OPT_isystem) \
@@ -400,6 +420,15 @@ missing_arg (opt_index)
error ("no class name specified with \"-%s\"", opt_text);
break;
+ case OPT_A:
+ error ("assertion missing after \"-%s\"", opt_text);
+ break;
+
+ case OPT_D:
+ case OPT_U:
+ error ("macro name missing after \"-%s\"", opt_text);
+ break;
+
case OPT_I:
case OPT_idirafter:
case OPT_isysroot:
@@ -410,6 +439,8 @@ missing_arg (opt_index)
case OPT_MF:
case OPT_MD:
case OPT_MMD:
+ case OPT_include:
+ case OPT_imacros:
case OPT_o:
error ("missing filename after \"-%s\"", opt_text);
break;
@@ -556,7 +587,8 @@ c_common_init_options (lang)
#endif
c_language = lang;
- parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89 : CLK_GNUCXX);
+ parse_in = cpp_create_reader (lang == clk_c ? CLK_GNUC89 : CLK_GNUCXX,
+ ident_hash);
cpp_opts = cpp_get_options (parse_in);
if (flag_objc)
cpp_opts->objc = 1;
@@ -580,7 +612,7 @@ c_common_decode_option (argc, argv)
const char *opt, *arg = 0;
char *dup = 0;
bool on = true;
- int result, lang_flag;
+ int result = 0, lang_flag;
const struct cl_option *option;
enum opt_code code;
@@ -617,8 +649,6 @@ c_common_decode_option (argc, argv)
on = false;
}
- result = cpp_handle_option (parse_in, argc, argv);
-
/* Skip over '-'. */
lang_flag = lang_flags[(c_language << 1) + flag_objc];
opt_index = find_opt (opt + 1, lang_flag);
@@ -679,6 +709,10 @@ c_common_decode_option (argc, argv)
pch_file = arg;
break;
+ case OPT_A:
+ defer_opt (code, arg);
+ break;
+
case OPT_C:
cpp_opts->discard_comments = 0;
break;
@@ -688,6 +722,10 @@ c_common_decode_option (argc, argv)
cpp_opts->discard_comments_in_macro_exp = 0;
break;
+ case OPT_D:
+ defer_opt (code, arg);
+ break;
+
case OPT_E:
flag_preprocess_only = 1;
break;
@@ -715,7 +753,7 @@ c_common_decode_option (argc, argv)
depends on this. Preprocessed output does occur if -MD, -MMD
or environment var dependency generation is used. */
cpp_opts->deps.style = (code == OPT_M ? DEPS_SYSTEM: DEPS_USER);
- cpp_opts->no_output = 1;
+ flag_no_output = 1;
cpp_opts->inhibit_warnings = 1;
break;
@@ -747,7 +785,11 @@ c_common_decode_option (argc, argv)
break;
case OPT_P:
- cpp_opts->no_line_commands = 1;
+ flag_no_line_commands = 1;
+ break;
+
+ case OPT_U:
+ defer_opt (code, arg);
break;
case OPT_Wabi:
@@ -1039,7 +1081,7 @@ c_common_decode_option (argc, argv)
break;
case OPT_Wunused_macros:
- cpp_opts->warn_unused_macros = on;
+ warn_unused_macros = on;
break;
case OPT_Wwrite_strings:
@@ -1322,6 +1364,11 @@ c_common_decode_option (argc, argv)
add_path (xstrdup (arg), AFTER, 0);
break;
+ case OPT_imacros:
+ case OPT_include:
+ defer_opt (code, arg);
+ break;
+
case OPT_iprefix:
iprefix = arg;
break;
@@ -1443,7 +1490,8 @@ c_common_decode_option (argc, argv)
/* Post-switch processing. */
bool
-c_common_post_options ()
+c_common_post_options (pfilename)
+ const char **pfilename;
{
/* Canonicalize the input and output filenames. */
if (in_fname == NULL || !strcmp (in_fname, "-"))
@@ -1493,6 +1541,40 @@ c_common_post_options ()
if (warn_missing_format_attribute && !warn_format)
warning ("-Wmissing-format-attribute ignored without -Wformat");
+ if (flag_preprocess_only)
+ {
+ /* Open the output now. We must do so even if flag_no_output is
+ on, because there may be other output than from the actual
+ preprocessing (e.g. from -dM). */
+ if (out_fname[0] == '\0')
+ out_stream = stdout;
+ else
+ out_stream = fopen (out_fname, "w");
+
+ if (out_stream == NULL)
+ {
+ fatal_io_error ("opening output file %s", out_fname);
+ return false;
+ }
+
+ init_pp_output (out_stream);
+ }
+ else
+ {
+ init_c_lex ();
+
+ /* Yuk. WTF is this? I do know ObjC relies on it somewhere. */
+ lineno = 0;
+ }
+
+ cpp_get_callbacks (parse_in)->file_change = cb_file_change;
+
+ /* NOTE: we use in_fname here, not the one supplied. */
+ *pfilename = cpp_read_main_file (parse_in, in_fname);
+
+ saved_lineno = lineno;
+ lineno = 0;
+
/* If an error has occurred in cpplib, note it so we fail
immediately. */
errorcount += cpp_errors (parse_in);
@@ -1500,29 +1582,12 @@ c_common_post_options ()
return flag_preprocess_only;
}
-/* Preprocess the input file to out_stream. */
-static void
-preprocess_file ()
-{
- /* Open the output now. We must do so even if no_output is on,
- because there may be other output than from the actual
- preprocessing (e.g. from -dM). */
- if (out_fname[0] == '\0')
- out_stream = stdout;
- else
- out_stream = fopen (out_fname, "w");
-
- if (out_stream == NULL)
- fatal_io_error ("opening output file %s", out_fname);
- else
- cpp_preprocess_file (parse_in, in_fname, out_stream);
-}
-
/* Front end initialization common to C, ObjC and C++. */
-const char *
-c_common_init (filename)
- const char *filename;
+bool
+c_common_init ()
{
+ lineno = saved_lineno;
+
/* Set up preprocessor arithmetic. Must be done after call to
c_common_nodes_and_builtins for type nodes to be good. */
cpp_opts->precision = TYPE_PRECISION (intmax_type_node);
@@ -1530,26 +1595,40 @@ c_common_init (filename)
cpp_opts->int_precision = TYPE_PRECISION (integer_type_node);
cpp_opts->wchar_precision = TYPE_PRECISION (wchar_type_node);
cpp_opts->unsigned_wchar = TREE_UNSIGNED (wchar_type_node);
+ cpp_opts->EBCDIC = TARGET_EBCDIC;
- /* Register preprocessor built-ins before calls to
- cpp_main_file. */
- cpp_get_callbacks (parse_in)->register_builtins = cb_register_builtins;
-
- /* NULL is passed up to toplev.c and we exit quickly. */
if (flag_preprocess_only)
{
- preprocess_file ();
- return NULL;
+ finish_options ();
+ preprocess_file (parse_in);
+ return false;
}
- /* Do this before initializing pragmas, as then cpplib's hash table
- has been set up. NOTE: we are using our own file name here, not
- the one supplied. */
- filename = init_c_lex (in_fname);
-
+ /* Has to wait until now so that cpplib has its hash table. */
init_pragma ();
- return filename;
+ return true;
+}
+
+/* A thin wrapper around the real parser that initializes the
+ integrated preprocessor after debug output has been initialized.
+ Also, make sure the start_source_file debug hook gets called for
+ the primary source file. */
+void
+c_common_parse_file (set_yydebug)
+ int set_yydebug ATTRIBUTE_UNUSED;
+{
+#if YYDEBUG != 0
+ yydebug = set_yydebug;
+#else
+ warning ("YYDEBUG not defined");
+#endif
+
+ (*debug_hooks->start_source_file) (lineno, input_filename);
+ finish_options();
+ pch_init();
+ yyparse ();
+ free_parser_stacks ();
}
/* Common finish hook for the C, ObjC and C++ front ends. */
@@ -1638,19 +1717,9 @@ handle_deferred_opts ()
{
struct deferred_opt *opt = &deferred_opts[i];
- switch (opt->code)
- {
- case OPT_MT:
- case OPT_MQ:
- cpp_add_dependency_target (parse_in, opt->arg, opt->code == OPT_MQ);
- break;
-
- default:
- abort ();
- }
+ if (opt->code == OPT_MT || opt->code == OPT_MQ)
+ cpp_add_dependency_target (parse_in, opt->arg, opt->code == OPT_MQ);
}
-
- free (deferred_opts);
}
/* These settings are appropriate for GCC, but not necessarily so for
@@ -1665,16 +1734,16 @@ sanitize_cpp_opts ()
/* -dM and dependencies suppress normal output; do it here so that
the last -d[MDN] switch overrides earlier ones. */
- if (cpp_opts->dump_macros == dump_only)
- cpp_opts->no_output = 1;
+ if (flag_dump_macros == 'M')
+ flag_no_output = 1;
/* Disable -dD, -dN and -dI if normal output is suppressed. Allow
-dM since at least glibc relies on -M -dM to work. */
- if (cpp_opts->no_output)
+ if (flag_no_output)
{
- if (cpp_opts->dump_macros != dump_only)
- cpp_opts->dump_macros = dump_none;
- cpp_opts->dump_includes = 0;
+ if (flag_dump_macros != 'M')
+ flag_dump_macros = 0;
+ flag_dump_includes = 0;
}
cpp_opts->unsigned_char = !flag_signed_char;
@@ -1692,10 +1761,103 @@ add_prefixed_path (suffix, chain)
const char *suffix;
size_t chain;
{
+ char *path;
const char *prefix;
+ size_t prefix_len, suffix_len;
+
+ suffix_len = strlen (suffix);
+ prefix = iprefix ? iprefix : cpp_GCC_INCLUDE_DIR;
+ prefix_len = iprefix ? strlen (iprefix) : cpp_GCC_INCLUDE_DIR_len;
+
+ path = xmalloc (prefix_len + suffix_len + 1);
+ memcpy (path, prefix, prefix_len);
+ memcpy (path + prefix_len, suffix, suffix_len);
+ path[prefix_len + suffix_len] = '\0';
+
+ add_path (path, chain, 0);
+}
+
+/* Handle -D, -U, -A, -imacros, and the first -include. */
+static void
+finish_options ()
+{
+ if (!cpp_opts->preprocessed)
+ {
+ size_t i;
+
+ cpp_change_file (parse_in, LC_RENAME, _("<built-in>"));
+ cpp_init_builtins (parse_in);
+ c_cpp_builtins (parse_in);
+ cpp_change_file (parse_in, LC_RENAME, _("<command line>"));
+ for (i = 0; i < deferred_count; i++)
+ {
+ struct deferred_opt *opt = &deferred_opts[i];
+
+ if (opt->code == OPT_D)
+ cpp_define (parse_in, opt->arg);
+ else if (opt->code == OPT_U)
+ cpp_undef (parse_in, opt->arg);
+ else if (opt->code == OPT_A)
+ {
+ if (opt->arg[0] == '-')
+ cpp_unassert (parse_in, opt->arg + 1);
+ else
+ cpp_assert (parse_in, opt->arg);
+ }
+ }
+
+ /* Handle -imacros after -D and -U. */
+ for (i = 0; i < deferred_count; i++)
+ {
+ struct deferred_opt *opt = &deferred_opts[i];
+
+ if (opt->code == OPT_imacros
+ && cpp_push_include (parse_in, opt->arg))
+ cpp_scan_nooutput (parse_in);
+ }
+ }
- prefix = iprefix ? iprefix: cpp_GCC_INCLUDE_DIR;
- add_path (concat (prefix, suffix), chain, 0);
+ push_command_line_include ();
+}
+
+/* Give CPP the next file given by -include, if any. */
+static void
+push_command_line_include ()
+{
+ if (cpp_opts->preprocessed)
+ return;
+
+ while (include_cursor < deferred_count)
+ {
+ struct deferred_opt *opt = &deferred_opts[include_cursor++];
+
+ if (opt->code == OPT_include && cpp_push_include (parse_in, opt->arg))
+ return;
+ }
+
+ if (include_cursor == deferred_count)
+ {
+ /* Restore the line map from <command line>. */
+ cpp_change_file (parse_in, LC_RENAME, main_input_filename);
+ /* -Wunused-macros should only warn about macros defined hereafter. */
+ cpp_opts->warn_unused_macros = warn_unused_macros;
+ include_cursor++;
+ }
+}
+
+/* File change callback. Has to handle -include files. */
+static void
+cb_file_change (pfile, new_map)
+ cpp_reader *pfile ATTRIBUTE_UNUSED;
+ const struct line_map *new_map;
+{
+ if (flag_preprocess_only)
+ pp_file_change (new_map);
+ else
+ fe_file_change (new_map);
+
+ if (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map))
+ push_command_line_include ();
}
/* Set the C 89 standard (with 1994 amendments if C94, without GNU
@@ -1769,20 +1931,14 @@ handle_OPT_d (arg)
while ((c = *arg++) != '\0')
switch (c)
{
- case 'M':
- cpp_opts->dump_macros = dump_only;
- break;
-
- case 'N':
- cpp_opts->dump_macros = dump_names;
- break;
-
- case 'D':
- cpp_opts->dump_macros = dump_definitions;
+ case 'M': /* Dump macros only. */
+ case 'N': /* Dump names. */
+ case 'D': /* Dump definitions. */
+ flag_dump_macros = c;
break;
case 'I':
- cpp_opts->dump_includes = 1;
+ flag_dump_includes = 1;
break;
}
}
diff --git a/gcc/c-pch.c b/gcc/c-pch.c
index 13dc7631798..27a299ffd3e 100644
--- a/gcc/c-pch.c
+++ b/gcc/c-pch.c
@@ -1,20 +1,20 @@
/* Precompiled header implementation for the C languages.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -29,19 +29,38 @@ Boston, MA 02111-1307, USA. */
#include "debug.h"
#include "c-pragma.h"
#include "ggc.h"
+#include "langhooks.h"
struct c_pch_header
{
unsigned long asm_size;
};
-static const char pch_ident[8] = "gpchC010";
+#define IDENT_LENGTH 8
static FILE *pch_outfile;
extern char *asm_file_name;
static long asm_file_startpos;
+static const char * get_ident PARAMS((void));
+
+static const char *
+get_ident()
+{
+ static char result[IDENT_LENGTH];
+ static const char template[IDENT_LENGTH] = "gpch.010";
+
+ memcpy (result, template, IDENT_LENGTH);
+ if (c_language == clk_c)
+ result[4] = flag_objc ? 'o' : 'C';
+ else if (c_language == clk_cplusplus)
+ result[4] = flag_objc ? 'O' : '+';
+ else
+ abort ();
+ return result;
+}
+
void
pch_init ()
{
@@ -49,16 +68,12 @@ pch_init ()
if (pch_file)
{
- /* We're precompiling a header file, so when it's actually used,
- it'll be at least one level deep. */
- (*debug_hooks->start_source_file) (lineno, input_filename);
-
f = fopen (pch_file, "w+b");
if (f == NULL)
fatal_io_error ("can't open %s", pch_file);
pch_outfile = f;
- if (fwrite (pch_ident, sizeof (pch_ident), 1, f) != 1)
+ if (fwrite (get_ident(), IDENT_LENGTH, 1, f) != 1)
fatal_io_error ("can't write to %s", pch_file);
/* We need to be able to re-read the output. */
@@ -69,6 +84,9 @@ pch_init ()
asm_file_startpos = ftell (asm_out_file);
+ /* Let the debugging format deal with the PCHness. */
+ (*debug_hooks->handle_pch) (0);
+
cpp_save_state (parse_in, f);
}
}
@@ -81,6 +99,8 @@ c_common_write_pch ()
long written;
struct c_pch_header h;
+ (*debug_hooks->handle_pch) (1);
+
cpp_write_pch_deps (parse_in, pch_outfile);
asm_file_end = ftell (asm_out_file);
@@ -122,7 +142,8 @@ c_common_valid_pch (pfile, name, fd)
{
int sizeread;
int result;
- char ident[sizeof (pch_ident)];
+ char ident[IDENT_LENGTH];
+ const char *pch_ident;
if (! allow_pch)
return 2;
@@ -130,16 +151,17 @@ c_common_valid_pch (pfile, name, fd)
/* Perform a quick test of whether this is a valid
precompiled header for C. */
- sizeread = read (fd, ident, sizeof (pch_ident));
+ sizeread = read (fd, ident, IDENT_LENGTH);
if (sizeread == -1)
{
fatal_io_error ("can't read %s", name);
return 2;
}
- else if (sizeread != sizeof (pch_ident))
+ else if (sizeread != IDENT_LENGTH)
return 2;
- if (memcmp (ident, pch_ident, sizeof (pch_ident)) != 0)
+ pch_ident = get_ident();
+ if (memcmp (ident, pch_ident, IDENT_LENGTH) != 0)
{
if (cpp_get_options (pfile)->warn_invalid_pch)
{
@@ -150,7 +172,8 @@ c_common_valid_pch (pfile, name, fd)
"%s: not compatible with this GCC version", name);
else if (memcmp (ident, pch_ident, 4) == 0)
/* It's a PCH for the wrong language. */
- cpp_error (pfile, DL_WARNING, "%s: not for C language", name);
+ cpp_error (pfile, DL_WARNING, "%s: not for %s", name,
+ lang_hooks.name);
else
/* Not any kind of PCH. */
cpp_error (pfile, DL_WARNING, "%s: not a PCH file", name);
@@ -173,7 +196,7 @@ c_common_read_pch (pfile, name, fd, orig_name)
cpp_reader *pfile;
const char *name;
int fd;
- const char *orig_name;
+ const char *orig_name ATTRIBUTE_UNUSED;
{
FILE *f;
struct c_pch_header h;
@@ -181,10 +204,6 @@ c_common_read_pch (pfile, name, fd, orig_name)
unsigned long written;
struct save_macro_data *smd;
- /* Before we wrote the file, we started a source file, so we have to start
- one here to match. */
- (*debug_hooks->start_source_file) (lineno, orig_name);
-
f = fdopen (fd, "rb");
if (f == NULL)
{
@@ -221,6 +240,4 @@ c_common_read_pch (pfile, name, fd, orig_name)
return;
fclose (f);
-
- (*debug_hooks->end_source_file) (lineno);
}
diff --git a/gcc/c-tree.h b/gcc/c-tree.h
index a4e50c3b111..b24add65f63 100644
--- a/gcc/c-tree.h
+++ b/gcc/c-tree.h
@@ -41,7 +41,6 @@ struct lang_identifier GTY(())
tree local_value;
tree label_value;
tree implicit_decl;
- tree error_locus;
tree limbo_value;
};
@@ -91,10 +90,6 @@ struct lang_decl GTY(())
has had one at any point in this compilation. */
#define IDENTIFIER_IMPLICIT_DECL(NODE) \
(((struct lang_identifier *) (NODE))->implicit_decl)
-/* This is the last function in which we printed an "undefined variable"
- message for this identifier. Value is a FUNCTION_DECL or null. */
-#define IDENTIFIER_ERROR_LOCUS(NODE) \
- (((struct lang_identifier *) (NODE))->error_locus)
/* In identifiers, C uses the following fields in a special way:
TREE_PUBLIC to record that there was a previous local extern decl.
@@ -226,6 +221,7 @@ extern void push_label_level PARAMS ((void));
extern void push_parm_decl PARAMS ((tree));
extern tree pushdecl_top_level PARAMS ((tree));
extern void pushtag PARAMS ((tree, tree));
+extern void record_function_scope_shadow PARAMS ((tree));
extern tree set_array_declarator_type PARAMS ((tree, tree, int));
extern tree shadow_label PARAMS ((tree));
extern void shadow_tag PARAMS ((tree));
@@ -245,7 +241,7 @@ extern tree make_pointer_declarator PARAMS ((tree, tree));
/* in c-objc-common.c */
extern int c_disregard_inline_limits PARAMS ((tree));
extern int c_cannot_inline_tree_fn PARAMS ((tree *));
-extern const char *c_objc_common_init PARAMS ((const char *));
+extern bool c_objc_common_init PARAMS ((void));
extern int c_missing_noreturn_ok_p PARAMS ((tree));
extern void c_objc_common_finish_file PARAMS ((void));
extern int defer_fn PARAMS ((tree));
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index b3aa31e6370..f85251870cf 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -1153,7 +1153,7 @@ build_component_ref (datum, component)
end does it - by giving the anonymous entities each a
separate name and type, and then have build_component_ref
recursively call itself. We can't do that here. */
- for (; field; field = TREE_CHAIN (field))
+ do
{
tree subdatum = TREE_VALUE (field);
@@ -1170,7 +1170,10 @@ build_component_ref (datum, component)
warn_deprecated_use (subdatum);
datum = ref;
+
+ field = TREE_CHAIN (field);
}
+ while (field);
return ref;
}
@@ -1410,6 +1413,11 @@ build_external_ref (id, fun)
}
else
{
+ /* Don't complain about something that's already been
+ complained about. */
+ if (decl == error_mark_node)
+ return error_mark_node;
+
/* Reference to undeclared variable, including reference to
builtin outside of function-call context. */
if (current_function_decl == 0)
@@ -1417,21 +1425,22 @@ build_external_ref (id, fun)
IDENTIFIER_POINTER (id));
else
{
- if (IDENTIFIER_GLOBAL_VALUE (id) != error_mark_node
- || IDENTIFIER_ERROR_LOCUS (id) != current_function_decl)
- {
- error ("`%s' undeclared (first use in this function)",
- IDENTIFIER_POINTER (id));
+ error ("`%s' undeclared (first use in this function)",
+ IDENTIFIER_POINTER (id));
- if (! undeclared_variable_notice)
- {
- error ("(Each undeclared identifier is reported only once");
- error ("for each function it appears in.)");
- undeclared_variable_notice = 1;
- }
+ if (! undeclared_variable_notice)
+ {
+ error ("(Each undeclared identifier is reported only once");
+ error ("for each function it appears in.)");
+ undeclared_variable_notice = 1;
}
- IDENTIFIER_GLOBAL_VALUE (id) = error_mark_node;
- IDENTIFIER_ERROR_LOCUS (id) = current_function_decl;
+
+ /* Set IDENTIFIER_LOCAL_VALUE (id) to error_mark_node and
+ add a function-scope shadow entry which will undo that.
+ This suppresses further warnings about this undeclared
+ identifier in this function. */
+ record_function_scope_shadow (id);
+ IDENTIFIER_LOCAL_VALUE (id) = error_mark_node;
}
return error_mark_node;
}
@@ -2323,7 +2332,7 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
tree arg1 = get_narrower (op1, &unsigned1);
/* UNS is 1 if the operation to be done is an unsigned one. */
int uns = TREE_UNSIGNED (result_type);
- tree type = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
+ tree type;
final_type = result_type;
@@ -2600,13 +2609,13 @@ c_tree_expr_nonnegative_p (t)
{
if (TREE_CODE (t) == STMT_EXPR)
{
- t=COMPOUND_BODY (STMT_EXPR_STMT (t));
+ t = COMPOUND_BODY (STMT_EXPR_STMT (t));
/* Find the last statement in the chain, ignoring the final
* scope statement */
while (TREE_CHAIN (t) != NULL_TREE
&& TREE_CODE (TREE_CHAIN (t)) != SCOPE_STMT)
- t=TREE_CHAIN (t);
+ t = TREE_CHAIN (t);
return tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
}
return tree_expr_nonnegative_p (t);
@@ -3338,7 +3347,7 @@ c_mark_addressable (exp)
pedwarn ("address of register variable `%s' requested",
IDENTIFIER_POINTER (DECL_NAME (x)));
}
- put_var_into_stack (x);
+ put_var_into_stack (x, /*rescan=*/true);
/* drops in */
case FUNCTION_DECL:
@@ -4751,6 +4760,14 @@ digest_init (type, init, require_constant)
}
}
+ /* Build a VECTOR_CST from a *constant* vector constructor. If the
+ vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
+ below and handle as a constructor. */
+ if (code == VECTOR_TYPE
+ && comptypes (TREE_TYPE (inside_init), type)
+ && TREE_CONSTANT (inside_init))
+ return build_vector (type, TREE_OPERAND (inside_init, 1));
+
/* Any type can be initialized
from an expression of the same type, optionally with braces. */
@@ -5274,6 +5291,7 @@ push_init_level (implicit)
&& constructor_fields == 0)
process_init_element (pop_init_level (1));
else if (TREE_CODE (constructor_type) == ARRAY_TYPE
+ && constructor_max_index
&& tree_int_cst_lt (constructor_max_index, constructor_index))
process_init_element (pop_init_level (1));
else
@@ -7190,11 +7208,19 @@ do_case (low_value, high_value)
if (switch_stack)
{
+ bool switch_was_empty_p = (SWITCH_BODY (switch_stack->switch_stmt) == NULL_TREE);
+
label = c_add_case_label (switch_stack->cases,
SWITCH_COND (switch_stack->switch_stmt),
low_value, high_value);
if (label == error_mark_node)
label = NULL_TREE;
+ else if (switch_was_empty_p)
+ {
+ /* Attach the first case label to the SWITCH_BODY. */
+ SWITCH_BODY (switch_stack->switch_stmt) = TREE_CHAIN (switch_stack->switch_stmt);
+ TREE_CHAIN (switch_stack->switch_stmt) = NULL_TREE;
+ }
}
else if (low_value)
error ("case label not within a switch statement");
@@ -7211,7 +7237,8 @@ c_finish_case ()
{
struct c_switch *cs = switch_stack;
- RECHAIN_STMTS (cs->switch_stmt, SWITCH_BODY (cs->switch_stmt));
+ /* Rechain the next statements to the SWITCH_STMT. */
+ last_tree = cs->switch_stmt;
/* Pop the stack. */
switch_stack = switch_stack->next;
diff --git a/gcc/calls.c b/gcc/calls.c
index abd88fe6c72..f23b9397d59 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -37,6 +37,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "sbitmap.h"
#include "langhooks.h"
#include "target.h"
+#include "cgraph.h"
/* Decide whether a function's arguments should be processed
from first to last or from last to first.
@@ -795,17 +796,26 @@ flags_from_decl_or_type (exp)
{
int flags = 0;
tree type = exp;
- /* ??? We can't set IS_MALLOC for function types? */
+
if (DECL_P (exp))
{
+ struct cgraph_rtl_info *i = cgraph_rtl_info (exp);
type = TREE_TYPE (exp);
+ if (i)
+ {
+ if (i->pure_function)
+ flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
+ if (i->const_function)
+ flags |= ECF_CONST | ECF_LIBCALL_BLOCK;
+ }
+
/* The function exp may have the `malloc' attribute. */
- if (DECL_P (exp) && DECL_IS_MALLOC (exp))
+ if (DECL_IS_MALLOC (exp))
flags |= ECF_MALLOC;
/* The function exp may have the `pure' attribute. */
- if (DECL_P (exp) && DECL_IS_PURE (exp))
+ if (DECL_IS_PURE (exp))
flags |= ECF_PURE | ECF_LIBCALL_BLOCK;
if (TREE_NOTHROW (exp))
@@ -1634,6 +1644,7 @@ compute_argument_addresses (args, argblock, num_actuals)
addr = plus_constant (addr, arg_offset);
args[i].stack = gen_rtx_MEM (args[i].mode, addr);
+ set_mem_align (args[i].stack, PARM_BOUNDARY);
set_mem_attributes (args[i].stack,
TREE_TYPE (args[i].tree_value), 1);
@@ -1644,6 +1655,7 @@ compute_argument_addresses (args, argblock, num_actuals)
addr = plus_constant (addr, arg_offset);
args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
+ set_mem_align (args[i].stack_slot, PARM_BOUNDARY);
set_mem_attributes (args[i].stack_slot,
TREE_TYPE (args[i].tree_value), 1);
@@ -1663,12 +1675,12 @@ compute_argument_addresses (args, argblock, num_actuals)
FNDECL is the tree node for the target function. For an indirect call
FNDECL will be NULL_TREE.
- EXP is the CALL_EXPR for this call. */
+ ADDR is the operand 0 of CALL_EXPR for this call. */
static rtx
-rtx_for_function_call (fndecl, exp)
+rtx_for_function_call (fndecl, addr)
tree fndecl;
- tree exp;
+ tree addr;
{
rtx funexp;
@@ -1690,7 +1702,7 @@ rtx_for_function_call (fndecl, exp)
/* Generate an rtx (probably a pseudo-register) for the address. */
{
push_temp_slots ();
- funexp = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
+ funexp = expand_expr (addr, NULL_RTX, VOIDmode, 0);
pop_temp_slots (); /* FUNEXP can't be BLKmode. */
emit_queue ();
}
@@ -2212,6 +2224,7 @@ expand_call (exp, target, ignore)
int old_stack_allocated;
rtx call_fusage;
tree p = TREE_OPERAND (exp, 0);
+ tree addr = TREE_OPERAND (exp, 0);
int i;
/* The alignment of the stack, in bits. */
HOST_WIDE_INT preferred_stack_boundary;
@@ -2341,9 +2354,15 @@ expand_call (exp, target, ignore)
/* Figure out the amount to which the stack should be aligned. */
preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
+ if (fndecl)
+ {
+ struct cgraph_rtl_info *i = cgraph_rtl_info (fndecl);
+ if (i && i->preferred_incoming_stack_boundary)
+ preferred_stack_boundary = i->preferred_incoming_stack_boundary;
+ }
/* Operand 0 is a pointer-to-function; get the type of the function. */
- funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
+ funtype = TREE_TYPE (addr);
if (! POINTER_TYPE_P (funtype))
abort ();
funtype = TREE_TYPE (funtype);
@@ -2480,8 +2499,8 @@ expand_call (exp, target, ignore)
/* Tail recursion fails, when we are not dealing with recursive calls. */
if (!try_tail_recursion
- || TREE_CODE (TREE_OPERAND (exp, 0)) != ADDR_EXPR
- || TREE_OPERAND (TREE_OPERAND (exp, 0), 0) != current_function_decl)
+ || TREE_CODE (addr) != ADDR_EXPR
+ || TREE_OPERAND (addr, 0) != current_function_decl)
try_tail_recursion = 0;
/* Rest of purposes for tail call optimizations to fail. */
@@ -2503,7 +2522,7 @@ expand_call (exp, target, ignore)
/* Functions that do not return exactly once may not be sibcall
optimized. */
|| (flags & (ECF_RETURNS_TWICE | ECF_LONGJMP | ECF_NORETURN))
- || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
+ || TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (addr)))
/* If this function requires more stack slots than the current
function, we cannot change it into a sibling call. */
|| args_size.constant > current_function_args_size
@@ -2556,9 +2575,9 @@ expand_call (exp, target, ignore)
if (try_tail_recursion)
actparms = tree_cons (NULL_TREE, args[i].tree_value, actparms);
}
- /* Do the same for the function address if it is an expression. */
+ /* Do the same for the function address if it is an expression. */
if (!fndecl)
- TREE_OPERAND (exp, 0) = fix_unsafe_tree (TREE_OPERAND (exp, 0));
+ addr = fix_unsafe_tree (addr);
/* Expanding one of those dangerous arguments could have added
cleanups, but otherwise give it a whirl. */
if (any_pending_cleanups (1))
@@ -2627,6 +2646,8 @@ expand_call (exp, target, ignore)
if (cfun->preferred_stack_boundary < preferred_stack_boundary
&& fndecl != current_function_decl)
cfun->preferred_stack_boundary = preferred_stack_boundary;
+ if (fndecl == current_function_decl)
+ cfun->recursive_call_emit = true;
preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;
@@ -2949,7 +2970,7 @@ expand_call (exp, target, ignore)
be deferred during the evaluation of the arguments. */
NO_DEFER_POP;
- funexp = rtx_for_function_call (fndecl, exp);
+ funexp = rtx_for_function_call (fndecl, addr);
/* Figure out the register where the value, if any, will come back. */
valreg = 0;
@@ -4577,7 +4598,6 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space)
return sibcall_failure;
}
-
/* Nonzero if we do not know how to pass TYPE solely in registers.
We cannot do so in the following cases:
diff --git a/gcc/cfg.c b/gcc/cfg.c
index 71d58c6ff3e..971255ae4ea 100644
--- a/gcc/cfg.c
+++ b/gcc/cfg.c
@@ -280,6 +280,32 @@ expunge_block (b)
pool_free (bb_pool, b);
}
+/* Create an edge connecting SRC and DEST with flags FLAGS. Return newly
+ created edge. Use this only if you are sure that this edge can't
+ possibly already exist. */
+
+edge
+unchecked_make_edge (src, dst, flags)
+ basic_block src, dst;
+ int flags;
+{
+ edge e;
+ e = pool_alloc (edge_pool);
+ memset (e, 0, sizeof (*e));
+ n_edges++;
+
+ e->succ_next = src->succ;
+ e->pred_next = dst->pred;
+ e->src = src;
+ e->dest = dst;
+ e->flags = flags;
+
+ src->succ = e;
+ dst->pred = e;
+
+ return e;
+}
+
/* Create an edge connecting SRC and DST with FLAGS optionally using
edge cache CACHE. Return the new edge, NULL if already exist. */
@@ -320,19 +346,7 @@ cached_make_edge (edge_cache, src, dst, flags)
break;
}
-
- e = pool_alloc (edge_pool);
- memset (e, 0, sizeof (*e));
- n_edges++;
-
- e->succ_next = src->succ;
- e->pred_next = dst->pred;
- e->src = src;
- e->dest = dst;
- e->flags = flags;
-
- src->succ = e;
- dst->pred = e;
+ e = unchecked_make_edge (src, dst, flags);
if (use_edge_cache)
SET_BIT (edge_cache[src->index], dst->index);
@@ -639,8 +653,7 @@ dump_edge_info (file, e, do_succ)
if (e->flags)
{
static const char * const bitnames[]
- = {"fallthru", "ab", "abcall", "eh", "fake", "dfs_back", "can_fallthru",
- "true", "false", "exec"};
+ = {"fallthru", "ab", "abcall", "eh", "fake", "dfs_back", "can_fallthru","irreducible", "true", "false", "exec"};
int comma = 0;
int i, flags = e->flags;
diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c
index d5d1b2009db..889ae9da23d 100644
--- a/gcc/cfgbuild.c
+++ b/gcc/cfgbuild.c
@@ -343,12 +343,8 @@ make_edges (label_value_list, min, max, update_p)
else if (find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
;
- /* ??? Recognize a tablejump and do the right thing. */
- else if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
+ /* Recognize a tablejump and do the right thing. */
+ else if (tablejump_p (insn, NULL, &tmp))
{
rtvec vec;
int j;
@@ -811,7 +807,7 @@ find_many_sub_basic_blocks (blocks)
{
bb->count = 0;
bb->frequency = 0;
- for (e = bb->pred; e; e=e->pred_next)
+ for (e = bb->pred; e; e = e->pred_next)
{
bb->count += e->count;
bb->frequency += EDGE_FREQUENCY (e);
@@ -852,7 +848,7 @@ find_sub_basic_blocks (bb)
{
b->count = 0;
b->frequency = 0;
- for (e = b->pred; e; e=e->pred_next)
+ for (e = b->pred; e; e = e->pred_next)
{
b->count += e->count;
b->frequency += EDGE_FREQUENCY (e);
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index eaefdf2e381..8ca6c41c3f2 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -81,7 +81,7 @@ static void merge_blocks_move_predecessor_nojumps PARAMS ((basic_block,
basic_block));
static void merge_blocks_move_successor_nojumps PARAMS ((basic_block,
basic_block));
-static bool merge_blocks PARAMS ((edge,basic_block,basic_block,
+static basic_block merge_blocks PARAMS ((edge,basic_block,basic_block,
int));
static bool try_optimize_cfg PARAMS ((int));
static bool try_simplify_condjump PARAMS ((basic_block));
@@ -656,12 +656,7 @@ label_is_jump_target_p (label, jump_insn)
if (label == tmp)
return true;
- if (tmp != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (tmp = PATTERN (tmp),
- GET_CODE (tmp) == ADDR_VEC
- || GET_CODE (tmp) == ADDR_DIFF_VEC))
+ if (tablejump_p (jump_insn, NULL, &tmp))
{
rtvec vec = XVEC (tmp, GET_CODE (tmp) == ADDR_DIFF_VEC);
int i, veclen = GET_NUM_ELEM (vec);
@@ -788,14 +783,24 @@ merge_blocks_move_successor_nojumps (a, b)
}
/* Attempt to merge basic blocks that are potentially non-adjacent.
- Return true iff the attempt succeeded. */
-
-static bool
+ Return NULL iff the attempt failed, otherwise return basic block
+ where cleanup_cfg should continue. Because the merging commonly
+ moves basic block away or introduces another optimization
+ possiblity, return basic block just before B so cleanup_cfg don't
+ need to iterate.
+
+ It may be good idea to return basic block before C in the case
+ C has been moved after B and originally appeared earlier in the
+ insn seqeunce, but we have no infromation available about the
+ relative ordering of these two. Hopefully it is not too common. */
+
+static basic_block
merge_blocks (e, b, c, mode)
edge e;
basic_block b, c;
int mode;
{
+ basic_block next;
/* If C has a tail recursion label, do not merge. There is no
edge recorded from the call_placeholder back to this label, as
that would make optimize_sibling_and_tail_recursive_calls more
@@ -803,7 +808,7 @@ merge_blocks (e, b, c, mode)
if ((mode & CLEANUP_PRE_SIBCALL)
&& GET_CODE (c->head) == CODE_LABEL
&& tail_recursion_label_p (c->head))
- return false;
+ return NULL;
/* If B has a fallthru edge to C, no need to move anything. */
if (e->flags & EDGE_FALLTHRU)
@@ -816,7 +821,7 @@ merge_blocks (e, b, c, mode)
fprintf (rtl_dump_file, "Merged %d and %d without moving.\n",
b_index, c_index);
- return true;
+ return b->prev_bb == ENTRY_BLOCK_PTR ? b : b->prev_bb;
}
/* Otherwise we will need to move code around. Do that only if expensive
@@ -832,7 +837,7 @@ merge_blocks (e, b, c, mode)
been if B is a forwarder block and C has no fallthru edge, but
that should be cleaned up by bb-reorder instead. */
if (FORWARDER_BLOCK_P (b) || FORWARDER_BLOCK_P (c))
- return false;
+ return NULL;
/* We must make sure to not munge nesting of lexical blocks,
and loop notes. This is done by squeezing out all the notes
@@ -850,6 +855,9 @@ merge_blocks (e, b, c, mode)
b_has_incoming_fallthru = (tmp_edge != NULL);
b_fallthru_edge = tmp_edge;
+ next = b->prev_bb;
+ if (next == c)
+ next = next->prev_bb;
/* Otherwise, we're going to try to move C after B. If C does
not have an outgoing fallthru, then it can be moved
@@ -857,7 +865,7 @@ merge_blocks (e, b, c, mode)
if (! c_has_outgoing_fallthru)
{
merge_blocks_move_successor_nojumps (b, c);
- return true;
+ return next == ENTRY_BLOCK_PTR ? next->next_bb : next;
}
/* If B does not have an incoming fallthru, then it can be moved
@@ -870,14 +878,14 @@ merge_blocks (e, b, c, mode)
basic_block bb;
if (b_fallthru_edge->src == ENTRY_BLOCK_PTR)
- return false;
+ return NULL;
bb = force_nonfallthru (b_fallthru_edge);
if (bb)
notice_new_block (bb);
}
merge_blocks_move_predecessor_nojumps (b, c);
- return true;
+ return next == ENTRY_BLOCK_PTR ? next->next_bb : next;
}
return false;
@@ -954,7 +962,15 @@ insns_match_p (mode, i1, i2)
#endif
if (reload_completed
- ? ! rtx_renumbered_equal_p (p1, p2) : ! rtx_equal_p (p1, p2))
+ ? rtx_renumbered_equal_p (p1, p2) : rtx_equal_p (p1, p2))
+ return true;
+
+ /* Do not do EQUIV substitution after reload. First, we're undoing the
+ work of reload_cse. Second, we may be undoing the work of the post-
+ reload splitting pass. */
+ /* ??? Possibly add a new phase switch variable that can be used by
+ targets to disallow the troublesome insns after splitting. */
+ if (!reload_completed)
{
/* The following code helps take care of G++ cleanups. */
rtx equiv1 = find_reg_equal_equiv_note (i1);
@@ -981,11 +997,9 @@ insns_match_p (mode, i1, i2)
return true;
}
}
-
- return false;
}
- return true;
+ return false;
}
/* Look through the insns at the end of BB1 and BB2 and find the longest
@@ -1243,10 +1257,84 @@ outgoing_edges_match (mode, bb1, bb2)
/* Generic case - we are seeing a computed jump, table jump or trapping
instruction. */
+#ifndef CASE_DROPS_THROUGH
+ /* Check whether there are tablejumps in the end of BB1 and BB2.
+ Return true if they are identical. */
+ {
+ rtx label1, label2;
+ rtx table1, table2;
+
+ if (tablejump_p (bb1->end, &label1, &table1)
+ && tablejump_p (bb2->end, &label2, &table2)
+ && GET_CODE (PATTERN (table1)) == GET_CODE (PATTERN (table2)))
+ {
+ /* The labels should never be the same rtx. If they really are same
+ the jump tables are same too. So disable crossjumping of blocks BB1
+ and BB2 because when deleting the common insns in the end of BB1
+ by flow_delete_block () the jump table would be deleted too. */
+ /* If LABEL2 is referenced in BB1->END do not do anything
+ because we would loose information when replacing
+ LABEL1 by LABEL2 and then LABEL2 by LABEL1 in BB1->END. */
+ if (label1 != label2 && !rtx_referenced_p (label2, bb1->end))
+ {
+ /* Set IDENTICAL to true when the tables are identical. */
+ bool identical = false;
+ rtx p1, p2;
+
+ p1 = PATTERN (table1);
+ p2 = PATTERN (table2);
+ if (GET_CODE (p1) == ADDR_VEC && rtx_equal_p (p1, p2))
+ {
+ identical = true;
+ }
+ else if (GET_CODE (p1) == ADDR_DIFF_VEC
+ && (XVECLEN (p1, 1) == XVECLEN (p2, 1))
+ && rtx_equal_p (XEXP (p1, 2), XEXP (p2, 2))
+ && rtx_equal_p (XEXP (p1, 3), XEXP (p2, 3)))
+ {
+ int i;
+
+ identical = true;
+ for (i = XVECLEN (p1, 1) - 1; i >= 0 && identical; i--)
+ if (!rtx_equal_p (XVECEXP (p1, 1, i), XVECEXP (p2, 1, i)))
+ identical = false;
+ }
+
+ if (identical)
+ {
+ replace_label_data rr;
+ bool match;
+
+ /* Temporarily replace references to LABEL1 with LABEL2
+ in BB1->END so that we could compare the instructions. */
+ rr.r1 = label1;
+ rr.r2 = label2;
+ rr.update_label_nuses = false;
+ for_each_rtx (&bb1->end, replace_label, &rr);
+
+ match = insns_match_p (mode, bb1->end, bb2->end);
+ if (rtl_dump_file && match)
+ fprintf (rtl_dump_file,
+ "Tablejumps in bb %i and %i match.\n",
+ bb1->index, bb2->index);
+
+ /* Set the original label in BB1->END because when deleting
+ a block whose end is a tablejump, the tablejump referenced
+ from the instruction is deleted too. */
+ rr.r1 = label2;
+ rr.r2 = label1;
+ for_each_rtx (&bb1->end, replace_label, &rr);
+
+ return match;
+ }
+ }
+ return false;
+ }
+ }
+#endif
+
/* First ensure that the instructions match. There may be many outgoing
- edges so this test is generally cheaper.
- ??? Currently the tablejumps will never match, as they do have
- different tables. */
+ edges so this test is generally cheaper. */
if (!insns_match_p (mode, bb1->end, bb2->end))
return false;
@@ -1359,6 +1447,39 @@ try_crossjump_to_edge (mode, e1, e2)
if (!nmatch)
return false;
+#ifndef CASE_DROPS_THROUGH
+ /* Here we know that the insns in the end of SRC1 which are common with SRC2
+ will be deleted.
+ If we have tablejumps in the end of SRC1 and SRC2
+ they have been already compared for equivalence in outgoing_edges_match ()
+ so replace the references to TABLE1 by references to TABLE2. */
+ {
+ rtx label1, label2;
+ rtx table1, table2;
+
+ if (tablejump_p (src1->end, &label1, &table1)
+ && tablejump_p (src2->end, &label2, &table2)
+ && label1 != label2)
+ {
+ replace_label_data rr;
+ rtx insn;
+
+ /* Replace references to LABEL1 with LABEL2. */
+ rr.r1 = label1;
+ rr.r2 = label2;
+ rr.update_label_nuses = true;
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ {
+ /* Do not replace the label in SRC1->END because when deleting
+ a block whose end is a tablejump, the tablejump referenced
+ from the instruction is deleted too. */
+ if (insn != src1->end)
+ for_each_rtx (&insn, replace_label, &rr);
+ }
+ }
+ }
+#endif
+
/* Avoid splitting if possible. */
if (newpos2 == src2->head)
redirect_to = src2;
@@ -1560,7 +1681,7 @@ try_optimize_cfg (mode)
bool changed_overall = false;
bool changed;
int iterations = 0;
- basic_block bb, b;
+ basic_block bb, b, next;
if (mode & CLEANUP_CROSSJUMP)
add_noreturn_fake_exit_edges ();
@@ -1656,20 +1777,23 @@ try_optimize_cfg (mode)
b = c;
}
- /* Merge blocks. Loop because chains of blocks might be
- combineable. */
- while ((s = b->succ) != NULL
- && s->succ_next == NULL
- && !(s->flags & EDGE_COMPLEX)
- && (c = s->dest) != EXIT_BLOCK_PTR
- && c->pred->pred_next == NULL
- && b != c
- /* If the jump insn has side effects,
- we can't kill the edge. */
- && (GET_CODE (b->end) != JUMP_INSN
- || simplejump_p (b->end))
- && merge_blocks (s, b, c, mode))
- changed_here = true;
+ if ((s = b->succ) != NULL
+ && s->succ_next == NULL
+ && !(s->flags & EDGE_COMPLEX)
+ && (c = s->dest) != EXIT_BLOCK_PTR
+ && c->pred->pred_next == NULL
+ && b != c
+ /* If the jump insn has side effects,
+ we can't kill the edge. */
+ && (GET_CODE (b->end) != JUMP_INSN
+ || (flow2_completed
+ ? simplejump_p (b->end)
+ : onlyjump_p (b->end)))
+ && (next = merge_blocks (s, b, c, mode)))
+ {
+ b = next;
+ changed_here = true;
+ }
/* Simplify branch over branch. */
if ((mode & CLEANUP_EXPENSIVE) && try_simplify_condjump (b))
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 04ba2ec21e0..b5be7ca29b3 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -465,11 +465,43 @@ fixup_reorder_chain ()
&& e_fall->dest == EXIT_BLOCK_PTR))
continue;
+ /* The degenerated case of conditional jump jumping to the next
+ instruction can happen on target having jumps with side
+ effects.
+
+ Create temporarily the duplicated edge representing branch.
+ It will get unidentified by force_nonfallthru_and_redirect
+ that would otherwise get confused by fallthru edge not pointing
+ to the next basic block. */
+ if (!e_taken)
+ {
+ rtx note;
+ edge e_fake;
+
+ e_fake = unchecked_make_edge (bb, e_fall->dest, 0);
+
+ if (!redirect_jump (bb->end, block_label (bb), 0))
+ abort ();
+ note = find_reg_note (bb->end, REG_BR_PROB, NULL_RTX);
+ if (note)
+ {
+ int prob = INTVAL (XEXP (note, 0));
+
+ e_fake->probability = prob;
+ e_fake->count = e_fall->count * prob / REG_BR_PROB_BASE;
+ e_fall->probability -= e_fall->probability;
+ e_fall->count -= e_fake->count;
+ if (e_fall->probability < 0)
+ e_fall->probability = 0;
+ if (e_fall->count < 0)
+ e_fall->count = 0;
+ }
+ }
/* There is one special case: if *neither* block is next,
such as happens at the very end of a function, then we'll
need to add a new unconditional jump. Choose the taken
edge based on known or assumed probability. */
- if (RBI (bb)->next != e_taken->dest)
+ else if (RBI (bb)->next != e_taken->dest)
{
rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0);
@@ -728,7 +760,6 @@ bool
cfg_layout_can_duplicate_bb_p (bb)
basic_block bb;
{
- rtx next;
edge s;
if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR)
@@ -743,11 +774,7 @@ cfg_layout_can_duplicate_bb_p (bb)
/* Do not attempt to duplicate tablejumps, as we need to unshare
the dispatch table. This is difficult to do, as the instructions
computing jump destination may be hoisted outside the basic block. */
- if (GET_CODE (bb->end) == JUMP_INSN && JUMP_LABEL (bb->end)
- && (next = next_nonnote_insn (JUMP_LABEL (bb->end)))
- && GET_CODE (next) == JUMP_INSN
- && (GET_CODE (PATTERN (next)) == ADDR_VEC
- || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC))
+ if (tablejump_p (bb->end, NULL, NULL))
return false;
/* Do not duplicate blocks containing insns that can't be copied. */
@@ -980,7 +1007,10 @@ cfg_layout_duplicate_bb (bb, e)
new_bb->flags = bb->flags;
for (s = bb->succ; s; s = s->succ_next)
{
- n = make_edge (new_bb, s->dest, s->flags);
+ /* Since we are creating edges from a new block to successors
+ of another block (which therefore are known to be disjoint), there
+ is no need to actually check for duplicated edges. */
+ n = unchecked_make_edge (new_bb, s->dest, s->flags);
n->probability = s->probability;
if (new_count)
/* Take care for overflows! */
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index 9f8c3051107..92d90556993 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -43,12 +43,12 @@ static basic_block flow_loop_pre_header_find PARAMS ((basic_block,
dominance_info));
static int flow_loop_level_compute PARAMS ((struct loop *));
static int flow_loops_level_compute PARAMS ((struct loops *));
+static void establish_preds PARAMS ((struct loop *));
static basic_block make_forwarder_block PARAMS ((basic_block, int, int,
edge, int));
static void canonicalize_loop_headers PARAMS ((void));
static bool glb_enum_p PARAMS ((basic_block, void *));
static void redirect_edge_with_latch_update PARAMS ((edge, basic_block));
-static void flow_loop_free PARAMS ((struct loop *));
/* Dump loop related CFG information. */
@@ -185,7 +185,7 @@ flow_loops_dump (loops, file, loop_dump_aux, verbose)
}
/* Free data allocated for LOOP. */
-static void
+void
flow_loop_free (loop)
struct loop *loop;
{
@@ -447,8 +447,26 @@ flow_loop_pre_header_find (header, dom)
return pre_header;
}
+static void
+establish_preds (loop)
+ struct loop *loop;
+{
+ struct loop *ploop, *father = loop->outer;
+
+ loop->depth = father->depth + 1;
+ if (loop->pred)
+ free (loop->pred);
+ loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
+ memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
+ loop->pred[father->depth] = father;
+
+ for (ploop = loop->inner; ploop; ploop = ploop->next)
+ establish_preds (ploop);
+}
+
/* Add LOOP to the loop hierarchy tree where FATHER is father of the
- added loop. */
+ added loop. If LOOP has some children, take care of that their
+ pred field will be initialized correctly. */
void
flow_loop_tree_node_add (father, loop)
@@ -459,10 +477,7 @@ flow_loop_tree_node_add (father, loop)
father->inner = loop;
loop->outer = father;
- loop->depth = father->depth + 1;
- loop->pred = xmalloc (sizeof (struct loop *) * loop->depth);
- memcpy (loop->pred, father->pred, sizeof (struct loop *) * father->depth);
- loop->pred[father->depth] = father;
+ establish_preds (loop);
}
/* Remove LOOP from the loop hierarchy tree. */
@@ -1029,6 +1044,37 @@ get_loop_body (loop)
return tovisit;
}
+/* Gets exit edges of a LOOP, returning their number in N_EDGES. */
+edge *
+get_loop_exit_edges (loop, n_edges)
+ const struct loop *loop;
+ unsigned *n_edges;
+{
+ edge *edges, e;
+ unsigned i, n;
+ basic_block * body;
+
+ if (loop->latch == EXIT_BLOCK_PTR)
+ abort ();
+
+ body = get_loop_body (loop);
+ n = 0;
+ for (i = 0; i < loop->num_nodes; i++)
+ for (e = body[i]->succ; e; e = e->succ_next)
+ if (!flow_bb_inside_loop_p (loop, e->dest))
+ n++;
+ edges = xmalloc (n * sizeof (edge));
+ *n_edges = n;
+ n = 0;
+ for (i = 0; i < loop->num_nodes; i++)
+ for (e = body[i]->succ; e; e = e->succ_next)
+ if (!flow_bb_inside_loop_p (loop, e->dest))
+ edges[n++] = e;
+ free (body);
+
+ return edges;
+}
+
/* Adds basic block BB to LOOP. */
void
add_bb_to_loop (bb, loop)
@@ -1135,6 +1181,7 @@ verify_loop_structure (loops)
basic_block *bbs, bb;
struct loop *loop;
int err = 0;
+ edge e;
/* Check sizes. */
sizes = xcalloc (loops->num, sizeof (int));
@@ -1215,6 +1262,12 @@ verify_loop_structure (loops)
error ("Loop %d's header does not belong directly to it.", i);
err = 1;
}
+ if ((loops->state & LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
+ && (loop_latch_edge (loop)->flags & EDGE_IRREDUCIBLE_LOOP))
+ {
+ error ("Loop %d's latch is marked as part of irreducible region.", i);
+ err = 1;
+ }
}
/* Check irreducible loops. */
@@ -1223,10 +1276,15 @@ verify_loop_structure (loops)
/* Record old info. */
irreds = sbitmap_alloc (last_basic_block);
FOR_EACH_BB (bb)
- if (bb->flags & BB_IRREDUCIBLE_LOOP)
- SET_BIT (irreds, bb->index);
- else
- RESET_BIT (irreds, bb->index);
+ {
+ if (bb->flags & BB_IRREDUCIBLE_LOOP)
+ SET_BIT (irreds, bb->index);
+ else
+ RESET_BIT (irreds, bb->index);
+ for (e = bb->succ; e; e = e->succ_next)
+ if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ e->flags |= EDGE_ALL_FLAGS + 1;
+ }
/* Recount it. */
mark_irreducible_loops (loops);
@@ -1246,6 +1304,24 @@ verify_loop_structure (loops)
error ("Basic block %d should not be marked irreducible.", bb->index);
err = 1;
}
+ for (e = bb->succ; e; e = e->succ_next)
+ {
+ if ((e->flags & EDGE_IRREDUCIBLE_LOOP)
+ && !(e->flags & (EDGE_ALL_FLAGS + 1)))
+ {
+ error ("Edge from %d to %d should be marked irreducible.",
+ e->src->index, e->dest->index);
+ err = 1;
+ }
+ else if (!(e->flags & EDGE_IRREDUCIBLE_LOOP)
+ && (e->flags & (EDGE_ALL_FLAGS + 1)))
+ {
+ error ("Edge from %d to %d should not be marked irreducible.",
+ e->src->index, e->dest->index);
+ err = 1;
+ }
+ e->flags &= ~(EDGE_ALL_FLAGS + 1);
+ }
}
free (irreds);
}
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index ae1e5290e40..c5db9149c9d 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -266,6 +266,7 @@ extern void flow_loop_dump PARAMS ((const struct loop *, FILE *,
FILE *, int), int));
extern int flow_loop_scan PARAMS ((struct loops *,
struct loop *, int));
+extern void flow_loop_free PARAMS ((struct loop *));
void mark_irreducible_loops PARAMS ((struct loops *));
/* Loop datastructure manipulation/querying. */
@@ -282,6 +283,7 @@ extern int average_num_loop_insns PARAMS ((struct loop *));
/* Loops & cfg manipulation. */
extern basic_block *get_loop_body PARAMS ((const struct loop *));
+extern edge *get_loop_exit_edges PARAMS ((const struct loop *, unsigned *));
extern edge loop_preheader_edge PARAMS ((const struct loop *));
extern edge loop_latch_edge PARAMS ((const struct loop *));
@@ -326,6 +328,7 @@ extern int duplicate_loop_to_header_edge PARAMS ((struct loop *, edge,
unsigned *, int));
extern struct loop *loopify PARAMS ((struct loops *, edge,
edge, basic_block));
+extern void unloop PARAMS ((struct loops *, struct loop *));
extern bool remove_path PARAMS ((struct loops *, edge));
extern edge split_loop_bb PARAMS ((struct loops *, basic_block,
rtx));
diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c
index 1c2a57d182c..0843a006acb 100644
--- a/gcc/cfgloopanal.c
+++ b/gcc/cfgloopanal.c
@@ -214,7 +214,7 @@ invariant_rtx_wrto_regs_p_helper (expr, invariant_regs)
}
}
-/* Checks that EXPR is invariant provided that INVARIANT_REGS are invariant. */
+/* Checks that EXPR is invariant provided that INVARIANT_REGS are invariant. */
static bool
invariant_rtx_wrto_regs_p (expr, invariant_regs)
rtx expr;
@@ -278,7 +278,7 @@ simple_condition_p (loop, condition, invariant_regs, desc)
return true;
}
- /* Check the other operand. */
+ /* Check the other operand. */
if (!invariant_rtx_wrto_regs_p (op1, invariant_regs))
return false;
if (!REG_P (op0))
@@ -494,7 +494,7 @@ constant_iterations (desc, niter, may_be_zero)
These cases needs to be either cared by copying the loop test in the front
of loop or keeping the test in first iteration of loop.
- When INIT/LIM are set, they are used instead of var/lim of DESC. */
+ When INIT/LIM are set, they are used instead of var/lim of DESC. */
rtx
count_loop_iterations (desc, init, lim)
struct loop_desc *desc;
@@ -578,7 +578,7 @@ count_loop_iterations (desc, init, lim)
if (stride != const1_rtx)
{
/* Number of iterations is now (EXP + STRIDE - 1 / STRIDE),
- but we need to take care for overflows. */
+ but we need to take care for overflows. */
mod = simplify_gen_binary (UMOD, GET_MODE (desc->var), exp, stride);
@@ -719,7 +719,7 @@ simple_loop_exit_p (loops, loop, exit_edge, invariant_regs, single_set_regs, des
desc->var_alts = variable_initial_values (e, desc->var);
desc->lim_alts = variable_initial_values (e, desc->lim);
- /* Number of iterations. */
+ /* Number of iterations. */
if (!count_loop_iterations (desc, NULL, NULL))
return false;
desc->const_iter =
@@ -819,12 +819,12 @@ simple_loop_p (loops, loop, desc)
return any;
}
-/* Marks blocks that are part of non-recognized loops; i.e. we throw away
- all latch edges and mark blocks inside any remaining cycle. Everything
- is a bit complicated due to fact we do not want to do this for parts of
- cycles that only "pass" through some loop -- i.e. for each cycle, we want
- to mark blocks that belong directly to innermost loop containing the whole
- cycle. */
+/* Marks blocks and edges that are part of non-recognized loops; i.e. we
+ throw away all latch edges and mark blocks inside any remaining cycle.
+ Everything is a bit complicated due to fact we do not want to do this
+ for parts of cycles that only "pass" through some loop -- i.e. for
+ each cycle, we want to mark blocks that belong directly to innermost
+ loop containing the whole cycle. */
void
mark_irreducible_loops (loops)
struct loops *loops;
@@ -832,10 +832,19 @@ mark_irreducible_loops (loops)
int *dfs_in, *closed, *mr, *mri, *n_edges, *stack;
unsigned i;
edge **edges, e;
+ edge *estack;
basic_block act;
int stack_top, tick, depth;
struct loop *cloop;
+ /* Reset the flags. */
+ FOR_BB_BETWEEN (act, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, next_bb)
+ {
+ act->flags &= ~BB_IRREDUCIBLE_LOOP;
+ for (e = act->succ; e; e = e->succ_next)
+ e->flags &= ~EDGE_IRREDUCIBLE_LOOP;
+ }
+
/* The first last_basic_block + 1 entries are for real blocks (including
entry); then we have loops->num - 1 fake blocks for loops to that we
assign edges leading from loops (fake loop 0 is not interesting). */
@@ -846,6 +855,7 @@ mark_irreducible_loops (loops)
n_edges = xmalloc ((last_basic_block + loops->num) * sizeof (int));
edges = xmalloc ((last_basic_block + loops->num) * sizeof (edge *));
stack = xmalloc ((n_basic_blocks + loops->num) * sizeof (int));
+ estack = xmalloc ((n_basic_blocks + loops->num) * sizeof (edge));
/* Create the edge lists. */
for (i = 0; i < last_basic_block + loops->num; i++)
@@ -923,7 +933,11 @@ mark_irreducible_loops (loops)
stack_top = 0;
for (i = 0; i < loops->num; i++)
if (loops->parray[i])
- stack[stack_top++] = loops->parray[i]->header->index + 1;
+ {
+ stack[stack_top] = loops->parray[i]->header->index + 1;
+ estack[stack_top] = NULL;
+ stack_top++;
+ }
while (stack_top)
{
@@ -941,16 +955,24 @@ mark_irreducible_loops (loops)
: e->dest->index + 1;
if (closed[sidx])
{
- if (mr[sidx] < mr[idx] && !closed[mri[sidx]])
+ if (!closed[mri[sidx]])
{
- mr[idx] = mr[sidx];
- mri[idx] = mri[sidx];
+ if (mr[sidx] < mr[idx])
+ {
+ mr[idx] = mr[sidx];
+ mri[idx] = mri[sidx];
+ }
+
+ if (mr[sidx] <= dfs_in[idx])
+ e->flags |= EDGE_IRREDUCIBLE_LOOP;
}
continue;
}
if (dfs_in[sidx] < 0)
{
- stack[stack_top++] = sidx;
+ stack[stack_top] = sidx;
+ estack[stack_top] = e;
+ stack_top++;
goto next;
}
if (dfs_in[sidx] < mr[idx])
@@ -958,12 +980,14 @@ mark_irreducible_loops (loops)
mr[idx] = dfs_in[sidx];
mri[idx] = sidx;
}
+ e->flags |= EDGE_IRREDUCIBLE_LOOP;
}
/* Return back. */
closed[idx] = 1;
+ e = estack[stack_top - 1];
stack_top--;
- if (stack_top && dfs_in[stack[stack_top - 1]] >= 0)
+ if (e)
{
/* Propagate information back. */
sidx = stack[stack_top - 1];
@@ -972,6 +996,8 @@ mark_irreducible_loops (loops)
mr[sidx] = mr[idx];
mri[sidx] = mri[idx];
}
+ if (mr[idx] <= dfs_in[sidx])
+ e->flags |= EDGE_IRREDUCIBLE_LOOP;
}
/* Mark the block if relevant. */
if (idx && idx <= last_basic_block && mr[idx] <= dfs_in[idx])
@@ -980,6 +1006,7 @@ next:;
}
free (stack);
+ free (estack);
free (dfs_in);
free (closed);
free (mr);
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index 69cb63b21dd..70926f2ab7d 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -36,7 +36,7 @@ static void duplicate_subloops PARAMS ((struct loops *, struct loop *,
static void copy_loops_to PARAMS ((struct loops *, struct loop **,
int, struct loop *));
static void loop_redirect_edge PARAMS ((edge, basic_block));
-static bool loop_delete_branch_edge PARAMS ((edge));
+static bool loop_delete_branch_edge PARAMS ((edge, int));
static void copy_bbs PARAMS ((basic_block *, int, edge,
edge, basic_block **,
struct loops *, edge *,
@@ -58,6 +58,7 @@ static void record_exit_edges PARAMS ((edge, basic_block *, int,
edge *, unsigned *, int));
static basic_block create_preheader PARAMS ((struct loop *, dominance_info,
int));
+static void fix_irreducible_loops PARAMS ((basic_block));
/* Splits basic block BB after INSN, returns created edge. Updates loops
and dominators. */
@@ -128,28 +129,20 @@ remove_bbs (dom, bbs, nbbs)
/* Find path -- i.e. the basic blocks dominated by edge E and put them
into array BBS, that will be allocated large enough to contain them.
- The number of basic blocks in the path is returned. */
+ E->dest must have exactly one predecessor for this to work (it is
+ easy to achieve and we do not put it here because we do not want to
+ alter anything by this function). The number of basic blocks in the
+ path is returned. */
static int
find_path (e, doms, bbs)
edge e;
dominance_info doms;
basic_block **bbs;
{
- edge ae = NULL;
struct rpe_data rpe;
if (e->dest->pred->pred_next)
- {
- for (ae = e->dest->pred; ae; ae = ae->pred_next)
- if (ae != e && !dominated_by_p (doms, ae->src, e->dest))
- break;
- }
- if (ae)
- {
- /* The path is formed just by the edge. */
- *bbs = NULL;
- return 0;
- }
+ abort ();
/* Find bbs in the path. */
rpe.dom = e->dest;
@@ -231,7 +224,7 @@ fix_bb_placements (loops, from)
/* Prevent us from going out of the base_loop. */
SET_BIT (in_queue, base_loop->header->index);
- queue = xcalloc (base_loop->num_nodes + 1, sizeof (basic_block));
+ queue = xmalloc ((base_loop->num_nodes + 1) * sizeof (basic_block));
qtop = queue + base_loop->num_nodes + 1;
qbeg = queue;
qend = queue + 1;
@@ -296,6 +289,75 @@ fix_bb_placements (loops, from)
free (queue);
}
+/* Basic block from has lost one or more of its predecessors, so it might
+ mo longer be part irreducible loop. Fix it and proceed recursively
+ for its successors if needed. */
+static void
+fix_irreducible_loops (from)
+ basic_block from;
+{
+ basic_block bb;
+ basic_block *stack;
+ int stack_top;
+ sbitmap on_stack;
+ edge *edges, e;
+ unsigned n_edges, i;
+
+ if (!(from->flags & BB_IRREDUCIBLE_LOOP))
+ return;
+
+ on_stack = sbitmap_alloc (last_basic_block);
+ sbitmap_zero (on_stack);
+ SET_BIT (on_stack, from->index);
+ stack = xmalloc (from->loop_father->num_nodes * sizeof (basic_block));
+ stack[0] = from;
+ stack_top = 1;
+
+ while (stack_top)
+ {
+ bb = stack[--stack_top];
+ RESET_BIT (on_stack, bb->index);
+
+ for (e = bb->pred; e; e = e->pred_next)
+ if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ break;
+ if (e)
+ continue;
+
+ bb->flags &= ~BB_IRREDUCIBLE_LOOP;
+ if (bb->loop_father->header == bb)
+ edges = get_loop_exit_edges (bb->loop_father, &n_edges);
+ else
+ {
+ n_edges = 0;
+ for (e = bb->succ; e; e = e->succ_next)
+ n_edges++;
+ edges = xmalloc (n_edges * sizeof (edge));
+ n_edges = 0;
+ for (e = bb->succ; e; e = e->succ_next)
+ edges[n_edges++] = e;
+ }
+
+ for (i = 0; i < n_edges; i++)
+ if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ {
+ if (!flow_bb_inside_loop_p (from->loop_father, e->dest))
+ continue;
+
+ e->flags &= ~EDGE_IRREDUCIBLE_LOOP;
+ if (TEST_BIT (on_stack, e->dest->index))
+ continue;
+
+ SET_BIT (on_stack, e->dest->index);
+ stack[stack_top++] = e->dest;
+ }
+ free (edges);
+ }
+
+ free (on_stack);
+ free (stack);
+}
+
/* Removes path beginning at edge E, i.e. remove basic blocks dominated by E
and update loop structure stored in LOOPS and dominators. Return true if
we were able to remove the path, false otherwise (and nothing is affected
@@ -310,7 +372,26 @@ remove_path (loops, e)
int i, nrem, n_bord_bbs, n_dom_bbs;
sbitmap seen;
- /* First identify the path. */
+ if (!loop_delete_branch_edge (e, 0))
+ return false;
+
+ /* We need to check whether basic blocks are dominated by the edge
+ e, but we only have basic block dominators. This is easy to
+ fix -- when e->dest has exactly one predecessor, this corresponds
+ to blocks dominated by e->dest, if not, split the edge. */
+ if (e->dest->pred->pred_next)
+ e = loop_split_edge_with (e, NULL_RTX, loops)->pred;
+
+ /* It may happen that by removing path we remove one or more loops
+ we belong to. In this case first unloop the loops, then proceed
+ normally. We may assume that e->dest is not a header of any loop,
+ as it now has exactly one predecessor. */
+ while (e->src->loop_father->outer
+ && dominated_by_p (loops->cfg.dom,
+ e->src->loop_father->latch, e->dest))
+ unloop (loops, e->src->loop_father);
+
+ /* Identify the path. */
nrem = find_path (e, loops->cfg.dom, &rem_bbs);
n_bord_bbs = 0;
@@ -321,31 +402,21 @@ remove_path (loops, e)
/* Find "border" hexes -- i.e. those with predecessor in removed path. */
for (i = 0; i < nrem; i++)
SET_BIT (seen, rem_bbs[i]->index);
- if (nrem)
+ for (i = 0; i < nrem; i++)
{
- for (i = 0; i < nrem; i++)
- {
- bb = rem_bbs[i];
- for (ae = rem_bbs[i]->succ; ae; ae = ae->succ_next)
- if (ae->dest != EXIT_BLOCK_PTR && !TEST_BIT (seen, ae->dest->index))
- {
- SET_BIT (seen, ae->dest->index);
- bord_bbs[n_bord_bbs++] = ae->dest;
- }
- }
+ bb = rem_bbs[i];
+ for (ae = rem_bbs[i]->succ; ae; ae = ae->succ_next)
+ if (ae->dest != EXIT_BLOCK_PTR && !TEST_BIT (seen, ae->dest->index))
+ {
+ SET_BIT (seen, ae->dest->index);
+ bord_bbs[n_bord_bbs++] = ae->dest;
+ }
}
- else if (e->dest != EXIT_BLOCK_PTR)
- bord_bbs[n_bord_bbs++] = e->dest;
/* Remove the path. */
from = e->src;
- if (!loop_delete_branch_edge (e))
- {
- free (rem_bbs);
- free (bord_bbs);
- free (seen);
- return false;
- }
+ if (!loop_delete_branch_edge (e, 1))
+ abort ();
dom_bbs = xcalloc (n_basic_blocks, sizeof (basic_block));
/* Cancel loops contained in the path. */
@@ -356,7 +427,7 @@ remove_path (loops, e)
remove_bbs (loops->cfg.dom, rem_bbs, nrem);
free (rem_bbs);
- /* Find blocks with whose dominators may be affected. */
+ /* Find blocks whose dominators may be affected. */
n_dom_bbs = 0;
sbitmap_zero (seen);
for (i = 0; i < n_bord_bbs; i++)
@@ -376,13 +447,18 @@ remove_path (loops, e)
free(ldom);
}
- free (bord_bbs);
free (seen);
/* Recount dominators. */
iterate_fix_dominators (loops->cfg.dom, dom_bbs, n_dom_bbs);
free (dom_bbs);
+ /* These blocks have lost some predecessor(s), thus their irreducible
+ status could be changed. */
+ for (i = 0; i < n_bord_bbs; i++)
+ fix_irreducible_loops (bord_bbs[i]);
+ free (bord_bbs);
+
/* Fix placements of basic blocks inside loops and the placement of
loops in the loop tree. */
fix_bb_placements (loops, from);
@@ -557,6 +633,65 @@ loopify (loops, latch_edge, header_edge, switch_bb)
return loop;
}
+/* Remove the latch edge of a LOOP and update LOOPS tree to indicate that
+ the LOOP was removed. After this function, original loop latch will
+ have no successor, which caller is expected to fix somehow. */
+void
+unloop (loops, loop)
+ struct loops *loops;
+ struct loop *loop;
+{
+ basic_block *body;
+ struct loop *ploop;
+ unsigned i, n;
+ basic_block latch = loop->latch;
+ edge *edges;
+ unsigned n_edges;
+
+ /* This is relatively straigtforward. The dominators are unchanged, as
+ loop header dominates loop latch, so the only thing we have to care of
+ is the placement of loops and basic blocks inside the loop tree. We
+ move them all to the loop->outer, and then let fix_bb_placements do
+ its work. */
+
+ body = get_loop_body (loop);
+ edges = get_loop_exit_edges (loop, &n_edges);
+ n = loop->num_nodes;
+ for (i = 0; i < n; i++)
+ if (body[i]->loop_father == loop)
+ {
+ remove_bb_from_loops (body[i]);
+ add_bb_to_loop (body[i], loop->outer);
+ }
+ free(body);
+
+ while (loop->inner)
+ {
+ ploop = loop->inner;
+ flow_loop_tree_node_remove (ploop);
+ flow_loop_tree_node_add (loop->outer, ploop);
+ }
+
+ /* Remove the loop and free its data. */
+ flow_loop_tree_node_remove (loop);
+ loops->parray[loop->num] = NULL;
+ flow_loop_free (loop);
+
+ remove_edge (latch->succ);
+ fix_bb_placements (loops, latch);
+
+ /* If the loop was inside an irreducible region, we would have to somehow
+ update the irreducible marks inside its body. While it is certainly
+ possible to do, it is a bit complicated and this situation should be
+ very rare, so we just remark all loops in this case. */
+ for (i = 0; i < n_edges; i++)
+ if (edges[i]->flags & EDGE_IRREDUCIBLE_LOOP)
+ break;
+ if (i != n_edges)
+ mark_irreducible_loops (loops);
+ free (edges);
+}
+
/* Fix placement of LOOP inside loop tree, i.e. find the innermost superloop
FATHER of LOOP such that all of the edges comming out of LOOP belong to
FATHER, and set it as outer loop of LOOP. Return 1 if placement of
@@ -696,16 +831,21 @@ loop_redirect_edge (e, dest)
cfg_layout_redirect_edge (e, dest);
}
-/* Deletes edge E from a branch if possible. */
+/* Deletes edge E from a branch if possible. Unless REALLY_DELETE is set,
+ just test whether it is possible to remove the edge. */
static bool
-loop_delete_branch_edge (e)
+loop_delete_branch_edge (e, really_delete)
edge e;
+ int really_delete;
{
basic_block src = e->src;
+ int irr;
+ edge snd;
if (src->succ->succ_next)
{
basic_block newdest;
+
/* Cannot handle more than two exit edges. */
if (src->succ->succ_next->succ_next)
return false;
@@ -713,17 +853,29 @@ loop_delete_branch_edge (e)
if (!any_condjump_p (src->end))
return false;
- newdest = (e == src->succ
- ? src->succ->succ_next->dest : src->succ->dest);
+ snd = e == src->succ ? src->succ->succ_next : src->succ;
+ newdest = snd->dest;
if (newdest == EXIT_BLOCK_PTR)
return false;
- return cfg_layout_redirect_edge (e, newdest);
+ /* Hopefully the above conditions should suffice. */
+ if (!really_delete)
+ return true;
+
+ /* Redirecting behaves wrongly wrto this flag. */
+ irr = snd->flags & EDGE_IRREDUCIBLE_LOOP;
+
+ if (!cfg_layout_redirect_edge (e, newdest))
+ return false;
+ src->succ->flags &= ~EDGE_IRREDUCIBLE_LOOP;
+ src->succ->flags |= irr;
+
+ return true;
}
else
{
/* Cannot happen -- we are using this only to remove an edge
- from branch. */
+ from branch. */
abort ();
}
@@ -833,6 +985,11 @@ copy_bbs (bbs, n, entry, latch_edge, new_bbs, loops, header_edge, copy_header_ed
/* Leads to copied loop and it is not latch edge, redirect it. */
if (bb != header)
loop_redirect_edge (e, new_bb);
+
+ if (add_irreducible_flag
+ && (bb->loop_father == header->loop_father
+ || RBI (src)->original->loop_father == header->loop_father))
+ e->flags |= EDGE_IRREDUCIBLE_LOOP;
}
}
@@ -1005,7 +1162,7 @@ duplicate_loop_to_header_edge (loop, e, loops, ndupl, wont_exit, orig,
}
}
- add_irreducible_flag = !is_latch && (e->src->flags & BB_IRREDUCIBLE_LOOP);
+ add_irreducible_flag = !is_latch && (e->flags & EDGE_IRREDUCIBLE_LOOP);
/* Find edge from latch. */
latch_edge = loop_latch_edge (loop);
@@ -1254,7 +1411,7 @@ create_preheader (loop, dom, flags)
add_to_dominance_info (dom, fallthru->dest);
- /* Redirect edges. */
+ /* Redirect edges. */
for (e = dummy->pred; e; e = e->pred_next)
{
src = e->src;
@@ -1355,17 +1512,15 @@ loop_split_edge_with (e, insns, loops)
add_to_dominance_info (loops->cfg.dom, new_bb);
add_bb_to_loop (new_bb, loop_c);
new_bb->flags = insns ? BB_SUPERBLOCK : 0;
- if (src->flags & BB_IRREDUCIBLE_LOOP)
- {
- /* We expect simple preheaders here. */
- if ((dest->flags & BB_IRREDUCIBLE_LOOP)
- || dest->loop_father->header == dest)
- new_bb->flags |= BB_IRREDUCIBLE_LOOP;
- }
new_e = make_edge (new_bb, dest, EDGE_FALLTHRU);
new_e->probability = REG_BR_PROB_BASE;
new_e->count = e->count;
+ if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ {
+ new_bb->flags |= BB_IRREDUCIBLE_LOOP;
+ new_e->flags |= EDGE_IRREDUCIBLE_LOOP;
+ }
new_bb->count = e->count;
new_bb->frequency = EDGE_FREQUENCY (e);
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index b4b899d2b80..185676b9041 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -78,7 +78,7 @@ static void commit_one_edge_insertion PARAMS ((edge, int));
static bool try_redirect_by_replacing_jump PARAMS ((edge, basic_block));
static rtx last_loop_beg_note PARAMS ((rtx));
static bool back_edge_of_syntactic_loop_p PARAMS ((basic_block, basic_block));
-static basic_block force_nonfallthru_and_redirect PARAMS ((edge, basic_block));
+basic_block force_nonfallthru_and_redirect PARAMS ((edge, basic_block));
/* Return true if NOTE is not one of the ones that must be kept paired,
so that we may simply delete it. */
@@ -383,12 +383,7 @@ flow_delete_block_noexpunge (b)
/* Include any jump table following the basic block. */
end = b->end;
- if (GET_CODE (end) == JUMP_INSN
- && (tmp = JUMP_LABEL (end)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
+ if (tablejump_p (end, NULL, &tmp))
end = tmp;
/* Include any barrier that may follow the basic block. */
@@ -467,7 +462,8 @@ update_bb_for_insn (bb)
for (insn = bb->head; ; insn = NEXT_INSN (insn))
{
- set_block_for_insn (insn, bb);
+ if (GET_CODE (insn) != BARRIER)
+ set_block_for_insn (insn, bb);
if (insn == bb->end)
break;
}
@@ -674,7 +670,7 @@ try_redirect_by_replacing_jump (e, target)
basic_block src = e->src;
rtx insn = src->end, kill_from;
edge tmp;
- rtx set, table;
+ rtx set;
int fallthru = 0;
/* Verify that all targets will be TARGET. */
@@ -684,11 +680,7 @@ try_redirect_by_replacing_jump (e, target)
if (tmp || !onlyjump_p (insn))
return false;
- if (reload_completed && JUMP_LABEL (insn)
- && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX
- && GET_CODE (table) == JUMP_INSN
- && (GET_CODE (PATTERN (table)) == ADDR_VEC
- || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
+ if ((!optimize || flow2_completed) && tablejump_p (insn, NULL, NULL))
return false;
/* Avoid removing branch with side effects. */
@@ -739,7 +731,7 @@ try_redirect_by_replacing_jump (e, target)
else
{
rtx target_label = block_label (target);
- rtx barrier, tmp;
+ rtx barrier, label, table;
emit_jump_insn_after (gen_jump (target_label), insn);
JUMP_LABEL (src->end) = target_label;
@@ -754,14 +746,8 @@ try_redirect_by_replacing_jump (e, target)
/* Recognize a tablejump that we are converting to a
simple jump and remove its associated CODE_LABEL
and ADDR_VEC or ADDR_DIFF_VEC. */
- if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
- {
- delete_insn_chain (JUMP_LABEL (insn), tmp);
- }
+ if (tablejump_p (insn, &label, &table))
+ delete_insn_chain (label, table);
barrier = next_nonnote_insn (src->end);
if (!barrier || GET_CODE (barrier) != BARRIER)
@@ -854,11 +840,7 @@ redirect_edge_and_branch (e, target)
return false;
/* Recognize a tablejump and adjust all matching cases. */
- if ((tmp = JUMP_LABEL (insn)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
+ if (tablejump_p (insn, NULL, &tmp))
{
rtvec vec;
int j;
@@ -930,7 +912,7 @@ redirect_edge_and_branch (e, target)
/* Like force_nonfallthru below, but additionally performs redirection
Used by redirect_edge_and_branch_force. */
-static basic_block
+basic_block
force_nonfallthru_and_redirect (e, target)
edge e;
basic_block target;
@@ -940,6 +922,34 @@ force_nonfallthru_and_redirect (e, target)
edge new_edge;
int abnormal_edge_flags = 0;
+ /* In the case the last instruction is conditional jump to the next
+ instruction, first redirect the jump itself and then continue
+ by creating an basic block afterwards to redirect fallthru edge. */
+ if (e->src != ENTRY_BLOCK_PTR && e->dest != EXIT_BLOCK_PTR
+ && any_condjump_p (e->src->end)
+ && JUMP_LABEL (e->src->end) == e->dest->head)
+ {
+ rtx note;
+ edge b = make_edge (e->src, target, 0);
+
+ if (!redirect_jump (e->src->end, block_label (target), 0))
+ abort ();
+ note = find_reg_note (e->src->end, REG_BR_PROB, NULL_RTX);
+ if (note)
+ {
+ int prob = INTVAL (XEXP (note, 0));
+
+ b->probability = prob;
+ b->count = e->count * prob / REG_BR_PROB_BASE;
+ e->probability -= e->probability;
+ e->count -= b->count;
+ if (e->probability < 0)
+ e->probability = 0;
+ if (e->count < 0)
+ e->count = 0;
+ }
+ }
+
if (e->flags & EDGE_ABNORMAL)
{
/* Irritating special case - fallthru edge to the same block as abnormal
@@ -1594,11 +1604,13 @@ debug_bb (bb)
dump_bb (bb, stderr);
}
-void
+basic_block
debug_bb_n (n)
int n;
{
- dump_bb (BASIC_BLOCK (n), stderr);
+ basic_block bb = BASIC_BLOCK (n);
+ dump_bb (bb, stderr);
+ return bb;
}
/* Like print_rtl, but also print out live information for the start of each
@@ -1866,7 +1878,7 @@ verify_flow_info ()
if (e->flags & EDGE_FALLTHRU)
n_fallthru++;
- if ((e->flags & ~(EDGE_EXECUTABLE | EDGE_DFS_BACK | EDGE_CAN_FALLTHRU)) == 0)
+ if ((e->flags & ~(EDGE_DFS_BACK | EDGE_CAN_FALLTHRU | EDGE_IRREDUCIBLE_LOOP)) == 0)
n_branch++;
if (e->flags & EDGE_ABNORMAL_CALL)
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 7df18f14891..fd638bc14fb 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -33,6 +33,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "debug.h"
#include "target.h"
#include "cgraph.h"
+#include "varray.h"
+
+/* The known declarations must not get garbage collected. Callgraph
+ datastructures should not get saved via PCH code since this would
+ make it difficult to extend into intra-module optimizer later. So
+ we store only the references into the array to prevent gabrage
+ collector from deleting live data. */
+static GTY(()) varray_type known_fns;
/* Hash table used to convert declarations into nodes. */
static htab_t cgraph_hash = 0;
@@ -43,9 +51,12 @@ struct cgraph_node *cgraph_nodes;
/* Number of nodes in existence. */
int cgraph_n_nodes;
+/* Set when whole unit has been analyzed so we can access global info. */
+bool cgraph_global_info_ready = false;
+
static struct cgraph_edge *create_edge PARAMS ((struct cgraph_node *,
struct cgraph_node *));
-static void remove_edge PARAMS ((struct cgraph_node *, struct cgraph_node *));
+static void cgraph_remove_edge PARAMS ((struct cgraph_node *, struct cgraph_node *));
static hashval_t hash_node PARAMS ((const PTR));
static int eq_node PARAMS ((const PTR, const PTR));
@@ -79,8 +90,14 @@ cgraph_node (decl)
struct cgraph_node *node;
struct cgraph_node **slot;
+ if (TREE_CODE (decl) != FUNCTION_DECL)
+ abort ();
+
if (!cgraph_hash)
- cgraph_hash = htab_create (10, hash_node, eq_node, NULL);
+ {
+ cgraph_hash = htab_create (10, hash_node, eq_node, NULL);
+ VARRAY_TREE_INIT (known_fns, 32, "known_fns");
+ }
slot =
(struct cgraph_node **) htab_find_slot_with_hash (cgraph_hash, decl,
@@ -92,15 +109,19 @@ cgraph_node (decl)
node = xcalloc (sizeof (*node), 1);
node->decl = decl;
node->next = cgraph_nodes;
+ if (cgraph_nodes)
+ cgraph_nodes->previous = node;
+ node->previous = NULL;
cgraph_nodes = node;
cgraph_n_nodes++;
*slot = node;
- if (DECL_CONTEXT (decl))
+ if (DECL_CONTEXT (decl) && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
{
node->origin = cgraph_node (DECL_CONTEXT (decl));
node->next_nested = node->origin->nested;
node->origin->nested = node;
}
+ VARRAY_PUSH_TREE (known_fns, decl);
return node;
}
@@ -124,7 +145,7 @@ create_edge (caller, callee)
/* Remove the edge from CALLER to CALLEE in the cgraph. */
static void
-remove_edge (caller, callee)
+cgraph_remove_edge (caller, callee)
struct cgraph_node *caller, *callee;
{
struct cgraph_edge **edge, **edge2;
@@ -143,6 +164,37 @@ remove_edge (caller, callee)
*edge2 = (*edge2)->next_callee;
}
+/* Remove the node from cgraph. */
+
+void
+cgraph_remove_node (node)
+ struct cgraph_node *node;
+{
+ while (node->callers)
+ cgraph_remove_edge (node->callers->caller, node);
+ while (node->callees)
+ cgraph_remove_edge (node, node->callees->callee);
+ while (node->nested)
+ cgraph_remove_node (node->nested);
+ if (node->origin)
+ {
+ struct cgraph_node **node2 = &node->origin->nested;
+
+ while (*node2 != node)
+ node2 = &(*node2)->next_nested;
+ *node2 = node->next_nested;
+ }
+ if (node->previous)
+ node->previous->next = node->next;
+ else
+ cgraph_nodes = node;
+ if (node->next)
+ node->next->previous = node->previous;
+ DECL_SAVED_TREE (node->decl) = NULL;
+ /* Do not free the structure itself so the walk over chain can continue. */
+}
+
+
/* Record call from CALLER to CALLEE */
struct cgraph_edge *
@@ -156,7 +208,7 @@ void
cgraph_remove_call (caller, callee)
tree caller, callee;
{
- remove_edge (cgraph_node (caller), cgraph_node (callee));
+ cgraph_remove_edge (cgraph_node (caller), cgraph_node (callee));
}
/* Return true when CALLER_DECL calls CALLEE_DECL. */
@@ -175,6 +227,49 @@ cgraph_calls_p (caller_decl, callee_decl)
return edge != NULL;
}
+/* Return local info for the compiled function. */
+
+struct cgraph_local_info *
+cgraph_local_info (decl)
+ tree decl;
+{
+ struct cgraph_node *node;
+ if (TREE_CODE (decl) != FUNCTION_DECL)
+ abort ();
+ node = cgraph_node (decl);
+ return &node->local;
+}
+
+/* Return local info for the compiled function. */
+
+struct cgraph_global_info *
+cgraph_global_info (decl)
+ tree decl;
+{
+ struct cgraph_node *node;
+ if (TREE_CODE (decl) != FUNCTION_DECL || !cgraph_global_info_ready)
+ abort ();
+ node = cgraph_node (decl);
+ return &node->global;
+}
+
+/* Return local info for the compiled function. */
+
+struct cgraph_rtl_info *
+cgraph_rtl_info (decl)
+ tree decl;
+{
+ struct cgraph_node *node;
+ if (TREE_CODE (decl) != FUNCTION_DECL)
+ abort ();
+ node = cgraph_node (decl);
+ if (decl != current_function_decl
+ && !TREE_ASM_WRITTEN (node->decl))
+ return NULL;
+ return &node->rtl;
+}
+
+
/* Dump the callgraph. */
void
@@ -210,3 +305,5 @@ dump_cgraph (f)
fprintf (f, "\n");
}
}
+
+#include "gt-cgraph.h"
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 8dd37ed9e32..b785e172665 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -22,6 +22,40 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_CGRAPH_H
#define GCC_CGRAPH_H
+/* Information about the function collected locally.
+ Available after function is lowered */
+
+struct cgraph_local_info
+{
+ /* Set when function function is visiable in current compilation unit only
+ and it's address is never taken. */
+ bool local;
+ /* Set when function is small enought to be inlinable many times. */
+ bool inline_many;
+ /* Set when function can be inlined once (false only for functions calling
+ alloca, using varargs and so on). */
+ bool can_inline_once;
+};
+
+/* Information about the function that needs to be computed globally
+ once compilation is finished. Available only with -funit-at-time. */
+
+struct cgraph_global_info
+{
+ /* Set when the function will be inlined exactly once. */
+ bool inline_once;
+};
+
+/* Information about the function that is propagated by the RTL backend.
+ Available only for functions that has been already assembled. */
+
+struct cgraph_rtl_info
+{
+ bool const_function, pure_function;
+ int preferred_incoming_stack_boundary;
+};
+
+
/* The cgraph data strutcture.
Each function decl has assigned cgraph_node listing calees and callers. */
@@ -30,7 +64,7 @@ struct cgraph_node
tree decl;
struct cgraph_edge *callees;
struct cgraph_edge *callers;
- struct cgraph_node *next;
+ struct cgraph_node *next, *previous;
/* For nested functions points to function the node is nested in. */
struct cgraph_node *origin;
/* Points to first nested function, if any. */
@@ -51,6 +85,9 @@ struct cgraph_node
bool lowered;
/* Set when function is scheduled to be assembled. */
bool output;
+ struct cgraph_local_info local;
+ struct cgraph_global_info global;
+ struct cgraph_rtl_info rtl;
};
struct cgraph_edge
@@ -62,13 +99,18 @@ struct cgraph_edge
extern struct cgraph_node *cgraph_nodes;
extern int cgraph_n_nodes;
+extern bool cgraph_global_info_ready;
/* In cgraph.c */
void dump_cgraph PARAMS ((FILE *));
void cgraph_remove_call PARAMS ((tree, tree));
+void cgraph_remove_node PARAMS ((struct cgraph_node *));
struct cgraph_edge *cgraph_record_call PARAMS ((tree, tree));
struct cgraph_node *cgraph_node PARAMS ((tree decl));
bool cgraph_calls_p PARAMS ((tree, tree));
+struct cgraph_local_info *cgraph_local_info PARAMS ((tree));
+struct cgraph_global_info *cgraph_global_info PARAMS ((tree));
+struct cgraph_rtl_info *cgraph_rtl_info PARAMS ((tree));
/* In cgraphunit.c */
void cgraph_finalize_function PARAMS ((tree, tree));
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 0a12ddad856..a1c20ee387b 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -33,11 +33,15 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "debug.h"
#include "target.h"
#include "cgraph.h"
+#include "diagnostic.h"
static void cgraph_expand_functions PARAMS ((void));
static void cgraph_mark_functions_to_output PARAMS ((void));
static void cgraph_expand_function PARAMS ((struct cgraph_node *));
static tree record_call_1 PARAMS ((tree *, int *, void *));
+static void cgraph_mark_local_functions PARAMS ((void));
+static void cgraph_mark_functions_to_inline_once PARAMS ((void));
+static void cgraph_optimize_function PARAMS ((struct cgraph_node *));
/* Analyze function once it is parsed. Set up the local information
available - create cgraph edges for function calles via BODY. */
@@ -51,8 +55,11 @@ cgraph_finalize_function (decl, body)
node->decl = decl;
- /* Set TREE_UNINLINABLE flag. */
- tree_inlinable_function_p (decl);
+ node->local.can_inline_once = tree_inlinable_function_p (decl, 1);
+ if (flag_inline_trees)
+ node->local.inline_many = tree_inlinable_function_p (decl, 0);
+ else
+ node->local.inline_many = 0;
(*debug_hooks->deferred_inline_function) (decl);
}
@@ -196,7 +203,7 @@ cgraph_finalize_compilation_unit ()
if (!node->reachable && DECL_SAVED_TREE (decl))
{
- DECL_SAVED_TREE (decl) = NULL;
+ cgraph_remove_node (node);
announce_function (decl);
}
}
@@ -217,7 +224,8 @@ cgraph_mark_functions_to_output ()
if (DECL_SAVED_TREE (decl)
&& (node->needed
- || (DECL_UNINLINABLE (decl) && node->reachable)
+ || (!node->local.inline_many && !node->global.inline_once
+ && node->reachable)
|| TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
&& !TREE_ASM_WRITTEN (decl) && !node->origin
&& !DECL_EXTERNAL (decl))
@@ -225,6 +233,22 @@ cgraph_mark_functions_to_output ()
}
}
+/* Optimize the function before expansion. */
+static void
+cgraph_optimize_function (node)
+ struct cgraph_node *node;
+{
+ tree decl = node->decl;
+
+ if (flag_inline_trees)
+ optimize_inline_calls (decl);
+ if (node->nested)
+ {
+ for (node = node->nested; node; node = node->next_nested)
+ cgraph_optimize_function (node);
+ }
+}
+
/* Expand function specified by NODE. */
static void
cgraph_expand_function (node)
@@ -233,10 +257,18 @@ cgraph_expand_function (node)
tree decl = node->decl;
announce_function (decl);
- if (flag_inline_trees)
- optimize_inline_calls (decl);
+
+ cgraph_optimize_function (node);
+
+ /* Avoid RTL inlining from taking place. */
(*lang_hooks.callgraph.expand_function) (decl);
- if (DECL_UNINLINABLE (decl))
+
+ /* When we decided to inline the function once, we never ever should need to
+ output it separately. */
+ if (node->global.inline_once)
+ abort ();
+ if (!node->local.inline_many
+ || !node->callers)
DECL_SAVED_TREE (decl) = NULL;
current_function_decl = NULL;
}
@@ -310,7 +342,7 @@ cgraph_expand_functions ()
}
}
}
- for (i = order_pos - 1; i >=0; i--)
+ for (i = order_pos - 1; i >= 0; i--)
{
node = order[i];
if (node->output)
@@ -325,6 +357,67 @@ cgraph_expand_functions ()
free (order);
}
+/* Mark all local functions.
+ We can not use node->needed directly as it is modified during
+ execution of cgraph_optimize. */
+
+static void
+cgraph_mark_local_functions ()
+{
+ struct cgraph_node *node;
+
+ if (!quiet_flag)
+ fprintf (stderr, "\n\nMarking local functions:");
+
+ /* Figure out functions we want to assemble. */
+ for (node = cgraph_nodes; node; node = node->next)
+ {
+ node->local.local = (!node->needed
+ && DECL_SAVED_TREE (node->decl)
+ && !TREE_PUBLIC (node->decl));
+ if (node->local.local)
+ announce_function (node->decl);
+ }
+}
+
+/* Decide what function should be inlined because they are invoked once
+ (so inlining won't result in duplication of the code). */
+
+static void
+cgraph_mark_functions_to_inline_once ()
+{
+ struct cgraph_node *node, *node1;
+
+ if (!quiet_flag)
+ fprintf (stderr, "\n\nMarking functions to inline once:");
+
+ /* Now look for function called only once and mark them to inline. From this
+ point number of calls to given function won't grow. */
+ for (node = cgraph_nodes; node; node = node->next)
+ {
+ if (node->callers && !node->callers->next_caller && !node->needed
+ && node->local.can_inline_once)
+ {
+ bool ok = true;
+
+ /* Verify that we won't duplicate the caller. */
+ for (node1 = node->callers->caller;
+ node1->local.inline_many
+ && node1->callers
+ && ok;
+ node1 = node1->callers->caller)
+ if (node1->callers->next_caller || node1->needed)
+ ok = false;
+ if (ok)
+ {
+ node->global.inline_once = true;
+ announce_function (node->decl);
+ }
+ }
+ }
+}
+
+
/* Perform simple optimizations based on callgraph. */
void
@@ -332,8 +425,12 @@ cgraph_optimize ()
{
struct cgraph_node *node;
bool changed = true;
- struct cgraph_edge *edge;
+ cgraph_mark_local_functions ();
+
+ cgraph_mark_functions_to_inline_once ();
+
+ cgraph_global_info_ready = true;
if (!quiet_flag)
fprintf (stderr, "\n\nAssembling functions:");
@@ -343,18 +440,29 @@ cgraph_optimize ()
Later we should move all inlining decisions to callgraph code to make
this impossible. */
cgraph_expand_functions ();
- while (changed)
+ if (!quiet_flag)
+ fprintf (stderr, "\n\nAssembling functions that failed to inline:");
+ while (changed && !errorcount && !sorrycount)
{
changed = false;
for (node = cgraph_nodes; node; node = node->next)
{
- if (!node->needed)
- continue;
-
- for (edge = node->callees; edge; edge = edge->next_callee)
- if (!edge->callee->needed)
- changed = edge->callee->needed = true;
+ tree decl = node->decl;
+ if (!node->origin
+ && !TREE_ASM_WRITTEN (decl)
+ && DECL_SAVED_TREE (decl)
+ && !DECL_EXTERNAL (decl))
+ {
+ struct cgraph_edge *edge;
+
+ for (edge = node->callers; edge; edge = edge->next_caller)
+ if (TREE_ASM_WRITTEN (edge->caller->decl))
+ {
+ changed = true;
+ cgraph_expand_function (node);
+ break;
+ }
+ }
}
}
- cgraph_expand_functions ();
}
diff --git a/gcc/collect2.c b/gcc/collect2.c
index af97c2091f9..ca1fe92b1e2 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -1508,7 +1508,7 @@ collect_wait (prog)
int sig = WTERMSIG (status);
error ("%s terminated with signal %d [%s]%s",
prog, sig, strsignal(sig),
- status & 0200 ? "" : ", core dumped");
+ WCOREDUMP(status) ? ", core dumped" : "");
collect_exit (FATAL_EXIT_CODE);
}
diff --git a/gcc/combine.c b/gcc/combine.c
index 43d77219e58..ed98db217eb 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1065,8 +1065,6 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
/* Don't eliminate a store in the stack pointer. */
if (dest == stack_pointer_rtx
- /* If we couldn't eliminate a field assignment, we can't combine. */
- || GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == STRICT_LOW_PART
/* Don't combine with an insn that sets a register to itself if it has
a REG_EQUAL note. This may be part of a REG_NO_CONFLICT sequence. */
|| (rtx_equal_p (src, dest) && find_reg_note (insn, REG_EQUAL, NULL_RTX))
@@ -1319,46 +1317,16 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed)
if (GET_CODE (x) == SET)
{
- rtx set = expand_field_assignment (x);
+ rtx set = x ;
rtx dest = SET_DEST (set);
rtx src = SET_SRC (set);
rtx inner_dest = dest;
-#if 0
- rtx inner_src = src;
-#endif
-
- SUBST (*loc, set);
-
while (GET_CODE (inner_dest) == STRICT_LOW_PART
|| GET_CODE (inner_dest) == SUBREG
|| GET_CODE (inner_dest) == ZERO_EXTRACT)
inner_dest = XEXP (inner_dest, 0);
- /* We probably don't need this any more now that LIMIT_RELOAD_CLASS
- was added. */
-#if 0
- while (GET_CODE (inner_src) == STRICT_LOW_PART
- || GET_CODE (inner_src) == SUBREG
- || GET_CODE (inner_src) == ZERO_EXTRACT)
- inner_src = XEXP (inner_src, 0);
-
- /* If it is better that two different modes keep two different pseudos,
- avoid combining them. This avoids producing the following pattern
- on a 386:
- (set (subreg:SI (reg/v:QI 21) 0)
- (lshiftrt:SI (reg/v:SI 20)
- (const_int 24)))
- If that were made, reload could not handle the pair of
- reg 20/21, since it would try to get any GENERAL_REGS
- but some of them don't handle QImode. */
-
- if (rtx_equal_p (inner_src, i2dest)
- && GET_CODE (inner_dest) == REG
- && ! MODES_TIEABLE_P (GET_MODE (i2dest), GET_MODE (inner_dest)))
- return 0;
-#endif
-
/* Check for the case where I3 modifies its output, as
discussed above. */
if ((inner_dest != dest
@@ -1689,7 +1657,7 @@ try_combine (i3, i2, i1, new_direct_jump_p)
abort ();
lo &= ~(UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD (1) - 1);
- lo |= (INTVAL (SET_SRC (PATTERN (i3)))
+ lo |= (INTVAL (SET_SRC (PATTERN (i3)))
& (UWIDE_SHIFT_LEFT_BY_BITS_PER_WORD (1) - 1));
}
else if (HOST_BITS_PER_WIDE_INT == BITS_PER_WORD)
@@ -2856,7 +2824,7 @@ try_combine (i3, i2, i1, new_direct_jump_p)
|| GET_CODE (temp) != BARRIER)
emit_barrier_after (undobuf.other_insn);
}
-
+
/* An NOOP jump does not need barrier, but it does need cleaning up
of CFG. */
if (GET_CODE (newpat) == SET
@@ -3728,9 +3696,6 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
{
enum rtx_code reversed;
- /* [GIMPLE] Avoid uninitialized use warning. */
- reversed = UNKNOWN;
-
/* Restarting if we generate a store-flag expression will cause
us to loop. Just drop through in this case. */
@@ -4047,7 +4012,7 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
return gen_binary (MINUS, mode, temp, XEXP (XEXP (x, 0), 1));
}
- /* (neg (mult A B)) becomes (mult (neg A) B).
+ /* (neg (mult A B)) becomes (mult (neg A) B).
This works even for floating-point values. */
if (GET_CODE (XEXP (x, 0)) == MULT)
{
@@ -4188,15 +4153,15 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
&& GET_MODE (XEXP (XEXP (x, 0), 0)) == mode)
return XEXP (XEXP (x, 0), 0);
- /* (float_truncate:SF (float_truncate:DF foo:XF))
- = (float_truncate:SF foo:XF).
+ /* (float_truncate:SF (float_truncate:DF foo:XF))
+ = (float_truncate:SF foo:XF).
This may elliminate double rounding, so it is unsafe.
- (float_truncate:SF (float_extend:XF foo:DF))
- = (float_truncate:SF foo:DF).
+ (float_truncate:SF (float_extend:XF foo:DF))
+ = (float_truncate:SF foo:DF).
- (float_truncate:DF (float_extend:XF foo:SF))
- = (float_extend:SF foo:DF). */
+ (float_truncate:DF (float_extend:XF foo:SF))
+ = (float_extend:SF foo:DF). */
if ((GET_CODE (XEXP (x, 0)) == FLOAT_TRUNCATE
&& flag_unsafe_math_optimizations)
|| GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND)
@@ -4236,9 +4201,9 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
break;
case FLOAT_EXTEND:
/* (float_extend (float_extend x)) is (float_extend x)
-
+
(float_extend (float x)) is (float x) assuming that double
- rounding can't happen.
+ rounding can't happen.
*/
if (GET_CODE (XEXP (x, 0)) == FLOAT_EXTEND
|| (GET_CODE (XEXP (x, 0)) == FLOAT
@@ -4291,11 +4256,11 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
case PLUS:
/* Canonicalize (plus (mult (neg B) C) A) to (minus A (mult B C)).
*/
- if (GET_CODE (XEXP (x, 0)) == MULT
+ if (GET_CODE (XEXP (x, 0)) == MULT
&& GET_CODE (XEXP (XEXP (x, 0), 0)) == NEG)
{
rtx in1, in2;
-
+
in1 = XEXP (XEXP (XEXP (x, 0), 0), 0);
in2 = XEXP (XEXP (x, 0), 1);
return gen_binary (MINUS, mode, XEXP (x, 1),
@@ -4410,24 +4375,24 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
/* Canonicalize (minus A (mult (neg B) C)) to (plus (mult B C) A).
*/
- if (GET_CODE (XEXP (x, 1)) == MULT
+ if (GET_CODE (XEXP (x, 1)) == MULT
&& GET_CODE (XEXP (XEXP (x, 1), 0)) == NEG)
{
rtx in1, in2;
-
+
in1 = XEXP (XEXP (XEXP (x, 1), 0), 0);
in2 = XEXP (XEXP (x, 1), 1);
return gen_binary (PLUS, mode, gen_binary (MULT, mode, in1, in2),
XEXP (x, 0));
}
- /* Canonicalize (minus (neg A) (mult B C)) to
+ /* Canonicalize (minus (neg A) (mult B C)) to
(minus (mult (neg B) C) A). */
- if (GET_CODE (XEXP (x, 1)) == MULT
+ if (GET_CODE (XEXP (x, 1)) == MULT
&& GET_CODE (XEXP (x, 0)) == NEG)
{
rtx in1, in2;
-
+
in1 = simplify_gen_unary (NEG, mode, XEXP (XEXP (x, 1), 0), mode);
in2 = XEXP (XEXP (x, 1), 1);
return gen_binary (MINUS, mode, gen_binary (MULT, mode, in1, in2),
@@ -4972,7 +4937,9 @@ simplify_if_then_else (x)
neither 1 or -1, but it isn't worth checking for. */
if ((STORE_FLAG_VALUE == 1 || STORE_FLAG_VALUE == -1)
- && comparison_p && mode != VOIDmode && ! side_effects_p (x))
+ && comparison_p
+ && GET_MODE_CLASS (mode) == MODE_INT
+ && ! side_effects_p (x))
{
rtx t = make_compound_operation (true_rtx, SET);
rtx f = make_compound_operation (false_rtx, SET);
@@ -5314,7 +5281,7 @@ simplify_set (x)
#ifdef CANNOT_CHANGE_MODE_CLASS
&& ! (GET_CODE (dest) == REG && REGNO (dest) < FIRST_PSEUDO_REGISTER
&& REG_CANNOT_CHANGE_MODE_P (REGNO (dest),
- GET_MODE (SUBREG_REG (src)),
+ GET_MODE (SUBREG_REG (src)),
GET_MODE (src)))
#endif
&& (GET_CODE (dest) == REG
@@ -6576,8 +6543,6 @@ make_compound_operation (x, in_code)
rtx tem;
const char *fmt;
- i = 0; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* Select the code to be used in recursive calls. Once we are inside an
address, we stay there. If we have a comparison, set to COMPARE,
but once inside, go back to our default of SET. */
@@ -7363,7 +7328,8 @@ force_to_mode (x, mode, mask, reg, just_select)
< GET_MODE_BITSIZE (GET_MODE (x)))
&& INTVAL (XEXP (XEXP (x, 0), 1)) < HOST_BITS_PER_WIDE_INT)
{
- temp = GEN_INT (mask << INTVAL (XEXP (XEXP (x, 0), 1)));
+ temp = gen_int_mode (mask << INTVAL (XEXP (XEXP (x, 0), 1)),
+ GET_MODE (x));
temp = gen_binary (XOR, GET_MODE (x), XEXP (XEXP (x, 0), 0), temp);
x = gen_binary (LSHIFTRT, GET_MODE (x), temp, XEXP (XEXP (x, 0), 1));
@@ -7927,6 +7893,17 @@ make_field_assignment (x)
: ((unsigned HOST_WIDE_INT) 1 << len) - 1,
dest, 0);
+ /* If SRC is masked by an AND that does not make a difference in
+ the value being stored, strip it. */
+ if (GET_CODE (assign) == ZERO_EXTRACT
+ && GET_CODE (XEXP (assign, 1)) == CONST_INT
+ && INTVAL (XEXP (assign, 1)) < HOST_BITS_PER_WIDE_INT
+ && GET_CODE (src) == AND
+ && GET_CODE (XEXP (src, 1)) == CONST_INT
+ && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (src, 1))
+ == ((unsigned HOST_WIDE_INT) 1 << INTVAL (XEXP (assign, 1))) - 1))
+ src = XEXP (src, 0);
+
return gen_rtx_SET (VOIDmode, assign, src);
}
@@ -9254,7 +9231,7 @@ merge_outer_ops (pop0, pconst0, op1, const1, mode, pcomp_p)
op0 = AND, *pcomp_p = 1;
else /* op1 == IOR */
/* (a | b) ^ b == a & ~b */
- op0 = AND, *pconst0 = ~const0;
+ op0 = AND, const0 = ~const0;
break;
case AND:
@@ -11131,49 +11108,45 @@ simplify_comparison (code, pop0, pop1)
continue;
}
- /* If this is (and:M1 (subreg:M2 X 0) (const_int C1)) where C1 fits
- in both M1 and M2 and the SUBREG is either paradoxical or
- represents the low part, permute the SUBREG and the AND and
- try again. */
- if (GET_CODE (XEXP (op0, 0)) == SUBREG
+ /* If this is (and:M1 (subreg:M2 X 0) (const_int C1)) where C1
+ fits in both M1 and M2 and the SUBREG is either paradoxical
+ or represents the low part, permute the SUBREG and the AND
+ and try again. */
+ if (GET_CODE (XEXP (op0, 0)) == SUBREG)
+ {
+ unsigned HOST_WIDE_INT c1;
+ tmode = GET_MODE (SUBREG_REG (XEXP (op0, 0)));
/* Require an integral mode, to avoid creating something like
(AND:SF ...). */
- && SCALAR_INT_MODE_P (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
- /* It is unsafe to commute the AND into the SUBREG if the SUBREG
- is paradoxical and WORD_REGISTER_OPERATIONS is not defined.
- As originally written the upper bits have a defined value
- due to the AND operation. However, if we commute the AND
- inside the SUBREG then they no longer have defined values
- and the meaning of the code has been changed. */
- && (0
+ if (SCALAR_INT_MODE_P (tmode)
+ /* It is unsafe to commute the AND into the SUBREG if the
+ SUBREG is paradoxical and WORD_REGISTER_OPERATIONS is
+ not defined. As originally written the upper bits
+ have a defined value due to the AND operation.
+ However, if we commute the AND inside the SUBREG then
+ they no longer have defined values and the meaning of
+ the code has been changed. */
+ && (0
#ifdef WORD_REGISTER_OPERATIONS
- || ((mode_width
- > (GET_MODE_BITSIZE
- (GET_MODE (SUBREG_REG (XEXP (op0, 0))))))
- && mode_width <= BITS_PER_WORD)
+ || (mode_width > GET_MODE_BITSIZE (tmode)
+ && mode_width <= BITS_PER_WORD)
#endif
- || ((mode_width
- <= (GET_MODE_BITSIZE
- (GET_MODE (SUBREG_REG (XEXP (op0, 0))))))
- && subreg_lowpart_p (XEXP (op0, 0))))
- && GET_CODE (XEXP (op0, 1)) == CONST_INT
- && mode_width <= HOST_BITS_PER_WIDE_INT
- && (GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
- <= HOST_BITS_PER_WIDE_INT)
- && (INTVAL (XEXP (op0, 1)) & ~mask) == 0
- && 0 == (~GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0))))
- & INTVAL (XEXP (op0, 1)))
- && (unsigned HOST_WIDE_INT) INTVAL (XEXP (op0, 1)) != mask
- && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op0, 1))
- != GET_MODE_MASK (GET_MODE (SUBREG_REG (XEXP (op0, 0))))))
-
- {
- op0
- = gen_lowpart_for_combine
- (mode,
- gen_binary (AND, GET_MODE (SUBREG_REG (XEXP (op0, 0))),
- SUBREG_REG (XEXP (op0, 0)), XEXP (op0, 1)));
- continue;
+ || (mode_width <= GET_MODE_BITSIZE (tmode)
+ && subreg_lowpart_p (XEXP (op0, 0))))
+ && GET_CODE (XEXP (op0, 1)) == CONST_INT
+ && mode_width <= HOST_BITS_PER_WIDE_INT
+ && GET_MODE_BITSIZE (tmode) <= HOST_BITS_PER_WIDE_INT
+ && ((c1 = INTVAL (XEXP (op0, 1))) & ~mask) == 0
+ && (c1 & ~GET_MODE_MASK (tmode)) == 0
+ && c1 != mask
+ && c1 != GET_MODE_MASK (tmode))
+ {
+ op0 = gen_binary (AND, tmode,
+ SUBREG_REG (XEXP (op0, 0)),
+ gen_int_mode (c1, tmode));
+ op0 = gen_lowpart_for_combine (mode, op0);
+ continue;
+ }
}
/* Convert (ne (and (lshiftrt (not X)) 1) 0) to
@@ -11589,7 +11562,7 @@ update_table_tick (x)
break;
}
}
-
+
update_table_tick (XEXP (x, i));
}
}
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a15ad8b6e46..950a3cd90cb 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -347,7 +347,6 @@ esac
# Common parts for widely ported systems.
case $machine in
*-*-linux*)
- xm_defines=POSIX
case $machine in
*-*-linux*ecoff* | *-*-linux*libc1* | *-*-linux*oldld* | *-*-linux*aout*)
;;
@@ -365,7 +364,6 @@ case $machine in
# On the Hurd, the setup is just about the same on
# each different CPU. The specific machines that we
# support are matched above and just set $cpu_type.
- xm_defines=POSIX
tm_file="${cpu_type}/gnu.h"
extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o"
# GNU always uses ELF.
@@ -388,7 +386,6 @@ case $machine in
*-*-openbsd*)
tm_file=${cpu_type}/openbsd.h
tmake_file="t-libc-ok t-openbsd t-libgcc-pic"
- xm_defines=POSIX
if test x$enable_threads = xyes; then
thread_file='posix'
tmake_file="${tmake_file} t-openbsd-thread"
@@ -396,7 +393,6 @@ case $machine in
;;
*-*-netbsd*)
tmake_file="t-slibgcc-elf-ver t-libc-ok t-netbsd"
- xm_defines=POSIX
gas=yes
gnu_ld=yes
@@ -463,7 +459,6 @@ case $machine in
esac
tmake_file="t-slibgcc-elf-ver t-freebsd"
xmake_file=none
- xm_defines=POSIX
case x${enable_threads} in
xno) fbsd_tm_file="${fbsd_tm_file} freebsd-nthr.h";;
x | xyes | xpthreads | xposix)
@@ -497,7 +492,6 @@ case $machine in
tm_file="${tm_file} elfos.h svr4.h vxworks.h"
thread_file='vxworks'
use_collect2=yes
- xm_defines=POSIX
;;
esac
@@ -533,7 +527,6 @@ alpha-*-interix)
# GAS + IEEE_CONFORMANT
target_cpu_default="MASK_GAS|MASK_IEEE_CONFORMANT"
- xm_defines=POSIX
tmake_file="alpha/t-alpha t-interix alpha/t-interix alpha/t-ieee"
if test x$enable_threads = xyes ; then
thread_file='posix'
@@ -587,7 +580,6 @@ alpha*-*-openbsd*)
;;
alpha*-dec-osf[45]*)
- xm_defines=POSIX
if test x$stabs = xyes
then
tm_file="${tm_file} dbx.h"
@@ -618,7 +610,6 @@ alpha*-dec-osf[45]*)
esac
;;
alpha64-dec-*vms*)
- xm_defines=POSIX
tm_file="${tm_file} alpha/vms.h alpha/vms64.h"
xm_file="alpha/xm-vms.h"
tmake_file="alpha/t-alpha alpha/t-vms alpha/t-vms64 alpha/t-ieee"
@@ -636,7 +627,6 @@ alpha64-dec-*vms*)
local_prefix=/gnu
;;
alpha*-dec-*vms*)
- xm_defines=POSIX
tm_file="${tm_file} alpha/vms.h"
xm_file=alpha/xm-vms.h
tmake_file="alpha/t-alpha alpha/t-vms alpha/t-ieee"
@@ -707,7 +697,6 @@ arm*-*-ecos-elf)
tmake_file=arm/t-arm-elf
;;
arm*-*-rtems*)
- xm_defines=POSIX
tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h"
tmake_file="arm/t-arm-elf t-rtems"
if test x$enable_threads = xyes; then
@@ -734,7 +723,6 @@ arm-*-pe*)
avr-*-*)
;;
c4x-*-rtems* | tic4x-*-rtems*)
- xm_defines=POSIX
tmake_file="c4x/t-c4x t-rtems"
tm_file="c4x/c4x.h c4x/rtems.h rtems.h"
if test x$enable_threads = xyes; then
@@ -777,7 +765,6 @@ frv-*-elf)
tmake_file=frv/t-frv
;;
h8300-*-rtems*)
- xm_defines=POSIX
tmake_file="h8300/t-h8300 t-rtems"
tm_file="h8300/h8300.h h8300/rtems.h rtems.h"
if test x$enable_threads = xyes; then
@@ -822,7 +809,6 @@ hppa1.1-*-osf*)
use_collect2=yes
;;
hppa1.1-*-rtems*)
- xm_defines=POSIX
target_cpu_default="(MASK_JUMP_IN_DELAY | MASK_PORTABLE_RUNTIME | MASK_GAS | MASK_NO_SPACE_REGS | MASK_SOFT_FLOAT)"
tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h pa/pa-pro-end.h libgloss.h pa/rtems.h rtems.h"
tmake_file="pa/t-bsd pa/t-pro t-rtems"
@@ -852,14 +838,12 @@ hppa1.0-*-bsd*)
;;
hppa1.0-*-hpux7*)
tm_file="pa/pa-oldas.h ${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux7.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
;;
hppa1.0-*-hpux8.0[0-2]*)
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
if test x$gas != xyes
then
@@ -871,7 +855,6 @@ hppa1.0-*-hpux8.0[0-2]*)
hppa1.1-*-hpux8.0[0-2]*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
if test x$gas != xyes
then
@@ -883,14 +866,12 @@ hppa1.1-*-hpux8.0[0-2]*)
hppa1.1-*-hpux8*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
;;
hppa1.0-*-hpux8*)
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
@@ -898,7 +879,6 @@ hppa1.0-*-hpux8*)
hppa1.1-*-hpux10* | hppa2*-*-hpux10*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/long_double.h pa/som.h pa/pa-hpux.h pa/pa-hpux10.h"
- xm_defines=POSIX
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
xmake_file="pa/x-ada"
if test x$enable_threads = x; then
@@ -914,7 +894,6 @@ hppa1.1-*-hpux10* | hppa2*-*-hpux10*)
;;
hppa1.0-*-hpux10*)
tm_file="${tm_file} pa/pa32-regs.h pa/long_double.h pa/som.h pa/pa-hpux.h pa/pa-hpux10.h"
- xm_defines=POSIX
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
xmake_file="pa/x-ada"
if test x$enable_threads = x; then
@@ -929,7 +908,6 @@ hppa1.0-*-hpux10*)
use_collect2=yes
;;
hppa*64*-*-hpux11*)
- xm_defines=POSIX
if test x$gas = xyes
then
tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h \
@@ -961,7 +939,6 @@ hppa*64*-*-hpux11*)
hppa1.1-*-hpux11* | hppa2*-*-hpux11*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/long_double.h pa/som.h pa/pa-hpux.h pa/pa-hpux11.h"
- xm_defines=POSIX
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
xmake_file="pa/x-ada"
# if test x$enable_threads = x; then
@@ -976,7 +953,6 @@ hppa1.1-*-hpux11* | hppa2*-*-hpux11*)
;;
hppa1.0-*-hpux11*)
tm_file="${tm_file} pa/pa32-regs.h pa/long_double.h pa/som.h pa/pa-hpux.h pa/pa-hpux11.h"
- xm_defines=POSIX
tmake_file="pa/t-pa pa/t-pa-hpux pa/t-hpux-shlib"
xmake_file="pa/x-ada"
# if test x$enable_threads = x; then
@@ -992,14 +968,12 @@ hppa1.0-*-hpux11*)
hppa1.1-*-hpux* | hppa2*-*-hpux*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h pa/pa-hpux9.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
;;
hppa1.0-*-hpux*)
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h pa/pa-hpux9.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
@@ -1007,14 +981,12 @@ hppa1.0-*-hpux*)
hppa1.1-*-hiux* | hppa2*-*-hiux*)
target_cpu_default="MASK_PA_11"
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h pa/pa-hiux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
;;
hppa1.0-*-hiux*)
tm_file="${tm_file} pa/pa32-regs.h pa/som.h pa/pa-hpux.h pa/pa-hiux.h"
- xm_defines=POSIX
tmake_file=pa/t-pa-hpux
install_headers_dir=install-headers-cpio
use_collect2=yes
@@ -1035,14 +1007,14 @@ hppa*-*-mpeix*)
use_collect2=yes
;;
i370-*-opened*) # IBM 360/370/390 Architecture
- xm_defines='POSIX FATAL_EXIT_CODE=12'
+ xm_defines='FATAL_EXIT_CODE=12'
tm_file=i370/oe.h
tmake_file="i370/t-oe i370/t-i370"
c_target_objs="i370-c.o"
cxx_target_objs="i370-c.o"
;;
i370-*-mvs*)
- xm_defines='POSIX FATAL_EXIT_CODE=12'
+ xm_defines='FATAL_EXIT_CODE=12'
tm_file=i370/mvs.h
tmake_file="i370/t-i370"
c_target_objs="i370-c.o"
@@ -1058,12 +1030,11 @@ i[34567]86-*-darwin*)
tm_file="${tm_file} i386/darwin.h"
;;
i[34567]86-*-elf*)
- xm_defines=POSIX
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h"
tmake_file="i386/t-i386elf t-svr4"
;;
i[34567]86-ncr-sysv4*) # NCR 3000 - ix86 running system V.4
- xm_defines="POSIX SMALL_ARG_MAX"
+ xm_defines="SMALL_ARG_MAX"
if test x$stabs = xyes -a x$gas = xyes
then
tm_file=i386/sysv4gdb.h
@@ -1082,7 +1053,7 @@ i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4*)
then
tm_file="${tm_file} usegas.h"
fi
- xm_defines="POSIX SMALL_ARG_MAX"
+ xm_defines="SMALL_ARG_MAX"
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ptx4.h i386/ptx4-i.h"
tmake_file=t-svr4
extra_parts="crtbegin.o crtend.o"
@@ -1096,7 +1067,6 @@ i[34567]86-*-aout*)
tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h i386/i386-aout.h"
;;
i[34567]86-*-beoself* | i[34567]86-*-beos*)
- xm_defines=POSIX
tmake_file='i386/t-beos i386/t-crtpic'
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/beos-elf.h"
extra_parts='crtbegin.o crtend.o'
@@ -1208,7 +1178,6 @@ i[34567]86-go32-rtems* | i[34567]86-*-rtemscoff*)
exit 1
;;
i[34567]86-*-rtems*)
- xm_defines=POSIX
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h"
extra_parts="crtbegin.o crtend.o crti.o crtn.o"
tmake_file="i386/t-rtems-i386 i386/t-crtstuff t-rtems"
@@ -1217,7 +1186,6 @@ i[34567]86-*-rtems*)
fi
;;
i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
- xm_defines=POSIX
install_headers_dir=install-headers-cpio
tm_file="${tm_file} i386/unix.h i386/att.h i386/sco5.h"
if test x$gas = xyes
@@ -1230,7 +1198,7 @@ i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5
extra_parts="crti.o crtbegin.o crtend.o crtbeginS.o crtendS.o"
;;
i[34567]86-*-solaris2*)
- xm_defines="POSIX SMALL_ARG_MAX"
+ xm_defines="SMALL_ARG_MAX"
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h sol2.h i386/sol2.h"
tmake_file="i386/t-sol2 t-svr4"
if test x$gnu_ld = xyes; then
@@ -1254,7 +1222,6 @@ i[34567]86-*-solaris2*)
fi
;;
i[34567]86-*-sysv5*) # Intel x86 on System V Release 5
- xm_defines=POSIX
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h i386/sysv5.h"
if test x$stabs = xyes
then
@@ -1267,7 +1234,7 @@ i[34567]86-*-sysv5*) # Intel x86 on System V Release 5
fi
;;
i[34567]86-*-sysv4*) # Intel 80386's running system V.4
- xm_defines="POSIX SMALL_ARG_MAX"
+ xm_defines="SMALL_ARG_MAX"
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h i386/sysv4-cpp.h"
if test x$stabs = xyes
then
@@ -1277,14 +1244,12 @@ i[34567]86-*-sysv4*) # Intel 80386's running system V.4
extra_parts="crtbegin.o crtend.o"
;;
i[34567]86-*-udk*) # Intel x86 on SCO UW/OSR5 Dev Kit
- xm_defines=POSIX
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h i386/sysv5.h i386/udk.h"
tmake_file="i386/t-crtpic i386/t-udk t-svr4"
extra_parts="crtbegin.o crtend.o"
install_headers_dir=install-headers-cpio
;;
i[34567]86-*-sysv*) # Intel 80386's running system V
- xm_defines=POSIX
if test x$gas = xyes
then
if test x$stabs = xyes
@@ -1309,7 +1274,6 @@ i386-*-vsta) # Intel 80386's running VSTa kernel
tm_file="${tm_file} i386/vsta.h"
;;
i[34567]86-*-win32)
- xm_defines=POSIX
xm_file=i386/xm-cygwin.h
tmake_file=i386/t-cygwin
tm_file="${tm_file} i386/win32.h"
@@ -1320,21 +1284,21 @@ i[34567]86-*-win32)
exeext=.exe
;;
i[34567]86-*-pe | i[34567]86-*-cygwin*)
- xm_defines=POSIX
+ tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/cygwin.h"
xm_file=i386/xm-cygwin.h
- tmake_file=i386/t-cygwin
- tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygwin.h"
+ tmake_file="i386/t-cygming i386/t-cygwin"
extra_objs=winnt.o
+ c_target_objs=cygwin2.o
+ cxx_target_objs=cygwin2.o
if test x$enable_threads = xyes; then
- thread_file='win32'
+ thread_file='posix'
fi
exeext=.exe
;;
i[34567]86-*-mingw32*)
- tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygwin.h i386/mingw32.h"
- xm_defines=POSIX
+ tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygming.h i386/mingw32.h"
xm_file=i386/xm-mingw32.h
- tmake_file="i386/t-cygwin i386/t-mingw32"
+ tmake_file="i386/t-cygming i386/t-mingw32"
extra_objs=winnt.o
if test x$enable_threads = xyes; then
thread_file='win32'
@@ -1344,7 +1308,7 @@ i[34567]86-*-mingw32*)
*mingw32crt*)
tm_file="${tm_file} i386/crtdll.h"
;;
- *minwg32msv* | *mingw32*)
+ *mingw32msv* | *mingw32*)
;;
esac
;;
@@ -1359,7 +1323,6 @@ i[34567]86-*-uwin*)
;;
i[34567]86-*-interix3*)
tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h"
- xm_defines=POSIX
tmake_file="t-interix i386/t-interix"
extra_objs=winnt.o
xmake_file="x-interix"
@@ -1372,7 +1335,6 @@ i[34567]86-*-interix3*)
;;
i[34567]86-*-interix*)
tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h interix.h"
- xm_defines=POSIX
tmake_file="t-interix i386/t-interix"
extra_objs=winnt.o
if test x$enable_threads = xyes ; then
@@ -1389,7 +1351,6 @@ i960-*-coff*)
cxx_target_objs="i960-c.o"
;;
i960-*-rtems)
- xm_defines=POSIX
tmake_file="i960/t-960bare t-rtems"
tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/rtems.h rtems.h"
if test x$enable_threads = xyes; then
@@ -1470,7 +1431,6 @@ m68000-hp-bsd*) # HP 9000/200 running BSD
use_collect2=yes
;;
m68000-hp-hpux*) # HP 9000 series 300
- xm_defines=POSIX
if test x$gas = xyes
then
tm_file=m68k/hp310g.h
@@ -1490,7 +1450,6 @@ m68000-sun-sunos4*)
use_collect2=yes
;;
m68000-att-sysv*)
- xm_defines=POSIX
if test x$gas = xyes
then
tm_file=m68k/3b1g.h
@@ -1501,7 +1460,6 @@ m68000-att-sysv*)
;;
m68k-atari-sysv4*) # Atari variant of V.4.
tm_file=m68k/atari.h
- xm_defines=POSIX
tmake_file=t-svr4
extra_parts="crtbegin.o crtend.o"
;;
@@ -1512,7 +1470,6 @@ m68k-apollo-sysv* | m68k-bull-sysv*)
;;
m68k-motorola-sysv*)
tm_file=m68k/mot3300.h
- xm_defines=POSIX
if test x$gas = xyes
then
if test x$gnu_ld = xyes
@@ -1536,26 +1493,21 @@ m68k-motorola-sysv*)
;;
m68k-ncr-sysv*) # NCR Tower 32 SVR3
tm_file=m68k/tower-as.h
- xm_defines=POSIX
extra_parts="crtbegin.o crtend.o"
;;
m68k-plexus-sysv*)
tm_file=m68k/plexus.h
- xm_defines=POSIX
use_collect2=yes
;;
m68k-tti-*)
tm_file=m68k/pbb.h
- xm_defines=POSIX
;;
m68k-crds-unos*)
- xm_defines=POSIX
tm_file=m68k/crds.h
use_collect2=yes
;;
m68k-cbm-sysv4*) # Commodore variant of V.4.
tm_file=m68k/amix.h
- xm_defines=POSIX
tmake_file=t-svr4
extra_parts="crtbegin.o crtend.o"
;;
@@ -1572,7 +1524,6 @@ m68k-hp-bsd*) # HP 9000/3xx running Berkeley Unix
use_collect2=yes
;;
m68k-hp-hpux7*) # HP 9000 series 300 running HPUX version 7.
- xm_defines=POSIX
if test x$gas = xyes
then
xmake_file=m68k/x-hp320g
@@ -1585,7 +1536,6 @@ m68k-hp-hpux7*) # HP 9000 series 300 running HPUX version 7.
use_collect2=yes
;;
m68k-hp-hpux*) # HP 9000 series 300
- xm_defines=POSIX
if test x$gas = xyes
then
xmake_file=m68k/x-hp320g
@@ -1629,7 +1579,6 @@ m68k-*-coff*)
;;
m68020-*-elf* | m68k-*-elf*)
tm_file="m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h"
- xm_defines=POSIX
tmake_file=m68k/t-m68kelf
extra_parts="crtbegin.o crtend.o"
;;
@@ -1658,7 +1607,6 @@ m68k*-*-openbsd*)
;;
m68k-*-sysv4*) # Motorola m68k's running system V.4
tm_file=m68k/m68kv4.h
- xm_defines=POSIX
tmake_file=t-svr4
extra_parts="crtbegin.o crtend.o"
;;
@@ -1691,7 +1639,6 @@ m68k-*-rtemscoff*) # would otherwise be caught by m68k-*-rtems*
exit 1
;;
m68k-*-rtems*)
- xm_defines=POSIX
tmake_file="m68k/t-m68kbare t-rtems m68k/t-crtstuff"
tm_file="m68k/m68k-none.h m68k/m68kelf.h dbxelf.h elfos.h m68k/m68kemb.h m68k/m68020-elf.h m68k/rtemself.h rtems.h"
extra_parts="crtbegin.o crtend.o"
@@ -1700,7 +1647,6 @@ m68k-*-rtems*)
fi
;;
m88k-*-aout*)
- xm_defines=POSIX
tm_file=m88k/m88k-aout.h
;;
m88k-*-openbsd*)
@@ -1708,7 +1654,6 @@ m88k-*-openbsd*)
tm_file="m88k/aout-dbx.h aoutos.h m88k/m88k.h openbsd.h ${tm_file}"
;;
m88k-*-sysv4*)
- xm_defines=POSIX
tm_file="dbxelf.h elfos.h svr4.h m88k/sysv4.h"
extra_parts="crtbegin.o crtend.o"
tmake_file=m88k/t-sysv4
@@ -1736,7 +1681,6 @@ mips-sgi-irix6*o32) # SGI System V.4., IRIX 6, O32 ABI
fi
tm_file="${tm_file} mips/iris6-o32.h"
tmake_file="${tmake_file} mips/t-iris mips/t-iris5-6"
- xm_defines=POSIX
xm_file=mips/xm-iris5.h
# mips-tfile doesn't work yet
# See comment in mips/iris5.h file.
@@ -1753,14 +1697,12 @@ mips-sgi-irix6*) # SGI System V.4., IRIX 6
tm_file=mips/iris6.h
fi
tmake_file="mips/t-iris mips/t-iris5-6 mips/t-iris6"
- xm_defines=POSIX
# if test x$enable_threads = xyes; then
# thread_file='irix'
# fi
;;
mips-sgi-irix5cross64) # Irix5 host, Irix 6 target, cross64
tm_file="mips/iris6.h mips/cross64.h"
- xm_defines=POSIX
xm_file=mips/xm-iris5.h
tmake_file="mips/t-iris mips/t-cross64"
# See comment in mips/iris[56].h files.
@@ -1781,7 +1723,6 @@ mips-sni-sysv4)
else
tm_file=mips/sni-svr4.h
fi
- xm_defines=POSIX
if test x$gnu_ld != xyes
then
use_collect2=yes
@@ -1801,7 +1742,6 @@ mips-sgi-irix5*) # SGI System V.4., IRIX 5
tmake_file=mips/t-iris5-as
fi
tmake_file="${tmake_file} mips/t-iris mips/t-iris5-6"
- xm_defines=POSIX
xm_file=mips/xm-iris5.h
# mips-tfile doesn't work yet
# See comment in mips/iris5.h file.
@@ -1911,7 +1851,6 @@ mips64orion-*-elf* | mips64orionel-*-elf*)
tm_defines="MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_O64"
;;
mips64orion-*-rtems*)
- xm_defines=POSIX
tm_file="${tm_file} mips/elforion.h mips/elf64.h mips/rtems64.h rtems.h"
tmake_file="mips/t-elf t-rtems"
tmake_file=mips/t-elf
@@ -1922,7 +1861,6 @@ mips64orion-*-rtems*)
fi
;;
mips*-*-rtems*)
- xm_defines=POSIX
tm_file="${tm_file} mips/elf.h mips/rtems.h rtems.h"
tmake_file="mips/t-elf t-rtems"
if test x$enable_threads = xyes; then
@@ -1989,7 +1927,6 @@ powerpc64-*-gnu*)
;;
powerpc-*-beos*)
tm_file="${tm_file} rs6000/aix.h rs6000/beos.h rs6000/xcoff.h"
- xm_defines=POSIX
tmake_file="rs6000/t-fprules rs6000/t-beos"
extra_headers=
;;
@@ -2010,7 +1947,6 @@ powerpc*-*-freebsd*)
;;
powerpc-*-sysv*)
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
- xm_defines=POSIX
tmake_file="rs6000/t-fprules rs6000/t-ppcos rs6000/t-ppccomm"
;;
powerpc-*-netbsd*)
@@ -2018,7 +1954,6 @@ powerpc-*-netbsd*)
tmake_file="${tmake_file} rs6000/t-netbsd"
;;
powerpc-*-chorusos*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h chorus.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcos rs6000/t-ppccomm"
case x${enable_threads} in
@@ -2028,42 +1963,34 @@ powerpc-*-chorusos*)
esac
;;
powerpc-*-eabiaix*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabiaix.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpc-*-eabispe*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabispe.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
;;
powerpc-*-eabisimaltivec*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabisim.h rs6000/eabialtivec.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
;;
powerpc-*-eabisim*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabisim.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpc-*-elf*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpc-*-eabialtivec*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/eabialtivec.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcendian rs6000/t-ppccomm"
;;
powerpc-*-eabi*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpc-*-rtems*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/rtems.h rtems.h"
tmake_file="rs6000/t-fprules rs6000/t-rtems t-rtems rs6000/t-ppccomm"
if test x$enable_threads = xyes; then
@@ -2108,52 +2035,43 @@ powerpc-wrs-vxworks*)
extra_headers=ppc-asm.h
;;
powerpc-wrs-windiss*)
- xm_defines=POSIX
tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/windiss.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
thread_file=""
;;
powerpcle-*-sysv*)
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h"
- xm_defines=POSIX
tmake_file="rs6000/t-fprules rs6000/t-ppcos rs6000/t-ppccomm"
;;
powerpcle-*-elf*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpcle-*-eabisim*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h rs6000/eabisim.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
powerpcle-*-eabi*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h rs6000/eabi.h"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
;;
rs6000-ibm-aix3.[01]*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix31.h rs6000/xcoff.h"
use_collect2=yes
;;
rs6000-ibm-aix3.2.[456789]* | powerpc-ibm-aix3.2.[456789]*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix3newas.h rs6000/xcoff.h"
tmake_file="rs6000/t-fprules rs6000/t-newas"
use_collect2=yes
extra_headers=
;;
rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix41.h rs6000/xcoff.h"
tmake_file="rs6000/t-fprules rs6000/t-newas"
use_collect2=yes
extra_headers=
;;
rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix43.h rs6000/xcoff.h"
tmake_file=rs6000/t-aix43
use_collect2=yes
@@ -2161,7 +2079,6 @@ rs6000-ibm-aix4.[3456789]* | powerpc-ibm-aix4.[3456789]*)
extra_headers=
;;
rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix51.h rs6000/xcoff.h"
tmake_file=rs6000/t-aix43
use_collect2=yes
@@ -2169,7 +2086,6 @@ rs6000-ibm-aix5.1.* | powerpc-ibm-aix5.1.*)
extra_headers=
;;
rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/aix52.h rs6000/xcoff.h"
tmake_file=rs6000/t-aix52
use_collect2=yes
@@ -2177,18 +2093,15 @@ rs6000-ibm-aix[56789].* | powerpc-ibm-aix[56789].*)
extra_headers=
;;
rs6000-ibm-aix*)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/xcoff.h"
use_collect2=yes
;;
rs6000-bull-bosx)
- xm_defines=POSIX
tm_file="${tm_file} rs6000/aix.h rs6000/xcoff.h"
use_collect2=yes
;;
rs6000-*-mach*)
tm_file="${tm_file} rs6000/mach.h"
- xm_defines=POSIX
use_collect2=yes
;;
rs6000-*-lynxos*)
@@ -2235,7 +2148,6 @@ sh-*-elf* | sh[2346l]*-*-elf*)
esac
;;
sh-*-rtemself*)
- xm_defines=POSIX
tmake_file="sh/t-sh sh/t-elf t-rtems"
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sh/embed-elf.h sh/rtemself.h rtems.h"
if test x$enable_threads = xyes; then
@@ -2243,7 +2155,6 @@ sh-*-rtemself*)
fi
;;
sh-*-rtems*)
- xm_defines=POSIX
tmake_file="sh/t-sh t-rtems"
tm_file="${tm_file} sh/coff.h sh/rtems.h rtems.h"
if test x$enable_threads = xyes; then
@@ -2317,7 +2228,6 @@ sh-*-*)
;;
sparc-tti-*)
tm_file="${tm_file} sparc/pbd.h"
- xm_defines=POSIX
;;
sparc-*-aout*)
tmake_file=sparc/t-sparcbare
@@ -2390,7 +2300,6 @@ sparc-*-rtemsaout*) # would otherwise be caught by sparc-*-rtems*
exit 1
;;
sparc-*-rtems*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h sparc/sol2.h sparc/elf.h sparc/rtemself.h rtems.h"
tmake_file="sparc/t-elf sparc/t-crtfm t-rtems"
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
@@ -2406,7 +2315,6 @@ sparc64-*-solaris2* | sparcv9-*-solaris2*)
if test x$gas = xyes; then
tm_file="${tm_file} sparc/sol2-gas-bi.h"
fi
- xm_defines=POSIX
tmake_file="sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtfm"
if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
@@ -2430,7 +2338,6 @@ sparc64-*-solaris2* | sparcv9-*-solaris2*)
need_64bit_hwint=yes
;;
sparc-hal-solaris2*)
- xm_defines=POSIX
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h sparc/sol2.h sparc/hal.h"
tmake_file="sparc/t-halos sparc/t-sol2 sparc/t-crtfm"
if test x$gnu_ld = xyes; then
@@ -2471,7 +2378,6 @@ sparc-*-solaris2*)
need_64bit_hwint=yes
;;
esac
- xm_defines=POSIX
extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
if test x${enable_threads} = x; then
enable_threads=$have_pthread_h
@@ -2505,7 +2411,6 @@ sparc-*-sunos3*)
;;
sparc-*-sysv4*)
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h"
- xm_defines=POSIX
tmake_file=t-svr4
extra_parts="crtbegin.o crtend.o"
;;
@@ -2592,7 +2497,6 @@ thumb*-*-*)
*** when the -mthumb switch is given to the compiler." 1>&2; exit 1; }
;;
v850-*-rtems*)
- xm_defines=POSIX
tm_file="dbxelf.h elfos.h svr4.h ${tm_file} v850/v850.h v850/rtems.h rtems.h"
tmake_file="v850/t-v850 t-rtems"
if test x$stabs = xyes
@@ -2636,11 +2540,9 @@ vax-*-bsd*) # VAXen running BSD
;;
vax-*-sysv*) # VAXen running system V
tm_file="${tm_file} vax/vaxv.h"
- xm_defines=POSIX
;;
vax-*-netbsdelf*)
tm_file="${tm_file} elfos.h netbsd.h netbsd-elf.h vax/elf.h vax/netbsd-elf.h"
- float_format=vax
;;
vax-*-netbsd*)
tm_file="${tm_file} netbsd.h netbsd-aout.h vax/netbsd.h"
diff --git a/gcc/config.in b/gcc/config.in
index 08d6cdf5dfa..da6063b09a8 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -347,6 +347,9 @@
through valgrind (a memory checker). This is extremely expensive. */
#undef ENABLE_VALGRIND_CHECKING
+/* Define if valgrind's memcheck.h header is installed. */
+#undef HAVE_MEMCHECK_H
+
/* Define if you want to use __cxa_atexit, rather than atexit, to
register C++ destructors for local statics and global objects.
This is essential for fully standards-compliant handling of
@@ -379,17 +382,6 @@
/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
#undef BYTEORDER
-/* Define to the floating point format of the host machine, if not IEEE. */
-#undef HOST_FLOAT_FORMAT
-
-/* Define to 1 if the host machine stores floating point numbers in
- memory with the word containing the sign bit at the lowest address,
- or to 0 if it does it the other way around.
-
- This macro should not be defined if the ordering is the same as for
- multi-word integers. */
-#undef HOST_FLOAT_WORDS_BIG_ENDIAN
-
/* Define if you have a working <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
@@ -486,6 +478,9 @@
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETRUSAGE
+/* Define to `long' if <sys/resource.h> doesn't define. */
+#undef rlim_t
+
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_LDGETNAME
@@ -600,6 +595,9 @@
/* Define true if the assembler supports '.long foo@GOTOFF'. */
#undef HAVE_AS_GOTOFF_IN_DATA
+/* Define if your assembler supports ltoffx and ldxmov relocations. */
+#undef HAVE_AS_LTOFFX_LDXMOV_RELOCS
+
/* Define if your assembler supports dwarf2 .file/.loc directives,
and preserves file table indices exactly as given. */
#undef HAVE_AS_DWARF2_DEBUG_LINE
diff --git a/gcc/config/alpha/alpha-protos.h b/gcc/config/alpha/alpha-protos.h
index 3bd852c59a1..da3294dc2b4 100644
--- a/gcc/config/alpha/alpha-protos.h
+++ b/gcc/config/alpha/alpha-protos.h
@@ -26,6 +26,8 @@ extern int zap_mask PARAMS ((HOST_WIDE_INT));
extern int direct_return PARAMS ((void));
extern int alpha_sa_size PARAMS ((void));
+extern HOST_WIDE_INT alpha_initial_elimination_offset PARAMS ((unsigned int,
+ unsigned int));
extern int alpha_pv_save_size PARAMS ((void));
extern int alpha_using_fp PARAMS ((void));
extern void alpha_write_verstamp PARAMS ((FILE *));
@@ -135,6 +137,8 @@ extern void alpha_initialize_trampoline PARAMS ((rtx, rtx, rtx, int, int, int));
extern void alpha_reorg PARAMS ((rtx));
extern tree alpha_build_va_list PARAMS ((void));
+extern void alpha_setup_incoming_varargs
+ PARAMS ((CUMULATIVE_ARGS, enum machine_mode, tree, int *, int));
extern void alpha_va_start PARAMS ((tree, rtx));
extern rtx alpha_va_arg PARAMS ((tree, tree));
extern rtx function_arg PARAMS ((CUMULATIVE_ARGS, enum machine_mode,
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index e807fdc4c91..9da73ecc366 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -5716,7 +5716,7 @@ alpha_gp_save_rtx ()
{
rtx r = get_hard_reg_initial_val (DImode, 29);
if (GET_CODE (r) != MEM)
- r = gen_mem_addressof (r, NULL_TREE);
+ r = gen_mem_addressof (r, NULL_TREE, /*rescan=*/true);
return r;
}
@@ -5916,6 +5916,13 @@ print_operand (file, x, code)
fputc ((TARGET_FLOAT_VAX ? 'g' : 't'), file);
break;
+ case '+':
+ /* Generates a nop after a noreturn call at the very end of the
+ function. */
+ if (next_real_insn (current_output_insn) == 0)
+ fprintf (file, "\n\tnop");
+ break;
+
case '#':
if (alpha_this_literal_sequence_number == 0)
alpha_this_literal_sequence_number = alpha_next_sequence_number++;
@@ -6551,6 +6558,53 @@ alpha_build_va_list ()
return record;
}
+/* Perform any needed actions needed for a function that is receiving a
+ variable number of arguments.
+
+ On the Alpha, we allocate space for all 12 arg registers, but only
+ push those that are remaining. However, if NO registers need to be
+ saved, don't allocate any space. This is not only because we won't
+ need the space, but because AP includes the current_pretend_args_size
+ and we don't want to mess up any ap-relative addresses already made.
+
+ If we are not to use the floating-point registers, save the integer
+ registers where we would put the floating-point registers. This is
+ not the most efficient way to implement varargs with just one register
+ class, but it isn't worth doing anything more efficient in this rare
+ case. */
+
+void
+alpha_setup_incoming_varargs(cum, mode, type, pretend_size, no_rtl)
+ CUMULATIVE_ARGS cum;
+ enum machine_mode mode;
+ tree type;
+ int *pretend_size;
+ int no_rtl;
+{
+ if (cum >= 6)
+ return;
+
+ if (!no_rtl)
+ {
+ int set = get_varargs_alias_set ();
+ rtx tmp;
+
+ tmp = gen_rtx_MEM (BLKmode,
+ plus_constant (virtual_incoming_args_rtx,
+ (cum + 6) * UNITS_PER_WORD));
+ set_mem_alias_set (tmp, set);
+ move_block_from_reg (16 + cum, tmp, 6 - cum, (6 - cum) * UNITS_PER_WORD);
+
+ tmp = gen_rtx_MEM (BLKmode,
+ plus_constant (virtual_incoming_args_rtx,
+ cum * UNITS_PER_WORD));
+ set_mem_alias_set (tmp, set);
+ move_block_from_reg (16 + (TARGET_FPREGS ? 32 : 0) + cum, tmp,
+ 6 - cum, (6 - cum) * UNITS_PER_WORD);
+ }
+ *pretend_size = 12 * UNITS_PER_WORD;
+}
+
void
alpha_va_start (valist, nextarg)
tree valist;
@@ -6572,12 +6626,15 @@ alpha_va_start (valist, nextarg)
If no integer registers need be stored, then we must subtract 48
in order to account for the integer arg registers which are counted
- in argsize above, but which are not actually stored on the stack. */
+ in argsize above, but which are not actually stored on the stack.
+ Must further be careful here about structures straddling the last
+ integer argument register; that futzes with pretend_args_size,
+ which changes the meaning of AP. */
if (NUM_ARGS <= 6)
offset = TARGET_ABI_OPEN_VMS ? UNITS_PER_WORD : 6 * UNITS_PER_WORD;
else
- offset = -6 * UNITS_PER_WORD;
+ offset = -6 * UNITS_PER_WORD + current_function_pretend_args_size;
if (TARGET_ABI_OPEN_VMS)
{
@@ -7193,6 +7250,30 @@ alpha_sa_size ()
return sa_size * 8;
}
+/* Define the offset between two registers, one to be eliminated,
+ and the other its replacement, at the start of a routine. */
+
+HOST_WIDE_INT
+alpha_initial_elimination_offset(from, to)
+ unsigned int from, to;
+{
+ HOST_WIDE_INT ret;
+
+ ret = alpha_sa_size ();
+ ret += ALPHA_ROUND (current_function_outgoing_args_size);
+
+ if (from == FRAME_POINTER_REGNUM)
+ ;
+ else if (from == ARG_POINTER_REGNUM)
+ ret += (ALPHA_ROUND (get_frame_size ()
+ + current_function_pretend_args_size)
+ - current_function_pretend_args_size);
+ else
+ abort ();
+
+ return ret;
+}
+
int
alpha_pv_save_size ()
{
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 2c79fa8e935..e20d3c80736 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -963,19 +963,8 @@ extern int alpha_memory_latency;
/* Define the offset between two registers, one to be eliminated, and the other
its replacement, at the start of a routine. */
-#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
-{ if ((FROM) == FRAME_POINTER_REGNUM) \
- (OFFSET) = (ALPHA_ROUND (current_function_outgoing_args_size) \
- + alpha_sa_size ()); \
- else if ((FROM) == ARG_POINTER_REGNUM) \
- (OFFSET) = (ALPHA_ROUND (current_function_outgoing_args_size) \
- + alpha_sa_size () \
- + (ALPHA_ROUND (get_frame_size () \
- + current_function_pretend_args_size) \
- - current_function_pretend_args_size)); \
- else \
- abort (); \
-}
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
+ ((OFFSET) = alpha_initial_elimination_offset(FROM, TO))
/* Define this if stack space is still allocated for a parameter passed
in a register. */
@@ -1122,58 +1111,9 @@ extern int alpha_memory_latency;
? 6 - (CUM) : 0)
/* Perform any needed actions needed for a function that is receiving a
- variable number of arguments.
-
- CUM is as above.
-
- MODE and TYPE are the mode and type of the current parameter.
-
- PRETEND_SIZE is a variable that should be set to the amount of stack
- that must be pushed by the prolog to pretend that our caller pushed
- it.
-
- Normally, this macro will push all remaining incoming registers on the
- stack and set PRETEND_SIZE to the length of the registers pushed.
-
- On the Alpha, we allocate space for all 12 arg registers, but only
- push those that are remaining.
-
- However, if NO registers need to be saved, don't allocate any space.
- This is not only because we won't need the space, but because AP includes
- the current_pretend_args_size and we don't want to mess up any
- ap-relative addresses already made.
-
- If we are not to use the floating-point registers, save the integer
- registers where we would put the floating-point registers. This is
- not the most efficient way to implement varargs with just one register
- class, but it isn't worth doing anything more efficient in this rare
- case. */
-
-#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
-{ if ((CUM) < 6) \
- { \
- if (! (NO_RTL)) \
- { \
- rtx tmp; int set = get_varargs_alias_set (); \
- tmp = gen_rtx_MEM (BLKmode, \
- plus_constant (virtual_incoming_args_rtx, \
- ((CUM) + 6)* UNITS_PER_WORD)); \
- set_mem_alias_set (tmp, set); \
- move_block_from_reg \
- (16 + CUM, tmp, \
- 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \
- \
- tmp = gen_rtx_MEM (BLKmode, \
- plus_constant (virtual_incoming_args_rtx, \
- (CUM) * UNITS_PER_WORD)); \
- set_mem_alias_set (tmp, set); \
- move_block_from_reg \
- (16 + (TARGET_FPREGS ? 32 : 0) + CUM, tmp, \
- 6 - (CUM), (6 - (CUM)) * UNITS_PER_WORD); \
- } \
- PRETEND_SIZE = 12 * UNITS_PER_WORD; \
- } \
-}
+ variable number of arguments. */
+#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL) \
+ alpha_setup_incoming_varargs(CUM,MODE,TYPE,&(PRETEND_SIZE),NO_RTL)
/* Try to output insns to set TARGET equal to the constant C if it can be
done in less than N insns. Do all computations in MODE. Returns the place
@@ -1720,11 +1660,14 @@ do { \
- Generates double precision suffix for floating point
instructions (t for IEEE, g for VAX)
+
+ + Generates a nop instruction after a noreturn call at the very end
+ of the function
*/
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
((CODE) == '/' || (CODE) == ',' || (CODE) == '-' || (CODE) == '~' \
- || (CODE) == '#' || (CODE) == '*' || (CODE) == '&')
+ || (CODE) == '#' || (CODE) == '*' || (CODE) == '&' || (CODE) == '+')
/* Print a memory address as an operand to reference that memory location. */
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 2d5285a688b..8ae7aca2747 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -413,7 +413,7 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
[(set (match_operand:DI 0 "register_operand" "=r")
(plus:DI (match_operand:DI 1 "register_operand" "r")
(high:DI (match_operand:DI 2 "local_symbolic_operand" ""))))]
- "TARGET_EXPLICIT_RELOCS"
+ "TARGET_EXPLICIT_RELOCS && reload_completed"
"ldah %0,%2(%1)\t\t!gprelhigh"
[(set_attr "usegp" "yes")])
@@ -750,17 +750,31 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
"mulqv %r1,%2,%0"
[(set_attr "type" "imul")])
-(define_insn "umuldi3_highpart"
+(define_expand "umuldi3_highpart"
+ [(set (match_operand:DI 0 "register_operand" "")
+ (truncate:DI
+ (lshiftrt:TI
+ (mult:TI (zero_extend:TI
+ (match_operand:DI 1 "register_operand" ""))
+ (match_operand:DI 2 "reg_or_8bit_operand" ""))
+ (const_int 64))))]
+ ""
+{
+ if (REG_P (operands[2]))
+ operands[2] = gen_rtx_ZERO_EXTEND (TImode, operands[2]);
+})
+
+(define_insn "*umuldi3_highpart_reg"
[(set (match_operand:DI 0 "register_operand" "=r")
(truncate:DI
(lshiftrt:TI
(mult:TI (zero_extend:TI
- (match_operand:DI 1 "reg_or_0_operand" "%rJ"))
+ (match_operand:DI 1 "register_operand" "r"))
(zero_extend:TI
- (match_operand:DI 2 "reg_or_8bit_operand" "rI")))
+ (match_operand:DI 2 "register_operand" "r")))
(const_int 64))))]
""
- "umulh %r1,%2,%0"
+ "umulh %1,%2,%0"
[(set_attr "type" "imul")
(set_attr "opsize" "udi")])
@@ -4687,6 +4701,16 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
"jsr $26,(%0),%2%J3"
[(set_attr "type" "jsr")])
+;; We output a nop after noreturn calls at the very end of the function to
+;; ensure that the return address always remains in the caller's code range,
+;; as not doing so might confuse unwinding engines.
+;;
+;; The potential change in insn length is not reflected in the length
+;; attributes at this stage. Since the extra space is only actually added at
+;; the very end of the compilation process (via final/print_operand), it
+;; really seems harmless and not worth the trouble of some extra computation
+;; cost and complexity.
+
(define_insn "*call_osf_1_noreturn"
[(call (mem:DI (match_operand:DI 0 "call_operand" "c,R,s"))
(match_operand 1 "" ""))
@@ -4695,9 +4719,9 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
"! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
&& find_reg_note (insn, REG_NORETURN, NULL_RTX)"
"@
- jsr $26,($27),0
- bsr $26,$%0..ng
- jsr $26,%0"
+ jsr $26,($27),0%+
+ bsr $26,$%0..ng%+
+ jsr $26,%0%+"
[(set_attr "type" "jsr")
(set_attr "length" "*,*,8")])
@@ -7920,9 +7944,9 @@ fadd,fmul,fcpys,fdiv,fsqrt,misc,mvi,ftoi,itof,multi,none"
"! TARGET_EXPLICIT_RELOCS && TARGET_ABI_OSF
&& find_reg_note (insn, REG_NORETURN, NULL_RTX)"
"@
- jsr $26,($27),0
- bsr $26,$%1..ng
- jsr $26,%1"
+ jsr $26,($27),0%+
+ bsr $26,$%1..ng%+
+ jsr $26,%1%+"
[(set_attr "type" "jsr")
(set_attr "length" "*,*,8")])
diff --git a/gcc/config/alpha/elf.h b/gcc/config/alpha/elf.h
index afe96462d4e..bd0d97cb202 100644
--- a/gcc/config/alpha/elf.h
+++ b/gcc/config/alpha/elf.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by Richard Henderson (rth@tamu.edu).
@@ -156,7 +156,6 @@ do { \
#undef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
} while (0)
diff --git a/gcc/config/alpha/freebsd.h b/gcc/config/alpha/freebsd.h
index c77d85640f6..7b3f5c4af69 100644
--- a/gcc/config/alpha/freebsd.h
+++ b/gcc/config/alpha/freebsd.h
@@ -20,11 +20,13 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-/* Provide a CPP_SPEC appropriate for FreeBSD/alpha. Besides the dealing with
+/* Provide a FBSD_TARGET_CPU_CPP_BUILTINS and CPP_SPEC appropriate for
+ FreeBSD/alpha. Besides the dealing with
the GCC option `-posix', and PIC issues as on all FreeBSD platforms, we must
deal with the Alpha's FP issues. */
-#define TARGET_OS_CPP_BUILTINS() \
+#undef FBSD_TARGET_CPU_CPP_BUILTINS
+#define FBSD_TARGET_CPU_CPP_BUILTINS() \
do \
{ \
if (flag_pic) \
diff --git a/gcc/config/alpha/netbsd.h b/gcc/config/alpha/netbsd.h
index e1da9cfe188..117ce3dcf50 100644
--- a/gcc/config/alpha/netbsd.h
+++ b/gcc/config/alpha/netbsd.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for Alpha NetBSD systems.
- Copyright (C) 1998, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -25,7 +25,6 @@ Boston, MA 02111-1307, USA. */
#define TARGET_OS_CPP_BUILTINS() \
do { \
NETBSD_OS_CPP_BUILTINS_ELF(); \
- NETBSD_OS_CPP_BUILTINS_LP64(); \
} while (0)
diff --git a/gcc/config/alpha/osf.h b/gcc/config/alpha/osf.h
index 871f078ea99..2be2a424d35 100644
--- a/gcc/config/alpha/osf.h
+++ b/gcc/config/alpha/osf.h
@@ -38,6 +38,8 @@ Boston, MA 02111-1307, USA. */
builtin_define_std ("SYSTYPE_BSD"); \
builtin_define ("_SYSTYPE_BSD"); \
builtin_define ("__osf__"); \
+ builtin_define ("__digital__"); \
+ builtin_define ("__arch64__"); \
builtin_define ("_LONGLONG"); \
builtin_define ("__PRAGMA_EXTERN_PREFIX"); \
builtin_assert ("system=unix"); \
diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h
index ad4ebffe343..bfc2c0faaef 100644
--- a/gcc/config/arm/arm-protos.h
+++ b/gcc/config/arm/arm-protos.h
@@ -58,8 +58,8 @@ extern int thumb_legitimate_address_p PARAMS ((enum machine_mode, rtx,
extern int thumb_legitimate_offset_p PARAMS ((enum machine_mode,
HOST_WIDE_INT));
extern rtx arm_legitimize_address PARAMS ((rtx, rtx, enum machine_mode));
-extern int const_double_rtx_ok_for_fpu PARAMS ((rtx));
-extern int neg_const_double_rtx_ok_for_fpu PARAMS ((rtx));
+extern int const_double_rtx_ok_for_fpa PARAMS ((rtx));
+extern int neg_const_double_rtx_ok_for_fpa PARAMS ((rtx));
/* Predicates. */
extern int s_register_operand PARAMS ((rtx, enum machine_mode));
@@ -74,8 +74,8 @@ extern int arm_not_operand PARAMS ((rtx, enum machine_mode));
extern int offsettable_memory_operand PARAMS ((rtx, enum machine_mode));
extern int alignable_memory_operand PARAMS ((rtx, enum machine_mode));
extern int bad_signed_byte_operand PARAMS ((rtx, enum machine_mode));
-extern int fpu_rhs_operand PARAMS ((rtx, enum machine_mode));
-extern int fpu_add_operand PARAMS ((rtx, enum machine_mode));
+extern int fpa_rhs_operand PARAMS ((rtx, enum machine_mode));
+extern int fpa_add_operand PARAMS ((rtx, enum machine_mode));
extern int power_of_two_operand PARAMS ((rtx, enum machine_mode));
extern int nonimmediate_di_operand PARAMS ((rtx, enum machine_mode));
extern int di_operand PARAMS ((rtx, enum machine_mode));
@@ -125,11 +125,11 @@ extern void arm_reorg PARAMS ((rtx));
extern const char * fp_immediate_constant PARAMS ((rtx));
extern const char * output_call PARAMS ((rtx *));
extern const char * output_call_mem PARAMS ((rtx *));
-extern const char * output_mov_long_double_fpu_from_arm PARAMS ((rtx *));
-extern const char * output_mov_long_double_arm_from_fpu PARAMS ((rtx *));
+extern const char * output_mov_long_double_fpa_from_arm PARAMS ((rtx *));
+extern const char * output_mov_long_double_arm_from_fpa PARAMS ((rtx *));
extern const char * output_mov_long_double_arm_from_arm PARAMS ((rtx *));
-extern const char * output_mov_double_fpu_from_arm PARAMS ((rtx *));
-extern const char * output_mov_double_arm_from_fpu PARAMS ((rtx *));
+extern const char * output_mov_double_fpa_from_arm PARAMS ((rtx *));
+extern const char * output_mov_double_arm_from_fpa PARAMS ((rtx *));
extern const char * output_move_double PARAMS ((rtx *));
extern const char * output_mov_immediate PARAMS ((rtx *));
extern const char * output_add_immediate PARAMS ((rtx *));
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 8f3afef7859..216e5a270c8 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -239,10 +239,10 @@ int making_const_table;
rtx arm_compare_op0, arm_compare_op1;
/* What type of floating point are we tuning for? */
-enum floating_point_type arm_fpu;
+enum fputype arm_fpu_tune;
/* What type of floating point instructions are available? */
-enum floating_point_type arm_fpu_arch;
+enum fputype arm_fpu_arch;
/* What program mode is the cpu running in? 26-bit mode or 32-bit mode. */
enum prog_mode_type arm_prgmode;
@@ -387,7 +387,7 @@ static const struct processors all_cores[] =
{"arm710c", FL_MODE26 | FL_MODE32 },
{"arm7100", FL_MODE26 | FL_MODE32 },
{"arm7500", FL_MODE26 | FL_MODE32 },
- /* Doesn't have an external co-proc, but does have embedded fpu. */
+ /* Doesn't have an external co-proc, but does have embedded fpa. */
{"arm7500fe", FL_CO_PROC | FL_MODE26 | FL_MODE32 },
{"arm7tdmi", FL_CO_PROC | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_THUMB },
{"arm8", FL_MODE26 | FL_MODE32 | FL_FAST_MULT | FL_ARCH4 | FL_LDSCHED },
@@ -726,7 +726,7 @@ arm_override_options ()
if (arm_is_cirrus)
{
- arm_fpu = FP_CIRRUS;
+ arm_fpu_tune = FPUTYPE_MAVERICK;
/* Ignore -mhard-float if -mcpu=ep9312. */
if (TARGET_HARD_FLOAT)
@@ -738,34 +738,34 @@ arm_override_options ()
assume the user has an FPA.
Note: this does not prevent use of floating point instructions,
-msoft-float does that. */
- arm_fpu = (tune_flags & FL_CO_PROC) ? FP_HARD : FP_SOFT3;
+ arm_fpu_tune = (tune_flags & FL_CO_PROC) ? FPUTYPE_FPA : FPUTYPE_FPA_EMU3;
if (target_fp_name)
{
if (streq (target_fp_name, "2"))
- arm_fpu_arch = FP_SOFT2;
+ arm_fpu_arch = FPUTYPE_FPA_EMU2;
else if (streq (target_fp_name, "3"))
- arm_fpu_arch = FP_SOFT3;
+ arm_fpu_arch = FPUTYPE_FPA_EMU3;
else
error ("invalid floating point emulation option: -mfpe-%s",
target_fp_name);
}
else
- arm_fpu_arch = FP_DEFAULT;
+ arm_fpu_arch = FPUTYPE_DEFAULT;
if (TARGET_FPE)
{
- if (arm_fpu == FP_SOFT3)
- arm_fpu = FP_SOFT2;
- else if (arm_fpu == FP_CIRRUS)
- warning ("-mpfpe switch not supported by ep9312 target cpu - ignored.");
- else if (arm_fpu != FP_HARD)
- arm_fpu = FP_SOFT2;
+ if (arm_fpu_tune == FPUTYPE_FPA_EMU3)
+ arm_fpu_tune = FPUTYPE_FPA_EMU2;
+ else if (arm_fpu_tune == FPUTYPE_MAVERICK)
+ warning ("-mfpe switch not supported by ep9312 target cpu - ignored.");
+ else if (arm_fpu_tune != FPUTYPE_FPA)
+ arm_fpu_tune = FPUTYPE_FPA_EMU2;
}
/* For arm2/3 there is no need to do any scheduling if there is only
a floating point emulator, or we are doing software floating-point. */
- if ((TARGET_SOFT_FLOAT || arm_fpu != FP_HARD)
+ if ((TARGET_SOFT_FLOAT || arm_fpu_tune != FPUTYPE_FPA)
&& (tune_flags & FL_MODE32) == 0)
flag_schedule_insns = flag_schedule_insns_after_reload = 0;
@@ -1008,7 +1008,7 @@ use_return_insn (iscond)
if (saved_int_regs && !(saved_int_regs & (1 << LR_REGNUM)))
return 0;
- /* Can't be done if any of the FPU regs are pushed,
+ /* Can't be done if any of the FPA regs are pushed,
since this also requires an insn. */
if (TARGET_HARD_FLOAT)
for (regno = FIRST_ARM_FP_REGNUM; regno <= LAST_ARM_FP_REGNUM; regno++)
@@ -3216,11 +3216,11 @@ arm_rtx_costs_1 (x, code, outer)
if (GET_MODE_CLASS (mode) == MODE_FLOAT)
return (2 + ((REG_OR_SUBREG_REG (XEXP (x, 1))
|| (GET_CODE (XEXP (x, 1)) == CONST_DOUBLE
- && const_double_rtx_ok_for_fpu (XEXP (x, 1))))
+ && const_double_rtx_ok_for_fpa (XEXP (x, 1))))
? 0 : 8)
+ ((REG_OR_SUBREG_REG (XEXP (x, 0))
|| (GET_CODE (XEXP (x, 0)) == CONST_DOUBLE
- && const_double_rtx_ok_for_fpu (XEXP (x, 0))))
+ && const_double_rtx_ok_for_fpa (XEXP (x, 0))))
? 0 : 8));
if (((GET_CODE (XEXP (x, 0)) == CONST_INT
@@ -3245,7 +3245,7 @@ arm_rtx_costs_1 (x, code, outer)
return (2 + (REG_OR_SUBREG_REG (XEXP (x, 0)) ? 0 : 8)
+ ((REG_OR_SUBREG_REG (XEXP (x, 1))
|| (GET_CODE (XEXP (x, 1)) == CONST_DOUBLE
- && const_double_rtx_ok_for_fpu (XEXP (x, 1))))
+ && const_double_rtx_ok_for_fpa (XEXP (x, 1))))
? 0 : 8));
/* Fall through */
@@ -3405,10 +3405,10 @@ arm_rtx_costs_1 (x, code, outer)
return 6;
case CONST_DOUBLE:
- if (const_double_rtx_ok_for_fpu (x))
+ if (const_double_rtx_ok_for_fpa (x))
return outer == SET ? 2 : -1;
else if ((outer == COMPARE || outer == PLUS)
- && neg_const_double_rtx_ok_for_fpu (x))
+ && neg_const_double_rtx_ok_for_fpa (x))
return -1;
return 7;
@@ -3569,10 +3569,10 @@ init_fpa_table ()
fpa_consts_inited = 1;
}
-/* Return TRUE if rtx X is a valid immediate FPU constant. */
+/* Return TRUE if rtx X is a valid immediate FPA constant. */
int
-const_double_rtx_ok_for_fpu (x)
+const_double_rtx_ok_for_fpa (x)
rtx x;
{
REAL_VALUE_TYPE r;
@@ -3592,10 +3592,10 @@ const_double_rtx_ok_for_fpu (x)
return 0;
}
-/* Return TRUE if rtx X is a valid immediate FPU constant. */
+/* Return TRUE if rtx X is a valid immediate FPA constant. */
int
-neg_const_double_rtx_ok_for_fpu (x)
+neg_const_double_rtx_ok_for_fpa (x)
rtx x;
{
REAL_VALUE_TYPE r;
@@ -3851,13 +3851,13 @@ f_register_operand (op, mode)
to be a register operand. */
return (GET_CODE (op) == REG
&& (REGNO (op) >= FIRST_PSEUDO_REGISTER
- || REGNO_REG_CLASS (REGNO (op)) == FPU_REGS));
+ || REGNO_REG_CLASS (REGNO (op)) == FPA_REGS));
}
-/* Return TRUE for valid operands for the rhs of an FPU instruction. */
+/* Return TRUE for valid operands for the rhs of an FPA instruction. */
int
-fpu_rhs_operand (op, mode)
+fpa_rhs_operand (op, mode)
rtx op;
enum machine_mode mode;
{
@@ -3868,13 +3868,13 @@ fpu_rhs_operand (op, mode)
return FALSE;
if (GET_CODE (op) == CONST_DOUBLE)
- return const_double_rtx_ok_for_fpu (op);
+ return const_double_rtx_ok_for_fpa (op);
return FALSE;
}
int
-fpu_add_operand (op, mode)
+fpa_add_operand (op, mode)
rtx op;
enum machine_mode mode;
{
@@ -3885,8 +3885,8 @@ fpu_add_operand (op, mode)
return FALSE;
if (GET_CODE (op) == CONST_DOUBLE)
- return (const_double_rtx_ok_for_fpu (op)
- || neg_const_double_rtx_ok_for_fpu (op));
+ return (const_double_rtx_ok_for_fpa (op)
+ || neg_const_double_rtx_ok_for_fpa (op));
return FALSE;
}
@@ -7204,7 +7204,20 @@ print_multi_reg (stream, instr, reg, mask)
not_first = TRUE;
}
- fprintf (stream, "}%s\n", TARGET_APCS_32 ? "" : "^");
+ fprintf (stream, "}");
+
+ /* Add a ^ character for the 26-bit ABI, but only if we were loading
+ the PC. Otherwise we would generate an UNPREDICTABLE instruction.
+ Strictly speaking the instruction would be unpredicatble only if
+ we were writing back the base register as well, but since we never
+ want to generate an LDM type 2 instruction (register bank switching)
+ which is what you get if the PC is not being loaded, we do not need
+ to check for writeback. */
+ if (! TARGET_APCS_32
+ && ((mask & (1 << PC_REGNUM)) != 0))
+ fprintf (stream, "^");
+
+ fprintf (stream, "\n");
}
/* Output a 'call' insn. */
@@ -7292,12 +7305,12 @@ output_call_mem (operands)
}
-/* Output a move from arm registers to an fpu registers.
- OPERANDS[0] is an fpu register.
+/* Output a move from arm registers to an fpa registers.
+ OPERANDS[0] is an fpa register.
OPERANDS[1] is the first registers of an arm register pair. */
const char *
-output_mov_long_double_fpu_from_arm (operands)
+output_mov_long_double_fpa_from_arm (operands)
rtx * operands;
{
int arm_reg0 = REGNO (operands[1]);
@@ -7316,12 +7329,12 @@ output_mov_long_double_fpu_from_arm (operands)
return "";
}
-/* Output a move from an fpu register to arm registers.
+/* Output a move from an fpa register to arm registers.
OPERANDS[0] is the first registers of an arm register pair.
- OPERANDS[1] is an fpu register. */
+ OPERANDS[1] is an fpa register. */
const char *
-output_mov_long_double_arm_from_fpu (operands)
+output_mov_long_double_arm_from_fpa (operands)
rtx * operands;
{
int arm_reg0 = REGNO (operands[0]);
@@ -7376,12 +7389,12 @@ output_mov_long_double_arm_from_arm (operands)
}
-/* Output a move from arm registers to an fpu registers.
- OPERANDS[0] is an fpu register.
+/* Output a move from arm registers to an fpa registers.
+ OPERANDS[0] is an fpa register.
OPERANDS[1] is the first registers of an arm register pair. */
const char *
-output_mov_double_fpu_from_arm (operands)
+output_mov_double_fpa_from_arm (operands)
rtx * operands;
{
int arm_reg0 = REGNO (operands[1]);
@@ -7397,12 +7410,12 @@ output_mov_double_fpu_from_arm (operands)
return "";
}
-/* Output a move from an fpu register to arm registers.
+/* Output a move from an fpa register to arm registers.
OPERANDS[0] is the first registers of an arm register pair.
- OPERANDS[1] is an fpu register. */
+ OPERANDS[1] is an fpa register. */
const char *
-output_mov_double_arm_from_fpu (operands)
+output_mov_double_arm_from_fpa (operands)
rtx * operands;
{
int arm_reg0 = REGNO (operands[0]);
@@ -8210,20 +8223,22 @@ output_return_instruction (operand, really_return, reverse)
if (live_regs_mask & (1 << LR_REGNUM))
{
- int l = strlen (return_reg);
-
- if (! first)
- {
- memcpy (p, ", ", 2);
- p += 2;
- }
-
- memcpy (p, "%|", 2);
- memcpy (p + 2, return_reg, l);
- strcpy (p + 2 + l, ((TARGET_APCS_32
- && !IS_INTERRUPT (func_type))
- || !really_return)
- ? "}" : "}^");
+ sprintf (p, "%s%%|%s}", first ? "" : ", ", return_reg);
+ /* Decide if we need to add the ^ symbol to the end of the
+ register list. This causes the saved condition codes
+ register to be copied into the current condition codes
+ register. We do the copy if we are conforming to the 32-bit
+ ABI and this is an interrupt function, or if we are
+ conforming to the 26-bit ABI. There is a special case for
+ the 26-bit ABI however, which is if we are writing back the
+ stack pointer but not loading the PC. In this case adding
+ the ^ symbol would create a type 2 LDM instruction, where
+ writeback is UNPREDICTABLE. We are safe in leaving the ^
+ character off in this case however, since the actual return
+ instruction will be a MOVS which will restore the CPSR. */
+ if ((TARGET_APCS_32 && IS_INTERRUPT (func_type))
+ || (! TARGET_APCS_32 && really_return))
+ strcat (p, "^");
}
else
strcpy (p, "}");
@@ -8452,7 +8467,7 @@ arm_output_epilogue (really_return)
{
int vfp_offset = 4;
- if (arm_fpu_arch == FP_SOFT2)
+ if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
{
for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg--)
if (regs_ever_live[reg] && !call_used_regs[reg])
@@ -8535,7 +8550,7 @@ arm_output_epilogue (really_return)
output_add_immediate (operands);
}
- if (arm_fpu_arch == FP_SOFT2)
+ if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
{
for (reg = FIRST_ARM_FP_REGNUM; reg <= LAST_ARM_FP_REGNUM; reg++)
if (regs_ever_live[reg] && !call_used_regs[reg])
@@ -9294,10 +9309,11 @@ arm_expand_prologue ()
if (! IS_VOLATILE (func_type))
{
- /* Save any floating point call-saved registers used by this function. */
- if (arm_fpu_arch == FP_SOFT2)
+ /* Save any floating point call-saved registers used by this
+ function. */
+ if (arm_fpu_arch == FPUTYPE_FPA_EMU2)
{
- for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg --)
+ for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg--)
if (regs_ever_live[reg] && !call_used_regs[reg])
{
insn = gen_rtx_PRE_DEC (XFmode, stack_pointer_rtx);
@@ -9311,7 +9327,7 @@ arm_expand_prologue ()
{
int start_reg = LAST_ARM_FP_REGNUM;
- for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg --)
+ for (reg = LAST_ARM_FP_REGNUM; reg >= FIRST_ARM_FP_REGNUM; reg--)
{
if (regs_ever_live[reg] && !call_used_regs[reg])
{
@@ -9356,7 +9372,8 @@ arm_expand_prologue ()
insn = gen_rtx_REG (SImode, 3);
else /* if (current_function_pretend_args_size == 0) */
{
- insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx, GEN_INT (4));
+ insn = gen_rtx_PLUS (SImode, hard_frame_pointer_rtx,
+ GEN_INT (4));
insn = gen_rtx_MEM (SImode, insn);
}
@@ -10243,7 +10260,7 @@ arm_hard_regno_mode_ok (regno, mode)
/* We only allow integers in the fake hard registers. */
return GET_MODE_CLASS (mode) == MODE_INT;
- /* The only registers left are the FPU registers
+ /* The only registers left are the FPA registers
which we only allow to hold FP values. */
return GET_MODE_CLASS (mode) == MODE_FLOAT
&& regno >= FIRST_ARM_FP_REGNUM
@@ -10276,7 +10293,7 @@ arm_regno_class (regno)
if (IS_CIRRUS_REGNUM (regno))
return CIRRUS_REGS;
- return FPU_REGS;
+ return FPA_REGS;
}
/* Handle a special case when computing the offset
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 01861f3a9e2..8b02b211e43 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -550,32 +550,38 @@ extern enum prog_mode_type arm_prgmode;
/* What sort of floating point unit do we have? Hardware or software.
If software, is it issue 2 or issue 3? */
-enum floating_point_type
+enum fputype
{
- FP_HARD,
- FP_SOFT2,
- FP_SOFT3,
- FP_CIRRUS
+ /* Software floating point, FPA style double fmt. */
+ FPUTYPE_SOFT_FPA,
+ /* Full FPA support. */
+ FPUTYPE_FPA,
+ /* Emulated FPA hardware, Issue 2 emulator (no LFM/SFM). */
+ FPUTYPE_FPA_EMU2,
+ /* Emulated FPA hardware, Issue 3 emulator. */
+ FPUTYPE_FPA_EMU3,
+ /* Cirrus Maverick floating point co-processor. */
+ FPUTYPE_MAVERICK
};
/* Recast the floating point class to be the floating point attribute. */
-#define arm_fpu_attr ((enum attr_fpu) arm_fpu)
+#define arm_fpu_attr ((enum attr_fpu) arm_fpu_tune)
/* What type of floating point to tune for */
-extern enum floating_point_type arm_fpu;
+extern enum fputype arm_fpu_tune;
/* What type of floating point instructions are available */
-extern enum floating_point_type arm_fpu_arch;
+extern enum fputype arm_fpu_arch;
/* Default floating point architecture. Override in sub-target if
necessary. */
-#ifndef FP_DEFAULT
-#define FP_DEFAULT FP_SOFT2
+#ifndef FPUTYPE_DEFAULT
+#define FPUTYPE_DEFAULT FPUTYPE_FPA_EMU2
#endif
#if TARGET_CPU_DEFAULT == TARGET_CPU_ep9312
-#undef FP_DEFAULT
-#define FP_DEFAULT FP_CIRRUS
+#undef FPUTYPE_DEFAULT
+#define FPUTYPE_DEFAULT FPUTYPE_MAVERICK
#endif
/* Nonzero if the processor has a fast multiply insn, and one that does
@@ -1002,8 +1008,8 @@ extern const char * structure_size_string;
#define IS_CIRRUS_REGNUM(REGNUM) \
(((REGNUM) >= FIRST_CIRRUS_FP_REGNUM) && ((REGNUM) <= LAST_CIRRUS_FP_REGNUM))
-/* The number of hard registers is 16 ARM + 8 FPU + 1 CC + 1 SFP. */
-/* Cirrus registers take us up to 43... */
+/* The number of hard registers is 16 ARM + 8 FPA + 1 CC + 1 SFP + 1 AFP. */
+/* + 16 Cirrus registers take us up to 43. */
#define FIRST_PSEUDO_REGISTER 43
/* Value should be nonzero if functions must have frame pointers.
@@ -1021,7 +1027,7 @@ extern const char * structure_size_string;
This is ordinarily the length in words of a value of mode MODE
but can be less for certain modes in special long registers.
- On the ARM regs are UNITS_PER_WORD bits wide; FPU regs can hold any FP
+ On the ARM regs are UNITS_PER_WORD bits wide; FPA regs can hold any FP
mode. */
#define HARD_REGNO_NREGS(REGNO, MODE) \
((TARGET_ARM \
@@ -1066,12 +1072,12 @@ extern const char * structure_size_string;
/* Register and constant classes. */
-/* Register classes: used to be simple, just all ARM regs or all FPU regs
+/* Register classes: used to be simple, just all ARM regs or all FPA regs
Now that the Thumb is involved it has become more complicated. */
enum reg_class
{
NO_REGS,
- FPU_REGS,
+ FPA_REGS,
CIRRUS_REGS,
LO_REGS,
STACK_REG,
@@ -1089,7 +1095,7 @@ enum reg_class
#define REG_CLASS_NAMES \
{ \
"NO_REGS", \
- "FPU_REGS", \
+ "FPA_REGS", \
"CIRRUS_REGS", \
"LO_REGS", \
"STACK_REG", \
@@ -1106,7 +1112,7 @@ enum reg_class
#define REG_CLASS_CONTENTS \
{ \
{ 0x00000000, 0x0 }, /* NO_REGS */ \
- { 0x00FF0000, 0x0 }, /* FPU_REGS */ \
+ { 0x00FF0000, 0x0 }, /* FPA_REGS */ \
{ 0xF8000000, 0x000007FF }, /* CIRRUS_REGS */ \
{ 0x000000FF, 0x0 }, /* LO_REGS */ \
{ 0x00002000, 0x0 }, /* STACK_REG */ \
@@ -1143,10 +1149,10 @@ enum reg_class
#define SMALL_REGISTER_CLASSES TARGET_THUMB
/* Get reg_class from a letter such as appears in the machine description.
- We only need constraint `f' for FPU_REGS (`r' == GENERAL_REGS) for the
+ We only need constraint `f' for FPA_REGS (`r' == GENERAL_REGS) for the
ARM, but several more letters for the Thumb. */
#define REG_CLASS_FROM_LETTER(C) \
- ( (C) == 'f' ? FPU_REGS \
+ ( (C) == 'f' ? FPA_REGS \
: (C) == 'v' ? CIRRUS_REGS \
: (C) == 'l' ? (TARGET_ARM ? GENERAL_REGS : LO_REGS) \
: TARGET_ARM ? NO_REGS \
@@ -1190,11 +1196,11 @@ enum reg_class
(TARGET_ARM ? \
CONST_OK_FOR_ARM_LETTER (VALUE, C) : CONST_OK_FOR_THUMB_LETTER (VALUE, C))
-/* Constant letter 'G' for the FPU immediate constants.
+/* Constant letter 'G' for the FPA immediate constants.
'H' means the same constant negated. */
#define CONST_DOUBLE_OK_FOR_ARM_LETTER(X, C) \
- ((C) == 'G' ? const_double_rtx_ok_for_fpu (X) : \
- (C) == 'H' ? neg_const_double_rtx_ok_for_fpu (X) : 0)
+ ((C) == 'G' ? const_double_rtx_ok_for_fpa (X) : \
+ (C) == 'H' ? neg_const_double_rtx_ok_for_fpa (X) : 0)
#define CONST_DOUBLE_OK_FOR_LETTER_P(X, C) \
(TARGET_ARM ? \
@@ -1364,18 +1370,18 @@ enum reg_class
/* Return the maximum number of consecutive registers
needed to represent mode MODE in a register of class CLASS.
- ARM regs are UNITS_PER_WORD bits while FPU regs can hold any FP mode */
+ ARM regs are UNITS_PER_WORD bits while FPA regs can hold any FP mode */
#define CLASS_MAX_NREGS(CLASS, MODE) \
- (((CLASS) == FPU_REGS || (CLASS) == CIRRUS_REGS) ? 1 : ARM_NUM_REGS (MODE))
+ (((CLASS) == FPA_REGS || (CLASS) == CIRRUS_REGS) ? 1 : ARM_NUM_REGS (MODE))
/* If defined, gives a class of registers that cannot be used as the
operand of a SUBREG that changes the mode of the object illegally. */
-/* Moves between FPU_REGS and GENERAL_REGS are two memory insns. */
+/* Moves between FPA_REGS and GENERAL_REGS are two memory insns. */
#define REGISTER_MOVE_COST(MODE, FROM, TO) \
(TARGET_ARM ? \
- ((FROM) == FPU_REGS && (TO) != FPU_REGS ? 20 : \
- (FROM) != FPU_REGS && (TO) == FPU_REGS ? 20 : \
+ ((FROM) == FPA_REGS && (TO) != FPA_REGS ? 20 : \
+ (FROM) != FPA_REGS && (TO) == FPA_REGS ? 20 : \
(FROM) == CIRRUS_REGS && (TO) != CIRRUS_REGS ? 20 : \
(FROM) != CIRRUS_REGS && (TO) == CIRRUS_REGS ? 20 : \
2) \
@@ -2508,8 +2514,8 @@ extern int making_const_table;
{"arm_hard_register_operand", {REG}}, \
{"f_register_operand", {SUBREG, REG}}, \
{"arm_add_operand", {SUBREG, REG, CONST_INT}}, \
- {"fpu_add_operand", {SUBREG, REG, CONST_DOUBLE}}, \
- {"fpu_rhs_operand", {SUBREG, REG, CONST_DOUBLE}}, \
+ {"fpa_add_operand", {SUBREG, REG, CONST_DOUBLE}}, \
+ {"fpa_rhs_operand", {SUBREG, REG, CONST_DOUBLE}}, \
{"arm_rhs_operand", {SUBREG, REG, CONST_INT}}, \
{"arm_not_operand", {SUBREG, REG, CONST_INT}}, \
{"reg_or_int_operand", {SUBREG, REG, CONST_INT}}, \
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index e53a526b96e..4e111289a38 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -56,7 +56,11 @@
(UNSPEC_PIC_SYM 3) ; A symbol that has been treated properly for pic
; usage, that is, we will add the pic_register
; value to it before trying to dereference it.
- (UNSPEC_PRLG_STK 4) ; A special barrier that prevents frame accesses
+ (UNSPEC_PIC_BASE 4) ; Adding the PC value to the offset to the
+ ; GLOBAL_OFFSET_TABLE. The operation is fully
+ ; described by the RTL but must be wrapped to
+ ; prevent combine from trying to rip it apart.
+ (UNSPEC_PRLG_STK 5) ; A special barrier that prevents frame accesses
; being scheduled before the stack adjustment insn.
(UNSPEC_PROLOGUE_USE 6) ; As USE insns are not meaningful after reload,
; this unspec is used to prevent the deletion of
@@ -116,7 +120,8 @@
; Floating Point Unit. If we only have floating point emulation, then there
; is no point in scheduling the floating point insns. (Well, for best
; performance we should try and group them together).
-(define_attr "fpu" "fpa,fpe2,fpe3" (const (symbol_ref "arm_fpu_attr")))
+(define_attr "fpu" "softfpa,fpa,fpe2,fpe3,maverick"
+ (const (symbol_ref "arm_fpu_attr")))
; LENGTH of an instruction (in bytes)
(define_attr "length" "" (const_int 4))
@@ -241,44 +246,6 @@
;; {ready-delay} {issue-delay} [{conflict-list}])
;;--------------------------------------------------------------------
-;; Floating point unit (FPA)
-;;--------------------------------------------------------------------
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "fdivx")) 71 69)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "fdivd")) 59 57)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "fdivs")) 31 29)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "fmul")) 9 7)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "ffmul")) 6 4)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "farith")) 4 2)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "ffarith")) 2 2)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "r_2_f")) 5 3)
-
-(define_function_unit "fpa" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "f_2_r")) 1 2)
-
-; The fpa10 doesn't really have a memory read unit, but it can start to
-; speculatively execute the instruction in the pipeline, provided the data
-; is already loaded, so pretend reads have a delay of 2 (and that the
-; pipeline is infinite).
-
-(define_function_unit "fpa_mem" 1 0 (and (eq_attr "fpu" "fpa")
- (eq_attr "type" "f_load")) 3 1)
-
-;;--------------------------------------------------------------------
;; Write buffer
;;--------------------------------------------------------------------
; Strictly, we should model a 4-deep write buffer for ARM7xx based chips
@@ -389,8 +356,6 @@
(and (eq_attr "core_cycles" "multi")
(eq_attr "type" "!mult,load,store1,store2,store3,store4")) 32 32)
-(include "cirrus.md")
-
;;---------------------------------------------------------------------------
;; Insn patterns
;;
@@ -806,65 +771,27 @@
(set_attr "length" "4,8")]
)
-(define_insn "*arm_addsf3"
- [(set (match_operand:SF 0 "s_register_operand" "=f,f")
- (plus:SF (match_operand:SF 1 "s_register_operand" "%f,f")
- (match_operand:SF 2 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- adf%?s\\t%0, %1, %2
- suf%?s\\t%0, %1, #%N2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*arm_adddf3"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (plus:DF (match_operand:DF 1 "s_register_operand" "%f,f")
- (match_operand:DF 2 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- adf%?d\\t%0, %1, %2
- suf%?d\\t%0, %1, #%N2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*adddf_esfdf_df"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (plus:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f,f"))
- (match_operand:DF 2 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- adf%?d\\t%0, %1, %2
- suf%?d\\t%0, %1, #%N2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*adddf_df_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (plus:DF (match_operand:DF 1 "s_register_operand" "f")
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "adf%?d\\t%0, %1, %2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "addsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (plus:SF (match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "fpa_add_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS
+ && !cirrus_fp_register (operands[2], SFmode))
+ operands[2] = force_reg (SFmode, operands[2]);
+")
-(define_insn "*adddf_esfdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (plus:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "adf%?d\\t%0, %1, %2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "adddf3"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (plus:DF (match_operand:DF 1 "s_register_operand" "")
+ (match_operand:DF 2 "fpa_add_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS
+ && !cirrus_fp_register (operands[2], DFmode))
+ operands[2] = force_reg (DFmode, operands[2]);
+")
(define_expand "subdi3"
[(parallel
@@ -1068,64 +995,36 @@
(set_attr "length" "*,8")]
)
-(define_insn "*arm_subsf3"
- [(set (match_operand:SF 0 "s_register_operand" "=f,f")
- (minus:SF (match_operand:SF 1 "fpu_rhs_operand" "f,G")
- (match_operand:SF 2 "fpu_rhs_operand" "fG,f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- suf%?s\\t%0, %1, %2
- rsf%?s\\t%0, %2, %1"
- [(set_attr "type" "farith")]
-)
-
-(define_insn "*arm_subdf3"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (minus:DF (match_operand:DF 1 "fpu_rhs_operand" "f,G")
- (match_operand:DF 2 "fpu_rhs_operand" "fG,f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- suf%?d\\t%0, %1, %2
- rsf%?d\\t%0, %2, %1"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*subdf_esfdf_df"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (minus:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "suf%?d\\t%0, %1, %2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "subsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (minus:SF (match_operand:SF 1 "fpa_rhs_operand" "")
+ (match_operand:SF 2 "fpa_rhs_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ if (!cirrus_fp_register (operands[1], SFmode))
+ operands[1] = force_reg (SFmode, operands[1]);
+ if (!cirrus_fp_register (operands[2], SFmode))
+ operands[2] = force_reg (SFmode, operands[2]);
+ }
+")
-(define_insn "*subdf_df_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (minus:DF (match_operand:DF 1 "fpu_rhs_operand" "f,G")
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f,f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- suf%?d\\t%0, %1, %2
- rsf%?d\\t%0, %2, %1"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "subdf3"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (minus:DF (match_operand:DF 1 "fpa_rhs_operand" "")
+ (match_operand:DF 2 "fpa_rhs_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ if (!cirrus_fp_register (operands[1], DFmode))
+ operands[1] = force_reg (DFmode, operands[1]);
+ if (!cirrus_fp_register (operands[2], DFmode))
+ operands[2] = force_reg (DFmode, operands[2]);
+ }
+")
-(define_insn "*subdf_esfdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (minus:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "suf%?d\\t%0, %1, %2"
- [(set_attr "type" "farith")
- (set_attr "predicable" "yes")]
-)
;; Multiplication insns
@@ -1401,174 +1300,59 @@
[(set_attr "type" "mult")
(set_attr "predicable" "yes")])
-(define_insn "*arm_mulsf3"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (mult:SF (match_operand:SF 1 "s_register_operand" "f")
- (match_operand:SF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "fml%?s\\t%0, %1, %2"
- [(set_attr "type" "ffmul")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*arm_muldf3"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mult:DF (match_operand:DF 1 "s_register_operand" "f")
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "muf%?d\\t%0, %1, %2"
- [(set_attr "type" "fmul")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*muldf_esfdf_df"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mult:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "muf%?d\\t%0, %1, %2"
- [(set_attr "type" "fmul")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*muldf_df_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mult:DF (match_operand:DF 1 "s_register_operand" "f")
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "muf%?d\\t%0, %1, %2"
- [(set_attr "type" "fmul")
- (set_attr "predicable" "yes")]
-)
+(define_expand "mulsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (mult:SF (match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "fpa_rhs_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS
+ && !cirrus_fp_register (operands[2], SFmode))
+ operands[2] = force_reg (SFmode, operands[2]);
+")
-(define_insn "*muldf_esfdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mult:DF
- (float_extend:DF (match_operand:SF 1 "s_register_operand" "f"))
- (float_extend:DF (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "muf%?d\\t%0, %1, %2"
- [(set_attr "type" "fmul")
- (set_attr "predicable" "yes")]
-)
+(define_expand "muldf3"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (mult:DF (match_operand:DF 1 "s_register_operand" "")
+ (match_operand:DF 2 "fpa_rhs_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS
+ && !cirrus_fp_register (operands[2], DFmode))
+ operands[2] = force_reg (DFmode, operands[2]);
+")
;; Division insns
-(define_insn "divsf3"
- [(set (match_operand:SF 0 "s_register_operand" "=f,f")
- (div:SF (match_operand:SF 1 "fpu_rhs_operand" "f,G")
- (match_operand:SF 2 "fpu_rhs_operand" "fG,f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- fdv%?s\\t%0, %1, %2
- frd%?s\\t%0, %2, %1"
- [(set_attr "type" "fdivs")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "divdf3"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f")
- (div:DF (match_operand:DF 1 "fpu_rhs_operand" "f,G")
- (match_operand:DF 2 "fpu_rhs_operand" "fG,f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- dvf%?d\\t%0, %1, %2
- rdf%?d\\t%0, %2, %1"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*divdf_esfdf_df"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (div:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "dvf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*divdf_df_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (div:DF (match_operand:DF 1 "fpu_rhs_operand" "fG")
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
+(define_expand "divsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (div:SF (match_operand:SF 1 "fpa_rhs_operand" "")
+ (match_operand:SF 2 "fpa_rhs_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "rdf%?d\\t%0, %2, %1"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
+ "")
-(define_insn "*divdf_esfdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (div:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
+(define_expand "divdf3"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (div:DF (match_operand:DF 1 "fpa_rhs_operand" "")
+ (match_operand:DF 2 "fpa_rhs_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "dvf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
+ "")
;; Modulo insns
-(define_insn "modsf3"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (mod:SF (match_operand:SF 1 "s_register_operand" "f")
- (match_operand:SF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "rmf%?s\\t%0, %1, %2"
- [(set_attr "type" "fdivs")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "moddf3"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mod:DF (match_operand:DF 1 "s_register_operand" "f")
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "rmf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*moddf_esfdf_df"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mod:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (match_operand:DF 2 "fpu_rhs_operand" "fG")))]
+(define_expand "modsf3"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (mod:SF (match_operand:SF 1 "s_register_operand" "")
+ (match_operand:SF 2 "fpa_rhs_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "rmf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
+ "")
-(define_insn "*moddf_df_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mod:DF (match_operand:DF 1 "s_register_operand" "f")
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "rmf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*moddf_esfdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (mod:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))
- (float_extend:DF
- (match_operand:SF 2 "s_register_operand" "f"))))]
+(define_expand "moddf3"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (mod:DF (match_operand:DF 1 "s_register_operand" "")
+ (match_operand:DF 2 "fpa_rhs_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "rmf%?d\\t%0, %1, %2"
- [(set_attr "type" "fdivd")
- (set_attr "predicable" "yes")]
-)
+ "")
;; Boolean and,ior,xor insns
@@ -2784,39 +2568,32 @@
[(set_attr "length" "2")]
)
-(define_insn "*arm_negsf2"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (neg:SF (match_operand:SF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "mnf%?s\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*arm_negdf2"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (neg:DF (match_operand:DF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "mnf%?d\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
+(define_expand "negsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (neg:SF (match_operand:SF 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ ""
)
-(define_insn "*negdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (neg:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "mnf%?d\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "negdf2"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (neg:DF (match_operand:DF 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "")
;; abssi2 doesn't really clobber the condition codes if a different register
;; is being set. To keep things simple, assume during rtl manipulations that
;; it does, but tell the final scan operator the truth. Similarly for
;; (neg (abs...))
+(define_expand "abssi2"
+ [(parallel
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (abs:SI (match_operand:SI 1 "s_register_operand" "")))
+ (clobber (reg:CC CC_REGNUM))])]
+ "TARGET_ARM"
+ "")
+
(define_insn "*arm_abssi2"
[(set (match_operand:SI 0 "s_register_operand" "=r,&r")
(abs:SI (match_operand:SI 1 "s_register_operand" "0,r")))
@@ -2845,61 +2622,29 @@
(set_attr "length" "8")]
)
-(define_insn "*arm_abssf2"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (abs:SF (match_operand:SF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "abs%?s\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*arm_absdf2"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (abs:DF (match_operand:DF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "abs%?d\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
-
-(define_insn "*absdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (abs:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "abs%?d\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
+(define_expand "abssf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (abs:SF (match_operand:SF 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "")
-(define_insn "sqrtsf2"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (sqrt:SF (match_operand:SF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "sqt%?s\\t%0, %1"
- [(set_attr "type" "float_em")
- (set_attr "predicable" "yes")]
-)
+(define_expand "absdf2"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (abs:DF (match_operand:DF 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "")
-(define_insn "sqrtdf2"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (sqrt:DF (match_operand:DF 1 "s_register_operand" "f")))]
+(define_expand "sqrtsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (sqrt:SF (match_operand:SF 1 "s_register_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "sqt%?d\\t%0, %1"
- [(set_attr "type" "float_em")
- (set_attr "predicable" "yes")]
-)
+ "")
-(define_insn "*sqrtdf_esfdf"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (sqrt:DF (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))))]
+(define_expand "sqrtdf2"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (sqrt:DF (match_operand:DF 1 "s_register_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
- "sqt%?d\\t%0, %1"
- [(set_attr "type" "float_em")
- (set_attr "predicable" "yes")]
-)
+ "")
(define_insn_and_split "one_cmpldi2"
[(set (match_operand:DI 0 "s_register_operand" "=&r,&r")
@@ -2966,52 +2711,68 @@
;; Fixed <--> Floating conversion insns
-(define_insn "*arm_floatsisf2"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
- (float:SF (match_operand:SI 1 "s_register_operand" "r")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "flt%?s\\t%0, %1"
- [(set_attr "type" "r_2_f")
- (set_attr "predicable" "yes")]
-)
+(define_expand "floatsisf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
+ (float:SF (match_operand:SI 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ emit_insn (gen_cirrus_floatsisf2 (operands[0], operands[1]));
+ DONE;
+ }
+")
-(define_insn "*arm_floatsidf2"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (float:DF (match_operand:SI 1 "s_register_operand" "r")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "flt%?d\\t%0, %1"
- [(set_attr "type" "r_2_f")
- (set_attr "predicable" "yes")]
-)
+(define_expand "floatsidf2"
+ [(set (match_operand:DF 0 "s_register_operand" "")
+ (float:DF (match_operand:SI 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ emit_insn (gen_cirrus_floatsidf2 (operands[0], operands[1]));
+ DONE;
+ }
+")
-(define_insn "*arm_fix_truncsfsi2"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
- (fix:SI (match_operand:SF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "fix%?z\\t%0, %1"
- [(set_attr "type" "f_2_r")
- (set_attr "predicable" "yes")]
-)
+(define_expand "fix_truncsfsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (fix:SI (fix:SF (match_operand:SF 1 "s_register_operand" ""))))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ if (!cirrus_fp_register (operands[0], SImode))
+ operands[0] = force_reg (SImode, operands[0]);
+ if (!cirrus_fp_register (operands[1], SFmode))
+ operands[1] = force_reg (SFmode, operands[0]);
+ emit_insn (gen_cirrus_truncsfsi2 (operands[0], operands[1]));
+ DONE;
+ }
+")
-(define_insn "*arm_fix_truncdfsi2"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
- (fix:SI (match_operand:DF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "fix%?z\\t%0, %1"
- [(set_attr "type" "f_2_r")
- (set_attr "predicable" "yes")]
-)
+(define_expand "fix_truncdfsi2"
+ [(set (match_operand:SI 0 "s_register_operand" "")
+ (fix:SI (fix:DF (match_operand:DF 1 "s_register_operand" ""))))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ "
+ if (TARGET_CIRRUS)
+ {
+ if (!cirrus_fp_register (operands[1], DFmode))
+ operands[1] = force_reg (DFmode, operands[0]);
+ emit_insn (gen_cirrus_truncdfsi2 (operands[0], operands[1]));
+ DONE;
+ }
+")
;; Truncation insns
-(define_insn "*arm_truncdfsf2"
- [(set (match_operand:SF 0 "s_register_operand" "=f")
+(define_expand "truncdfsf2"
+ [(set (match_operand:SF 0 "s_register_operand" "")
(float_truncate:SF
- (match_operand:DF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "mvf%?s\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
+ (match_operand:DF 1 "s_register_operand" "")))]
+ "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
+ ""
)
;; Zero and sign extension instructions.
@@ -3742,15 +3503,6 @@
"TARGET_ARM && TARGET_ANY_HARD_FLOAT"
""
)
-
-(define_insn "*arm_extendsfdf2"
- [(set (match_operand:DF 0 "s_register_operand" "=f")
- (float_extend:DF (match_operand:SF 1 "s_register_operand" "f")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "mvf%?d\\t%0, %1"
- [(set_attr "type" "ffarith")
- (set_attr "predicable" "yes")]
-)
;; Move insns (including loads and stores)
@@ -4045,7 +3797,7 @@
;; This variant is used for AOF assembly, since it needs to mention the
;; pic register in the rtl.
(define_expand "pic_load_addr_based"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(unspec:SI [(match_operand 1 "" "") (match_dup 2)] UNSPEC_PIC_SYM))]
"TARGET_ARM && flag_pic"
"operands[2] = pic_offset_table_rtx;"
@@ -4077,7 +3829,9 @@
(define_insn "pic_add_dot_plus_four"
[(set (match_operand:SI 0 "register_operand" "+r")
- (plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 4)))))
+ (unspec:SI [(plus:SI (match_dup 0)
+ (const (plus:SI (pc) (const_int 4))))]
+ UNSPEC_PIC_BASE))
(use (label_ref (match_operand 1 "" "")))]
"TARGET_THUMB && flag_pic"
"*
@@ -4090,7 +3844,9 @@
(define_insn "pic_add_dot_plus_eight"
[(set (match_operand:SI 0 "register_operand" "+r")
- (plus:SI (match_dup 0) (const (plus:SI (pc) (const_int 8)))))
+ (unspec:SI [(plus:SI (match_dup 0)
+ (const (plus:SI (pc) (const_int 8))))]
+ UNSPEC_PIC_BASE))
(use (label_ref (match_operand 1 "" "")))]
"TARGET_ARM && flag_pic"
"*
@@ -4826,35 +4582,6 @@
"
)
-(define_insn "*arm_movsf_hard_insn"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,f, m,f,r,r,r, m")
- (match_operand:SF 1 "general_operand" "fG,H,mE,f,r,f,r,mE,r"))]
- "TARGET_ARM
- && TARGET_HARD_FLOAT
- && (GET_CODE (operands[0]) != MEM
- || register_operand (operands[1], SFmode))"
- "@
- mvf%?s\\t%0, %1
- mnf%?s\\t%0, #%N1
- ldf%?s\\t%0, %1
- stf%?s\\t%1, %0
- str%?\\t%1, [%|sp, #-4]!\;ldf%?s\\t%0, [%|sp], #4
- stf%?s\\t%1, [%|sp, #-4]!\;ldr%?\\t%0, [%|sp], #4
- mov%?\\t%0, %1
- ldr%?\\t%0, %1\\t%@ float
- str%?\\t%1, %0\\t%@ float"
- [(set_attr "length" "4,4,4,4,8,8,4,4,4")
- (set_attr "predicable" "yes")
- (set_attr "type"
- "ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r,*,load,store1")
- (set_attr "pool_range" "*,*,1024,*,*,*,*,4096,*")
- (set_attr "neg_pool_range" "*,*,1012,*,*,*,*,4084,*")]
-)
-
-;; Exactly the same as above, except that all `f' cases are deleted.
-;; This is necessary to prevent reload from ever trying to use a `f' reg
-;; when -msoft-float.
-
(define_insn "*arm_movsf_soft_insn"
[(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m")
(match_operand:SF 1 "general_operand" "r,mE,r"))]
@@ -4958,44 +4685,6 @@
}"
)
-(define_insn "*movdf_hard_insn"
- [(set (match_operand:DF 0 "nonimmediate_operand"
- "=r,Q,r,m,r, f, f,f, m,!f,!r")
- (match_operand:DF 1 "general_operand"
- "Q, r,r,r,mF,fG,H,mF,f,r, f"))]
- "TARGET_ARM
- && TARGET_HARD_FLOAT
- && (GET_CODE (operands[0]) != MEM
- || register_operand (operands[1], DFmode))"
- "*
- {
- switch (which_alternative)
- {
- default:
- case 0: return \"ldm%?ia\\t%m1, %M0\\t%@ double\";
- case 1: return \"stm%?ia\\t%m0, %M1\\t%@ double\";
- case 2: case 3: case 4: return output_move_double (operands);
- case 5: return \"mvf%?d\\t%0, %1\";
- case 6: return \"mnf%?d\\t%0, #%N1\";
- case 7: return \"ldf%?d\\t%0, %1\";
- case 8: return \"stf%?d\\t%1, %0\";
- case 9: return output_mov_double_fpu_from_arm (operands);
- case 10: return output_mov_double_arm_from_fpu (operands);
- }
- }
- "
- [(set_attr "length" "4,4,8,8,8,4,4,4,4,8,8")
- (set_attr "predicable" "yes")
- (set_attr "type"
- "load,store2,*,store2,load,ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r")
- (set_attr "pool_range" "*,*,*,*,1020,*,*,1024,*,*,*")
- (set_attr "neg_pool_range" "*,*,*,*,1008,*,*,1008,*,*,*")]
-)
-
-;; Software floating point version. This is essentially the same as movdi.
-;; Do not use `f' as a constraint to prevent reload from ever trying to use
-;; an `f' reg.
-
(define_insn "*movdf_soft_insn"
[(set (match_operand:DF 0 "nonimmediate_soft_df_operand" "=r,r,m")
(match_operand:DF 1 "soft_df_operand" "r,mF,r"))]
@@ -5048,36 +4737,6 @@
(set_attr "type" "*,load,store2,load,store2,*")
(set_attr "pool_range" "*,*,*,1020,*,*")]
)
-
-
-;; Saving and restoring the floating point registers in the prologue should
-;; be done in XFmode, even though we don't support that for anything else
-;; (Well, strictly it's 'internal representation', but that's effectively
-;; XFmode).
-
-(define_insn "*movxf_hard_insn"
- [(set (match_operand:XF 0 "nonimmediate_operand" "=f,f,f,m,f,r,r")
- (match_operand:XF 1 "general_operand" "fG,H,m,f,r,f,r"))]
- "TARGET_ARM && TARGET_HARD_FLOAT && reload_completed"
- "*
- switch (which_alternative)
- {
- default:
- case 0: return \"mvf%?e\\t%0, %1\";
- case 1: return \"mnf%?e\\t%0, #%N1\";
- case 2: return \"ldf%?e\\t%0, %1\";
- case 3: return \"stf%?e\\t%1, %0\";
- case 4: return output_mov_long_double_fpu_from_arm (operands);
- case 5: return output_mov_long_double_arm_from_fpu (operands);
- case 6: return output_mov_long_double_arm_from_arm (operands);
- }
- "
- [(set_attr "length" "4,4,4,4,8,8,12")
- (set_attr "predicable" "yes")
- (set_attr "type" "ffarith,ffarith,f_load,f_store,r_mem_f,f_mem_r,*")
- (set_attr "pool_range" "*,*,1024,*,*,*,*")
- (set_attr "neg_pool_range" "*,*,1004,*,*,*,*")]
-)
;; load- and store-multiple insns
@@ -5505,7 +5164,7 @@
(define_expand "cmpsf"
[(match_operand:SF 0 "s_register_operand" "")
- (match_operand:SF 1 "fpu_rhs_operand" "")]
+ (match_operand:SF 1 "fpa_rhs_operand" "")]
"TARGET_ARM && TARGET_ANY_HARD_FLOAT"
"
if (TARGET_CIRRUS && !cirrus_fp_register (operands[1], SFmode))
@@ -5519,7 +5178,7 @@
(define_expand "cmpdf"
[(match_operand:DF 0 "s_register_operand" "")
- (match_operand:DF 1 "fpu_rhs_operand" "")]
+ (match_operand:DF 1 "fpa_rhs_operand" "")]
"TARGET_ARM && TARGET_ANY_HARD_FLOAT"
"
if (TARGET_CIRRUS && !cirrus_fp_register (operands[1], DFmode))
@@ -5581,54 +5240,6 @@
]
)
-(define_insn "*cmpsf_insn"
- [(set (reg:CCFP CC_REGNUM)
- (compare:CCFP (match_operand:SF 0 "s_register_operand" "f,f")
- (match_operand:SF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?\\t%0, %1
- cnf%?\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmpdf_insn"
- [(set (reg:CCFP CC_REGNUM)
- (compare:CCFP (match_operand:DF 0 "s_register_operand" "f,f")
- (match_operand:DF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?\\t%0, %1
- cnf%?\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmpesfdf_df"
- [(set (reg:CCFP CC_REGNUM)
- (compare:CCFP (float_extend:DF
- (match_operand:SF 0 "s_register_operand" "f,f"))
- (match_operand:DF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?\\t%0, %1
- cnf%?\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmpdf_esfdf"
- [(set (reg:CCFP CC_REGNUM)
- (compare:CCFP (match_operand:DF 0 "s_register_operand" "f")
- (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "cmf%?\\t%0, %1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
;; Cirrus SF compare instruction
(define_insn "*cirrus_cmpsf"
[(set (reg:CCFP CC_REGNUM)
@@ -5672,54 +5283,6 @@
(set_attr "cirrus" "compare")]
)
-(define_insn "*cmpsf_trap"
- [(set (reg:CCFPE CC_REGNUM)
- (compare:CCFPE (match_operand:SF 0 "s_register_operand" "f,f")
- (match_operand:SF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?e\\t%0, %1
- cnf%?e\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmpdf_trap"
- [(set (reg:CCFPE CC_REGNUM)
- (compare:CCFPE (match_operand:DF 0 "s_register_operand" "f,f")
- (match_operand:DF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?e\\t%0, %1
- cnf%?e\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmp_esfdf_df_trap"
- [(set (reg:CCFPE CC_REGNUM)
- (compare:CCFPE (float_extend:DF
- (match_operand:SF 0 "s_register_operand" "f,f"))
- (match_operand:DF 1 "fpu_add_operand" "fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- cmf%?e\\t%0, %1
- cnf%?e\\t%0, #%N1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
-(define_insn "*cmp_df_esfdf_trap"
- [(set (reg:CCFPE CC_REGNUM)
- (compare:CCFPE (match_operand:DF 0 "s_register_operand" "f")
- (float_extend:DF
- (match_operand:SF 1 "s_register_operand" "f"))))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "cmf%?e\\t%0, %1"
- [(set_attr "conds" "set")
- (set_attr "type" "f_2_r")]
-)
-
; This insn allows redundant compares to be removed by cse, nothing should
; ever appear in the output file since (set (reg x) (reg x)) is a no-op that
; is deleted later on. The match_dup will match the mode here, so that
@@ -6016,77 +5579,77 @@
; scc insns
(define_expand "seq"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(eq:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (EQ, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sne"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(ne:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (NE, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sgt"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(gt:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (GT, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sle"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(le:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (LE, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sge"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(ge:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (GE, arm_compare_op0, arm_compare_op1);"
)
(define_expand "slt"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(lt:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (LT, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sgtu"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(gtu:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (GTU, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sleu"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(leu:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (LEU, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sgeu"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(geu:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (GEU, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sltu"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(ltu:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM"
"operands[1] = arm_gen_compare_reg (LTU, arm_compare_op0, arm_compare_op1);"
)
(define_expand "sunordered"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(unordered:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (UNORDERED, arm_compare_op0,
@@ -6094,7 +5657,7 @@
)
(define_expand "sordered"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(ordered:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (ORDERED, arm_compare_op0,
@@ -6102,7 +5665,7 @@
)
(define_expand "sungt"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(ungt:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (UNGT, arm_compare_op0,
@@ -6110,7 +5673,7 @@
)
(define_expand "sunge"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(unge:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (UNGE, arm_compare_op0,
@@ -6118,7 +5681,7 @@
)
(define_expand "sunlt"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(unlt:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (UNLT, arm_compare_op0,
@@ -6126,7 +5689,7 @@
)
(define_expand "sunle"
- [(set (match_operand:SI 0 "s_register_operand" "=r")
+ [(set (match_operand:SI 0 "s_register_operand" "")
(unle:SI (match_dup 1) (const_int 0)))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"operands[1] = arm_gen_compare_reg (UNLE, arm_compare_op0,
@@ -6137,14 +5700,14 @@
;;; simple ARM instructions.
;
; (define_expand "suneq"
-; [(set (match_operand:SI 0 "s_register_operand" "=r")
+; [(set (match_operand:SI 0 "s_register_operand" "")
; (uneq:SI (match_dup 1) (const_int 0)))]
; "TARGET_ARM && TARGET_HARD_FLOAT"
; "abort ();"
; )
;
; (define_expand "sltgt"
-; [(set (match_operand:SI 0 "s_register_operand" "=r")
+; [(set (match_operand:SI 0 "s_register_operand" "")
; (ltgt:SI (match_dup 1) (const_int 0)))]
; "TARGET_ARM && TARGET_HARD_FLOAT"
; "abort ();"
@@ -6219,7 +5782,7 @@
/* When compiling for SOFT_FLOAT, ensure both arms are in registers.
Otherwise, ensure it is a valid FP add operand */
if ((!TARGET_HARD_FLOAT)
- || (!fpu_add_operand (operands[3], SFmode)))
+ || (!fpa_add_operand (operands[3], SFmode)))
operands[3] = force_reg (SFmode, operands[3]);
ccreg = arm_gen_compare_reg (code, arm_compare_op0, arm_compare_op1);
@@ -6231,7 +5794,7 @@
[(set (match_operand:DF 0 "s_register_operand" "")
(if_then_else:DF (match_operand 1 "arm_comparison_operator" "")
(match_operand:DF 2 "s_register_operand" "")
- (match_operand:DF 3 "fpu_add_operand" "")))]
+ (match_operand:DF 3 "fpa_add_operand" "")))]
"TARGET_ARM && TARGET_HARD_FLOAT"
"
{
@@ -6267,28 +5830,6 @@
(set_attr "conds" "use")]
)
-(define_insn "*movsfcc_hard_insn"
- [(set (match_operand:SF 0 "s_register_operand" "=f,f,f,f,f,f,f,f")
- (if_then_else:SF
- (match_operator 3 "arm_comparison_operator"
- [(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:SF 1 "fpu_add_operand" "0,0,fG,H,fG,fG,H,H")
- (match_operand:SF 2 "fpu_add_operand" "fG,H,0,0,fG,H,fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- mvf%D3s\\t%0, %2
- mnf%D3s\\t%0, #%N2
- mvf%d3s\\t%0, %1
- mnf%d3s\\t%0, #%N1
- mvf%d3s\\t%0, %1\;mvf%D3s\\t%0, %2
- mvf%d3s\\t%0, %1\;mnf%D3s\\t%0, #%N2
- mnf%d3s\\t%0, #%N1\;mvf%D3s\\t%0, %2
- mnf%d3s\\t%0, #%N1\;mnf%D3s\\t%0, #%N2"
- [(set_attr "length" "4,4,4,4,8,8,8,8")
- (set_attr "type" "ffarith")
- (set_attr "conds" "use")]
-)
-
(define_insn "*movsfcc_soft_insn"
[(set (match_operand:SF 0 "s_register_operand" "=r,r")
(if_then_else:SF (match_operator 3 "arm_comparison_operator"
@@ -6302,28 +5843,6 @@
[(set_attr "conds" "use")]
)
-(define_insn "*movdfcc_insn"
- [(set (match_operand:DF 0 "s_register_operand" "=f,f,f,f,f,f,f,f")
- (if_then_else:DF
- (match_operator 3 "arm_comparison_operator"
- [(match_operand 4 "cc_register" "") (const_int 0)])
- (match_operand:DF 1 "fpu_add_operand" "0,0,fG,H,fG,fG,H,H")
- (match_operand:DF 2 "fpu_add_operand" "fG,H,0,0,fG,H,fG,H")))]
- "TARGET_ARM && TARGET_HARD_FLOAT"
- "@
- mvf%D3d\\t%0, %2
- mnf%D3d\\t%0, #%N2
- mvf%d3d\\t%0, %1
- mnf%d3d\\t%0, #%N1
- mvf%d3d\\t%0, %1\;mvf%D3d\\t%0, %2
- mvf%d3d\\t%0, %1\;mnf%D3d\\t%0, #%N2
- mnf%d3d\\t%0, #%N1\;mvf%D3d\\t%0, %2
- mnf%d3d\\t%0, #%N1\;mnf%D3d\\t%0, #%N2"
- [(set_attr "length" "4,4,4,4,8,8,8,8")
- (set_attr "type" "ffarith")
- (set_attr "conds" "use")]
-)
-
;; Jump and linkage insns
@@ -8613,9 +8132,9 @@
)
(define_expand "eh_epilogue"
- [(use (match_operand:SI 0 "register_operand" "r"))
- (use (match_operand:SI 1 "register_operand" "r"))
- (use (match_operand:SI 2 "register_operand" "r"))]
+ [(use (match_operand:SI 0 "register_operand" ""))
+ (use (match_operand:SI 1 "register_operand" ""))
+ (use (match_operand:SI 2 "register_operand" ""))]
"TARGET_EITHER"
"
{
@@ -8966,7 +8485,7 @@
;; Miscellaneous Thumb patterns
(define_expand "tablejump"
- [(parallel [(set (pc) (match_operand:SI 0 "register_operand" "l*r"))
+ [(parallel [(set (pc) (match_operand:SI 0 "register_operand" ""))
(use (label_ref (match_operand 1 "" "")))])]
"TARGET_THUMB"
"
@@ -9062,3 +8581,8 @@
""
"%@ %0 needed for prologue"
)
+
+;; Load the FPA co-processor patterns
+(include "fpa.md")
+;; Load the Maverick co-processor patterns
+(include "cirrus.md")
diff --git a/gcc/config/arm/cirrus.md b/gcc/config/arm/cirrus.md
index 07a40a25f95..0da8469ddd2 100644
--- a/gcc/config/arm/cirrus.md
+++ b/gcc/config/arm/cirrus.md
@@ -50,18 +50,6 @@
(set_attr "cirrus" "normal")]
)
-;; define_insn replaced by define_expand and define_insn
-(define_expand "addsf3"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (plus:SF (match_operand:SF 1 "s_register_operand" "")
- (match_operand:SF 2 "fpu_add_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS
- && !cirrus_fp_register (operands[2], SFmode))
- operands[2] = force_reg (SFmode, operands[2]);
-")
-
(define_insn "*cirrus_addsf3"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(plus:SF (match_operand:SF 1 "cirrus_fp_register" "v")
@@ -72,18 +60,6 @@
(set_attr "cirrus" "normal")]
)
-;; define_insn replaced by define_expand and define_insn
-(define_expand "adddf3"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (plus:DF (match_operand:DF 1 "s_register_operand" "")
- (match_operand:DF 2 "fpu_add_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS
- && !cirrus_fp_register (operands[2], DFmode))
- operands[2] = force_reg (DFmode, operands[2]);
-")
-
(define_insn "*cirrus_adddf3"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(plus:DF (match_operand:DF 1 "cirrus_fp_register" "v")
@@ -114,21 +90,6 @@
(set_attr "cirrus" "normal")]
)
-(define_expand "subsf3"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (minus:SF (match_operand:SF 1 "fpu_rhs_operand" "")
- (match_operand:SF 2 "fpu_rhs_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- if (!cirrus_fp_register (operands[1], SFmode))
- operands[1] = force_reg (SFmode, operands[1]);
- if (!cirrus_fp_register (operands[2], SFmode))
- operands[2] = force_reg (SFmode, operands[2]);
- }
-")
-
(define_insn "*cirrus_subsf3"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(minus:SF (match_operand:SF 1 "cirrus_fp_register" "v")
@@ -139,21 +100,6 @@
(set_attr "cirrus" "normal")]
)
-(define_expand "subdf3"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (minus:DF (match_operand:DF 1 "fpu_rhs_operand" "")
- (match_operand:DF 2 "fpu_rhs_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- if (!cirrus_fp_register (operands[1], DFmode))
- operands[1] = force_reg (DFmode, operands[1]);
- if (!cirrus_fp_register (operands[2], DFmode))
- operands[2] = force_reg (DFmode, operands[2]);
- }
-")
-
(define_insn "*cirrus_subdf3"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(minus:DF (match_operand:DF 1 "cirrus_fp_register" "v")
@@ -209,17 +155,6 @@
(set_attr "cirrus" "normal")]
)
-(define_expand "mulsf3"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (mult:SF (match_operand:SF 1 "s_register_operand" "")
- (match_operand:SF 2 "fpu_rhs_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS
- && !cirrus_fp_register (operands[2], SFmode))
- operands[2] = force_reg (SFmode, operands[2]);
-")
-
(define_insn "*cirrus_mulsf3"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(mult:SF (match_operand:SF 1 "cirrus_fp_register" "v")
@@ -230,17 +165,6 @@
(set_attr "cirrus" "normal")]
)
-(define_expand "muldf3"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (mult:DF (match_operand:DF 1 "s_register_operand" "")
- (match_operand:DF 2 "fpu_rhs_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS
- && !cirrus_fp_register (operands[2], DFmode))
- operands[2] = force_reg (DFmode, operands[2]);
-")
-
(define_insn "*cirrus_muldf3"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(mult:DF (match_operand:DF 1 "cirrus_fp_register" "v")
@@ -331,13 +255,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "negsf2"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (neg:SF (match_operand:SF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- ""
-)
-
(define_insn "*cirrus_negsf2"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(neg:SF (match_operand:SF 1 "cirrus_fp_register" "v")))]
@@ -346,12 +263,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "negdf2"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (neg:DF (match_operand:DF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "")
-
(define_insn "*cirrus_negdf2"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(neg:DF (match_operand:DF 1 "cirrus_fp_register" "v")))]
@@ -360,14 +271,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "abssi2"
- [(parallel
- [(set (match_operand:SI 0 "s_register_operand" "")
- (abs:SI (match_operand:SI 1 "s_register_operand" "")))
- (clobber (reg:CC CC_REGNUM))])]
- "TARGET_ARM"
- "")
-
;; This doesn't really clobber the condition codes either.
(define_insn "*cirrus_abssi2"
[(set (match_operand:SI 0 "cirrus_fp_register" "=v")
@@ -378,12 +281,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "abssf2"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (abs:SF (match_operand:SF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "")
-
(define_insn "*cirrus_abssf2"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(abs:SF (match_operand:SF 1 "cirrus_fp_register" "v")))]
@@ -392,12 +289,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "absdf2"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (abs:DF (match_operand:DF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "")
-
(define_insn "*cirrus_absdf2"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(abs:DF (match_operand:DF 1 "cirrus_fp_register" "v")))]
@@ -406,18 +297,6 @@
[(set_attr "cirrus" "normal")]
)
-(define_expand "floatsisf2"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (float:SF (match_operand:SI 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- emit_insn (gen_cirrus_floatsisf2 (operands[0], operands[1]));
- DONE;
- }
-")
-
;; Convert Cirrus-SI to Cirrus-SF
(define_insn "cirrus_floatsisf2"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
@@ -429,18 +308,6 @@
(set_attr "cirrus" "move")]
)
-(define_expand "floatsidf2"
- [(set (match_operand:DF 0 "s_register_operand" "")
- (float:DF (match_operand:SI 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- emit_insn (gen_cirrus_floatsidf2 (operands[0], operands[1]));
- DONE;
- }
-")
-
(define_insn "cirrus_floatsidf2"
[(set (match_operand:DF 0 "cirrus_fp_register" "=v")
(float:DF (match_operand:SI 1 "s_register_operand" "r")))
@@ -465,25 +332,9 @@
"cfcvt64d%?\\t%V0, %V1"
[(set_attr "cirrus" "normal")])
-(define_expand "fix_truncsfsi2"
- [(set (match_operand:SI 0 "s_register_operand" "")
- (fix:SI (match_operand:SF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- if (!cirrus_fp_register (operands[0], SImode))
- operands[0] = force_reg (SImode, operands[0]);
- if (!cirrus_fp_register (operands[1], SFmode))
- operands[1] = force_reg (SFmode, operands[0]);
- emit_insn (gen_cirrus_truncsfsi2 (operands[0], operands[1]));
- DONE;
- }
-")
-
(define_insn "cirrus_truncsfsi2"
[(set (match_operand:SI 0 "s_register_operand" "=r")
- (fix:SI (match_operand:SF 1 "cirrus_fp_register" "v")))
+ (fix:SI (fix:SF (match_operand:SF 1 "cirrus_fp_register" "v"))))
(clobber (match_scratch:DF 2 "=v"))]
"TARGET_ARM && TARGET_CIRRUS"
"cftruncs32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2"
@@ -491,37 +342,15 @@
(set_attr "cirrus" "normal")]
)
-(define_expand "fix_truncdfsi2"
- [(set (match_operand:SI 0 "s_register_operand" "")
- (fix:SI (match_operand:DF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- "
- if (TARGET_CIRRUS)
- {
- if (!cirrus_fp_register (operands[1], DFmode))
- operands[1] = force_reg (DFmode, operands[0]);
- emit_insn (gen_cirrus_truncdfsi2 (operands[0], operands[1]));
- DONE;
- }
-")
-
(define_insn "cirrus_truncdfsi2"
[(set (match_operand:SI 0 "s_register_operand" "=r")
- (fix:SI (match_operand:DF 1 "cirrus_fp_register" "v")))
+ (fix:SI (fix:DF (match_operand:DF 1 "cirrus_fp_register" "v"))))
(clobber (match_scratch:DF 2 "=v"))]
"TARGET_ARM && TARGET_CIRRUS"
"cftruncd32%?\\t%Y2, %V1\;cfmvr64l%?\\t%0, %Z2"
[(set_attr "length" "8")]
)
-(define_expand "truncdfsf2"
- [(set (match_operand:SF 0 "s_register_operand" "")
- (float_truncate:SF
- (match_operand:DF 1 "s_register_operand" "")))]
- "TARGET_ARM && TARGET_ANY_HARD_FLOAT"
- ""
-)
-
(define_insn "*cirrus_truncdfsf2"
[(set (match_operand:SF 0 "cirrus_fp_register" "=v")
(float_truncate:SF
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index e3f7b00ec09..ec5c69f36ff 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -111,8 +111,8 @@
while (0)
/* NWFPE always understands FPA instructions. */
-#undef FP_DEFAULT
-#define FP_DEFAULT FP_SOFT3
+#undef FPUTYPE_DEFAULT
+#define FPUTYPE_DEFAULT FPUTYPE_FPA_EMU3
/* Call the function profiler with a given profile label. */
#undef ARM_FUNCTION_PROFILER
diff --git a/gcc/config/arm/pe.h b/gcc/config/arm/pe.h
index 6fc2bed7c83..1e822afa9e8 100644
--- a/gcc/config/arm/pe.h
+++ b/gcc/config/arm/pe.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for ARM with PE obj format.
- Copyright (C) 1995, 1996, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
Contributed by Doug Evans (dje@cygnus.com).
This file is part of GCC.
@@ -74,25 +74,12 @@
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 16
-/* Same as arm.h except r10 is call-saved, not fixed. */
-#undef FIXED_REGISTERS
-#define FIXED_REGISTERS \
-{ \
- 0,0,0,0,0,0,0,0, \
- 0,0,0,1,0,1,0,1, \
- 0,0,0,0,0,0,0,0, \
- 1,1,1 \
-}
+/* r11 is fixed. */
+#undef SUBTARGET_CONDITIONAL_REGISTER_USAGE
+#define SUBTARGET_CONDITIONAL_REGISTER_USAGE \
+ fixed_regs [11] = 1; \
+ call_used_regs [11] = 1;
-/* Same as arm.h except r10 is call-saved, not fixed. */
-#undef CALL_USED_REGISTERS
-#define CALL_USED_REGISTERS \
-{ \
- 1,1,1,1,0,0,0,0, \
- 0,0,0,1,1,1,1,1, \
- 1,1,1,1,0,0,0,0, \
- 1,1,1 \
-}
/* Define this macro if in some cases global symbols from one translation
unit may not be bound to undefined symbols in another translation unit
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 747d80d1d16..2528ed3a299 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -1,5 +1,6 @@
/* Definitions for non-Linux based ARM systems using ELF
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
Contributed by Catherine Moore <clm@cygnus.com>
This file is part of GCC.
@@ -61,8 +62,6 @@
else \
bss_section (); \
\
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
- \
ASM_OUTPUT_ALIGN (FILE, floor_log2 (ALIGN / BITS_PER_UNIT)); \
\
last_assemble_variable_decl = DECL; \
diff --git a/gcc/config/c4x/c4x-c.c b/gcc/config/c4x/c4x-c.c
index 5b958a2ba97..8f466fb21c2 100644
--- a/gcc/config/c4x/c4x-c.c
+++ b/gcc/config/c4x/c4x-c.c
@@ -5,20 +5,20 @@
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/c4x/c4x-modes.def b/gcc/config/c4x/c4x-modes.def
index c2cbf3099b8..50798069cc6 100644
--- a/gcc/config/c4x/c4x-modes.def
+++ b/gcc/config/c4x/c4x-modes.def
@@ -4,20 +4,20 @@
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/c4x/c4x-protos.h b/gcc/config/c4x/c4x-protos.h
index 104d0e5c22d..341e46739af 100644
--- a/gcc/config/c4x/c4x-protos.h
+++ b/gcc/config/c4x/c4x-protos.h
@@ -5,20 +5,20 @@
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/c4x/c4x.c b/gcc/config/c4x/c4x.c
index 77d3e8250ec..ab77fc527db 100644
--- a/gcc/config/c4x/c4x.c
+++ b/gcc/config/c4x/c4x.c
@@ -5,20 +5,20 @@
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -5025,7 +5025,7 @@ c4x_expand_builtin (exp, target, subtarget, mode, ignore)
break;
arg0 = TREE_VALUE (arglist);
if (TREE_CODE (arg0) == VAR_DECL || TREE_CODE (arg0) == PARM_DECL)
- put_var_into_stack (arg0);
+ put_var_into_stack (arg0, /*rescan=*/true);
r0 = expand_expr (arg0, NULL_RTX, QFmode, 0);
r0 = protect_from_queue (r0, 0);
if (register_operand (r0, QFmode))
diff --git a/gcc/config/c4x/c4x.h b/gcc/config/c4x/c4x.h
index 68c7db54fbc..a68e5e27e4f 100644
--- a/gcc/config/c4x/c4x.h
+++ b/gcc/config/c4x/c4x.h
@@ -5,20 +5,20 @@
Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/c4x/c4x.md b/gcc/config/c4x/c4x.md
index de1bb60971d..07e140b0506 100644
--- a/gcc/config/c4x/c4x.md
+++ b/gcc/config/c4x/c4x.md
@@ -1,24 +1,24 @@
-;; Machine description for the TMS320C[34]x for GNU C compiler
+;; Machine description for the TMS320C[34]x for GCC
;; Copyright (C) 1994, 1995, 1996, 1997, 1998,
;; 1999, 2000, 2002 Free Software Foundation, Inc.
;; Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
;; and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl)
-;; This file is part of GNU CC.
+;; This file is part of GCC.
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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.
diff --git a/gcc/config/c4x/libgcc.S b/gcc/config/c4x/libgcc.S
index 0335a0e217e..43ecba905a2 100644
--- a/gcc/config/c4x/libgcc.S
+++ b/gcc/config/c4x/libgcc.S
@@ -5,9 +5,9 @@
and Herman Ten Brugge (Haj.Ten.Brugge@net.HCC.nl).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify it
+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.
diff --git a/gcc/config/c4x/rtems.h b/gcc/config/c4x/rtems.h
index d51d37d810c..fae7f5922b9 100644
--- a/gcc/config/c4x/rtems.h
+++ b/gcc/config/c4x/rtems.h
@@ -2,20 +2,20 @@
Copyright (C) 1996, 1997, 1999, 2002 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/c4x/t-c4x b/gcc/config/c4x/t-c4x
index 0ac2c7f1782..befadccc39e 100644
--- a/gcc/config/c4x/t-c4x
+++ b/gcc/config/c4x/t-c4x
@@ -13,7 +13,7 @@ c4x-c.o: $(srcdir)/config/c4x/c4x-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
MULTILIB_OPTIONS = m30 msmall mmemparm
MULTILIB_DIRNAMES = c3x small mem
-MULTILIB_MATCHES = m30=mcpu?30 m30=mcpu?31 m30=mcpu?32 m30=m31 m30=m32
+MULTILIB_MATCHES = m30=mcpu?30 m30=mcpu?31 m30=mcpu?32 m30=mcpu?33 m30=m31 m30=m32 m30=m33
MULTILIB_EXCEPTIONS =
MULTILIB_EXTRA_OPTS =
LIBGCC = stmp-multilib
diff --git a/gcc/config/cris/aout.h b/gcc/config/cris/aout.h
index 1484499ff71..1c925f93bcf 100644
--- a/gcc/config/cris/aout.h
+++ b/gcc/config/cris/aout.h
@@ -48,6 +48,9 @@ Boston, MA 02111-1307, USA. */
%{!sim:%{pg:gcrt0.o%s}\
%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}}}"
+/* Override cris.h define. */
+#undef ENDFILE_SPEC
+
/* Which library to get. The only difference from the default is to get
libsc.a if -sim is given to the driver. Repeat -lc -lsysX
{X=sim,linux}, because libsysX needs (at least) errno from libc, and
@@ -64,8 +67,7 @@ Boston, MA 02111-1307, USA. */
#undef CRIS_CPP_SUBTARGET_SPEC
#define CRIS_CPP_SUBTARGET_SPEC \
- "-D__AOUT__\
- %{melinux:-D__gnu_linux__ -D__linux__ -D__unix__ -D__elinux__ -D__uclinux__\
+ "%{melinux:-D__gnu_linux__ -D__linux__ -D__unix__ -D__elinux__ -D__uclinux__\
%{!nostdinc:\
%{!mbest-lib-options:%{isystem*}}\
-isystem elinux/include%s\
@@ -118,6 +120,19 @@ Boston, MA 02111-1307, USA. */
#undef CRIS_SUBTARGET_DEFAULT
#define CRIS_SUBTARGET_DEFAULT 0
+
+/* Node: Run-time Target */
+
+/* For the cris-*-aout subtarget. */
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__AOUT__"); \
+ } \
+ while (0)
+
+
/* Node: Storage Layout */
/* We can align to 16 bits (only) with CRIS a.out. */
@@ -344,6 +359,13 @@ Boston, MA 02111-1307, USA. */
} \
while (0)
+/* The configure machinery invokes the assembler without options, which is
+ not how gcc invokes it. Without options, the multi-target assembler
+ will probably be found, which is ELF by default. To counter that, we
+ need to override ELF auto-host.h config stuff which we know collides
+ with a.out. */
+#undef HAVE_GAS_HIDDEN
+
/* Node: Alignment Output */
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index 7e28e5b578f..ed3bc9eacbc 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -337,6 +337,22 @@ cris_operand_extend_operator (x, mode)
&& (code == PLUS || code == MINUS || code == UMIN));
}
+/* Check if MODE is same as mode for X, and X is PLUS or MINUS. */
+
+int
+cris_additive_operand_extend_operator (x, mode)
+ rtx x;
+ enum machine_mode mode;
+{
+ enum rtx_code code = GET_CODE (x);
+
+ if (mode == VOIDmode)
+ mode = GET_MODE (x);
+
+ return (GET_MODE (x) == mode
+ && (code == PLUS || code == MINUS));
+}
+
/* Check to see if MODE is same as mode for X, and X is SIGN_EXTEND or
ZERO_EXTEND. */
diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h
index 78e62d11ade..98a27a643b3 100644
--- a/gcc/config/cris/cris.h
+++ b/gcc/config/cris/cris.h
@@ -1,5 +1,5 @@
/* Definitions for GCC. Part of the machine description for CRIS.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Axis Communications. Written by Hans-Peter Nilsson.
This file is part of GCC.
@@ -115,18 +115,8 @@ extern const char *cris_elinux_stacksize_str;
/* Also provide canonical vN definitions when user specifies an alias.
Note that -melf overrides -maout. */
-/* The `-$' is here mostly due to the integrated preprocessor not
- handling the builtin expansion of "#define __REGISTER_PREFIX__ $"
- gracefully. This is slightly redundant although not incorrect.
- We're quite alone defining REGISTER_PREFIX as "$" so it's unlikely
- someone will fight for us. This year in the mountains.
- Note that for -melinux and -mlinux, command-line -isystem options are
- emitted both before and after the synthesized one. We can't remove all
- of them: a %<isystem will only remove the first one and %<isystem*
- will not do TRT. Those extra occurrences are harmless anyway. */
#define CPP_SPEC \
- "-$ -D__CRIS_ABI_version=2\
- %{mtune=*:-D__tune_%* %{mtune=v*:-D__CRIS_arch_tune=%*}}\
+ "%{mtune=*:-D__tune_%* %{mtune=v*:-D__CRIS_arch_tune=%*}}\
%{mtune=etrax4:-D__tune_v3 -D__CRIS_arch_tune=3}\
%{mtune=etrax100:-D__tune_v8 -D__CRIS_arch_tune=8}\
%{mtune=svinto:-D__tune_v8 -D__CRIS_arch_tune=8}\
@@ -150,8 +140,7 @@ extern const char *cris_elinux_stacksize_str;
/* For the cris-*-elf subtarget. */
#define CRIS_CPP_SUBTARGET_SPEC \
- "-D__ELF__\
- %{mbest-lib-options:\
+ "%{mbest-lib-options:\
%{!moverride-best-lib-options:\
%{!march=*:%{!metrax*:%{!mcpu=*:-D__tune_v10 -D__CRIS_arch_tune=10}}}}}"
@@ -255,8 +244,23 @@ extern const char *cris_elinux_stacksize_str;
/* Node: Run-time Target */
-/* Only keep the non-varying ones here. */
-#define CPP_PREDEFINES "-Dcris -DCRIS -DGNU_CRIS"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define_std ("cris"); \
+ builtin_define_std ("CRIS"); \
+ builtin_define_std ("GNU_CRIS"); \
+ builtin_define ("__CRIS_ABI_version=2"); \
+ } \
+ while (0)
+
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__ELF__"); \
+ } \
+ while (0)
+
/* This needs to be at least 32 bits. */
extern int target_flags;
@@ -956,9 +960,8 @@ enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES};
struct cum_args {int regs;};
/* The regs member is an integer, the number of arguments got into
- registers so far, and lib is nonzero if init_cumulative_args was
- found to generate a call to a library function. */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
+ registers so far. */
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
((CUM).regs = 0)
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \
@@ -1246,8 +1249,7 @@ struct cum_args {int regs;};
FIXME: Check and adjust for gcc-2.9x. */
#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {}
-/* Functionality import from EGCS.
- Kludge to solve Axis-990219: Work around imperfection in
+/* Kludge to solve Axis-990219: Work around imperfection in
reload_load_address1:
(plus (sign_extend (mem:qi (reg))) (reg))
should be reloaded as (plus (reg) (reg)), not
@@ -1255,9 +1257,8 @@ struct cum_args {int regs;};
There are no checks that reload_load_address_1 "reloads"
addresses correctly, so invalidness is not caught or
corrected.
- When the right thing happens, the "something_reloaded" kludge can
- be removed. The right thing does not appear to happen for
- EGCS CVS as of this date (above). */
+ When the right thing happens in reload, the kludge can
+ be removed; still not as of 2003-02-27. */
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
do \
@@ -1506,11 +1507,6 @@ call_ ## FUNC (void) \
#define SUPPORTS_WEAK 1
-/* FIXME: This macro isn't documented, but this would probably be an
- appropriate location. It's only used in crtstuff.c, else we'd have to
- handle (to #undef or ignore it) in a.out. */
-#define HAVE_GAS_HIDDEN 1
-
/* Remove any previous definition (elfos.h). */
#undef ASM_GENERATE_INTERNAL_LABEL
#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
@@ -1647,6 +1643,8 @@ call_ ## FUNC (void) \
{PLUS, IOR, AND, UMIN}}, \
{"cris_operand_extend_operator", \
{PLUS, MINUS, UMIN}}, \
+ {"cris_additive_operand_extend_operator", \
+ {PLUS, MINUS}}, \
{"cris_extend_operator", \
{ZERO_EXTEND, SIGN_EXTEND}}, \
{"cris_plus_or_bound_operator", \
diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md
index 1683192189c..2ec2502b1e5 100644
--- a/gcc/config/cris/cris.md
+++ b/gcc/config/cris/cris.md
@@ -1,5 +1,5 @@
;; GCC machine description for CRIS cpu cores.
-;; Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
;; Contributed by Axis Communications.
;; This file is part of GCC.
@@ -34,7 +34,7 @@
;; gcc-2.7.2 (and problably not on gcc-2.8.1), relating to that when a
;; constant is substituted into an operand, the actual mode must be
;; deduced from the pattern. There is reasonable hope that that has been
-;; fixed in egcs post 1.1.1, so FIXME: try again.
+;; fixed, so FIXME: try again.
;; You will notice that three-operand alternatives ("=r", "r", "!To")
;; are marked with a "!" constraint modifier to avoid being reloaded
@@ -1886,7 +1886,7 @@
(define_insn "*extopqihi_side_biap"
[(set (match_operand:HI 0 "register_operand" "=r,r")
(match_operator:HI
- 6 "cris_operand_extend_operator"
+ 6 "cris_additive_operand_extend_operator"
[(match_operand:HI 1 "register_operand" "0,0")
(match_operator:HI
7 "cris_extend_operator"
@@ -1898,8 +1898,7 @@
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND)
- && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
+ "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
%x6%e7.%m7 [%5=%4+%2%T3],%0")
@@ -1921,7 +1920,7 @@
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND)
+ "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND)
&& cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
@@ -1944,7 +1943,7 @@
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND)
+ "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[7]) == ZERO_EXTEND)
&& cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
@@ -1959,7 +1958,7 @@
(define_insn "*extopqihi_side"
[(set (match_operand:HI 0 "register_operand" "=r,r,r")
(match_operator:HI
- 5 "cris_operand_extend_operator"
+ 5 "cris_additive_operand_extend_operator"
[(match_operand:HI 1 "register_operand" "0,0,0")
(match_operator:HI
6 "cris_extend_operator"
@@ -1970,8 +1969,7 @@
(set (match_operand:SI 4 "register_operand" "=*2,r,r")
(plus:SI (match_dup 2)
(match_dup 3)))]
- "(GET_CODE (operands[5]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
- && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)"
+ "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)"
"*
{
if (which_alternative == 0
@@ -2053,28 +2051,25 @@
;; QImode to HImode
;; FIXME: GCC should widen.
-;; FIXME: These could have anonymous mode for operand 0.
(define_insn "*extopqihi_swap_side_biap"
[(set (match_operand:HI 0 "register_operand" "=r,r")
- (match_operator:HI
- 7 "cris_plus_or_bound_operator"
- [(match_operator:HI
- 6 "cris_extend_operator"
- [(mem:QI (plus:SI
- (mult:SI (match_operand:SI 2 "register_operand" "r,r")
- (match_operand:SI 3 "const_int_operand" "n,n"))
- (match_operand:SI 4 "register_operand" "r,r")))])
- (match_operand:HI 1 "register_operand" "0,0")]))
+ (plus:HI
+ (match_operator:HI
+ 6 "cris_extend_operator"
+ [(mem:QI (plus:SI
+ (mult:SI (match_operand:SI 2 "register_operand" "r,r")
+ (match_operand:SI 3 "const_int_operand" "n,n"))
+ (match_operand:SI 4 "register_operand" "r,r")))])
+ (match_operand:HI 1 "register_operand" "0,0")))
(set (match_operand:SI 5 "register_operand" "=*4,r")
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
- && cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
+ "cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
- %x7%e6.%m6 [%5=%4+%2%T3],%0")
+ add%e6.b [%5=%4+%2%T3],%0")
;; QImode to SImode
@@ -2093,7 +2088,7 @@
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
+ "(GET_CODE (operands[7]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
&& cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
@@ -2115,7 +2110,7 @@
(plus:SI (mult:SI (match_dup 2)
(match_dup 3))
(match_dup 4)))]
- "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
+ "(GET_CODE (operands[7]) != UMIN || GET_CODE (operands[6]) == ZERO_EXTEND)
&& cris_side_effect_mode_ok (MULT, operands, 5, 4, 2, 3, 0)"
"@
#
@@ -2129,19 +2124,17 @@
(define_insn "*extopqihi_swap_side"
[(set (match_operand:HI 0 "register_operand" "=r,r,r")
- (match_operator:HI
- 6 "cris_plus_or_bound_operator"
- [(match_operator:HI
- 5 "cris_extend_operator"
- [(mem:QI (plus:SI
- (match_operand:SI 2 "cris_bdap_operand" "%r,r,r")
- (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))])
- (match_operand:HI 1 "register_operand" "0,0,0")]))
+ (plus:HI
+ (match_operator:HI
+ 5 "cris_extend_operator"
+ [(mem:QI (plus:SI
+ (match_operand:SI 2 "cris_bdap_operand" "%r,r,r")
+ (match_operand:SI 3 "cris_bdap_operand" "r>Ri,r,>Ri")))])
+ (match_operand:HI 1 "register_operand" "0,0,0")))
(set (match_operand:SI 4 "register_operand" "=*2,r,r")
(plus:SI (match_dup 2)
(match_dup 3)))]
- "(GET_CODE (operands[6]) != UMIN || GET_CODE (operands[5]) == ZERO_EXTEND)
- && cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)"
+ "cris_side_effect_mode_ok (PLUS, operands, 4, 2, 3, -1, 0)"
"*
{
if (which_alternative == 0
@@ -2151,7 +2144,7 @@
|| CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'N')
|| CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'J')))
return \"#\";
- return \"%x6%e5.%m5 [%4=%2%S3],%0\";
+ return \"add%e5.b [%4=%2%S3],%0\";
}")
;; QImode to SImode
@@ -2221,13 +2214,12 @@
(define_insn "*extopqihi"
[(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
(match_operator:HI
- 3 "cris_operand_extend_operator"
+ 3 "cris_additive_operand_extend_operator"
[(match_operand:HI 1 "register_operand" "0,0,0,r")
(match_operator:HI
4 "cris_extend_operator"
[(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])]))]
- "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND)
- && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
+ "GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
&& (operands[1] != frame_pointer_rtx || GET_CODE (operands[3]) != PLUS)"
"@
%x3%e4.%m4 %2,%0
@@ -2285,20 +2277,17 @@
(define_insn "*extopqihi_swap"
[(set (match_operand:HI 0 "register_operand" "=r,r,r,r")
- (match_operator:HI
- 4 "cris_plus_or_bound_operator"
- [(match_operator:HI
- 3 "cris_extend_operator"
- [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])
- (match_operand:HI 1 "register_operand" "0,0,0,r")]))]
- "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND)
- && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
- && operands[1] != frame_pointer_rtx"
+ (plus:HI
+ (match_operator:HI
+ 3 "cris_extend_operator"
+ [(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])
+ (match_operand:HI 1 "register_operand" "0,0,0,r")))]
+ "operands[1] != frame_pointer_rtx"
"@
- %x4%e3.%m3 %2,%0
- %x4%e3.%m3 %2,%0
- %x4%e3.%m3 %2,%0
- %x4%e3.%m3 %2,%1,%0"
+ add%e3.b %2,%0
+ add%e3.b %2,%0
+ add%e3.b %2,%0
+ add%e3.b %2,%1,%0"
[(set_attr "slottable" "yes,yes,no,no")
(set_attr "cc" "clobber")])
@@ -2312,8 +2301,7 @@
3 "cris_extend_operator"
[(match_operand:QI 2 "nonimmediate_operand" "r,Q>,m,!To")])
(match_operand:SI 1 "register_operand" "0,0,0,r")]))]
- "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND)
- && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
+ "(GET_CODE (operands[4]) != UMIN || GET_CODE (operands[3]) == ZERO_EXTEND)
&& operands[1] != frame_pointer_rtx"
"@
%x4%e3.%m3 %2,%0
@@ -2332,8 +2320,7 @@
3 "cris_extend_operator"
[(match_operand:HI 2 "nonimmediate_operand" "r,Q>,m,!To")])
(match_operand:SI 1 "register_operand" "0,0,0,r")]))]
- "(GET_CODE (operands[3]) != UMIN || GET_CODE (operands[4]) == ZERO_EXTEND)
- && GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD
+ "(GET_CODE (operands[4]) != UMIN || GET_CODE (operands[3]) == ZERO_EXTEND)
&& operands[1] != frame_pointer_rtx"
"@
%x4%e3.%m3 %2,%0
diff --git a/gcc/config/cris/cris_abi_symbol.c b/gcc/config/cris/cris_abi_symbol.c
index a30d2052f53..a6b0318b1c0 100644
--- a/gcc/config/cris/cris_abi_symbol.c
+++ b/gcc/config/cris/cris_abi_symbol.c
@@ -2,7 +2,7 @@
Contributed by Axis Communications.
Written by Hans-Peter Nilsson <hp@axis.se>, c:a 1992.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@@ -37,7 +37,8 @@ Boston, MA 02111-1307, USA.
the executable file or object might be covered by the GNU General
Public License. */
-#include "config.h"
+#include "tconfig.h"
+#include "tm.h"
#ifdef __AOUT__
diff --git a/gcc/config/cris/linux.h b/gcc/config/cris/linux.h
index 546f38101b9..f85743f7a9a 100644
--- a/gcc/config/cris/linux.h
+++ b/gcc/config/cris/linux.h
@@ -1,5 +1,5 @@
/* Definitions for GCC. Part of the machine description for CRIS.
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Axis Communications. Written by Hans-Peter Nilsson.
This file is part of GCC.
@@ -47,10 +47,7 @@ Boston, MA 02111-1307, USA. */
#undef CRIS_CPP_SUBTARGET_SPEC
#define CRIS_CPP_SUBTARGET_SPEC \
- "-D__gnu_linux__ -D__linux__ -D__unix__ -D__ELF__\
- %{pthread:-D_REENTRANT}\
- %{fPIC|fpic: -D__PIC__ -D__pic__}\
- %{!fleading-underscore:-fno-leading-underscore -D__NO_UNDERSCORES__}\
+ "%{pthread:-D_REENTRANT}\
%{!march=*:%{!cpu=*:-D__arch_v10 -D__CRIS_arch_version=10}}\
%{!ansi:%{!std=*:%{!undef:-Dlinux -Dunix}\
-Asystem(unix) -Asystem(posix) -Acpu(cris) -Amachine(cris)}}"
@@ -99,6 +96,28 @@ Boston, MA 02111-1307, USA. */
%{!r:%{O2|O3: --gc-sections}}"
+/* Node: Run-time Target */
+
+/* For the cris-*-linux* subtarget. */
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__gnu_linux__"); \
+ builtin_define ("__linux__"); \
+ builtin_define ("__unix__"); \
+ builtin_define ("__ELF__"); \
+ if (flag_pic) \
+ { \
+ builtin_define ("__PIC__"); \
+ builtin_define ("__pic__"); \
+ } \
+ if (flag_leading_underscore <= 0) \
+ builtin_define ("__NO_UNDERSCORES__"); \
+ } \
+ while (0)
+
+
/* Node: Sections */
/* GNU/Linux has crti and crtn and does not need the
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 376f1fb0fe0..934d99725bf 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -219,21 +219,26 @@ machopic_define_name (name)
}
/* This is a static to make inline functions work. The rtx
- representing the PIC base symbol always points to here. */
+ representing the PIC base symbol always points to here.
-static char function_base[32];
+ FIXME: The rest of the compiler doesn't expect strings to change. */
+static GTY(()) char * function_base;
+static GTY(()) const char * function_base_func_name;
static GTY(()) int current_pic_label_num;
const char *
machopic_function_base_name ()
{
- static const char *name = NULL;
- static const char *current_name;
+ const char *current_name;
- current_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl));
+ /* if dynamic-no-pic is on, we should not get here */
+ if (MACHO_DYNAMIC_NO_PIC_P)
+ abort ();
+ current_name =
+ IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (current_function_decl));
- if (name != current_name)
+ if (function_base_func_name != current_name)
{
current_function_uses_pic_offset_table = 1;
@@ -243,13 +248,21 @@ machopic_function_base_name ()
by the incredibly scientific test below. This is because code in
rs6000.c makes the same ugly test when loading the PIC reg. */
+ /* It's hard to describe just how ugly this is. The reason for
+ the '%011d' is that after a PCH load, we can't change the
+ size of the string, because PCH will have uniqued it and
+ allocated it in the string pool. */
+ if (function_base == NULL)
+ function_base =
+ (char *) ggc_alloc_string ("", sizeof ("*\"L12345678901$pb\""));
+
++current_pic_label_num;
if (*current_name == '+' || *current_name == '-')
- sprintf (function_base, "*\"L-%d$pb\"", current_pic_label_num);
+ sprintf (function_base, "*\"L-%010d$pb\"", current_pic_label_num);
else
- sprintf (function_base, "*L%d$pb", current_pic_label_num);
+ sprintf (function_base, "*\"L%011d$pb\"", current_pic_label_num);
- name = current_name;
+ function_base_func_name = current_name;
}
return function_base;
@@ -426,7 +439,20 @@ machopic_indirect_data_reference (orig, reg)
{
const char *name = XSTR (orig, 0);
- if (machopic_data_defined_p (name))
+ int defined = machopic_data_defined_p (name);
+
+ if (defined && MACHO_DYNAMIC_NO_PIC_P)
+ {
+#if defined (TARGET_TOC)
+ emit_insn (gen_macho_high (reg, orig));
+ emit_insn (gen_macho_low (reg, reg, orig));
+#else
+ /* some other cpu -- writeme! */
+ abort ();
+#endif
+ return reg;
+ }
+ else if (defined)
{
#if defined (TARGET_TOC) || defined (HAVE_lo_sum)
rtx pic_base = gen_rtx (SYMBOL_REF, Pmode,
@@ -569,7 +595,7 @@ machopic_legitimize_pic_address (orig, mode, reg)
{
rtx pic_ref = orig;
- if (! MACHOPIC_PURE)
+ if (! MACHOPIC_INDIRECT)
return orig;
/* First handle a simple SYMBOL_REF or LABEL_REF */
@@ -592,6 +618,10 @@ machopic_legitimize_pic_address (orig, mode, reg)
return reg;
}
+ /* if dynamic-no-pic then use 0 as the pic base */
+ if (MACHO_DYNAMIC_NO_PIC_P)
+ pic_base = CONST0_RTX (Pmode);
+ else
pic_base = gen_rtx (SYMBOL_REF, Pmode, machopic_function_base_name ());
if (GET_CODE (orig) == MEM)
@@ -605,6 +635,27 @@ machopic_legitimize_pic_address (orig, mode, reg)
}
#ifdef HAVE_lo_sum
+ if (MACHO_DYNAMIC_NO_PIC_P
+ && (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF
+ || GET_CODE (XEXP (orig, 0)) == LABEL_REF))
+ {
+#if defined (TARGET_TOC) /* ppc */
+ rtx temp_reg = (no_new_pseudos) ? reg : gen_reg_rtx (Pmode);
+ rtx asym = XEXP (orig, 0);
+ rtx mem;
+
+ emit_insn (gen_macho_high (temp_reg, asym));
+ mem = gen_rtx_MEM (GET_MODE (orig),
+ gen_rtx (LO_SUM, Pmode, temp_reg, asym));
+ RTX_UNCHANGING_P (mem) = 1;
+ emit_insn (gen_rtx (SET, VOIDmode, reg, mem));
+#else
+ /* Some other CPU -- WriteMe! but right now there are no other platform that can use dynamic-no-pic */
+ abort ();
+#endif
+ pic_ref = reg;
+ }
+ else
if (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF
|| GET_CODE (XEXP (orig, 0)) == LABEL_REF)
{
@@ -692,7 +743,9 @@ machopic_legitimize_pic_address (orig, mode, reg)
hi_sum_reg = reg;
emit_insn (gen_rtx (SET, Pmode, hi_sum_reg,
- gen_rtx (PLUS, Pmode,
+ (MACHO_DYNAMIC_NO_PIC_P)
+ ? gen_rtx (HIGH, Pmode, offset)
+ : gen_rtx (PLUS, Pmode,
pic_offset_table_rtx,
gen_rtx (HIGH, Pmode, offset))));
emit_insn (gen_rtx (SET, VOIDmode, reg,
@@ -1137,7 +1190,8 @@ machopic_select_section (exp, reloc, align)
objc_string_object_section ();
else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))
{
- if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc))
+
+ if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc))
const_data_section ();
else
readonly_data_section ();
@@ -1200,7 +1254,8 @@ machopic_select_section (exp, reloc, align)
else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))
&& !TREE_SIDE_EFFECTS (exp))
{
- if (flag_pic && reloc)
+
+ if (MACHOPIC_INDIRECT && reloc)
const_data_section ();
else
readonly_data_section ();
@@ -1210,7 +1265,8 @@ machopic_select_section (exp, reloc, align)
}
else if (TREE_READONLY (exp) || TREE_CONSTANT (exp))
{
- if (TREE_SIDE_EFFECTS (exp) || (flag_pic && reloc))
+
+ if (TREE_SIDE_EFFECTS (exp) || (MACHOPIC_INDIRECT && reloc))
const_data_section ();
else
readonly_data_section ();
@@ -1243,14 +1299,16 @@ machopic_asm_out_constructor (symbol, priority)
rtx symbol;
int priority ATTRIBUTE_UNUSED;
{
- if (flag_pic)
+
+ if (MACHOPIC_INDIRECT)
mod_init_section ();
else
constructor_section ();
assemble_align (POINTER_SIZE);
assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
- if (!flag_pic)
+
+ if (! MACHOPIC_INDIRECT)
fprintf (asm_out_file, ".reference .constructors_used\n");
}
@@ -1259,14 +1317,15 @@ machopic_asm_out_destructor (symbol, priority)
rtx symbol;
int priority ATTRIBUTE_UNUSED;
{
- if (flag_pic)
+
+ if (MACHOPIC_INDIRECT)
mod_term_section ();
else
destructor_section ();
assemble_align (POINTER_SIZE);
assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1);
- if (!flag_pic)
+ if (! MACHOPIC_INDIRECT)
fprintf (asm_out_file, ".reference .destructors_used\n");
}
diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h
index c043c0c78ac..8826a7dfa0b 100644
--- a/gcc/config/darwin.h
+++ b/gcc/config/darwin.h
@@ -676,7 +676,7 @@ objc_section_init () \
#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
do { \
if (FILE) { \
- if (flag_pic) \
+ if (MACHOPIC_INDIRECT) \
fprintf (FILE, "\t.lazy_reference "); \
else \
fprintf (FILE, "\t.reference "); \
@@ -722,9 +722,10 @@ enum machopic_addr_class {
/* Macros defining the various PIC cases. */
-#define MACHOPIC_INDIRECT (flag_pic)
-#define MACHOPIC_JUST_INDIRECT (flag_pic == 1)
-#define MACHOPIC_PURE (flag_pic == 2)
+#define MACHO_DYNAMIC_NO_PIC_P (TARGET_DYNAMIC_NO_PIC)
+#define MACHOPIC_INDIRECT (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
+#define MACHOPIC_JUST_INDIRECT (flag_pic == 1 || MACHO_DYNAMIC_NO_PIC_P)
+#define MACHOPIC_PURE (flag_pic == 2 && ! MACHO_DYNAMIC_NO_PIC_P)
#undef TARGET_ENCODE_SECTION_INFO
#define TARGET_ENCODE_SECTION_INFO darwin_encode_section_info
diff --git a/gcc/config/dsp16xx/dsp16xx-protos.h b/gcc/config/dsp16xx/dsp16xx-protos.h
index 633b9b6925a..91496d91ee2 100644
--- a/gcc/config/dsp16xx/dsp16xx-protos.h
+++ b/gcc/config/dsp16xx/dsp16xx-protos.h
@@ -2,20 +2,20 @@
Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Michael Collison (collison@world.std.com).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/dsp16xx/dsp16xx.c b/gcc/config/dsp16xx/dsp16xx.c
index bf3f5861d22..fc15dfa9e6a 100644
--- a/gcc/config/dsp16xx/dsp16xx.c
+++ b/gcc/config/dsp16xx/dsp16xx.c
@@ -2,20 +2,20 @@
Copyright (C) 1994, 1995, 1997, 1998, 2001 Free Software Foundation, Inc.
Contributed by Michael Collison (collison@isisinc.net).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h
index 6657fb82004..3a60aea7a0b 100644
--- a/gcc/config/dsp16xx/dsp16xx.h
+++ b/gcc/config/dsp16xx/dsp16xx.h
@@ -3,20 +3,20 @@
Free Software Foundation, Inc.
Contributed by Michael Collison (collison@isisinc.net).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/dsp16xx/dsp16xx.md b/gcc/config/dsp16xx/dsp16xx.md
index fdb71de10a9..fffd2a9d9e0 100644
--- a/gcc/config/dsp16xx/dsp16xx.md
+++ b/gcc/config/dsp16xx/dsp16xx.md
@@ -1,22 +1,22 @@
-;;- Machine description for the AT&T DSP1600 for GNU C compiler
+;;- Machine description for the AT&T DSP1600 for GCC
;; Copyright (C) 1994, 1995, 1997, 1998, 2001, 2002
;; Free Software Foundation, Inc.
;; Contributed by Michael Collison (collison@isisinc.net).
-;; This file is part of GNU CC.
+;; This file is part of GCC.
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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.
diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c
index 3e0b843f505..2832f96d578 100644
--- a/gcc/config/fp-bit.c
+++ b/gcc/config/fp-bit.c
@@ -210,7 +210,11 @@ pack_d ( fp_number_type * src)
exp = EXPMAX;
if (src->class == CLASS_QNAN || 1)
{
+#ifdef QUIET_NAN_NEGATED
+ fraction |= QUIET_NAN - 1;
+#else
fraction |= QUIET_NAN;
+#endif
}
}
else if (isinf (src))
@@ -521,7 +525,11 @@ unpack_d (FLO_union_type * src, fp_number_type * dst)
else
{
/* Nonzero fraction, means nan */
+#ifdef QUIET_NAN_NEGATED
+ if ((fraction & QUIET_NAN) == 0)
+#else
if (fraction & QUIET_NAN)
+#endif
{
dst->class = CLASS_QNAN;
}
diff --git a/gcc/config/fp-bit.h b/gcc/config/fp-bit.h
index 247ef335610..0e8509eedf9 100644
--- a/gcc/config/fp-bit.h
+++ b/gcc/config/fp-bit.h
@@ -479,7 +479,7 @@ extern SItype float_to_si (FLO_type);
#endif
#if defined(L_sf_to_usi) || defined(L_df_to_usi) || defined(L_tf_to_usi)
-#ifdef US_SOFTWARE_GOFAST
+#if defined(US_SOFTWARE_GOFAST) || defined(L_tf_to_usi)
extern USItype float_to_usi (FLO_type);
#endif
#endif
diff --git a/gcc/config/freebsd-spec.h b/gcc/config/freebsd-spec.h
index 3fc4dcc7a41..4d81d80c443 100644
--- a/gcc/config/freebsd-spec.h
+++ b/gcc/config/freebsd-spec.h
@@ -48,30 +48,31 @@ Boston, MA 02111-1307, USA. */
|| !strcmp ((STR), "soname") || !strcmp ((STR), "defsym") \
|| !strcmp ((STR), "assert") || !strcmp ((STR), "dynamic-linker"))
-#if FBSD_MAJOR == 6
-#define FBSD_CPP_PREDEFINES \
- "-D__FreeBSD__=6 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
-#endif
-
-#if FBSD_MAJOR == 5
-#define FBSD_CPP_PREDEFINES \
- "-D__FreeBSD__=5 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
-#endif
-
-#if FBSD_MAJOR == 4
-#define FBSD_CPP_PREDEFINES \
- "-D__FreeBSD__=4 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
-#endif
-
-#if FBSD_MAJOR == 3
-#define FBSD_CPP_PREDEFINES \
- "-D__FreeBSD__=3 -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
-#endif
-
-#ifndef FBSD_CPP_PREDEFINES
-#define FBSD_CPP_PREDEFINES \
- "-D__FreeBSD__ -Dunix -D__ELF__ -D__KPRINTF_ATTRIBUTE__ -Asystem=unix -Asystem=bsd -Asystem=FreeBSD"
-#endif
+#define FBSD_TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ if (FBSD_MAJOR == 6) \
+ builtin_define ("__FreeBSD__=6"); \
+ else if (FBSD_MAJOR == 5) \
+ builtin_define ("__FreeBSD__=5"); \
+ else if (FBSD_MAJOR == 4) \
+ builtin_define ("__FreeBSD__=4"); \
+ else if (FBSD_MAJOR == 3) \
+ builtin_define ("__FreeBSD__=3"); \
+ else \
+ builtin_define ("__FreeBSD__"); \
+ builtin_define_std ("unix"); \
+ builtin_define ("__ELF__"); \
+ builtin_define ("__KPRINTF_ATTRIBUTE__"); \
+ builtin_assert ("system=unix"); \
+ builtin_assert ("system=bsd"); \
+ builtin_assert ("system=FreeBSD"); \
+ FBSD_TARGET_CPU_CPP_BUILTINS(); \
+ } \
+ while (0)
+
+/* Define the default FreeBSD-specific per-CPU hook code. */
+#define FBSD_TARGET_CPU_CPP_BUILTINS() do {} while (0)
/* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC
option `-posix', and PIC issues. */
diff --git a/gcc/config/freebsd.h b/gcc/config/freebsd.h
index 285f5bf85f9..f71bd8b42d5 100644
--- a/gcc/config/freebsd.h
+++ b/gcc/config/freebsd.h
@@ -42,7 +42,10 @@ Boston, MA 02111-1307, USA. */
#define WORD_SWITCH_TAKES_ARG(STR) (FBSD_WORD_SWITCH_TAKES_ARG(STR))
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
+/* Obsolete, do not define it. */
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() FBSD_TARGET_OS_CPP_BUILTINS()
#undef CPP_SPEC
#define CPP_SPEC FBSD_CPP_SPEC
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index b52a4547258..39bc1769575 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -280,16 +280,13 @@
/* Run-time target specifications */
-/* Define this to be a string constant containing `-D' options to define the
- predefined macros that identify this machine and system. These macros will
- be predefined unless the `-ansi' option is specified.
-
- In addition, a parallel set of macros are predefined, whose names are made
- by appending `__' at the beginning and at the end. These `__' macros are
- permitted by the ANSI standard, so they are predefined regardless of whether
- `-ansi' is specified. */
-
-#define CPP_PREDEFINES "-D__frv__ -Amachine(frv)"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__frv__"); \
+ builtin_assert ("machine=frv"); \
+ } \
+ while (0)
/* This declaration should be present. */
diff --git a/gcc/config/h8300/h8300-protos.h b/gcc/config/h8300/h8300-protos.h
index 6c2fe68a422..6cdfbeed571 100644
--- a/gcc/config/h8300/h8300-protos.h
+++ b/gcc/config/h8300/h8300-protos.h
@@ -31,6 +31,7 @@ extern unsigned int compute_plussi_length PARAMS ((rtx *));
extern int compute_plussi_cc PARAMS ((rtx *));
extern const char *output_a_shift PARAMS ((rtx *));
extern unsigned int compute_a_shift_length PARAMS ((rtx, rtx *));
+extern int compute_a_shift_cc PARAMS ((rtx, rtx *));
extern const char *emit_a_rotate PARAMS ((enum rtx_code, rtx *));
extern const char *output_simode_bld PARAMS ((int, rtx[]));
extern void print_operand_address PARAMS ((FILE *, rtx));
@@ -68,10 +69,13 @@ extern int incdec_operand PARAMS ((rtx, enum machine_mode));
extern int bit_operator PARAMS ((rtx, enum machine_mode));
extern int nshift_operator PARAMS ((rtx, enum machine_mode));
extern int eqne_operator PARAMS ((rtx, enum machine_mode));
+extern int gtle_operator PARAMS ((rtx, enum machine_mode));
extern int gtuleu_operator PARAMS ((rtx, enum machine_mode));
+extern int iorxor_operator PARAMS ((rtx, enum machine_mode));
extern int h8300_eightbit_constant_address_p PARAMS ((rtx));
extern int h8300_tiny_constant_address_p PARAMS ((rtx));
+extern int byte_accesses_mergeable_p PARAMS ((rtx, rtx));
/* Used in builtins.c */
extern rtx h8300_return_addr_rtx PARAMS ((int, rtx));
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index ef9dbdda13d..a54055eca15 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -757,13 +757,7 @@ single_one_operand (operand, mode)
{
/* We really need to do this masking because 0x80 in QImode is
represented as -128 for example. */
- unsigned HOST_WIDE_INT mask =
- (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
- ? ((unsigned HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (mode)) - 1
- : ~(unsigned HOST_WIDE_INT) 0;
- unsigned HOST_WIDE_INT value = INTVAL (operand);
-
- if (exact_log2 (value & mask) >= 0)
+ if (exact_log2 (INTVAL (operand) & GET_MODE_MASK (mode)) >= 0)
return 1;
}
@@ -782,13 +776,7 @@ single_zero_operand (operand, mode)
{
/* We really need to do this masking because 0x80 in QImode is
represented as -128 for example. */
- unsigned HOST_WIDE_INT mask =
- (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT)
- ? ((unsigned HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (mode)) - 1
- : ~(unsigned HOST_WIDE_INT) 0;
- unsigned HOST_WIDE_INT value = INTVAL (operand);
-
- if (exact_log2 (~value & mask) >= 0)
+ if (exact_log2 (~INTVAL (operand) & GET_MODE_MASK (mode)) >= 0)
return 1;
}
@@ -1158,7 +1146,7 @@ h8300_and_costs (x)
operands[1] = NULL;
operands[2] = XEXP (x, 1);
operands[3] = x;
- return compute_logical_op_length (GET_MODE (x), operands);
+ return compute_logical_op_length (GET_MODE (x), operands) / 2;
}
static int
@@ -1176,7 +1164,7 @@ h8300_shift_costs (x)
operands[1] = NULL;
operands[2] = XEXP (x, 1);
operands[3] = x;
- return compute_a_shift_length (NULL, operands);
+ return compute_a_shift_length (NULL, operands) / 2;
}
static bool
@@ -1238,6 +1226,7 @@ h8300_rtx_costs (x, code, outer_code, total)
If this operand isn't a register, fall back to 'R' handling.
'Z' print int & 7.
'b' print the bit opcode
+ 'c' print the opcode corresponding to rtl
'e' first word of 32 bit value - if reg, then least reg. if mem
then least. if const then most sig word
'f' second word of 32 bit value - if reg, then biggest reg. if mem
@@ -1390,6 +1379,19 @@ print_operand (file, x, code)
break;
}
break;
+ case 'c':
+ switch (GET_CODE (x))
+ {
+ case IOR:
+ fprintf (file, "or");
+ break;
+ case XOR:
+ fprintf (file, "xor");
+ break;
+ default:
+ break;
+ }
+ break;
case 'e':
switch (GET_CODE (x))
{
@@ -1701,9 +1703,11 @@ h8300_initial_elimination_offset (from, to)
int from, to;
{
int offset = 0;
+ /* The number of bytes that the return address takes on the stack. */
+ int pc_size = POINTER_SIZE / BITS_PER_UNIT;
if (from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM)
- offset = UNITS_PER_WORD + frame_pointer_needed * UNITS_PER_WORD;
+ offset = pc_size + frame_pointer_needed * UNITS_PER_WORD;
else if (from == RETURN_ADDRESS_POINTER_REGNUM && to == FRAME_POINTER_REGNUM)
offset = frame_pointer_needed * UNITS_PER_WORD;
else
@@ -1720,12 +1724,10 @@ h8300_initial_elimination_offset (from, to)
offset += round_frame_size (get_frame_size ());
if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
- offset += UNITS_PER_WORD; /* Skip saved PC */
+ /* Skip saved PC. */
+ offset += pc_size;
}
- if ((TARGET_H8300H || TARGET_H8300S) && TARGET_NORMAL_MODE)
- offset -= 2;
-
return offset;
}
@@ -1795,7 +1797,14 @@ notice_update_cc (body, insn)
set = single_set (insn);
cc_status.value1 = SET_SRC (set);
if (SET_DEST (set) != cc0_rtx)
- cc_status.value2 = SET_DEST (set);
+ {
+ /* If the destination is STRICT_LOW_PART, strip off
+ STRICT_LOW_PART. */
+ if (GET_CODE (SET_DEST (set)) == STRICT_LOW_PART)
+ cc_status.value2 = XEXP (SET_DEST (set), 0);
+ else
+ cc_status.value2 = SET_DEST (set);
+ }
break;
case CC_COMPARE:
@@ -1891,6 +1900,18 @@ eqne_operator (x, mode)
return (code == EQ || code == NE);
}
+/* Return nonzero if X is GT, LE, GTU, or LEU. */
+
+int
+gtle_operator (x, mode)
+ rtx x;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ enum rtx_code code = GET_CODE (x);
+
+ return (code == GT || code == LE || code == GTU || code == LEU);
+}
+
/* Return nonzero if X is either GTU or LEU. */
int
@@ -1903,6 +1924,18 @@ gtuleu_operator (x, mode)
return (code == GTU || code == LEU);
}
+/* Return nonzero if X is either IOR or XOR. */
+
+int
+iorxor_operator (x, mode)
+ rtx x;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ enum rtx_code code = GET_CODE (x);
+
+ return (code == IOR || code == XOR);
+}
+
/* Recognize valid operators for bit instructions. */
int
@@ -2616,42 +2649,42 @@ static const struct shift_insn shift_one[2][3][3] =
{
/* SHIFT_ASHIFT */
{
- { "shll\t%X0", CC_NO_CARRY },
- { "add.w\t%T0,%T0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "add.w\t%f0,%f0\n\taddx\t%y0,%y0\n\taddx\t%z0,%z0", 0 }
+ { "shll\t%X0", CC_SET_ZNV },
+ { "add.w\t%T0,%T0", CC_SET_ZN },
+ { "add.w\t%f0,%f0\n\taddx\t%y0,%y0\n\taddx\t%z0,%z0", CC_CLOBBER }
},
/* SHIFT_LSHIFTRT */
{
- { "shlr\t%X0", CC_NO_CARRY },
- { "shlr\t%t0\n\trotxr\t%s0", 0 },
- { "shlr\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", 0 }
+ { "shlr\t%X0", CC_SET_ZNV },
+ { "shlr\t%t0\n\trotxr\t%s0", CC_CLOBBER },
+ { "shlr\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", CC_CLOBBER }
},
/* SHIFT_ASHIFTRT */
{
- { "shar\t%X0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "shar\t%t0\n\trotxr\t%s0", 0 },
- { "shar\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", 0 }
+ { "shar\t%X0", CC_SET_ZNV },
+ { "shar\t%t0\n\trotxr\t%s0", CC_CLOBBER },
+ { "shar\t%z0\n\trotxr\t%y0\n\trotxr\t%x0\n\trotxr\t%w0", CC_CLOBBER }
}
},
/* H8/300H */
{
/* SHIFT_ASHIFT */
{
- { "shll.b\t%X0", CC_NO_CARRY },
- { "shll.w\t%T0", CC_NO_CARRY },
- { "shll.l\t%S0", CC_NO_CARRY }
+ { "shll.b\t%X0", CC_SET_ZNV },
+ { "shll.w\t%T0", CC_SET_ZNV },
+ { "shll.l\t%S0", CC_SET_ZNV }
},
/* SHIFT_LSHIFTRT */
{
- { "shlr.b\t%X0", CC_NO_CARRY },
- { "shlr.w\t%T0", CC_NO_CARRY },
- { "shlr.l\t%S0", CC_NO_CARRY }
+ { "shlr.b\t%X0", CC_SET_ZNV },
+ { "shlr.w\t%T0", CC_SET_ZNV },
+ { "shlr.l\t%S0", CC_SET_ZNV }
},
/* SHIFT_ASHIFTRT */
{
- { "shar.b\t%X0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "shar.w\t%T0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "shar.l\t%S0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY }
+ { "shar.b\t%X0", CC_SET_ZNV },
+ { "shar.w\t%T0", CC_SET_ZNV },
+ { "shar.l\t%S0", CC_SET_ZNV }
}
}
};
@@ -2660,21 +2693,21 @@ static const struct shift_insn shift_two[3][3] =
{
/* SHIFT_ASHIFT */
{
- { "shll.b\t#2,%X0", CC_NO_CARRY },
- { "shll.w\t#2,%T0", CC_NO_CARRY },
- { "shll.l\t#2,%S0", CC_NO_CARRY }
+ { "shll.b\t#2,%X0", CC_SET_ZNV },
+ { "shll.w\t#2,%T0", CC_SET_ZNV },
+ { "shll.l\t#2,%S0", CC_SET_ZNV }
},
/* SHIFT_LSHIFTRT */
{
- { "shlr.b\t#2,%X0", CC_NO_CARRY },
- { "shlr.w\t#2,%T0", CC_NO_CARRY },
- { "shlr.l\t#2,%S0", CC_NO_CARRY }
+ { "shlr.b\t#2,%X0", CC_SET_ZNV },
+ { "shlr.w\t#2,%T0", CC_SET_ZNV },
+ { "shlr.l\t#2,%S0", CC_SET_ZNV }
},
/* SHIFT_ASHIFTRT */
{
- { "shar.b\t#2,%X0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "shar.w\t#2,%T0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY },
- { "shar.l\t#2,%S0", CC_OVERFLOW_UNUSABLE | CC_NO_CARRY }
+ { "shar.b\t#2,%X0", CC_SET_ZNV },
+ { "shar.w\t#2,%T0", CC_SET_ZNV },
+ { "shar.l\t#2,%S0", CC_SET_ZNV }
}
};
@@ -2769,8 +2802,11 @@ struct shift_info {
or SHIFT_SPECIAL, and REMAINDER is nonzero. */
const char *shift2;
- /* Valid CC flags. */
- int cc_valid_p;
+ /* CC status for SHIFT_INLINE. */
+ int cc_inline;
+
+ /* CC status for SHIFT_SPECIAL. */
+ int cc_special;
};
static void get_shift_alg PARAMS ((enum shift_type,
@@ -2840,13 +2876,13 @@ get_shift_alg (shift_type, shift_mode, count, info)
/* It is up to the caller to know that looping clobbers cc. */
info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
info->shift2 = shift_two[shift_type][shift_mode].assembler;
- info->cc_valid_p = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
+ info->cc_inline = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
goto end;
case SHIFT_ROT_AND:
info->shift1 = rotate_one[cpu_type][shift_type][shift_mode];
info->shift2 = rotate_two[shift_type][shift_mode];
- info->cc_valid_p = 0;
+ info->cc_inline = CC_CLOBBER;
goto end;
case SHIFT_SPECIAL:
@@ -2854,7 +2890,8 @@ get_shift_alg (shift_type, shift_mode, count, info)
info->remainder = 0;
info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
info->shift2 = shift_two[shift_type][shift_mode].assembler;
- info->cc_valid_p = 0;
+ info->cc_inline = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
+ info->cc_special = CC_CLOBBER;
break;
}
@@ -2908,10 +2945,12 @@ get_shift_alg (shift_type, shift_mode, count, info)
{
info->special = "mov.b\t%t0,%s0\n\tsub.b\t%t0,%t0";
info->shift1 = "shlr.b\t%s0";
+ info->cc_inline = CC_SET_ZNV;
}
else
{
info->special = "mov.b\t%t0,%s0\n\textu.w\t%T0";
+ info->cc_special = CC_SET_ZNV;
}
goto end;
case SHIFT_ASHIFTRT:
@@ -2923,6 +2962,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
else
{
info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0";
+ info->cc_special = CC_SET_ZNV;
}
goto end;
}
@@ -2943,7 +2983,10 @@ get_shift_alg (shift_type, shift_mode, count, info)
if (TARGET_H8300)
info->special = "mov.b\t%t0,%s0\n\tshll.b\t%s0\n\tsubx.b\t%t0,%t0\n\tshll.b\t%s0\n\tmov.b\t%t0,%s0\n\tbst.b\t#0,%s0";
else if (TARGET_H8300H)
- info->special = "shll.b\t%t0\n\tsubx.b\t%s0,%s0\n\tshll.b\t%t0\n\trotxl.b\t%s0\n\texts.w\t%T0";
+ {
+ info->special = "shll.b\t%t0\n\tsubx.b\t%s0,%s0\n\tshll.b\t%t0\n\trotxl.b\t%s0\n\texts.w\t%T0";
+ info->cc_special = CC_SET_ZNV;
+ }
else /* TARGET_H8300S */
abort ();
goto end;
@@ -3020,9 +3063,11 @@ get_shift_alg (shift_type, shift_mode, count, info)
{
case SHIFT_ASHIFT:
info->special = "shlr.w\t%e0\n\tmov.w\t%f0,%e0\n\txor.w\t%f0,%f0\n\trotxr.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
case SHIFT_LSHIFTRT:
info->special = "shll.w\t%f0\n\tmov.w\t%e0,%f0\n\txor.w\t%e0,%e0\n\trotxl.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
abort ();
@@ -3050,6 +3095,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
else
{
info->special = "mov.w\t%e0,%f0\n\textu.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
}
goto end;
case SHIFT_ASHIFTRT:
@@ -3061,6 +3107,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
else
{
info->special = "mov.w\t%e0,%f0\n\texts.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
}
goto end;
}
@@ -3074,14 +3121,17 @@ get_shift_alg (shift_type, shift_mode, count, info)
case SHIFT_ASHIFT:
info->special = "mov.b\t%w0,%z0\n\tsub.b\t%y0,%y0\n\tsub.w\t%f0,%f0";
info->shift1 = "shll.b\t%z0";
+ info->cc_inline = CC_SET_ZNV;
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.b\t%z0,%w0\n\tsub.b\t%x0,%x0\n\tsub.w\t%e0,%e0";
info->shift1 = "shlr.b\t%w0";
+ info->cc_inline = CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.b\t%z0,%w0\n\tbld\t#7,%w0\n\tsubx\t%x0,%x0\n\tsubx\t%x0,%x0\n\tsubx\t%x0,%x0";
info->shift1 = "shar.b\t%w0";
+ info->cc_inline = CC_SET_ZNV;
goto end;
}
}
@@ -3097,9 +3147,11 @@ get_shift_alg (shift_type, shift_mode, count, info)
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
}
}
@@ -3115,7 +3167,10 @@ get_shift_alg (shift_type, shift_mode, count, info)
goto end;
case SHIFT_LSHIFTRT:
if (TARGET_H8300H)
- info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ {
+ info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
+ }
else
info->special = "sub.w\t%f0,%f0\n\trotl.l\t#2,%S0\n\trotl.l\t#2,%S0\n\textu.l\t%S0";
goto end;
@@ -3135,9 +3190,15 @@ get_shift_alg (shift_type, shift_mode, count, info)
goto end;
case SHIFT_LSHIFTRT:
if (TARGET_H8300H)
- info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ {
+ info->special = "sub.w\t%f0,%f0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
+ }
else
- info->special = "sub.w\t%f0,%f0\n\trotl.l\t#2,%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ {
+ info->special = "sub.w\t%f0,%f0\n\trotl.l\t#2,%S0\n\trotl.l\t%S0\n\textu.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
+ }
goto end;
case SHIFT_ASHIFTRT:
abort ();
@@ -3186,12 +3247,15 @@ get_shift_alg (shift_type, shift_mode, count, info)
{
case SHIFT_ASHIFT:
info->special = "shlr.l\t%S0\n\txor.l\t%S0,%S0\n\trotxr.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
case SHIFT_LSHIFTRT:
info->special = "shll.l\t%S0\n\txor.l\t%S0,%S0\n\trotxl.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
case SHIFT_ASHIFTRT:
info->special = "shll\t%e0\n\tsubx\t%w0,%w0\n\texts.w\t%T0\n\texts.l\t%S0";
+ info->cc_special = CC_SET_ZNV;
goto end;
}
}
@@ -3345,13 +3409,6 @@ output_a_shift (operands)
/* Now emit one bit shifts for any residual. */
for (; n > 0; n--)
output_asm_insn (info.shift1, operands);
-
- /* Keep track of CC. */
- if (info.cc_valid_p)
- {
- cc_status.value1 = operands[0];
- cc_status.flags |= info.cc_valid_p;
- }
return "";
case SHIFT_ROT_AND:
@@ -3386,8 +3443,6 @@ output_a_shift (operands)
else
abort ();
- cc_status.value1 = operands[0];
- cc_status.flags |= CC_NO_CARRY;
output_asm_insn (insn_buf, operands);
return "";
}
@@ -3585,6 +3640,100 @@ compute_a_shift_length (insn, operands)
}
}
}
+
+int
+compute_a_shift_cc (insn, operands)
+ rtx insn ATTRIBUTE_UNUSED;
+ rtx *operands;
+{
+ rtx shift = operands[3];
+ enum machine_mode mode = GET_MODE (shift);
+ enum rtx_code code = GET_CODE (shift);
+ enum shift_type shift_type;
+ enum shift_mode shift_mode;
+ struct shift_info info;
+
+ switch (mode)
+ {
+ case QImode:
+ shift_mode = QIshift;
+ break;
+ case HImode:
+ shift_mode = HIshift;
+ break;
+ case SImode:
+ shift_mode = SIshift;
+ break;
+ default:
+ abort ();
+ }
+
+ switch (code)
+ {
+ case ASHIFTRT:
+ shift_type = SHIFT_ASHIFTRT;
+ break;
+ case LSHIFTRT:
+ shift_type = SHIFT_LSHIFTRT;
+ break;
+ case ASHIFT:
+ shift_type = SHIFT_ASHIFT;
+ break;
+ default:
+ abort ();
+ }
+
+ if (GET_CODE (operands[2]) != CONST_INT)
+ {
+ /* This case must be taken care of by one of the two splitters
+ that convert a variable shift into a loop. */
+ abort ();
+ }
+ else
+ {
+ int n = INTVAL (operands[2]);
+
+ /* If the count is negative, make it 0. */
+ if (n < 0)
+ n = 0;
+ /* If the count is too big, truncate it.
+ ANSI says shifts of GET_MODE_BITSIZE are undefined - we choose to
+ do the intuitive thing. */
+ else if ((unsigned int) n > GET_MODE_BITSIZE (mode))
+ n = GET_MODE_BITSIZE (mode);
+
+ get_shift_alg (shift_type, shift_mode, n, &info);
+
+ switch (info.alg)
+ {
+ case SHIFT_SPECIAL:
+ if (info.remainder == 0)
+ return info.cc_special;
+
+ /* Fall through. */
+
+ case SHIFT_INLINE:
+ return info.cc_inline;
+
+ case SHIFT_ROT_AND:
+ /* This case always ends with an and instruction. */
+ return CC_SET_ZNV;
+
+ case SHIFT_LOOP:
+ /* A loop to shift by a "large" constant value.
+ If we have shift-by-2 insns, use them. */
+ if (info.shift2 != NULL)
+ {
+ if (n % 2)
+ return info.cc_inline;
+ }
+ return CC_CLOBBER;
+
+ default:
+ abort ();
+ }
+ }
+}
/* A rotation by a non-constant will cause a loop to be generated, in
which a rotation by one bit is used. A rotation by a constant,
@@ -4086,14 +4235,24 @@ output_simode_bld (bild, operands)
}
else
{
+ /* Determine if we can clear the destination first. */
+ int clear_first = (REG_P (operands[0]) && REG_P (operands[1])
+ && REGNO (operands[0]) != REGNO (operands[1]));
+
+ if (clear_first)
+ output_asm_insn ("sub.l\t%S0,%S0", operands);
+
/* Output the bit load or bit inverse load. */
if (bild)
output_asm_insn ("bild\t%Z2,%Y1", operands);
else
output_asm_insn ("bld\t%Z2,%Y1", operands);
- /* Clear the destination register and perform the bit store. */
- output_asm_insn ("xor.l\t%S0,%S0\n\tbst\t#0,%w0", operands);
+ if (!clear_first)
+ output_asm_insn ("xor.l\t%S0,%S0", operands);
+
+ /* Perform the bit store. */
+ output_asm_insn ("bst\t#0,%w0", operands);
}
/* All done. */
@@ -4349,3 +4508,49 @@ h8300_tiny_constant_address_p (x)
|| ((TARGET_H8300S && !TARGET_NORMAL_MODE)
&& (IN_RANGE (addr, s1, s2) || IN_RANGE (addr, s3, s4))));
}
+
+int
+byte_accesses_mergeable_p (addr1, addr2)
+ rtx addr1, addr2;
+{
+ HOST_WIDE_INT offset1, offset2;
+ rtx reg1, reg2;
+
+ if (REG_P (addr1))
+ {
+ reg1 = addr1;
+ offset1 = 0;
+ }
+ else if (GET_CODE (addr1) == PLUS
+ && REG_P (XEXP (addr1, 0))
+ && GET_CODE (XEXP (addr1, 1)) == CONST_INT)
+ {
+ reg1 = XEXP (addr1, 0);
+ offset1 = INTVAL (XEXP (addr1, 1));
+ }
+ else
+ return 0;
+
+ if (REG_P (addr2))
+ {
+ reg2 = addr2;
+ offset2 = 0;
+ }
+ else if (GET_CODE (addr2) == PLUS
+ && REG_P (XEXP (addr2, 0))
+ && GET_CODE (XEXP (addr2, 1)) == CONST_INT)
+ {
+ reg2 = XEXP (addr2, 0);
+ offset2 = INTVAL (XEXP (addr2, 1));
+ }
+ else
+ return 0;
+
+ if (((reg1 == stack_pointer_rtx && reg2 == stack_pointer_rtx)
+ || (reg1 == frame_pointer_rtx && reg2 == frame_pointer_rtx))
+ && offset1 % 2 == 0
+ && offset1 + 1 == offset2)
+ return 1;
+
+ return 0;
+}
diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h
index 0c408145191..dc86668bb7d 100644
--- a/gcc/config/h8300/h8300.h
+++ b/gcc/config/h8300/h8300.h
@@ -1292,6 +1292,8 @@ struct cum_arg
{"bit_operator", {XOR, AND, IOR}}, \
{"nshift_operator", {ASHIFTRT, LSHIFTRT, ASHIFT}}, \
{"eqne_operator", {EQ, NE}}, \
- {"gtuleu_operator", {GTU, LEU}},
+ {"gtle_operator", {GT, LE, GTU, LEU}}, \
+ {"gtuleu_operator", {GTU, LEU}}, \
+ {"iorxor_operator", {IOR, XOR}},
#endif /* ! GCC_H8300_H */
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index 06596e59dd7..6bc0cf0b771 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -629,6 +629,27 @@
[(set_attr "length" "2")
(set_attr "cc" "set_zn")])
+(define_insn_and_split "*tstsi_upper_bit"
+ [(set (cc0)
+ (zero_extract:SI (match_operand:SI 0 "register_operand" "r")
+ (const_int 1)
+ (match_operand 1 "const_int_operand" "n")))
+ (clobber (match_scratch:SI 2 "=&r"))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[1]) >= 16"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 2)
+ (ior:SI (and:SI (match_dup 2)
+ (const_int -65536))
+ (lshiftrt:SI (match_dup 0)
+ (const_int 16))))
+ (set (cc0)
+ (zero_extract:SI (match_dup 2)
+ (const_int 1)
+ (match_dup 3)))]
+ "operands[3] = GEN_INT (INTVAL (operands[1]) - 16);")
+
(define_insn ""
[(set (cc0)
(and:HI (match_operand:HI 0 "register_operand" "r")
@@ -2043,9 +2064,13 @@
(zero_extend:HI (match_dup 2)))]
"operands[2] = gen_rtx_REG (QImode, REGNO (operands[0]));")
-;; The compiler can synthesize a H8/300H variant of this which is
-;; just as efficient as one that we'd create
-(define_insn "zero_extendqisi2"
+(define_expand "zero_extendqisi2"
+ [(set (match_operand:SI 0 "register_operand" "")
+ (zero_extend:SI (match_operand:QI 1 "general_operand_src" "")))]
+ ""
+ "")
+
+(define_insn "*zero_extendqisi2_h8300"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(zero_extend:SI (match_operand:QI 1 "general_operand_src" "0,g>")))]
"TARGET_H8300"
@@ -2055,6 +2080,40 @@
[(set_attr "length" "4,8")
(set_attr "cc" "clobber,clobber")])
+(define_insn "*zero_extendqisi2_h8300hs"
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extend:SI (match_operand:QI 1 "general_operand_src" "0,g>")))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "@
+ extu.w %T0\;extu.l %S0
+ #"
+ [(set_attr "length" "4,12")
+ (set_attr "cc" "set_znv,set_znv")])
+
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (zero_extend:SI (match_operand:QI 1 "general_operand_src" "")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && reg_overlap_mentioned_p (operands[0], operands[1])
+ && reload_completed"
+ [(set (match_dup 2)
+ (match_dup 1))
+ (set (match_dup 0)
+ (zero_extend:SI (match_dup 2)))]
+ "operands[2] = gen_rtx_REG (QImode, REGNO (operands[0]));")
+
+(define_split
+ [(set (match_operand:SI 0 "register_operand" "")
+ (zero_extend:SI (match_operand:QI 1 "general_operand_src" "")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
+ && reload_completed"
+ [(set (match_dup 0)
+ (const_int 0))
+ (set (strict_low_part (match_dup 2))
+ (match_dup 1))]
+ "operands[2] = gen_rtx_REG (QImode, REGNO (operands[0]));")
+
(define_expand "zero_extendhisi2"
[(set (match_operand:SI 0 "register_operand" "")
(zero_extend:SI (match_operand:HI 1 "register_operand" "")))]
@@ -2213,7 +2272,8 @@
"* return output_a_shift (operands);"
[(set (attr "length")
(symbol_ref "compute_a_shift_length (insn, operands)"))
- (set_attr "cc" "clobber")])
+ (set (attr "cc")
+ (symbol_ref "compute_a_shift_cc (insn, operands)"))])
;; HI BIT SHIFTS
@@ -2248,7 +2308,8 @@
"* return output_a_shift (operands);"
[(set (attr "length")
(symbol_ref "compute_a_shift_length (insn, operands)"))
- (set_attr "cc" "clobber")])
+ (set (attr "cc")
+ (symbol_ref "compute_a_shift_cc (insn, operands)"))])
;; SI BIT SHIFTS
@@ -2283,7 +2344,8 @@
"* return output_a_shift (operands);"
[(set (attr "length")
(symbol_ref "compute_a_shift_length (insn, operands)"))
- (set_attr "cc" "clobber")])
+ (set (attr "cc")
+ (symbol_ref "compute_a_shift_cc (insn, operands)"))])
;; Split a variable shift into a loop. If the register containing
;; the shift count dies, then we just use that register.
@@ -2465,15 +2527,15 @@
(set_attr "length" "8")])
(define_insn "*extzv_1_r_h8300hs"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extract:SI (match_operand:SI 1 "register_operand" "?0,r")
(const_int 1)
- (match_operand 2 "const_int_operand" "n")))]
+ (match_operand 2 "const_int_operand" "n,n")))]
"(TARGET_H8300H || TARGET_H8300S)
&& INTVAL (operands[2]) < 16"
"* return output_simode_bld (0, operands);"
- [(set_attr "cc" "clobber")
- (set_attr "length" "8")])
+ [(set_attr "cc" "clobber,clobber")
+ (set_attr "length" "8,6")])
;;
;; Inverted loads with a 32bit destination.
@@ -2493,17 +2555,17 @@
(set_attr "length" "8")])
(define_insn "*extzv_1_r_inv_h8300hs"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extract:SI (xor:SI (match_operand:SI 1 "register_operand" "r")
- (match_operand 3 "const_int_operand" "n"))
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extract:SI (xor:SI (match_operand:SI 1 "register_operand" "?0,r")
+ (match_operand 3 "const_int_operand" "n,n"))
(const_int 1)
- (match_operand 2 "const_int_operand" "n")))]
+ (match_operand 2 "const_int_operand" "n,n")))]
"(TARGET_H8300H || TARGET_H8300S)
&& INTVAL (operands[2]) < 16
&& (1 << INTVAL (operands[2])) == INTVAL (operands[3])"
"* return output_simode_bld (1, operands);"
- [(set_attr "cc" "clobber")
- (set_attr "length" "8")])
+ [(set_attr "cc" "clobber,clobber")
+ (set_attr "length" "8,6")])
(define_expand "insv"
[(set (zero_extract:HI (match_operand:HI 0 "general_operand" "")
@@ -2584,17 +2646,78 @@
;; COMBINE PATTERNS
;; -----------------------------------------------------------------
+;; insv:SI
+
+(define_insn "*insv_si_1_n"
+ [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
+ (const_int 1)
+ (match_operand:SI 1 "const_int_operand" "n"))
+ (match_operand:SI 2 "register_operand" "r"))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[1]) < 16"
+ "bld\\t#0,%w2\;bst\\t%Z1,%Y0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "4")])
+
+(define_insn "*insv_si_1_n_lshiftrt"
+ [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
+ (const_int 1)
+ (match_operand:SI 1 "const_int_operand" "n"))
+ (lshiftrt:SI (match_operand:SI 2 "register_operand" "r")
+ (match_operand:SI 3 "const_int_operand" "n")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[1]) < 16
+ && INTVAL (operands[3]) < 16"
+ "bld\\t%Z3,%Y2\;bst\\t%Z1,%Y0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "4")])
+
+(define_insn "*insv_si_1_n_lshiftrt_16"
+ [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
+ (const_int 1)
+ (match_operand:SI 1 "const_int_operand" "n"))
+ (lshiftrt:SI (match_operand:SI 2 "register_operand" "r")
+ (const_int 16)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[1]) < 16"
+ "rotr.w\\t%e2\;rotl.w\\t%e2\;bst\\t%Z1,%Y0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "6")])
+
+(define_insn "*insv_si_8_8"
+ [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
+ (const_int 8)
+ (const_int 8))
+ (match_operand:SI 1 "register_operand" "r"))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "mov.b\\t%w1,%x0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
+(define_insn "*insv_si_8_8_lshiftrt_8"
+ [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "+r")
+ (const_int 8)
+ (const_int 8))
+ (lshiftrt:SI (match_operand:SI 1 "register_operand" "r")
+ (const_int 8)))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "mov.b\\t%x1,%x0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
;; extzv:SI
(define_insn "*extzv_8_8"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
+ [(set (match_operand:SI 0 "register_operand" "=r,r")
+ (zero_extract:SI (match_operand:SI 1 "register_operand" "?0,r")
(const_int 8)
(const_int 8)))]
"TARGET_H8300H || TARGET_H8300S"
- "mov.b\\t%x1,%w0\;extu.w\\t%f0\;extu.l\\t%S0"
- [(set_attr "cc" "set_znv")
- (set_attr "length" "6")])
+ "@
+ mov.b\\t%x1,%w0\;extu.w\\t%f0\;extu.l\\t%S0
+ sub.l\\t%S0,%S0\;mov.b\\t%x1,%w0"
+ [(set_attr "cc" "set_znv,clobber")
+ (set_attr "length" "6,4")])
(define_insn "*extzv_8_16"
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -2606,6 +2729,17 @@
[(set_attr "cc" "set_znv")
(set_attr "length" "6")])
+(define_insn "*extzv_16_8"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
+ (const_int 16)
+ (const_int 8)))
+ (clobber (match_scratch:SI 2 "=&r"))]
+ "TARGET_H8300H"
+ "mov.w\\t%e1,%f2\;mov.b\\t%x1,%w0\;mov.b\\t%w2,%x0\;extu.l\\t%S0"
+ [(set_attr "length" "8")
+ (set_attr "cc" "set_znv")])
+
;; Extract the exponent of a float.
(define_insn_and_split "*extzv_8_23"
@@ -2727,17 +2861,110 @@
[(set_attr "cc" "clobber")
(set_attr "length" "6")])
-;; ior:HI
+(define_insn_and_split "*addsi3_and_r_1"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (and:SI (match_operand:SI 1 "register_operand" "r")
+ (const_int 1))
+ (match_operand:SI 2 "register_operand" "0")))]
+ "(TARGET_H8300H || TARGET_H8300S)"
+ "#"
+ "&& reload_completed"
+ [(set (cc0)
+ (zero_extract:SI (match_dup 1)
+ (const_int 1)
+ (const_int 0)))
+ (set (pc)
+ (if_then_else (eq (cc0)
+ (const_int 0))
+ (label_ref (match_dup 3))
+ (pc)))
+ (set (match_dup 2)
+ (plus:SI (match_dup 2)
+ (const_int 1)))
+ (match_dup 3)]
+ "operands[3] = gen_label_rtx ();")
+
+(define_insn_and_split "*addsi3_and_not_r_1"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (and:SI (not:SI (match_operand:SI 1 "register_operand" "r"))
+ (const_int 1))
+ (match_operand:SI 2 "register_operand" "0")))]
+ "(TARGET_H8300H || TARGET_H8300S)"
+ "#"
+ "&& reload_completed"
+ [(set (cc0)
+ (zero_extract:SI (match_dup 1)
+ (const_int 1)
+ (const_int 0)))
+ (set (pc)
+ (if_then_else (ne (cc0)
+ (const_int 0))
+ (label_ref (match_dup 3))
+ (pc)))
+ (set (match_dup 2)
+ (plus:SI (match_dup 2)
+ (const_int 1)))
+ (match_dup 3)]
+ "operands[3] = gen_label_rtx ();")
-(define_insn "*iorhi3_zext"
+;; [ix]or:HI
+
+(define_insn "*ixorhi3_zext"
[(set (match_operand:HI 0 "register_operand" "=r")
- (ior:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r"))
- (match_operand:HI 2 "register_operand" "0")))]
+ (match_operator:HI 1 "iorxor_operator"
+ [(zero_extend:HI (match_operand:QI 2 "register_operand" "r"))
+ (match_operand:HI 3 "register_operand" "0")]))]
""
- "or\\t%X1,%s0"
+ "%c1.b\\t%X2,%s0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
+;; [ix]or:SI
+
+(define_insn "*ixorsi3_zext_qi"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "iorxor_operator"
+ [(zero_extend:SI (match_operand:QI 2 "register_operand" "r"))
+ (match_operand:SI 3 "register_operand" "0")]))]
+ ""
+ "%c1.b\\t%X2,%w0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
+(define_insn "*ixorsi3_zext_hi"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "iorxor_operator"
+ [(zero_extend:SI (match_operand:HI 2 "register_operand" "r"))
+ (match_operand:SI 3 "register_operand" "0")]))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "%c1.w\\t%T2,%f0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
+(define_insn "*ixorsi3_ashift_16"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "iorxor_operator"
+ [(ashift:SI (match_operand:SI 2 "register_operand" "r")
+ (const_int 16))
+ (match_operand:SI 3 "register_operand" "0")]))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "%c1.w\\t%f2,%e0"
+ [(set_attr "cc" "clobber")
+ (set_attr "length" "2")])
+
+(define_insn "*ixorsi3_lshiftrt_16"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 1 "iorxor_operator"
+ [(lshiftrt:SI (match_operand:SI 2 "register_operand" "r")
+ (const_int 16))
+ (match_operand:SI 3 "register_operand" "0")]))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "%c1.w\\t%e2,%f0"
[(set_attr "cc" "clobber")
(set_attr "length" "2")])
+;; ior:HI
+
(define_insn "*iorhi3_ashift_8"
[(set (match_operand:HI 0 "register_operand" "=r")
(ior:HI (ashift:HI (match_operand:HI 1 "register_operand" "r")
@@ -2768,35 +2995,29 @@
[(set_attr "cc" "clobber")
(set_attr "length" "2")])
-;; ior:SI
-
-(define_insn "*iorsi3_zexthi"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ior:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r"))
- (match_operand:SI 2 "register_operand" "0")))]
- "TARGET_H8300H || TARGET_H8300S"
- "or.w\\t%T1,%f0"
- [(set_attr "cc" "clobber")
- (set_attr "length" "2")])
-
-(define_insn "*iorsi3_zextqi"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ior:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
- (match_operand:SI 2 "register_operand" "0")))]
+(define_insn "*iorhi3_two_qi_mem"
+ [(set (match_operand:HI 0 "register_operand" "=&r")
+ (ior:HI (zero_extend:HI (match_operand:QI 1 "memory_operand" "m"))
+ (ashift:HI (subreg:HI (match_operand:QI 2 "memory_operand" "m") 0)
+ (const_int 8))))]
""
- "or\\t%X1,%w0"
+ "mov.b\\t%X2,%t0\;mov.b\\t%X1,%s0"
[(set_attr "cc" "clobber")
- (set_attr "length" "2")])
+ (set_attr "length" "16")])
-(define_insn "*iorsi3_ashift_16"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "r")
- (const_int 16))
- (match_operand:SI 2 "register_operand" "0")))]
- "TARGET_H8300H || TARGET_H8300S"
- "or.w\\t%f1,%e0"
- [(set_attr "cc" "clobber")
- (set_attr "length" "2")])
+(define_split
+ [(set (match_operand:HI 0 "register_operand" "")
+ (ior:HI (zero_extend:HI (match_operand:QI 1 "memory_operand" ""))
+ (ashift:HI (subreg:HI (match_operand:QI 2 "memory_operand" "") 0)
+ (const_int 8))))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && reload_completed
+ && byte_accesses_mergeable_p (XEXP (operands[2], 0), XEXP (operands[1], 0))"
+ [(set (match_dup 0)
+ (match_dup 3))]
+ "operands[3] = gen_rtx_MEM (HImode, XEXP (operands[2], 0));")
+
+;; ior:SI
(define_insn "*iorsi3_two_hi"
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -2808,6 +3029,35 @@
[(set_attr "cc" "clobber")
(set_attr "length" "2")])
+(define_insn_and_split "*iorsi3_two_qi_zext"
+ [(set (match_operand:SI 0 "register_operand" "=&r")
+ (ior:SI (zero_extend:SI (match_operand:QI 1 "memory_operand" "m"))
+
+ (and:SI (ashift:SI (subreg:SI (match_operand:QI 2 "memory_operand" "m") 0)
+ (const_int 8))
+ (const_int 65280))))]
+ "(TARGET_H8300H || TARGET_H8300S)"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 3)
+ (ior:HI (zero_extend:HI (match_dup 1))
+ (ashift:HI (subreg:HI (match_dup 2) 0)
+ (const_int 8))))
+ (set (match_dup 0)
+ (zero_extend:SI (match_dup 3)))]
+ "operands[3] = gen_rtx_REG (HImode, REGNO (operands[0]));")
+
+(define_insn "*iorsi3_e2f"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (and:SI (match_operand:SI 1 "register_operand" "0")
+ (const_int -65536))
+ (lshiftrt:SI (match_operand:SI 2 "register_operand" "r")
+ (const_int 16))))]
+ "TARGET_H8300H || TARGET_H8300S"
+ "mov.w\\t%e2,%f0"
+ [(set_attr "length" "2")
+ (set_attr "cc" "clobber")])
+
(define_insn_and_split "*iorsi3_two_qi_sext"
[(set (match_operand:SI 0 "register_operand" "=r")
(ior:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "0"))
@@ -2845,6 +3095,58 @@
[(set_attr "length" "6")
(set_attr "cc" "set_znv")])
+(define_insn "*iorsi3_and_ashift"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (and:SI (ashift:SI (match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "n"))
+ (match_operand:SI 3 "single_one_operand" "n"))
+ (match_operand:SI 4 "register_operand" "0")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && (INTVAL (operands[3]) & ~0xffff) == 0"
+ "*
+{
+ rtx srcpos = GEN_INT (exact_log2 (INTVAL (operands[3]))
+ - INTVAL (operands[2]));
+ rtx dstpos = GEN_INT (exact_log2 (INTVAL (operands[3])));
+ operands[2] = srcpos;
+ operands[3] = dstpos;
+ return \"bld\\t%Z2,%Y1\;bor\\t%Z3,%Y0\;bst\\t%Z3,%Y0\";
+}"
+ [(set_attr "length" "6")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*iorsi3_and_lshiftrt"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "r")
+ (match_operand:SI 2 "const_int_operand" "n"))
+ (match_operand:SI 3 "single_one_operand" "n"))
+ (match_operand:SI 4 "register_operand" "0")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && ((INTVAL (operands[3]) << INTVAL (operands[2])) & ~0xffff) == 0"
+ "*
+{
+ rtx srcpos = GEN_INT (exact_log2 (INTVAL (operands[3]))
+ + INTVAL (operands[2]));
+ rtx dstpos = GEN_INT (exact_log2 (INTVAL (operands[3])));
+ operands[2] = srcpos;
+ operands[3] = dstpos;
+ return \"bld\\t%Z2,%Y1\;bor\\t%Z3,%Y0\;bst\\t%Z3,%Y0\";
+}"
+ [(set_attr "length" "6")
+ (set_attr "cc" "clobber")])
+
+(define_insn "*iorsi3_zero_extract"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (zero_extract:SI (match_operand:SI 1 "register_operand" "r")
+ (const_int 1)
+ (match_operand:SI 2 "const_int_operand" "n"))
+ (match_operand:SI 3 "register_operand" "0")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && INTVAL (operands[2]) < 16"
+ "bld\\t%Z2,%Y1\;bor\\t#0,%w0\;bst\\t#0,%w0"
+ [(set_attr "length" "6")
+ (set_attr "cc" "clobber")])
+
(define_insn "*iorsi3_and_lshiftrt_n_sb"
[(set (match_operand:SI 0 "register_operand" "=r")
(ior:SI (and:SI (lshiftrt:SI (match_operand:SI 1 "register_operand" "r")
@@ -2940,6 +3242,46 @@
[(set_attr "length" "6")
(set_attr "cc" "clobber")])
+(define_insn_and_split "*iorsi3_ashift_16_ashift_24"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (ashift:SI (match_operand:SI 1 "register_operand" "0")
+ (const_int 16))
+ (ashift:SI (match_operand:SI 2 "register_operand" "r")
+ (const_int 24))))]
+ "(TARGET_H8300H || TARGET_H8300S)"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 3)
+ (ior:HI (ashift:HI (match_dup 4)
+ (const_int 8))
+ (match_dup 3)))
+ (parallel [(set (match_dup 0)
+ (ashift:SI (match_dup 0)
+ (const_int 16)))
+ (clobber (scratch:QI))])]
+ "operands[3] = gen_rtx_REG (HImode, REGNO (operands[0]));
+ operands[4] = gen_rtx_REG (HImode, REGNO (operands[2]));")
+
+(define_insn_and_split "*iorsi3_ashift_16_ashift_24_mem"
+ [(set (match_operand:SI 0 "register_operand" "=&r")
+ (ior:SI (and:SI (ashift:SI (subreg:SI (match_operand:QI 1 "memory_operand" "m") 0)
+ (const_int 16))
+ (const_int 16711680))
+ (ashift:SI (subreg:SI (match_operand:QI 2 "memory_operand" "m") 0)
+ (const_int 24))))]
+ "(TARGET_H8300H || TARGET_H8300S)"
+ "#"
+ "&& reload_completed"
+ [(set (match_dup 3)
+ (ior:HI (zero_extend:HI (match_dup 1))
+ (ashift:HI (subreg:HI (match_dup 2) 0)
+ (const_int 8))))
+ (parallel [(set (match_dup 0)
+ (ashift:SI (match_dup 0)
+ (const_int 16)))
+ (clobber (scratch:QI))])]
+ "operands[3] = gen_rtx_REG (HImode, REGNO (operands[0]));")
+
;; Used to add the exponent of a float.
(define_insn "*addsi3_shift"
@@ -2995,37 +3337,6 @@
(match_dup 0)))]
"operands[3] = gen_rtx_REG (HImode, REGNO (operands[2]));")
-;; xor:HI
-
-(define_insn "*xorhi3_zextqi"
- [(set (match_operand:HI 0 "register_operand" "=r")
- (xor:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r"))
- (match_operand:HI 2 "register_operand" "0")))]
- ""
- "xor\\t%X1,%s0"
- [(set_attr "cc" "clobber")
- (set_attr "length" "2")])
-
-;; xor:SI
-
-(define_insn "*xorsi3_zexthi"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (xor:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "r"))
- (match_operand:SI 2 "register_operand" "0")))]
- "TARGET_H8300H || TARGET_H8300S"
- "xor.w\\t%T1,%f0"
- [(set_attr "cc" "clobber")
- (set_attr "length" "2")])
-
-(define_insn "*xorsi3_zextqi"
- [(set (match_operand:SI 0 "register_operand" "=r")
- (xor:SI (zero_extend:SI (match_operand:QI 1 "register_operand" "r"))
- (match_operand:SI 2 "register_operand" "0")))]
- ""
- "xor\\t%X1,%w0"
- [(set_attr "cc" "clobber")
- (set_attr "length" "2")])
-
;; ashift:SI
(define_insn_and_split "*ashiftsi_sextqi_7"
@@ -3540,47 +3851,138 @@
? gen_rtx_GE (VOIDmode, cc0_rtx, const0_rtx)
: gen_rtx_LT (VOIDmode, cc0_rtx, const0_rtx));")
-;; (compare (reg:SI) (const_int)) takes 6 bytes, so we try to achieve
+;; The next three peephole2's will try to transform
+;;
+;; mov.b A,r0l (or mov.l A,er0)
+;; and.l #CST,er0
+;;
+;; into
+;;
+;; sub.l er0
+;; mov.b A,r0l
+;; and.b #CST,r0l (if CST is not 255)
+
+(define_peephole2
+ [(set (match_operand:QI 0 "register_operand" "")
+ (match_operand:QI 1 "general_operand" ""))
+ (set (match_operand:SI 2 "register_operand" "")
+ (and:SI (match_dup 2)
+ (const_int 255)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !reg_overlap_mentioned_p (operands[2], operands[1])
+ && REGNO (operands[0]) == REGNO (operands[2])"
+ [(set (match_dup 2)
+ (const_int 0))
+ (set (strict_low_part (match_dup 0))
+ (match_dup 1))]
+ "")
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "general_operand" ""))
+ (set (match_dup 0)
+ (and:SI (match_dup 0)
+ (const_int 255)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
+ && !(GET_CODE (operands[1]) == MEM && MEM_VOLATILE_P (operands[1]))"
+ [(set (match_dup 0)
+ (const_int 0))
+ (set (strict_low_part (match_dup 2))
+ (match_dup 3))]
+ "operands[2] = gen_lowpart (QImode, operands[0]);
+ operands[3] = gen_lowpart (QImode, operands[1]);")
+
+(define_peephole2
+ [(set (match_operand 0 "register_operand" "")
+ (match_operand 1 "general_operand" ""))
+ (set (match_operand:SI 2 "register_operand" "")
+ (and:SI (match_dup 2)
+ (match_operand:SI 3 "const_int_qi_operand" "")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && (GET_MODE (operands[0]) == QImode
+ || GET_MODE (operands[0]) == HImode
+ || GET_MODE (operands[0]) == SImode)
+ && GET_MODE (operands[0]) == GET_MODE (operands[1])
+ && REGNO (operands[0]) == REGNO (operands[2])
+ && !reg_overlap_mentioned_p (operands[2], operands[1])
+ && !(GET_MODE (operands[1]) != QImode
+ && GET_CODE (operands[1]) == MEM
+ && MEM_VOLATILE_P (operands[1]))"
+ [(set (match_dup 2)
+ (const_int 0))
+ (set (strict_low_part (match_dup 4))
+ (match_dup 5))
+ (set (match_dup 2)
+ (and:SI (match_dup 2)
+ (match_dup 6)))]
+ "operands[4] = gen_lowpart (QImode, operands[0]);
+ operands[5] = gen_lowpart (QImode, operands[1]);
+ operands[6] = GEN_INT (~0xff | INTVAL (operands[3]));")
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "register_operand" ""))
+ (set (match_dup 0)
+ (and:SI (match_dup 0)
+ (const_int 65280)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !reg_overlap_mentioned_p (operands[0], operands[1])"
+ [(set (match_dup 0)
+ (const_int 0))
+ (set (zero_extract:SI (match_dup 0)
+ (const_int 8)
+ (const_int 8))
+ (lshiftrt:SI (match_dup 1)
+ (const_int 8)))]
+ "")
+
+;; If a load of mem:SI is followed by an AND that turns off the upper
+;; half, then we can load mem:HI instead.
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "memory_operand" ""))
+ (set (match_dup 0)
+ (and:SI (match_dup 0)
+ (match_operand:SI 2 "const_int_operand" "")))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !MEM_VOLATILE_P (operands[1])
+ && (INTVAL (operands[2]) & ~0xffff) == 0
+ && INTVAL (operands[2]) != 255"
+ [(set (match_dup 3)
+ (match_dup 4))
+ (set (match_dup 0)
+ (and:SI (match_dup 0)
+ (match_dup 2)))]
+ "operands[3] = gen_lowpart (HImode, operands[0]);
+ operands[4] = gen_lowpart (HImode, operands[1]);")
+
+;; (compare (reg:HI) (const_int)) takes 4 bytes, so we try to achieve
;; the equivalent with shorter sequences. Here is the summary. Cases
;; are grouped for each define_peephole2.
;;
;; reg const_int use insn
;; --------------------------------------------------------
-;; live -2 eq/ne copy and inc.l
-;; live -1 eq/ne copy and inc.l
-;; live 1 eq/ne copy and dec.l
-;; live 2 eq/ne copy and dec.l
-;;
;; dead -2 eq/ne inc.l
;; dead -1 eq/ne inc.l
;; dead 1 eq/ne dec.l
;; dead 2 eq/ne dec.l
;;
-;; dead -131072 eq/ne inc.w and test
-;; dead -65536 eq/ne inc.w and test
-;; dead 65536 eq/ne inc.w and test
-;; dead 131072 eq/ne inc.w and test
+;; dead 1 geu/ltu shlr.l
+;; dead 3 (H8S) geu/ltu shlr.l
;;
-;; dead 0x000000?? except 1 and 2 eq/ne xor.b and test
-;; dead 0x0000??00 eq/ne xor.b and test
-;; dead 0x0000ffff eq/ne not.w and test
+;; ---- 255 geu/ltu mov.b
+
+;; Transform
;;
-;; dead 0xffffff?? except -1 and -2 eq/ne xor.b and not.l
-;; dead 0xffff??ff eq/ne xor.b and not.l
+;; cmp.w #1,r0
+;; bne .L1
;;
-;; dead 1 geu/ltu and.b and test
-;; dead 3 geu/ltu and.b and test
-;; dead 7 geu/ltu and.b and test
-;; dead 15 geu/ltu and.b and test
-;; dead 31 geu/ltu and.b and test
-;; dead 63 geu/ltu and.b and test
-;; dead 127 geu/ltu and.b and test
-;; dead 255 geu/ltu and.b and test
+;; into
;;
-;; dead 65535 geu/ltu mov.w
-
-;; For a small constant, it is cheaper to actually do the subtraction
-;; and then test the register.
+;; dec.w #1,r0
+;; bne .L1
(define_peephole2
[(set (cc0)
@@ -3605,7 +4007,130 @@
(pc)))]
"operands[4] = GEN_INT (- INTVAL (operands[1]));")
-;; The SImode version of the previous pattern.
+;; Transform
+;;
+;; cmp.w #1,r0
+;; bhi .L1
+;;
+;; into
+;;
+;; shlr.w r0
+;; bne .L1
+
+(define_peephole2
+ [(set (cc0)
+ (compare (match_operand:HI 0 "register_operand" "")
+ (match_operand:HI 1 "const_int_operand" "")))
+ (set (pc)
+ (if_then_else (match_operator 2 "gtuleu_operator"
+ [(cc0) (const_int 0)])
+ (label_ref (match_operand 3 "" ""))
+ (pc)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && peep2_reg_dead_p (1, operands[0])
+ && (INTVAL (operands[1]) == 1
+ || (TARGET_H8300S && INTVAL (operands[1]) == 3))"
+ [(parallel [(set (match_dup 0)
+ (lshiftrt:HI (match_dup 0)
+ (match_dup 5)))
+ (clobber (scratch:QI))])
+ (set (cc0)
+ (match_dup 0))
+ (set (pc)
+ (if_then_else (match_dup 4)
+ (label_ref (match_dup 3))
+ (pc)))]
+ "operands[4] = ((GET_CODE (operands[2]) == GTU) ?
+ gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
+ gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));
+ operands[5] = GEN_INT (exact_log2 (INTVAL (operands[1]) + 1));")
+
+;; Transform
+;;
+;; cmp.w #255,r0
+;; bhi .L1
+;;
+;; into
+;;
+;; mov.b r0h,r0h
+;; bne .L1
+
+(define_peephole2
+ [(set (cc0)
+ (compare (match_operand:HI 0 "register_operand" "")
+ (const_int 255)))
+ (set (pc)
+ (if_then_else (match_operator 1 "gtle_operator"
+ [(cc0) (const_int 0)])
+ (label_ref (match_operand 2 "" ""))
+ (pc)))]
+ "TARGET_H8300H || TARGET_H8300S"
+ [(set (cc0)
+ (and:HI (match_dup 0)
+ (const_int -256)))
+ (set (pc)
+ (if_then_else (match_dup 3)
+ (label_ref (match_dup 2))
+ (pc)))]
+ "switch (GET_CODE (operands[1]))
+ {
+ case GTU:
+ operands[3] = gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ case LEU:
+ operands[3] = gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ default:
+ operands[3] = operands[1];
+ break;
+ }")
+
+;; (compare (reg:SI) (const_int)) takes 6 bytes, so we try to achieve
+;; the equivalent with shorter sequences. Here is the summary. Cases
+;; are grouped for each define_peephole2.
+;;
+;; reg const_int use insn
+;; --------------------------------------------------------
+;; live -2 eq/ne copy and inc.l
+;; live -1 eq/ne copy and inc.l
+;; live 1 eq/ne copy and dec.l
+;; live 2 eq/ne copy and dec.l
+;;
+;; dead -2 eq/ne inc.l
+;; dead -1 eq/ne inc.l
+;; dead 1 eq/ne dec.l
+;; dead 2 eq/ne dec.l
+;;
+;; dead -131072 eq/ne inc.w and test
+;; dead -65536 eq/ne inc.w and test
+;; dead 65536 eq/ne dec.w and test
+;; dead 131072 eq/ne dec.w and test
+;;
+;; dead 0x000000?? except 1 and 2 eq/ne xor.b and test
+;; dead 0x0000??00 eq/ne xor.b and test
+;; dead 0x0000ffff eq/ne not.w and test
+;;
+;; dead 0xffffff?? except -1 and -2 eq/ne xor.b and not.l
+;; dead 0xffff??ff eq/ne xor.b and not.l
+;;
+;; live 1 geu/ltu copy and shlr.l
+;; live 3 (H8S) geu/ltu copy and shlr.l
+;;
+;; dead 1 geu/ltu shlr.l
+;; dead 3 (H8S) geu/ltu shlr.l
+;;
+;; dead 3 (H8/300H) geu/ltu and.b and test
+;; dead 7 geu/ltu and.b and test
+;; dead 15 geu/ltu and.b and test
+;; dead 31 geu/ltu and.b and test
+;; dead 63 geu/ltu and.b and test
+;; dead 127 geu/ltu and.b and test
+;; dead 255 geu/ltu and.b and test
+;;
+;; dead 65535 geu/ltu mov.w
+
+;; For a small constant, it is cheaper to actually do the subtraction
+;; and then test the register.
(define_peephole2
[(set (cc0)
@@ -3715,7 +4240,57 @@
(pc)))]
"operands[4] = GEN_INT (INTVAL (operands[1]) ^ -1);")
-;; Transform A <= 1 to (A & 0xfffffffe) == 0.
+;; Transform
+;;
+;; cmp.l #1,er0
+;; bhi .L1
+;;
+;; into
+;;
+;; mov.l er0,er1
+;; shlr.l er1
+;; bne .L1
+
+(define_peephole2
+ [(match_scratch:SI 4 "r")
+ (set (cc0)
+ (compare (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "const_int_operand" "")))
+ (set (pc)
+ (if_then_else (match_operator 2 "gtuleu_operator"
+ [(cc0) (const_int 0)])
+ (label_ref (match_operand 3 "" ""))
+ (pc)))]
+ "(TARGET_H8300H || TARGET_H8300S)
+ && !peep2_reg_dead_p (1, operands[0])
+ && (INTVAL (operands[1]) == 1
+ || (TARGET_H8300S && INTVAL (operands[1]) == 3))"
+ [(set (match_dup 4)
+ (match_dup 0))
+ (parallel [(set (match_dup 4)
+ (lshiftrt:SI (match_dup 4)
+ (match_dup 6)))
+ (clobber (scratch:QI))])
+ (set (cc0)
+ (match_dup 4))
+ (set (pc)
+ (if_then_else (match_dup 5)
+ (label_ref (match_dup 3))
+ (pc)))]
+ "operands[5] = ((GET_CODE (operands[2]) == GTU) ?
+ gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
+ gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));
+ operands[6] = GEN_INT (exact_log2 (INTVAL (operands[1]) + 1));")
+
+;; Transform
+;;
+;; cmp.l #1,er0
+;; bhi .L1
+;;
+;; into
+;;
+;; shlr.l er0
+;; bne .L1
(define_peephole2
[(set (cc0)
@@ -3729,16 +4304,11 @@
"(TARGET_H8300H || TARGET_H8300S)
&& peep2_reg_dead_p (1, operands[0])
&& (INTVAL (operands[1]) == 1
- || INTVAL (operands[1]) == 3
- || INTVAL (operands[1]) == 7
- || INTVAL (operands[1]) == 15
- || INTVAL (operands[1]) == 31
- || INTVAL (operands[1]) == 63
- || INTVAL (operands[1]) == 127
- || INTVAL (operands[1]) == 255)"
- [(set (match_dup 0)
- (and:SI (match_dup 0)
- (match_dup 5)))
+ || (TARGET_H8300S && INTVAL (operands[1]) == 3))"
+ [(parallel [(set (match_dup 0)
+ (lshiftrt:SI (match_dup 0)
+ (match_dup 5)))
+ (clobber (scratch:QI))])
(set (cc0)
(match_dup 0))
(set (pc)
@@ -3748,30 +4318,59 @@
"operands[4] = ((GET_CODE (operands[2]) == GTU) ?
gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));
- operands[5] = GEN_INT (~INTVAL (operands[1]));")
+ operands[5] = GEN_INT (exact_log2 (INTVAL (operands[1]) + 1));")
-;; Transform A <= 255 to (A & 0xff00) == 0.
+;; Transform
+;;
+;; cmp.l #15,er0
+;; bhi .L1
+;;
+;; into
+;;
+;; and #240,r0l
+;; mov.l er0,er0
+;; bne .L1
(define_peephole2
[(set (cc0)
- (compare (match_operand:HI 0 "register_operand" "")
- (const_int 255)))
+ (compare (match_operand:SI 0 "register_operand" "")
+ (match_operand:SI 1 "const_int_operand" "")))
(set (pc)
- (if_then_else (match_operator 1 "gtuleu_operator"
+ (if_then_else (match_operator 2 "gtle_operator"
[(cc0) (const_int 0)])
- (label_ref (match_operand 2 "" ""))
+ (label_ref (match_operand 3 "" ""))
(pc)))]
- "TARGET_H8300H || TARGET_H8300S"
- [(set (cc0)
- (and:HI (match_dup 0)
- (const_int -256)))
+ "(TARGET_H8300H || TARGET_H8300S)
+ && peep2_reg_dead_p (1, operands[0])
+ && ((TARGET_H8300H && INTVAL (operands[1]) == 3)
+ || INTVAL (operands[1]) == 7
+ || INTVAL (operands[1]) == 15
+ || INTVAL (operands[1]) == 31
+ || INTVAL (operands[1]) == 63
+ || INTVAL (operands[1]) == 127
+ || INTVAL (operands[1]) == 255)"
+ [(set (match_dup 0)
+ (and:SI (match_dup 0)
+ (match_dup 5)))
+ (set (cc0)
+ (match_dup 0))
(set (pc)
(if_then_else (match_dup 4)
- (label_ref (match_dup 2))
+ (label_ref (match_dup 3))
(pc)))]
- "operands[4] = ((GET_CODE (operands[1]) == GTU) ?
- gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
- gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));")
+ "switch (GET_CODE (operands[2]))
+ {
+ case GTU:
+ operands[4] = gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ case LEU:
+ operands[4] = gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ default:
+ operands[4] = operands[2];
+ break;
+ }
+ operands[5] = GEN_INT (~INTVAL (operands[1]));")
;; Transform A <= 65535 to (A & 0xffff0000) == 0.
@@ -3780,7 +4379,7 @@
(compare (match_operand:SI 0 "register_operand" "")
(const_int 65535)))
(set (pc)
- (if_then_else (match_operator 1 "gtuleu_operator"
+ (if_then_else (match_operator 1 "gtle_operator"
[(cc0) (const_int 0)])
(label_ref (match_operand 2 "" ""))
(pc)))]
@@ -3789,12 +4388,21 @@
(and:SI (match_dup 0)
(const_int -65536)))
(set (pc)
- (if_then_else (match_dup 4)
+ (if_then_else (match_dup 3)
(label_ref (match_dup 2))
(pc)))]
- "operands[4] = ((GET_CODE (operands[1]) == GTU) ?
- gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx) :
- gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx));")
+ "switch (GET_CODE (operands[1]))
+ {
+ case GTU:
+ operands[3] = gen_rtx_NE (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ case LEU:
+ operands[3] = gen_rtx_EQ (VOIDmode, cc0_rtx, const0_rtx);
+ break;
+ default:
+ operands[3] = operands[1];
+ break;
+ }")
;; For constants like -1, -2, 1, 2, it is still cheaper to make a copy
;; of the register being tested, do the subtraction on the copy, and
diff --git a/gcc/config/i386/crtdll.h b/gcc/config/i386/crtdll.h
index caddc99f761..5a85367b529 100644
--- a/gcc/config/i386/crtdll.h
+++ b/gcc/config/i386/crtdll.h
@@ -21,14 +21,23 @@ the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#undef EXTRA_OS_CPP_BUILTINS
-#define EXTRA_OS_CPP_BUILTINS() \
- do { builtin_define ("__MINGW32__=0.2"); } while (0)
+#define EXTRA_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__CRTDLL__"); \
+ builtin_define ("__MINGW32__"); \
+ builtin_define ("_WIN32"); \
+ builtin_define_std ("WIN32"); \
+ builtin_define_std ("WINNT"); \
+ } \
+ while (0)
#undef LIBGCC_SPEC
#define LIBGCC_SPEC \
- "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lmoldname -lcrtdll"
+ "%{mthreads:-lmingwthrd} -lmingw32 -lgcc -lcoldname -libmingwex -lcrtdll"
/* Specify a different entry point when linking a DLL */
#undef STARTFILE_SPEC
-#define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s} %{pg:gcrt1%O%s}"
+#define STARTFILE_SPEC "%{shared|mdll:dllcrt1%O%s} \
+ %{!shared:%{!mdll:crt1%O%s}} %{pg:gcrt1%O%s}"
diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h
index ab3b5fb2ee4..993423f9566 100644
--- a/gcc/config/i386/cygwin.h
+++ b/gcc/config/i386/cygwin.h
@@ -20,135 +20,35 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#define DBX_DEBUGGING_INFO 1
-#define SDB_DEBUGGING_INFO 1
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
#define TARGET_VERSION fprintf (stderr, " (x86 Cygwin)");
-#define TARGET_EXECUTABLE_SUFFIX ".exe"
-
-#include <stdio.h>
-
-/* Masks for subtarget switches used by other files. */
-#define MASK_NOP_FUN_DLLIMPORT 0x08000000 /* Ignore dllimport for functions */
-
-/* Used in winnt.c. */
-#define TARGET_NOP_FUN_DLLIMPORT (target_flags & MASK_NOP_FUN_DLLIMPORT)
-
-#undef SUBTARGET_SWITCHES
-#define SUBTARGET_SWITCHES \
-{ "cygwin", 0, N_("Use the Cygwin interface") }, \
-{ "no-cygwin", 0, N_("Use the Mingw32 interface") }, \
-{ "windows", 0, N_("Create GUI application") }, \
-{ "no-win32", 0, N_("Don't set Windows defines") }, \
-{ "win32", 0, N_("Set Windows defines") }, \
-{ "console", 0, N_("Create console application") },\
-{ "dll", 0, N_("Generate code for a DLL") }, \
-{ "nop-fun-dllimport", MASK_NOP_FUN_DLLIMPORT, \
- N_("Ignore dllimport for functions") }, \
-{ "no-nop-fun-dllimport", -MASK_NOP_FUN_DLLIMPORT, "" }, \
-{ "threads", 0, N_("Use Mingw-specific thread support") },
-
-#define MAYBE_UWIN_CPP_BUILTINS() /* Nothing. */
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_define ("_X86_=1"); \
- builtin_assert ("system=winnt"); \
- builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
- builtin_define ("__fastcall=__attribute__((__fastcall__))"); \
- builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
- builtin_define ("__declspec(x)=__attribute__((x))"); \
- if (!flag_iso) \
- { \
- builtin_define ("_stdcall=__attribute__((__stdcall__))"); \
- builtin_define ("_fastcall=__attribute__((__fastcall__))"); \
- builtin_define ("_cdecl=__attribute__((__cdecl__))"); \
- } \
- MAYBE_UWIN_CPP_BUILTINS (); \
- } \
- while (0)
-
-#ifdef CROSS_COMPILE
-#define CYGWIN_INCLUDES "%{!nostdinc:-idirafter " CYGWIN_CROSS_DIR "/include}"
-#define W32API_INC "%{!nostdinc:-idirafter " CYGWIN_CROSS_DIR "/include/w32api}"
-#define W32API_LIB "-L" CYGWIN_CROSS_DIR "/lib/w32api/"
-#define CYGWIN_LIB CYGWIN_CROSS_DIR "/lib"
-#define MINGW_LIBS "-L" CYGWIN_CROSS_DIR "/lib/mingw"
-#define MINGW_INCLUDES "%{!nostdinc:-isystem " CYGWIN_CROSS_DIR "/include/mingw/g++-3 "\
- "-isystem " CYGWIN_CROSS_DIR "/include/mingw/g++ "\
- "-idirafter " CYGWIN_CROSS_DIR "/include/mingw}"
-#else
-#define CYGWIN_INCLUDES "%{!nostdinc:-isystem /usr/local/include "\
- "-idirafter " CYGWIN_CROSS_DIR "/include "\
- "-idirafter /usr/include}"
-#define W32API_INC "%{!nostdinc:"\
- "-idirafter " CYGWIN_CROSS_DIR "/include/w32api "\
- "-idirafter /usr/include/w32api}"
-#define W32API_LIB "-L" CYGWIN_CROSS_DIR "/lib/w32api/ -L/usr/lib/w32api/"
-#define CYGWIN_LIB "/usr/lib"
-#define MINGW_LIBS "-L/usr/local/lib/mingw -L/usr/lib/mingw"
-#define MINGW_INCLUDES "%{!nostdinc:-isystem /usr/include/mingw/g++-3 "\
- "-isystem /usr/include/mingw/g++ "\
- "-isystem /usr/local/include/mingw "\
- "-idirafter " CYGWIN_CROSS_DIR "/include/mingw "\
- "-idirafter /usr/include/mingw}"
-#endif
-
-/* Get tree.c to declare a target-specific specialization of
- merge_decl_attributes. */
-#define TARGET_DLLIMPORT_DECL_ATTRIBUTES
-/* Support the __declspec keyword by turning them into attributes.
- We currently only support: dllimport and dllexport.
- Note that the current way we do this may result in a collision with
- predefined attributes later on. This can be solved by using one attribute,
- say __declspec__, and passing args to it. The problem with that approach
- is that args are not accumulated: each new appearance would clobber any
- existing args. */
+#define EXTRA_OS_CPP_BUILTINS() /* Nothing. */
#undef CPP_SPEC
-#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} \
+#define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \
%{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \
- %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{mthreads:-D_MT} "\
- MINGW_INCLUDES "} \
- %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix "\
- CYGWIN_INCLUDES "}\
+ %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{!ansi:%{mthreads:-D_MT}}}\
+ %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix }\
%{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\
- %{!mno-win32:" W32API_INC "}\
+ %{!nostdinc:%{!mno-win32|mno-cygwin:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\
"
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
- %{shared|mdll: %{mno-cygwin:" MINGW_LIBS " dllcrt2%O%s}}\
- %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:" MINGW_LIBS " crt2%O%s}\
+ %{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}\
+ %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s}\
%{pg:gcrt0%O%s}}}\
"
/* Normally, -lgcc is not needed since everything in it is in the DLL, but we
want to allow things to be added to it when installing new versions of
GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled
- by calling the init function from the prologue. */
+ by calling the init function from main. */
#undef LIBGCC_SPEC
-#define LIBGCC_SPEC "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} \
- -lgcc %{mno-cygwin:-lmoldname -lmingwex -lmsvcrt}"
-
-/* This macro defines names of additional specifications to put in the specs
- that can be used in various specifications like CC1_SPEC. Its definition
- is an initializer with a subgrouping for each command option.
-
- Each subgrouping contains a string constant, that defines the
- specification name, and a string constant that used by the GNU CC driver
- program.
-
- Do not define this macro if it does not need to do anything. */
-
-#undef SUBTARGET_EXTRA_SPECS
-#define SUBTARGET_EXTRA_SPECS \
- { "mingw_include_path", DEFAULT_TARGET_MACHINE }
+#define LIBGCC_SPEC \
+ "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc \
+ %{mno-cygwin:-lmoldname -lmingwex -lmsvcrt}"
/* We have to dynamic link to get to the system DLLs. All of libc, libm and
the Unix stuff is in cygwin.dll. The import library is called
@@ -164,7 +64,7 @@ Boston, MA 02111-1307, USA. */
%{mwindows:-lgdi32 -lcomdlg32} \
-luser32 -lkernel32 -ladvapi32 -lshell32"
-#define LINK_SPEC W32API_LIB "\
+#define LINK_SPEC "\
%{mwindows:--subsystem windows} \
%{mconsole:--subsystem console} \
%{shared: %{mdll: %eshared and mdll are not compatible}} \
@@ -173,296 +73,158 @@ Boston, MA 02111-1307, USA. */
%{shared|mdll: -e \
%{mno-cygwin:_DllMainCRTStartup@12} \
%{!mno-cygwin:__cygwin_dll_entry@12}}\
- --dll-search-prefix=cyg"
-
-#undef MATH_LIBRARY
-#define MATH_LIBRARY ""
-
-#define SIZE_TYPE "unsigned int"
-#define PTRDIFF_TYPE "int"
-#define WCHAR_TYPE_SIZE 16
-#define WCHAR_TYPE "short unsigned int"
-
-
-/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */
-#define HANDLE_PRAGMA_PACK_PUSH_POP 1
-
-union tree_node;
-#define TREE union tree_node *
-
-#undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_drectve
-
-#undef EXTRA_SECTION_FUNCTIONS
-#define EXTRA_SECTION_FUNCTIONS \
- DRECTVE_SECTION_FUNCTION \
- SWITCH_TO_SECTION_FUNCTION
-
-#define DRECTVE_SECTION_FUNCTION \
-void \
-drectve_section () \
-{ \
- if (in_section != in_drectve) \
- { \
- fprintf (asm_out_file, "%s\n", "\t.section .drectve\n"); \
- in_section = in_drectve; \
- } \
-}
-void drectve_section PARAMS ((void));
-
-/* Switch to SECTION (an `enum in_section').
-
- ??? This facility should be provided by GCC proper.
- The problem is that we want to temporarily switch sections in
- ASM_DECLARE_OBJECT_NAME and then switch back to the original section
- afterwards. */
-#define SWITCH_TO_SECTION_FUNCTION \
-void switch_to_section PARAMS ((enum in_section, tree)); \
-void \
-switch_to_section (section, decl) \
- enum in_section section; \
- tree decl; \
-{ \
- switch (section) \
- { \
- case in_text: text_section (); break; \
- case in_data: data_section (); break; \
- case in_named: named_section (decl, NULL, 0); break; \
- case in_drectve: drectve_section (); break; \
- default: abort (); break; \
- } \
-}
-
-/* Don't allow flag_pic to propagate since gas may produce invalid code
- otherwise. */
-
-#undef SUBTARGET_OVERRIDE_OPTIONS
-#define SUBTARGET_OVERRIDE_OPTIONS \
-do { \
- if (flag_pic) \
- { \
- warning ("-f%s ignored for target (all code is position independent)",\
- (flag_pic > 1) ? "PIC" : "pic"); \
- flag_pic = 0; \
- } \
-} while (0) \
-
-/* Define this macro if references to a symbol must be treated
- differently depending on something about the variable or
- function named by the symbol (such as what section it is in).
-
- On i386 running Windows NT, modify the assembler name with a suffix
- consisting of an atsign (@) followed by string of digits that represents
- the number of bytes of arguments passed to the function, if it has the
- attribute STDCALL.
-
- In addition, we must mark dll symbols specially. Definitions of
- dllexport'd objects install some info in the .drectve section.
- References to dllimport'd objects are fetched indirectly via
- _imp__. If both are declared, dllexport overrides. This is also
- needed to implement one-only vtables: they go into their own
- section and we need to set DECL_SECTION_NAME so we do that here.
- Note that we can be called twice on the same decl. */
-
-#undef TARGET_ENCODE_SECTION_INFO
-#define TARGET_ENCODE_SECTION_INFO i386_pe_encode_section_info
-#undef TARGET_STRIP_NAME_ENCODING
-#define TARGET_STRIP_NAME_ENCODING i386_pe_strip_name_encoding_full
-
-/* Output a reference to a label. */
-#undef ASM_OUTPUT_LABELREF
-#define ASM_OUTPUT_LABELREF i386_pe_output_labelref
-
-/* Output a common block. */
-#undef ASM_OUTPUT_COMMON
-#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
-do { \
- if (i386_pe_dllexport_name_p (NAME)) \
- i386_pe_record_exported_symbol (NAME, 1); \
- if (! i386_pe_dllimport_name_p (NAME)) \
- { \
- fprintf ((STREAM), "\t.comm\t"); \
- assemble_name ((STREAM), (NAME)); \
- fprintf ((STREAM), ", %d\t%s %d\n", \
- (ROUNDED), ASM_COMMENT_START, (SIZE)); \
- } \
-} while (0)
-
-/* Output the label for an initialized variable. */
-#undef ASM_DECLARE_OBJECT_NAME
-#define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL) \
-do { \
- if (i386_pe_dllexport_name_p (NAME)) \
- i386_pe_record_exported_symbol (NAME, 1); \
- ASM_OUTPUT_LABEL ((STREAM), (NAME)); \
-} while (0)
-
-
-/* Emit code to check the stack when allocating more that 4000
- bytes in one go. */
-
-#define CHECK_STACK_LIMIT 4000
-
-/* By default, target has a 80387, uses IEEE compatible arithmetic,
- returns float values in the 387 and needs stack probes.
- We also align doubles to 64-bits for MSVC default compatibility. */
-
-#undef TARGET_SUBTARGET_DEFAULT
-#define TARGET_SUBTARGET_DEFAULT \
- (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_STACK_PROBE \
- | MASK_ALIGN_DOUBLE)
-
-/* This is how to output an assembler line
- that says to advance the location counter
- to a multiple of 2**LOG bytes. */
-
-#undef ASM_OUTPUT_ALIGN
-#define ASM_OUTPUT_ALIGN(FILE,LOG) \
- if ((LOG)!=0) fprintf ((FILE), "\t.align %d\n", 1<<(LOG))
-
-/* Define this macro if in some cases global symbols from one translation
- unit may not be bound to undefined symbols in another translation unit
- without user intervention. For instance, under Microsoft Windows
- symbols must be explicitly imported from shared libraries (DLLs). */
-#define MULTIPLE_SYMBOL_SPACES
-
-extern void i386_pe_unique_section PARAMS ((TREE, int));
-#define TARGET_ASM_UNIQUE_SECTION i386_pe_unique_section
-
-#define SUPPORTS_ONE_ONLY 1
-
-/* Switch into a generic section. */
-#define TARGET_ASM_NAMED_SECTION i386_pe_asm_named_section
-
-/* Select attributes for named sections. */
-#define TARGET_SECTION_TYPE_FLAGS i386_pe_section_type_flags
-
-/* Write the extra assembler code needed to declare a function
- properly. If we are generating SDB debugging information, this
- will happen automatically, so we only need to handle other cases. */
-#undef ASM_DECLARE_FUNCTION_NAME
-#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
- do \
- { \
- if (i386_pe_dllexport_name_p (NAME)) \
- i386_pe_record_exported_symbol (NAME, 0); \
- if (write_symbols != SDB_DEBUG) \
- i386_pe_declare_function_type (FILE, NAME, TREE_PUBLIC (DECL)); \
- ASM_OUTPUT_LABEL (FILE, NAME); \
- } \
- while (0)
-
-/* Add an external function to the list of functions to be declared at
- the end of the file. */
-#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
- do \
- { \
- if (TREE_CODE (DECL) == FUNCTION_DECL) \
- i386_pe_record_external_function (NAME); \
- } \
- while (0)
-
-/* Declare the type properly for any external libcall. */
-#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
- i386_pe_declare_function_type (FILE, XSTR (FUN, 0), 1)
-
-/* This says out to put a global symbol in the BSS section. */
-#undef ASM_OUTPUT_ALIGNED_BSS
-#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
- asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
-
-/* Output function declarations at the end of the file. */
-#undef ASM_FILE_END
-#define ASM_FILE_END(FILE) \
- i386_pe_asm_file_end (FILE)
-
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START " #"
-
-/* DWARF2 Unwinding doesn't work with exception handling yet. To make
- it work, we need to build a libgcc_s.dll, and dcrt0.o should be
- changed to call __register_frame_info/__deregister_frame_info. */
-#define DWARF2_UNWIND_INFO 0
-
-/* Don't assume anything about the header files. */
-#define NO_IMPLICIT_EXTERN_C
-
-#undef PROFILE_HOOK
-#define PROFILE_HOOK(LABEL) \
- if (MAIN_NAME_P (DECL_NAME (current_function_decl))) \
- { \
- emit_call_insn (gen_rtx (CALL, VOIDmode, \
- gen_rtx_MEM (FUNCTION_MODE, \
- gen_rtx_SYMBOL_REF (Pmode, "_monstartup")), \
- const0_rtx)); \
- }
-
-/* Java Native Interface (JNI) methods on Win32 are invoked using the
- stdcall calling convention. */
-#undef MODIFY_JNI_METHOD_CALL
-#define MODIFY_JNI_METHOD_CALL(MDECL) \
- build_type_attribute_variant ((MDECL), \
- build_tree_list (get_identifier ("stdcall"), \
- NULL))
-
-
-/* External function declarations. */
-
-extern void i386_pe_record_external_function PARAMS ((const char *));
-extern void i386_pe_declare_function_type PARAMS ((FILE *, const char *, int));
-extern void i386_pe_record_exported_symbol PARAMS ((const char *, int));
-extern void i386_pe_asm_file_end PARAMS ((FILE *));
-extern int i386_pe_dllexport_name_p PARAMS ((const char *));
-extern int i386_pe_dllimport_name_p PARAMS ((const char *));
-
-/* For Win32 ABI compatibility */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* MSVC returns aggregate types of up to 8 bytes via registers.
- See i386.c:ix86_return_in_memory. */
-#undef MS_AGGREGATE_RETURN
-#define MS_AGGREGATE_RETURN 1
-
-/* No data type wants to be aligned rounder than this. */
-#undef BIGGEST_ALIGNMENT
-#define BIGGEST_ALIGNMENT 128
-
-/* Native complier aligns internal doubles in structures on dword boundaries. */
-#undef BIGGEST_FIELD_ALIGNMENT
-#define BIGGEST_FIELD_ALIGNMENT 64
-
-/* A bit-field declared as `int' forces `int' alignment for the struct. */
-#undef PCC_BITFIELD_TYPE_MATTERS
-#define PCC_BITFIELD_TYPE_MATTERS 1
-#define GROUP_BITFIELDS_BY_ALIGN TYPE_NATIVE(rec)
-
-
-/* Enable alias attribute support. */
-#ifndef SET_ASM_OP
-#define SET_ASM_OP "\t.set\t"
+ %{!mno-cygwin:--dll-search-prefix=cyg}"
+
+/* Allocate space for all of the machine-spec-specific stuff.
+ Allocate enough space for cygwin -> mingw32 munging plus
+ possible addition of "/mingw". */
+
+#ifndef CYGWIN_MINGW_SUBDIR
+#define CYGWIN_MINGW_SUBDIR "/mingw"
+#endif
+#define CYGWIN_MINGW_SUBDIR_LEN (sizeof (CYGWIN_MINGW_SUBDIR) - 1)
+
+#ifdef GPLUSPLUS_INCLUDE_DIR
+char cygwin_gplusplus_include_dir[sizeof (GPLUSPLUS_INCLUDE_DIR) + 1
+ + (CYGWIN_MINGW_SUBDIR_LEN)]
+ = GPLUSPLUS_INCLUDE_DIR;
+#undef GPLUSPLUS_INCLUDE_DIR
+#define GPLUSPLUS_INCLUDE_DIR ((const char *) cygwin_gplusplus_include_dir)
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
#endif
-/* Override GCC's relative pathname lookup (ie., relocatability) unless
- otherwise told by other subtargets. */
-#ifndef WIN32_NO_ABSOLUTE_INST_DIRS
-#undef MD_STARTFILE_PREFIX
-#define MD_STARTFILE_PREFIX "/usr/lib/"
+#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
+char cygwin_gplusplus_tool_include_dir[sizeof (GPLUSPLUS_TOOL_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = GPLUSPLUS_TOOL_INCLUDE_DIR;
+#undef GPLUSPLUS_TOOL_INCLUDE_DIR
+#define GPLUSPLUS_TOOL_INCLUDE_DIR ((const char *) cygwin_gplusplus_tool_include_dir)
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
+#endif
-#undef STANDARD_STARTFILE_PREFIX
-#define STANDARD_STARTFILE_PREFIX "/usr/lib/mingw/"
+#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
+char cygwin_gplusplus_backward_include_dir[sizeof (GPLUSPLUS_BACKWARD_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = GPLUSPLUS_BACKWARD_INCLUDE_DIR;
+#undef GPLUSPLUS_BACKWARD_INCLUDE_DIR
+#define GPLUSPLUS_BACKWARD_INCLUDE_DIR ((const char *) cygwin_gplusplus_backward_include_dir)
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
+#endif
-#ifndef CROSS_COMPILE
+#ifdef LOCAL_INCLUDE_DIR
+char cygwin_local_include_dir[sizeof (LOCAL_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = LOCAL_INCLUDE_DIR;
#undef LOCAL_INCLUDE_DIR
+#define LOCAL_INCLUDE_DIR ((const char *) cygwin_local_include_dir)
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
+#endif
+
+#ifdef CROSS_INCLUDE_DIR
+char cygwin_cross_include_dir[sizeof (CROSS_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = CROSS_INCLUDE_DIR;
+#undef CROSS_INCLUDE_DIR
+#define CROSS_INCLUDE_DIR ((const char *) cygwin_cross_include_dir)
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
+#endif
+
+#ifdef TOOL_INCLUDE_DIR
+char cygwin_tool_include_dir[sizeof (TOOL_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = TOOL_INCLUDE_DIR;
#undef TOOL_INCLUDE_DIR
-#undef SYSTEM_INCLUDE_DIR
+#define TOOL_INCLUDE_DIR ((const char *) cygwin_tool_include_dir)
+
+#ifndef CROSS_COMPILE
+#undef STANDARD_INCLUDE_DIR
+#define STANDARD_INCLUDE_DIR "/usr/include"
+char cygwin_standard_include_dir[sizeof (STANDARD_INCLUDE_DIR) + 1
+ + CYGWIN_MINGW_SUBDIR_LEN]
+ = STANDARD_INCLUDE_DIR;
#undef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR 0
-#endif /* not CROSS_COMPILE */
-#endif /* not WIN32_NO_ABSOLUTE_INST_DIRS */
+#define STANDARD_INCLUDE_DIR ((const char *) cygwin_standard_include_dir)
+#endif
-#undef TREE
+#ifndef GEN_CVT_ARRAY
+#define GEN_CVT_ARRAY
+#endif
+#endif
-#ifndef BUFSIZ
-# undef FILE
+#ifndef GEN_CVT_ARRAY
+extern char *cvt_to_mingw[];
+#else
+char *cvt_to_mingw[] =
+ {
+#ifdef GPLUSPLUS_INCLUDE_DIR
+ cygwin_gplusplus_include_dir,
+#endif
+
+#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
+ cygwin_gplusplus_tool_include_dir,
+#endif
+
+#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
+ cygwin_gplusplus_backward_include_dir,
+#endif
+
+#ifdef LOCAL_INCLUDE_DIR
+ cygwin_local_include_dir,
+#endif
+
+#ifdef CROSS_INCLUDE_DIR
+ cygwin_cross_include_dir,
+#endif
+
+#ifdef TOOL_INCLUDE_DIR
+ cygwin_tool_include_dir,
+#endif
+
+#ifdef STANDARD_INCLUDE_DIR
+ cygwin_standard_include_dir,
+#endif
+
+ NULL
+ };
+#undef GEN_CVT_ARRAY
+#endif /*GEN_CVT_ARRAY*/
+
+void mingw_scan PARAMS ((int, const char * const *, char **));
+#if 1
+#define GCC_DRIVER_HOST_INITIALIZATION \
+do \
+{ \
+ mingw_scan(argc, argv, (char **) &spec_machine); \
+ } \
+while (0)
+#else
+#define GCC_DRIVER_HOST_INITIALIZATION \
+do \
+{ \
+ char *cprefix = concat (tooldir_base_prefix, spec_machine, \
+ dir_separator_str, NULL); \
+ if (!IS_ABSOLUTE_PATHNAME (cprefix)) \
+ cprefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, \
+ spec_version, dir_separator_str, tooldir_prefix, NULL); \
+ add_prefix (&exec_prefixes,\
+ concat (cprefix, "../../../../", spec_machine, "/bin/", NULL), \
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \
+ add_prefix (&exec_prefixes, cprefix, \
+ "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \
+ add_prefix (&startfile_prefixes,\
+ concat (standard_startfile_prefix, "w32api", NULL),\
+ "GCC", PREFIX_PRIORITY_LAST, 0, NULL);\
+ mingw_scan(argc, argv, &spec_machine); \
+ } \
+while (0)
#endif
diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h
index 55c29fd945f..43881894f36 100644
--- a/gcc/config/i386/darwin.h
+++ b/gcc/config/i386/darwin.h
@@ -68,6 +68,11 @@ Boston, MA 02111-1307, USA. */
#undef TARGET_DEEP_BRANCH_PREDICTION
#define TARGET_DEEP_BRANCH_PREDICTION 0
+/* For now, disable dynamic-no-pic. We'll need to go through i386.c
+ with a fine-tooth comb looking for refs to flag_pic! */
+#define MASK_MACHO_DYNAMIC_NO_PIC 0
+#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC)
+
/* Define the syntax of pseudo-ops, labels and comments. */
#define LPREFIX "L"
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index b83aae745c8..beafa792cc7 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -194,7 +194,7 @@ extern void x86_emit_floatuns PARAMS ((rtx [2]));
#ifdef TREE_CODE
-extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx));
+extern void init_cumulative_args PARAMS ((CUMULATIVE_ARGS *, tree, rtx, tree));
extern rtx function_arg PARAMS ((CUMULATIVE_ARGS *, enum machine_mode, tree, int));
extern int function_arg_pass_by_reference PARAMS ((CUMULATIVE_ARGS *,
enum machine_mode,
@@ -226,6 +226,7 @@ extern int x86_field_alignment PARAMS ((tree, int));
extern rtx ix86_tls_get_addr PARAMS ((void));
extern void x86_machine_dependent_reorg PARAMS ((rtx));
+extern bool ix86_must_pass_in_stack PARAMS ((enum machine_mode mode, tree));
/* In winnt.c */
extern int i386_pe_dllexport_name_p PARAMS ((const char *));
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 81d64375e91..fab8d95bd56 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -45,6 +45,7 @@ Boston, MA 02111-1307, USA. */
#include "target.h"
#include "target-def.h"
#include "langhooks.h"
+#include "cgraph.h"
#ifndef CHECK_STACK_LIMIT
#define CHECK_STACK_LIMIT (-1)
@@ -529,10 +530,6 @@ const int x86_ext_80387_constants = m_K6 | m_ATHLON | m_PENT4 | m_PPRO;
epilogue code. */
#define FAST_PROLOGUE_INSN_COUNT 20
-/* Set by prologue expander and used by epilogue expander to determine
- the style used. */
-static int use_fast_prologue_epilogue;
-
/* Names for 8 (low), 8 (high), and 16-bit registers, respectively. */
static const char *const qi_reg_name[] = QI_REGISTER_NAMES;
static const char *const qi_high_reg_name[] = QI_HIGH_REGISTER_NAMES;
@@ -723,6 +720,10 @@ struct ix86_frame
HOST_WIDE_INT frame_pointer_offset;
HOST_WIDE_INT hard_frame_pointer_offset;
HOST_WIDE_INT stack_pointer_offset;
+
+ /* When save_regs_using_mov is set, emit prologue using
+ move instead of push instructions. */
+ bool save_regs_using_mov;
};
/* Used to enable/disable debugging features. */
@@ -1379,7 +1380,13 @@ override_options ()
ix86_fpmath = FPMATH_SSE;
}
else
- ix86_fpmath = FPMATH_387;
+ {
+ ix86_fpmath = FPMATH_387;
+ /* i386 ABI does not specify red zone. It still makes sense to use it
+ when programmer takes care to stack from being destroyed. */
+ if (!(target_flags_explicit & MASK_NO_RED_ZONE))
+ target_flags |= MASK_NO_RED_ZONE;
+ }
if (ix86_fpmath_string != 0)
{
@@ -1765,13 +1772,15 @@ ix86_function_arg_regno_p (regno)
For a library call, FNTYPE is 0. */
void
-init_cumulative_args (cum, fntype, libname)
+init_cumulative_args (cum, fntype, libname, fndecl)
CUMULATIVE_ARGS *cum; /* Argument info to initialize */
tree fntype; /* tree ptr for function decl */
rtx libname; /* SYMBOL_REF of library name or 0 */
+ tree fndecl;
{
static CUMULATIVE_ARGS zero_cum;
tree param, next_param;
+ bool user_convention = false;
if (TARGET_DEBUG_ARG)
{
@@ -1797,7 +1806,10 @@ init_cumulative_args (cum, fntype, libname)
tree attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (fntype));
if (attr)
- cum->nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
+ {
+ cum->nregs = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
+ user_convention = true;
+ }
}
cum->maybe_vaarg = false;
@@ -1808,6 +1820,23 @@ init_cumulative_args (cum, fntype, libname)
{
cum->nregs = 2;
cum->fastcall = 1;
+ user_convention = true;
+ }
+ }
+
+ /* Use register calling convention for local functions when possible. */
+ if (!TARGET_64BIT && !user_convention && fndecl
+ && flag_unit_at_a_time)
+ {
+ struct cgraph_local_info *i = cgraph_local_info (fndecl);
+ if (i && i->local)
+ {
+ /* We can't use regparm(3) for nested functions as these use
+ static chain pointer in third argument. */
+ if (DECL_CONTEXT (fndecl) && !DECL_NO_STATIC_CHAIN (fndecl))
+ cum->nregs = 2;
+ else
+ cum->nregs = 3;
}
}
@@ -1914,6 +1943,10 @@ classify_argument (mode, type, classes, bit_offset)
if (bytes < 0)
return 0;
+ if (mode != VOIDmode
+ && MUST_PASS_IN_STACK (mode, type))
+ return 0;
+
if (type && AGGREGATE_TYPE_P (type))
{
int i;
@@ -2838,6 +2871,8 @@ ix86_setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
/* Indicate to allocate space on the stack for varargs save area. */
ix86_save_varrargs_registers = 1;
+ cfun->stack_alignment_needed = 128;
+
fntype = TREE_TYPE (current_function_decl);
stdarg_p = (TYPE_ARG_TYPES (fntype) != 0
&& (TREE_VALUE (tree_last (TYPE_ARG_TYPES (fntype)))
@@ -4800,7 +4835,8 @@ ix86_save_reg (regno, maybe_eh_return)
&& regno == REAL_PIC_OFFSET_TABLE_REGNUM
&& (regs_ever_live[REAL_PIC_OFFSET_TABLE_REGNUM]
|| current_function_profile
- || current_function_calls_eh_return))
+ || current_function_calls_eh_return
+ || current_function_uses_const_pool))
{
if (ix86_select_alt_pic_regnum () != INVALID_REGNUM)
return 0;
@@ -4884,6 +4920,43 @@ ix86_compute_frame_layout (frame)
frame->nregs = ix86_nsaved_regs ();
total_size = size;
+ /* During reload iteration the amount of registers saved can change.
+ Recompute the value as needed. Do not recompute when amount of registers
+ didn't change as reload does mutiple calls to the function and does not
+ expect the decision to change within single iteration. */
+ if (!optimize_size
+ && cfun->machine->use_fast_prologue_epilogue_nregs != frame->nregs)
+ {
+ int count = frame->nregs;
+
+ cfun->machine->use_fast_prologue_epilogue_nregs = count;
+ /* The fast prologue uses move instead of push to save registers. This
+ is significantly longer, but also executes faster as modern hardware
+ can execute the moves in parallel, but can't do that for push/pop.
+
+ Be careful about choosing what prologue to emit: When function takes
+ many instructions to execute we may use slow version as well as in
+ case function is known to be outside hot spot (this is known with
+ feedback only). Weight the size of function by number of registers
+ to save as it is cheap to use one or two push instructions but very
+ slow to use many of them. */
+ if (count)
+ count = (count - 1) * FAST_PROLOGUE_INSN_COUNT;
+ if (cfun->function_frequency < FUNCTION_FREQUENCY_NORMAL
+ || (flag_branch_probabilities
+ && cfun->function_frequency < FUNCTION_FREQUENCY_HOT))
+ cfun->machine->use_fast_prologue_epilogue = false;
+ else
+ cfun->machine->use_fast_prologue_epilogue
+ = !expensive_function_p (count);
+ }
+ if (TARGET_PROLOGUE_USING_MOVE
+ && cfun->machine->use_fast_prologue_epilogue)
+ frame->save_regs_using_mov = true;
+ else
+ frame->save_regs_using_mov = false;
+
+
/* Skip return address and saved base pointer. */
offset = frame_pointer_needed ? UNITS_PER_WORD * 2 : UNITS_PER_WORD;
@@ -4956,10 +5029,15 @@ ix86_compute_frame_layout (frame)
(size + frame->padding1 + frame->padding2
+ frame->outgoing_arguments_size + frame->va_arg_size);
- if (TARGET_64BIT && TARGET_RED_ZONE && current_function_sp_is_unchanging
+ if (!frame->to_allocate && frame->nregs <= 1)
+ frame->save_regs_using_mov = false;
+
+ if (TARGET_RED_ZONE && current_function_sp_is_unchanging
&& current_function_is_leaf)
{
frame->red_zone_size = frame->to_allocate;
+ if (frame->save_regs_using_mov)
+ frame->red_zone_size += frame->nregs * UNITS_PER_WORD;
if (frame->red_zone_size > RED_ZONE_SIZE - RED_ZONE_RESERVE)
frame->red_zone_size = RED_ZONE_SIZE - RED_ZONE_RESERVE;
}
@@ -5028,35 +5106,9 @@ ix86_expand_prologue ()
rtx insn;
bool pic_reg_used;
struct ix86_frame frame;
- int use_mov = 0;
HOST_WIDE_INT allocate;
ix86_compute_frame_layout (&frame);
- if (!optimize_size)
- {
- int count = frame.nregs;
-
- /* The fast prologue uses move instead of push to save registers. This
- is significantly longer, but also executes faster as modern hardware
- can execute the moves in parallel, but can't do that for push/pop.
-
- Be careful about choosing what prologue to emit: When function takes
- many instructions to execute we may use slow version as well as in
- case function is known to be outside hot spot (this is known with
- feedback only). Weight the size of function by number of registers
- to save as it is cheap to use one or two push instructions but very
- slow to use many of them. */
- if (count)
- count = (count - 1) * FAST_PROLOGUE_INSN_COUNT;
- if (cfun->function_frequency < FUNCTION_FREQUENCY_NORMAL
- || (flag_branch_probabilities
- && cfun->function_frequency < FUNCTION_FREQUENCY_HOT))
- use_fast_prologue_epilogue = 0;
- else
- use_fast_prologue_epilogue = !expensive_function_p (count);
- if (TARGET_PROLOGUE_USING_MOVE)
- use_mov = use_fast_prologue_epilogue;
- }
/* Note: AT&T enter does NOT have reversed args. Enter is probably
slower on all targets. Also sdb doesn't like it. */
@@ -5071,16 +5123,19 @@ ix86_expand_prologue ()
}
allocate = frame.to_allocate;
- /* In case we are dealing only with single register and empty frame,
- push is equivalent of the mov+add sequence. */
- if (allocate == 0 && frame.nregs <= 1)
- use_mov = 0;
- if (!use_mov)
+ if (!frame.save_regs_using_mov)
ix86_emit_save_regs ();
else
allocate += frame.nregs * UNITS_PER_WORD;
+ /* When using red zone we may start register saving before allocating
+ the stack frame saving one cycle of the prologue. */
+ if (TARGET_RED_ZONE && frame.save_regs_using_mov)
+ ix86_emit_save_regs_using_mov (frame_pointer_needed ? hard_frame_pointer_rtx
+ : stack_pointer_rtx,
+ -frame.nregs * UNITS_PER_WORD);
+
if (allocate == 0)
;
else if (! TARGET_STACK_PROBE || allocate < CHECK_STACK_LIMIT)
@@ -5114,7 +5169,7 @@ ix86_expand_prologue ()
call. */
emit_insn (gen_blockage (const0_rtx));
}
- if (use_mov)
+ if (frame.save_regs_using_mov && !TARGET_RED_ZONE)
{
if (!frame_pointer_needed || !frame.to_allocate)
ix86_emit_save_regs_using_mov (stack_pointer_rtx, frame.to_allocate);
@@ -5213,11 +5268,12 @@ ix86_expand_epilogue (style)
tuning in future. */
if ((!sp_valid && frame.nregs <= 1)
|| (TARGET_EPILOGUE_USING_MOVE
- && use_fast_prologue_epilogue
+ && cfun->machine->use_fast_prologue_epilogue
&& (frame.nregs > 1 || frame.to_allocate))
|| (frame_pointer_needed && !frame.nregs && frame.to_allocate)
|| (frame_pointer_needed && TARGET_USE_LEAVE
- && use_fast_prologue_epilogue && frame.nregs == 1)
+ && cfun->machine->use_fast_prologue_epilogue
+ && frame.nregs == 1)
|| current_function_calls_eh_return)
{
/* Restore registers. We can use ebp or esp to address the memory
@@ -5264,7 +5320,8 @@ ix86_expand_epilogue (style)
GEN_INT (frame.to_allocate
+ frame.nregs * UNITS_PER_WORD)));
/* If not an i386, mov & pop is faster than "leave". */
- else if (TARGET_USE_LEAVE || optimize_size || !use_fast_prologue_epilogue)
+ else if (TARGET_USE_LEAVE || optimize_size
+ || !cfun->machine->use_fast_prologue_epilogue)
emit_insn (TARGET_64BIT ? gen_leave_rex64 () : gen_leave ());
else
{
@@ -5653,26 +5710,7 @@ bool
constant_address_p (x)
rtx x;
{
- switch (GET_CODE (x))
- {
- case LABEL_REF:
- case CONST_INT:
- return true;
-
- case CONST_DOUBLE:
- return TARGET_64BIT;
-
- case CONST:
- /* For Mach-O, really believe the CONST. */
- if (TARGET_MACHO)
- return true;
- /* Otherwise fall through. */
- case SYMBOL_REF:
- return !flag_pic && legitimate_constant_p (x);
-
- default:
- return false;
- }
+ return CONSTANT_P (x) && legitimate_address_p (Pmode, x, 1);
}
/* Nonzero if the constant value X is a legitimate general operand
@@ -6023,7 +6061,12 @@ legitimate_address_p (mode, addr, strict)
that never results in lea, this seems to be easier and
correct fix for crash to disable this test. */
}
- else if (!CONSTANT_ADDRESS_P (disp))
+ else if (GET_CODE (disp) != LABEL_REF
+ && GET_CODE (disp) != CONST_INT
+ && (GET_CODE (disp) != CONST
+ || !legitimate_constant_p (disp))
+ && (GET_CODE (disp) != SYMBOL_REF
+ || !legitimate_constant_p (disp)))
{
reason = "displacement is not constant";
goto report_error;
@@ -6033,11 +6076,6 @@ legitimate_address_p (mode, addr, strict)
reason = "displacement is out of range";
goto report_error;
}
- else if (!TARGET_64BIT && GET_CODE (disp) == CONST_DOUBLE)
- {
- reason = "displacement is a const_double";
- goto report_error;
- }
}
/* Everything looks valid. */
@@ -7434,10 +7472,8 @@ print_operand (file, x, code)
}
x = XEXP (x, 0);
- if (flag_pic && CONSTANT_ADDRESS_P (x))
- output_pic_addr_const (file, x, code);
/* Avoid (%rip) for call operands. */
- else if (CONSTANT_ADDRESS_P (x) && code == 'P'
+ if (CONSTANT_ADDRESS_P (x) && code == 'P'
&& GET_CODE (x) != CONST_INT)
output_addr_const (file, x);
else if (this_is_asm_operands && ! address_operand (x, VOIDmode))
@@ -8343,9 +8379,17 @@ ix86_expand_move (mode, operands)
if (strict)
;
- else if (GET_CODE (op1) == CONST_DOUBLE
- && register_operand (op0, mode))
- op1 = validize_mem (force_const_mem (mode, op1));
+ else if (GET_CODE (op1) == CONST_DOUBLE)
+ {
+ op1 = validize_mem (force_const_mem (mode, op1));
+ if (!register_operand (op0, mode))
+ {
+ rtx temp = gen_reg_rtx (mode);
+ emit_insn (gen_rtx_SET (VOIDmode, temp, op1));
+ emit_move_insn (op0, temp);
+ return;
+ }
+ }
}
}
@@ -11731,7 +11775,12 @@ ix86_expand_call (retval, fnaddr, callarg1, callarg2, pop, sibcall)
static struct machine_function *
ix86_init_machine_status ()
{
- return ggc_alloc_cleared (sizeof (struct machine_function));
+ struct machine_function *f;
+
+ f = ggc_alloc_cleared (sizeof (struct machine_function));
+ f->use_fast_prologue_epilogue_nregs = -1;
+
+ return f;
}
/* Return a MEM corresponding to a stack slot with mode MODE.
@@ -11829,7 +11878,8 @@ memory_address_length (addr)
if (disp)
{
if (GET_CODE (disp) == CONST_INT
- && CONST_OK_FOR_LETTER_P (INTVAL (disp), 'K'))
+ && CONST_OK_FOR_LETTER_P (INTVAL (disp), 'K')
+ && base)
len = 1;
else
len = 4;
@@ -11892,6 +11942,26 @@ ix86_attr_length_address_default (insn)
rtx insn;
{
int i;
+
+ if (get_attr_type (insn) == TYPE_LEA)
+ {
+ rtx set = PATTERN (insn);
+ if (GET_CODE (set) == SET)
+ ;
+ else if (GET_CODE (set) == PARALLEL
+ && GET_CODE (XVECEXP (set, 0, 0)) == SET)
+ set = XVECEXP (set, 0, 0);
+ else
+ {
+#ifdef ENABLE_CHECKING
+ abort ();
+#endif
+ return 0;
+ }
+
+ return memory_address_length (SET_SRC (set));
+ }
+
extract_insn_cached (insn);
for (i = recog_data.n_operands - 1; i >= 0; --i)
if (GET_CODE (recog_data.operand[i]) == MEM)
@@ -14487,7 +14557,7 @@ ix86_force_to_memory (mode, operand)
rtx result;
if (!reload_completed)
abort ();
- if (TARGET_64BIT && TARGET_RED_ZONE)
+ if (TARGET_RED_ZONE)
{
result = gen_rtx_MEM (mode,
gen_rtx_PLUS (Pmode,
@@ -14495,7 +14565,7 @@ ix86_force_to_memory (mode, operand)
GEN_INT (-RED_ZONE_SIZE)));
emit_move_insn (result, operand);
}
- else if (TARGET_64BIT && !TARGET_RED_ZONE)
+ else if (!TARGET_RED_ZONE && TARGET_64BIT)
{
switch (mode)
{
@@ -14564,7 +14634,7 @@ void
ix86_free_from_memory (mode)
enum machine_mode mode;
{
- if (!TARGET_64BIT || !TARGET_RED_ZONE)
+ if (!TARGET_RED_ZONE)
{
int size;
@@ -14724,9 +14794,10 @@ ix86_hard_regno_mode_ok (regno, mode)
if (FP_REGNO_P (regno))
return VALID_FP_MODE_P (mode);
if (SSE_REGNO_P (regno))
- return VALID_SSE_REG_MODE (mode);
+ return (TARGET_SSE ? VALID_SSE_REG_MODE (mode) : 0);
if (MMX_REGNO_P (regno))
- return VALID_MMX_REG_MODE (mode) || VALID_MMX_REG_MODE_3DNOW (mode);
+ return (TARGET_MMX
+ ? VALID_MMX_REG_MODE (mode) || VALID_MMX_REG_MODE_3DNOW (mode) : 0);
/* We handle both integer and floats in the general purpose registers.
In future we should be able to handle vector modes as well. */
if (!VALID_INT_MODE_P (mode) && !VALID_FP_MODE_P (mode))
@@ -14854,7 +14925,11 @@ ix86_rtx_costs (x, code, outer_code, total)
*total = 3;
else if (TARGET_64BIT && !x86_64_zero_extended_value (x))
*total = 2;
- else if (flag_pic && SYMBOLIC_CONST (x))
+ else if (flag_pic && SYMBOLIC_CONST (x)
+ && (!TARGET_64BIT
+ || (!GET_CODE (x) != LABEL_REF
+ && (GET_CODE (x) != SYMBOL_REF
+ || !SYMBOL_REF_FLAG (x)))))
*total = 1;
else
*total = 0;
@@ -14877,7 +14952,7 @@ ix86_rtx_costs (x, code, outer_code, total)
/* Start with (MEM (SYMBOL_REF)), since that's where
it'll probably end up. Add a penalty for size. */
*total = (COSTS_N_INSNS (1)
- + (flag_pic != 0)
+ + (flag_pic != 0 && !TARGET_64BIT)
+ (mode == SFmode ? 0 : mode == DFmode ? 1 : 2));
break;
}
@@ -15639,4 +15714,15 @@ x86_emit_floatuns (operands)
emit_label (donelab);
}
+/* Return if we do not know how to pass TYPE solely in registers. */
+bool
+ix86_must_pass_in_stack (mode, type)
+ enum machine_mode mode;
+ tree type;
+{
+ if (default_must_pass_in_stack (mode, type))
+ return true;
+ return (!TARGET_64BIT && type && mode == TImode);
+}
+
#include "gt-i386.h"
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index e5daa5d5c93..d8c87d4a99a 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -704,7 +704,7 @@ extern int x86_prefetch_sse;
the rounding precision is indeterminate, since either may be chosen
apparently at random. */
#define TARGET_FLT_EVAL_METHOD \
- (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 1 : 2)
+ (TARGET_MIX_SSE_I387 ? -1 : TARGET_SSE_MATH ? 0 : 2)
#define SHORT_TYPE_SIZE 16
#define INT_TYPE_SIZE 32
@@ -1664,18 +1664,7 @@ enum reg_class
definition that is usually appropriate, refer to expr.h for additional
documentation. If `REG_PARM_STACK_SPACE' is defined, the argument will be
computed in the stack and then loaded into a register. */
-#define MUST_PASS_IN_STACK(MODE, TYPE) \
- ((TYPE) != 0 \
- && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \
- || TREE_ADDRESSABLE (TYPE) \
- || ((MODE) == TImode) \
- || ((MODE) == BLKmode \
- && ! ((TYPE) != 0 \
- && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \
- && 0 == (int_size_in_bytes (TYPE) \
- % (PARM_BOUNDARY / BITS_PER_UNIT))) \
- && (FUNCTION_ARG_PADDING (MODE, TYPE) \
- == (BYTES_BIG_ENDIAN ? upward : downward)))))
+#define MUST_PASS_IN_STACK(MODE, TYPE) ix86_must_pass_in_stack ((MODE), (TYPE))
/* Value is the number of bytes of arguments automatically
popped when returning from a subroutine call.
@@ -1743,8 +1732,8 @@ typedef struct ix86_args {
for a call to a function whose data type is FNTYPE.
For a library call, FNTYPE is 0. */
-#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT) \
- init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME))
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL) \
+ init_cumulative_args (&(CUM), (FNTYPE), (LIBNAME), (FNDECL))
/* Update the data in CUM to advance over an argument
of mode MODE and data type TYPE.
@@ -3231,6 +3220,12 @@ struct machine_function GTY(())
int save_varrargs_registers;
int accesses_prev_frame;
int optimize_mode_switching;
+ /* Set by ix86_compute_frame_layout and used by prologue/epilogue expander to
+ determine the style used. */
+ int use_fast_prologue_epilogue;
+ /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE has been computed
+ for. */
+ int use_fast_prologue_epilogue_nregs;
};
#define ix86_stack_locals (cfun->machine->stack_locals)
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index d5bc3602bea..0c5c1272601 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1161,14 +1161,9 @@
(set_attr "mode" "SI")
(set_attr "length_immediate" "1")])
-; The first alternative is used only to compute proper length of instruction.
-; Reload's algorithm does not take into account the cost of spill instructions
-; needed to free register in given class, so avoid it from choosing the first
-; alternative when eax is not available.
-
(define_insn "*movsi_1"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=*?a,r,*?a,m,!*y,!rm,!*y,!*Y,!rm,!*Y")
- (match_operand:SI 1 "general_operand" "im,rinm,rinm,rin,*y,*y,rm,*Y,*Y,rm"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,m,!*y,!rm,!*y,!*Y,!rm,!*Y")
+ (match_operand:SI 1 "general_operand" "rinm,rin,*y,*y,rm,*Y,*Y,rm"))]
"(TARGET_INTER_UNIT_MOVES || optimize_size)
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{
@@ -1194,21 +1189,20 @@
}
}
[(set (attr "type")
- (cond [(eq_attr "alternative" "4,5,6")
+ (cond [(eq_attr "alternative" "2,3,4")
(const_string "mmxmov")
- (eq_attr "alternative" "7,8,9")
+ (eq_attr "alternative" "5,6,7")
(const_string "ssemov")
(and (ne (symbol_ref "flag_pic") (const_int 0))
(match_operand:SI 1 "symbolic_operand" ""))
(const_string "lea")
]
(const_string "imov")))
- (set_attr "modrm" "0,*,0,*,*,*,*,*,*,*")
- (set_attr "mode" "SI,SI,SI,SI,DI,SI,SI,TI,SI,SI")])
+ (set_attr "mode" "SI,SI,DI,SI,SI,TI,SI,SI")])
(define_insn "*movsi_1_nointernunit"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=*?a,r,*?a,m,!*y,!m,!*y,!*Y,!m,!*Y")
- (match_operand:SI 1 "general_operand" "im,rinm,rinm,rin,*y,*y,m,*Y,*Y,m"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=r,m,!*y,!m,!*y,!*Y,!m,!*Y")
+ (match_operand:SI 1 "general_operand" "rinm,rin,*y,*y,m,*Y,*Y,m"))]
"(!TARGET_INTER_UNIT_MOVES && !optimize_size)
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{
@@ -1234,17 +1228,16 @@
}
}
[(set (attr "type")
- (cond [(eq_attr "alternative" "4,5,6")
+ (cond [(eq_attr "alternative" "2,3,4")
(const_string "mmxmov")
- (eq_attr "alternative" "7,8,9")
+ (eq_attr "alternative" "5,6,7")
(const_string "ssemov")
(and (ne (symbol_ref "flag_pic") (const_int 0))
(match_operand:SI 1 "symbolic_operand" ""))
(const_string "lea")
]
(const_string "imov")))
- (set_attr "modrm" "0,*,0,*,*,*,*,*,*,*")
- (set_attr "mode" "SI,SI,SI,SI,DI,SI,SI,TI,SI,SI")])
+ (set_attr "mode" "SI,SI,DI,SI,SI,TI,SI,SI")])
;; Stores and loads of ax to arbitrary constant address.
;; We fake an second form of instruction to force reload to load address
@@ -1317,14 +1310,9 @@
[(set_attr "type" "push")
(set_attr "mode" "QI")])
-; The first alternative is used only to compute proper length of instruction.
-; Reload's algorithm does not take into account the cost of spill instructions
-; needed to free register in given class, so avoid it from choosing the first
-; alternative when eax is not available.
-
(define_insn "*movhi_1"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=*?a,r,r,*?a,r,m")
- (match_operand:HI 1 "general_operand" "i,r,rn,rm,rm,rn"))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,m")
+ (match_operand:HI 1 "general_operand" "r,rn,rm,rn"))]
"GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM"
{
switch (get_attr_type (insn))
@@ -1341,36 +1329,35 @@
}
}
[(set (attr "type")
- (cond [(and (eq_attr "alternative" "0,1")
+ (cond [(and (eq_attr "alternative" "0")
(ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL")
(const_int 0))
(eq (symbol_ref "TARGET_HIMODE_MATH")
(const_int 0))))
(const_string "imov")
- (and (eq_attr "alternative" "2,3,4")
+ (and (eq_attr "alternative" "1,2")
(match_operand:HI 1 "aligned_operand" ""))
(const_string "imov")
(and (ne (symbol_ref "TARGET_MOVX")
(const_int 0))
- (eq_attr "alternative" "0,1,3,4"))
+ (eq_attr "alternative" "0,2"))
(const_string "imovx")
]
(const_string "imov")))
(set (attr "mode")
(cond [(eq_attr "type" "imovx")
(const_string "SI")
- (and (eq_attr "alternative" "2,3,4")
+ (and (eq_attr "alternative" "1,2")
(match_operand:HI 1 "aligned_operand" ""))
(const_string "SI")
- (and (eq_attr "alternative" "0,1")
+ (and (eq_attr "alternative" "0")
(ior (eq (symbol_ref "TARGET_PARTIAL_REG_STALL")
(const_int 0))
(eq (symbol_ref "TARGET_HIMODE_MATH")
(const_int 0))))
(const_string "SI")
]
- (const_string "HI")))
- (set_attr "modrm" "0,*,*,0,*,*")])
+ (const_string "HI")))])
;; Stores and loads of ax to arbitrary constant address.
;; We fake an second form of instruction to force reload to load address
@@ -1591,7 +1578,7 @@
(define_expand "movstrictqi"
[(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" ""))
(match_operand:QI 1 "general_operand" ""))]
- "! TARGET_PARTIAL_REG_STALL"
+ "! TARGET_PARTIAL_REG_STALL || optimize_size"
{
/* Don't generate memory->memory moves, go through a register. */
if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == MEM)
@@ -1601,7 +1588,7 @@
(define_insn "*movstrictqi_1"
[(set (strict_low_part (match_operand:QI 0 "nonimmediate_operand" "+qm,q"))
(match_operand:QI 1 "general_operand" "*qn,m"))]
- "! TARGET_PARTIAL_REG_STALL
+ "(! TARGET_PARTIAL_REG_STALL || optimize_size)
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"mov{b}\t{%1, %0|%0, %1}"
[(set_attr "type" "imov")
@@ -4519,6 +4506,16 @@
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")])
+;; Avoid vector decoded form of the instruction.
+(define_peephole2
+ [(match_scratch:SF 2 "x")
+ (set (match_operand:DI 0 "register_operand" "")
+ (fix:DI (match_operand:SF 1 "memory_operand" "")))]
+ "TARGET_K8 && !optimize_size"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (fix:DI (match_dup 2)))]
+ "")
+
(define_insn "fix_truncdfdi_sse"
[(set (match_operand:DI 0 "register_operand" "=r,r")
(fix:DI (match_operand:DF 1 "nonimmediate_operand" "Y,Ym")))]
@@ -4527,6 +4524,16 @@
[(set_attr "type" "sseicvt,sseicvt")
(set_attr "athlon_decode" "double,vector")])
+;; Avoid vector decoded form of the instruction.
+(define_peephole2
+ [(match_scratch:DF 2 "Y")
+ (set (match_operand:DI 0 "register_operand" "")
+ (fix:DI (match_operand:DF 1 "memory_operand" "")))]
+ "TARGET_K8 && !optimize_size"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (fix:DI (match_dup 2)))]
+ "")
+
;; Signed conversion to SImode.
(define_expand "fix_truncxfsi2"
@@ -4630,6 +4637,16 @@
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")])
+;; Avoid vector decoded form of the instruction.
+(define_peephole2
+ [(match_scratch:SF 2 "x")
+ (set (match_operand:SI 0 "register_operand" "")
+ (fix:SI (match_operand:SF 1 "memory_operand" "")))]
+ "TARGET_K8 && !optimize_size"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (fix:SI (match_dup 2)))]
+ "")
+
(define_insn "fix_truncdfsi_sse"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(fix:SI (match_operand:DF 1 "nonimmediate_operand" "Y,Ym")))]
@@ -4638,6 +4655,16 @@
[(set_attr "type" "sseicvt")
(set_attr "athlon_decode" "double,vector")])
+;; Avoid vector decoded form of the instruction.
+(define_peephole2
+ [(match_scratch:DF 2 "Y")
+ (set (match_operand:SI 0 "register_operand" "")
+ (fix:SI (match_operand:DF 1 "memory_operand" "")))]
+ "TARGET_K8 && !optimize_size"
+ [(set (match_dup 2) (match_dup 1))
+ (set (match_dup 0) (fix:SI (match_dup 2)))]
+ "")
+
(define_split
[(set (match_operand:SI 0 "register_operand" "")
(fix:SI (match_operand 1 "register_operand" "")))
@@ -8047,9 +8074,10 @@
[(set (reg 17)
(compare
(and:DI (match_operand:DI 0 "nonimmediate_operand" "%!*a,r,!*a,r,rm")
- (match_operand:DI 1 "x86_64_szext_nonmemory_operand" "Z,Z,e,e,re"))
+ (match_operand:DI 1 "x86_64_szext_general_operand" "Z,Z,e,e,re"))
(const_int 0)))]
- "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)"
+ "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"@
test{l}\t{%k1, %k0|%k0, %k1}
test{l}\t{%k1, %k0|%k0, %k1}
@@ -8065,9 +8093,10 @@
[(set (reg 17)
(compare
(and:SI (match_operand:SI 0 "nonimmediate_operand" "%!*a,r,rm")
- (match_operand:SI 1 "nonmemory_operand" "in,in,rin"))
+ (match_operand:SI 1 "general_operand" "in,in,rin"))
(const_int 0)))]
- "ix86_match_ccmode (insn, CCNOmode)"
+ "ix86_match_ccmode (insn, CCNOmode)
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"test{l}\t{%1, %0|%0, %1}"
[(set_attr "type" "test")
(set_attr "modrm" "0,1,1")
@@ -8086,9 +8115,10 @@
(define_insn "*testhi_1"
[(set (reg 17)
(compare (and:HI (match_operand:HI 0 "nonimmediate_operand" "%!*a,r,rm")
- (match_operand:HI 1 "nonmemory_operand" "n,n,rn"))
+ (match_operand:HI 1 "general_operand" "n,n,rn"))
(const_int 0)))]
- "ix86_match_ccmode (insn, CCNOmode)"
+ "ix86_match_ccmode (insn, CCNOmode)
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"test{w}\t{%1, %0|%0, %1}"
[(set_attr "type" "test")
(set_attr "modrm" "0,1,1")
@@ -8106,9 +8136,10 @@
(define_insn "*testqi_1"
[(set (reg 17)
(compare (and:QI (match_operand:QI 0 "nonimmediate_operand" "%!*a,q,qm,r")
- (match_operand:QI 1 "nonmemory_operand" "n,n,qn,n"))
+ (match_operand:QI 1 "general_operand" "n,n,qn,n"))
(const_int 0)))]
- "ix86_match_ccmode (insn, CCNOmode)"
+ "ix86_match_ccmode (insn, CCNOmode)
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
{
if (which_alternative == 3)
{
@@ -8163,9 +8194,10 @@
(const_int 8)
(const_int 8))
(zero_extend:SI
- (match_operand:QI 1 "nonimmediate_operand" "Qm")))
+ (match_operand:QI 1 "general_operand" "Qm")))
(const_int 0)))]
- "!TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)"
+ "!TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"test{b}\t{%1, %h0|%h0, %1}"
[(set_attr "type" "test")
(set_attr "mode" "QI")])
@@ -13430,9 +13462,9 @@
(set_attr "modrm" "0")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -128))
+ (const_int -126))
(lt (minus (match_dup 0) (pc))
- (const_int 124)))
+ (const_int 128)))
(const_int 2)
(const_int 6)))])
@@ -13448,9 +13480,9 @@
(set_attr "modrm" "0")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -128))
+ (const_int -126))
(lt (minus (match_dup 0) (pc))
- (const_int 124)))
+ (const_int 128)))
(const_int 2)
(const_int 6)))])
@@ -13715,9 +13747,9 @@
[(set_attr "type" "ibr")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
- (const_int -128))
+ (const_int -126))
(lt (minus (match_dup 0) (pc))
- (const_int 124)))
+ (const_int 128)))
(const_int 2)
(const_int 5)))
(set_attr "modrm" "0")])
@@ -13841,9 +13873,9 @@
(set (attr "length")
(if_then_else (and (eq_attr "alternative" "0")
(and (ge (minus (match_dup 0) (pc))
- (const_int -128))
+ (const_int -126))
(lt (minus (match_dup 0) (pc))
- (const_int 124))))
+ (const_int 128))))
(const_int 2)
(const_int 16)))
;; We don't know the type before shorten branches. Optimistically expect
@@ -17601,6 +17633,10 @@
operands[2] = gen_lowpart (SImode, operands[2]);
PUT_MODE (operands[3], SImode);")
+; Promote the QImode tests, as i386 has encoding of the AND
+; instruction with 32-bit sign-extended immediate and thus the
+; instruction size is unchanged, except in the %eax case for
+; which it is increased by one byte, hence the ! optimize_size.
(define_split
[(set (reg 17)
(compare (and (match_operand 1 "aligned_operand" "")
@@ -17609,12 +17645,11 @@
(set (match_operand 0 "register_operand" "")
(and (match_dup 1) (match_dup 2)))]
"! TARGET_PARTIAL_REG_STALL && reload_completed
- && ix86_match_ccmode (insn, CCNOmode)
- && (GET_MODE (operands[0]) == HImode
- || (GET_MODE (operands[0]) == QImode
- /* Ensure that the operand will remain sign extended immediate. */
- && INTVAL (operands[2]) >= 0
- && (TARGET_PROMOTE_QImode || optimize_size)))"
+ /* Ensure that the operand will remain sign-extended immediate. */
+ && ix86_match_ccmode (insn, INTVAL (operands[2]) >= 0 ? CCNOmode : CCZmode)
+ && ! optimize_size
+ && ((GET_MODE (operands[0]) == HImode && ! TARGET_FAST_PREFIX)
+ || (GET_MODE (operands[0]) == QImode && TARGET_PROMOTE_QImode))"
[(parallel [(set (reg:CCNO 17)
(compare:CCNO (and:SI (match_dup 1) (match_dup 2))
(const_int 0)))
@@ -17627,17 +17662,20 @@
operands[0] = gen_lowpart (SImode, operands[0]);
operands[1] = gen_lowpart (SImode, operands[1]);")
-; Don't promote the QImode tests, as i386 don't have encoding of
-; the test instruction with 32bit sign extended immediate and thus
-; the code grows.
+; Don't promote the QImode tests, as i386 doesn't have encoding of
+; the TEST instruction with 32-bit sign-extended immediate and thus
+; the instruction size would at least double, which is not what we
+; want even with ! optimize_size.
(define_split
[(set (reg 17)
(compare (and (match_operand:HI 0 "aligned_operand" "")
(match_operand:HI 1 "const_int_operand" ""))
(const_int 0)))]
"! TARGET_PARTIAL_REG_STALL && reload_completed
- && ix86_match_ccmode (insn, CCNOmode)
- && GET_MODE (operands[0]) == HImode"
+ /* Ensure that the operand will remain sign-extended immediate. */
+ && ix86_match_ccmode (insn, INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)
+ && ! TARGET_FAST_PREFIX
+ && ! optimize_size"
[(set (reg:CCNO 17)
(compare:CCNO (and:SI (match_dup 0) (match_dup 1))
(const_int 0)))]
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index ba01c8c567b..035dd5d0b32 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -20,16 +20,8 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-/* Most of this is the same as for cygwin, except for changing some
- specs. */
-
-/* Mingw GCC, unlike Cygwin's, must be relocatable. This macro must
- be defined before any other files are included. */
-#ifndef WIN32_NO_ABSOLUTE_INST_DIRS
-#define WIN32_NO_ABSOLUTE_INST_DIRS 1
-#endif
-
-#define TARGET_EXECUTABLE_SUFFIX ".exe"
+#undef TARGET_VERSION
+#define TARGET_VERSION fprintf (stderr, " (x86 MinGW)");
/* See i386/crtdll.h for an alternative definition. */
#define EXTRA_OS_CPP_BUILTINS() \
@@ -37,32 +29,12 @@ Boston, MA 02111-1307, USA. */
{ \
builtin_define ("__MSVCRT__"); \
builtin_define ("__MINGW32__"); \
+ builtin_define ("_WIN32"); \
+ builtin_define_std ("WIN32"); \
+ builtin_define_std ("WINNT"); \
} \
while (0)
-#undef TARGET_OS_CPP_BUILTINS /* From cygwin.h. */
-#define TARGET_OS_CPP_BUILTINS() \
- do \
- { \
- builtin_define ("_WIN32"); \
- builtin_define_std ("WIN32"); \
- builtin_define_std ("WINNT"); \
- builtin_define ("_X86_=1"); \
- builtin_define ("__stdcall=__attribute__((__stdcall__))"); \
- builtin_define ("__fastcall=__attribute__((__fastcall__))"); \
- builtin_define ("__cdecl=__attribute__((__cdecl__))"); \
- builtin_define ("__declspec(x)=__attribute__((x))"); \
- if (!flag_iso) \
- { \
- builtin_define ("_stdcall=__attribute__((__stdcall__))"); \
- builtin_define ("_fastcall=__attribute__((__fastcall__))"); \
- builtin_define ("_cdecl=__attribute__((__cdecl__))"); \
- } \
- EXTRA_OS_CPP_BUILTINS (); \
- builtin_assert ("system=winnt"); \
- } \
- while (0)
-
/* Specific a different directory for the standard include files. */
#undef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR "/usr/local/mingw32/include"
@@ -96,10 +68,6 @@ Boston, MA 02111-1307, USA. */
#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \
%{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s}"
-/* MS runtime does not need a separate math library. */
-#undef MATH_LIBRARY
-#define MATH_LIBRARY ""
-
/* Output STRING, a string representing a filename, to FILE.
We canonicalize it to be in Unix format (backslashes are replaced
forward slashes. */
diff --git a/gcc/config/i386/netbsd64.h b/gcc/config/i386/netbsd64.h
index 341b6d1189b..03f3c1a5b9e 100644
--- a/gcc/config/i386/netbsd64.h
+++ b/gcc/config/i386/netbsd64.h
@@ -24,8 +24,6 @@ Boston, MA 02111-1307, USA. */
do \
{ \
NETBSD_OS_CPP_BUILTINS_ELF(); \
- if (TARGET_64BIT) \
- NETBSD_OS_CPP_BUILTINS_LP64(); \
} \
while (0)
diff --git a/gcc/config/i386/t-cygwin b/gcc/config/i386/t-cygwin
index b4ea698cbc2..1a1534d4df0 100644
--- a/gcc/config/i386/t-cygwin
+++ b/gcc/config/i386/t-cygwin
@@ -1,23 +1,18 @@
-LIB1ASMSRC = i386/cygwin.asm
-LIB1ASMFUNCS = _chkstk
-
-# cygwin always has a limits.h, but, depending upon how we are doing
-# the build, it may not be installed yet.
-LIMITS_H_TEST = true
-
-T_CPPFLAGS=-DCYGWIN_CROSS_DIR=\"$(build_tooldir)\"
+EXTRA_GCC_OBJS = cygwin1.o
# If we are building next to winsup, this will let us find the real
# limits.h when building libgcc2. Otherwise, winsup must be installed
# first.
-LIBGCC2_INCLUDES = -I$(srcdir)/../winsup/include \
- -I$(srcdir)/../winsup/cygwin/include \
- -I$(srcdir)/../winsup/w32api/include
+LIBGCC2_INCLUDES += -I$(srcdir)/../winsup/include \
+ -I$(srcdir)/../winsup/cygwin/include
+
+cygwin1.o: $(srcdir)/config/i386/cygwin1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(TM_P_H)
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/i386/cygwin1.c
-winnt.o: $(srcdir)/config/i386/winnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
- $(TM_H) $(RTL_H) $(REGS_H) hard-reg-set.h output.h $(TREE_H) flags.h \
- $(TM_P_H) toplev.h $(HASHTAB_H) $(GGC_H)
- $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/i386/winnt.c
+cygwin2.o: $(srcdir)/config/i386/cygwin2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(TM_P_H)
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ $(srcdir)/config/i386/cygwin2.c
-# Don't run fixproto
-STMP_FIXPROTO =
diff --git a/gcc/config/i386/winnt.c b/gcc/config/i386/winnt.c
index 84677613947..566e75fbda6 100644
--- a/gcc/config/i386/winnt.c
+++ b/gcc/config/i386/winnt.c
@@ -1,6 +1,6 @@
/* Subroutines for insn-output.c for Windows NT.
Contributed by Douglas Rupp (drupp@cs.washington.edu)
- Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -54,6 +54,15 @@ int i386_pe_dllimport_p PARAMS ((tree));
void i386_pe_mark_dllexport PARAMS ((tree));
void i386_pe_mark_dllimport PARAMS ((tree));
+/* This is we how mark internal identifiers with dllimport or dllexport
+ attributes. */
+#ifndef DLL_IMPORT_PREFIX
+#define DLL_IMPORT_PREFIX "#i."
+#endif
+#ifndef DLL_EXPORT_PREFIX
+#define DLL_EXPORT_PREFIX "#e."
+#endif
+
/* Handle a "dllimport" or "dllexport" attribute;
arguments as in struct attribute_spec.handler. */
tree
@@ -202,8 +211,8 @@ int
i386_pe_dllexport_name_p (symbol)
const char *symbol;
{
- return symbol[0] == DLL_IMPORT_EXPORT_PREFIX
- && symbol[1] == 'e' && symbol[2] == '.';
+ return (strncmp (DLL_EXPORT_PREFIX, symbol,
+ strlen (DLL_EXPORT_PREFIX)) == 0);
}
/* Return nonzero if SYMBOL is marked as being dllimport'd. */
@@ -212,8 +221,8 @@ int
i386_pe_dllimport_name_p (symbol)
const char *symbol;
{
- return symbol[0] == DLL_IMPORT_EXPORT_PREFIX
- && symbol[1] == 'i' && symbol[2] == '.';
+ return (strncmp (DLL_IMPORT_PREFIX, symbol,
+ strlen (DLL_IMPORT_PREFIX)) == 0);
}
/* Mark a DECL as being dllexport'd.
@@ -237,12 +246,13 @@ i386_pe_mark_dllexport (decl)
else
abort ();
if (i386_pe_dllimport_name_p (oldname))
- oldname += 9;
+ /* Remove DLL_IMPORT_PREFIX. */
+ oldname += strlen (DLL_IMPORT_PREFIX);
else if (i386_pe_dllexport_name_p (oldname))
return; /* already done */
- newname = alloca (strlen (oldname) + 4);
- sprintf (newname, "%ce.%s", DLL_IMPORT_EXPORT_PREFIX, oldname);
+ newname = alloca (strlen (DLL_EXPORT_PREFIX) + strlen (oldname) + 1);
+ sprintf (newname, "%s%s", DLL_EXPORT_PREFIX, oldname);
/* We pass newname through get_identifier to ensure it has a unique
address. RTL processing can sometimes peek inside the symbol ref
@@ -316,8 +326,8 @@ i386_pe_mark_dllimport (decl)
return;
}
- newname = alloca (strlen (oldname) + 4);
- sprintf (newname, "%ci.%s", DLL_IMPORT_EXPORT_PREFIX, oldname);
+ newname = alloca (strlen (DLL_IMPORT_PREFIX) + strlen (oldname) + 1);
+ sprintf (newname, "%s%s", DLL_IMPORT_PREFIX, oldname);
/* We pass newname through get_identifier to ensure it has a unique
address. RTL processing can sometimes peek inside the symbol ref
@@ -366,7 +376,8 @@ gen_fastcall_suffix (decl)
}
}
- newsym = xmalloc (strlen (asmname) + 11);
+ /* Assume max of 8 base 10 digits in the suffix. */
+ newsym = xmalloc (1 + strlen (asmname) + 1 + 8 + 1);
sprintf (newsym, "%c%s@%d", FASTCALL_PREFIX, asmname, total/BITS_PER_UNIT);
return IDENTIFIER_POINTER (get_identifier (newsym));
}
@@ -404,7 +415,8 @@ gen_stdcall_suffix (decl)
}
}
- newsym = xmalloc (strlen (asmname) + 10);
+ /* Assume max of 8 base 10 digits in the suffix. */
+ newsym = xmalloc (strlen (asmname) + 1 + 8 + 1);
sprintf (newsym, "%s@%d", asmname, total/BITS_PER_UNIT);
return IDENTIFIER_POINTER (get_identifier (newsym));
}
@@ -447,8 +459,8 @@ i386_pe_encode_section_info (decl, first)
i386_pe_mark_dllimport (decl);
/* It might be that DECL has already been marked as dllimport, but a
subsequent definition nullified that. The attribute is gone but
- DECL_RTL still has (DLL_IMPORT_EXPORT_PREFIX)i._imp__foo. We need
- to remove that. Ditto for the DECL_NON_ADDR_CONST_P flag. */
+ DECL_RTL still has (DLL_IMPORT_PREFIX) prefixed. We need to remove
+ that. Ditto for the DECL_NON_ADDR_CONST_P flag. */
else if ((TREE_CODE (decl) == FUNCTION_DECL
|| TREE_CODE (decl) == VAR_DECL)
&& DECL_RTL (decl) != NULL_RTX
@@ -458,7 +470,8 @@ i386_pe_encode_section_info (decl, first)
&& i386_pe_dllimport_name_p (XSTR (XEXP (XEXP (DECL_RTL (decl), 0), 0), 0)))
{
const char *oldname = XSTR (XEXP (XEXP (DECL_RTL (decl), 0), 0), 0);
- tree idp = get_identifier (oldname + 9);
+ /* Remove DLL_IMPORT_PREFIX. */
+ tree idp = get_identifier (oldname + strlen (DLL_IMPORT_PREFIX));
rtx newrtl = gen_rtx (SYMBOL_REF, Pmode, IDENTIFIER_POINTER (idp));
XEXP (DECL_RTL (decl), 0) = newrtl;
@@ -477,8 +490,12 @@ const char *
i386_pe_strip_name_encoding (str)
const char *str;
{
- if (*str == DLL_IMPORT_EXPORT_PREFIX)
- str += 3;
+ if (strncmp (str, DLL_IMPORT_PREFIX, strlen (DLL_IMPORT_PREFIX))
+ == 0)
+ str += strlen (DLL_IMPORT_PREFIX);
+ else if (strncmp (str, DLL_EXPORT_PREFIX, strlen (DLL_EXPORT_PREFIX))
+ == 0)
+ str += strlen (DLL_EXPORT_PREFIX);
if (*str == '*')
str += 1;
return str;
@@ -508,30 +525,34 @@ void i386_pe_output_labelref (stream, name)
FILE *stream;
const char *name;
{
- char prefix[4];
-
- sprintf (prefix, "%ci.", DLL_IMPORT_EXPORT_PREFIX);
- if (strncmp (name, prefix, strlen (prefix)) == 0)
- {
- if (name[3] == FASTCALL_PREFIX)
+ if (strncmp (name, DLL_IMPORT_PREFIX, strlen (DLL_IMPORT_PREFIX))
+ == 0)
+ /* A dll import */
+ {
+ if (name[strlen (DLL_IMPORT_PREFIX)] == FASTCALL_PREFIX)
+ /* A dllimport fastcall symbol. */
{
fprintf (stream, "__imp_%s",
i386_pe_strip_name_encoding (name));
}
else
+ /* A dllimport non-fastcall symbol. */
{
fprintf (stream, "__imp__%s",
i386_pe_strip_name_encoding (name));
}
}
else if ((name[0] == FASTCALL_PREFIX)
- || ((name[0] == DLL_IMPORT_EXPORT_PREFIX)
- && (name[3] == FASTCALL_PREFIX)))
+ || (strncmp (name, DLL_EXPORT_PREFIX, strlen (DLL_EXPORT_PREFIX)
+ == 0
+ && name[strlen (DLL_EXPORT_PREFIX)] == FASTCALL_PREFIX)))
+ /* A fastcall symbol. */
{
fprintf (stream, "%s",
i386_pe_strip_name_encoding (name));
}
else
+ /* Everything else. */
{
fprintf (stream, "%s%s", USER_LABEL_PREFIX,
i386_pe_strip_name_encoding (name));
diff --git a/gcc/config/i960/i960.h b/gcc/config/i960/i960.h
index f93f0159f10..83ba1912924 100644
--- a/gcc/config/i960/i960.h
+++ b/gcc/config/i960/i960.h
@@ -1289,9 +1289,6 @@ extern struct rtx_def *i960_compare_op0, *i960_compare_op1;
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- fputs (".globl ", (FILE)); \
- assemble_name ((FILE), (NAME)); \
- fputs ("\n", (FILE)); \
ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
} while (0)
diff --git a/gcc/config/ia64/crtbegin.asm b/gcc/config/ia64/crtbegin.asm
index cb49e10bc56..c64de028eef 100644
--- a/gcc/config/ia64/crtbegin.asm
+++ b/gcc/config/ia64/crtbegin.asm
@@ -33,33 +33,33 @@ __DTOR_LIST__:
__JCR_LIST__:
.section .sdata
- .type dtor_ptr#,@object
- .size dtor_ptr#,8
+ .type dtor_ptr,@object
+ .size dtor_ptr,8
dtor_ptr:
- data8 @gprel(__DTOR_LIST__# + 8)
+ data8 @gprel(__DTOR_LIST__ + 8)
/* A handle for __cxa_finalize to manage c++ local destructors. */
- .global __dso_handle#
- .type __dso_handle#,@object
- .size __dso_handle#,8
+ .global __dso_handle
+ .type __dso_handle,@object
+ .size __dso_handle,8
#ifdef SHARED
.section .data
__dso_handle:
- data8 __dso_handle#
+ data8 __dso_handle
#else
.section .bss
__dso_handle:
data8 0
#endif
- .hidden __dso_handle#
+ .hidden __dso_handle
#ifdef HAVE_INITFINI_ARRAY
-.section .fini_array,"a","progbits"
+.section .fini_array,"a"
data8 @fptr(__do_global_dtors_aux)
-.section .init_array,"a","progbits"
+.section .init_array,"a"
data8 @fptr(__do_jv_register_classes)
data8 @fptr(__do_global_ctors_aux)
@@ -79,7 +79,7 @@ __dso_handle:
*/
.section .fini,"ax","progbits"
{ .mlx
- movl r2 = @pcrel(__do_global_dtors_aux# - 16)
+ movl r2 = @pcrel(__do_global_dtors_aux - 16)
}
{ .mii
mov r3 = ip
@@ -97,7 +97,7 @@ __dso_handle:
.section .init,"ax","progbits"
{ .mlx
- movl r2 = @pcrel(__do_jv_register_classes# - 16)
+ movl r2 = @pcrel(__do_jv_register_classes - 16)
}
{ .mii
mov r3 = ip
@@ -113,56 +113,58 @@ __dso_handle:
#endif /* !HAVE_INITFINI_ARRAY */
.section .text
- .align 16
- .proc __do_global_dtors_aux#
+ .align 32
+ .proc __do_global_dtors_aux
__do_global_dtors_aux:
+ .prologue
#ifndef SHARED
- { .mii
- alloc loc3 = ar.pfs, 0, 4, 1, 0
- addl loc0 = @gprel(dtor_ptr#), gp
- mov loc1 = b0
- }
- { .mib
- mov loc2 = gp
- br.sptk.few 1f
- ;;
- }
+ .save ar.pfs, r35
+ alloc loc3 = ar.pfs, 0, 4, 1, 0
+ addl loc0 = @gprel(dtor_ptr), gp
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+
+ mov loc2 = gp
+ nop 0
+ br.sptk.many 1f
+ ;;
#else
/*
if (__cxa_finalize)
__cxa_finalize(__dso_handle)
*/
- { .mii
- alloc loc3 = ar.pfs, 0, 4, 1, 0
- addl loc0 = @gprel(dtor_ptr#), gp
- addl r16 = @ltoff(@fptr(__cxa_finalize#)), gp
- ;;
- }
- { .mmi
- ld8 r16 = [r16]
- ;;
- addl out0 = @ltoff(__dso_handle#), gp
- cmp.ne p7, p0 = r0, r16
- ;;
- }
- { .mmi
- ld8 out0 = [out0]
-(p7) ld8 r18 = [r16], 8
- mov loc1 = b0
- ;;
- }
- { .mfi
- mov loc2 = gp
-(p7) mov b6 = r18
- }
- {
- .mfb
-(p7) ld8 gp = [r16]
-(p7) br.call.sptk.many b0 = b6
- }
- { .mfb
- br.sptk.few 1f
- }
+ .save ar.pfs, r35
+ alloc loc3 = ar.pfs, 0, 4, 1, 0
+ addl loc0 = @gprel(dtor_ptr), gp
+ addl r16 = @ltoff(@fptr(__cxa_finalize)), gp
+ ;;
+
+ ld8 r16 = [r16]
+ ;;
+ addl out0 = @ltoff(__dso_handle), gp
+ cmp.ne p7, p0 = r0, r16
+ ;;
+
+ ld8 out0 = [out0]
+(p7) ld8 r18 = [r16], 8
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+ ;;
+
+ mov loc2 = gp
+(p7) ld8 gp = [r16]
+(p7) mov b6 = r18
+
+ nop 0
+ nop 0
+(p7) br.call.sptk.many rp = b6
+ ;;
+
+ nop 0
+ nop 0
+ br.sptk.many 1f
#endif
/*
do {
@@ -171,89 +173,75 @@ __do_global_dtors_aux:
} while (dtor_ptr);
*/
0:
- { .mmi
- st8 [loc0] = r15
- ld8 r17 = [r16], 8
- ;;
- }
- { .mib
- ld8 gp = [r16]
- mov b6 = r17
- br.call.sptk.many b0 = b6
- }
-1:
- { .mmi
- ld8 r15 = [loc0]
- ;;
- add r16 = r15, loc2
- adds r15 = 8, r15
- ;;
- }
- { .mmi
- ld8 r16 = [r16]
- mov gp = loc2
- mov b0 = loc1
- ;;
- }
- { .mib
- cmp.ne p6, p0 = r0, r16
- mov ar.pfs = loc3
-(p6) br.cond.sptk.few 0b
- }
- { .bbb
- br.ret.sptk.many b0
- ;;
- }
- .endp __do_global_dtors_aux#
-
- .align 16
- .proc __do_jv_register_classes#
+ st8 [loc0] = r15 // update dtor_ptr (in memory)
+ ld8 r17 = [r16], 8 // r17 <- dtor's entry-point
+ nop 0
+ ;;
+
+ ld8 gp = [r16] // gp <- dtor's gp
+ mov b6 = r17
+ br.call.sptk.many rp = b6
+
+1: ld8 r15 = [loc0] // r15 <- dtor_ptr (gp-relative)
+ ;;
+ add r16 = r15, loc2 // r16 <- dtor_ptr (absolute)
+ adds r15 = 8, r15
+ ;;
+
+ ld8 r16 = [r16] // r16 <- pointer to dtor's fdesc
+ mov rp = loc1
+ mov ar.pfs = loc3
+ ;;
+
+ cmp.ne p6, p0 = r0, r16
+(p6) br.cond.sptk.few 0b
+ br.ret.sptk.many rp
+ .endp __do_global_dtors_aux
+
+ .align 32
+ .proc __do_jv_register_classes
__do_jv_register_classes:
- { .mlx
- alloc loc2 = ar.pfs, 0, 3, 1, 0
- movl out0 = @gprel(__JCR_LIST__)
- ;;
- }
- { .mmi
- addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp
- add out0 = out0, gp
- ;;
- }
- { .mmi
- ld8 r14 = [r14]
- ld8 r15 = [out0]
- cmp.ne p6, p0 = r0, r0
- ;;
- }
- { .mib
- cmp.eq.or p6, p0 = r0, r14
- cmp.eq.or p6, p0 = r0, r15
-(p6) br.ret.sptk.many b0
- }
- { .mii
- ld8 r15 = [r14], 8
- mov loc0 = b0
- mov loc1 = gp
- ;;
- }
- { .mib
- ld8 gp = [r14]
- mov b6 = r15
- br.call.sptk.many b0 = b6
- ;;
- }
- { .mii
- mov gp = loc1
- mov b0 = loc0
- mov ar.pfs = loc2
- }
- { .bbb
- br.ret.sptk.many b0
- ;;
- }
- .endp __do_jv_register_classes#
+ .save ar.pfs, r33
+ alloc loc1 = ar.pfs, 0, 2, 1, 0
+ movl out0 = @gprel(__JCR_LIST__)
+ ;;
+
+ addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp
+ add out0 = out0, gp
+ .save rp, loc0
+ mov loc0 = rp
+ .body
+ ;;
+
+ ld8 r14 = [r14]
+ ld8 r15 = [out0]
+ cmp.ne p6, p0 = r0, r0
+ ;;
+
+ cmp.eq.or p6, p0 = r0, r14
+ cmp.eq.or p6, p0 = r0, r15
+(p6) br.ret.sptk.many rp
+
+ ld8 r15 = [r14], 8
+ ;;
+ ld8 gp = [r14]
+ mov b6 = r15
+
+ nop 0
+ nop 0
+ br.call.sptk.many rp = b6
+ ;;
+
+ nop 0
+ mov rp = loc0
+ mov ar.pfs = loc1
+
+ nop 0
+ nop 0
+ br.ret.sptk.many rp
+ .endp __do_jv_register_classes
#ifdef SHARED
-.weak __cxa_finalize#
+.weak __cxa_finalize
#endif
.weak _Jv_RegisterClasses
diff --git a/gcc/config/ia64/crtend.asm b/gcc/config/ia64/crtend.asm
index 303f30cbce8..f357e5652f4 100644
--- a/gcc/config/ia64/crtend.asm
+++ b/gcc/config/ia64/crtend.asm
@@ -49,7 +49,7 @@ __JCR_END__:
*/
.section .init,"ax","progbits"
{ .mlx
- movl r2 = @pcrel(__do_global_ctors_aux# - 16)
+ movl r2 = @pcrel(__do_global_ctors_aux - 16)
}
{ .mii
mov r3 = ip
@@ -65,63 +65,54 @@ __JCR_END__:
#endif /* !HAVE_INITFINI_ARRAY */
.text
- .align 16
+ .align 32
#ifdef HAVE_INITFINI_ARRAY
/* This is referenced from crtbegin.o. */
- .globl __do_global_ctors_aux#
- .type __do_global_ctors_aux#,@function
- .hidden __do_global_ctors_aux#
+ .globl __do_global_ctors_aux
+ .type __do_global_ctors_aux,@function
+ .hidden __do_global_ctors_aux
#endif
- .proc __do_global_ctors_aux#
+ .proc __do_global_ctors_aux
__do_global_ctors_aux:
+ .prologue
/*
for (loc0 = __CTOR_END__-1; *p != -1; --p)
(*p) ();
*/
- { .mlx
- alloc loc4 = ar.pfs, 0, 5, 0, 0
- movl loc0 = @gprel(__CTOR_END__# - 8)
- ;;
- }
- { .mmi
- add loc0 = loc0, gp
- mov loc1 = b0
- ;;
- }
- {
- .mmi
- ld8 loc3 = [loc0], -8
- mov loc2 = gp
- ;;
- }
- { .mfb
- cmp.eq p6, p0 = -1, loc3
-(p6) br.cond.spnt.few 2f
- }
-0:
- { .mmi
- ld8 r15 = [loc3], 8
- ;;
- ld8 gp = [loc3]
- mov b6 = r15
- }
- { .mfb
- ld8 loc3 = [loc0], -8
- br.call.sptk.many b0 = b6
- ;;
- }
- { .mfb
- cmp.ne p6, p0 = -1, loc3
-(p6) br.cond.sptk.few 0b
- }
-2:
- { .mii
- mov gp = loc2
- mov b0 = loc1
- mov ar.pfs = loc4
- }
- { .bbb
- br.ret.sptk.many b0
- ;;
- }
- .endp __do_global_ctors_aux#
+ .save ar.pfs, r34
+ alloc loc2 = ar.pfs, 0, 4, 0, 0
+ movl loc0 = @gprel(__CTOR_END__ - 8)
+ ;;
+
+ add loc0 = loc0, gp
+ ;;
+ ld8 loc3 = [loc0], -8
+ .save rp, loc1
+ mov loc1 = rp
+ .body
+ ;;
+
+ cmp.eq p6, p0 = -1, loc3
+ nop 0
+(p6) br.cond.spnt.few 2f
+
+0: ld8 r15 = [loc3], 8
+ ;;
+ ld8 gp = [loc3]
+ mov b6 = r15
+
+ ld8 loc3 = [loc0], -8
+ nop 0
+ br.call.sptk.many rp = b6
+ ;;
+
+ cmp.ne p6, p0 = -1, loc3
+ nop 0
+(p6) br.cond.sptk.few 0b
+
+2: nop.m 0
+ mov rp = loc1
+ mov ar.pfs = loc2
+
+ br.ret.sptk.many rp
+ .endp __do_global_ctors_aux
diff --git a/gcc/config/ia64/crti.asm b/gcc/config/ia64/crti.asm
index 4b94b7f6953..4b48e3d40e8 100644
--- a/gcc/config/ia64/crti.asm
+++ b/gcc/config/ia64/crti.asm
@@ -1,11 +1,11 @@
# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
# Written By Timothy Wall
-#
+#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by 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 with other programs, and to distribute
@@ -13,23 +13,23 @@
# 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 another program.)
-#
+#
# This file 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; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-#
+#
# As a special exception, if you link this library with files
# compiled with GCC to produce an executable, this does not 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 just make a stack frame for the contents of the .fini and
# .init sections. Users may put any desired instructions in those
@@ -39,7 +39,7 @@
.section ".init"
.align 16
- .global _init#
+ .global _init
_init:
.prologue 14, 33
.save ar.pfs, r34
@@ -49,10 +49,10 @@ _init:
.save rp, r33
mov r33 = b0
.body
-
+
.section ".fini"
.align 16
- .global _fini#
+ .global _fini
_fini:
.prologue 14, 33
.save ar.pfs, r34
@@ -62,5 +62,5 @@ _fini:
.save rp, r33
mov r33 = b0
.body
-
+
# end of crti.asm
diff --git a/gcc/config/ia64/crtn.asm b/gcc/config/ia64/crtn.asm
index 0b45d380aad..48a9a03fdc6 100644
--- a/gcc/config/ia64/crtn.asm
+++ b/gcc/config/ia64/crtn.asm
@@ -1,11 +1,11 @@
# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
# Written By Timothy Wall
-#
+#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by 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 with other programs, and to distribute
@@ -13,23 +13,23 @@
# 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 another program.)
-#
+#
# This file 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; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
-#
+#
# As a special exception, if you link this library with files
# compiled with GCC to produce an executable, this does not 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 just makes sure that the .fini and .init sections do in
# fact return. Users may put any desired instructions in those sections.
@@ -44,7 +44,7 @@
.restore sp
mov r12 = r35
br.ret.sptk.many b0
-
+
.section ".fini"
;;
mov ar.pfs = r34
diff --git a/gcc/config/ia64/fde-glibc.c b/gcc/config/ia64/fde-glibc.c
index 6bd193fdf41..8c9b55a1b1e 100644
--- a/gcc/config/ia64/fde-glibc.c
+++ b/gcc/config/ia64/fde-glibc.c
@@ -1,20 +1,20 @@
/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@cygnus.com>.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/ia64/freebsd.h b/gcc/config/ia64/freebsd.h
index 3082f4f701a..d337d57d0d6 100644
--- a/gcc/config/ia64/freebsd.h
+++ b/gcc/config/ia64/freebsd.h
@@ -2,20 +2,20 @@
Copyright (C) 2001 Free Software Foundation, Inc.
Contributed by David E. O'Brien <obrien@FreeBSD.org> and BSDi.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h
index 9a80cc6d449..8e933b85fd4 100644
--- a/gcc/config/ia64/hpux.h
+++ b/gcc/config/ia64/hpux.h
@@ -3,20 +3,20 @@
Contributed by Steve Ellcey <sje@cup.hp.com> and
Reva Cuthbertson <reva@cup.hp.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/ia64/hpux_longdouble.h b/gcc/config/ia64/hpux_longdouble.h
index 53330332be8..ec704bd9802 100644
--- a/gcc/config/ia64/hpux_longdouble.h
+++ b/gcc/config/ia64/hpux_longdouble.h
@@ -1,20 +1,20 @@
/* Definitions of long double support for GNU compiler.
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/ia64/ia64-c.c b/gcc/config/ia64/ia64-c.c
index efd3a9a1efc..b95c21d4d9b 100644
--- a/gcc/config/ia64/ia64-c.c
+++ b/gcc/config/ia64/ia64-c.c
@@ -2,20 +2,20 @@
Copyright (C) 2002 Free Software Foundation, Inc.
Contributed by Steve Ellcey <sje@cup.hp.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */
#include "c-common.h"
#include "c-pragma.h"
#include "toplev.h"
+#include "tm_p.h"
static void ia64_hpux_add_pragma_builtin PARAMS ((tree func));
diff --git a/gcc/config/ia64/ia64-modes.def b/gcc/config/ia64/ia64-modes.def
index 0c3eb127674..b46303f9d59 100644
--- a/gcc/config/ia64/ia64-modes.def
+++ b/gcc/config/ia64/ia64-modes.def
@@ -3,20 +3,20 @@
Contributed by James E. Wilson <wilson@cygnus.com> and
David Mosberger <davidm@hpl.hp.com>.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/ia64/ia64-protos.h b/gcc/config/ia64/ia64-protos.h
index 63b8572067e..7cd696ef2cd 100644
--- a/gcc/config/ia64/ia64-protos.h
+++ b/gcc/config/ia64/ia64-protos.h
@@ -1,20 +1,20 @@
/* Definitions of target machine for GNU compiler for IA-64.
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -77,11 +77,12 @@ extern int basereg_operand PARAMS((rtx, enum machine_mode));
extern rtx ia64_expand_move PARAMS ((rtx, rtx));
extern int ia64_move_ok PARAMS((rtx, rtx));
extern int ia64_depz_field_mask PARAMS((rtx, rtx));
-extern rtx ia64_gp_save_reg PARAMS((int));
extern rtx ia64_split_timode PARAMS((rtx[], rtx, rtx));
extern rtx spill_tfmode_operand PARAMS((rtx, int));
extern rtx ia64_expand_compare PARAMS((enum rtx_code, enum machine_mode));
extern void ia64_expand_call PARAMS((rtx, rtx, rtx, int));
+extern void ia64_split_call PARAMS((rtx, rtx, rtx, rtx, rtx, int, int));
+extern void ia64_reload_gp PARAMS((void));
extern HOST_WIDE_INT ia64_initial_elimination_offset PARAMS((int, int));
extern void ia64_expand_prologue PARAMS((void));
@@ -97,6 +98,7 @@ extern void ia64_print_operand PARAMS((FILE *, rtx, int));
extern enum reg_class ia64_secondary_reload_class PARAMS((enum reg_class,
enum machine_mode,
rtx));
+extern void ia64_output_dwarf_dtprel PARAMS ((FILE*, int, rtx));
extern void ia64_reorg PARAMS((rtx));
extern void process_for_unwind_directive PARAMS ((FILE *, rtx));
extern const char *get_bundle_name PARAMS ((int));
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 67d005abcdc..b74dd593cb2 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -3,20 +3,20 @@
Contributed by James E. Wilson <wilson@cygnus.com> and
David Mosberger <davidm@hpl.hp.com>.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -123,6 +123,38 @@ unsigned int ia64_section_threshold;
TRUE if we do insn bundling instead of insn scheduling. */
int bundling_p = 0;
+/* Structure to be filled in by ia64_compute_frame_size with register
+ save masks and offsets for the current function. */
+
+struct ia64_frame_info
+{
+ HOST_WIDE_INT total_size; /* size of the stack frame, not including
+ the caller's scratch area. */
+ HOST_WIDE_INT spill_cfa_off; /* top of the reg spill area from the cfa. */
+ HOST_WIDE_INT spill_size; /* size of the gr/br/fr spill area. */
+ HOST_WIDE_INT extra_spill_size; /* size of spill area for others. */
+ HARD_REG_SET mask; /* mask of saved registers. */
+ unsigned int gr_used_mask; /* mask of registers in use as gr spill
+ registers or long-term scratches. */
+ int n_spilled; /* number of spilled registers. */
+ int reg_fp; /* register for fp. */
+ int reg_save_b0; /* save register for b0. */
+ int reg_save_pr; /* save register for prs. */
+ int reg_save_ar_pfs; /* save register for ar.pfs. */
+ int reg_save_ar_unat; /* save register for ar.unat. */
+ int reg_save_ar_lc; /* save register for ar.lc. */
+ int reg_save_gp; /* save register for gp. */
+ int n_input_regs; /* number of input registers used. */
+ int n_local_regs; /* number of local registers used. */
+ int n_output_regs; /* number of output registers used. */
+ int n_rotate_regs; /* number of rotating registers used. */
+
+ char need_regstk; /* true if a .regstk directive needed. */
+ char initialized; /* true if the data is finalized. */
+};
+
+/* Current frame information calculated by ia64_compute_frame_size. */
+static struct ia64_frame_info current_frame_info;
static int ia64_use_dfa_pipeline_interface PARAMS ((void));
static int ia64_first_cycle_multipass_dfa_lookahead PARAMS ((void));
@@ -147,6 +179,7 @@ static rtx gen_fr_spill_x PARAMS ((rtx, rtx, rtx));
static rtx gen_fr_restore_x PARAMS ((rtx, rtx, rtx));
static enum machine_mode hfa_element_mode PARAMS ((tree, int));
+static bool ia64_function_ok_for_sibcall PARAMS ((tree, tree));
static bool ia64_rtx_costs PARAMS ((rtx, int, int, int *));
static void fix_range PARAMS ((const char *));
static struct machine_function * ia64_init_machine_status PARAMS ((void));
@@ -313,6 +346,9 @@ static const struct attribute_spec ia64_attribute_table[] =
#define TARGET_HAVE_TLS true
#endif
+#undef TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL ia64_function_ok_for_sibcall
+
#undef TARGET_ASM_OUTPUT_MI_THUNK
#define TARGET_ASM_OUTPUT_MI_THUNK ia64_output_mi_thunk
#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
@@ -1317,46 +1353,6 @@ ia64_expand_move (op0, op1)
return op1;
}
-rtx
-ia64_gp_save_reg (setjmp_p)
- int setjmp_p;
-{
- rtx save = cfun->machine->ia64_gp_save;
-
- if (save != NULL)
- {
- /* We can't save GP in a pseudo if we are calling setjmp, because
- pseudos won't be restored by longjmp. For now, we save it in r4. */
- /* ??? It would be more efficient to save this directly into a stack
- slot. Unfortunately, the stack slot address gets cse'd across
- the setjmp call because the NOTE_INSN_SETJMP note is in the wrong
- place. */
-
- /* ??? Get the barf bag, Virginia. We've got to replace this thing
- in place, since this rtx is used in exception handling receivers.
- Moreover, we must get this rtx out of regno_reg_rtx or reload
- will do the wrong thing. */
- unsigned int old_regno = REGNO (save);
- if (setjmp_p && old_regno != GR_REG (4))
- {
- REGNO (save) = GR_REG (4);
- regno_reg_rtx[old_regno] = gen_rtx_raw_REG (DImode, old_regno);
- }
- }
- else
- {
- if (setjmp_p)
- save = gen_rtx_REG (DImode, GR_REG (4));
- else if (! optimize)
- save = gen_rtx_REG (DImode, LOC_REG (0));
- else
- save = gen_reg_rtx (DImode);
- cfun->machine->ia64_gp_save = save;
- }
-
- return save;
-}
-
/* Split a post-reload TImode reference into two DImode components. */
rtx
@@ -1442,12 +1438,12 @@ spill_tfmode_operand (in, force)
&& GET_MODE (SUBREG_REG (in)) == TImode
&& GET_CODE (SUBREG_REG (in)) == REG)
{
- rtx mem = gen_mem_addressof (SUBREG_REG (in), NULL_TREE);
+ rtx mem = gen_mem_addressof (SUBREG_REG (in), NULL_TREE, /*rescan=*/true);
return gen_rtx_MEM (TFmode, copy_to_reg (XEXP (mem, 0)));
}
else if (force && GET_CODE (in) == REG)
{
- rtx mem = gen_mem_addressof (in, NULL_TREE);
+ rtx mem = gen_mem_addressof (in, NULL_TREE, /*rescan=*/true);
return gen_rtx_MEM (TFmode, copy_to_reg (XEXP (mem, 0)));
}
else if (GET_CODE (in) == MEM
@@ -1494,67 +1490,148 @@ void
ia64_expand_call (retval, addr, nextarg, sibcall_p)
rtx retval;
rtx addr;
- rtx nextarg;
+ rtx nextarg ATTRIBUTE_UNUSED;
int sibcall_p;
{
- rtx insn, b0, pfs, gp_save, narg_rtx, dest;
- bool indirect_p;
- int narg;
+ rtx insn, b0;
addr = XEXP (addr, 0);
b0 = gen_rtx_REG (DImode, R_BR (0));
- pfs = gen_rtx_REG (DImode, AR_PFS_REGNUM);
-
- if (! nextarg)
- narg = 0;
- else if (IN_REGNO_P (REGNO (nextarg)))
- narg = REGNO (nextarg) - IN_REG (0);
- else
- narg = REGNO (nextarg) - OUT_REG (0);
- narg_rtx = GEN_INT (narg);
+ /* ??? Should do this for functions known to bind local too. */
if (TARGET_NO_PIC || TARGET_AUTO_PIC)
{
if (sibcall_p)
- insn = gen_sibcall_nopic (addr, narg_rtx, b0, pfs);
+ insn = gen_sibcall_nogp (addr);
else if (! retval)
- insn = gen_call_nopic (addr, narg_rtx, b0);
+ insn = gen_call_nogp (addr, b0);
else
- insn = gen_call_value_nopic (retval, addr, narg_rtx, b0);
- emit_call_insn (insn);
- return;
+ insn = gen_call_value_nogp (retval, addr, b0);
+ insn = emit_call_insn (insn);
}
-
- indirect_p = ! symbolic_operand (addr, VOIDmode);
-
- if (sibcall_p || (TARGET_CONST_GP && !indirect_p))
- gp_save = NULL_RTX;
else
- gp_save = ia64_gp_save_reg (setjmp_operand (addr, VOIDmode));
+ {
+ if (sibcall_p)
+ insn = gen_sibcall_gp (addr);
+ else if (! retval)
+ insn = gen_call_gp (addr, b0);
+ else
+ insn = gen_call_value_gp (retval, addr, b0);
+ insn = emit_call_insn (insn);
- if (gp_save)
- emit_move_insn (gp_save, pic_offset_table_rtx);
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), pic_offset_table_rtx);
+ }
- /* If this is an indirect call, then we have the address of a descriptor. */
- if (indirect_p)
+ if (sibcall_p)
{
- dest = force_reg (DImode, gen_rtx_MEM (DImode, addr));
- emit_move_insn (pic_offset_table_rtx,
- gen_rtx_MEM (DImode, plus_constant (addr, 8)));
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn), b0);
+ use_reg (&CALL_INSN_FUNCTION_USAGE (insn),
+ gen_rtx_REG (DImode, AR_PFS_REGNUM));
}
+}
+
+void
+ia64_reload_gp ()
+{
+ rtx tmp;
+
+ if (current_frame_info.reg_save_gp)
+ tmp = gen_rtx_REG (DImode, current_frame_info.reg_save_gp);
else
- dest = addr;
+ {
+ HOST_WIDE_INT offset;
+
+ offset = (current_frame_info.spill_cfa_off
+ + current_frame_info.spill_size);
+ if (frame_pointer_needed)
+ {
+ tmp = hard_frame_pointer_rtx;
+ offset = -offset;
+ }
+ else
+ {
+ tmp = stack_pointer_rtx;
+ offset = current_frame_info.total_size - offset;
+ }
+
+ if (CONST_OK_FOR_I (offset))
+ emit_insn (gen_adddi3 (pic_offset_table_rtx,
+ tmp, GEN_INT (offset)));
+ else
+ {
+ emit_move_insn (pic_offset_table_rtx, GEN_INT (offset));
+ emit_insn (gen_adddi3 (pic_offset_table_rtx,
+ pic_offset_table_rtx, tmp));
+ }
+
+ tmp = gen_rtx_MEM (DImode, pic_offset_table_rtx);
+ }
+
+ emit_move_insn (pic_offset_table_rtx, tmp);
+}
+
+void
+ia64_split_call (retval, addr, retaddr, scratch_r, scratch_b,
+ noreturn_p, sibcall_p)
+ rtx retval, addr, retaddr, scratch_r, scratch_b;
+ int noreturn_p, sibcall_p;
+{
+ rtx insn;
+ bool is_desc = false;
+
+ /* If we find we're calling through a register, then we're actually
+ calling through a descriptor, so load up the values. */
+ if (REG_P (addr))
+ {
+ rtx tmp;
+ bool addr_dead_p;
+
+ /* ??? We are currently constrained to *not* use peep2, because
+ we can legitimiately change the global lifetime of the GP
+ (in the form of killing where previously live). This is
+ because a call through a descriptor doesn't use the previous
+ value of the GP, while a direct call does, and we do not
+ commit to either form until the split here.
+
+ That said, this means that we lack precise life info for
+ whether ADDR is dead after this call. This is not terribly
+ important, since we can fix things up essentially for free
+ with the POST_DEC below, but it's nice to not use it when we
+ can immediately tell it's not necessary. */
+ addr_dead_p = ((noreturn_p || sibcall_p
+ || TEST_HARD_REG_BIT (regs_invalidated_by_call,
+ REGNO (addr)))
+ && !FUNCTION_ARG_REGNO_P (REGNO (addr)));
+
+ /* Load the code address into scratch_b. */
+ tmp = gen_rtx_POST_INC (Pmode, addr);
+ tmp = gen_rtx_MEM (Pmode, tmp);
+ emit_move_insn (scratch_r, tmp);
+ emit_move_insn (scratch_b, scratch_r);
+
+ /* Load the GP address. If ADDR is not dead here, then we must
+ revert the change made above via the POST_INCREMENT. */
+ if (!addr_dead_p)
+ tmp = gen_rtx_POST_DEC (Pmode, addr);
+ else
+ tmp = addr;
+ tmp = gen_rtx_MEM (Pmode, tmp);
+ emit_move_insn (pic_offset_table_rtx, tmp);
+
+ is_desc = true;
+ addr = scratch_b;
+ }
if (sibcall_p)
- insn = gen_sibcall_pic (dest, narg_rtx, b0, pfs);
- else if (! retval)
- insn = gen_call_pic (dest, narg_rtx, b0);
+ insn = gen_sibcall_nogp (addr);
+ else if (retval)
+ insn = gen_call_value_nogp (retval, addr, retaddr);
else
- insn = gen_call_value_pic (retval, dest, narg_rtx, b0);
+ insn = gen_call_nogp (addr, retaddr);
emit_call_insn (insn);
- if (gp_save)
- emit_move_insn (pic_offset_table_rtx, gp_save);
+ if ((!TARGET_CONST_GP || is_desc) && !noreturn_p && !sibcall_p)
+ ia64_reload_gp ();
}
/* Begin the assembly file. */
@@ -1593,39 +1670,6 @@ emit_safe_across_calls (f)
fputc ('\n', f);
}
-
-/* Structure to be filled in by ia64_compute_frame_size with register
- save masks and offsets for the current function. */
-
-struct ia64_frame_info
-{
- HOST_WIDE_INT total_size; /* size of the stack frame, not including
- the caller's scratch area. */
- HOST_WIDE_INT spill_cfa_off; /* top of the reg spill area from the cfa. */
- HOST_WIDE_INT spill_size; /* size of the gr/br/fr spill area. */
- HOST_WIDE_INT extra_spill_size; /* size of spill area for others. */
- HARD_REG_SET mask; /* mask of saved registers. */
- unsigned int gr_used_mask; /* mask of registers in use as gr spill
- registers or long-term scratches. */
- int n_spilled; /* number of spilled registers. */
- int reg_fp; /* register for fp. */
- int reg_save_b0; /* save register for b0. */
- int reg_save_pr; /* save register for prs. */
- int reg_save_ar_pfs; /* save register for ar.pfs. */
- int reg_save_ar_unat; /* save register for ar.unat. */
- int reg_save_ar_lc; /* save register for ar.lc. */
- int n_input_regs; /* number of input registers used. */
- int n_local_regs; /* number of local registers used. */
- int n_output_regs; /* number of output registers used. */
- int n_rotate_regs; /* number of rotating registers used. */
-
- char need_regstk; /* true if a .regstk directive needed. */
- char initialized; /* true if the data is finalized. */
-};
-
-/* Current frame information calculated by ia64_compute_frame_size. */
-static struct ia64_frame_info current_frame_info;
-
/* Helper function for ia64_compute_frame_size: find an appropriate general
register to spill some special register to. SPECIAL_SPILL_MASK contains
bits in GR0 to GR31 that have already been allocated by this routine.
@@ -1867,6 +1911,17 @@ ia64_compute_frame_size (size)
extra_spill_size += 8;
n_spilled += 1;
}
+
+ /* Similarly for gp. Note that if we're calling setjmp, the stacked
+ registers are clobbered, so we fall back to the stack. */
+ current_frame_info.reg_save_gp
+ = (current_function_calls_setjmp ? 0 : find_gr_spill (1));
+ if (current_frame_info.reg_save_gp == 0)
+ {
+ SET_HARD_REG_BIT (mask, GR_REG (1));
+ spill_size += 8;
+ n_spilled += 1;
+ }
}
else
{
@@ -2570,6 +2625,19 @@ ia64_expand_prologue ()
}
}
+ if (current_frame_info.reg_save_gp)
+ {
+ insn = emit_move_insn (gen_rtx_REG (DImode,
+ current_frame_info.reg_save_gp),
+ pic_offset_table_rtx);
+ /* We don't know for sure yet if this is actually needed, since
+ we've not split the PIC call patterns. If all of the calls
+ are indirect, and not followed by any uses of the gp, then
+ this save is dead. Allow it to go away. */
+ REG_NOTES (insn)
+ = gen_rtx_EXPR_LIST (REG_MAYBE_DEAD, const0_rtx, REG_NOTES (insn));
+ }
+
/* We should now be at the base of the gr/br/fr spill area. */
if (cfa_off != (current_frame_info.spill_cfa_off
+ current_frame_info.spill_size))
@@ -2751,8 +2819,13 @@ ia64_expand_epilogue (sibcall_p)
+ current_frame_info.spill_size))
abort ();
+ /* The GP may be stored on the stack in the prologue, but it's
+ never restored in the epilogue. Skip the stack slot. */
+ if (TEST_HARD_REG_BIT (current_frame_info.mask, GR_REG (1)))
+ cfa_off -= 8;
+
/* Restore all general registers. */
- for (regno = GR_REG (1); regno <= GR_REG (31); ++regno)
+ for (regno = GR_REG (2); regno <= GR_REG (31); ++regno)
if (TEST_HARD_REG_BIT (current_frame_info.mask, regno))
{
reg = gen_rtx_REG (DImode, regno);
@@ -2940,10 +3013,6 @@ ia64_hard_regno_rename_ok (from, to)
if (PR_REGNO_P (from) && PR_REGNO_P (to))
return (from & 1) == (to & 1);
- /* Reg 4 contains the saved gp; we can't reliably rename this. */
- if (from == GR_REG (4) && current_function_calls_setjmp)
- return 0;
-
return 1;
}
@@ -3572,6 +3641,23 @@ ia64_function_arg_pass_by_reference (cum, mode, type, named)
{
return type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST;
}
+
+/* True if it is OK to do sibling call optimization for the specified
+ call expression EXP. DECL will be the called function, or NULL if
+ this is an indirect call. */
+static bool
+ia64_function_ok_for_sibcall (decl, exp)
+ tree decl, exp;
+{
+ /* Direct calls are always ok. */
+ if (decl)
+ return true;
+
+ /* If TARGET_CONST_GP is in effect, then our caller expects us to
+ return with our current GP. This means that we'll always have
+ a GP reload after an indirect call. */
+ return !ia64_epilogue_uses (R_GR (1));
+}
/* Implement va_arg. */
@@ -3711,6 +3797,22 @@ ia64_function_value (valtype, func)
}
}
+/* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL.
+ We need to emit DTP-relative relocations. */
+
+void
+ia64_output_dwarf_dtprel (file, size, x)
+ FILE *file;
+ int size;
+ rtx x;
+{
+ if (size != 8)
+ abort ();
+ fputs ("\tdata8.ua\t@dtprel(", file);
+ output_addr_const (file, x);
+ fputs (")", file);
+}
+
/* Print a memory address as an operand to reference that memory location. */
/* ??? Do we need this? It gets used only for 'a' operands. We could perhaps
@@ -7012,8 +7114,11 @@ ia64_ld_address_bypass_p (producer, consumer)
mem = XVECEXP (mem, 0, 0);
while (GET_CODE (mem) == SUBREG || GET_CODE (mem) == ZERO_EXTEND)
mem = XEXP (mem, 0);
- if (GET_CODE (mem) != MEM)
+
+ /* Note that LO_SUM is used for GOT loads. */
+ if (GET_CODE (mem) != LO_SUM && GET_CODE (mem) != MEM)
abort ();
+
return reg_mentioned_p (reg, mem);
}
@@ -7942,7 +8047,7 @@ ia64_expand_fetch_and_op (binoptab, mode, arglist, target)
do {
old = tmp;
ar.ccv = tmp;
- ret = tmp + value;
+ ret = tmp <op> value;
cmpxchgsz.acq tmp = [ptr], ret
} while (tmp != old)
*/
@@ -8045,8 +8150,15 @@ ia64_expand_compare_and_swap (mode, boolp, arglist, target)
else
tmp = gen_reg_rtx (mode);
- ccv = gen_rtx_REG (mode, AR_CCV_REGNUM);
- emit_move_insn (ccv, old);
+ ccv = gen_rtx_REG (DImode, AR_CCV_REGNUM);
+ if (mode == DImode)
+ emit_move_insn (ccv, old);
+ else
+ {
+ rtx ccvtmp = gen_reg_rtx (DImode);
+ emit_insn (gen_zero_extendsidi2 (ccvtmp, old));
+ emit_move_insn (ccv, ccvtmp);
+ }
emit_insn (gen_mf ());
if (mode == SImode)
insn = gen_cmpxchg_acq_si (tmp, mem, new, ccv);
@@ -8416,6 +8528,9 @@ ia64_output_mi_thunk (file, thunk, delta, vcall_offset, function)
{
rtx this, insn, funexp;
+ reload_completed = 1;
+ no_new_pseudos = 1;
+
/* Set things up as ia64_expand_prologue might. */
last_scratch_gr_reg = 15;
@@ -8478,18 +8593,27 @@ ia64_output_mi_thunk (file, thunk, delta, vcall_offset, function)
ia64_expand_call (NULL_RTX, funexp, NULL_RTX, 1);
insn = get_last_insn ();
SIBLING_CALL_P (insn) = 1;
+
+ /* Code generation for calls relies on splitting. */
+ reload_completed = 1;
+ try_split (PATTERN (insn), insn, 0);
+
emit_barrier ();
/* Run just enough of rest_of_compilation to get the insns emitted.
There's not really enough bulk here to make other passes such as
instruction scheduling worth while. Note that use_thunk calls
assemble_start_function and assemble_end_function. */
+
insn = get_insns ();
emit_all_insn_group_barriers (NULL, insn);
shorten_branches (insn);
final_start_function (insn, file, 1);
final (insn, file, 1, 0);
final_end_function ();
+
+ reload_completed = 0;
+ no_new_pseudos = 0;
}
#include "gt-ia64.h"
diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h
index 835c93faeab..d4fb75baa94 100644
--- a/gcc/config/ia64/ia64.h
+++ b/gcc/config/ia64/ia64.h
@@ -1,22 +1,22 @@
/* Definitions of target machine GNU compiler. IA-64 version.
- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by James E. Wilson <wilson@cygnus.com> and
David Mosberger <davidm@hpl.hp.com>.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -40,11 +40,6 @@ do { \
builtin_define("__ia64__"); \
builtin_define("__itanium__"); \
builtin_define("__ELF__"); \
- if (!TARGET_ILP32) \
- { \
- builtin_define("_LP64"); \
- builtin_define("__LP64__"); \
- } \
if (TARGET_BIG_ENDIAN) \
builtin_define("__BIG_ENDIAN__"); \
} while (0)
@@ -143,6 +138,10 @@ extern int ia64_tls_size;
#define TARGET_HPUX_LD 0
+#ifndef HAVE_AS_LTOFFX_LDXMOV_RELOCS
+#define HAVE_AS_LTOFFX_LDXMOV_RELOCS 0
+#endif
+
/* This macro defines names of command options to set and clear bits in
`target_flags'. Its definition is an initializer with a subgrouping for
each command option. */
@@ -1772,61 +1771,6 @@ do { \
#define ASM_APP_OFF "#NO_APP\n"
-/* Output of Data. */
-
-/* This is how to output an assembler line defining a `char' constant
- to an xdata segment. */
-
-#define ASM_OUTPUT_XDATA_CHAR(FILE, SECTION, VALUE) \
-do { \
- fprintf (FILE, "\t.xdata1\t\"%s\", ", SECTION); \
- output_addr_const (FILE, (VALUE)); \
- fprintf (FILE, "\n"); \
-} while (0)
-
-/* This is how to output an assembler line defining a `short' constant
- to an xdata segment. */
-
-#define ASM_OUTPUT_XDATA_SHORT(FILE, SECTION, VALUE) \
-do { \
- fprintf (FILE, "\t.xdata2\t\"%s\", ", SECTION); \
- output_addr_const (FILE, (VALUE)); \
- fprintf (FILE, "\n"); \
-} while (0)
-
-/* This is how to output an assembler line defining an `int' constant
- to an xdata segment. We also handle symbol output here. */
-
-/* ??? For ILP32, also need to handle function addresses here. */
-
-#define ASM_OUTPUT_XDATA_INT(FILE, SECTION, VALUE) \
-do { \
- fprintf (FILE, "\t.xdata4\t\"%s\", ", SECTION); \
- output_addr_const (FILE, (VALUE)); \
- fprintf (FILE, "\n"); \
-} while (0)
-
-/* This is how to output an assembler line defining a `long' constant
- to an xdata segment. We also handle symbol output here. */
-
-#define ASM_OUTPUT_XDATA_DOUBLE_INT(FILE, SECTION, VALUE) \
-do { \
- int need_closing_paren = 0; \
- fprintf (FILE, "\t.xdata8\t\"%s\", ", SECTION); \
- if (!(TARGET_NO_PIC || TARGET_AUTO_PIC) \
- && GET_CODE (VALUE) == SYMBOL_REF) \
- { \
- fprintf (FILE, SYMBOL_REF_FLAG (VALUE) ? "@fptr(" : "@segrel("); \
- need_closing_paren = 1; \
- } \
- output_addr_const (FILE, VALUE); \
- if (need_closing_paren) \
- fprintf (FILE, ")"); \
- fprintf (FILE, "\n"); \
-} while (0)
-
-
-
/* Output of Uninitialized Variables. */
/* This is all handled by svr4.h. */
@@ -2050,6 +1994,13 @@ do { \
{ "loc79", LOC_REG (79) }, \
}
+/* Emit a dtp-relative reference to a TLS variable. */
+
+#ifdef HAVE_AS_TLS
+#define ASM_OUTPUT_DWARF_DTPREL(FILE, SIZE, X) \
+ ia64_output_dwarf_dtprel (FILE, SIZE, X)
+#endif
+
/* A C compound statement to output to stdio stream STREAM the assembler syntax
for an instruction operand X. X is an RTL expression. */
@@ -2087,8 +2038,13 @@ do { \
/* ??? Depends on the pointer size. */
-#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
- fprintf (STREAM, "\tdata8 @pcrel(.L%d)\n", VALUE)
+#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
+ do { \
+ if (TARGET_ILP32) \
+ fprintf (STREAM, "\tdata4 @pcrel(.L%d)\n", VALUE); \
+ else \
+ fprintf (STREAM, "\tdata8 @pcrel(.L%d)\n", VALUE); \
+ } while (0)
/* This is how to output an element of a case-vector that is absolute.
(Ia64 does not use such vectors, but we must define this macro anyway.) */
@@ -2107,7 +2063,8 @@ do { \
true if the symbol may be affected by dynamic relocations. */
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
(((CODE) == 1 ? DW_EH_PE_textrel : DW_EH_PE_datarel) \
- | ((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_udata8)
+ | ((GLOBAL) ? DW_EH_PE_indirect : 0) \
+ | (TARGET_ILP32 ? DW_EH_PE_udata4 : DW_EH_PE_udata8))
/* Handle special EH pointer encodings. Absolute, pc-relative, and
indirect are handled automatically. */
@@ -2277,7 +2234,7 @@ do { \
/* An alias for a machine mode name. This is the machine mode that elements of
a jump-table should have. */
-#define CASE_VECTOR_MODE Pmode
+#define CASE_VECTOR_MODE ptr_mode
/* Define as C expression which evaluates to nonzero if the tablejump
instruction expects the table to contain offsets from the address of the
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index 77f7f34830f..f1e4f87e237 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -3,20 +3,20 @@
;; Contributed by James E. Wilson <wilson@cygnus.com> and
;; David Mosberger <davidm@hpl.hp.com>.
-;; This file is part of GNU CC.
+;; This file is part of GCC.
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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.
@@ -83,6 +83,7 @@
(UNSPECV_SET_BSP 4)
(UNSPECV_PSAC_ALL 5) ; pred.safe_across_calls
(UNSPECV_PSAC_NORMAL 6)
+ (UNSPECV_SETJMP_RECEIVER 7)
])
;; ::::::::::::::::::::
@@ -457,22 +458,41 @@
(define_expand "load_symptr"
[(set (match_operand:DI 2 "register_operand" "")
- (plus:DI (match_dup 4) (match_operand:DI 1 "got_symbolic_operand" "")))
- (set (match_operand:DI 0 "register_operand" "") (match_dup 3))]
+ (plus:DI (high:DI (match_operand:DI 1 "got_symbolic_operand" ""))
+ (match_dup 3)))
+ (set (match_operand:DI 0 "register_operand" "")
+ (lo_sum:DI (match_dup 2) (match_dup 1)))]
""
{
- operands[3] = gen_rtx_MEM (DImode, operands[2]);
- operands[4] = pic_offset_table_rtx;
- RTX_UNCHANGING_P (operands[3]) = 1;
+ operands[3] = pic_offset_table_rtx;
})
-(define_insn "*load_symptr_internal1"
+(define_insn "*load_symptr_high"
[(set (match_operand:DI 0 "register_operand" "=r")
- (plus:DI (reg:DI 1) (match_operand 1 "got_symbolic_operand" "s")))]
+ (plus:DI (high:DI (match_operand 1 "got_symbolic_operand" "s"))
+ (match_operand:DI 2 "register_operand" "a")))]
""
- "addl %0 = @ltoff(%1), gp"
+{
+ if (HAVE_AS_LTOFFX_LDXMOV_RELOCS)
+ return "%,addl %0 = @ltoffx(%1), %2";
+ else
+ return "%,addl %0 = @ltoff(%1), %2";
+}
[(set_attr "itanium_class" "ialu")])
+(define_insn "*load_symptr_low"
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (lo_sum:DI (match_operand:DI 1 "register_operand" "r")
+ (match_operand 2 "got_symbolic_operand" "s")))]
+ ""
+{
+ if (HAVE_AS_LTOFFX_LDXMOV_RELOCS)
+ return "%,ld8.mov %0 = [%1], %2";
+ else
+ return "%,ld8 %0 = [%1]";
+}
+ [(set_attr "itanium_class" "ld")])
+
(define_insn "load_ltoff_dtpmod"
[(set (match_operand:DI 0 "register_operand" "=r")
(plus:DI (reg:DI 1)
@@ -4652,7 +4672,7 @@
(use (match_operand 3 "" ""))]
""
{
- ia64_expand_call (NULL_RTX, operands[0], operands[2], 0);
+ ia64_expand_call (NULL_RTX, operands[0], operands[2], false);
DONE;
})
@@ -4663,7 +4683,7 @@
(use (match_operand 3 "" ""))]
""
{
- ia64_expand_call (NULL_RTX, operands[0], operands[2], 1);
+ ia64_expand_call (NULL_RTX, operands[0], operands[2], true);
DONE;
})
@@ -4682,7 +4702,7 @@
(use (match_operand 4 "" ""))]
""
{
- ia64_expand_call (operands[0], operands[1], operands[3], 0);
+ ia64_expand_call (operands[0], operands[1], operands[3], false);
DONE;
})
@@ -4694,7 +4714,7 @@
(use (match_operand 4 "" ""))]
""
{
- ia64_expand_call (operands[0], operands[1], operands[3], 1);
+ ia64_expand_call (operands[0], operands[1], operands[3], true);
DONE;
})
@@ -4726,59 +4746,125 @@
DONE;
})
-(define_insn "call_nopic"
- [(call (mem:DI (match_operand:DI 0 "call_operand" "b,i"))
- (match_operand 1 "" ""))
- (clobber (match_operand:DI 2 "register_operand" "=b,b"))]
+(define_insn "call_nogp"
+ [(call (mem:DI (match_operand:DI 0 "call_operand" "?b,i"))
+ (const_int 0))
+ (clobber (match_operand:DI 1 "register_operand" "=b,b"))]
""
- "br.call%+.many %2 = %0"
+ "br.call%+.many %1 = %0"
[(set_attr "itanium_class" "br,scall")])
-(define_insn "call_value_nopic"
+(define_insn "call_value_nogp"
[(set (match_operand 0 "" "")
- (call (mem:DI (match_operand:DI 1 "call_operand" "b,i"))
- (match_operand 2 "" "")))
- (clobber (match_operand:DI 3 "register_operand" "=b,b"))]
+ (call (mem:DI (match_operand:DI 1 "call_operand" "?b,i"))
+ (const_int 0)))
+ (clobber (match_operand:DI 2 "register_operand" "=b,b"))]
""
- "br.call%+.many %3 = %1"
+ "br.call%+.many %2 = %1"
[(set_attr "itanium_class" "br,scall")])
-(define_insn "sibcall_nopic"
- [(call (mem:DI (match_operand:DI 0 "call_operand" "b,i"))
- (match_operand 1 "" ""))
- (use (match_operand:DI 2 "register_operand" "=b,b"))
- (use (match_operand:DI 3 "ar_pfs_reg_operand" ""))]
+(define_insn "sibcall_nogp"
+ [(call (mem:DI (match_operand:DI 0 "call_operand" "?b,i"))
+ (const_int 0))]
""
"br%+.many %0"
[(set_attr "itanium_class" "br,scall")])
-(define_insn "call_pic"
- [(call (mem (match_operand 0 "call_operand" "b,i"))
- (match_operand 1 "" ""))
- (use (unspec [(reg:DI 1)] UNSPEC_PIC_CALL))
- (clobber (match_operand:DI 2 "register_operand" "=b,b"))]
+(define_insn "call_gp"
+ [(call (mem (match_operand 0 "call_operand" "?r,i"))
+ (const_int 1))
+ (clobber (match_operand:DI 1 "register_operand" "=b,b"))
+ (clobber (match_scratch:DI 2 "=&r,X"))
+ (clobber (match_scratch:DI 3 "=b,X"))]
""
- "br.call%+.many %2 = %0"
+ "#"
[(set_attr "itanium_class" "br,scall")])
-(define_insn "call_value_pic"
+;; Irritatingly, we don't have access to INSN within the split body.
+;; See commentary in ia64_split_call as to why these aren't peep2.
+(define_split
+ [(call (mem (match_operand 0 "call_operand" ""))
+ (const_int 1))
+ (clobber (match_operand:DI 1 "register_operand" ""))
+ (clobber (match_scratch:DI 2 ""))
+ (clobber (match_scratch:DI 3 ""))]
+ "reload_completed && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
+ [(const_int 0)]
+{
+ ia64_split_call (NULL_RTX, operands[0], operands[1], operands[2],
+ operands[3], true, false);
+ DONE;
+})
+
+(define_split
+ [(call (mem (match_operand 0 "call_operand" ""))
+ (const_int 1))
+ (clobber (match_operand:DI 1 "register_operand" ""))
+ (clobber (match_scratch:DI 2 ""))
+ (clobber (match_scratch:DI 3 ""))]
+ "reload_completed"
+ [(const_int 0)]
+{
+ ia64_split_call (NULL_RTX, operands[0], operands[1], operands[2],
+ operands[3], false, false);
+ DONE;
+})
+
+(define_insn "call_value_gp"
[(set (match_operand 0 "" "")
- (call (mem:DI (match_operand:DI 1 "call_operand" "b,i"))
- (match_operand 2 "" "")))
- (use (unspec [(reg:DI 1)] UNSPEC_PIC_CALL))
- (clobber (match_operand:DI 3 "register_operand" "=b,b"))]
+ (call (mem:DI (match_operand:DI 1 "call_operand" "?r,i"))
+ (const_int 1)))
+ (clobber (match_operand:DI 2 "register_operand" "=b,b"))
+ (clobber (match_scratch:DI 3 "=&r,X"))
+ (clobber (match_scratch:DI 4 "=b,X"))]
""
- "br.call%+.many %3 = %1"
+ "#"
[(set_attr "itanium_class" "br,scall")])
-(define_insn "sibcall_pic"
- [(call (mem:DI (match_operand:DI 0 "call_operand" "bi"))
- (match_operand 1 "" ""))
- (use (unspec [(reg:DI 1)] UNSPEC_PIC_CALL))
- (use (match_operand:DI 2 "register_operand" "=b"))
- (use (match_operand:DI 3 "ar_pfs_reg_operand" ""))]
+(define_split
+ [(set (match_operand 0 "" "")
+ (call (mem:DI (match_operand:DI 1 "call_operand" ""))
+ (const_int 1)))
+ (clobber (match_operand:DI 2 "register_operand" ""))
+ (clobber (match_scratch:DI 3 ""))
+ (clobber (match_scratch:DI 4 ""))]
+ "reload_completed && find_reg_note (insn, REG_NORETURN, NULL_RTX)"
+ [(const_int 0)]
+{
+ ia64_split_call (operands[0], operands[1], operands[2], operands[3],
+ operands[4], true, false);
+ DONE;
+})
+
+(define_split
+ [(set (match_operand 0 "" "")
+ (call (mem:DI (match_operand:DI 1 "call_operand" ""))
+ (const_int 1)))
+ (clobber (match_operand:DI 2 "register_operand" ""))
+ (clobber (match_scratch:DI 3 ""))
+ (clobber (match_scratch:DI 4 ""))]
+ "reload_completed"
+ [(const_int 0)]
+{
+ ia64_split_call (operands[0], operands[1], operands[2], operands[3],
+ operands[4], false, false);
+ DONE;
+})
+
+(define_insn_and_split "sibcall_gp"
+ [(call (mem:DI (match_operand:DI 0 "call_operand" "?r,i"))
+ (const_int 1))
+ (clobber (match_scratch:DI 1 "=&r,X"))
+ (clobber (match_scratch:DI 2 "=b,X"))]
""
- "br%+.many %0"
+ "#"
+ "reload_completed"
+ [(const_int 0)]
+{
+ ia64_split_call (NULL_RTX, operands[0], NULL_RTX, operands[1],
+ operands[2], true, true);
+ DONE;
+}
[(set_attr "itanium_class" "br")])
(define_insn "return_internal"
@@ -5244,21 +5330,14 @@
DONE;
})
-;; The rest of the setjmp processing happens with the nonlocal_goto expander.
-;; ??? This is not tested.
-(define_expand "builtin_setjmp_setup"
- [(use (match_operand:DI 0 "" ""))]
- ""
-{
- emit_move_insn (ia64_gp_save_reg (0), gen_rtx_REG (DImode, GR_REG (1)));
- DONE;
-})
-
-(define_expand "builtin_setjmp_receiver"
- [(use (match_operand:DI 0 "" ""))]
+(define_insn_and_split "builtin_setjmp_receiver"
+ [(unspec_volatile [(match_operand:DI 0 "" "")] UNSPECV_SETJMP_RECEIVER)]
""
+ "#"
+ "reload_completed"
+ [(const_int 0)]
{
- emit_move_insn (gen_rtx_REG (DImode, GR_REG (1)), ia64_gp_save_reg (0));
+ ia64_reload_gp ();
DONE;
})
@@ -5349,7 +5428,7 @@
(set (match_operand:SI 1 "not_postinc_memory_operand" "+S")
(unspec:SI [(match_dup 1)
(match_operand:SI 2 "gr_register_operand" "r")
- (match_operand:SI 3 "ar_ccv_reg_operand" "")]
+ (match_operand 3 "ar_ccv_reg_operand" "")]
UNSPEC_CMPXCHG_ACQ))]
""
"cmpxchg4.acq %0 = %1, %2, %3"
diff --git a/gcc/config/ia64/itanium1.md b/gcc/config/ia64/itanium1.md
index 2728ed3de25..66fa563486f 100644
--- a/gcc/config/ia64/itanium1.md
+++ b/gcc/config/ia64/itanium1.md
@@ -3,20 +3,20 @@
;; Copyright (C) 2002 Free Software Foundation, Inc.
;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.
;;
-;; This file is part of GNU CC.
+;; This file is part of GCC.
;;
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
;;
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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. */
;;
diff --git a/gcc/config/ia64/itanium2.md b/gcc/config/ia64/itanium2.md
index 73b533ea70c..df153ab78fb 100644
--- a/gcc/config/ia64/itanium2.md
+++ b/gcc/config/ia64/itanium2.md
@@ -2,20 +2,20 @@
;; Copyright (C) 2002 Free Software Foundation, Inc.
;; Contributed by Vladimir Makarov <vmakarov@redhat.com>.
;;
-;; This file is part of GNU CC.
+;; This file is part of GCC.
;;
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
;;
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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. */
;;
diff --git a/gcc/config/ia64/quadlib.c b/gcc/config/ia64/quadlib.c
index e55c97d2be9..cc367ea03cf 100644
--- a/gcc/config/ia64/quadlib.c
+++ b/gcc/config/ia64/quadlib.c
@@ -1,9 +1,9 @@
/* Subroutines for long double support.
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
@@ -17,13 +17,13 @@ do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combine
executable.)
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/ia64/unwind-ia64.c b/gcc/config/ia64/unwind-ia64.c
index e64a988bc5c..dbaaf42dff9 100644
--- a/gcc/config/ia64/unwind-ia64.c
+++ b/gcc/config/ia64/unwind-ia64.c
@@ -6,20 +6,20 @@
Andrew Haley <aph@cygnus.com>
David Mosberger-Tang <davidm@hpl.hp.com>
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/ia64/unwind-ia64.h b/gcc/config/ia64/unwind-ia64.h
index a6b850df80a..b56b38c45c4 100644
--- a/gcc/config/ia64/unwind-ia64.h
+++ b/gcc/config/ia64/unwind-ia64.h
@@ -2,20 +2,20 @@
Contributed by Andrew MacLeod <amacleod@cygnus.com>
Andrew Haley <aph@cygnus.com>
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/ip2k/ip2k.h b/gcc/config/ip2k/ip2k.h
index 34f901c2769..a4cd4e45b20 100644
--- a/gcc/config/ip2k/ip2k.h
+++ b/gcc/config/ip2k/ip2k.h
@@ -27,26 +27,15 @@ Boston, MA 02111-1307, USA. */
#include "elfos.h"
#undef ASM_SPEC /* But we have a GAS assembler. */
-#define CPP_PREDEFINES \
- "-DIP2K -D_DOUBLE_IS_32BITS -D__BUFSIZ__=512 -D__FILENAME_MAX__=128"
-/* Define this to be a string constant containing `-D' options to
- define the predefined macros that identify this machine and system.
- These macros will be predefined unless the `-ansi' option is
- specified.
-
- In addition, a parallel set of macros are predefined, whose names
- are made by appending `__' at the beginning and at the end. These
- `__' macros are permitted by the ANSI standard, so they are
- predefined regardless of whether `-ansi' is specified.
-
- For example, on the Sun, one can use the following value:
-
- "-Dmc68000 -Dsun -Dunix"
-
- The result is to define the macros `__mc68000__', `__sun__' and
- `__unix__' unconditionally, and the macros `mc68000', `sun' and
- `unix' provided `-ansi' is not specified. */
-
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define_std ("IP2K"); \
+ builtin_define ("_DOUBLE_IS_32BITS"); \
+ builtin_define ("_BUFSIZ=512"); \
+ builtin_define ("__FILENAME_MAX__=128"); \
+ } \
+ while (0)
/* This declaration should be present. */
extern int target_flags;
diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h
index 74431b6ca53..df9ee5aee4d 100644
--- a/gcc/config/m32r/m32r.h
+++ b/gcc/config/m32r/m32r.h
@@ -105,7 +105,14 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
/* __M32R__ is defined by the existing compiler so we use that. */
-#define CPP_PREDEFINES "-Acpu=m32r -Amachine=m32r -D__M32R__"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__M32R__"); \
+ builtin_assert ("cpu=m32r"); \
+ builtin_assert ("machine=m32r"); \
+ } \
+ while (0)
/* This macro defines names of additional specifications to put in the specs
that can be used in various specifications like CC1_SPEC. Its definition
@@ -1793,7 +1800,6 @@ extern char m32r_punct_chars[256];
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do \
{ \
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
} \
while (0)
diff --git a/gcc/config/m68hc11/larith.asm b/gcc/config/m68hc11/larith.asm
index 80b88174737..4d99fac2d25 100644
--- a/gcc/config/m68hc11/larith.asm
+++ b/gcc/config/m68hc11/larith.asm
@@ -1,5 +1,5 @@
/* libgcc routines for M68HC11 & M68HC12.
- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -41,11 +41,22 @@ Boston, MA 02111-1307, USA. */
.mode mlong
#endif
-#if defined(__USE_RTC__) && defined(mc68hc12)
+ .macro declare_near name
+ .globl \name
+ .type \name,@function
+ .size \name,.Lend-\name
+\name:
+ .endm
+
+#if defined(__USE_RTC__)
# define ARG(N) N+1
.macro ret
+#if defined(mc68hc12)
rtc
+#else
+ jmp __return_32
+#endif
.endm
.macro declare name
@@ -181,10 +192,10 @@ REG(_.d32)
;; Specific initialization for 68hc11 before the main.
;; Nothing special for a generic routine; Just enable interrupts.
;;
- declare __premain
+ declare_near __premain
clra
tap ; Clear both I and X.
- ret
+ rts
#endif
#ifdef L__exit
@@ -299,7 +310,7 @@ L1:
puly ; Restore Y to return the DST
End:
xgdy
- rts
+ ret
#endif
#endif
@@ -349,7 +360,7 @@ L0:
pulx ; Restore X to return the DST
End:
xgdx
- rts
+ ret
#endif
#endif
@@ -438,10 +449,8 @@ End:
#endif
#ifdef L_negsi2
- .sect .text
- .globl ___negsi2
+ declare_near ___negsi2
-___negsi2:
comb
coma
xgdx
@@ -456,10 +465,8 @@ done:
#endif
#ifdef L_one_cmplsi2
- .sect .text
- .globl ___one_cmplsi2
+ declare_near ___one_cmplsi2
-___one_cmplsi2:
comb
coma
xgdx
@@ -470,10 +477,8 @@ ___one_cmplsi2:
#endif
#ifdef L_ashlsi3
- .sect .text
- .globl ___ashlsi3
+ declare_near ___ashlsi3
-___ashlsi3:
xgdy
clra
andb #0x1f
@@ -492,10 +497,8 @@ Return:
#endif
#ifdef L_ashrsi3
- .sect .text
- .globl ___ashrsi3
+ declare_near ___ashrsi3
-___ashrsi3:
xgdy
clra
andb #0x1f
@@ -515,10 +518,8 @@ Return:
#endif
#ifdef L_lshrsi3
- .sect .text
- .globl ___lshrsi3
+ declare_near ___lshrsi3
-___lshrsi3:
xgdy
clra
andb #0x1f
@@ -537,10 +538,8 @@ Return:
#endif
#ifdef L_lshrhi3
- .sect .text
- .globl ___lshrhi3
+ declare_near ___lshrhi3
-___lshrhi3:
cpx #16
bge Return_zero
cpx #0
@@ -558,10 +557,8 @@ Return_zero:
#endif
#ifdef L_lshlhi3
- .sect .text
- .globl ___lshlhi3
+ declare_near ___lshlhi3
-___lshlhi3:
cpx #16
bge Return_zero
cpx #0
@@ -578,11 +575,48 @@ Return_zero:
rts
#endif
+#ifdef L_rotrhi3
+ declare_near ___rotrhi3
+
+___rotrhi3:
+ xgdx
+ clra
+ andb #0x0f
+ xgdx
+ beq Return
+Loop:
+ tap
+ rorb
+ rora
+ dex
+ bne Loop
+Return:
+ rts
+#endif
+
+#ifdef L_rotlhi3
+ declare_near ___rotlhi3
+
+___rotlhi3:
+ xgdx
+ clra
+ andb #0x0f
+ xgdx
+ beq Return
+Loop:
+ asrb
+ rolb
+ rola
+ rolb
+ dex
+ bne Loop
+Return:
+ rts
+#endif
+
#ifdef L_ashrhi3
- .sect .text
- .globl ___ashrhi3
+ declare_near ___ashrhi3
-___ashrhi3:
cpx #16
bge Return_minus_1_or_zero
cpx #0
@@ -605,10 +639,8 @@ Return_zero:
#endif
#ifdef L_ashrqi3
- .sect .text
- .globl ___ashrqi3
+ declare_near ___ashrqi3
-___ashrqi3:
cmpa #8
bge Return_minus_1_or_zero
tsta
@@ -630,10 +662,8 @@ Return_zero:
#endif
#ifdef L_lshlqi3
- .sect .text
- .globl ___lshlqi3
+ declare_near ___lshlqi3
-___lshlqi3:
cmpa #8
bge Return_zero
tsta
@@ -653,8 +683,7 @@ Return_zero:
#ifndef mc68hc12
/* 68HC12 signed divisions are generated inline (idivs). */
- .sect .text
- .globl __divmodhi4
+ declare_near __divmodhi4
;
;; D = numerator
@@ -663,7 +692,6 @@ Return_zero:
;; Result: D = D / X
;; X = D % X
;;
-__divmodhi4:
tsta
bpl Numerator_pos
comb ; D = -D <=> D = (~D) + 1
@@ -721,8 +749,7 @@ Numerator_neg_denominator_pos:
#endif
#ifdef L_mulqi3
- .sect .text
- .globl __mulqi3
+ declare_near ___mulqi3
;
; short __mulqi3(signed char a, signed char b);
@@ -732,7 +759,6 @@ Numerator_neg_denominator_pos:
;
; returns the signed result of A * B in register D.
;
-__mulqi3:
tsta
bmi A_neg
tstb
@@ -759,8 +785,7 @@ AB_neg:
#endif
#ifdef L_mulhi3
- .sect .text
- .globl ___mulhi3
+ declare_near ___mulhi3
;
;
@@ -769,7 +794,6 @@ AB_neg:
; a = register D
; b = register X
;
-___mulhi3:
#ifdef mc68hc12
pshx ; Preserve X
exg x,y
@@ -805,24 +829,6 @@ ___mulhi3:
; ---
; 91 cycles
#else
- stx _.tmp ; (4/5)
- pshb ; (3)
- ldab _.tmp+1 ; (3/4)
- mul ; (10) B.high * A.low
- xgdx ; (3)
- pulb ; (4)
- stab _.tmp ; (3/4)
- mul ; (10) B.low * A.high
- abx ; (3)
- ldd _.tmp ; (4/5)
- mul ; (10) B.low * A.low
- stx _.tmp ; (4)
- adda _.tmp+1 ; (4/5)
- rts ; (5) 20/26 bytes
- ; ---
- ; 70/76 cycles
-
-#ifdef OLD_MUL
stx *_.tmp ; (4)
pshb ; (3)
ldab *_.tmp+1 ; (3)
@@ -843,7 +849,6 @@ ___mulhi3:
#endif
#endif
#endif
-#endif
#ifdef L_mulhi32
@@ -879,13 +884,13 @@ ___mulhi3:
; <A-low> 1,x
; <A-high> 0,x
;
- declare __mulhi32
+ declare_near __mulhi32
#ifdef mc68hc12
- ldy ARG(2),sp
+ ldy 2,sp
emul
exg x,y
- ret
+ rts
#else
pshx ; Room for temp value
pshb
@@ -1187,7 +1192,7 @@ dtors_done:
#ifdef L_far_tramp
#ifdef mc68hc12
- .sect .text
+ .sect .tramp,"ax",@progbits
.globl __far_trampoline
;; This is a trampoline used by the linker to invoke a function
@@ -1216,6 +1221,123 @@ __far_trampoline:
; (whose memory bank is mapped due to the
; call to the trampoline).
#endif
+
+#ifdef mc68hc11
+ .sect .tramp,"ax",@progbits
+ .globl __far_trampoline
+
+;; Trampoline generated by gcc for 68HC11:
+;;
+;; pshb
+;; ldab #%page(func)
+;; ldy #%addr(func)
+;; jmp __far_trampoline
+;;
+__far_trampoline:
+ psha ; (2) Save function parameter (high)
+ ;; <Read current page in A>
+ psha ; (2)
+ ;; <Set currenge page from B>
+ pshx ; (4)
+ tsx ; (3)
+ ldab 4,x ; (4) Restore function parameter (low)
+ ldaa 2,x ; (4) Get saved page number
+ staa 4,x ; (4) Save it below return PC
+ pulx ; (5)
+ pula ; (3)
+ pula ; (3) Restore function parameter (high)
+ jmp 0,y ; (4)
+#endif
+#endif
+
+#ifdef L_call_far
+#ifdef mc68hc11
+ .sect .tramp,"ax",@progbits
+ .globl __call_a16
+ .globl __call_a32
+;;
+;; The call methods are used for 68HC11 to support memory bank switching.
+;; Every far call is redirected to these call methods. Its purpose is to:
+;;
+;; 1/ Save the current page on the stack (1 byte to follow 68HC12 call frame)
+;; 2/ Install the new page
+;; 3/ Jump to the real function
+;;
+;; The page switching (get/save) is board dependent. The default provided
+;; here does nothing (just create the appropriate call frame).
+;;
+;; Call sequence (10 bytes, 13 cycles):
+;;
+;; ldx #page ; (3)
+;; ldy #func ; (4)
+;; jsr __call_a16 ; (6)
+;;
+;; Call trampoline (11 bytes, 19 cycles):
+;;
+__call_a16:
+ ;; xgdx ; (3)
+ ;; <Read current page in A> ; (3) ldaa _current_page
+ psha ; (2)
+ ;; <Set current page from B> ; (4) staa _current_page
+ ;; xgdx ; (3)
+ jmp 0,y ; (4)
+
+;;
+;; Call sequence (10 bytes, 14 cycles):
+;;
+;; pshb ; (2)
+;; ldab #page ; (2)
+;; ldy #func ; (4)
+;; jsr __call_a32 ; (6)
+;;
+;; Call trampoline (87 bytes, 57 cycles):
+;;
+__call_a32:
+ pshx ; (4)
+ psha ; (2)
+ ;; <Read current page in A> ; (3) ldaa _current_page
+ psha ; (2)
+ ;; <Set current page from B> ; (4) staa _current_page
+ tsx ; (3)
+ ldab 6,x ; (4) Restore function parameter
+ ldaa 5,x ; (4) Move PC return at good place
+ staa 6,x ; (4)
+ ldaa 4,x ; (4)
+ staa 5,x ; (4)
+ pula ; (3)
+ staa 4,x ; (4)
+ pula ; (3)
+ pulx ; (5)
+ jmp 0,y ; (4)
+#endif
+#endif
+
+#ifdef L_return_far
+#ifdef mc68hc11
+ .sect .tramp,"ax",@progbits
+ .globl __return_void
+ .globl __return_16
+ .globl __return_32
+
+__return_void:
+ ;; pulb
+ ;; <Set current page from B> (Board specific)
+ ;; rts
+__return_16:
+ ;; xgdx
+ ;; pulb
+ ;; <Set current page from B> (Board specific)
+ ;; xgdx
+ ;; rts
+__return_32:
+ ;; xgdy
+ ;; pulb
+ ;; <Set current page from B> (Board specific)
+ ;; xgdy
+ ;; rts
+ ins
+ rts
+#endif
#endif
.Lend:
;-----------------------------------------
diff --git a/gcc/config/m68hc11/m68hc11-protos.h b/gcc/config/m68hc11/m68hc11-protos.h
index ec43ca0ac15..20b5ae02fa4 100644
--- a/gcc/config/m68hc11/m68hc11-protos.h
+++ b/gcc/config/m68hc11/m68hc11-protos.h
@@ -1,5 +1,5 @@
/* Prototypes for exported functions defined in m68hc11.c
- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Stephane Carrez (stcarrez@nerim.fr)
This file is part of GNU CC.
@@ -24,6 +24,7 @@ extern int m68hc11_override_options PARAMS((void));
extern int m68hc11_optimization_options PARAMS((int,int));
extern void m68hc11_conditional_register_usage PARAMS((void));
extern int hard_regno_mode_ok PARAMS((int, enum machine_mode));
+extern int m68hc11_hard_regno_rename_ok PARAMS((int, int));
extern int m68hc11_total_frame_size PARAMS((void));
extern int m68hc11_initial_frame_pointer_offset PARAMS((void));
@@ -117,6 +118,7 @@ extern int arith_src_operand PARAMS((rtx, enum machine_mode));
extern int m68hc11_logical_operator PARAMS((rtx, enum machine_mode));
extern int m68hc11_arith_operator PARAMS((rtx, enum machine_mode));
extern int m68hc11_non_shift_operator PARAMS((rtx, enum machine_mode));
+extern int m68hc11_shift_operator PARAMS((rtx, enum machine_mode));
extern int m68hc11_unary_operator PARAMS((rtx, enum machine_mode));
extern int non_push_operand PARAMS((rtx, enum machine_mode));
extern int hard_reg_operand PARAMS((rtx, enum machine_mode));
@@ -137,10 +139,11 @@ extern int m68hc11_function_arg_pass_by_reference PARAMS((const CUMULATIVE_ARGS*
int));
extern int m68hc11_function_arg_padding PARAMS((enum machine_mode, tree));
-extern rtx m68hc11_va_arg PARAMS((tree,tree));
-
extern void m68hc11_function_epilogue PARAMS((FILE*,int));
+extern int m68hc11_is_far_symbol PARAMS((rtx));
+extern int m68hc11_is_trap_symbol PARAMS((rtx));
+
#endif /* TREE_CODE */
extern HOST_WIDE_INT m68hc11_min_offset;
diff --git a/gcc/config/m68hc11/m68hc11.c b/gcc/config/m68hc11/m68hc11.c
index 6dafb198818..5c762cace35 100644
--- a/gcc/config/m68hc11/m68hc11.c
+++ b/gcc/config/m68hc11/m68hc11.c
@@ -294,7 +294,7 @@ m68hc11_override_options ()
m68hc11_sp_correction = 0;
m68hc11_tmp_regs_class = TMP_REGS;
target_flags &= ~MASK_M6811;
- target_flags |= MASK_NO_DIRECT_MODE | MASK_MIN_MAX;
+ target_flags |= MASK_NO_DIRECT_MODE;
if (m68hc11_soft_reg_count == 0)
m68hc11_soft_reg_count = "0";
@@ -394,6 +394,23 @@ hard_regno_mode_ok (regno, mode)
}
}
+int
+m68hc11_hard_regno_rename_ok (reg1, reg2)
+ int reg1, reg2;
+{
+ /* Don't accept renaming to Z register. We will replace it to
+ X,Y or D during machine reorg pass. */
+ if (reg2 == HARD_Z_REGNUM)
+ return 0;
+
+ /* Don't accept renaming D,X to Y register as the code will be bigger. */
+ if (TARGET_M6811 && reg2 == HARD_Y_REGNUM
+ && (D_REGNO_P (reg1) || X_REGNO_P (reg1)))
+ return 0;
+
+ return 1;
+}
+
enum reg_class
preferred_reload_class (operand, class)
rtx operand;
@@ -1035,8 +1052,11 @@ hard_addr_reg_operand (operand, mode)
int
hard_reg_operand (operand, mode)
rtx operand;
- enum machine_mode mode ATTRIBUTE_UNUSED;
+ enum machine_mode mode;
{
+ if (GET_MODE (operand) != mode && mode != VOIDmode)
+ return 0;
+
if (GET_CODE (operand) == SUBREG)
operand = XEXP (operand, 0);
@@ -1140,6 +1160,16 @@ m68hc11_non_shift_operator (op, mode)
|| GET_CODE (op) == PLUS || GET_CODE (op) == MINUS;
}
+/* Return true if op is a shift operator. */
+int
+m68hc11_shift_operator (op, mode)
+ register rtx op;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ return GET_CODE (op) == ROTATE || GET_CODE (op) == ROTATERT
+ || GET_CODE (op) == LSHIFTRT || GET_CODE (op) == ASHIFT
+ || GET_CODE (op) == ASHIFTRT;
+}
int
m68hc11_unary_operator (op, mode)
@@ -1205,9 +1235,16 @@ const struct attribute_spec m68hc11_attribute_table[] =
/* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
{ "interrupt", 0, 0, false, true, true, m68hc11_handle_fntype_attribute },
{ "trap", 0, 0, false, true, true, m68hc11_handle_fntype_attribute },
+ { "far", 0, 0, false, true, true, m68hc11_handle_fntype_attribute },
+ { "near", 0, 0, false, true, true, m68hc11_handle_fntype_attribute },
{ NULL, 0, 0, false, false, false, NULL }
};
+/* Keep track of the symbol which has a `trap' attribute and which uses
+ the `swi' calling convention. Since there is only one trap, we only
+ record one such symbol. If there are several, a warning is reported. */
+static rtx trap_handler_symbol = 0;
+
/* Handle an attribute requiring a FUNCTION_TYPE, FIELD_DECL or TYPE_DECL;
arguments as in struct attribute_spec.handler. */
static tree
@@ -1219,6 +1256,7 @@ m68hc11_handle_fntype_attribute (node, name, args, flags, no_add_attrs)
bool *no_add_attrs;
{
if (TREE_CODE (*node) != FUNCTION_TYPE
+ && TREE_CODE (*node) != METHOD_TYPE
&& TREE_CODE (*node) != FIELD_DECL
&& TREE_CODE (*node) != TYPE_DECL)
{
@@ -1241,16 +1279,56 @@ m68hc11_encode_section_info (decl, first)
{
tree func_attr;
int trap_handler;
+ int is_far = 0;
rtx rtl;
-
+
if (TREE_CODE (decl) != FUNCTION_DECL)
return;
rtl = DECL_RTL (decl);
func_attr = TYPE_ATTRIBUTES (TREE_TYPE (decl));
+
+
+ if (lookup_attribute ("far", func_attr) != NULL_TREE)
+ is_far = 1;
+ else if (lookup_attribute ("near", func_attr) == NULL_TREE)
+ is_far = TARGET_LONG_CALLS != 0;
+
trap_handler = lookup_attribute ("trap", func_attr) != NULL_TREE;
- SYMBOL_REF_FLAG (XEXP (rtl, 0)) = trap_handler;
+ if (trap_handler && is_far)
+ {
+ warning ("`trap' and `far' attributes are not compatible, ignoring `far'");
+ trap_handler = 0;
+ }
+ if (trap_handler)
+ {
+ if (trap_handler_symbol != 0)
+ warning ("`trap' attribute is already used");
+ else
+ trap_handler_symbol = XEXP (rtl, 0);
+ }
+ SYMBOL_REF_FLAG (XEXP (rtl, 0)) = is_far;
+}
+
+int
+m68hc11_is_far_symbol (sym)
+ rtx sym;
+{
+ if (GET_CODE (sym) == MEM)
+ sym = XEXP (sym, 0);
+
+ return SYMBOL_REF_FLAG (sym);
+}
+
+int
+m68hc11_is_trap_symbol (sym)
+ rtx sym;
+{
+ if (GET_CODE (sym) == MEM)
+ sym = XEXP (sym, 0);
+
+ return trap_handler_symbol != 0 && rtx_equal_p (trap_handler_symbol, sym);
}
@@ -1290,6 +1368,14 @@ m68hc11_initial_elimination_offset (from, to)
/* For a trap handler, we must take into account the registers which
are pushed on the stack during the trap (except the PC). */
func_attr = TYPE_ATTRIBUTES (TREE_TYPE (current_function_decl));
+
+ if (lookup_attribute ("far", func_attr) != 0)
+ current_function_far = 1;
+ else if (lookup_attribute ("near", func_attr) != 0)
+ current_function_far = 0;
+ else
+ current_function_far = TARGET_LONG_CALLS != 0;
+
trap_handler = lookup_attribute ("trap", func_attr) != NULL_TREE;
if (trap_handler && from == ARG_POINTER_REGNUM)
size = 7;
@@ -1461,51 +1547,6 @@ m68hc11_function_arg (cum, mode, type, named)
return NULL_RTX;
}
-rtx
-m68hc11_va_arg (valist, type)
- tree valist;
- tree type;
-{
- tree addr_tree, t;
- HOST_WIDE_INT align;
- HOST_WIDE_INT rounded_size;
- rtx addr;
- int pad_direction;
-
- /* Compute the rounded size of the type. */
- align = PARM_BOUNDARY / BITS_PER_UNIT;
- rounded_size = (((int_size_in_bytes (type) + align - 1) / align) * align);
-
- /* Get AP. */
- addr_tree = valist;
- pad_direction = m68hc11_function_arg_padding (TYPE_MODE (type), type);
-
- if (pad_direction == downward)
- {
- /* Small args are padded downward. */
-
- HOST_WIDE_INT adj;
- adj = TREE_INT_CST_LOW (TYPE_SIZE (type)) / BITS_PER_UNIT;
- if (rounded_size > align)
- adj = rounded_size;
-
- addr_tree = build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree,
- build_int_2 (rounded_size - adj, 0));
- }
-
- addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL);
- addr = copy_to_reg (addr);
-
- /* Compute new value for AP. */
- t = build (MODIFY_EXPR, TREE_TYPE (valist), valist,
- build (PLUS_EXPR, TREE_TYPE (valist), valist,
- build_int_2 (rounded_size, 0)));
- TREE_SIDE_EFFECTS (t) = 1;
- expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-
- return addr;
-}
-
/* If defined, a C expression which determines whether, and in which direction,
to pad out an argument with extra space. The value should be of type
`enum direction': either `upward' to pad above the argument,
@@ -1629,6 +1670,12 @@ expand_prologue ()
current_function_interrupt = lookup_attribute ("interrupt",
func_attr) != NULL_TREE;
current_function_trap = lookup_attribute ("trap", func_attr) != NULL_TREE;
+ if (lookup_attribute ("far", func_attr) != NULL_TREE)
+ current_function_far = 1;
+ else if (lookup_attribute ("near", func_attr) != NULL_TREE)
+ current_function_far = 0;
+ else
+ current_function_far = TARGET_LONG_CALLS != 0;
/* Get the scratch register to build the frame and push registers.
If the first argument is a 32-bit quantity, the D+X registers
@@ -1639,6 +1686,10 @@ expand_prologue ()
else
scratch = ix_reg;
+ /* Save current stack frame. */
+ if (frame_pointer_needed)
+ emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch);
+
/* For an interrupt handler, we must preserve _.tmp, _.z and _.xy.
Other soft registers in page0 need not to be saved because they
will be restored by C functions. For a trap handler, we don't
@@ -1653,10 +1704,6 @@ expand_prologue ()
scratch);
}
- /* Save current stack frame. */
- if (frame_pointer_needed)
- emit_move_after_reload (stack_push_word, hard_frame_pointer_rtx, scratch);
-
/* Allocate local variables. */
if (TARGET_M6812 && (size > 4 || size == 3))
{
@@ -1730,7 +1777,7 @@ expand_epilogue ()
else
return_size = GET_MODE_SIZE (GET_MODE (current_function_return_rtx));
- if (return_size > HARD_REG_SIZE)
+ if (return_size > HARD_REG_SIZE && return_size <= 2 * HARD_REG_SIZE)
scratch = iy_reg;
else
scratch = ix_reg;
@@ -1777,10 +1824,6 @@ expand_epilogue ()
stack_pointer_rtx, GEN_INT (1)));
}
- /* Restore previous frame pointer. */
- if (frame_pointer_needed)
- emit_move_after_reload (hard_frame_pointer_rtx, stack_pop_word, scratch);
-
/* For an interrupt handler, restore ZTMP, ZREG and XYREG. */
if (current_function_interrupt)
{
@@ -1791,6 +1834,10 @@ expand_epilogue ()
emit_move_after_reload (m68hc11_soft_tmp_reg, stack_pop_word, scratch);
}
+ /* Restore previous frame pointer. */
+ if (frame_pointer_needed)
+ emit_move_after_reload (hard_frame_pointer_rtx, stack_pop_word, scratch);
+
/* If the trap handler returns some value, copy the value
in D, X onto the stack so that the rti will pop the return value
correctly. */
@@ -2172,6 +2219,10 @@ print_operand (file, op, letter)
asm_print_register (file, REGNO (op));
fprintf (file, "+1");
}
+ else if (letter == 'b' && D_REG_P (op))
+ {
+ asm_print_register (file, HARD_B_REGNUM);
+ }
else
{
asm_print_register (file, REGNO (op));
@@ -3223,6 +3274,17 @@ m68hc11_gen_movhi (insn, operands)
{
if (SP_REG_P (operands[0]))
output_asm_insn ("lds\t%1", operands);
+ else if (0 /* REG_WAS_0 note is boggus; don't rely on it. */
+ && !D_REG_P (operands[0])
+ && GET_CODE (operands[1]) == CONST_INT
+ && (INTVAL (operands[1]) == 1 || INTVAL (operands[1]) == -1)
+ && find_reg_note (insn, REG_WAS_0, 0))
+ {
+ if (INTVAL (operands[1]) == 1)
+ output_asm_insn ("in%0", operands);
+ else
+ output_asm_insn ("de%0", operands);
+ }
else
output_asm_insn ("ld%0\t%1", operands);
}
@@ -3388,11 +3450,17 @@ m68hc11_gen_movhi (insn, operands)
output_asm_insn ("xgdx", operands);
CC_STATUS_INIT;
}
- else
+ else if (!optimize_size)
{
output_asm_insn ("sty\t%t1", operands);
output_asm_insn ("ldx\t%t1", operands);
}
+ else
+ {
+ CC_STATUS_INIT;
+ output_asm_insn ("pshy", operands);
+ output_asm_insn ("pulx", operands);
+ }
}
else if (SP_REG_P (operands[1]))
{
@@ -3400,6 +3468,16 @@ m68hc11_gen_movhi (insn, operands)
cc_status = cc_prev_status;
output_asm_insn ("tsx", operands);
}
+ else if (0 /* REG_WAS_0 note is boggus; don't rely on it. */
+ && GET_CODE (operands[1]) == CONST_INT
+ && (INTVAL (operands[1]) == 1 || INTVAL (operands[1]) == -1)
+ && find_reg_note (insn, REG_WAS_0, 0))
+ {
+ if (INTVAL (operands[1]) == 1)
+ output_asm_insn ("in%0", operands);
+ else
+ output_asm_insn ("de%0", operands);
+ }
else
{
output_asm_insn ("ldx\t%1", operands);
@@ -3430,11 +3508,17 @@ m68hc11_gen_movhi (insn, operands)
output_asm_insn ("xgdy", operands);
CC_STATUS_INIT;
}
- else
+ else if (!optimize_size)
{
output_asm_insn ("stx\t%t1", operands);
output_asm_insn ("ldy\t%t1", operands);
}
+ else
+ {
+ CC_STATUS_INIT;
+ output_asm_insn ("pshx", operands);
+ output_asm_insn ("puly", operands);
+ }
}
else if (SP_REG_P (operands[1]))
{
@@ -3442,7 +3526,17 @@ m68hc11_gen_movhi (insn, operands)
cc_status = cc_prev_status;
output_asm_insn ("tsy", operands);
}
- else
+ else if (0 /* REG_WAS_0 note is boggus; don't rely on it. */
+ && GET_CODE (operands[1]) == CONST_INT
+ && (INTVAL (operands[1]) == 1 || INTVAL (operands[1]) == -1)
+ && find_reg_note (insn, REG_WAS_0, 0))
+ {
+ if (INTVAL (operands[1]) == 1)
+ output_asm_insn ("in%0", operands);
+ else
+ output_asm_insn ("de%0", operands);
+ }
+ else
{
output_asm_insn ("ldy\t%1", operands);
}
@@ -3682,6 +3776,16 @@ m68hc11_gen_movqi (insn, operands)
output_asm_insn ("ldab\t%T0", operands);
}
}
+ else if (0 /* REG_WAS_0 note is boggus; don't rely on it. */
+ && GET_CODE (operands[1]) == CONST_INT
+ && (INTVAL (operands[1]) == 1 || INTVAL (operands[1]) == -1)
+ && find_reg_note (insn, REG_WAS_0, 0))
+ {
+ if (INTVAL (operands[1]) == 1)
+ output_asm_insn ("inc%b0", operands);
+ else
+ output_asm_insn ("dec%b0", operands);
+ }
else if (!DB_REG_P (operands[1]) && !D_REG_P (operands[1])
&& !DA_REG_P (operands[1]))
{
@@ -3890,15 +3994,15 @@ m68hc11_gen_rotate (code, insn, operands)
if (val > 0)
{
- /* Set the carry to bit-15, but don't change D yet. */
- if (GET_MODE (operands[0]) != QImode)
- {
- output_asm_insn ("asra", operands);
- output_asm_insn ("rola", operands);
- }
-
while (--val >= 0)
{
+ /* Set the carry to bit-15, but don't change D yet. */
+ if (GET_MODE (operands[0]) != QImode)
+ {
+ output_asm_insn ("asra", operands);
+ output_asm_insn ("rola", operands);
+ }
+
/* Rotate B first to move the carry to bit-0. */
if (D_REG_P (operands[0]))
output_asm_insn ("rolb", operands);
@@ -3909,14 +4013,12 @@ m68hc11_gen_rotate (code, insn, operands)
}
else
{
- /* Set the carry to bit-8 of D. */
- if (val != 0 && GET_MODE (operands[0]) != QImode)
- {
- output_asm_insn ("tap", operands);
- }
-
while (++val <= 0)
{
+ /* Set the carry to bit-8 of D. */
+ if (GET_MODE (operands[0]) != QImode)
+ output_asm_insn ("tap", operands);
+
/* Rotate B first to move the carry to bit-7. */
if (D_REG_P (operands[0]))
output_asm_insn ("rorb", operands);
@@ -4211,7 +4313,7 @@ m68hc11_check_z_replacement (insn, info)
info->need_save_z = 0;
info->found_call = 1;
info->regno = SOFT_Z_REGNUM;
- info->last = insn;
+ info->last = NEXT_INSN (insn);
}
return 0;
}
diff --git a/gcc/config/m68hc11/m68hc11.h b/gcc/config/m68hc11/m68hc11.h
index c51f1924254..9f36afe5f0e 100644
--- a/gcc/config/m68hc11/m68hc11.h
+++ b/gcc/config/m68hc11/m68hc11.h
@@ -84,7 +84,12 @@ Note:
#define STARTFILE_SPEC "crt1%O%s"
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-Dmc68hc1x"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define_std ("mc68hc1x"); \
+ } \
+ while (0)
/* As an embedded target, we have no libc. */
#define inhibit_libc
@@ -796,6 +801,12 @@ extern enum reg_class m68hc11_tmp_regs_class;
#define SMALL_REGISTER_CLASSES 1
+/* A C expression that is nonzero if hard register number REGNO2 can be
+ considered for use as a rename register for REGNO1 */
+
+#define HARD_REGNO_RENAME_OK(REGNO1,REGNO2) \
+ m68hc11_hard_regno_rename_ok ((REGNO1), (REGNO2))
+
/* A C expression whose value is nonzero if pseudos that have been
assigned to registers of class CLASS would likely be spilled
because registers of CLASS are needed for spill registers.
@@ -851,6 +862,7 @@ extern enum reg_class m68hc11_tmp_regs_class;
(C) == 'L' ? ((VALUE) >= -65536 && (VALUE) <= 65535) : \
(C) == 'M' ? ((VALUE) & 0x0ffffL) == 0 : \
(C) == 'N' ? ((VALUE) == 1 || (VALUE) == -1) : \
+ (C) == 'I' ? ((VALUE) >= -2 && (VALUE) <= 2) : \
(C) == 'O' ? (VALUE) == 16 : \
(C) == 'P' ? ((VALUE) <= 2 && (VALUE) >= -8) : 0)
@@ -1047,6 +1059,10 @@ typedef struct m68hc11_args
#define FUNCTION_ARG_PADDING(MODE, TYPE) \
m68hc11_function_arg_padding ((MODE), (TYPE))
+#undef PAD_VARARGS_DOWN
+#define PAD_VARARGS_DOWN \
+ (m68hc11_function_arg_padding (TYPE_MODE (type), type) == downward)
+
/* A C expression that indicates when it is the called function's
responsibility to make a copy of arguments passed by invisible
reference. Normally, the caller makes a copy and passes the
@@ -1093,10 +1109,6 @@ typedef struct m68hc11_args
caller saving results in spill failure. */
#define CALLER_SAVE_PROFITABLE(REFS,CALLS) 0
-/* Implement `va_arg'. */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
- m68hc11_va_arg (valist, type)
-
/* For an arg passed partly in registers and partly in memory,
this is the number of registers used.
For args passed entirely in registers or entirely in memory, zero.
@@ -1537,7 +1549,7 @@ do { \
fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
putc ('\n', FILE); \
\
- if (TARGET_M6812 && current_function_far) \
+ if (current_function_far) \
{ \
fprintf (FILE, "\t.far\t"); \
assemble_name (FILE, NAME); \
@@ -1548,7 +1560,7 @@ do { \
{ \
fprintf (FILE, "\t.interrupt\t"); \
assemble_name (FILE, NAME); \
- putc ('\b', FILE); \
+ putc ('\n', FILE); \
} \
ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
ASM_OUTPUT_LABEL(FILE, NAME); \
@@ -1617,6 +1629,10 @@ do { \
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+/* For the support of memory banks we need addresses that indicate
+ the page number. */
+#define DWARF2_ADDR_SIZE 4
+
/* The prefix for local labels. You should be able to define this as
an empty string, or any arbitrary string (such as ".", ".L%", etc)
without having to make any other changes to account for the specific
@@ -1643,6 +1659,7 @@ do { \
ROTATE, ROTATERT }}, \
{"m68hc11_non_shift_operator", {AND, IOR, XOR, PLUS, MINUS}}, \
{"m68hc11_unary_operator", {NEG, NOT, SIGN_EXTEND, ZERO_EXTEND}}, \
+{"m68hc11_shift_operator", {ASHIFT, ASHIFTRT, LSHIFTRT, ROTATE, ROTATERT}},\
{"non_push_operand", {SUBREG, REG, MEM}}, \
{"reg_or_some_mem_operand", {SUBREG, REG, MEM}}, \
{"tst_operand", {SUBREG, REG, MEM}}, \
diff --git a/gcc/config/m68hc11/m68hc11.md b/gcc/config/m68hc11/m68hc11.md
index 92676c6af1d..5acbc2ea030 100644
--- a/gcc/config/m68hc11/m68hc11.md
+++ b/gcc/config/m68hc11/m68hc11.md
@@ -1,5 +1,5 @@
;;- Machine description file for Motorola 68HC11 and 68HC12.
-;;- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+;;- Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
;;- Contributed by Stephane Carrez (stcarrez@nerim.fr)
;; This file is part of GNU CC.
@@ -2089,9 +2089,9 @@
}")
(define_insn "*addhi3_68hc12"
- [(set (match_operand:HI 0 "register_operand" "=xy,d,xy*z*w,xy*z*w,xy*z")
+ [(set (match_operand:HI 0 "register_operand" "=xyd,d,xy*z*w,xy*z*w,xy*z")
(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,xy*zw,0")
- (match_operand:HI 2 "general_operand" "N,im*A*wu,id,id,!mu*A")))]
+ (match_operand:HI 2 "general_operand" "i,m*A*wu,id,id,!mu*A")))]
"TARGET_M6812"
"*
{
@@ -2278,9 +2278,9 @@
}")
(define_insn "*addhi3"
- [(set (match_operand:HI 0 "hard_reg_operand" "=A,d,!A,d*A,!d*A")
- (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0")
- (match_operand:HI 2 "general_operand" "N,i,I,mi*A*d,!u*d*w")))]
+ [(set (match_operand:HI 0 "hard_reg_operand" "=A,dA,d,!A,d*A,!d*A")
+ (plus:HI (match_operand:HI 1 "general_operand" "%0,0,0,0,0,0")
+ (match_operand:HI 2 "general_operand" "N,I,i,I,mi*A*d,!u*d*w")))]
"TARGET_M6811"
"*
{
@@ -2894,12 +2894,15 @@
}")
(define_insn "mulqi3"
- [(set (match_operand:QI 0 "register_operand" "=d")
- (mult:QI (match_operand:QI 1 "nonimmediate_operand" "dum")
- (match_operand:QI 2 "nonimmediate_operand" "dum")))]
+ [(set (match_operand:QI 0 "register_operand" "=d,*x,*y")
+ (mult:QI (match_operand:QI 1 "nonimmediate_operand" "%dum,0,0")
+ (match_operand:QI 2 "general_operand" "dium,*xium,*yium")))]
""
"*
{
+ if (A_REG_P (operands[0]))
+ return \"#\";
+
if (D_REG_P (operands[1]) && D_REG_P (operands[2]))
{
output_asm_insn (\"tba\", operands);
@@ -2925,6 +2928,28 @@
return \"mul\";
}")
+(define_split
+ [(set (match_operand:QI 0 "hard_addr_reg_operand" "")
+ (mult:QI (match_operand:QI 1 "general_operand" "")
+ (match_operand:QI 2 "general_operand" "")))]
+ "z_replacement_completed == 2"
+ [(parallel [(set (reg:HI D_REGNUM) (match_dup 3))
+ (set (match_dup 3) (reg:HI D_REGNUM))])
+ (set (reg:QI D_REGNUM) (mult:QI (match_dup 5) (match_dup 6)))
+ (parallel [(set (reg:HI D_REGNUM) (match_dup 3))
+ (set (match_dup 3) (reg:HI D_REGNUM))])]
+ "
+ operands[3] = gen_rtx (REG, HImode, REGNO (operands[0]));
+ if (A_REG_P (operands[1]))
+ operands[5] = gen_rtx (REG, QImode, HARD_D_REGNUM);
+ else
+ operands[5] = operands[1];
+ if (A_REG_P (operands[2]))
+ operands[6] = gen_rtx (REG, QImode, HARD_D_REGNUM);
+ else
+ operands[6] = operands[2];
+ ")
+
(define_insn "mulqihi3"
[(set (match_operand:HI 0 "register_operand" "=d,d")
(mult:HI (sign_extend:HI
@@ -4757,13 +4782,16 @@
(define_insn "*ashlhi3_2"
- [(set (match_operand:HI 0 "register_operand" "=d")
- (ashift:HI (match_operand:HI 1 "register_operand" "0")
- (match_operand:HI 2 "register_operand" "+x")))
+ [(set (match_operand:HI 0 "register_operand" "=d,*x")
+ (ashift:HI (match_operand:HI 1 "register_operand" "0,0")
+ (match_operand:HI 2 "register_operand" "+x,+d")))
(clobber (match_dup 2))]
""
"*
{
+ if (A_REG_P (operands[0]))
+ return \"#\";
+
CC_STATUS_INIT;
return \"bsr\\t___lshlhi3\";
}")
@@ -5046,21 +5074,17 @@
}")
(define_insn "*ashrhi3"
- [(set (match_operand:HI 0 "register_operand" "=d,x")
+ [(set (match_operand:HI 0 "register_operand" "=d,*x")
(ashiftrt:HI (match_operand:HI 1 "register_operand" "0,0")
(match_operand:HI 2 "register_operand" "+x,+d")))
(clobber (match_dup 2))]
""
"*
{
- CC_STATUS_INIT;
- if (D_REG_P (operands[2]))
- output_asm_insn (\"xgd%0\", operands);
+ if (A_REG_P (operands[0]))
+ return \"#\";
output_asm_insn (\"bsr\\t___ashrhi3\", operands);
- if (D_REG_P (operands[2]))
- output_asm_insn (\"xgd%0\", operands);
-
return \"\";
}")
@@ -5594,22 +5618,17 @@
}")
(define_insn "*lshrhi3"
- [(set (match_operand:HI 0 "register_operand" "=d,x")
+ [(set (match_operand:HI 0 "register_operand" "=d,*x")
(lshiftrt:HI (match_operand:HI 1 "register_operand" "0,0")
(match_operand:HI 2 "register_operand" "+x,+d")))
(clobber (match_dup 2))]
""
"*
{
- CC_STATUS_INIT;
- if (D_REG_P (operands[2]))
- output_asm_insn (\"xgd%0\", operands);
-
- output_asm_insn (\"bsr\\t___lshrhi3\", operands);
- if (D_REG_P (operands[2]))
- output_asm_insn (\"xgd%0\", operands);
+ if (A_REG_P (operands[0]))
+ return \"#\";
- return \"\";
+ return \"bsr\\t___lshrhi3\";
}")
(define_expand "lshrqi3"
@@ -5780,7 +5799,41 @@
return \"\";
}")
-(define_insn "rotlhi3"
+(define_insn "rotrqi3"
+ [(set (match_operand:QI 0 "register_operand" "=d,!q")
+ (rotatert:QI (match_operand:QI 1 "register_operand" "0,0")
+ (match_operand:QI 2 "const_int_operand" "i,i")))]
+ ""
+ "*
+{
+ m68hc11_gen_rotate (ROTATERT, insn, operands);
+ return \"\";
+}")
+
+(define_expand "rotlhi3"
+ [(set (match_operand:HI 0 "register_operand" "")
+ (rotate:HI (match_operand:HI 1 "register_operand" "")
+ (match_operand:HI 2 "general_operand" "")))]
+ ""
+ "
+{
+ if (GET_CODE (operands[2]) != CONST_INT)
+ {
+ rtx scratch = gen_reg_rtx (HImode);
+ operand1 = force_reg (HImode, operand1);
+
+ emit_move_insn (scratch, operands[2]);
+ emit_insn (gen_rtx (PARALLEL, VOIDmode,
+ gen_rtvec (2, gen_rtx (SET, VOIDmode,
+ operand0,
+ gen_rtx_ROTATE (HImode,
+ operand1, scratch)),
+ gen_rtx (CLOBBER, VOIDmode, scratch))));
+ DONE;
+ }
+}")
+
+(define_insn "rotlhi3_const"
[(set (match_operand:HI 0 "register_operand" "=d")
(rotate:HI (match_operand:HI 1 "register_operand" "0")
(match_operand:HI 2 "const_int_operand" "i")))]
@@ -5791,18 +5844,44 @@
return \"\";
}")
-(define_insn "rotrqi3"
- [(set (match_operand:QI 0 "register_operand" "=d,!q")
- (rotatert:QI (match_operand:QI 1 "register_operand" "0,0")
- (match_operand:QI 2 "const_int_operand" "i,i")))]
+(define_insn "*rotlhi3"
+ [(set (match_operand:HI 0 "register_operand" "=d,*x")
+ (rotate:HI (match_operand:HI 1 "register_operand" "0,0")
+ (match_operand:HI 2 "general_operand" "+x,+d")))
+ (clobber (match_dup 2))]
""
"*
{
- m68hc11_gen_rotate (ROTATERT, insn, operands);
- return \"\";
+ if (A_REG_P (operands[0]))
+ return \"#\";
+
+ return \"bsr\\t___rotlhi3\";
}")
-(define_insn "rotrhi3"
+(define_expand "rotrhi3"
+ [(set (match_operand:HI 0 "register_operand" "")
+ (rotatert:HI (match_operand:HI 1 "general_operand" "")
+ (match_operand:HI 2 "general_operand" "")))]
+ ""
+ "
+{
+ if (GET_CODE (operands[2]) != CONST_INT)
+ {
+ rtx scratch = gen_reg_rtx (HImode);
+ operand1 = force_reg (HImode, operand1);
+
+ emit_move_insn (scratch, operands[2]);
+ emit_insn (gen_rtx (PARALLEL, VOIDmode,
+ gen_rtvec (2, gen_rtx (SET, VOIDmode,
+ operand0,
+ gen_rtx_ROTATERT (HImode,
+ operand1, scratch)),
+ gen_rtx (CLOBBER, VOIDmode, scratch))));
+ DONE;
+ }
+}")
+
+(define_insn "rotrhi3_const"
[(set (match_operand:HI 0 "register_operand" "=d")
(rotatert:HI (match_operand:HI 1 "register_operand" "0")
(match_operand:HI 2 "const_int_operand" "i")))]
@@ -5813,6 +5892,38 @@
return \"\";
}")
+(define_insn "*rotrhi3"
+ [(set (match_operand:HI 0 "register_operand" "=d,*x")
+ (rotatert:HI (match_operand:HI 1 "register_operand" "0,0")
+ (match_operand:HI 2 "general_operand" "+x,+d")))
+ (clobber (match_dup 2))]
+ ""
+ "*
+{
+ if (A_REG_P (operands[0]))
+ return \"#\";
+
+ return \"bsr\\t___rotrhi3\";
+}")
+
+;; Split a shift operation on an address register in a shift
+;; on D_REGNUM.
+(define_split /* "*rotrhi3_addr" */
+ [(set (match_operand:HI 0 "hard_addr_reg_operand" "")
+ (match_operator:HI 3 "m68hc11_shift_operator"
+ [(match_operand:HI 1 "register_operand" "")
+ (match_operand:HI 2 "register_operand" "")]))
+ (clobber (match_dup 2))]
+ "z_replacement_completed == 2"
+ [(parallel [(set (reg:HI D_REGNUM) (match_dup 0))
+ (set (match_dup 0) (reg:HI D_REGNUM))])
+ (parallel [(set (reg:HI D_REGNUM)
+ (match_op_dup 3 [(reg:HI D_REGNUM) (match_dup 0)]))
+ (clobber (match_dup 0))])
+ (parallel [(set (reg:HI D_REGNUM) (match_dup 0))
+ (set (match_dup 0) (reg:HI D_REGNUM))])]
+ "")
+
;;--------------------------------------------------------------------
;;- Jumps and transfers
;;--------------------------------------------------------------------
@@ -6279,14 +6390,27 @@
""
"*
{
- int far_call = current_function_far;
-
if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
{
- if (SYMBOL_REF_FLAG (XEXP (operands[0], 0)) == 1)
+ if (m68hc11_is_far_symbol (operands[0]))
+ {
+ if (TARGET_M6812)
+ {
+ output_asm_insn (\"call\\t%0\", operands);
+ return \"\";
+ }
+ else
+ {
+ output_asm_insn (\"pshb\", operands);
+ output_asm_insn (\"ldab\\t#%%page(%0)\", operands);
+ output_asm_insn (\"ldy\\t#%%addr(%0)\", operands);
+ return \"jsr\\t__call_a32\";
+ }
+ }
+ if (m68hc11_is_trap_symbol (operands[0]))
return \"swi\";
else
- return far_call ? \"call\\t%0\" : \"bsr\\t%0\";
+ return \"bsr\\t%0\";
}
else
{
@@ -6301,14 +6425,27 @@
""
"*
{
- int far_call = current_function_far;
-
if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
{
- if (SYMBOL_REF_FLAG (XEXP (operands[1], 0)) == 1)
+ if (m68hc11_is_far_symbol (operands[1]))
+ {
+ if (TARGET_M6812)
+ {
+ output_asm_insn (\"call\\t%1\", operands);
+ return \"\";
+ }
+ else
+ {
+ output_asm_insn (\"pshb\", operands);
+ output_asm_insn (\"ldab\\t#%%page(%1)\", operands);
+ output_asm_insn (\"ldy\\t#%%addr(%1)\", operands);
+ return \"jsr\\t__call_a32\";
+ }
+ }
+ if (m68hc11_is_trap_symbol (operands[1]))
return \"swi\";
else
- return far_call ? \"call\\t%1\" : \"bsr\\t%1\";
+ return \"bsr\\t%1\";
}
else
{
@@ -6422,7 +6559,25 @@
return \"\";
if (current_function_interrupt || current_function_trap)
return \"rti\";
- return current_function_far ? \"rtc\" : \"rts\";
+ else if (!current_function_far)
+ return \"rts\";
+ else if (TARGET_M6812)
+ return \"rtc\";
+ else
+ {
+ int ret_size = 0;
+
+ if (current_function_return_rtx)
+ ret_size = GET_MODE_SIZE (GET_MODE (current_function_return_rtx));
+
+ if (ret_size == 0)
+ return \"jmp\\t__return_void\";
+ if (ret_size <= 2)
+ return \"jmp\\t__return_16\";
+ if (ret_size <= 4)
+ return \"jmp\\t__return_32\";
+ return \"jmp\\t__return_16\";
+ }
}")
(define_insn "*return_16bit"
@@ -6439,7 +6594,12 @@
return \"\";
if (current_function_interrupt || current_function_trap)
return \"rti\";
- return current_function_far ? \"rtc\" : \"rts\";
+ else if (!current_function_far)
+ return \"rts\";
+ else if (TARGET_M6812)
+ return \"rtc\";
+ else
+ return \"jmp\\t__return_16\";
}")
(define_insn "*return_32bit"
@@ -6456,7 +6616,12 @@
return \"\";
if (current_function_interrupt || current_function_trap)
return \"rti\";
- return current_function_far ? \"rtc\" : \"rts\";
+ else if (!current_function_far)
+ return \"rts\";
+ else if (TARGET_M6812)
+ return \"rtc\";
+ else
+ return \"jmp\\t__return_32\";
}")
(define_insn "indirect_jump"
@@ -6673,6 +6838,29 @@
"")
;;
+;; Replace a "ldd <mem>; addd #N; std <mem>" into a
+;; "ldx <mem>; leax; stx <mem>" if we have a free X/Y register
+;; and the constant is small.
+;;
+(define_peephole2
+ [(set (match_operand:HI 0 "hard_reg_operand" "")
+ (match_operand:HI 1 "general_operand" ""))
+ (set (match_dup 0) (plus:HI (match_dup 0)
+ (match_operand:HI 2 "const_int_operand" "")))
+ (set (match_operand:HI 3 "nonimmediate_operand" "")
+ (match_dup 0))
+ (match_scratch:HI 4 "xy")]
+ "D_REG_P (operands[0])
+ && (TARGET_M6812
+ || (INTVAL (operands[2]) >= -2 && INTVAL (operands[2]) <= 2))
+ && peep2_reg_dead_p (3, operands[0])"
+ [(set (match_dup 4) (match_dup 1))
+ (set (match_dup 4) (plus:HI (match_dup 4) (match_dup 2)))
+ (set (match_dup 3) (match_dup 4))]
+ "if (reg_mentioned_p (operands[4], operands[1])) FAIL;
+ if (reg_mentioned_p (operands[4], operands[3])) FAIL;")
+
+;;
;; This peephole catches the address computations generated by the reload
;; pass.
(define_peephole
diff --git a/gcc/config/m68hc11/t-m68hc11-gas b/gcc/config/m68hc11/t-m68hc11-gas
index 1833fd56dc3..34153489441 100644
--- a/gcc/config/m68hc11/t-m68hc11-gas
+++ b/gcc/config/m68hc11/t-m68hc11-gas
@@ -23,9 +23,9 @@ LIB1ASMFUNCS = _mulsi3 \
_regs_min _regs_frame _regs_d1_2 \
_regs_d3_4 _regs_d5_6 _regs_d7_8 _regs_d9_16 _regs_d17_32 \
_premain __exit _abort _cleanup \
- _adddi3 _subdi3 _notdi2 \
+ _adddi3 _subdi3 _notdi2 _rotlhi3 _rotrhi3 \
_ashrhi3 _lshrhi3 _lshlhi3 _ashrqi3 _lshlqi3 _map_data _init_bss \
- _ctor _dtor __far_trampoline
+ _ctor _dtor _far_tramp _call_far _return_far
TARGET_LIBGCC2_CFLAGS = -DUSE_GAS -DIN_GCC
@@ -37,10 +37,10 @@ LIB2FUNCS_EXTRA = $(srcdir)/config/udivmodsi4.c \
LIBGCC2_DEBUG_CFLAGS =-g
LIBGCC2_CFLAGS = -Os -mrelax $(LIBGCC2_INCLUDES) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2
-MULTILIB_OPTIONS = m68hc11/m68hc12 mshort fshort-double mlong-calls
+MULTILIB_OPTIONS = m68hc11/m68hc12 mshort fshort-double
MULTILIB_DIRNAMES =
MULTILIB_MATCHES = m68hc11=m6811 m68hc12=m6812
-MULTILIB_EXCEPTIONS = -mnoshort -mno68hc11 -mnolong-calls
+MULTILIB_EXCEPTIONS = -mnoshort -mno68hc11
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index cb94d232923..5e14b29614a 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -1,5 +1,5 @@
/* Subroutines for insn-output.c for Motorola 68000 family.
- Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ Copyright (C) 1987, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003
Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -475,7 +475,7 @@ m68k_output_function_prologue (stream, size)
}
if (dwarf2out_do_frame ())
{
- cfa_store_offset += fsize;
+ cfa_store_offset += fsize + 4;
cfa_offset = cfa_store_offset;
dwarf2out_def_cfa ("", STACK_POINTER_REGNUM, cfa_offset);
}
diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md
index 2812cd57c86..dc2691cadfe 100644
--- a/gcc/config/m68k/m68k.md
+++ b/gcc/config/m68k/m68k.md
@@ -1,5 +1,5 @@
;;- Machine description for GNU compiler, Motorola 68000 Version
-;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002
+;; Copyright (C) 1987, 1988, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003
;; Free Software Foundation, Inc.
;; This file is part of GNU CC.
@@ -3862,7 +3862,7 @@
case -1 :
/* FIXME : a scratch register would be welcome here if operand[0]
is not a register */
- output_asm_insn (\"move%.l %#-1,%R0\", operands);
+ output_asm_insn (\"move%.l %#-1,%0\", operands);
break;
default :
{
diff --git a/gcc/config/mcore/mcore-elf.h b/gcc/config/mcore/mcore-elf.h
index b4c7ae63d4b..b8378591706 100644
--- a/gcc/config/mcore/mcore-elf.h
+++ b/gcc/config/mcore/mcore-elf.h
@@ -25,7 +25,12 @@ Boston, MA 02111-1307, USA. */
/* Run-time Target Specification. */
#define TARGET_VERSION fputs (" (Motorola MCORE/elf)", stderr)
-#define SUBTARGET_CPP_PREDEFINES " -D__ELF__"
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__ELF__"); \
+ } \
+ while (0)
/* Use DWARF2 debugging info. */
#define DWARF2_DEBUGGING_INFO 1
diff --git a/gcc/config/mcore/mcore-pe.h b/gcc/config/mcore/mcore-pe.h
index a6ea4d4282c..96381c97e7b 100644
--- a/gcc/config/mcore/mcore-pe.h
+++ b/gcc/config/mcore/mcore-pe.h
@@ -22,7 +22,12 @@ Boston, MA 02111-1307, USA. */
/* Run-time Target Specification. */
#define TARGET_VERSION fputs (" (MCORE/pe)", stderr)
-#define SUBTARGET_CPP_PREDEFINES " -D__pe__"
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__pe__"); \
+ } \
+ while (0)
/* The MCore ABI says that bitfields are unsigned by default. */
/* The EPOC C++ environment does not support exceptions. */
diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h
index 6d2078c966c..84ef59fbeb0 100644
--- a/gcc/config/mcore/mcore.h
+++ b/gcc/config/mcore/mcore.h
@@ -1,23 +1,24 @@
/* Definitions of target machine for GNU compiler,
for Motorola M*CORE Processor.
- Copyright (C) 1993, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1993, 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
-This file is part of GNU CC.
+ This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+ 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.
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+ 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 GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ 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. */
#ifndef GCC_MCORE_H
#define GCC_MCORE_H
@@ -46,28 +47,28 @@ Boston, MA 02111-1307, USA. */
predefined attributes later on. This can be solved by using one attribute,
say __declspec__, and passing args to it. The problem with that approach
is that args are not accumulated: each new appearance would clobber any
- existing args. XXX- FIXME the definition below relies upon string
- concatenation, which is non-portable. */
-#define CPP_PREDEFINES \
- "-D__mcore__ -D__MCORE__=1 -D__declspec(x)=__attribute__((x))" SUBTARGET_CPP_PREDEFINES
-
-/* If -m4align is ever re-enabled then uncomment this line as well:
- #define CPP_SPEC "%{!m4align:-D__MCORE_ALIGN_8__} %{m4align:-D__MCORE__ALIGN_4__}" */
+ existing args. */
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__mcore__"); \
+ builtin_define ("__MCORE__"); \
+ builtin_define ("__declspec(x)=__attribute__((x))"); \
+ if (TARGET_LITTLE_END) \
+ builtin_define ("__MCORELE__"); \
+ else \
+ builtin_define ("__MCOREBE__"); \
+ if (TARGET_M340) \
+ builtin_define ("__M340__"); \
+ else \
+ builtin_define ("__M210__"); \
+ } \
+ while (0)
-#undef CPP_SPEC
-#define CPP_SPEC " \
-%{mbig-endian: \
- %{mlittle-endian:%echoose either big or little endian, not both} \
- -D__MCOREBE__} \
-%{m210: \
- %{m340:%echoose either m340 or m210 not both} \
- %{mlittle-endian:%ethe m210 does not have little endian support} \
- -D__M210__} \
-%{!mbig-endian: -D__MCORELE__} \
-%{!m210: -D__M340__} \
-"
/* If -m4align is ever re-enabled then add this line to the definition of CPP_SPEC
%{!m4align:-D__MCORE_ALIGN_8__} %{m4align:-D__MCORE__ALIGN_4__} */
+#undef CPP_SPEC
+#define CPP_SPEC "%{m210:%{mlittle-endian:%ethe m210 does not have little endian support}}"
/* We don't have a -lg library, so don't put it in the list. */
#undef LIB_SPEC
@@ -210,7 +211,7 @@ extern const char * mcore_stack_increment_string;
/* What options are we going to force to specific settings,
regardless of what the user thought he wanted.
- We also use this for some post-processing of options. */
+ We also use this for some post-processing of options. */
#define OVERRIDE_OPTIONS mcore_override_options ()
/* Target machine storage Layout. */
@@ -374,7 +375,7 @@ extern int mcore_stack_increment;
Aside from that, you can include as many other registers as you like. */
/* RBE: r15 {link register} not available across calls,
- * But we don't mark it that way here... */
+ But we don't mark it that way here... */
#define CALL_USED_REGISTERS \
/* r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ap c fp x19 */ \
{ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1}
@@ -529,7 +530,7 @@ extern const int regno_reg_class[FIRST_PSEUDO_REGISTER];
extern const enum reg_class reg_class_from_letter[];
#define REG_CLASS_FROM_LETTER(C) \
- ( ISLOWER (C) ? reg_class_from_letter[(C) - 'a'] : NO_REGS )
+ (ISLOWER (C) ? reg_class_from_letter[(C) - 'a'] : NO_REGS)
/* The letters I, J, K, L, M, N, O, and P in a register constraint string
can be used to stand for particular ranges of immediate operands.
@@ -1133,7 +1134,7 @@ extern long mcore_current_compilation_timestamp;
/* Globalizing directive for a label. */
#define GLOBAL_ASM_OP "\t.export\t"
-/* The prefix to add to user-visible assembler symbols. */
+/* The prefix to add to user-visible assembler symbols. */
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
@@ -1142,7 +1143,7 @@ extern long mcore_current_compilation_timestamp;
#define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \
sprintf (STRING, "*.%s%ld", PREFIX, (long) NUM)
-/* Jump tables must be 32 bit aligned. */
+/* Jump tables must be 32 bit aligned. */
#undef ASM_OUTPUT_CASE_LABEL
#define ASM_OUTPUT_CASE_LABEL(STREAM,PREFIX,NUM,TABLE) \
fprintf (STREAM, "\t.align 2\n.%s%d:\n", PREFIX, NUM);
diff --git a/gcc/config/mips/elf.h b/gcc/config/mips/elf.h
index c64bb46b621..8df5c376d36 100644
--- a/gcc/config/mips/elf.h
+++ b/gcc/config/mips/elf.h
@@ -1,6 +1,7 @@
/* Definitions of target machine for GNU compiler. MIPS R3000 version with
GOFAST floating point library.
- Copyright (C) 1994, 1997, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1994, 1997, 1999, 2000, 2002, 2003
+ Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -105,7 +106,6 @@ do { \
#ifndef ASM_OUTPUT_ALIGNED_BSS
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
if (SIZE > 0 && SIZE <= mips_section_threshold) \
sbss_section (); \
else \
diff --git a/gcc/config/mips/iris3.h b/gcc/config/mips/iris3.h
index 5b05a9f9fbf..042f74286ea 100644
--- a/gcc/config/mips/iris3.h
+++ b/gcc/config/mips/iris3.h
@@ -20,16 +20,6 @@ Boston, MA 02111-1307, USA. */
#define SGI_TARGET 1 /* inform other mips files this is SGI */
-/* Names to predefine in the preprocessor for this target machine. */
-/* Temporarily #if 0'd until Irix header consolidation. */
-#if 0
-#define CPP_PREDEFINES "\
--Dunix -Dmips -Dsgi -DSVR3 -Dhost_mips -DMIPSEB -DSYSTYPE_SYSV \
--Asystem=unix -Asystem=svr3 -Acpu=mips -Amachine=mips"
-#define SUBTARGET_CPP_SPEC "\
-%{!ansi:-D__EXTENSIONS__} -D_MIPSEB -D_SYSTYPE_SYSV"
-#endif
-
#define STARTFILE_SPEC "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}"
#define LIB_SPEC \
"%{!p:%{!pg:%{!static:%{!g*:-lc_s}} -lc}}%{p:-lc_p}%{pg:-lc_p} crtn.o%s"
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index 987a58c6b9d..69f01aafa2f 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -160,6 +160,13 @@ Boston, MA 02111-1307, USA. */
specification. The SGI/MIPS ABI defines it to be the same as PTR_SIZE. */
#define DWARF_OFFSET_SIZE PTR_SIZE
+/* The size in bytes of the initial length field in a debug info
+ section. The DWARF 3 (draft) specification defines this to be
+ either 4 or 12 (with a 4-byte "escape" word when it's 12), but the
+ SGI/MIPS ABI predates this standard and defines it to be the same
+ as DWARF_OFFSET_SIZE. */
+#define DWARF_INITIAL_LENGTH_SIZE DWARF_OFFSET_SIZE
+
/* There is no GNU as port for Irix6 yet, so we set MD_EXEC_PREFIX so that
gcc will automatically find SGI as instead of searching the user's path.
The latter can fail when building a cross compiler if the user has . in
@@ -518,4 +525,4 @@ do { \
-_SYSTYPE_SVR4 -woff 131 \
%{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64}%{!mabi*: -n32}"
-#define MIPS_TFMODE_FORMAT ibm_extended_format
+#define MIPS_TFMODE_FORMAT mips_extended_format
diff --git a/gcc/config/mips/linux.h b/gcc/config/mips/linux.h
index 959a065d2fc..894fcd03b34 100644
--- a/gcc/config/mips/linux.h
+++ b/gcc/config/mips/linux.h
@@ -1,5 +1,6 @@
/* Definitions for MIPS running Linux-based GNU systems with ELF format.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -45,7 +46,6 @@ Boston, MA 02111-1307, USA. */
`varasm.c' when defining this macro. */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
if (SIZE > 0 && SIZE <= mips_section_threshold) \
sbss_section (); \
else \
diff --git a/gcc/config/mips/linux64.h b/gcc/config/mips/linux64.h
index ef30146c988..c78e789f89c 100644
--- a/gcc/config/mips/linux64.h
+++ b/gcc/config/mips/linux64.h
@@ -25,12 +25,15 @@ Boston, MA 02111-1307, USA. */
time, we also need t-linux64 to get the build-time specs in line
with the setting in config.gcc. */
#define DRIVER_DEFAULT_ABI_SELF_SPEC "%{!mabi=*:-mabi=n32}"
+#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "driver_default_abi_self_spec", DRIVER_DEFAULT_ABI_SELF_SPEC },
#define DRIVER_SELF_SPECS \
+"%{!EB:%{!EL:%(endian_spec)}}", \
"%{mabi-fake-default:%{!mabi=*:-mabi=32}}", \
"%(driver_default_abi_self_spec)", \
-"%{!mips*:%{mabi=32:-mips1}%{mabi=n32:-mips3}%{mabi=64:-mips4}}"
+"%{!mips*:%{!march=*:%{mabi=32:-mips1}%{mabi=n32|mabi=64:-mips3}}}"
+
#undef SUBTARGET_TARGET_SWITCHES
#define SUBTARGET_TARGET_SWITCHES \
{ "abi-fake-default", 0, N_("Same as -mabi=32, just trickier") },
@@ -39,8 +42,7 @@ Boston, MA 02111-1307, USA. */
#define SUBTARGET_ASM_SPEC "\
%{!fno-PIC:%{!fno-pic:-KPIC}} \
%{fno-PIC:-non_shared} %{fno-pic:-non_shared} \
-%{mabi=64:-64} %{mabi=n32:-n32} \
-%{!mips*: %{mabi=n32|mabi=32:-mips3} %{mabi=64:-mips4}}"
+%{mabi=64:-64} %{mabi=n32:-n32}"
#undef LIB_SPEC
#define LIB_SPEC "\
@@ -65,9 +67,9 @@ Boston, MA 02111-1307, USA. */
%{mabi=64: -dynamic-linker /lib64/ld.so.1} \
%{mabi=32: -dynamic-linker /lib/ld.so.1}}} \
%{static:-static}}} \
-%{mabi=n32: -melf32btsmipn32} \
-%{mabi=64: -melf64btsmip} \
-%{mabi=32: -melf32btsmip}"
+%{mabi=n32:-melf32%{EB:b}%{EL:l}tsmipn32} \
+%{mabi=64:-melf64%{EB:b}%{EL:l}tsmip} \
+%{mabi=32:-melf32%{EB:b}%{EL:l}tsmip}"
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC "\
@@ -96,4 +98,4 @@ Boston, MA 02111-1307, USA. */
for long double. There's no need to override this here, since
ieee_quad_format is the default, but let's put this here to make
sure nobody thinks we just forgot to set it to something else. */
-#define MIPS_TFMODE_FORMAT ieee_quad_format
+#define MIPS_TFMODE_FORMAT mips_quad_format
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 5829178c118..a90cafc4a6e 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -5714,8 +5714,12 @@ override_options ()
else
mips16 = 0;
+ real_format_for_mode[SFmode - QFmode] = &mips_single_format;
+ real_format_for_mode[DFmode - QFmode] = &mips_double_format;
#ifdef MIPS_TFMODE_FORMAT
real_format_for_mode[TFmode - QFmode] = &MIPS_TFMODE_FORMAT;
+#else
+ real_format_for_mode[TFmode - QFmode] = &mips_quad_format;
#endif
mips_print_operand_punct['?'] = 1;
@@ -5767,6 +5771,9 @@ override_options ()
for (i = FP_REG_FIRST; i <= FP_REG_LAST; i++)
mips_dbx_regno[i] = i + start;
+ mips_dbx_regno[HI_REGNUM] = MD_DBX_FIRST + 0;
+ mips_dbx_regno[LO_REGNUM] = MD_DBX_FIRST + 1;
+
/* Set up array giving whether a given register can hold a given mode.
At present, restrict ints from being in FP registers, because reload
is a little enthusiastic about storing extra values in FP registers,
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
index 2064ace96eb..dcacea341b7 100644
--- a/gcc/config/mips/mips.h
+++ b/gcc/config/mips/mips.h
@@ -1851,6 +1851,7 @@ do { \
#define MD_REG_FIRST 64
#define MD_REG_LAST 66
#define MD_REG_NUM (MD_REG_LAST - MD_REG_FIRST + 1)
+#define MD_DBX_FIRST (FP_DBX_FIRST + FP_REG_NUM)
#define ST_REG_FIRST 67
#define ST_REG_LAST 74
@@ -2921,12 +2922,15 @@ typedef struct mips_args {
fprintf (FILE, "\t.set\tnoat\n"); \
fprintf (FILE, "\tmove\t%s,%s\t\t# save current return address\n", \
reg_names[GP_REG_FIRST + 1], reg_names[GP_REG_FIRST + 31]); \
- fprintf (FILE, \
- "\t%s\t%s,%s,%d\t\t# _mcount pops 2 words from stack\n", \
- TARGET_64BIT ? "dsubu" : "subu", \
- reg_names[STACK_POINTER_REGNUM], \
- reg_names[STACK_POINTER_REGNUM], \
- Pmode == DImode ? 16 : 8); \
+ if (mips_abi != ABI_N32 && mips_abi != ABI_64) \
+ { \
+ fprintf (FILE, \
+ "\t%s\t%s,%s,%d\t\t# _mcount pops 2 words from stack\n", \
+ TARGET_64BIT ? "dsubu" : "subu", \
+ reg_names[STACK_POINTER_REGNUM], \
+ reg_names[STACK_POINTER_REGNUM], \
+ Pmode == DImode ? 16 : 8); \
+ } \
fprintf (FILE, "\tjal\t_mcount\n"); \
fprintf (FILE, "\t.set\tat\n"); \
}
diff --git a/gcc/config/mips/t-iris6 b/gcc/config/mips/t-iris6
index a1be0b9c9ed..d403df4cf00 100644
--- a/gcc/config/mips/t-iris6
+++ b/gcc/config/mips/t-iris6
@@ -27,6 +27,7 @@ tp-bit.c: $(srcdir)/config/fp-bit.c
echo '#ifdef __MIPSEL__' > tp-bit.c
echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c
echo '#endif' >> tp-bit.c
+ echo '#define QUIET_NAN_NEGATED' >> dp-bit.c
echo '#if __LDBL_MANT_DIG__ == 106' >> tp-bit.c
echo '# define TFLOAT' >> tp-bit.c
cat $(srcdir)/config/fp-bit.c >> tp-bit.c
diff --git a/gcc/config/mips/t-linux64 b/gcc/config/mips/t-linux64
index cf639287770..a0792f23a94 100644
--- a/gcc/config/mips/t-linux64
+++ b/gcc/config/mips/t-linux64
@@ -13,6 +13,7 @@ tp-bit.c: $(srcdir)/config/fp-bit.c
echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c
echo '#endif' >> tp-bit.c
echo '#if __LDBL_MANT_DIG__ == 113' >> tp-bit.c
+ echo '#define QUIET_NAN_NEGATED' >> dp-bit.c
echo '# define TFLOAT' >> tp-bit.c
cat $(srcdir)/config/fp-bit.c >> tp-bit.c
echo '#endif' >> tp-bit.c
diff --git a/gcc/config/mips/t-mips b/gcc/config/mips/t-mips
index 292386d0383..497f4fb20cb 100644
--- a/gcc/config/mips/t-mips
+++ b/gcc/config/mips/t-mips
@@ -9,6 +9,7 @@ dp-bit.c: $(srcdir)/config/fp-bit.c
echo '#ifdef __MIPSEL__' > dp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c
echo '#endif' >> dp-bit.c
+ echo '#define QUIET_NAN_NEGATED' >> dp-bit.c
cat $(srcdir)/config/fp-bit.c >> dp-bit.c
fp-bit.c: $(srcdir)/config/fp-bit.c
@@ -16,4 +17,5 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
echo '#ifdef __MIPSEL__' >> fp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c
echo '#endif' >> fp-bit.c
+ echo '#define QUIET_NAN_NEGATED' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
diff --git a/gcc/config/mmix/mmix.md b/gcc/config/mmix/mmix.md
index dc7148f39d3..8878c3f692c 100644
--- a/gcc/config/mmix/mmix.md
+++ b/gcc/config/mmix/mmix.md
@@ -1,5 +1,5 @@
;; GCC machine description for MMIX
-;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
;; Contributed by Hans-Peter Nilsson (hp@bitrange.com)
;; This file is part of GCC.
@@ -131,6 +131,55 @@
STOU %1,%0
%r0%I1")
+;; We need to be able to move around the values used as condition codes.
+;; First spotted as reported in
+;; <URL:http://gcc.gnu.org/ml/gcc-bugs/2003-03/msg00008.html> due to
+;; changes in loop optimization. The file machmode.def says they're of
+;; size 4 QI. Valid bit-patterns correspond to integers -1, 0 and 1, so
+;; we treat them as signed entities; see mmix-modes.def. The following
+;; expanders should cover all MODE_CC modes, and expand for this pattern.
+(define_insn "*movcc_expanded"
+ [(set (match_operand 0 "nonimmediate_operand" "=r,x,r,r,m")
+ (match_operand 1 "nonimmediate_operand" "r,r,x,m,r"))]
+ "GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_CC
+ && GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_CC"
+ "@
+ SET %0,%1
+ PUT %0,%1
+ GET %0,%1
+ LDT %0,%1
+ STT %1,%0")
+
+(define_expand "movcc"
+ [(set (match_operand:CC 0 "nonimmediate_operand" "")
+ (match_operand:CC 1 "nonimmediate_operand" ""))]
+ ""
+ "")
+
+(define_expand "movcc_uns"
+ [(set (match_operand:CC_UNS 0 "nonimmediate_operand" "")
+ (match_operand:CC_UNS 1 "nonimmediate_operand" ""))]
+ ""
+ "")
+
+(define_expand "movcc_fp"
+ [(set (match_operand:CC_FP 0 "nonimmediate_operand" "")
+ (match_operand:CC_FP 1 "nonimmediate_operand" ""))]
+ ""
+ "")
+
+(define_expand "movcc_fpeq"
+ [(set (match_operand:CC_FPEQ 0 "nonimmediate_operand" "")
+ (match_operand:CC_FPEQ 1 "nonimmediate_operand" ""))]
+ ""
+ "")
+
+(define_expand "movcc_fun"
+ [(set (match_operand:CC_FUN 0 "nonimmediate_operand" "")
+ (match_operand:CC_FUN 1 "nonimmediate_operand" ""))]
+ ""
+ "")
+
(define_insn "adddi3"
[(set (match_operand:DI 0 "register_operand" "=r,r,r")
(plus:DI
diff --git a/gcc/config/mn10200/mn10200.h b/gcc/config/mn10200/mn10200.h
index 58099cb5887..7ea4bb3f398 100644
--- a/gcc/config/mn10200/mn10200.h
+++ b/gcc/config/mn10200/mn10200.h
@@ -32,7 +32,13 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-D__mn10200__ -D__MN10200__"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__mn10200__"); \
+ builtin_define ("__MN10200__"); \
+ } \
+ while (0)
/* Run-time compilation parameters selecting different hardware subsets. */
diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h
index 7ddd9d5291b..0bde1766d92 100644
--- a/gcc/config/mn10300/mn10300.h
+++ b/gcc/config/mn10300/mn10300.h
@@ -33,7 +33,13 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-D__mn10300__ -D__MN10300__"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__mn10300__"); \
+ builtin_define ("__MN10300__"); \
+ } \
+ while (0)
#define CPP_SPEC "%{mam33:-D__AM33__}"
diff --git a/gcc/config/netbsd.h b/gcc/config/netbsd.h
index 04413899621..602f8312b60 100644
--- a/gcc/config/netbsd.h
+++ b/gcc/config/netbsd.h
@@ -29,14 +29,6 @@ Boston, MA 02111-1307, USA. */
} \
while (0)
-/* TARGET_OS_CPP_BUILTINS() common to all LP64 NetBSD targets. */
-#define NETBSD_OS_CPP_BUILTINS_LP64() \
- do \
- { \
- builtin_define ("_LP64"); \
- } \
- while (0)
-
/* CPP_SPEC parts common to all NetBSD targets. */
#define NETBSD_CPP_SPEC \
"%{posix:-D_POSIX_SOURCE} \
diff --git a/gcc/config/pa/pa-hpux.h b/gcc/config/pa/pa-hpux.h
index b9d563e09be..d6e15164013 100644
--- a/gcc/config/pa/pa-hpux.h
+++ b/gcc/config/pa/pa-hpux.h
@@ -96,3 +96,12 @@ Boston, MA 02111-1307, USA. */
/* hpux8 and later have C++ compatible include files, so do not
pretend they are `extern "C"'. */
#define NO_IMPLICIT_EXTERN_C
+
+/* hpux11 and earlier don't have fputc_unlocked, so we must inhibit the
+ transformation of fputs_unlocked and fprintf_unlocked to fputc_unlocked. */
+#define DONT_HAVE_FPUTC_UNLOCKED
+
+/* We want the entry value of SP saved in the frame marker for
+ compatibility with the HP-UX unwind library. */
+#undef TARGET_HPUX_UNWIND_LIBRARY
+#define TARGET_HPUX_UNWIND_LIBRARY 1
diff --git a/gcc/config/pa/pa-protos.h b/gcc/config/pa/pa-protos.h
index 248e1a7d05e..16c9fbf079a 100644
--- a/gcc/config/pa/pa-protos.h
+++ b/gcc/config/pa/pa-protos.h
@@ -44,6 +44,7 @@ extern const char *output_move_double PARAMS ((rtx *));
extern const char *output_fp_move_double PARAMS ((rtx *));
extern const char *output_block_move PARAMS ((rtx *, int));
extern const char *output_cbranch PARAMS ((rtx *, int, int, int, rtx));
+extern const char *output_lbranch PARAMS ((rtx, rtx));
extern const char *output_bb PARAMS ((rtx *, int, int, int, rtx, int));
extern const char *output_bvb PARAMS ((rtx *, int, int, int, rtx, int));
extern const char *output_dbra PARAMS ((rtx *, rtx, int));
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 27b218c72e0..25dfd4591f5 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -130,6 +130,7 @@ static void pa_asm_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
static void pa_asm_out_constructor PARAMS ((rtx, int));
static void pa_asm_out_destructor PARAMS ((rtx, int));
#endif
+static void pa_init_builtins PARAMS ((void));
static void copy_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED;
static int length_fp_args PARAMS ((rtx)) ATTRIBUTE_UNUSED;
static struct deferred_plabel *get_plabel PARAMS ((const char *))
@@ -222,6 +223,9 @@ static size_t n_deferred_plabels = 0;
#define TARGET_ASM_DESTRUCTOR pa_asm_out_destructor
#endif
+#undef TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS pa_init_builtins
+
#undef TARGET_RTX_COSTS
#define TARGET_RTX_COSTS hppa_rtx_costs
#undef TARGET_ADDRESS_COST
@@ -338,6 +342,14 @@ override_options ()
}
}
+static void
+pa_init_builtins ()
+{
+#ifdef DONT_HAVE_FPUTC_UNLOCKED
+ built_in_decls[(int) BUILT_IN_FPUTC_UNLOCKED] = NULL_TREE;
+#endif
+}
+
/* Return nonzero only if OP is a register of mode MODE,
or CONST0_RTX. */
int
@@ -3195,15 +3207,24 @@ compute_frame_size (size, fregs_live)
int size;
int *fregs_live;
{
- int i, fsize;
+ int freg_saved = 0;
+ int i, j;
- /* Space for frame pointer + filler. If any frame is allocated
- we need to add this in because of STARTING_FRAME_OFFSET.
+ /* The code in hppa_expand_prologue and hppa_expand_epilogue must
+ be consistent with the rounding and size calculation done here.
+ Change them at the same time. */
- Similar code also appears in hppa_expand_prologue. Change both
- of them at the same time. */
- fsize = size + (size || frame_pointer_needed ? STARTING_FRAME_OFFSET : 0);
+ /* We do our own stack alignment. First, round the size of the
+ stack locals up to a word boundary. */
+ size = (size + UNITS_PER_WORD - 1) & ~(UNITS_PER_WORD - 1);
+ /* Space for previous frame pointer + filler. If any frame is
+ allocated, we need to add in the STARTING_FRAME_OFFSET. We
+ waste some space here for the sake of HP compatibility. The
+ first slot is only used when the frame pointer is needed. */
+ if (size || frame_pointer_needed)
+ size += STARTING_FRAME_OFFSET;
+
/* If the current function calls __builtin_eh_return, then we need
to allocate stack space for registers that will hold data for
the exception handler. */
@@ -3213,41 +3234,49 @@ compute_frame_size (size, fregs_live)
for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; ++i)
continue;
- fsize += i * UNITS_PER_WORD;
+ size += i * UNITS_PER_WORD;
}
/* Account for space used by the callee general register saves. */
- for (i = 18; i >= 3; i--)
+ for (i = 18, j = frame_pointer_needed ? 4 : 3; i >= j; i--)
if (regs_ever_live[i])
- fsize += UNITS_PER_WORD;
-
- /* Round the stack. */
- fsize = (fsize + 7) & ~7;
+ size += UNITS_PER_WORD;
/* Account for space used by the callee floating point register saves. */
for (i = FP_SAVED_REG_LAST; i >= FP_SAVED_REG_FIRST; i -= FP_REG_STEP)
if (regs_ever_live[i]
- || (! TARGET_64BIT && regs_ever_live[i + 1]))
+ || (!TARGET_64BIT && regs_ever_live[i + 1]))
{
- if (fregs_live)
- *fregs_live = 1;
+ freg_saved = 1;
/* We always save both halves of the FP register, so always
increment the frame size by 8 bytes. */
- fsize += 8;
+ size += 8;
}
+ /* If any of the floating registers are saved, account for the
+ alignment needed for the floating point register save block. */
+ if (freg_saved)
+ {
+ size = (size + 7) & ~7;
+ if (fregs_live)
+ *fregs_live = 1;
+ }
+
/* The various ABIs include space for the outgoing parameters in the
- size of the current function's stack frame. */
- fsize += current_function_outgoing_args_size;
+ size of the current function's stack frame. We don't need to align
+ for the outgoing arguments as their alignment is set by the final
+ rounding for the frame as a whole. */
+ size += current_function_outgoing_args_size;
/* Allocate space for the fixed frame marker. This space must be
- allocated for any function that makes calls or otherwise allocates
+ allocated for any function that makes calls or allocates
stack space. */
- if (!current_function_is_leaf || fsize)
- fsize += TARGET_64BIT ? 16 : 32;
+ if (!current_function_is_leaf || size)
+ size += TARGET_64BIT ? 48 : 32;
- return ((fsize + PREFERRED_STACK_BOUNDARY / 8 - 1)
+ /* Finally, round to the preferred stack boundary. */
+ return ((size + PREFERRED_STACK_BOUNDARY / 8 - 1)
& ~(PREFERRED_STACK_BOUNDARY / 8 - 1));
}
@@ -3288,6 +3317,15 @@ pa_output_function_prologue (file, size)
else
fputs (",NO_CALLS", file);
+ /* The SAVE_SP flag is used to indicate that register %r3 is stored
+ at the beginning of the frame and that it is used as the frame
+ pointer for the frame. We do this because our current frame
+ layout doesn't conform to that specified in the the HP runtime
+ documentation and we need a way to indicate to programs such as
+ GDB where %r3 is saved. The SAVE_SP flag was chosen because it
+ isn't used by HP compilers but is supported by the assembler.
+ However, SAVE_SP is supposed to indicate that the previous stack
+ pointer has been saved in the frame marker. */
if (frame_pointer_needed)
fputs (",SAVE_SP", file);
@@ -3313,8 +3351,8 @@ pa_output_function_prologue (file, size)
void
hppa_expand_prologue ()
{
- int size = get_frame_size ();
int merge_sp_adjust_with_store = 0;
+ int size = get_frame_size ();
int i, offset;
rtx insn, tmpreg;
@@ -3322,13 +3360,12 @@ hppa_expand_prologue ()
fr_saved = 0;
save_fregs = 0;
- /* Allocate space for frame pointer + filler. If any frame is allocated
- we need to add this in because of STARTING_FRAME_OFFSET.
-
- Similar code also appears in compute_frame_size. Change both
- of them at the same time. */
- local_fsize = size + (size || frame_pointer_needed
- ? STARTING_FRAME_OFFSET : 0);
+ /* Compute total size for frame pointer, filler, locals and rounding to
+ the next word boundary. Similar code appears in compute_frame_size
+ and must be changed in tandem with this code. */
+ local_fsize = (size + UNITS_PER_WORD - 1) & ~(UNITS_PER_WORD - 1);
+ if (local_fsize || frame_pointer_needed)
+ local_fsize += STARTING_FRAME_OFFSET;
actual_fsize = compute_frame_size (size, &save_fregs);
@@ -3388,11 +3425,32 @@ hppa_expand_prologue ()
adjust2, 1);
}
- /* Prevent register spills from being scheduled before the
- stack pointer is raised. Necessary as we will be storing
- registers using the frame pointer as a base register, and
- we happen to set fp before raising sp. */
- emit_insn (gen_blockage ());
+ /* We set SAVE_SP in frames that need a frame pointer. Thus,
+ we need to store the previous stack pointer (frame pointer)
+ into the frame marker on targets that use the HP unwind
+ library. This allows the HP unwind library to be used to
+ unwind GCC frames. However, we are not fully compatible
+ with the HP library because our frame layout differs from
+ that specified in the HP runtime specification.
+
+ We don't want a frame note on this instruction as the frame
+ marker moves during dynamic stack allocation.
+
+ This instruction also serves as a blockage to prevent
+ register spills from being scheduled before the stack
+ pointer is raised. This is necessary as we store
+ registers using the frame pointer as a base register,
+ and the frame pointer is set before sp is raised. */
+ if (TARGET_HPUX_UNWIND_LIBRARY)
+ {
+ rtx addr = gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (TARGET_64BIT ? -8 : -4));
+
+ emit_move_insn (gen_rtx_MEM (word_mode, addr),
+ frame_pointer_rtx);
+ }
+ else
+ emit_insn (gen_blockage ());
}
/* no frame pointer needed. */
else
@@ -5489,14 +5547,19 @@ output_cbranch (operands, nullify, length, negated, insn)
{
static char buf[100];
int useskip = 0;
+ rtx xoperands[5];
- /* A conditional branch to the following instruction (eg the delay slot) is
- asking for a disaster. This can happen when not optimizing.
+ /* A conditional branch to the following instruction (eg the delay slot)
+ is asking for a disaster. This can happen when not optimizing and
+ when jump optimization fails.
- In such cases it is safe to emit nothing. */
-
- if (next_active_insn (JUMP_LABEL (insn)) == next_active_insn (insn))
- return "";
+ While it is usually safe to emit nothing, this can fail if the
+ preceding instruction is a nullified branch with an empty delay
+ slot and the same branch target as this branch. We could check
+ for this but jump optimization should eliminate nop jumps. It
+ is always safe to emit a nop. */
+ if (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))
+ return "nop";
/* If this is a long branch with its delay slot unfilled, set `nullify'
as it can nullify the delay slot and save a nop. */
@@ -5594,98 +5657,182 @@ output_cbranch (operands, nullify, length, negated, insn)
break;
case 20:
- /* Very long branch. Right now we only handle these when not
- optimizing. See "jump" pattern in pa.md for details. */
- if (optimize)
- abort ();
+ case 28:
+ xoperands[0] = operands[0];
+ xoperands[1] = operands[1];
+ xoperands[2] = operands[2];
+ xoperands[3] = operands[3];
+
+ /* The reversed conditional branch must branch over one additional
+ instruction if the delay slot is filled. If the delay slot
+ is empty, the instruction after the reversed condition branch
+ must be nullified. */
+ nullify = dbr_sequence_length () == 0;
+ xoperands[4] = nullify ? GEN_INT (length) : GEN_INT (length + 4);
/* Create a reversed conditional branch which branches around
the following insns. */
- if (negated)
- strcpy (buf, "{com%I2b,%S3,n %2,%r1,.+20|cmp%I2b,%S3,n %2,%r1,.+20}");
+ if (GET_MODE (operands[1]) != DImode)
+ {
+ if (nullify)
+ {
+ if (negated)
+ strcpy (buf,
+ "{com%I2b,%S3,n %2,%r1,.+%4|cmp%I2b,%S3,n %2,%r1,.+%4}");
+ else
+ strcpy (buf,
+ "{com%I2b,%B3,n %2,%r1,.+%4|cmp%I2b,%B3,n %2,%r1,.+%4}");
+ }
+ else
+ {
+ if (negated)
+ strcpy (buf,
+ "{com%I2b,%S3 %2,%r1,.+%4|cmp%I2b,%S3 %2,%r1,.+%4}");
+ else
+ strcpy (buf,
+ "{com%I2b,%B3 %2,%r1,.+%4|cmp%I2b,%B3 %2,%r1,.+%4}");
+ }
+ }
else
- strcpy (buf, "{com%I2b,%B3,n %2,%r1,.+20|cmp%I2b,%B3,n %2,%r1,.+20}");
- if (GET_MODE (operands[1]) == DImode)
{
- if (negated)
- strcpy (buf,
- "{com%I2b,*%S3,n %2,%r1,.+20|cmp%I2b,*%S3,n %2,%r1,.+20}");
+ if (nullify)
+ {
+ if (negated)
+ strcpy (buf,
+ "{com%I2b,*%S3,n %2,%r1,.+%4|cmp%I2b,*%S3,n %2,%r1,.+%4}");
+ else
+ strcpy (buf,
+ "{com%I2b,*%B3,n %2,%r1,.+%4|cmp%I2b,*%B3,n %2,%r1,.+%4}");
+ }
else
- strcpy (buf,
- "{com%I2b,*%B3,n %2,%r1,.+20|cmp%I2b,*%B3,n %2,%r1,.+20}");
+ {
+ if (negated)
+ strcpy (buf,
+ "{com%I2b,*%S3 %2,%r1,.+%4|cmp%I2b,*%S3 %2,%r1,.+%4}");
+ else
+ strcpy (buf,
+ "{com%I2b,*%B3 %2,%r1,.+%4|cmp%I2b,*%B3 %2,%r1,.+%4}");
+ }
}
- output_asm_insn (buf, operands);
- /* Output an insn to save %r1. */
- output_asm_insn ("stw %%r1,-16(%%r30)", operands);
+ output_asm_insn (buf, xoperands);
+ return output_lbranch (operands[0], insn);
- /* Now output a very long branch to the original target. */
- output_asm_insn ("ldil L'%l0,%%r1\n\tbe R'%l0(%%sr4,%%r1)", operands);
+ default:
+ abort ();
+ }
+ return buf;
+}
- /* Now restore the value of %r1 in the delay slot. We're not
- optimizing so we know nothing else can be in the delay slot. */
- return "ldw -16(%%r30),%%r1";
+/* This routine handles long unconditional branches that exceed the
+ maximum range of a simple branch instruction. */
- case 28:
- /* Very long branch when generating PIC code. Right now we only
- handle these when not optimizing. See "jump" pattern in pa.md
- for details. */
- if (optimize)
- abort ();
+const char *
+output_lbranch (dest, insn)
+ rtx dest, insn;
+{
+ rtx xoperands[2];
+
+ xoperands[0] = dest;
- /* Create a reversed conditional branch which branches around
- the following insns. */
- if (negated)
- strcpy (buf, "{com%I2b,%S3,n %2,%r1,.+28|cmp%I2b,%S3,n %2,%r1,.+28}");
- else
- strcpy (buf, "{com%I2b,%B3,n %2,%r1,.+28|cmp%I2b,%B3,n %2,%r1,.+28}");
- if (GET_MODE (operands[1]) == DImode)
- {
- if (negated)
- strcpy (buf, "{com%I2b,*%S3,n %2,%r1,.+28|cmp%I2b,*%S3,n %2,%r1,.+28}");
- else
- strcpy (buf, "{com%I2b,*%B3,n %2,%r1,.+28|cmp%I2b,*%B3,n %2,%r1,.+28}");
- }
- output_asm_insn (buf, operands);
+ /* First, free up the delay slot. */
+ if (dbr_sequence_length () != 0)
+ {
+ /* We can't handle a jump in the delay slot. */
+ if (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN)
+ abort ();
- /* Output an insn to save %r1. */
- output_asm_insn ("stw %%r1,-16(%%r30)", operands);
+ final_scan_insn (NEXT_INSN (insn), asm_out_file,
+ optimize, 0, 0);
+
+ /* Now delete the delay insn. */
+ PUT_CODE (NEXT_INSN (insn), NOTE);
+ NOTE_LINE_NUMBER (NEXT_INSN (insn)) = NOTE_INSN_DELETED;
+ NOTE_SOURCE_FILE (NEXT_INSN (insn)) = 0;
+ }
+
+ /* Output an insn to save %r1. The runtime documentation doesn't
+ specify whether the "Clean Up" slot in the callers frame can
+ be clobbered by the callee. It isn't copied by HP's builtin
+ alloca, so this suggests that it can be clobbered if necessary.
+ The "Static Link" location is copied by HP builtin alloca, so
+ we avoid using it. Using the cleanup slot might be a problem
+ if we have to interoperate with languages that pass cleanup
+ information. However, it should be possible to handle these
+ situations with GCC's asm feature.
+
+ The "Current RP" slot is reserved for the called procedure, so
+ we try to use it when we don't have a frame of our own. It's
+ rather unlikely that we won't have a frame when we need to emit
+ a very long branch.
+
+ Really the way to go long term is a register scavenger; goto
+ the target of the jump and find a register which we can use
+ as a scratch to hold the value in %r1. Then, we wouldn't have
+ to free up the delay slot or clobber a slot that may be needed
+ for other purposes. */
+ if (TARGET_64BIT)
+ {
+ if (actual_fsize == 0 && !regs_ever_live[2])
+ /* Use the return pointer slot in the frame marker. */
+ output_asm_insn ("std %%r1,-16(%%r30)", xoperands);
+ else
+ /* Use the slot at -40 in the frame marker since HP builtin
+ alloca doesn't copy it. */
+ output_asm_insn ("std %%r1,-40(%%r30)", xoperands);
+ }
+ else
+ {
+ if (actual_fsize == 0 && !regs_ever_live[2])
+ /* Use the return pointer slot in the frame marker. */
+ output_asm_insn ("stw %%r1,-20(%%r30)", xoperands);
+ else
+ /* Use the "Clean Up" slot in the frame marker. In GCC,
+ the only other use of this location is for copying a
+ floating point double argument from a floating-point
+ register to two general registers. The copy is done
+ as an "atomic" operation when outputing a call, so it
+ won't interfere with our using the location here. */
+ output_asm_insn ("stw %%r1,-12(%%r30)", xoperands);
+ }
- /* Now output a very long PIC branch to the original target. */
+ if (flag_pic)
+ {
+ output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
+ if (TARGET_SOM || !TARGET_GAS)
{
- rtx xoperands[5];
-
- xoperands[0] = operands[0];
- xoperands[1] = operands[1];
- xoperands[2] = operands[2];
- xoperands[3] = operands[3];
-
- output_asm_insn ("{bl|b,l} .+8,%%r1", xoperands);
- if (TARGET_SOM || !TARGET_GAS)
- {
- xoperands[4] = gen_label_rtx ();
- output_asm_insn ("addil L'%l0-%l4,%%r1", xoperands);
- (*targetm.asm_out.internal_label) (asm_out_file, "L",
- CODE_LABEL_NUMBER (xoperands[4]));
- output_asm_insn ("ldo R'%l0-%l4(%%r1),%%r1", xoperands);
- }
- else
- {
- output_asm_insn ("addil L'%l0-$PIC_pcrel$0+4,%%r1", xoperands);
- output_asm_insn ("ldo R'%l0-$PIC_pcrel$0+8(%%r1),%%r1",
- xoperands);
- }
- output_asm_insn ("bv %%r0(%%r1)", xoperands);
+ xoperands[1] = gen_label_rtx ();
+ output_asm_insn ("addil L'%l0-%l1,%%r1", xoperands);
+ (*targetm.asm_out.internal_label) (asm_out_file, "L",
+ CODE_LABEL_NUMBER (xoperands[1]));
+ output_asm_insn ("ldo R'%l0-%l1(%%r1),%%r1", xoperands);
}
+ else
+ {
+ output_asm_insn ("addil L'%l0-$PIC_pcrel$0+4,%%r1", xoperands);
+ output_asm_insn ("ldo R'%l0-$PIC_pcrel$0+8(%%r1),%%r1", xoperands);
+ }
+ output_asm_insn ("bv %%r0(%%r1)", xoperands);
+ }
+ else
+ /* Now output a very long branch to the original target. */
+ output_asm_insn ("ldil L'%l0,%%r1\n\tbe R'%l0(%%sr4,%%r1)", xoperands);
- /* Now restore the value of %r1 in the delay slot. We're not
- optimizing so we know nothing else can be in the delay slot. */
- return "ldw -16(%%r30),%%r1";
-
- default:
- abort ();
+ /* Now restore the value of %r1 in the delay slot. */
+ if (TARGET_64BIT)
+ {
+ if (actual_fsize == 0 && !regs_ever_live[2])
+ return "ldd -16(%%r30),%%r1";
+ else
+ return "ldd -40(%%r30),%%r1";
+ }
+ else
+ {
+ if (actual_fsize == 0 && !regs_ever_live[2])
+ return "ldw -20(%%r30),%%r1";
+ else
+ return "ldw -12(%%r30),%%r1";
}
- return buf;
}
/* This routine handles all the branch-on-bit conditional branch sequences we
@@ -5708,8 +5855,8 @@ output_bb (operands, nullify, length, negated, insn, which)
is only used when optimizing; jump optimization should eliminate the
jump. But be prepared just in case. */
- if (next_active_insn (JUMP_LABEL (insn)) == next_active_insn (insn))
- return "";
+ if (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))
+ return "nop";
/* If this is a long branch with its delay slot unfilled, set `nullify'
as it can nullify the delay slot and save a nop. */
@@ -5856,8 +6003,8 @@ output_bvb (operands, nullify, length, negated, insn, which)
is only used when optimizing; jump optimization should eliminate the
jump. But be prepared just in case. */
- if (next_active_insn (JUMP_LABEL (insn)) == next_active_insn (insn))
- return "";
+ if (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))
+ return "nop";
/* If this is a long branch with its delay slot unfilled, set `nullify'
as it can nullify the delay slot and save a nop. */
@@ -5997,7 +6144,7 @@ output_dbra (operands, insn, which_alternative)
/* A conditional branch to the following instruction (eg the delay slot) is
asking for a disaster. Be prepared! */
- if (next_active_insn (JUMP_LABEL (insn)) == next_active_insn (insn))
+ if (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))
{
if (which_alternative == 0)
return "ldo %1(%0),%0";
@@ -6104,7 +6251,7 @@ output_movb (operands, insn, which_alternative, reverse_comparison)
/* A conditional branch to the following instruction (eg the delay slot) is
asking for a disaster. Be prepared! */
- if (next_active_insn (JUMP_LABEL (insn)) == next_active_insn (insn))
+ if (next_real_insn (JUMP_LABEL (insn)) == next_real_insn (insn))
{
if (which_alternative == 0)
return "copy %1,%0";
@@ -7442,9 +7589,9 @@ jump_in_call_delay (insn)
if (PREV_INSN (insn)
&& PREV_INSN (PREV_INSN (insn))
- && GET_CODE (next_active_insn (PREV_INSN (PREV_INSN (insn)))) == INSN)
+ && GET_CODE (next_real_insn (PREV_INSN (PREV_INSN (insn)))) == INSN)
{
- rtx test_insn = next_active_insn (PREV_INSN (PREV_INSN (insn)));
+ rtx test_insn = next_real_insn (PREV_INSN (PREV_INSN (insn)));
return (GET_CODE (PATTERN (test_insn)) == SEQUENCE
&& XVECEXP (PATTERN (test_insn), 0, 1) == insn);
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index 0b055e9b16b..177cae33ddc 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -211,6 +211,15 @@ extern int target_flags;
definition symbols is buggy prior to HP-UX 11.X. */
#define TARGET_SOM_SDEF 0
+/* Define to a C expression evaluating to true to save the entry value
+ of SP in the current frame marker. This is normally unnecessary.
+ However, the HP-UX unwind library looks at the SAVE_SP callinfo flag.
+ HP compilers don't use this flag but it is supported by the assembler.
+ We set this flag to indicate that register %r3 has been saved at the
+ start of the frame. Thus, when the HP unwind library is used, we
+ need to generate additional code to save SP into the frame marker. */
+#define TARGET_HPUX_UNWIND_LIBRARY 0
+
/* Macro to define tables used to set the flags. This is a
list in braces of target switches with each switch being
{ "NAME", VALUE, "HELP_STRING" }. VALUE is the bits to set,
@@ -356,11 +365,6 @@ do { \
builtin_assert("machine=hppa"); \
builtin_define("__hppa"); \
builtin_define("__hppa__"); \
- if (TARGET_64BIT) \
- { \
- builtin_define("_LP64"); \
- builtin_define("__LP64__"); \
- } \
if (TARGET_PA_20) \
builtin_define("_PA_RISC2_0"); \
else if (TARGET_PA_11) \
@@ -676,10 +680,17 @@ extern struct rtx_def *hppa_pic_save_rtx PARAMS ((void));
/* Offset within stack frame to start allocating local variables at.
If FRAME_GROWS_DOWNWARD, this is the offset to the END of the
first local allocated. Otherwise, it is the offset to the BEGINNING
- of the first local allocated. The start of the locals must lie on
- a STACK_BOUNDARY or else the frame size of leaf functions will not
- be zero. */
-#define STARTING_FRAME_OFFSET (TARGET_64BIT ? 16 : 8)
+ of the first local allocated.
+
+ On the 32-bit ports, we reserve one slot for the previous frame
+ pointer and one fill slot. The fill slot is for compatibility
+ with HP compiled programs. On the 64-bit ports, we reserve one
+ slot for the previous frame pointer. */
+#define STARTING_FRAME_OFFSET 8
+
+/* Define STACK_ALIGNMENT_NEEDED to zero to disable final alignment
+ of the stack. The default is to align it to STACK_BOUNDARY. */
+#define STACK_ALIGNMENT_NEEDED 0
/* If we generate an insn to push BYTES bytes,
this says how many the stack pointer really advances by.
@@ -712,9 +723,13 @@ extern struct rtx_def *hppa_pic_save_rtx PARAMS ((void));
/* The weird HPPA calling conventions require a minimum of 48 bytes on
the stack: 16 bytes for register saves, and 32 bytes for magic.
This is the difference between the logical top of stack and the
- actual sp. */
+ actual sp.
+
+ On the 64-bit port, the HP C compiler allocates a 48-byte frame
+ marker, although the runtime documentation only describes a 16
+ byte marker. For compatibility, we allocate 48 bytes. */
#define STACK_POINTER_OFFSET \
- (TARGET_64BIT ? -(current_function_outgoing_args_size + 16): -32)
+ (TARGET_64BIT ? -(current_function_outgoing_args_size + 48): -32)
#define STACK_DYNAMIC_OFFSET(FNDECL) \
(TARGET_64BIT \
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index d4f646152ea..0f50c8ff71d 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -5629,7 +5629,9 @@
[(return)
(clobber (reg:SI 1))
(use (reg:SI 2))]
- "!TARGET_NO_SPACE_REGS && flag_pic && current_function_calls_eh_return"
+ "!TARGET_NO_SPACE_REGS
+ && !TARGET_PA_20
+ && flag_pic && current_function_calls_eh_return"
"ldsid (%%sr0,%%r2),%%r1\;mtsp %%r1,%%sr0\;be%* 0(%%sr0,%%r2)"
[(set_attr "type" "branch")
(set_attr "length" "12")])
@@ -5668,6 +5670,7 @@
This is only a problem for returns from shared code on ports
using space registers. */
if (!TARGET_NO_SPACE_REGS
+ && !TARGET_PA_20
&& flag_pic && current_function_calls_eh_return)
x = gen_return_external_pic ();
else
@@ -5718,8 +5721,6 @@
""
"*
{
- extern int optimize;
-
if (GET_MODE (insn) == SImode)
return \"b %l0%#\";
@@ -5728,61 +5729,7 @@
&& get_attr_length (insn) != 16)
return \"b%* %l0\";
- /* An unconditional branch which can not reach its target.
-
- We need to be able to use %r1 as a scratch register; however,
- we can never be sure whether or not it's got a live value in
- it. Therefore, we must restore its original value after the
- jump.
-
- To make matters worse, we don't have a stack slot which we
- can always clobber. sp-12/sp-16 shouldn't ever have a live
- value during a non-optimizing compilation, so we use those
- slots for now. We don't support very long branches when
- optimizing -- they should be quite rare when optimizing.
-
- Really the way to go long term is a register scavenger; goto
- the target of the jump and find a register which we can use
- as a scratch to hold the value in %r1. */
-
- /* We don't know how to register scavenge yet. */
- if (optimize)
- abort ();
-
- /* First store %r1 into the stack. */
- output_asm_insn (\"stw %%r1,-16(%%r30)\", operands);
-
- /* Now load the target address into %r1 and do an indirect jump
- to the value specified in %r1. Be careful to generate PIC
- code as needed. */
- if (flag_pic)
- {
- rtx xoperands[2];
- xoperands[0] = operands[0];
- if (TARGET_SOM || ! TARGET_GAS)
- {
- xoperands[1] = gen_label_rtx ();
-
- output_asm_insn (\"{bl|b,l} .+8,%%r1\\n\\taddil L'%l0-%l1,%%r1\",
- xoperands);
- (*targetm.asm_out.internal_label) (asm_out_file, \"L\",
- CODE_LABEL_NUMBER (xoperands[1]));
- output_asm_insn (\"ldo R'%l0-%l1(%%r1),%%r1\", xoperands);
- }
- else
- {
- output_asm_insn (\"{bl|b,l} .+8,%%r1\", xoperands);
- output_asm_insn (\"addil L'%l0-$PIC_pcrel$0+4,%%r1\", xoperands);
- output_asm_insn (\"ldo R'%l0-$PIC_pcrel$0+8(%%r1),%%r1\", xoperands);
- }
- output_asm_insn (\"bv %%r0(%%r1)\", xoperands);
- }
- else
- output_asm_insn (\"ldil L'%l0,%%r1\\n\\tbe R'%l0(%%sr4,%%r1)\", operands);;
-
- /* And restore the value of %r1 in the delay slot. We're not optimizing,
- so we know nothing else can be in the delay slot. */
- return \"ldw -16(%%r30),%%r1\";
+ return output_lbranch (operands[0], insn);
}"
[(set_attr "type" "uncond_branch")
(set_attr "pa_combine_type" "uncond_branch")
@@ -5886,9 +5833,26 @@
op = XEXP (operands[0], 0);
if (TARGET_64BIT)
- emit_move_insn (arg_pointer_rtx,
- gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
- GEN_INT (64)));
+ {
+ if (!virtuals_instantiated)
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
+ GEN_INT (64)));
+ else
+ {
+ /* The loop pass can generate new libcalls after the virtual
+ registers are instantiated when fpregs are disabled because
+ the only method that we have for doing DImode multiplication
+ is with a libcall. This could be trouble if we haven't
+ allocated enough space for the outgoing arguments. */
+ if (INTVAL (nb) > current_function_outgoing_args_size)
+ abort ();
+
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (STACK_POINTER_OFFSET + 64)));
+ }
+ }
/* Use two different patterns for calls to explicitly named functions
and calls through function pointers. This is necessary as these two
@@ -6369,9 +6333,26 @@
op = XEXP (operands[1], 0);
if (TARGET_64BIT)
- emit_move_insn (arg_pointer_rtx,
- gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
- GEN_INT (64)));
+ {
+ if (!virtuals_instantiated)
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
+ GEN_INT (64)));
+ else
+ {
+ /* The loop pass can generate new libcalls after the virtual
+ registers are instantiated when fpregs are disabled because
+ the only method that we have for doing DImode multiplication
+ is with a libcall. This could be trouble if we haven't
+ allocated enough space for the outgoing arguments. */
+ if (INTVAL (nb) > current_function_outgoing_args_size)
+ abort ();
+
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (STACK_POINTER_OFFSET + 64)));
+ }
+ }
/* Use two different patterns for calls to explicitly named functions
and calls through function pointers. This is necessary as these two
@@ -6865,15 +6846,32 @@
"!TARGET_PORTABLE_RUNTIME"
"
{
- rtx op;
- rtx call_insn;
+ rtx op, call_insn;
+ rtx nb = operands[1];
op = XEXP (operands[0], 0);
if (TARGET_64BIT)
- emit_move_insn (arg_pointer_rtx,
- gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
- GEN_INT (64)));
+ {
+ if (!virtuals_instantiated)
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
+ GEN_INT (64)));
+ else
+ {
+ /* The loop pass can generate new libcalls after the virtual
+ registers are instantiated when fpregs are disabled because
+ the only method that we have for doing DImode multiplication
+ is with a libcall. This could be trouble if we haven't
+ allocated enough space for the outgoing arguments. */
+ if (INTVAL (nb) > current_function_outgoing_args_size)
+ abort ();
+
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (STACK_POINTER_OFFSET + 64)));
+ }
+ }
/* Indirect sibling calls are not allowed. */
if (TARGET_64BIT)
@@ -6930,15 +6928,32 @@
"!TARGET_PORTABLE_RUNTIME"
"
{
- rtx op;
- rtx call_insn;
+ rtx op, call_insn;
+ rtx nb = operands[1];
op = XEXP (operands[1], 0);
if (TARGET_64BIT)
- emit_move_insn (arg_pointer_rtx,
- gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
- GEN_INT (64)));
+ {
+ if (!virtuals_instantiated)
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, virtual_outgoing_args_rtx,
+ GEN_INT (64)));
+ else
+ {
+ /* The loop pass can generate new libcalls after the virtual
+ registers are instantiated when fpregs are disabled because
+ the only method that we have for doing DImode multiplication
+ is with a libcall. This could be trouble if we haven't
+ allocated enough space for the outgoing arguments. */
+ if (INTVAL (nb) > current_function_outgoing_args_size)
+ abort ();
+
+ emit_move_insn (arg_pointer_rtx,
+ gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (STACK_POINTER_OFFSET + 64)));
+ }
+ }
/* Indirect sibling calls are not allowed. */
if (TARGET_64BIT)
@@ -7982,3 +7997,38 @@
emit_insn (gen_blockage ());
DONE;
}")
+
+;; Allocate new stack space and update the saved stack pointer in the
+;; frame marker. The HP C compilers also copy additional words in the
+;; frame marker. The 64-bit compiler copies words at -48, -32 and -24.
+;; The 32-bit compiler copies the word at -16 (Static Link). We
+;; currently don't copy these values.
+;;
+;; Since the copy of the frame marker can't be done atomically, I
+;; suspect that using it for unwind purposes may be somewhat unreliable.
+;; The HP compilers appear to raise the stack and copy the frame
+;; marker in a strict instruction sequence. This suggests that the
+;; unwind library may check for an alloca sequence when ALLOCA_FRAME
+;; is set in the callinfo data. We currently don't set ALLOCA_FRAME
+;; as GAS doesn't support it, or try to keep the instructions emitted
+;; here in strict sequence.
+(define_expand "allocate_stack"
+ [(match_operand 0 "" "")
+ (match_operand 1 "" "")]
+ ""
+ "
+{
+ /* Since the stack grows upward, we need to store virtual_stack_dynamic_rtx
+ in operand 0 before adjusting the stack. */
+ emit_move_insn (operands[0], virtual_stack_dynamic_rtx);
+ anti_adjust_stack (operands[1]);
+ if (TARGET_HPUX_UNWIND_LIBRARY)
+ {
+ rtx dst = gen_rtx_MEM (word_mode,
+ gen_rtx_PLUS (word_mode, stack_pointer_rtx,
+ GEN_INT (TARGET_64BIT ? -8 : -4)));
+
+ emit_move_insn (dst, frame_pointer_rtx);
+ }
+ DONE;
+}")
diff --git a/gcc/config/pdp11/pdp11.h b/gcc/config/pdp11/pdp11.h
index 147b6ba67ce..07f3704aac3 100644
--- a/gcc/config/pdp11/pdp11.h
+++ b/gcc/config/pdp11/pdp11.h
@@ -30,7 +30,12 @@ Boston, MA 02111-1307, USA. */
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-Dpdp11"
+#define TARGET_CPU_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define_std ("pdp11"); \
+ } \
+ while (0)
/* Print subsidiary information on the compiler version in use. */
#define TARGET_VERSION fprintf (stderr, " (pdp11)");
diff --git a/gcc/config/rs6000/40x.md b/gcc/config/rs6000/40x.md
index 989cbcd6c29..bfa6955dbc0 100644
--- a/gcc/config/rs6000/40x.md
+++ b/gcc/config/rs6000/40x.md
@@ -46,12 +46,12 @@
"iu_40x,nothing,bpu_40x")
(define_insn_reservation "ppc403-imul" 4
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "ppc403"))
"iu_40x*4")
(define_insn_reservation "ppc405-imul" 5
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc405"))
"iu_40x*4")
diff --git a/gcc/config/rs6000/603.md b/gcc/config/rs6000/603.md
index c17593a3aba..ec206531c03 100644
--- a/gcc/config/rs6000/603.md
+++ b/gcc/config/rs6000/603.md
@@ -60,7 +60,7 @@
; This takes 2 or 3 cycles
(define_insn_reservation "ppc603-imul" 3
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc603"))
"iu_603*2")
diff --git a/gcc/config/rs6000/6xx.md b/gcc/config/rs6000/6xx.md
index cb79006c92a..7dbf759e28b 100644
--- a/gcc/config/rs6000/6xx.md
+++ b/gcc/config/rs6000/6xx.md
@@ -69,17 +69,17 @@
"iu1_6xx|iu2_6xx")
(define_insn_reservation "ppc604-imul" 4
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "ppc604"))
"mciu_6xx*2")
(define_insn_reservation "ppc604e-imul" 2
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "ppc604e"))
"mciu_6xx")
(define_insn_reservation "ppc620-imul" 5
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc620,ppc630"))
"mciu_6xx*3")
@@ -94,7 +94,7 @@
"mciu_6xx*3")
(define_insn_reservation "ppc620-lmul" 7
- (and (eq_attr "type" "lmul")
+ (and (eq_attr "type" "lmul,lmul_compare")
(eq_attr "cpu" "ppc620,ppc630"))
"mciu_6xx*5")
diff --git a/gcc/config/rs6000/7450.md b/gcc/config/rs6000/7450.md
index 1e41ca120df..b635ba85786 100644
--- a/gcc/config/rs6000/7450.md
+++ b/gcc/config/rs6000/7450.md
@@ -69,7 +69,7 @@
"ppc7450_du,(iu1_7450|iu2_7450|iu3_7450)")
(define_insn_reservation "ppc7450-imul" 4
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc7450"))
"ppc7450_du,mciu_7450*2")
diff --git a/gcc/config/rs6000/7xx.md b/gcc/config/rs6000/7xx.md
index 213fa7360bb..45ba1d35a5c 100644
--- a/gcc/config/rs6000/7xx.md
+++ b/gcc/config/rs6000/7xx.md
@@ -64,7 +64,7 @@
"ppc750_du,(iu1_7xx|iu2_7xx)")
(define_insn_reservation "ppc750-imul" 4
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "ppc750,ppc7400"))
"ppc750_du,iu1_7xx*4")
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 4632fd59e9a..1d35f8039d0 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -19,6 +19,12 @@
;; the Free Software Foundation, 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
+(define_constants
+ [(UNSPEC_VSPLTISW 141)
+ (UNSPEC_VSPLTISH 140)
+ (UNSPEC_VSPLTISB 139)
+ ])
+
;; Generic LVX load instruction.
(define_insn "altivec_lvx_4si"
[(set (match_operand:V4SI 0 "altivec_register_operand" "=v")
@@ -85,18 +91,37 @@
"{ rs6000_emit_move (operands[0], operands[1], V4SImode); DONE; }")
(define_insn "*movv4si_internal"
- [(set (match_operand:V4SI 0 "nonimmediate_operand" "=m,v,v,o,r,r")
- (match_operand:V4SI 1 "input_operand" "v,m,v,r,o,r"))]
- "TARGET_ALTIVEC"
- "@
- stvx %1,%y0
- lvx %0,%y1
- vor %0,%1,%1
- stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0
- lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1
- mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*")
- (set_attr "length" "*,*,*,16,16,16")])
+ [(set (match_operand:V4SI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
+ (match_operand:V4SI 1 "input_operand" "v,m,v,r,o,r,W"))]
+ "TARGET_ALTIVEC"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0: return \"stvx %1,%y0\";
+ case 1: return \"lvx %0,%y1\";
+ case 2: return \"vor %0,%1,%1\";
+ case 3: return \"stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0\";
+ case 4: return \"lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1\";
+ case 5: return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
+ case 6: return output_vec_const_move (operands);
+ default: abort();
+ }
+}"
+ [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")
+ (set_attr "length" "*,*,*,16,16,16,*")])
+
+(define_split
+ [(set (match_operand:V4SI 0 "altivec_register_operand" "")
+ (match_operand:V4SI 1 "easy_vector_constant_add_self" ""))]
+ "TARGET_ALTIVEC && reload_completed"
+ [(set (match_dup 0)
+ (unspec:V4SI [(match_dup 3)] UNSPEC_VSPLTISW))
+ (set (match_dup 0)
+ (plus:V4SI (match_dup 0)
+ (match_dup 0)))]
+ "
+{ operands[3] = GEN_INT (INTVAL (CONST_VECTOR_ELT (operands[1], 0)) >> 1); }")
(define_expand "movv8hi"
[(set (match_operand:V8HI 0 "nonimmediate_operand" "")
@@ -105,18 +130,37 @@
"{ rs6000_emit_move (operands[0], operands[1], V8HImode); DONE; }")
(define_insn "*movv8hi_internal1"
- [(set (match_operand:V8HI 0 "nonimmediate_operand" "=m,v,v,o,r,r")
- (match_operand:V8HI 1 "input_operand" "v,m,v,r,o,r"))]
- "TARGET_ALTIVEC"
- "@
- stvx %1,%y0
- lvx %0,%y1
- vor %0,%1,%1
- stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0
- lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1
- mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*")
- (set_attr "length" "*,*,*,16,16,16")])
+ [(set (match_operand:V8HI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
+ (match_operand:V8HI 1 "input_operand" "v,m,v,r,o,r,W"))]
+ "TARGET_ALTIVEC"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0: return \"stvx %1,%y0\";
+ case 1: return \"lvx %0,%y1\";
+ case 2: return \"vor %0,%1,%1\";
+ case 3: return \"stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0\";
+ case 4: return \"lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1\";
+ case 5: return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
+ case 6: return output_vec_const_move (operands);
+ default: abort ();
+ }
+}"
+ [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")
+ (set_attr "length" "*,*,*,16,16,16,*")])
+
+(define_split
+ [(set (match_operand:V8HI 0 "altivec_register_operand" "")
+ (match_operand:V8HI 1 "easy_vector_constant_add_self" ""))]
+ "TARGET_ALTIVEC && reload_completed"
+ [(set (match_dup 0)
+ (unspec:V8HI [(match_dup 3)] UNSPEC_VSPLTISH))
+ (set (match_dup 0)
+ (plus:V8HI (match_dup 0)
+ (match_dup 0)))]
+ "
+{ operands[3] = GEN_INT (INTVAL (CONST_VECTOR_ELT (operands[1], 0)) >> 1); }")
(define_expand "movv16qi"
[(set (match_operand:V16QI 0 "nonimmediate_operand" "")
@@ -125,18 +169,37 @@
"{ rs6000_emit_move (operands[0], operands[1], V16QImode); DONE; }")
(define_insn "*movv16qi_internal1"
- [(set (match_operand:V16QI 0 "nonimmediate_operand" "=m,v,v,o,r,r")
- (match_operand:V16QI 1 "input_operand" "v,m,v,r,o,r"))]
- "TARGET_ALTIVEC"
- "@
- stvx %1,%y0
- lvx %0,%y1
- vor %0,%1,%1
- stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0
- lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1
- mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*")
- (set_attr "length" "*,*,*,16,16,16")])
+ [(set (match_operand:V16QI 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
+ (match_operand:V16QI 1 "input_operand" "v,m,v,r,o,r,W"))]
+ "TARGET_ALTIVEC"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0: return \"stvx %1,%y0\";
+ case 1: return \"lvx %0,%y1\";
+ case 2: return \"vor %0,%1,%1\";
+ case 3: return \"stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0\";
+ case 4: return \"lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1\";
+ case 5: return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
+ case 6: return output_vec_const_move (operands);
+ default: abort ();
+ }
+}"
+ [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")
+ (set_attr "length" "*,*,*,16,16,16,*")])
+
+(define_split
+ [(set (match_operand:V16QI 0 "altivec_register_operand" "")
+ (match_operand:V16QI 1 "easy_vector_constant_add_self" ""))]
+ "TARGET_ALTIVEC && reload_completed"
+ [(set (match_dup 0)
+ (unspec:V16QI [(match_dup 3)] UNSPEC_VSPLTISB))
+ (set (match_dup 0)
+ (plus:V16QI (match_dup 0)
+ (match_dup 0)))]
+ "
+{ operands[3] = GEN_INT (INTVAL (CONST_VECTOR_ELT (operands[1], 0)) >> 1); }")
(define_expand "movv4sf"
[(set (match_operand:V4SF 0 "nonimmediate_operand" "")
@@ -145,18 +208,25 @@
"{ rs6000_emit_move (operands[0], operands[1], V4SFmode); DONE; }")
(define_insn "*movv4sf_internal1"
- [(set (match_operand:V4SF 0 "nonimmediate_operand" "=m,v,v,o,r,r")
- (match_operand:V4SF 1 "input_operand" "v,m,v,r,o,r"))]
- "TARGET_ALTIVEC"
- "@
- stvx %1,%y0
- lvx %0,%y1
- vor %0,%1,%1
- stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0
- lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1
- mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1"
- [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*")
- (set_attr "length" "*,*,*,16,16,16")])
+ [(set (match_operand:V4SF 0 "nonimmediate_operand" "=m,v,v,o,r,r,v")
+ (match_operand:V4SF 1 "input_operand" "v,m,v,r,o,r,W"))]
+ "TARGET_ALTIVEC"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0: return \"stvx %1,%y0\";
+ case 1: return \"lvx %0,%y1\";
+ case 2: return \"vor %0,%1,%1\";
+ case 3: return \"stw%U0 %1,%0\;stw %L1,%L0\;stw %Y1,%Y0\;stw %Z1,%Z0\";
+ case 4: return \"lwz%U1 %0,%1\;lwz %L0,%L1\;lwz %Y0,%Y1\;lwz %Z0,%Z1\";
+ case 5: return \"mr %0,%1\;mr %L0,%L1\;mr %Y0,%Y1\;mr %Z0,%Z1\";
+ case 6: return output_vec_const_move (operands);
+ default: abort ();
+ }
+}"
+ [(set_attr "type" "vecstore,vecload,vecsimple,store,load,*,*")
+ (set_attr "length" "*,*,*,16,16,16,*")])
(define_insn "get_vrsave_internal"
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -186,36 +256,6 @@
}"
[(set_attr "type" "*")])
-;; Vector clears
-(define_insn "*movv4si_const0"
- [(set (match_operand:V4SI 0 "altivec_register_operand" "=v")
- (match_operand:V4SI 1 "zero_constant" ""))]
- "TARGET_ALTIVEC"
- "vxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv4sf_const0"
- [(set (match_operand:V4SF 0 "altivec_register_operand" "=v")
- (match_operand:V4SF 1 "zero_constant" ""))]
-
- "TARGET_ALTIVEC"
- "vxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv8hi_const0"
- [(set (match_operand:V8HI 0 "altivec_register_operand" "=v")
- (match_operand:V8HI 1 "zero_constant" ""))]
- "TARGET_ALTIVEC"
- "vxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv16qi_const0"
- [(set (match_operand:V16QI 0 "altivec_register_operand" "=v")
- (match_operand:V16QI 1 "zero_constant" ""))]
- "TARGET_ALTIVEC"
- "vxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
;; Simple binary operations.
(define_insn "addv16qi3"
@@ -1279,6 +1319,7 @@
"vsumsws %0,%1,%2"
[(set_attr "type" "veccomplex")])
+;; Vector xor's
(define_insn "xorv4si3"
[(set (match_operand:V4SI 0 "register_operand" "=v")
(xor:V4SI (match_operand:V4SI 1 "register_operand" "v")
@@ -1287,6 +1328,22 @@
"vxor %0,%1,%2"
[(set_attr "type" "vecsimple")])
+(define_insn "xorv8hi3"
+ [(set (match_operand:V8HI 0 "register_operand" "=v")
+ (xor:V8HI (match_operand:V8HI 1 "register_operand" "v")
+ (match_operand:V8HI 2 "register_operand" "v")))]
+ "TARGET_ALTIVEC"
+ "vxor %0,%1,%2"
+ [(set_attr "type" "vecsimple")])
+
+(define_insn "xorv16qi3"
+ [(set (match_operand:V16QI 0 "register_operand" "=v")
+ (xor:V16QI (match_operand:V16QI 1 "register_operand" "v")
+ (match_operand:V16QI 2 "register_operand" "v")))]
+ "TARGET_ALTIVEC"
+ "vxor %0,%1,%2"
+ [(set_attr "type" "vecsimple")])
+
(define_insn "altivec_vspltb"
[(set (match_operand:V16QI 0 "register_operand" "=v")
(unspec:V16QI [(match_operand:V16QI 1 "register_operand" "v")
@@ -1294,6 +1351,7 @@
"TARGET_ALTIVEC"
"vspltb %0,%1,%2"
[(set_attr "type" "vecperm")])
+;; End of vector xor's
(define_insn "altivec_vsplth"
[(set (match_operand:V8HI 0 "register_operand" "=v")
@@ -1313,21 +1371,24 @@
(define_insn "altivec_vspltisb"
[(set (match_operand:V16QI 0 "register_operand" "=v")
- (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")] 139))]
+ (unspec:V16QI [(match_operand:QI 1 "immediate_operand" "i")]
+ UNSPEC_VSPLTISB))]
"TARGET_ALTIVEC"
"vspltisb %0,%1"
[(set_attr "type" "vecperm")])
(define_insn "altivec_vspltish"
[(set (match_operand:V8HI 0 "register_operand" "=v")
- (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")] 140))]
+ (unspec:V8HI [(match_operand:QI 1 "immediate_operand" "i")]
+ UNSPEC_VSPLTISH))]
"TARGET_ALTIVEC"
"vspltish %0,%1"
[(set_attr "type" "vecperm")])
(define_insn "altivec_vspltisw"
[(set (match_operand:V4SI 0 "register_operand" "=v")
- (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")] 141))]
+ (unspec:V4SI [(match_operand:QI 1 "immediate_operand" "i")]
+ UNSPEC_VSPLTISW))]
"TARGET_ALTIVEC"
"vspltisw %0,%1"
[(set_attr "type" "vecperm")])
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index 9fceb6a6166..e6324af7ca0 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -35,14 +35,15 @@ Boston, MA 02111-1307, USA. */
#define TARGET_TOC 0
#define TARGET_NO_TOC 1
+/* Darwin switches. */
+/* Use dynamic-no-pic codegen (no picbase reg; not suitable for shlibs.) */
+#define MASK_MACHO_DYNAMIC_NO_PIC 0x00800000
+
+#define TARGET_DYNAMIC_NO_PIC (target_flags & MASK_MACHO_DYNAMIC_NO_PIC)
+
/* Handle #pragma weak and #pragma pack. */
#define HANDLE_SYSV_PRAGMA 1
-/* The Darwin ABI always includes AltiVec, can't be (validly) turned
- off. */
-
-#define SUBTARGET_OVERRIDE_OPTIONS \
- rs6000_altivec_abi = 1;
#define TARGET_OS_CPP_BUILTINS() \
do \
@@ -55,12 +56,45 @@ Boston, MA 02111-1307, USA. */
} \
while (0)
+
+/* */
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+ {"dynamic-no-pic", MASK_MACHO_DYNAMIC_NO_PIC, \
+ N_("Generate code suitable for executables (NOT shared libs)")}, \
+ {"no-dynamic-no-pic", -MASK_MACHO_DYNAMIC_NO_PIC, ""},
+
+
+/* The Darwin ABI always includes AltiVec, can't be (validly) turned
+ off. */
+
+#define SUBTARGET_OVERRIDE_OPTIONS \
+do { \
+ rs6000_altivec_abi = 1; \
+ if (DEFAULT_ABI == ABI_DARWIN) \
+ { \
+ if (MACHO_DYNAMIC_NO_PIC_P) \
+ { \
+ if (flag_pic) \
+ warning ("-mdynamic-no-pic overrides -fpic or -fPIC"); \
+ flag_pic = 0; \
+ } \
+ else if (flag_pic == 1) \
+ { \
+ /* Darwin doesn't support -fpic. */ \
+ warning ("-fpic is not supported; -fPIC assumed"); \
+ flag_pic = 2; \
+ } \
+ } \
+}while(0)
+
/* We want -fPIC by default, unless we're using -static to compile for
the kernel or some such. */
+
#define CC1_SPEC "\
%{static: %{Zdynamic: %e conflicting code gen style switches are used}}\
-%{!static:-fPIC}"
+%{!static:%{!mdynamic-no-pic:-fPIC}}"
/* Make both r2 and r3 available for allocation. */
#define FIXED_R2 0
diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h
index 3d5d7e447b8..be03b3b65b1 100644
--- a/gcc/config/rs6000/linux64.h
+++ b/gcc/config/rs6000/linux64.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for 64 bit PowerPC linux.
- Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -45,27 +45,74 @@ Boston, MA 02111-1307, USA. */
%{mlittle} %{mlittle-endian} %{mbig} %{mbig-endian} \
%{v:-V} %{Qy:} %{!Qn:-Qy} -a64 %(asm_cpu) %{Wa,*:%*}"
+/* This is always a 64 bit compiler. */
+#undef TARGET_64BIT
+#define TARGET_64BIT 1
+
/* 64-bit PowerPC Linux always has a TOC. */
#undef TARGET_NO_TOC
#define TARGET_NO_TOC 0
#undef TARGET_TOC
#define TARGET_TOC 1
-/* We use glibc _mcount for profiling. */
-#define NO_PROFILE_COUNTERS 1
-#undef PROFILE_BEFORE_PROLOGUE
+/* Some things from sysv4.h we don't do. */
+#undef TARGET_RELOCATABLE
+#define TARGET_RELOCATABLE 0
+#undef TARGET_EABI
+#define TARGET_EABI 0
+#undef TARGET_PROTOTYPE
+#define TARGET_PROTOTYPE 0
-/* Define this for kernel profiling, which just saves LR then calls
+/* Reuse sysv4 mask bits we made available above. */
+#define MASK_PROFILE_KERNEL 0x08000000
+
+/* Non-standard profiling for kernels, which just saves LR then calls
_mcount without worrying about arg saves. The idea is to change
the function prologue as little as possible as it isn't easy to
account for arg save/restore code added just for _mcount. */
-/* #define PROFILE_KERNEL 1 */
-#if PROFILE_KERNEL
-#define PROFILE_BEFORE_PROLOGUE 1
-#undef PROFILE_HOOK
-#else
+#define TARGET_PROFILE_KERNEL (target_flags & MASK_PROFILE_KERNEL)
+
+/* Override sysv4.h. */
+#undef SUBTARGET_SWITCHES
+#define SUBTARGET_SWITCHES \
+ {"bit-align", -MASK_NO_BITFIELD_TYPE, \
+ N_("Align to the base type of the bit-field") }, \
+ {"no-bit-align", MASK_NO_BITFIELD_TYPE, \
+ N_("Don't align to the base type of the bit-field") }, \
+ {"strict-align", MASK_STRICT_ALIGN, \
+ N_("Don't assume that unaligned accesses are handled by the system") }, \
+ {"no-strict-align", -MASK_STRICT_ALIGN, \
+ N_("Assume that unaligned accesses are handled by the system") }, \
+ {"little-endian", MASK_LITTLE_ENDIAN, \
+ N_("Produce little endian code") }, \
+ {"little", MASK_LITTLE_ENDIAN, \
+ N_("Produce little endian code") }, \
+ {"big-endian", -MASK_LITTLE_ENDIAN, \
+ N_("Produce big endian code") }, \
+ {"big", -MASK_LITTLE_ENDIAN, \
+ N_("Produce big endian code") }, \
+ {"bit-word", -MASK_NO_BITFIELD_WORD, \
+ N_("Allow bit-fields to cross word boundaries") }, \
+ {"no-bit-word", MASK_NO_BITFIELD_WORD, \
+ N_("Do not allow bit-fields to cross word boundaries") }, \
+ {"regnames", MASK_REGNAMES, \
+ N_("Use alternate register names") }, \
+ {"no-regnames", -MASK_REGNAMES, \
+ N_("Don't use alternate register names") }, \
+ {"profile-kernel", MASK_PROFILE_KERNEL, \
+ N_("Call mcount for profiling before a function prologue") }, \
+ {"no-profile-kernel", -MASK_PROFILE_KERNEL, \
+ N_("Call mcount for profiling after a function prologue") },
+
+#undef SUBTARGET_OPTIONS
+#define SUBTARGET_OPTIONS
+
+#undef SUBTARGET_OVERRIDE_OPTIONS
+#define SUBTARGET_OVERRIDE_OPTIONS {}
+
+/* We use glibc _mcount for profiling. */
+#define NO_PROFILE_COUNTERS 1
#define PROFILE_HOOK(LABEL) output_profile_hook (LABEL)
-#endif
/* We don't need to generate entries in .fixup. */
#undef RELOCATABLE_NEEDS_FIXUP
@@ -110,6 +157,10 @@ Boston, MA 02111-1307, USA. */
#undef MD_EXEC_PREFIX
#undef MD_STARTFILE_PREFIX
+/* Override sysv4.h */
+#undef CPP_SYSV_SPEC
+#define CPP_SYSV_SPEC ""
+
#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS() \
do \
@@ -221,9 +272,6 @@ Boston, MA 02111-1307, USA. */
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
-#undef TARGET_ENCODE_SECTION_INFO
-#define TARGET_ENCODE_SECTION_INFO rs6000_xcoff_encode_section_info
-
/* This is how to output a reference to a user-level label named NAME.
`assemble_name' uses this. */
diff --git a/gcc/config/rs6000/mpc.md b/gcc/config/rs6000/mpc.md
index 07426f5dd7c..6e4903c2a34 100644
--- a/gcc/config/rs6000/mpc.md
+++ b/gcc/config/rs6000/mpc.md
@@ -47,7 +47,7 @@
"iu_mpc")
(define_insn_reservation "mpccore-imul" 2
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "mpccore"))
"mciu_mpc")
diff --git a/gcc/config/rs6000/power4.md b/gcc/config/rs6000/power4.md
index bf0a92bfe12..8ac0c15d44f 100644
--- a/gcc/config/rs6000/power4.md
+++ b/gcc/config/rs6000/power4.md
@@ -35,33 +35,41 @@
(define_cpu_unit "du1_power4,du2_power4,du3_power4,du4_power4,du5_power4"
"power4disp")
-(define_reservation "q1_power4" "du1_power4|du4_power4")
-(define_reservation "q2_power4" "du2_power4|du3_power4")
-
-(define_reservation "lsq_power4" "((du1_power4|du4_power4),lsu1_power4)\
- |((du2_power4|du3_power4),lsu2_power4)")
+(define_reservation "lsq_power4"
+ "(du1_power4,lsu1_power4)\
+ |(du2_power4,lsu2_power4)\
+ |(du3_power4,nothing,lsu2_power4)\
+ |(du4_power4,nothing,lsu1_power4)")
(define_reservation "lsuq_power4"
"((du1_power4+du2_power4),lsu1_power4+iu2_power4)\
|((du2_power4+du3_power4),lsu2_power4+iu2_power4)\
|((du3_power4+du4_power4),lsu2_power4+iu1_power4)")
-;;; |((du2_power4+du3_power4),lsu2_power4,iu2_power4)
-
-(define_reservation "lsuxq_power4"
- "(du1_power4+du2_power4+du3_power4+du4_power4),\
- iu1_power4,(lsu2_power4+iu2_power4)")
+; |((du2_power4+du3_power4),nothing,lsu2_power4,iu2_power4)
-(define_reservation "iq_power4" "((du1_power4|du4_power4),iu1_power4)\
- |((du2_power4|du3_power4),iu2_power4)")
+(define_reservation "iq_power4"
+ "(du1_power4,iu1_power4)\
+ |(du2_power4,iu2_power4)\
+ |(du3_power4,nothing,iu2_power4)\
+ |(du4_power4,nothing,iu1_power4)")
-(define_reservation "fpq_power4" "((du1_power4|du4_power4),fpu1_power4)\
- |((du2_power4|du3_power4),fpu2_power4)")
+(define_reservation "fpq_power4"
+ "(du1_power4,fpu1_power4)\
+ |(du2_power4,fpu2_power4)\
+ |(du3_power4,nothing,fpu2_power4)\
+ |(du4_power4,nothing,fpu1_power4)")
(define_reservation "vq_power4"
- "(du1_power4|du2_power4|du3_power4|du4_power4),vec_power4")
+ "(du1_power4,vec_power4)\
+ |(du2_power4,vec_power4)\
+ |(du3_power4,nothing,vec_power4)\
+ |(du4_power4,nothing,vec_power4)")
+
(define_reservation "vpq_power4"
- "(du1_power4|du2_power4|du3_power4|du4_power4),\
- vecperm_power4")
+ "(du1_power4,vecperm_power4)\
+ |(du2_power4,vecperm_power4)\
+ |(du3_power4,nothing,vecperm_power4)\
+ |(du4_power4,nothing,vecperm_power4)")
; Dispatch slots are allocated in order conforming to program order.
@@ -72,7 +80,7 @@
; Load/store
-(define_insn_reservation "power4-load" 3
+(define_insn_reservation "power4-load" 4 ; 3
(and (eq_attr "type" "load")
(eq_attr "cpu" "power4"))
"lsq_power4")
@@ -80,9 +88,9 @@
(define_insn_reservation "power4-load-ext" 5
(and (eq_attr "type" "load_ext")
(eq_attr "cpu" "power4"))
- "((du1_power4+du2_power4),lsu1_power4,nothing,nothing,iu2_power4)\
- |((du2_power4+du3_power4),lsu2_power4,nothing,nothing,iu2_power4)\
- |((du3_power4+du4_power4),lsu2_power4,nothing,nothing,iu1_power4)")
+ "(du1_power4+du2_power4,lsu1_power4,nothing,nothing,iu2_power4)\
+ |(du2_power4+du3_power4,lsu2_power4,nothing,nothing,iu2_power4)\
+ |(du3_power4+du4_power4,lsu2_power4,nothing,nothing,iu1_power4)")
(define_insn_reservation "power4-load-ext-update" 5
(and (eq_attr "type" "load_ext_u")
@@ -94,34 +102,30 @@
(and (eq_attr "type" "load_ext_ux")
(eq_attr "cpu" "power4"))
"(du1_power4+du2_power4+du3_power4+du4_power4),\
- iu1_power4,(lsu2_power4+iu1_power4),nothing,nothing,iu2_power4")
+ iu1_power4,lsu2_power4+iu1_power4,nothing,nothing,iu2_power4")
(define_insn_reservation "power4-load-update-indexed" 3
(and (eq_attr "type" "load_ux")
(eq_attr "cpu" "power4"))
- "lsuxq_power4")
+ "du1_power4+du2_power4+du3_power4+du4_power4,\
+ iu1_power4,lsu2_power4+iu2_power4")
-(define_insn_reservation "power4-load-update" 3
+(define_insn_reservation "power4-load-update" 4 ; 3
(and (eq_attr "type" "load_u")
(eq_attr "cpu" "power4"))
"lsuq_power4")
-(define_insn_reservation "power4-fpload" 5
+(define_insn_reservation "power4-fpload" 6 ; 5
(and (eq_attr "type" "fpload")
(eq_attr "cpu" "power4"))
"lsq_power4")
-(define_insn_reservation "power4-fpload-update" 5
- (and (eq_attr "type" "fpload_u")
+(define_insn_reservation "power4-fpload-update" 6 ; 5
+ (and (eq_attr "type" "fpload_u,fpload_ux")
(eq_attr "cpu" "power4"))
"lsuq_power4")
-(define_insn_reservation "power4-fpload-update-indexed" 5
- (and (eq_attr "type" "fpload_ux")
- (eq_attr "cpu" "power4"))
- "lsuxq_power4")
-
-(define_insn_reservation "power4-vecload" 5
+(define_insn_reservation "power4-vecload" 6 ; 5
(and (eq_attr "type" "vecload")
(eq_attr "cpu" "power4"))
"lsq_power4")
@@ -129,44 +133,48 @@
(define_insn_reservation "power4-store" 1
(and (eq_attr "type" "store")
(eq_attr "cpu" "power4"))
- "((du1_power4|du4_power4),lsu1_power4,iu2_power4)\
- |((du2_power4|du3_power4),lsu2_power4,iu1_power4)")
+ "(du1_power4,lsu1_power4,iu1_power4)\
+ |(du2_power4,lsu2_power4,iu2_power4)\
+ |(du3_power4,lsu2_power4,nothing,iu2_power4)\
+ |(du4_power4,lsu1_power4,nothing,iu1_power4)")
(define_insn_reservation "power4-store-update" 1
(and (eq_attr "type" "store_u")
(eq_attr "cpu" "power4"))
- "lsuq_power4")
+ "(du1_power4+du2_power4,lsu1_power4+iu2_power4,iu1_power4)\
+ |(du2_power4+du3_power4,lsu2_power4+iu2_power4,iu2_power4)\
+ |(du3_power4+du4_power4,lsu2_power4+iu1_power4,iu2_power4)\
+ |(du3_power4+du4_power4,lsu2_power4,iu1_power4,iu2_power4)")
(define_insn_reservation "power4-store-update-indexed" 1
(and (eq_attr "type" "store_ux")
(eq_attr "cpu" "power4"))
- "lsuxq_power4")
+ "du1_power4+du2_power4+du3_power4+du4_power4,\
+ iu1_power4,lsu2_power4+iu2_power4,iu2_power4")
(define_insn_reservation "power4-fpstore" 1
(and (eq_attr "type" "fpstore")
(eq_attr "cpu" "power4"))
- "((du1_power4|du4_power4),lsu1_power4,fpu1_power4)\
- |((du2_power4|du3_power4),lsu2_power4,fpu2_power4)")
+ "(du1_power4,lsu1_power4,fpu1_power4)\
+ |(du2_power4,lsu2_power4,fpu2_power4)\
+ |(du3_power4,lsu2_power4,nothing,fpu2_power4)\
+ |(du4_power4,lsu1_power4,nothing,fpu1_power4)")
(define_insn_reservation "power4-fpstore-update" 1
- (and (eq_attr "type" "fpstore_u")
- (eq_attr "cpu" "power4"))
- "((du1_power4+du2_power4),(fpu1_power4+iu2_power4),lsu1_power4)\
- |((du2_power4+du3_power4),(fpu2_power4+iu2_power4),lsu2_power4)\
- |((du3_power4+du4_power4),(fpu2_power4+iu1_power4),lsu2_power4)")
-;;;((du2_power4+du3_power4),fpu2_power4,(iu2_power4+lsu2_power4))
-
-(define_insn_reservation "power4-fpstore-update-indexed" 1
- (and (eq_attr "type" "fpstore_ux")
+ (and (eq_attr "type" "fpstore_u,fpstore_ux")
(eq_attr "cpu" "power4"))
- "(du1_power4+du2_power4+du3_power4+du4_power4),
- iu1_power4,fpu2_power4,(iu2_power4+lsu2_power4)")
+ "(du1_power4+du2_power4,lsu1_power4+iu2_power4,fpu1_power4)\
+ |(du2_power4+du3_power4,lsu2_power4+iu2_power4,fpu2_power4)\
+ |(du3_power4+du4_power4,lsu2_power4+iu1_power4,fpu2_power4)")
+; |(du3_power4+du4_power4,nothing,lsu2_power4+iu1_power4,fpu2_power4)")
(define_insn_reservation "power4-vecstore" 1
(and (eq_attr "type" "vecstore")
(eq_attr "cpu" "power4"))
- "((du1_power4|du4_power4),lsu1_power4,vec_power4)\
- |((du2_power4|du3_power4),lsu2_power4,vec_power4)")
+ "(du1_power4,lsu1_power4,vec_power4)\
+ |(du2_power4,lsu2_power4,vec_power4)\
+ |(du3_power4,lsu2_power4,nothing,vec_power4)\
+ |(du4_power4,lsu1_power4,nothing,vec_power4)")
; Integer latency is 2 cycles
@@ -180,29 +188,65 @@
(eq_attr "cpu" "power4"))
"iq_power4")
-(define_insn_reservation "power4-compare" 4
+(define_insn_reservation "power4-compare" 2
(and (eq_attr "type" "compare,delayed_compare")
(eq_attr "cpu" "power4"))
- "((du1_power4+du2_power4),iu1_power4,iu2_power4)\
- |((du2_power4+du3_power4),iu2_power4,iu2_power4)\
- |((du3_power4+du4_power4),iu2_power4,iu1_power4)")
+ "(du1_power4+du2_power4,iu1_power4,iu2_power4)\
+ |(du2_power4+du3_power4,iu2_power4,iu2_power4)\
+ |(du3_power4+du4_power4,nothing,iu2_power4,iu1_power4)")
-(define_bypass 2 "power4-compare" "power4-integer")
+(define_bypass 4 "power4-compare" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr")
-(define_insn_reservation "power4-imul" 7
- (and (eq_attr "type" "imul,lmul")
+(define_insn_reservation "power4-lmul-cmp" 7
+ (and (eq_attr "type" "lmul_compare")
(eq_attr "cpu" "power4"))
- "(q1_power4,iu1_power4*6)|(q2_power4,iu2_power4*6)")
+ "(du1_power4+du2_power4,iu1_power4*6,iu2_power4)\
+ |(du2_power4+du3_power4,iu2_power4*6,iu2_power4)\
+ |(du3_power4+du4_power4,iu2_power4*6,iu1_power4)")
+; |(du3_power4+du4_power4,nothing,iu2_power4*6,iu1_power4)")
-(define_insn_reservation "power4-imul2" 5
- (and (eq_attr "type" "imul2")
+(define_bypass 10 "power4-lmul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr")
+
+(define_insn_reservation "power4-imul-cmp" 5
+ (and (eq_attr "type" "imul_compare")
+ (eq_attr "cpu" "power4"))
+ "(du1_power4+du2_power4,iu1_power4*4,iu2_power4)\
+ |(du2_power4+du3_power4,iu2_power4*4,iu2_power4)\
+ |(du3_power4+du4_power4,iu2_power4*4,iu1_power4)")
+; |(du3_power4+du4_power4,nothing,iu2_power4*4,iu1_power4)")
+
+(define_bypass 8 "power4-imul-cmp" "power4-branch,power4-crlogical,power4-delayedcr,power4-mfcr")
+
+(define_insn_reservation "power4-lmul" 7
+ (and (eq_attr "type" "lmul")
(eq_attr "cpu" "power4"))
- "(q1_power4,iu1_power4*4)|(q2_power4,iu2_power4*4)")
+ "(du1_power4,iu1_power4*6)\
+ |(du2_power4,iu2_power4*6)\
+ |(du3_power4,iu2_power4*6)\
+ |(du4_power4,iu2_power4*6)")
+; |(du3_power4,nothing,iu2_power4*6)\
+; |(du4_power4,nothing,iu2_power4*6)")
+
+(define_insn_reservation "power4-imul" 5
+ (and (eq_attr "type" "imul")
+ (eq_attr "cpu" "power4"))
+ "(du1_power4,iu1_power4*4)\
+ |(du2_power4,iu2_power4*4)\
+ |(du3_power4,iu2_power4*4)\
+ |(du4_power4,iu1_power4*4)")
+; |(du3_power4,nothing,iu2_power4*4)\
+; |(du4_power4,nothing,iu1_power4*4)")
(define_insn_reservation "power4-imul3" 4
- (and (eq_attr "type" "imul3")
+ (and (eq_attr "type" "imul2,imul3")
(eq_attr "cpu" "power4"))
- "(q1_power4,iu1_power4*3)|(q2_power4,iu2_power4*3)")
+ "(du1_power4,iu1_power4*3)\
+ |(du2_power4,iu2_power4*3)\
+ |(du3_power4,iu2_power4*3)\
+ |(du4_power4,iu1_power4*3)")
+; |(du3_power4,nothing,iu2_power4*3)\
+; |(du4_power4,nothing,iu1_power4*3)")
+
; SPR move only executes in first IU.
; Integer division only executes in second IU.
@@ -228,7 +272,11 @@
(define_insn_reservation "power4-branch" 2
(and (eq_attr "type" "jmpreg,branch")
(eq_attr "cpu" "power4"))
- "du5_power4,bpu_power4")
+ "(du5_power4\
+ |du4_power4+du5_power4\
+ |du3_power4+du4_power4+du5_power4\
+ |du2_power4+du3_power4+du4_power4+du5_power4\
+ |du1_power4+du2_power4+du3_power4+du4_power4+du5_power4),bpu_power4")
; Condition Register logical ops are split if non-destructive (RT != RB)
@@ -270,12 +318,22 @@
(define_insn_reservation "power4-sdiv" 33
(and (eq_attr "type" "sdiv,ddiv")
(eq_attr "cpu" "power4"))
- "(q1_power4,fpu1_power4*28)|(q2_power4,fpu2_power4*28)")
+ "(du1_power4,fpu1_power4*28)\
+ |(du2_power4,fpu2_power4*28)\
+ |(du3_power4,fpu2_power4*28)\
+ |(du4_power4,fpu1_power4*28)")
+; |(du3_power4,nothing,fpu2_power4*28)\
+; |(du4_power4,nothing,fpu1_power4*28)")
(define_insn_reservation "power4-sqrt" 40
(and (eq_attr "type" "ssqrt,dsqrt")
(eq_attr "cpu" "power4"))
- "(q1_power4,fpu1_power4*35)|(q2_power4,fpu2_power4*35)")
+ "(du1_power4,fpu1_power4*35)\
+ |(du2_power4,fpu2_power4*35)\
+ |(du3_power4,fpu2_power4*35)\
+ |(du4_power4,fpu2_power4*35)")
+; |(du3_power4,nothing,fpu2_power4*35)\
+; |(du4_power4,nothing,fpu2_power4*35)")
; VMX
diff --git a/gcc/config/rs6000/rios1.md b/gcc/config/rs6000/rios1.md
index d55d436abf1..f958bddab7c 100644
--- a/gcc/config/rs6000/rios1.md
+++ b/gcc/config/rs6000/rios1.md
@@ -56,7 +56,7 @@
"iu_rios1")
(define_insn_reservation "rios1-imul" 5
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "rios1"))
"iu_rios1*5")
@@ -71,7 +71,7 @@
"iu_rios1*3")
(define_insn_reservation "ppc601-imul" 5
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "ppc601"))
"iu_rios1*5")
diff --git a/gcc/config/rs6000/rios2.md b/gcc/config/rs6000/rios2.md
index 74f55816c13..7669adac9e7 100644
--- a/gcc/config/rs6000/rios2.md
+++ b/gcc/config/rs6000/rios2.md
@@ -44,7 +44,7 @@
"iu1_rios2|iu2_rios2")
(define_insn_reservation "rios2-imul" 2
- (and (eq_attr "type" "imul,imul2,imul3")
+ (and (eq_attr "type" "imul,imul2,imul3,imul_compare")
(eq_attr "cpu" "rios2"))
"iu1_rios2*2")
diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h
index 8dcfd8766f5..3bd3b737611 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -54,6 +54,8 @@ extern int got_operand PARAMS ((rtx, enum machine_mode));
extern int got_no_const_operand PARAMS ((rtx, enum machine_mode));
extern int num_insns_constant PARAMS ((rtx, enum machine_mode));
extern int easy_fp_constant PARAMS ((rtx, enum machine_mode));
+extern int easy_vector_constant PARAMS ((rtx, enum machine_mode));
+extern const char *output_vec_const_move PARAMS ((rtx *));
extern int zero_fp_constant PARAMS ((rtx, enum machine_mode));
extern int zero_constant PARAMS ((rtx, enum machine_mode));
extern int volatile_mem_operand PARAMS ((rtx, enum machine_mode));
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 9189614484a..d62bbd336fa 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -55,6 +55,13 @@ Boston, MA 02111-1307, USA. */
#define TARGET_NO_PROTOTYPE 0
#endif
+#define EASY_VECTOR_15(n, x, y) ((n) >= -16 && (n) <= 15 \
+ && easy_vector_same (x, y))
+
+#define EASY_VECTOR_15_ADD_SELF(n, x, y) ((n) >= 0x10 && (n) <= 0x1e \
+ && !((n) & 1) \
+ && easy_vector_same (x, y))
+
#define min(A,B) ((A) < (B) ? (A) : (B))
#define max(A,B) ((A) > (B) ? (A) : (B))
@@ -97,9 +104,6 @@ const char *rs6000_isel_string;
/* Set to nonzero once AIX common-mode calls have been defined. */
static GTY(()) int common_mode_defined;
-/* Private copy of original value of flag_pic for ABI_AIX. */
-static int rs6000_flag_pic;
-
/* Save information from a "cmpxx" operation until the branch or scc is
emitted. */
rtx rs6000_compare_op0, rs6000_compare_op1;
@@ -175,6 +179,8 @@ static rtx rs6000_generate_compare PARAMS ((enum rtx_code));
static void rs6000_maybe_dead PARAMS ((rtx));
static void rs6000_emit_stack_tie PARAMS ((void));
static void rs6000_frame_related PARAMS ((rtx, rtx, HOST_WIDE_INT, rtx, rtx));
+static rtx spe_synthesize_frame_save PARAMS ((rtx));
+static bool spe_func_has_64bit_regs_p PARAMS ((void));
static void emit_frame_save PARAMS ((rtx, rtx, enum machine_mode,
unsigned int, int, int));
static rtx gen_frame_mem_offset PARAMS ((enum machine_mode, rtx, int));
@@ -223,17 +229,19 @@ static void rs6000_xcoff_select_rtx_section PARAMS ((enum machine_mode, rtx,
unsigned HOST_WIDE_INT));
static const char * rs6000_xcoff_strip_name_encoding PARAMS ((const char *));
static unsigned int rs6000_xcoff_section_type_flags PARAMS ((tree, const char *, int));
-#endif
static void rs6000_xcoff_encode_section_info PARAMS ((tree, int))
ATTRIBUTE_UNUSED;
+#endif
+#if TARGET_MACHO
static bool rs6000_binds_local_p PARAMS ((tree));
+#endif
static int rs6000_use_dfa_pipeline_interface PARAMS ((void));
-static int rs6000_multipass_dfa_lookahead PARAMS ((void));
static int rs6000_variable_issue PARAMS ((FILE *, int, rtx, int));
static bool rs6000_rtx_costs PARAMS ((rtx, int, int, int *));
static int rs6000_adjust_cost PARAMS ((rtx, rtx, rtx, int));
static int rs6000_adjust_priority PARAMS ((rtx, int));
static int rs6000_issue_rate PARAMS ((void));
+static int rs6000_use_sched_lookahead PARAMS ((void));
static void rs6000_init_builtins PARAMS ((void));
static rtx rs6000_expand_unop_builtin PARAMS ((enum insn_code, tree, rtx));
@@ -266,9 +274,10 @@ static int first_altivec_reg_to_save PARAMS ((void));
static unsigned int compute_vrsave_mask PARAMS ((void));
static void is_altivec_return_reg PARAMS ((rtx, void *));
static rtx generate_set_vrsave PARAMS ((rtx, rs6000_stack_t *, int));
-static void altivec_frame_fixup PARAMS ((rtx, rtx, HOST_WIDE_INT));
-static int easy_vector_constant PARAMS ((rtx));
+int easy_vector_constant PARAMS ((rtx, enum machine_mode));
+static int easy_vector_same PARAMS ((rtx, enum machine_mode));
static bool is_ev64_opaque_type PARAMS ((tree));
+static rtx rs6000_dwarf_register_span PARAMS ((rtx));
/* Hash table stuff for keeping track of TOC entries. */
@@ -335,6 +344,9 @@ static const char alt_reg_names[][8] =
#ifndef MASK_STRICT_ALIGN
#define MASK_STRICT_ALIGN 0
#endif
+#ifndef TARGET_PROFILE_KERNEL
+#define TARGET_PROFILE_KERNEL 0
+#endif
/* The VRSAVE bitmask puts bit %v0 as the most significant bit. */
#define ALTIVEC_REG_BIT(REGNO) (0x80000000 >> ((REGNO) - FIRST_ALTIVEC_REGNO))
@@ -386,8 +398,6 @@ static const char alt_reg_names[][8] =
#undef TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE
#define TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE rs6000_use_dfa_pipeline_interface
-#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
-#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD rs6000_multipass_dfa_lookahead
#undef TARGET_SCHED_VARIABLE_ISSUE
#define TARGET_SCHED_VARIABLE_ISSUE rs6000_variable_issue
@@ -398,14 +408,19 @@ static const char alt_reg_names[][8] =
#undef TARGET_SCHED_ADJUST_PRIORITY
#define TARGET_SCHED_ADJUST_PRIORITY rs6000_adjust_priority
+#undef TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD
+#define TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD rs6000_use_sched_lookahead
+
#undef TARGET_INIT_BUILTINS
#define TARGET_INIT_BUILTINS rs6000_init_builtins
#undef TARGET_EXPAND_BUILTIN
#define TARGET_EXPAND_BUILTIN rs6000_expand_builtin
+#if TARGET_MACHO
#undef TARGET_BINDS_LOCAL_P
#define TARGET_BINDS_LOCAL_P rs6000_binds_local_p
+#endif
#undef TARGET_ASM_OUTPUT_MI_THUNK
#define TARGET_ASM_OUTPUT_MI_THUNK rs6000_output_mi_thunk
@@ -424,6 +439,9 @@ static const char alt_reg_names[][8] =
#undef TARGET_VECTOR_OPAQUE_P
#define TARGET_VECTOR_OPAQUE_P is_ev64_opaque_type
+#undef TARGET_DWARF_REGISTER_SPAN
+#define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span
+
struct gcc_target targetm = TARGET_INITIALIZER;
/* Override command line options. Mostly we process the processor
@@ -461,10 +479,10 @@ rs6000_override_options (default_cpu)
POWERPC_MASKS | MASK_NEW_MNEMONICS},
{"power3", PROCESSOR_PPC630,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
- POWER_MASKS | MASK_PPC_GPOPT},
+ POWER_MASKS},
{"power4", PROCESSOR_POWER4,
- MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
- POWER_MASKS | MASK_PPC_GPOPT},
+ MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
+ POWER_MASKS},
{"powerpc", PROCESSOR_POWERPC,
MASK_POWERPC | MASK_NEW_MNEMONICS,
POWER_MASKS | POWERPC_OPT_MASKS | MASK_POWERPC64},
@@ -527,10 +545,10 @@ rs6000_override_options (default_cpu)
POWER_MASKS | MASK_PPC_GPOPT | MASK_POWERPC64},
{"620", PROCESSOR_PPC620,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
- POWER_MASKS | MASK_PPC_GPOPT},
+ POWER_MASKS},
{"630", PROCESSOR_PPC630,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
- POWER_MASKS | MASK_PPC_GPOPT},
+ POWER_MASKS},
{"740", PROCESSOR_PPC750,
MASK_POWERPC | MASK_PPC_GFXOPT | MASK_NEW_MNEMONICS,
POWER_MASKS | MASK_PPC_GPOPT | MASK_POWERPC64},
@@ -635,16 +653,6 @@ rs6000_override_options (default_cpu)
}
}
- if (flag_pic != 0 && DEFAULT_ABI == ABI_AIX)
- {
- rs6000_flag_pic = flag_pic;
- flag_pic = 0;
- }
-
- /* For Darwin, always silently make -fpic and -fPIC identical. */
- if (flag_pic == 1 && DEFAULT_ABI == ABI_DARWIN)
- flag_pic = 2;
-
/* Set debug flags */
if (rs6000_debug_name)
{
@@ -700,6 +708,11 @@ rs6000_override_options (default_cpu)
SUBSUBTARGET_OVERRIDE_OPTIONS;
#endif
+ /* The e500 does not have string instructions, and we set
+ MASK_STRING above when optimizing for size. */
+ if (rs6000_cpu == PROCESSOR_PPC8540 && (target_flags & MASK_STRING) != 0)
+ target_flags = target_flags & ~MASK_STRING;
+
/* Handle -m(no-)longcall option. This is a bit of a cheap hack,
using TARGET_OPTIONS to handle a toggle switch, but we're out of
bits in target_flags so TARGET_SWITCHES cannot be used.
@@ -1415,48 +1428,149 @@ easy_fp_constant (op, mode)
abort ();
}
-/* Return 1 if the operand is a CONST_INT and can be put into a
- register with one instruction. */
+/* Return non zero if all elements of a vector have the same value. */
static int
-easy_vector_constant (op)
+easy_vector_same (op, mode)
rtx op;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
{
- rtx elt;
- int units, i;
+ int units, i, cst;
+
+ units = CONST_VECTOR_NUNITS (op);
+
+ cst = INTVAL (CONST_VECTOR_ELT (op, 0));
+ for (i = 1; i < units; ++i)
+ if (INTVAL (CONST_VECTOR_ELT (op, i)) != cst)
+ break;
+ if (i == units)
+ return 1;
+ return 0;
+}
- if (GET_CODE (op) != CONST_VECTOR)
+/* Return 1 if the operand is a CONST_INT and can be put into a
+ register without using memory. */
+
+int
+easy_vector_constant (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ int cst, cst2;
+
+ if (GET_CODE (op) != CONST_VECTOR
+ || (!TARGET_ALTIVEC
+ && !TARGET_SPE))
return 0;
- units = CONST_VECTOR_NUNITS (op);
+ if (zero_constant (op, mode)
+ && ((TARGET_ALTIVEC && ALTIVEC_VECTOR_MODE (mode))
+ || (TARGET_SPE && SPE_VECTOR_MODE (mode))))
+ return 1;
- /* We can generate 0 easily. Look for that. */
- for (i = 0; i < units; ++i)
- {
- elt = CONST_VECTOR_ELT (op, i);
+ if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT)
+ return 0;
+
+ cst = INTVAL (CONST_VECTOR_ELT (op, 0));
+ cst2 = INTVAL (CONST_VECTOR_ELT (op, 1));
+
+ /* Limit SPE vectors to 15 bits signed. These we can generate with:
+ li r0, CONSTANT1
+ evmergelo r0, r0, r0
+ li r0, CONSTANT2
+
+ I don't know how efficient it would be to allow bigger constants,
+ considering we'll have an extra 'ori' for every 'li'. I doubt 5
+ instructions is better than a 64-bit memory load, but I don't
+ have the e500 timing specs. */
+ if (TARGET_SPE && mode == V2SImode
+ && cst >= -0x7fff && cst <= 0x7fff
+ && cst2 >= -0x7fff && cst <= 0x7fff)
+ return 1;
+
+ if (TARGET_ALTIVEC && EASY_VECTOR_15 (cst, op, mode))
+ return 1;
+
+ if (TARGET_ALTIVEC && EASY_VECTOR_15_ADD_SELF (cst, op, mode))
+ return 1;
+
+ return 0;
+}
+
+/* Same as easy_vector_constant but only for EASY_VECTOR_15_ADD_SELF. */
+
+int
+easy_vector_constant_add_self (op, mode)
+ rtx op;
+ enum machine_mode mode;
+{
+ int cst;
+
+ if (!easy_vector_constant (op, mode))
+ return 0;
+
+ cst = INTVAL (CONST_VECTOR_ELT (op, 0));
+
+ return TARGET_ALTIVEC && EASY_VECTOR_15_ADD_SELF (cst, op, mode);
+}
+
+const char *
+output_vec_const_move (operands)
+ rtx *operands;
+{
+ int cst, cst2;
+ enum machine_mode mode;
+ rtx dest, vec;
+
+ dest = operands[0];
+ vec = operands[1];
- /* We could probably simplify this by just checking for equality
- with CONST0_RTX for the current mode, but let's be safe
- instead. */
+ cst = INTVAL (CONST_VECTOR_ELT (vec, 0));
+ cst2 = INTVAL (CONST_VECTOR_ELT (vec, 1));
+ mode = GET_MODE (dest);
- switch (GET_CODE (elt))
+ if (TARGET_ALTIVEC)
+ {
+ if (zero_constant (vec, mode))
+ return "vxor %0,%0,%0";
+ else if (EASY_VECTOR_15 (cst, vec, mode))
{
- case CONST_INT:
- if (INTVAL (elt) != 0)
- return 0;
- break;
- case CONST_DOUBLE:
- if (CONST_DOUBLE_LOW (elt) != 0 || CONST_DOUBLE_HIGH (elt) != 0)
- return 0;
- break;
- default:
- return 0;
+ operands[1] = GEN_INT (cst);
+ switch (mode)
+ {
+ case V4SImode:
+ return "vspltisw %0,%1";
+ case V8HImode:
+ return "vspltish %0,%1";
+ case V16QImode:
+ return "vspltisb %0,%1";
+ default:
+ abort ();
+ }
}
+ else if (EASY_VECTOR_15_ADD_SELF (cst, vec, mode))
+ return "#";
+ else
+ abort ();
}
- /* We could probably generate a few other constants trivially, but
- gcc doesn't generate them yet. FIXME later. */
- return 1;
+ if (TARGET_SPE)
+ {
+ /* Vector constant 0 is handled as a splitter of V2SI, and in the
+ pattern of V1DI, V4HI, and V2SF.
+
+ FIXME: We should probabl return # and add post reload
+ splitters for these, but this way is so easy ;-).
+ */
+ operands[1] = GEN_INT (cst);
+ operands[2] = GEN_INT (cst2);
+ if (cst == cst2)
+ return "li %0,%1\n\tevmergelo %0,%0,%0";
+ else
+ return "li %0,%1\n\tevmergelo %0,%0,%0\n\tli %0,%2";
+ }
+
+ abort ();
}
/* Return 1 if the operand is the constant 0. This works for scalars
@@ -1989,6 +2103,11 @@ input_operand (op, mode)
|| GET_CODE (op) == CONST_DOUBLE))
return 1;
+ /* Allow easy vector constants. */
+ if (GET_CODE (op) == CONST_VECTOR
+ && easy_vector_constant (op, mode))
+ return 1;
+
/* For floating-point or multi-word mode, the only remaining valid type
is a register. */
if (GET_MODE_CLASS (mode) == MODE_FLOAT
@@ -2212,7 +2331,10 @@ rs6000_legitimize_address (x, oldx, mode)
return force_reg (Pmode, x);
}
- else if (TARGET_ELF && TARGET_32BIT && TARGET_NO_TOC && ! flag_pic
+ else if (TARGET_ELF
+ && TARGET_32BIT
+ && TARGET_NO_TOC
+ && ! flag_pic
&& GET_CODE (x) != CONST_INT
&& GET_CODE (x) != CONST_DOUBLE
&& CONSTANT_P (x)
@@ -2226,6 +2348,9 @@ rs6000_legitimize_address (x, oldx, mode)
}
else if (TARGET_MACHO && TARGET_32BIT && TARGET_NO_TOC
&& ! flag_pic
+#if TARGET_MACHO
+ && ! MACHO_DYNAMIC_NO_PIC_P
+#endif
&& GET_CODE (x) != CONST_INT
&& GET_CODE (x) != CONST_DOUBLE
&& CONSTANT_P (x)
@@ -2365,6 +2490,20 @@ rs6000_legitimize_reload_address (x, mode, opnum, type, ind_levels, win)
*win = 1;
return x;
}
+ if (GET_CODE (x) == SYMBOL_REF
+ && DEFAULT_ABI == ABI_DARWIN
+ && !ALTIVEC_VECTOR_MODE (mode)
+ && MACHO_DYNAMIC_NO_PIC_P)
+ {
+ /* Darwin load of floating point constant. */
+ x = gen_rtx (LO_SUM, GET_MODE (x),
+ gen_rtx (HIGH, Pmode, x), x);
+ push_reload (XEXP (x, 0), NULL_RTX, &XEXP (x, 0), NULL,
+ BASE_REG_CLASS, Pmode, VOIDmode, 0, 0,
+ opnum, (enum reload_type)type);
+ *win = 1;
+ return x;
+ }
#endif
if (TARGET_TOC
&& CONSTANT_POOL_EXPR_P (x)
@@ -2723,7 +2862,7 @@ rs6000_emit_move (dest, source, mode)
case V2SImode:
case V1DImode:
if (CONSTANT_P (operands[1])
- && !easy_vector_constant (operands[1]))
+ && !easy_vector_constant (operands[1], mode))
operands[1] = force_const_mem (mode, operands[1]);
break;
@@ -2750,7 +2889,8 @@ rs6000_emit_move (dest, source, mode)
}
if ((TARGET_ELF || DEFAULT_ABI == ABI_DARWIN)
- && TARGET_NO_TOC && ! flag_pic
+ && TARGET_NO_TOC
+ && ! flag_pic
&& mode == Pmode
&& CONSTANT_P (operands[1])
&& GET_CODE (operands[1]) != HIGH
@@ -2778,6 +2918,18 @@ rs6000_emit_move (dest, source, mode)
if (DEFAULT_ABI == ABI_DARWIN)
{
+#if TARGET_MACHO
+ if (MACHO_DYNAMIC_NO_PIC_P)
+ {
+ /* Take care of any required data indirection. */
+ operands[1] = rs6000_machopic_legitimize_pic_address (
+ operands[1], mode, operands[0]);
+ if (operands[0] != operands[1])
+ emit_insn (gen_rtx_SET (VOIDmode,
+ operands[0], operands[1]));
+ return;
+ }
+#endif
emit_insn (gen_macho_high (target, operands[1]));
emit_insn (gen_macho_low (operands[0], target, operands[1]));
return;
@@ -2822,7 +2974,7 @@ rs6000_emit_move (dest, source, mode)
#if TARGET_MACHO
/* Darwin uses a special PIC legitimizer. */
- if (DEFAULT_ABI == ABI_DARWIN && flag_pic)
+ if (DEFAULT_ABI == ABI_DARWIN && MACHOPIC_INDIRECT)
{
operands[1] =
rs6000_machopic_legitimize_pic_address (operands[1], mode,
@@ -7179,7 +7331,11 @@ addrs_ok_for_quad_peep (addr1, addr2)
offset1 = 0;
}
- /* Make sure the second address is a (mem (plus (reg) (const_int))). */
+/* Make sure the second address is a (mem (plus (reg) (const_int)))
+ or if it is (mem (reg)) then make sure that offset1 is -8 and the same
+ register as addr1. */
+ if (offset1 == -8 && GET_CODE (addr2) == REG && reg1 == REGNO (addr2))
+ return 1;
if (GET_CODE (addr2) != PLUS)
return 0;
@@ -7211,7 +7367,11 @@ secondary_reload_class (class, mode, in)
{
int regno;
- if (TARGET_ELF || (DEFAULT_ABI == ABI_DARWIN && flag_pic))
+ if (TARGET_ELF || (DEFAULT_ABI == ABI_DARWIN
+#if TARGET_MACHO
+ && MACHOPIC_INDIRECT
+#endif
+ ))
{
/* We cannot copy a symbolic operand directly into anything
other than BASE_REGS for TARGET_ELF. So indicate that a
@@ -8628,7 +8788,7 @@ output_cbranch (op, label, reversed, insn)
{
if (abs (prob) > REG_BR_PROB_BASE / 20
&& ((prob > 0) ^ need_longbranch))
- pred = "+";
+ pred = "+";
else
pred = "-";
}
@@ -8983,19 +9143,6 @@ compute_vrsave_mask ()
if (mask == 0)
return mask;
- /* Next, add all registers that are call-clobbered. We do this
- because post-reload register optimizers such as regrename_optimize
- may choose to use them. They never change the register class
- chosen by reload, so cannot create new uses of altivec registers
- if there were none before, so the early exit above is safe. */
- /* ??? Alternately, we could define HARD_REGNO_RENAME_OK to disallow
- altivec registers not saved in the mask, which might well make the
- adjustments below more effective in eliding the save/restore of
- VRSAVE in small functions. */
- for (i = FIRST_ALTIVEC_REGNO; i <= LAST_ALTIVEC_REGNO; ++i)
- if (call_used_regs[i])
- mask |= ALTIVEC_REG_BIT (i);
-
/* Next, remove the argument registers from the set. These must
be in the VRSAVE mask set by the caller, so we don't need to add
them in again. More importantly, the mask we compute here is
@@ -9130,23 +9277,32 @@ rs6000_stack_info ()
static rs6000_stack_t info, zero_info;
rs6000_stack_t *info_ptr = &info;
int reg_size = TARGET_POWERPC64 ? 8 : 4;
- enum rs6000_abi abi;
int ehrd_size;
int total_raw_size;
/* Zero all fields portably. */
info = zero_info;
+ if (TARGET_SPE)
+ {
+ /* Cache value so we don't rescan instruction chain over and over. */
+ if (cfun->machine->insn_chain_scanned_p == 0)
+ {
+ cfun->machine->insn_chain_scanned_p = 1;
+ info_ptr->spe_64bit_regs_used = (int) spe_func_has_64bit_regs_p ();
+ }
+ }
+
/* Select which calling sequence. */
- info_ptr->abi = abi = DEFAULT_ABI;
+ info_ptr->abi = DEFAULT_ABI;
/* Calculate which registers need to be saved & save area size. */
info_ptr->first_gp_reg_save = first_reg_to_save ();
/* Assume that we will have to save RS6000_PIC_OFFSET_TABLE_REGNUM,
even if it currently looks like we won't. */
if (((TARGET_TOC && TARGET_MINIMAL_TOC)
- || (flag_pic == 1 && abi == ABI_V4)
- || (flag_pic && abi == ABI_DARWIN))
+ || (flag_pic == 1 && DEFAULT_ABI == ABI_V4)
+ || (flag_pic && DEFAULT_ABI == ABI_DARWIN))
&& info_ptr->first_gp_reg_save > RS6000_PIC_OFFSET_TABLE_REGNUM)
info_ptr->gp_size = reg_size * (32 - RS6000_PIC_OFFSET_TABLE_REGNUM);
else
@@ -9158,12 +9314,13 @@ rs6000_stack_info ()
registers live (not the size they are used in), this proves
difficult because we'd have to traverse the instruction chain at
the right time, taking reload into account. This is a real pain,
- so we opt to save the GPRs in 64-bits always. Anyone overly
- concerned with frame size can fix this. ;-).
+ so we opt to save the GPRs in 64-bits always if but one register
+ gets used in 64-bits. Otherwise, all the registers in the frame
+ get saved in 32-bits.
- So... since we save all GPRs (except the SP) in 64-bits, the
+ So... since when we save all GPRs (except the SP) in 64-bits, the
traditional GP save area will be empty. */
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info_ptr->spe_64bit_regs_used != 0)
info_ptr->gp_size = 0;
info_ptr->first_fp_reg_save = first_fp_reg_to_save ();
@@ -9179,14 +9336,16 @@ rs6000_stack_info ()
/* Determine if we need to save the link register. */
if (rs6000_ra_ever_killed ()
- || (DEFAULT_ABI == ABI_AIX && current_function_profile)
+ || (DEFAULT_ABI == ABI_AIX
+ && current_function_profile
+ && !TARGET_PROFILE_KERNEL)
#ifdef TARGET_RELOCATABLE
|| (TARGET_RELOCATABLE && (get_pool_size () != 0))
#endif
|| (info_ptr->first_fp_reg_save != 64
&& !FP_SAVE_INLINE (info_ptr->first_fp_reg_save))
|| info_ptr->first_altivec_reg_save <= LAST_ALTIVEC_REGNO
- || (abi == ABI_V4 && current_function_calls_alloca)
+ || (DEFAULT_ABI == ABI_V4 && current_function_calls_alloca)
|| (DEFAULT_ABI == ABI_DARWIN
&& flag_pic
&& current_function_uses_pic_offset_table)
@@ -9202,7 +9361,7 @@ rs6000_stack_info ()
|| regs_ever_live[CR4_REGNO])
{
info_ptr->cr_save_p = 1;
- if (abi == ABI_V4)
+ if (DEFAULT_ABI == ABI_V4)
info_ptr->cr_size = reg_size;
}
@@ -9216,7 +9375,9 @@ rs6000_stack_info ()
continue;
/* SPE saves EH registers in 64-bits. */
- ehrd_size = i * (TARGET_SPE_ABI ? UNITS_PER_SPE_WORD : UNITS_PER_WORD);
+ ehrd_size = i * (TARGET_SPE_ABI
+ && info_ptr->spe_64bit_regs_used != 0
+ ? UNITS_PER_SPE_WORD : UNITS_PER_WORD);
}
else
ehrd_size = 0;
@@ -9229,7 +9390,7 @@ rs6000_stack_info ()
info_ptr->parm_size = RS6000_ALIGN (current_function_outgoing_args_size,
8);
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info_ptr->spe_64bit_regs_used != 0)
info_ptr->spe_gp_size = 8 * (32 - info_ptr->first_gp_reg_save);
else
info_ptr->spe_gp_size = 0;
@@ -9246,7 +9407,7 @@ rs6000_stack_info ()
}
/* Calculate the offsets. */
- switch (abi)
+ switch (DEFAULT_ABI)
{
case ABI_NONE:
default:
@@ -9289,7 +9450,7 @@ rs6000_stack_info ()
info_ptr->gp_save_offset = info_ptr->fp_save_offset - info_ptr->gp_size;
info_ptr->cr_save_offset = info_ptr->gp_save_offset - info_ptr->cr_size;
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info_ptr->spe_64bit_regs_used != 0)
{
/* Align stack so SPE GPR save area is aligned on a
double-word boundary. */
@@ -9375,14 +9536,18 @@ rs6000_stack_info ()
if (info_ptr->calls_p)
info_ptr->push_p = 1;
- else if (abi == ABI_V4)
+ else if (DEFAULT_ABI == ABI_V4)
info_ptr->push_p = total_raw_size > info_ptr->fixed_size;
+ else if (frame_pointer_needed)
+ info_ptr->push_p = 1;
+
+ else if (TARGET_XCOFF && write_symbols != NO_DEBUG)
+ info_ptr->push_p = 1;
+
else
- info_ptr->push_p = (frame_pointer_needed
- || (abi != ABI_DARWIN && write_symbols != NO_DEBUG)
- || ((total_raw_size - info_ptr->fixed_size)
- > (TARGET_32BIT ? 220 : 288)));
+ info_ptr->push_p
+ = total_raw_size - info_ptr->fixed_size > (TARGET_32BIT ? 220 : 288);
/* Zero offsets if we're not saving those registers. */
if (info_ptr->fp_size == 0)
@@ -9397,7 +9562,9 @@ rs6000_stack_info ()
if (! TARGET_ALTIVEC_ABI || info_ptr->vrsave_mask == 0)
info_ptr->vrsave_save_offset = 0;
- if (! TARGET_SPE_ABI || info_ptr->spe_gp_size == 0)
+ if (! TARGET_SPE_ABI
+ || info_ptr->spe_64bit_regs_used == 0
+ || info_ptr->spe_gp_size == 0)
info_ptr->spe_gp_save_offset = 0;
if (! info_ptr->lr_save_p)
@@ -9412,6 +9579,39 @@ rs6000_stack_info ()
return info_ptr;
}
+/* Return true if the current function uses any GPRs in 64-bit SIMD
+ mode. */
+
+static bool
+spe_func_has_64bit_regs_p ()
+{
+ rtx insns, insn;
+
+ /* Functions that save and restore all the call-saved registers will
+ need to save/restore the registers in 64-bits. */
+ if (current_function_calls_eh_return
+ || current_function_calls_setjmp
+ || current_function_has_nonlocal_goto)
+ return true;
+
+ insns = get_insns ();
+
+ for (insn = NEXT_INSN (insns); insn != NULL_RTX; insn = NEXT_INSN (insn))
+ {
+ if (INSN_P (insn))
+ {
+ rtx i;
+
+ i = PATTERN (insn);
+ if (GET_CODE (i) == SET
+ && SPE_VECTOR_MODE (GET_MODE (SET_SRC (i))))
+ return true;
+ }
+ }
+
+ return false;
+}
+
void
debug_stack_info (info)
rs6000_stack_t *info;
@@ -9566,7 +9766,7 @@ rs6000_return_addr (count, frame)
/* Currently we don't optimize very well between prolog and body
code and for PIC code the code can be actually quite bad, so
don't try to be too clever here. */
- if (count != 0 || flag_pic != 0)
+ if (count != 0 || (DEFAULT_ABI != ABI_AIX && flag_pic))
{
cfun->machine->ra_needs_full_frame = 1;
@@ -9691,7 +9891,7 @@ void
rs6000_emit_load_toc_table (fromprolog)
int fromprolog;
{
- rtx dest;
+ rtx dest, insn;
dest = gen_rtx_REG (Pmode, RS6000_PIC_OFFSET_TABLE_REGNUM);
if (TARGET_ELF && DEFAULT_ABI == ABI_V4 && flag_pic == 1)
@@ -9699,8 +9899,12 @@ rs6000_emit_load_toc_table (fromprolog)
rtx temp = (fromprolog
? gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM)
: gen_reg_rtx (Pmode));
- rs6000_maybe_dead (emit_insn (gen_load_toc_v4_pic_si (temp)));
- rs6000_maybe_dead (emit_move_insn (dest, temp));
+ insn = emit_insn (gen_load_toc_v4_pic_si (temp));
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
+ insn = emit_move_insn (dest, temp);
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
}
else if (TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2)
{
@@ -9747,14 +9951,13 @@ rs6000_emit_load_toc_table (fromprolog)
ASM_GENERATE_INTERNAL_LABEL (buf, "LCG", reload_toc_labelno++);
symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
- rs6000_maybe_dead (emit_insn (gen_load_toc_v4_PIC_1b (tempLR,
- symF,
- tocsym)));
- rs6000_maybe_dead (emit_move_insn (dest, tempLR));
- rs6000_maybe_dead (emit_move_insn (temp0,
- gen_rtx_MEM (Pmode, dest)));
+ emit_insn (gen_load_toc_v4_PIC_1b (tempLR, symF, tocsym));
+ emit_move_insn (dest, tempLR);
+ emit_move_insn (temp0, gen_rtx_MEM (Pmode, dest));
}
- rs6000_maybe_dead (emit_insn (gen_addsi3 (dest, temp0, dest)));
+ insn = emit_insn (gen_addsi3 (dest, temp0, dest));
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
}
else if (TARGET_ELF && !TARGET_AIX && flag_pic == 0 && TARGET_MINIMAL_TOC)
{
@@ -9764,15 +9967,21 @@ rs6000_emit_load_toc_table (fromprolog)
ASM_GENERATE_INTERNAL_LABEL (buf, "LCTOC", 1);
realsym = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
- rs6000_maybe_dead (emit_insn (gen_elf_high (dest, realsym)));
- rs6000_maybe_dead (emit_insn (gen_elf_low (dest, dest, realsym)));
+ insn = emit_insn (gen_elf_high (dest, realsym));
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
+ insn = emit_insn (gen_elf_low (dest, dest, realsym));
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
}
else if (DEFAULT_ABI == ABI_AIX)
{
if (TARGET_32BIT)
- rs6000_maybe_dead (emit_insn (gen_load_toc_aix_si (dest)));
+ insn = emit_insn (gen_load_toc_aix_si (dest));
else
- rs6000_maybe_dead (emit_insn (gen_load_toc_aix_di (dest)));
+ insn = emit_insn (gen_load_toc_aix_di (dest));
+ if (fromprolog)
+ rs6000_maybe_dead (insn);
}
else
abort ();
@@ -10052,32 +10261,6 @@ rs6000_emit_allocate_stack (size, copy_r12)
REG_NOTES (insn));
}
-/* Add a RTX_FRAME_RELATED note so that dwarf2out_frame_debug_expr
- knows that:
-
- (mem (plus (blah) (regXX)))
-
- is really:
-
- (mem (plus (blah) (const VALUE_OF_REGXX))). */
-
-static void
-altivec_frame_fixup (insn, reg, val)
- rtx insn, reg;
- HOST_WIDE_INT val;
-{
- rtx real;
-
- real = copy_rtx (PATTERN (insn));
-
- real = replace_rtx (real, reg, GEN_INT (val));
-
- RTX_FRAME_RELATED_P (insn) = 1;
- REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
- real,
- REG_NOTES (insn));
-}
-
/* Add to 'insn' a note which is PATTERN (INSN) but with REG replaced
with (plus:P (reg 1) VAL), and with REG2 replaced with RREG if REG2
is not NULL. It would be nice if dwarf2out_frame_debug_expr could
@@ -10158,13 +10341,80 @@ rs6000_frame_related (insn, reg, val, reg2, rreg)
}
else
abort ();
-
+
+ if (TARGET_SPE)
+ real = spe_synthesize_frame_save (real);
+
RTX_FRAME_RELATED_P (insn) = 1;
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
real,
REG_NOTES (insn));
}
+/* Given an SPE frame note, return a PARALLEL of SETs with the
+ original note, plus a synthetic register save. */
+
+static rtx
+spe_synthesize_frame_save (real)
+ rtx real;
+{
+ rtx synth, offset, reg, real2;
+
+ if (GET_CODE (real) != SET
+ || GET_MODE (SET_SRC (real)) != V2SImode)
+ return real;
+
+ /* For the SPE, registers saved in 64-bits, get a PARALLEL for their
+ frame related note. The parallel contains a set of the register
+ being saved, and another set to a synthetic register (n+1200).
+ This is so we can differentiate between 64-bit and 32-bit saves.
+ Words cannot describe this nastiness. */
+
+ if (GET_CODE (SET_DEST (real)) != MEM
+ || GET_CODE (XEXP (SET_DEST (real), 0)) != PLUS
+ || GET_CODE (SET_SRC (real)) != REG)
+ abort ();
+
+ /* Transform:
+ (set (mem (plus (reg x) (const y)))
+ (reg z))
+ into:
+ (set (mem (plus (reg x) (const y+4)))
+ (reg z+1200))
+ */
+
+ real2 = copy_rtx (real);
+ PUT_MODE (SET_DEST (real2), SImode);
+ reg = SET_SRC (real2);
+ real2 = replace_rtx (real2, reg, gen_rtx_REG (SImode, REGNO (reg)));
+ synth = copy_rtx (real2);
+
+ if (BYTES_BIG_ENDIAN)
+ {
+ offset = XEXP (XEXP (SET_DEST (real2), 0), 1);
+ real2 = replace_rtx (real2, offset, GEN_INT (INTVAL (offset) + 4));
+ }
+
+ reg = SET_SRC (synth);
+
+ synth = replace_rtx (synth, reg,
+ gen_rtx_REG (SImode, REGNO (reg) + 1200));
+
+ offset = XEXP (XEXP (SET_DEST (synth), 0), 1);
+ synth = replace_rtx (synth, offset,
+ GEN_INT (INTVAL (offset)
+ + (BYTES_BIG_ENDIAN ? 0 : 4)));
+
+ RTX_FRAME_RELATED_P (synth) = 1;
+ RTX_FRAME_RELATED_P (real2) = 1;
+ if (BYTES_BIG_ENDIAN)
+ real = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, synth, real2));
+ else
+ real = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, real2, synth));
+
+ return real;
+}
+
/* Returns an insn that has a vrsave set operation with the
appropriate CLOBBERs. */
@@ -10316,14 +10566,15 @@ rs6000_emit_prologue ()
int using_store_multiple;
HOST_WIDE_INT sp_offset = 0;
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
{
reg_mode = V2SImode;
reg_size = 8;
}
using_store_multiple = (TARGET_MULTIPLE && ! TARGET_POWERPC64
- && !TARGET_SPE_ABI
+ && (!TARGET_SPE_ABI
+ || info->spe_64bit_regs_used == 0)
&& info->first_gp_reg_save < 31);
saving_FPRs_inline = (info->first_fp_reg_save == 64
|| FP_SAVE_INLINE (info->first_fp_reg_save));
@@ -10375,7 +10626,8 @@ rs6000_emit_prologue ()
insn = emit_move_insn (mem, savereg);
- altivec_frame_fixup (insn, areg, offset);
+ rs6000_frame_related (insn, frame_ptr_rtx, info->total_size,
+ areg, GEN_INT (offset));
}
}
@@ -10509,7 +10761,7 @@ rs6000_emit_prologue ()
rtx addr, reg, mem;
reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i);
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
{
int offset = info->spe_gp_save_offset + sp_offset + 8 * i;
rtx b;
@@ -10634,7 +10886,9 @@ rs6000_emit_prologue ()
it. We use R11 for this purpose because emit_load_toc_table
can use register 0. This allows us to use a plain 'blr' to return
from the procedure more often. */
- int save_LR_around_toc_setup = (TARGET_ELF && flag_pic != 0
+ int save_LR_around_toc_setup = (TARGET_ELF
+ && DEFAULT_ABI != ABI_AIX
+ && flag_pic
&& ! info->lr_save_p
&& EXIT_BLOCK_PTR->pred != NULL);
if (save_LR_around_toc_setup)
@@ -10654,7 +10908,7 @@ rs6000_emit_prologue ()
{
rtx dest = gen_rtx_REG (Pmode, LINK_REGISTER_REGNUM);
const char *picbase = machopic_function_base_name ();
- rtx src = gen_rtx_SYMBOL_REF (Pmode, ggc_alloc_string (picbase, -1));
+ rtx src = gen_rtx_SYMBOL_REF (Pmode, picbase);
rs6000_maybe_dead (emit_insn (gen_load_macho_picbase (dest, src)));
@@ -10751,15 +11005,17 @@ rs6000_emit_epilogue (sibcall)
int reg_size = TARGET_POWERPC64 ? 8 : 4;
int i;
- if (TARGET_SPE_ABI)
+ info = rs6000_stack_info ();
+
+ if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
{
reg_mode = V2SImode;
reg_size = 8;
}
- info = rs6000_stack_info ();
using_load_multiple = (TARGET_MULTIPLE && ! TARGET_POWERPC64
- && !TARGET_SPE_ABI
+ && (!TARGET_SPE_ABI
+ || info->spe_64bit_regs_used == 0)
&& info->first_gp_reg_save < 31);
restoring_FPRs_inline = (sibcall
|| current_function_calls_eh_return
@@ -10929,7 +11185,7 @@ rs6000_emit_epilogue (sibcall)
rtx mem = gen_rtx_MEM (reg_mode, addr);
/* Restore 64-bit quantities for SPE. */
- if (TARGET_SPE_ABI)
+ if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
{
int offset = info->spe_gp_save_offset + sp_offset + 8 * i;
rtx b;
@@ -11472,7 +11728,7 @@ rs6000_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
#if TARGET_MACHO
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
funexp = machopic_indirect_call_target (funexp);
#endif
@@ -12095,6 +12351,9 @@ void
output_profile_hook (labelno)
int labelno ATTRIBUTE_UNUSED;
{
+ if (TARGET_PROFILE_KERNEL)
+ return;
+
if (DEFAULT_ABI == ABI_AIX)
{
#ifdef NO_PROFILE_COUNTERS
@@ -12123,7 +12382,7 @@ output_profile_hook (labelno)
#if TARGET_MACHO
/* For PIC code, set up a stub and collect the caller's address
from r0, which is where the prologue puts it. */
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
{
mcount_name = machopic_stub_name (mcount_name);
if (current_function_uses_pic_offset_table)
@@ -12146,7 +12405,6 @@ output_function_profiler (file, labelno)
char buf[100];
int save_lr = 8;
- ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
switch (DEFAULT_ABI)
{
default:
@@ -12162,6 +12420,7 @@ output_function_profiler (file, labelno)
warning ("no profiling of 64-bit code for this ABI");
return;
}
+ ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
fprintf (file, "\tmflr %s\n", reg_names[0]);
if (flag_pic == 1)
{
@@ -12216,7 +12475,29 @@ output_function_profiler (file, labelno)
case ABI_AIX:
case ABI_DARWIN:
- /* Don't do anything, done in output_profile_hook (). */
+ if (!TARGET_PROFILE_KERNEL)
+ {
+ /* Don't do anything, done in output_profile_hook (). */
+ }
+ else
+ {
+ if (TARGET_32BIT)
+ abort ();
+
+ asm_fprintf (file, "\tmflr %s\n", reg_names[0]);
+ asm_fprintf (file, "\tstd %s,16(%s)\n", reg_names[0], reg_names[1]);
+
+ if (current_function_needs_context)
+ {
+ asm_fprintf (file, "\tstd %s,24(%s)\n",
+ reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
+ fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
+ asm_fprintf (file, "\tld %s,24(%s)\n",
+ reg_names[STATIC_CHAIN_REGNUM], reg_names[1]);
+ }
+ else
+ fprintf (file, "\tbl %s\n", RS6000_MCOUNT);
+ }
break;
}
}
@@ -12228,15 +12509,6 @@ rs6000_use_dfa_pipeline_interface ()
return 1;
}
-static int
-rs6000_multipass_dfa_lookahead ()
-{
- if (rs6000_cpu == PROCESSOR_POWER4)
- return 4;
- else
- return 1;
-}
-
/* Power4 load update and store update instructions are cracked into a
load or store and an integer insn which are executed in the same cycle.
Branches have their own dispatch slot which does not count against the
@@ -12258,18 +12530,19 @@ rs6000_variable_issue (stream, verbose, insn, more)
{
enum attr_type type = get_attr_type (insn);
if (type == TYPE_LOAD_EXT_U || type == TYPE_LOAD_EXT_UX
- || type == TYPE_LOAD_UX || type == TYPE_STORE_UX
- || type == TYPE_FPLOAD_UX || type == TYPE_FPSTORE_UX)
+ || type == TYPE_LOAD_UX || type == TYPE_STORE_UX)
return 0;
else if (type == TYPE_LOAD_U || type == TYPE_STORE_U
|| type == TYPE_FPLOAD_U || type == TYPE_FPSTORE_U
- || type == TYPE_LOAD_EXT || type == TYPE_DELAYED_CR)
- return more - 2;
- else
- return more - 1;
+ || type == TYPE_FPLOAD_UX || type == TYPE_FPSTORE_UX
+ || type == TYPE_LOAD_EXT || type == TYPE_DELAYED_CR
+ || type == TYPE_COMPARE || type == TYPE_DELAYED_COMPARE
+ || type == TYPE_IMUL_COMPARE || type == TYPE_LMUL_COMPARE
+ || type == TYPE_IDIV || type == TYPE_LDIV)
+ return more > 2 ? more - 2 : 0;
}
- else
- return more - 1;
+
+ return more - 1;
}
/* Adjust the cost of a scheduling dependency. Return the new cost of
@@ -12318,6 +12591,8 @@ rs6000_adjust_cost (insn, link, dep_insn, cost)
&& (get_attr_type (dep_insn) == TYPE_CMP
|| get_attr_type (dep_insn) == TYPE_COMPARE
|| get_attr_type (dep_insn) == TYPE_DELAYED_COMPARE
+ || get_attr_type (dep_insn) == TYPE_IMUL_COMPARE
+ || get_attr_type (dep_insn) == TYPE_LMUL_COMPARE
|| get_attr_type (dep_insn) == TYPE_FPCOMPARE
|| get_attr_type (dep_insn) == TYPE_CR_LOGICAL
|| get_attr_type (dep_insn) == TYPE_DELAYED_CR))
@@ -12380,6 +12655,10 @@ rs6000_adjust_priority (insn, priority)
static int
rs6000_issue_rate ()
{
+ /* Use issue rate of 1 for first scheduling pass to decrease degradation. */
+ if (!reload_completed)
+ return 1;
+
switch (rs6000_cpu_attr) {
case CPU_RIOS1: /* ? */
case CPU_RS64A:
@@ -12390,6 +12669,7 @@ rs6000_issue_rate ()
case CPU_PPC603:
case CPU_PPC750:
case CPU_PPC7400:
+ case CPU_PPC8540:
return 2;
case CPU_RIOS2:
case CPU_PPC604:
@@ -12403,6 +12683,17 @@ rs6000_issue_rate ()
}
}
+/* Return how many instructions to look ahead for better insn
+ scheduling. */
+
+static int
+rs6000_use_sched_lookahead ()
+{
+ if (rs6000_cpu_attr == CPU_PPC8540)
+ return 4;
+ return 0;
+}
+
/* Length in units of the trampoline for entering a nested function. */
@@ -12593,6 +12884,10 @@ rs6000_elf_select_section (decl, reloc, align)
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. */
default_elf_select_section_1 (decl, reloc, align,
flag_pic || DEFAULT_ABI == ABI_AIX);
}
@@ -12610,10 +12905,11 @@ rs6000_elf_unique_section (decl, reloc)
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);
}
-
/* If we are referencing a function that is static or is known to be
in this file, make the SYMBOL_REF special. We can use this to indicate
@@ -12637,7 +12933,7 @@ rs6000_elf_encode_section_info (decl, first)
if ((*targetm.binds_local_p) (decl))
SYMBOL_REF_FLAG (sym_ref) = 1;
- if (DEFAULT_ABI == ABI_AIX)
+ if (!TARGET_AIX && DEFAULT_ABI == ABI_AIX)
{
size_t len1 = (DEFAULT_ABI == ABI_AIX) ? 1 : 2;
size_t len2 = strlen (XSTR (sym_ref, 0));
@@ -13018,7 +13314,12 @@ machopic_output_stub (file, symb, stub)
fprintf (file, "\tbctr\n");
}
else
- fprintf (file, "non-pure not supported\n");
+ {
+ fprintf (file, "\tlis r11,ha16(%s)\n", lazy_ptr_name);
+ fprintf (file, "\tlwzu r12,lo16(%s)(r11)\n", lazy_ptr_name);
+ fprintf (file, "\tmtctr r12\n");
+ fprintf (file, "\tbctr\n");
+ }
machopic_lazy_symbol_ptr_section ();
fprintf (file, "%s:\n", lazy_ptr_name);
@@ -13311,10 +13612,6 @@ rs6000_xcoff_section_type_flags (decl, name, reloc)
return flags | (exact_log2 (align) & SECTION_ENTSIZE);
}
-#endif /* TARGET_XCOFF */
-
-/* Note that this is also used for PPC64 Linux. */
-
static void
rs6000_xcoff_encode_section_info (decl, first)
tree decl;
@@ -13324,16 +13621,19 @@ rs6000_xcoff_encode_section_info (decl, first)
&& (*targetm.binds_local_p) (decl))
SYMBOL_REF_FLAG (XEXP (DECL_RTL (decl), 0)) = 1;
}
+#endif /* TARGET_XCOFF */
-/* Cross-module name binding. For AIX and PPC64 Linux, which always are
- PIC, use private copy of flag_pic. */
+#if TARGET_MACHO
+/* Cross-module name binding. Darwin does not support overriding
+ functions at dynamic-link time. */
static bool
rs6000_binds_local_p (decl)
tree decl;
{
- return default_binds_local_p_1 (decl, flag_pic || rs6000_flag_pic);
+ return default_binds_local_p_1 (decl, 0);
}
+#endif
/* Compute a (partial) cost for rtx X. Return true if the complete
cost has been computed, and false if subexpressions should be
@@ -13437,7 +13737,6 @@ rs6000_rtx_costs (x, code, outer_code, total)
case PROCESSOR_PPC620:
case PROCESSOR_PPC630:
- case PROCESSOR_POWER4:
*total = (GET_CODE (XEXP (x, 1)) != CONST_INT
? GET_MODE (XEXP (x, 1)) != DImode
? COSTS_N_INSNS (5) : COSTS_N_INSNS (7)
@@ -13446,6 +13745,13 @@ rs6000_rtx_costs (x, code, outer_code, total)
? COSTS_N_INSNS (3) : COSTS_N_INSNS (4));
return true;
+ case PROCESSOR_POWER4:
+ *total = (GET_CODE (XEXP (x, 1)) != CONST_INT
+ ? GET_MODE (XEXP (x, 1)) != DImode
+ ? COSTS_N_INSNS (3) : COSTS_N_INSNS (4)
+ : COSTS_N_INSNS (2));
+ return true;
+
default:
abort ();
}
@@ -13505,7 +13811,6 @@ rs6000_rtx_costs (x, code, outer_code, total)
case PROCESSOR_PPC620:
case PROCESSOR_PPC630:
- case PROCESSOR_POWER4:
*total = (GET_MODE (XEXP (x, 1)) != DImode
? COSTS_N_INSNS (21)
: COSTS_N_INSNS (37));
@@ -13521,6 +13826,12 @@ rs6000_rtx_costs (x, code, outer_code, total)
*total = COSTS_N_INSNS (23);
return true;
+ case PROCESSOR_POWER4:
+ *total = (GET_MODE (XEXP (x, 1)) != DImode
+ ? COSTS_N_INSNS (18)
+ : COSTS_N_INSNS (34));
+ return true;
+
default:
abort ();
}
@@ -13611,4 +13922,29 @@ is_ev64_opaque_type (type)
"__ev64_opaque__") == 0);
}
+static rtx
+rs6000_dwarf_register_span (reg)
+ rtx reg;
+{
+ unsigned regno;
+
+ if (!TARGET_SPE || !SPE_VECTOR_MODE (GET_MODE (reg)))
+ return NULL_RTX;
+
+ regno = REGNO (reg);
+
+ /* The duality of the SPE register size wreaks all kinds of havoc.
+ This is a way of distinguishing r0 in 32-bits from r0 in
+ 64-bits. */
+ return
+ gen_rtx_PARALLEL (VOIDmode,
+ BYTES_BIG_ENDIAN
+ ? gen_rtvec (2,
+ gen_rtx_REG (SImode, regno + 1200),
+ gen_rtx_REG (SImode, regno))
+ : gen_rtvec (2,
+ gen_rtx_REG (SImode, regno),
+ gen_rtx_REG (SImode, regno + 1200)));
+}
+
#include "gt-rs6000.h"
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index da04dc02fe7..0d8085c4e3f 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -704,6 +704,20 @@ extern int rs6000_default_long_calls;
/* This must be included for pre gcc 3.0 glibc compatibility. */
#define PRE_GCC3_DWARF_FRAME_REGISTERS 77
+/* Add 32 dwarf columns for synthetic SPE registers. The SPE
+ synthetic registers are 113 through 145. */
+#define DWARF_FRAME_REGISTERS (FIRST_PSEUDO_REGISTER + 32)
+
+/* The SPE has an additional 32 synthetic registers starting at 1200.
+ We must map them here to sane values in the unwinder to avoid a
+ huge hole in the unwind tables.
+
+ FIXME: the AltiVec ABI has AltiVec registers being 1124-1155, and
+ the VRSAVE SPR (SPR256) assigned to register 356. When AltiVec EH
+ is verified to be working, this macro should be changed
+ accordingly. */
+#define DWARF_REG_TO_UNWIND_COLUMN(r) ((r) > 1200 ? ((r) - 1200 + 113) : (r))
+
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
@@ -814,6 +828,13 @@ extern int rs6000_default_long_calls;
v31 - v20 (saved; order given to save least number)
*/
+#if FIXED_R2 == 1
+#define MAYBE_R2_AVAILABLE
+#define MAYBE_R2_FIXED 2,
+#else
+#define MAYBE_R2_AVAILABLE 2,
+#define MAYBE_R2_FIXED
+#endif
#define REG_ALLOC_ORDER \
{32, \
@@ -822,13 +843,13 @@ extern int rs6000_default_long_calls;
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, \
50, 49, 48, 47, 46, \
75, 74, 69, 68, 72, 71, 70, \
- 0, \
+ 0, MAYBE_R2_AVAILABLE \
9, 11, 10, 8, 7, 6, 5, 4, \
3, \
31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, \
18, 17, 16, 15, 14, 13, 12, \
64, 66, 65, \
- 73, 1, 2, 67, 76, \
+ 73, 1, MAYBE_R2_FIXED 67, 76, \
/* AltiVec registers. */ \
77, 78, \
90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, \
@@ -902,22 +923,24 @@ extern int rs6000_default_long_calls;
|| (TARGET_ALTIVEC && ALTIVEC_VECTOR_MODE (MODE)))
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
- For POWER and PowerPC, the GPRs can hold any mode, but the float
+ For POWER and PowerPC, the GPRs can hold any mode, but values bigger
+ than one register cannot go past R31. The float
registers only can hold floating modes and DImode, and CR register only
can hold CC modes. We cannot put TImode anywhere except general
register and it must be able to fit within the register set. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
- (FP_REGNO_P (REGNO) ? \
- (GET_MODE_CLASS (MODE) == MODE_FLOAT \
- || (GET_MODE_CLASS (MODE) == MODE_INT \
- && GET_MODE_SIZE (MODE) == UNITS_PER_FP_WORD)) \
+ (INT_REGNO_P (REGNO) ? \
+ INT_REGNO_P (REGNO + HARD_REGNO_NREGS (REGNO, MODE) - 1) \
+ : FP_REGNO_P (REGNO) ? \
+ (GET_MODE_CLASS (MODE) == MODE_FLOAT \
+ || (GET_MODE_CLASS (MODE) == MODE_INT \
+ && GET_MODE_SIZE (MODE) == UNITS_PER_FP_WORD)) \
: ALTIVEC_REGNO_P (REGNO) ? ALTIVEC_VECTOR_MODE (MODE) \
: SPE_SIMD_REGNO_P (REGNO) && TARGET_SPE && SPE_VECTOR_MODE (MODE) ? 1 \
: CR_REGNO_P (REGNO) ? GET_MODE_CLASS (MODE) == MODE_CC \
: XER_REGNO_P (REGNO) ? (MODE) == PSImode \
- : ! INT_REGNO_P (REGNO) ? GET_MODE_SIZE (MODE) <= UNITS_PER_WORD \
- : 1)
+ : GET_MODE_SIZE (MODE) <= UNITS_PER_WORD)
/* Value is 1 if it is a good idea to tie two pseudo registers
when one has mode MODE1 and one has mode MODE2.
@@ -938,6 +961,12 @@ extern int rs6000_default_long_calls;
? ALTIVEC_VECTOR_MODE (MODE1) \
: 1)
+/* Post-reload, we can't use any new AltiVec registers, as we already
+ emitted the vrsave mask. */
+
+#define HARD_REGNO_RENAME_OK(SRC, DST) \
+ (! ALTIVEC_REGNO_P (DST) || regs_ever_live[DST])
+
/* A C expression returning the cost of moving data from a register of class
CLASS1 to one of CLASS2. */
@@ -1263,6 +1292,7 @@ enum reg_class
'S' is a constant that can be placed into a 64-bit mask operand
'T' is a constant that can be placed into a 32-bit mask operand
'U' is for V.4 small data references.
+ 'W' is a vector constant that can be easily generated (no mem refs).
't' is for AND masks that can be performed by two rldic{l,r} insns. */
#define EXTRA_CONSTRAINT(OP, C) \
@@ -1276,6 +1306,7 @@ enum reg_class
&& (fixed_regs[CR0_REGNO] \
|| !logical_operand (OP, DImode)) \
&& !mask64_operand (OP, DImode)) \
+ : (C) == 'W' ? (easy_vector_constant (OP, GET_MODE (OP))) \
: 0)
/* Given an rtx X being reloaded into a reg required to be
@@ -1395,6 +1426,7 @@ typedef struct rs6000_stack {
int spe_padding_size;
int toc_size; /* size to hold TOC if not in save_size */
int total_size; /* total bytes allocated for stack */
+ int spe_64bit_regs_used;
} rs6000_stack_t;
/* Define this if pushing a word on the stack
@@ -1611,20 +1643,20 @@ typedef struct rs6000_stack {
as seen by the caller.
On RS/6000, this is r3, fp1, and v2 (for AltiVec). */
-#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_ARG_RETURN \
- || ((N) == FP_ARG_RETURN) \
- || (TARGET_ALTIVEC && \
- (N) == ALTIVEC_ARG_RETURN))
+#define FUNCTION_VALUE_REGNO_P(N) \
+ ((N) == GP_ARG_RETURN \
+ || ((N) == FP_ARG_RETURN && TARGET_HARD_FLOAT) \
+ || ((N) == ALTIVEC_ARG_RETURN && TARGET_ALTIVEC))
/* 1 if N is a possible register number for function argument passing.
On RS/6000, these are r3-r10 and fp1-fp13.
On AltiVec, v2 - v13 are used for passing vectors. */
#define FUNCTION_ARG_REGNO_P(N) \
- (((unsigned)((N) - GP_ARG_MIN_REG) < (unsigned)(GP_ARG_NUM_REG)) \
- || (TARGET_ALTIVEC && \
- (unsigned)((N) - ALTIVEC_ARG_MIN_REG) < (unsigned)(ALTIVEC_ARG_NUM_REG)) \
- || ((unsigned)((N) - FP_ARG_MIN_REG) < (unsigned)(FP_ARG_NUM_REG)))
-
+ ((unsigned) (N) - GP_ARG_MIN_REG < GP_ARG_NUM_REG \
+ || ((unsigned) (N) - ALTIVEC_ARG_MIN_REG < ALTIVEC_ARG_NUM_REG \
+ && TARGET_ALTIVEC) \
+ || ((unsigned) (N) - FP_ARG_MIN_REG < FP_ARG_NUM_REG \
+ && TARGET_HARD_FLOAT))
/* A C structure for machine-specific, per-function data.
This is added to the cfun structure. */
@@ -1634,6 +1666,8 @@ typedef struct machine_function GTY(())
int sysv_varargs_p;
/* Flags if __builtin_return_address (n) with n >= 1 was used. */
int ra_needs_full_frame;
+ /* Whether the instruction chain has been scanned already. */
+ int insn_chain_scanned_p;
} machine_function;
/* Define a data type for recording info about an argument list
@@ -2086,7 +2120,8 @@ typedef struct rs6000_args
#define LEGITIMATE_LO_SUM_ADDRESS_P(MODE, X, STRICT) \
(TARGET_ELF \
- && ! flag_pic && ! TARGET_TOC \
+ && (DEFAULT_ABI == ABI_AIX || ! flag_pic) \
+ && ! TARGET_TOC \
&& GET_MODE_NUNITS (MODE) == 1 \
&& (GET_MODE_BITSIZE (MODE) <= 32 \
|| (TARGET_HARD_FLOAT && TARGET_FPRS && (MODE) == DFmode)) \
@@ -2707,6 +2742,8 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */
{"got_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \
{"got_no_const_operand", {SYMBOL_REF, LABEL_REF}}, \
{"easy_fp_constant", {CONST_DOUBLE}}, \
+ {"easy_vector_constant", {CONST_VECTOR}}, \
+ {"easy_vector_constant_add_self", {CONST_VECTOR}}, \
{"zero_fp_constant", {CONST_DOUBLE}}, \
{"reg_or_mem_operand", {SUBREG, MEM, REG}}, \
{"lwa_operand", {SUBREG, MEM, REG}}, \
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index ece5be17d48..eb65422e0b4 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -39,7 +39,7 @@
;; Define an insn type attribute. This is used in function unit delay
;; computations.
-(define_attr "type" "integer,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,branch,cmp,fast_compare,compare,delayed_compare,fpcompare,cr_logical,delayed_cr,mfcr,mtcr,mtjmpr,fp,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,vecsimple,veccomplex,veccmp,vecperm,vecfloat"
+(define_attr "type" "integer,load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,store,store_ux,store_u,fpload,fpload_ux,fpload_u,fpstore,fpstore_ux,fpstore_u,vecload,vecstore,imul,imul2,imul3,lmul,idiv,ldiv,branch,cmp,fast_compare,compare,delayed_compare,imul_compare,lmul_compare,fpcompare,cr_logical,delayed_cr,mfcr,mtcr,mtjmpr,fp,fpsimple,dmul,sdiv,ddiv,ssqrt,dsqrt,jmpreg,brinc,vecsimple,veccomplex,vecdiv,veccmp,veccmpsimple,vecperm,vecfloat,vecfdiv"
(const_string "integer"))
;; Length (in bytes).
@@ -72,6 +72,7 @@
(include "6xx.md")
(include "7xx.md")
(include "7450.md")
+(include "8540.md")
(include "power4.md")
@@ -1668,7 +1669,7 @@
(const_string "imul2")]
(const_string "imul")))])
-(define_insn ""
+(define_insn "*mulsi3_mq_internal1"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
(compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
@@ -1679,7 +1680,7 @@
"@
{muls.|mullw.} %3,%1,%2
#"
- [(set_attr "type" "delayed_compare")
+ [(set_attr "type" "imul_compare")
(set_attr "length" "4,8")])
(define_split
@@ -1698,7 +1699,7 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_insn "*mulsi3_no_mq_internal1"
[(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
(compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
@@ -1708,7 +1709,7 @@
"@
{muls.|mullw.} %3,%1,%2
#"
- [(set_attr "type" "delayed_compare")
+ [(set_attr "type" "imul_compare")
(set_attr "length" "4,8")])
(define_split
@@ -1725,7 +1726,7 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_insn "*mulsi3_mq_internal2"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
@@ -1737,7 +1738,7 @@
"@
{muls.|mullw.} %0,%1,%2
#"
- [(set_attr "type" "delayed_compare")
+ [(set_attr "type" "imul_compare")
(set_attr "length" "4,8")])
(define_split
@@ -1757,7 +1758,7 @@
(const_int 0)))]
"")
-(define_insn ""
+(define_insn "*mulsi3_no_mq_internal2"
[(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
(compare:CC (mult:SI (match_operand:SI 1 "gpc_reg_operand" "%r,r")
(match_operand:SI 2 "gpc_reg_operand" "r,r"))
@@ -1768,7 +1769,7 @@
"@
{muls.|mullw.} %0,%1,%2
#"
- [(set_attr "type" "delayed_compare")
+ [(set_attr "type" "imul_compare")
(set_attr "length" "4,8")])
(define_split
@@ -6022,6 +6023,62 @@
"mulld %0,%1,%2"
[(set_attr "type" "lmul")])
+(define_insn "*muldi3_internal1"
+ [(set (match_operand:CC 0 "cc_reg_operand" "=x,?y")
+ (compare:CC (mult:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
+ (match_operand:DI 2 "gpc_reg_operand" "r,r"))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 "=r,r"))]
+ "TARGET_POWERPC64"
+ "@
+ mulld. %3,%1,%2
+ #"
+ [(set_attr "type" "lmul_compare")
+ (set_attr "length" "4,8")])
+
+(define_split
+ [(set (match_operand:CC 0 "cc_reg_not_cr0_operand" "")
+ (compare:CC (mult:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "gpc_reg_operand" ""))
+ (const_int 0)))
+ (clobber (match_scratch:DI 3 ""))]
+ "TARGET_POWERPC64 && reload_completed"
+ [(set (match_dup 3)
+ (mult:DI (match_dup 1) (match_dup 2)))
+ (set (match_dup 0)
+ (compare:CC (match_dup 3)
+ (const_int 0)))]
+ "")
+
+(define_insn "*muldi3_internal2"
+ [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
+ (compare:CC (mult:DI (match_operand:DI 1 "gpc_reg_operand" "%r,r")
+ (match_operand:DI 2 "gpc_reg_operand" "r,r"))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
+ (mult:DI (match_dup 1) (match_dup 2)))]
+ "TARGET_POWERPC64"
+ "@
+ mulld. %0,%1,%2
+ #"
+ [(set_attr "type" "lmul_compare")
+ (set_attr "length" "4,8")])
+
+(define_split
+ [(set (match_operand:CC 3 "cc_reg_not_cr0_operand" "")
+ (compare:CC (mult:DI (match_operand:DI 1 "gpc_reg_operand" "")
+ (match_operand:DI 2 "gpc_reg_operand" ""))
+ (const_int 0)))
+ (set (match_operand:DI 0 "gpc_reg_operand" "")
+ (mult:DI (match_dup 1) (match_dup 2)))]
+ "TARGET_POWERPC64 && reload_completed"
+ [(set (match_dup 0)
+ (mult:DI (match_dup 1) (match_dup 2)))
+ (set (match_dup 3)
+ (compare:CC (match_dup 0)
+ (const_int 0)))]
+ "")
+
(define_insn "smuldi3_highpart"
[(set (match_operand:DI 0 "gpc_reg_operand" "=r")
(truncate:DI
@@ -7531,9 +7588,14 @@
operands2[2] = operands[2];
operands2[3] = gen_rtx_REG (SImode, RS6000_PIC_OFFSET_TABLE_REGNUM);
output_asm_insn (\"{l|lwz} %0,lo16(%2)(%1)\", operands);
+#if TARGET_MACHO
+ if (MACHO_DYNAMIC_NO_PIC_P)
+ output_asm_insn (\"{liu|lis} %L0,ha16(%2+4)\", operands);
+ else
/* We cannot rely on ha16(low half)==ha16(high half), alas,
although in practice it almost always is. */
output_asm_insn (\"{cau|addis} %L0,%3,ha16(%2+4)\", operands2);
+#endif
return (\"{l|lwz} %L0,lo16(%2+4)(%L0)\");
}
default:
@@ -9413,7 +9475,7 @@
(match_operand:SI 2 "reg_or_short_operand" "r,I"))))
(set (match_operand:SI 0 "gpc_reg_operand" "=b,b")
(plus:SI (match_dup 1) (match_dup 2)))]
- ""
+ "TARGET_UPDATE"
"@
{lux|lwzux} %3,%0,%2
{lu|lwzu} %3,%2(%0)"
@@ -9838,12 +9900,12 @@
(define_insn "macho_correct_pic"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
- (plus:SI (match_operand:SI 1 "gpc_reg_operand" "=r")
+ (plus:SI (match_operand:SI 1 "gpc_reg_operand" "r")
(unspec:SI [(match_operand:SI 2 "immediate_operand" "s")
(match_operand:SI 3 "immediate_operand" "s")]
16)))]
"DEFAULT_ABI == ABI_DARWIN"
- "addis %0,%1,ha16(%2-%3)\n\taddi %1,%1,lo16(%2-%3)"
+ "addis %0,%1,ha16(%2-%3)\n\taddi %0,%0,lo16(%2-%3)"
[(set_attr "length" "8")])
;; If the TOC is shared over a translation unit, as happens with all
@@ -9986,7 +10048,7 @@
"
{
#if TARGET_MACHO
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
operands[0] = machopic_indirect_call_target (operands[0]);
#endif
@@ -10034,7 +10096,7 @@
"
{
#if TARGET_MACHO
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
operands[1] = machopic_indirect_call_target (operands[1]);
#endif
@@ -10399,7 +10461,7 @@
"
{
#if TARGET_MACHO
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
operands[0] = machopic_indirect_call_target (operands[0]);
#endif
@@ -10586,7 +10648,7 @@
"
{
#if TARGET_MACHO
- if (flag_pic)
+ if (MACHOPIC_INDIRECT)
operands[1] = machopic_indirect_call_target (operands[1]);
#endif
diff --git a/gcc/config/rs6000/rs64.md b/gcc/config/rs6000/rs64.md
index 2db82c12b87..011b3df3500 100644
--- a/gcc/config/rs6000/rs64.md
+++ b/gcc/config/rs6000/rs64.md
@@ -47,7 +47,7 @@
"iu_rs64")
(define_insn_reservation "rs64a-imul" 20
- (and (eq_attr "type" "imul")
+ (and (eq_attr "type" "imul,imul_compare")
(eq_attr "cpu" "rs64a"))
"mciu_rs64*13")
@@ -62,7 +62,7 @@
"mciu_rs64*2")
(define_insn_reservation "rs64a-lmul" 34
- (and (eq_attr "type" "lmul")
+ (and (eq_attr "type" "lmul,lmul_compare")
(eq_attr "cpu" "rs64a"))
"mciu_rs64*34")
diff --git a/gcc/config/rs6000/spe.h b/gcc/config/rs6000/spe.h
index 18fb3382013..b15dac5a38b 100644
--- a/gcc/config/rs6000/spe.h
+++ b/gcc/config/rs6000/spe.h
@@ -42,8 +42,8 @@ typedef short __vector __ev64_s16__;
typedef unsigned short __vector __ev64_u16__;
typedef int __vector __ev64_s32__;
typedef unsigned __vector __ev64_u32__;
-typedef long long __ev64_s64__;
-typedef unsigned long long __ev64_u64__;
+typedef long long __vector __ev64_s64__;
+typedef unsigned long long __vector __ev64_u64__;
typedef float __vector __ev64_fs__;
typedef int __vector __ev64_opaque__;
@@ -651,8 +651,17 @@ __ev_create_u64 (uint64_t a)
return u.v;
}
-#define __ev_convert_u64(a) ((uint64_t) (a))
-#define __ev_convert_s64(a) ((int64_t) (a))
+static inline uint64_t
+__ev_convert_u64 (__ev64_opaque__ a)
+{
+ return (uint64_t) a;
+}
+
+static inline int64_t
+__ev_convert_s64 (__ev64_opaque__ a)
+{
+ return (int64_t) a;
+}
/* __ev_get_* functions. */
diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md
index 98b64deb4d2..30a07f98a9a 100644
--- a/gcc/config/rs6000/spe.md
+++ b/gcc/config/rs6000/spe.md
@@ -28,14 +28,14 @@
(neg:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS"
"efsneg %0,%1"
- [(set_attr "type" "fp")])
+ [(set_attr "type" "fpsimple")])
(define_insn "*abssf2_gpr"
[(set (match_operand:SF 0 "gpc_reg_operand" "=r")
(abs:SF (match_operand:SF 1 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS"
"efsabs %0,%1"
- [(set_attr "type" "fp")])
+ [(set_attr "type" "fpsimple")])
(define_insn "*addsf3_gpr"
[(set (match_operand:SF 0 "gpc_reg_operand" "=r")
@@ -67,7 +67,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS"
"efsdiv %0,%1,%2"
- [(set_attr "type" "fp")])
+ [(set_attr "type" "vecfdiv")])
(define_insn "spe_efsctuiz"
[(set (match_operand:SI 0 "gpc_reg_operand" "=r")
@@ -617,7 +617,7 @@
(abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
"TARGET_SPE"
"evfsabs %0,%1"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "vecsimple")
(set_attr "length" "4")])
(define_insn "spe_evfsadd"
@@ -717,7 +717,7 @@
(clobber (reg:SI SPEFSCR_REGNO))]
"TARGET_SPE"
"evfsdiv %0,%1,%2"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "vecfdiv")
(set_attr "length" "4")])
(define_insn "spe_evfsmul"
@@ -735,7 +735,7 @@
(unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 537))]
"TARGET_SPE"
"evfsnabs %0,%1"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "vecsimple")
(set_attr "length" "4")])
(define_insn "spe_evfsneg"
@@ -743,7 +743,7 @@
(neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
"TARGET_SPE"
"evfsneg %0,%1"
- [(set_attr "type" "vecfloat")
+ [(set_attr "type" "vecsimple")
(set_attr "length" "4")])
(define_insn "spe_evfssub"
@@ -889,7 +889,7 @@
(match_operand:SI 2 "gpc_reg_operand" "r")] 556))]
"TARGET_SPE"
"brinc %0,%1,%2"
- [(set_attr "type" "veccomplex")
+ [(set_attr "type" "brinc")
(set_attr "length" "4")])
(define_insn "spe_evmhegsmfaa"
@@ -1847,7 +1847,7 @@
(match_operand:V2SI 2 "gpc_reg_operand" "r")))]
"TARGET_SPE"
"evaddw %0,%1,%2"
- [(set_attr "type" "veccomplex")
+ [(set_attr "type" "vecsimple")
(set_attr "length" "4")])
(define_insn "spe_evaddusiaaw"
@@ -1898,7 +1898,7 @@
(match_operand:QI 2 "immediate_operand" "i")] 677))]
"TARGET_SPE"
"evaddiw %0,%1,%2"
- [(set_attr "type" "veccomplex")
+ [(set_attr "type" "vecsimple")
(set_attr "length" "4")])
(define_insn "spe_evsubifw"
@@ -1978,7 +1978,7 @@
(clobber (reg:SI SPEFSCR_REGNO))]
"TARGET_SPE"
"evdivws %0,%1,%2"
- [(set_attr "type" "veccomplex")
+ [(set_attr "type" "vecdiv")
(set_attr "length" "4")])
(define_insn "spe_evdivwu"
@@ -1988,7 +1988,7 @@
(clobber (reg:SI SPEFSCR_REGNO))]
"TARGET_SPE"
"evdivwu %0,%1,%2"
- [(set_attr "type" "veccomplex")
+ [(set_attr "type" "vecdiv")
(set_attr "length" "4")])
(define_insn "spe_evsplatfi"
@@ -2147,36 +2147,6 @@
[(set_attr "type" "vecstore")
(set_attr "length" "4")])
-;; SPE vector clears
-
-(define_insn "*movv2si_const0"
- [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
- (match_operand:V2SI 1 "zero_constant" ""))]
- "TARGET_SPE"
- "evxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv2sf_const0"
- [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
- (match_operand:V2SF 1 "zero_constant" ""))]
- "TARGET_SPE"
- "evxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv4hi_const0"
- [(set (match_operand:V4HI 0 "gpc_reg_operand" "=r")
- (match_operand:V4HI 1 "zero_constant" ""))]
- "TARGET_SPE"
- "evxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
-(define_insn "*movv1di_const0"
- [(set (match_operand:V1DI 0 "gpc_reg_operand" "=r")
- (match_operand:V1DI 1 "zero_constant" ""))]
- "TARGET_SPE"
- "evxor %0,%0,%0"
- [(set_attr "type" "vecsimple")])
-
;; Vector move instructions.
(define_expand "movv2si"
@@ -2185,16 +2155,31 @@
"TARGET_SPE"
"{ rs6000_emit_move (operands[0], operands[1], V2SImode); DONE; }")
-
(define_insn "*movv2si_internal"
- [(set (match_operand:V2SI 0 "nonimmediate_operand" "=m,r,r")
- (match_operand:V2SI 1 "input_operand" "r,m,r"))]
- "TARGET_SPE"
- "@
- evstdd%X0 %1,%y0
- evldd%X1 %0,%y1
- evor %0,%1,%1"
- [(set_attr "type" "vecload")])
+ [(set (match_operand:V2SI 0 "nonimmediate_operand" "=m,r,r,r")
+ (match_operand:V2SI 1 "input_operand" "r,m,r,W"))]
+ "TARGET_SPE"
+ "*
+{
+ switch (which_alternative)
+ {
+ case 0: return \"evstdd%X0 %1,%y0\";
+ case 1: return \"evldd%X1 %0,%y1\";
+ case 2: return \"evor %0,%1,%1\";
+ case 3: return output_vec_const_move (operands);
+ default: abort ();
+ }
+}"
+ [(set_attr "type" "vecload,vecstore,*,*")
+ (set_attr "length" "*,*,*,12")])
+
+(define_split
+ [(set (match_operand:V2SI 0 "register_operand" "")
+ (match_operand:V2SI 1 "zero_constant" ""))]
+ "TARGET_SPE && reload_completed"
+ [(set (match_dup 0)
+ (xor:V2SI (match_dup 0) (match_dup 0)))]
+ "")
(define_expand "movv1di"
[(set (match_operand:V1DI 0 "nonimmediate_operand" "")
@@ -2203,14 +2188,16 @@
"{ rs6000_emit_move (operands[0], operands[1], V1DImode); DONE; }")
(define_insn "*movv1di_internal"
- [(set (match_operand:V1DI 0 "nonimmediate_operand" "=m,r,r")
- (match_operand:V1DI 1 "input_operand" "r,m,r"))]
+ [(set (match_operand:V1DI 0 "nonimmediate_operand" "=m,r,r,r")
+ (match_operand:V1DI 1 "input_operand" "r,m,r,W"))]
"TARGET_SPE"
"@
evstdd%X0 %1,%y0
evldd%X1 %0,%y1
- evor %0,%1,%1"
- [(set_attr "type" "vecload")])
+ evor %0,%1,%1
+ evxor %0,%0,%0"
+ [(set_attr "type" "vecload,vecstore,*,*")
+ (set_attr "length" "*,*,*,*")])
(define_expand "movv4hi"
[(set (match_operand:V4HI 0 "nonimmediate_operand" "")
@@ -2235,14 +2222,16 @@
"{ rs6000_emit_move (operands[0], operands[1], V2SFmode); DONE; }")
(define_insn "*movv2sf_internal"
- [(set (match_operand:V2SF 0 "nonimmediate_operand" "=m,r,r")
- (match_operand:V2SF 1 "input_operand" "r,m,r"))]
+ [(set (match_operand:V2SF 0 "nonimmediate_operand" "=m,r,r,r")
+ (match_operand:V2SF 1 "input_operand" "r,m,r,W"))]
"TARGET_SPE"
"@
evstdd%X0 %1,%y0
evldd%X1 %0,%y1
- evor %0,%1,%1"
- [(set_attr "type" "vecload")])
+ evor %0,%1,%1
+ evxor %0,%0,%0"
+ [(set_attr "type" "vecload,vecstore,*,*")
+ (set_attr "length" "*,*,*,*")])
(define_insn "spe_evmwhssfaa"
[(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
@@ -2466,7 +2455,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
"efscmpeq %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmp")])
(define_insn "tstsfeq_gpr"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -2474,7 +2463,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
"efststeq %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmpsimple")])
(define_insn "cmpsfgt_gpr"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -2482,7 +2471,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
"efscmpgt %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmp")])
(define_insn "tstsfgt_gpr"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -2490,7 +2479,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
"efststgt %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmpsimple")])
(define_insn "cmpsflt_gpr"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -2498,7 +2487,7 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && !flag_unsafe_math_optimizations"
"efscmplt %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmp")])
(define_insn "tstsflt_gpr"
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
@@ -2506,5 +2495,5 @@
(match_operand:SF 2 "gpc_reg_operand" "r")))]
"TARGET_HARD_FLOAT && !TARGET_FPRS && flag_unsafe_math_optimizations"
"efststlt %0,%1,%2"
- [(set_attr "type" "fpcompare")])
+ [(set_attr "type" "veccmpsimple")])
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index 503deaf398a..cdc15acd777 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -247,8 +247,9 @@ do { \
rs6000_sdata_name); \
} \
\
- else if (flag_pic && \
- (rs6000_sdata == SDATA_EABI || rs6000_sdata == SDATA_SYSV)) \
+ else if (flag_pic && DEFAULT_ABI != ABI_AIX \
+ && (rs6000_sdata == SDATA_EABI \
+ || rs6000_sdata == SDATA_SYSV)) \
{ \
rs6000_sdata = SDATA_DATA; \
error ("-f%s and -msdata=%s are incompatible", \
@@ -292,7 +293,7 @@ do { \
} \
\
/* Treat -fPIC the same as -mrelocatable. */ \
- if (flag_pic > 1) \
+ if (flag_pic > 1 && DEFAULT_ABI != ABI_AIX) \
target_flags |= MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC; \
\
else if (TARGET_RELOCATABLE) \
@@ -421,7 +422,8 @@ do { \
/* Put PC relative got entries in .got2. */
#define MINIMAL_TOC_SECTION_ASM_OP \
- ((TARGET_RELOCATABLE || flag_pic) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
+ (TARGET_RELOCATABLE || (flag_pic && DEFAULT_ABI != ABI_AIX) \
+ ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"")
#define SDATA_SECTION_ASM_OP "\t.section\t\".sdata\",\"aw\""
#define SDATA2_SECTION_ASM_OP "\t.section\t\".sdata2\",\"a\""
@@ -688,7 +690,6 @@ do { \
/* Describe how to emit uninitialized external linkage items. */
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- (*targetm.asm_out.globalize_label) (FILE, NAME); \
ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
} while (0)
diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index dddd26d8d5e..5f2cde10475 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -18,11 +18,14 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-/* N.B. Only big endian PPC is supported by VxWorks. */
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES \
- "-D__vxworks -D__vxworks__ -D_BIG_ENDIAN -D__BIG_ENDIAN__"
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__vxworks"); \
+ builtin_define ("__vxworks__"); \
+ } \
+ while (0)
/* We have to kill off the entire specs set created by rs6000/sysv4.h
and substitute our own set. The top level vxworks.h has done some
diff --git a/gcc/config/s390/s390-protos.h b/gcc/config/s390/s390-protos.h
index cb3326c74cf..12b2674cc36 100644
--- a/gcc/config/s390/s390-protos.h
+++ b/gcc/config/s390/s390-protos.h
@@ -76,6 +76,7 @@ extern void s390_output_constant_pool PARAMS ((rtx, rtx));
extern void s390_trampoline_template PARAMS ((FILE *));
extern void s390_initialize_trampoline PARAMS ((rtx, rtx, rtx));
extern rtx s390_gen_rtx_const_DI PARAMS ((int, int));
+extern void s390_output_dwarf_dtprel PARAMS ((FILE*, int, rtx));
extern void s390_machine_dependent_reorg PARAMS ((rtx));
extern int s390_agen_dep_p PARAMS ((rtx, rtx));
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 30e7918d1e3..3a6c213e2b4 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -1674,23 +1674,14 @@ s390_preferred_reload_class (op, class)
switch (GET_CODE (op))
{
/* Constants we cannot reload must be forced into the
- literal pool. For constants we *could* handle directly,
- it might still be preferable to put them in the pool and
- use a memory-to-memory instruction.
-
- However, try to avoid needlessly allocating a literal
- pool in a routine that wouldn't otherwise need any.
- Heuristically, we assume that 64-bit leaf functions
- typically don't need a literal pool, all others do. */
+ literal pool. */
+
case CONST_DOUBLE:
case CONST_INT:
- if (!legitimate_reload_constant_p (op))
- return NO_REGS;
-
- if (TARGET_64BIT && current_function_is_leaf)
+ if (legitimate_reload_constant_p (op))
return class;
-
- return NO_REGS;
+ else
+ return NO_REGS;
/* If a symbolic constant or a PLUS is reloaded,
it is most likely being used as an address, so
@@ -1879,6 +1870,22 @@ s390_decompose_address (addr, out)
disp = addr; /* displacement */
+ /* Prefer to use pointer as base, not index. */
+ if (base && indx)
+ {
+ int base_ptr = GET_CODE (base) == UNSPEC
+ || (REG_P (base) && REG_POINTER (base));
+ int indx_ptr = GET_CODE (indx) == UNSPEC
+ || (REG_P (indx) && REG_POINTER (indx));
+
+ if (!base_ptr && indx_ptr)
+ {
+ rtx tmp = base;
+ base = indx;
+ indx = tmp;
+ }
+ }
+
/* Validate base register. */
if (base)
{
@@ -3056,6 +3063,30 @@ s390_expand_cmpstr (target, op0, op1, len)
}
}
+/* This is called from dwarf2out.c via ASM_OUTPUT_DWARF_DTPREL.
+ We need to emit DTP-relative relocations. */
+
+void
+s390_output_dwarf_dtprel (file, size, x)
+ FILE *file;
+ int size;
+ rtx x;
+{
+ switch (size)
+ {
+ case 4:
+ fputs ("\t.long\t", file);
+ break;
+ case 8:
+ fputs ("\t.quad\t", file);
+ break;
+ default:
+ abort ();
+ }
+ output_addr_const (file, x);
+ fputs ("@DTPOFF", file);
+}
+
/* In the name of slightly smaller debug output, and to cater to
general assembler losage, recognize various UNSPEC sequences
and turn them back into a direct symbol reference. */
@@ -4748,11 +4779,21 @@ s390_optimize_prolog (temp_regno)
for (i = 6; i < 16; i++)
if (regs_ever_live[i])
- break;
+ if (!global_regs[i]
+ || i == STACK_POINTER_REGNUM
+ || i == RETURN_REGNUM
+ || i == BASE_REGISTER
+ || (flag_pic && i == (int)PIC_OFFSET_TABLE_REGNUM))
+ break;
for (j = 15; j > i; j--)
if (regs_ever_live[j])
- break;
+ if (!global_regs[j]
+ || j == STACK_POINTER_REGNUM
+ || j == RETURN_REGNUM
+ || j == BASE_REGISTER
+ || (flag_pic && j == (int)PIC_OFFSET_TABLE_REGNUM))
+ break;
if (i == 16)
{
@@ -4864,6 +4905,12 @@ s390_fixup_clobbered_return_reg (return_reg)
bool replacement_done = 0;
rtx insn;
+ /* If we never called __builtin_return_address, register 14
+ might have been used as temp during the prolog; we do
+ not want to touch those uses. */
+ if (!has_hard_reg_initial_val (Pmode, REGNO (return_reg)))
+ return false;
+
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
{
rtx reg, off, new_insn;
@@ -5046,7 +5093,7 @@ s390_frame_info ()
cfun->machine->save_fprs_p = 0;
if (TARGET_64BIT)
for (i = 24; i < 32; i++)
- if (regs_ever_live[i])
+ if (regs_ever_live[i] && !global_regs[i])
{
cfun->machine->save_fprs_p = 1;
break;
@@ -5070,8 +5117,11 @@ s390_frame_info ()
prolog/epilog code is modified again. */
for (i = 0; i < 16; i++)
- gprs_ever_live[i] = regs_ever_live[i];
+ gprs_ever_live[i] = regs_ever_live[i] && !global_regs[i];
+ if (flag_pic)
+ gprs_ever_live[PIC_OFFSET_TABLE_REGNUM] =
+ regs_ever_live[PIC_OFFSET_TABLE_REGNUM];
gprs_ever_live[BASE_REGISTER] = 1;
gprs_ever_live[RETURN_REGNUM] = 1;
gprs_ever_live[STACK_POINTER_REGNUM] = cfun->machine->frame_size > 0;
@@ -5108,7 +5158,7 @@ s390_arg_frame_offset ()
save_fprs_p = 0;
if (TARGET_64BIT)
for (i = 24; i < 32; i++)
- if (regs_ever_live[i])
+ if (regs_ever_live[i] && !global_regs[i])
{
save_fprs_p = 1;
break;
@@ -5337,12 +5387,12 @@ s390_emit_prologue ()
if (!TARGET_64BIT)
{
/* Save fpr 4 and 6. */
- if (regs_ever_live[18])
+ if (regs_ever_live[18] && !global_regs[18])
{
insn = save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 16, 18);
RTX_FRAME_RELATED_P (insn) = 1;
}
- if (regs_ever_live[19])
+ if (regs_ever_live[19] && !global_regs[19])
{
insn = save_fpr (stack_pointer_rtx, STACK_POINTER_OFFSET - 8, 19);
RTX_FRAME_RELATED_P (insn) = 1;
@@ -5385,6 +5435,16 @@ s390_emit_prologue ()
set_mem_alias_set (addr, s390_sr_alias_set);
insn = emit_insn (gen_move_insn (addr, temp_reg));
}
+
+ /* If we support asynchronous exceptions (e.g. for Java),
+ we need to make sure the backchain pointer is set up
+ before any possibly trapping memory access. */
+
+ if (TARGET_BACKCHAIN && flag_non_call_exceptions)
+ {
+ addr = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
+ emit_insn (gen_rtx_CLOBBER (VOIDmode, addr));
+ }
}
/* Save fprs 8 - 15 (64 bit ABI). */
@@ -5394,7 +5454,7 @@ s390_emit_prologue ()
insn = emit_insn (gen_add2_insn (temp_reg, GEN_INT(-64)));
for (i = 24; i < 32; i++)
- if (regs_ever_live[i])
+ if (regs_ever_live[i] && !global_regs[i])
{
rtx addr = plus_constant (stack_pointer_rtx,
cfun->machine->frame_size - 64 + (i-24)*8);
@@ -5492,14 +5552,14 @@ s390_emit_epilogue ()
}
else
{
- if (regs_ever_live[18])
+ if (regs_ever_live[18] && !global_regs[18])
{
if (area_bottom > STACK_POINTER_OFFSET - 16)
area_bottom = STACK_POINTER_OFFSET - 16;
if (area_top < STACK_POINTER_OFFSET - 8)
area_top = STACK_POINTER_OFFSET - 8;
}
- if (regs_ever_live[19])
+ if (regs_ever_live[19] && !global_regs[19])
{
if (area_bottom > STACK_POINTER_OFFSET - 8)
area_bottom = STACK_POINTER_OFFSET - 8;
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index dc877570445..15dc45c96b3 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */
/* Override the __fixdfdi etc. routines when building libgcc2.
??? This should be done in a cleaner way ... */
-#ifdef IN_LIBGCC2
+#if defined (IN_LIBGCC2) && !defined (__s390x__)
#include <s390/fixdfdi.h>
#endif
@@ -134,6 +134,17 @@ extern int target_flags;
#define CAN_DEBUG_WITHOUT_FP
+/* In libgcc2, determine target settings as compile-time constants. */
+#ifdef IN_LIBGCC2
+#undef TARGET_64BIT
+#ifdef __s390x__
+#define TARGET_64BIT 1
+#else
+#define TARGET_64BIT 0
+#endif
+#endif
+
+
/* Target machine storage layout. */
/* Everything is big-endian. */
@@ -143,7 +154,9 @@ extern int target_flags;
/* Width of a word, in units (bytes). */
#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
+#ifndef IN_LIBGCC2
#define MIN_UNITS_PER_WORD 4
+#endif
#define MAX_BITS_PER_WORD 64
/* Function arguments and return values are promoted to word size. */
@@ -921,6 +934,13 @@ extern int flag_pic;
"%ap", "%cc", "%fp" \
}
+/* Emit a dtp-relative reference to a TLS variable. */
+
+#ifdef HAVE_AS_TLS
+#define ASM_OUTPUT_DWARF_DTPREL(FILE, SIZE, X) \
+ s390_output_dwarf_dtprel (FILE, SIZE, X)
+#endif
+
/* Print operand X (an rtx) in assembler syntax to file FILE. */
#define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
#define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR)
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index fc8e33bfe23..5d632e7a917 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -608,7 +608,7 @@
(define_insn "*tsthiCCT_cconly"
[(set (reg 33)
- (compare (match_operand:HI 0 "nonimmediate_operand" "?Q,d")
+ (compare (match_operand:HI 0 "nonimmediate_operand" "Q,d")
(match_operand:HI 1 "const0_operand" "")))
(clobber (match_scratch:HI 2 "=d,X"))]
"s390_match_ccmode(insn, CCTmode)"
@@ -904,8 +904,8 @@
;
(define_insn "movti"
- [(set (match_operand:TI 0 "nonimmediate_operand" "=d,Q,d,m,Q")
- (match_operand:TI 1 "general_operand" "Q,d,dKm,d,Q"))]
+ [(set (match_operand:TI 0 "nonimmediate_operand" "=d,Q,d,o,Q")
+ (match_operand:TI 1 "general_operand" "Q,d,dKo,d,Q"))]
"TARGET_64BIT"
"@
lmg\\t%0,%N0,%1
@@ -913,7 +913,8 @@
#
#
mvc\\t%O0(16,%R0),%1"
- [(set_attr "op_type" "RSE,RSE,NN,NN,SS")])
+ [(set_attr "op_type" "RSE,RSE,NN,NN,SS")
+ (set_attr "type" "lm,stm,*,*,cs")])
(define_split
[(set (match_operand:TI 0 "nonimmediate_operand" "")
@@ -1027,8 +1028,8 @@
(set_attr "type" "larl")])
(define_insn "*movdi_64"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,m,!*f,!*f,!m,Q")
- (match_operand:DI 1 "general_operand" "d,m,d,*f,m,*f,Q"))]
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=d,d,m,!*f,!*f,!m,?Q")
+ (match_operand:DI 1 "general_operand" "d,m,d,*f,m,*f,?Q"))]
"TARGET_64BIT"
"@
lgr\\t%0,%1
@@ -1042,8 +1043,8 @@
(set_attr "type" "lr,load,store,floadd,floadd,fstored,cs")])
(define_insn "*movdi_31"
- [(set (match_operand:DI 0 "nonimmediate_operand" "=d,Q,d,m,!*f,!*f,!m,Q")
- (match_operand:DI 1 "general_operand" "Q,d,dKm,d,*f,m,*f,Q"))]
+ [(set (match_operand:DI 0 "nonimmediate_operand" "=d,Q,d,o,!*f,!*f,!m,Q")
+ (match_operand:DI 1 "general_operand" "Q,d,dKo,d,*f,m,*f,Q"))]
"!TARGET_64BIT"
"@
lm\\t%0,%N0,%1
@@ -1186,8 +1187,8 @@
[(set_attr "op_type" "RI")])
(define_insn "*movsi"
- [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,m,!*f,!*f,!m,Q")
- (match_operand:SI 1 "general_operand" "d,m,d,*f,m,*f,Q"))]
+ [(set (match_operand:SI 0 "nonimmediate_operand" "=d,d,m,!*f,!*f,!m,?Q")
+ (match_operand:SI 1 "general_operand" "d,m,d,*f,m,*f,?Q"))]
""
"@
lr\\t%0,%1
@@ -1216,8 +1217,8 @@
;
(define_insn "movhi"
- [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,m,Q")
- (match_operand:HI 1 "general_operand" "d,n,m,d,Q"))]
+ [(set (match_operand:HI 0 "nonimmediate_operand" "=d,d,d,m,?Q")
+ (match_operand:HI 1 "general_operand" "d,n,m,d,?Q"))]
""
"@
lr\\t%0,%1
@@ -1225,7 +1226,8 @@
lh\\t%0,%1
sth\\t%1,%0
mvc\\t%O0(2,%R0),%1"
- [(set_attr "op_type" "RR,RI,RX,RX,SS")])
+ [(set_attr "op_type" "RR,RI,RX,RX,SS")
+ (set_attr "type" "lr,*,*,store,cs")])
(define_peephole2
[(set (match_operand:HI 0 "register_operand" "")
@@ -1242,8 +1244,8 @@
;
(define_insn "movqi_64"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q,Q")
- (match_operand:QI 1 "general_operand" "d,n,m,d,n,Q"))]
+ [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q,?Q")
+ (match_operand:QI 1 "general_operand" "d,n,m,d,n,?Q"))]
"TARGET_64BIT"
"@
lr\\t%0,%1
@@ -1256,8 +1258,8 @@
(set_attr "type" "lr,*,*,store,store,cs")])
(define_insn "movqi"
- [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q,Q")
- (match_operand:QI 1 "general_operand" "d,n,m,d,n,Q"))]
+ [(set (match_operand:QI 0 "nonimmediate_operand" "=d,d,d,m,Q,?Q")
+ (match_operand:QI 1 "general_operand" "d,n,m,d,n,?Q"))]
""
"@
lr\\t%0,%1
@@ -1266,7 +1268,8 @@
stc\\t%1,%0
mvi\\t%0,%b1
mvc\\t%O0(1,%R0),%1"
- [(set_attr "op_type" "RR,RI,RX,RX,SI,SS")])
+ [(set_attr "op_type" "RR,RI,RX,RX,SI,SS")
+ (set_attr "type" "lr,*,*,store,store,cs")])
(define_peephole2
[(set (match_operand:QI 0 "nonimmediate_operand" "")
@@ -1335,8 +1338,8 @@
}")
(define_insn "*movdf_64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,d,m,Q")
- (match_operand:DF 1 "general_operand" "f,m,f,d,m,d,Q"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,d,m,?Q")
+ (match_operand:DF 1 "general_operand" "f,m,f,d,m,d,?Q"))]
"TARGET_64BIT"
"@
ldr\\t%0,%1
@@ -1350,8 +1353,8 @@
(set_attr "type" "floadd,floadd,fstored,lr,load,store,cs")])
(define_insn "*movdf_31"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,Q,d,m,Q")
- (match_operand:DF 1 "general_operand" "f,m,f,Q,d,dKm,d,Q"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,m,d,Q,d,o,Q")
+ (match_operand:DF 1 "general_operand" "f,m,f,Q,d,dKo,d,Q"))]
"!TARGET_64BIT"
"@
ldr\\t%0,%1
@@ -1435,8 +1438,8 @@
}")
(define_insn "*movsf"
- [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,m,d,d,m,Q")
- (match_operand:SF 1 "general_operand" "f,m,f,d,m,d,Q"))]
+ [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,m,d,d,m,?Q")
+ (match_operand:SF 1 "general_operand" "f,m,f,d,m,d,?Q"))]
""
"@
ler\\t%0,%1
@@ -2083,8 +2086,7 @@
operands[2] = GEN_INT (32 - INTVAL (operands[2]));
operands[1] = change_address (operands[1], QImode, 0);
}"
- [(set_attr "type" "o2")
- (set_attr "atype" "agen")])
+ [(set_attr "atype" "agen")])
(define_insn_and_split "*extracthi"
[(set (match_operand:SI 0 "register_operand" "=d")
@@ -2105,8 +2107,7 @@
operands[2] = GEN_INT (32 - INTVAL (operands[2]));
operands[1] = change_address (operands[1], HImode, 0);
}"
- [(set_attr "type" "o2")
- (set_attr "atype" "agen")])
+ [(set_attr "atype" "agen")])
;
; extendsidi2 instruction pattern(s).
@@ -2401,8 +2402,7 @@
[(set (strict_low_part (match_dup 2)) (match_dup 1))
(clobber (reg:CC 33))])]
"operands[2] = gen_lowpart (HImode, operands[0]);"
- [(set_attr "type" "o2")
- (set_attr "atype" "agen")])
+ [(set_attr "atype" "agen")])
;
; zero_extendqisi2 instruction pattern(s).
@@ -2436,8 +2436,7 @@
[(set (match_dup 0) (const_int 0))
(set (strict_low_part (match_dup 2)) (match_dup 1))]
"operands[2] = gen_lowpart (QImode, operands[0]);"
- [(set_attr "type" "o2")
- (set_attr "atype" "agen")])
+ [(set_attr "atype" "agen")])
;
; zero_extendqihi2 instruction pattern(s).
@@ -2471,8 +2470,7 @@
[(set (match_dup 0) (const_int 0))
(set (strict_low_part (match_dup 2)) (match_dup 1))]
"operands[2] = gen_lowpart (QImode, operands[0]);"
- [(set_attr "type" "o2")
- (set_attr "atype" "agen")])
+ [(set_attr "atype" "agen")])
;
@@ -3036,7 +3034,7 @@
(define_insn_and_split "*adddi3_31"
[(set (match_operand:DI 0 "register_operand" "=&d")
(plus:DI (match_operand:DI 1 "nonimmediate_operand" "%0")
- (match_operand:DI 2 "general_operand" "dm") ) )
+ (match_operand:DI 2 "general_operand" "do") ) )
(clobber (reg:CC 33))]
"!TARGET_64BIT"
"#"
@@ -3057,15 +3055,14 @@
[(set (match_dup 3) (plus:SI (match_dup 3) (const_int 1)))
(clobber (reg:CC 33))])
(match_dup 9)]
- "operands[3] = operand_subword (operands[0], 0, 1, DImode);
- operands[4] = operand_subword (operands[1], 0, 1, DImode);
- operands[5] = operand_subword (operands[2], 0, 1, DImode);
- operands[6] = operand_subword (operands[0], 1, 1, DImode);
- operands[7] = operand_subword (operands[1], 1, 1, DImode);
- operands[8] = operand_subword (operands[2], 1, 1, DImode);
+ "operands[3] = operand_subword (operands[0], 0, 0, DImode);
+ operands[4] = operand_subword (operands[1], 0, 0, DImode);
+ operands[5] = operand_subword (operands[2], 0, 0, DImode);
+ operands[6] = operand_subword (operands[0], 1, 0, DImode);
+ operands[7] = operand_subword (operands[1], 1, 0, DImode);
+ operands[8] = operand_subword (operands[2], 1, 0, DImode);
operands[9] = gen_label_rtx ();"
- [(set_attr "op_type" "NN")
- (set_attr "type" "o3")])
+ [(set_attr "op_type" "NN")])
(define_expand "adddi3"
[(parallel
@@ -3501,7 +3498,7 @@
(define_insn_and_split "*subdi3_31"
[(set (match_operand:DI 0 "register_operand" "=&d")
(minus:DI (match_operand:DI 1 "register_operand" "0")
- (match_operand:DI 2 "general_operand" "dm") ) )
+ (match_operand:DI 2 "general_operand" "do") ) )
(clobber (reg:CC 33))]
"!TARGET_64BIT"
"#"
@@ -3522,15 +3519,14 @@
[(set (match_dup 3) (plus:SI (match_dup 3) (const_int -1)))
(clobber (reg:CC 33))])
(match_dup 9)]
- "operands[3] = operand_subword (operands[0], 0, 1, DImode);
- operands[4] = operand_subword (operands[1], 0, 1, DImode);
- operands[5] = operand_subword (operands[2], 0, 1, DImode);
- operands[6] = operand_subword (operands[0], 1, 1, DImode);
- operands[7] = operand_subword (operands[1], 1, 1, DImode);
- operands[8] = operand_subword (operands[2], 1, 1, DImode);
+ "operands[3] = operand_subword (operands[0], 0, 0, DImode);
+ operands[4] = operand_subword (operands[1], 0, 0, DImode);
+ operands[5] = operand_subword (operands[2], 0, 0, DImode);
+ operands[6] = operand_subword (operands[0], 1, 0, DImode);
+ operands[7] = operand_subword (operands[1], 1, 0, DImode);
+ operands[8] = operand_subword (operands[2], 1, 0, DImode);
operands[9] = gen_label_rtx ();"
- [(set_attr "op_type" "NN")
- (set_attr "type" "o3")])
+ [(set_attr "op_type" "NN")])
(define_expand "subdi3"
[(parallel
@@ -7035,14 +7031,21 @@
(label_ref (match_operand 1 "" "")))
(use (label_ref (match_operand 2 "" "")))]
""
- "*
{
- if (s390_nr_constants) {
- output_asm_insn (\"bras\\t%0,%2\", operands);
- s390_output_constant_pool (operands[1], operands[2]);
- }
- return \"\";
-}"
+ if (s390_nr_constants)
+ {
+ output_asm_insn ("bras\\t%0,%2", operands);
+ s390_output_constant_pool (operands[1], operands[2]);
+ }
+ else if (flag_pic)
+ {
+ /* We need the anchor label in any case. */
+ (*targetm.asm_out.internal_label) (asm_out_file, "L",
+ CODE_LABEL_NUMBER (operands[1]));
+ }
+
+ return "";
+}
[(set_attr "op_type" "NN")
(set_attr "type" "larl")])
@@ -7052,13 +7055,14 @@
(label_ref (match_operand 1 "" "")))
(use (label_ref (match_operand 2 "" "")))]
""
- "*
{
- if (s390_nr_constants) {
- output_asm_insn (\"larl\\t%0,%1\", operands);
- s390_output_constant_pool (operands[1], operands[2]);
- }
- return \"\";
-}"
+ if (s390_nr_constants)
+ {
+ output_asm_insn ("larl\\t%0,%1", operands);
+ s390_output_constant_pool (operands[1], operands[2]);
+ }
+
+ return "";
+}
[(set_attr "op_type" "NN")
(set_attr "type" "larl")])
diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h
index 858adb1d2c4..1eed0899c0e 100644
--- a/gcc/config/sh/elf.h
+++ b/gcc/config/sh/elf.h
@@ -68,9 +68,12 @@ Boston, MA 02111-1307, USA. */
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE (TARGET_SH5 ? "long int" : "int")
+
/* Pass -ml and -mrelax to the assembler and linker. */
#undef ASM_SPEC
-#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax} \
+#define ASM_SPEC SH_ASM_SPEC
+#undef SUBTARGET_ASM_ISA_SPEC
+#define SUBTARGET_ASM_ISA_SPEC "\
%{m5-compact:--isa=SHcompact} %{m5-compact-nofpu:--isa=SHcompact} \
%{m5-32media:--isa=SHmedia --abi=32} %{m5-32media-nofpu:--isa=SHmedia --abi=32} \
%{m5-64media:--isa=SHmedia --abi=64} %{m5-64media-nofpu:--isa=SHmedia --abi=64}"
diff --git a/gcc/config/sh/netbsd-elf.h b/gcc/config/sh/netbsd-elf.h
index 513b39f4704..d6ccfe0a204 100644
--- a/gcc/config/sh/netbsd-elf.h
+++ b/gcc/config/sh/netbsd-elf.h
@@ -1,5 +1,5 @@
/* Definitions for SH running NetBSD using ELF
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Wasabi Systems, Inc.
This file is part of GNU CC.
@@ -52,8 +52,6 @@ Boston, MA 02111-1307, USA. */
do \
{ \
NETBSD_OS_CPP_BUILTINS_ELF(); \
- if (TARGET_SHMEDIA64) \
- NETBSD_OS_CPP_BUILTINS_LP64(); \
builtin_define ("__NO_LEADING_UNDERSCORES__"); \
} \
while (0)
diff --git a/gcc/config/sh/rtems.h b/gcc/config/sh/rtems.h
index b52ef7216ec..f501d19240f 100644
--- a/gcc/config/sh/rtems.h
+++ b/gcc/config/sh/rtems.h
@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
/* Specify predefined symbols in preprocessor. */
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-D__sh__ -D__rtems__ \
- -Asystem=rtems -Acpu=sh -Amachine=sh"
+#define TARGET_OS_CPP_BUILTINS() do { \
+ builtin_define( "__rtems__" ); \
+ builtin_assert( "system=rtems" ); \
+} while (0)
diff --git a/gcc/config/sh/rtemself.h b/gcc/config/sh/rtemself.h
index 6177c810dd1..ee98cda91f3 100644
--- a/gcc/config/sh/rtemself.h
+++ b/gcc/config/sh/rtemself.h
@@ -21,6 +21,8 @@ Boston, MA 02111-1307, USA. */
/* Specify predefined symbols in preprocessor. */
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-D__sh__ -D__ELF__ -D__rtems__ \
- -Asystem=rtems -Acpu=sh -Amachine=sh"
+#define TARGET_OS_CPP_BUILTINS() do { \
+ builtin_define( "__rtems__" ); \
+ builtin_define( "__ELF__" ); \
+ builtin_assert( "system=rtems" ); \
+} while (0)
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 3c7549b29b5..54ad2cfba00 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -45,6 +45,7 @@ Boston, MA 02111-1307, USA. */
#include "target-def.h"
#include "real.h"
#include "langhooks.h"
+#include "basic-block.h"
int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
@@ -212,6 +213,8 @@ static const char *sh_strip_name_encoding PARAMS ((const char *));
static void sh_init_builtins PARAMS ((void));
static void sh_media_init_builtins PARAMS ((void));
static rtx sh_expand_builtin PARAMS ((tree, rtx, rtx, enum machine_mode, int));
+static void sh_output_mi_thunk PARAMS ((FILE *, tree, HOST_WIDE_INT,
+ HOST_WIDE_INT, tree));
static int flow_dependent_p PARAMS ((rtx, rtx));
static void flow_dependent_p_1 PARAMS ((rtx, rtx, void *));
static int shiftcosts PARAMS ((rtx));
@@ -242,6 +245,12 @@ static int sh_address_cost PARAMS ((rtx));
#undef TARGET_ASM_FUNCTION_EPILOGUE
#define TARGET_ASM_FUNCTION_EPILOGUE sh_output_function_epilogue
+#undef TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK sh_output_mi_thunk
+
+#undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true
+
#undef TARGET_INSERT_ATTRIBUTES
#define TARGET_INSERT_ATTRIBUTES sh_insert_attributes
@@ -1048,6 +1057,7 @@ output_far_jump (insn, op)
const char *jump;
int far;
int offset = branch_dest (insn) - INSN_ADDRESSES (INSN_UID (insn));
+ rtx prev;
this.lab = gen_label_rtx ();
@@ -1072,10 +1082,10 @@ output_far_jump (insn, op)
jump = "mov.l %O0,%1; jmp @%1";
}
/* If we have a scratch register available, use it. */
- if (GET_CODE (PREV_INSN (insn)) == INSN
- && INSN_CODE (PREV_INSN (insn)) == CODE_FOR_indirect_jump_scratch)
+ if (GET_CODE ((prev = prev_nonnote_insn (insn))) == INSN
+ && INSN_CODE (prev) == CODE_FOR_indirect_jump_scratch)
{
- this.reg = SET_DEST (PATTERN (PREV_INSN (insn)));
+ this.reg = SET_DEST (XVECEXP (PATTERN (prev), 0, 0));
if (REGNO (this.reg) == R0_REG && flag_pic && ! TARGET_SH2)
jump = "mov.l r1,@-r15; mova %O0,r0; mov.l @r0,r1; add r1,r0; mov.l @r15+,r1; jmp @%1";
output_asm_insn (jump, &this.lab);
@@ -3016,7 +3026,7 @@ find_barrier (num_mova, mova, from)
{
if (num_mova)
num_mova--;
- if (barrier_align (next_real_insn (from)) == CACHE_LOG)
+ if (barrier_align (next_real_insn (from)) == align_jumps_log)
{
/* We have just passed the barrier in front of the
ADDR_DIFF_VEC, which is stored in found_barrier. Since
@@ -3454,6 +3464,13 @@ gen_block_redirect (jump, addr, need_block)
rtx insn = emit_insn_before (gen_indirect_jump_scratch
(reg, GEN_INT (INSN_UID (JUMP_LABEL (jump))))
, jump);
+ /* ??? We would like this to have the scope of the jump, but that
+ scope will change when a delay slot insn of an inner scope is added.
+ Hence, after delay slot scheduling, we'll have to expect
+ NOTE_INSN_BLOCK_END notes between the indirect_jump_scratch and
+ the jump. */
+
+ INSN_SCOPE (insn) = INSN_SCOPE (jump);
INSN_CODE (insn) = CODE_FOR_indirect_jump_scratch;
return insn;
}
@@ -3596,14 +3613,14 @@ barrier_align (barrier_or_label)
return ((TARGET_SMALLCODE
|| ((unsigned) XVECLEN (pat, 1) * GET_MODE_SIZE (GET_MODE (pat))
<= (unsigned)1 << (CACHE_LOG - 2)))
- ? 1 << TARGET_SHMEDIA : CACHE_LOG);
+ ? 1 << TARGET_SHMEDIA : align_jumps_log);
}
if (TARGET_SMALLCODE)
return 0;
if (! TARGET_SH2 || ! optimize)
- return CACHE_LOG;
+ return align_jumps_log;
/* When fixing up pcloads, a constant table might be inserted just before
the basic block that ends with the barrier. Thus, we can't trust the
@@ -3679,7 +3696,7 @@ barrier_align (barrier_or_label)
}
}
- return CACHE_LOG;
+ return align_jumps_log;
}
/* If we are inside a phony loop, almost any kind of label can turn up as the
@@ -3704,10 +3721,7 @@ sh_loop_align (label)
|| recog_memoized (next) == CODE_FOR_consttable_2)
return 0;
- if (TARGET_SH5)
- return 3;
-
- return 2;
+ return align_loops_log;
}
/* Exported to toplev.c.
@@ -4418,9 +4432,6 @@ split_branches (first)
If relaxing, output the label and pseudo-ops used to link together
calls and the instruction which set the registers. */
-/* ??? This is unnecessary, and probably should be deleted. This makes
- the insn_addresses declaration above unnecessary. */
-
/* ??? The addresses printed by this routine for insns are nonsense for
insns which are inside of a sequence where none of the inner insns have
variable length. This is because the second pass of shorten_branches
@@ -5187,6 +5198,7 @@ sh_expand_epilogue ()
int sp_in_r0 = 0;
int align;
rtx r0 = gen_rtx_REG (Pmode, R0_REG);
+ int tmp_regno = R20_REG;
/* We loop twice: first, we save 8-byte aligned registers in the
higher addresses, that are known to be aligned. Then, we
@@ -5301,10 +5313,15 @@ sh_expand_epilogue ()
}
else if (TARGET_REGISTER_P (i))
{
- rtx r1 = gen_rtx_REG (mode, R1_REG);
-
- insn = emit_move_insn (r1, mem_rtx);
- mem_rtx = r1;
+ rtx tmp_reg = gen_rtx_REG (mode, tmp_regno);
+
+ /* Give the scheduler a bit of freedom by using R20..R23
+ in a round-robin fashion. Don't use R1 here because
+ we want to use it for EH_RETURN_STACKADJ_RTX. */
+ insn = emit_move_insn (tmp_reg, mem_rtx);
+ mem_rtx = tmp_reg;
+ if (++tmp_regno > R23_REG)
+ tmp_regno = R20_REG;
}
insn = emit_move_insn (reg_rtx, mem_rtx);
@@ -7163,7 +7180,7 @@ fpscr_set_from_mem (mode, regs_live)
enum attr_fp_mode fp_mode = mode;
rtx addr_reg = get_free_reg (regs_live);
- if (fp_mode == (enum attr_fp_mode) NORMAL_MODE (FP_MODE))
+ if (fp_mode == (enum attr_fp_mode) ACTUAL_NORMAL_MODE (FP_MODE))
emit_insn (gen_fpu_switch1 (addr_reg));
else
emit_insn (gen_fpu_switch0 (addr_reg));
@@ -7917,7 +7934,8 @@ sh_function_ok_for_sibcall (decl, exp)
{
return (decl
&& (! TARGET_SHCOMPACT
- || current_function_args_info.stack_regs == 0));
+ || current_function_args_info.stack_regs == 0)
+ && ! sh_cfun_interrupt_handler_p ());
}
/* Machine specific built-in functions. */
@@ -8366,4 +8384,187 @@ sh_register_operand (op, mode)
return register_operand (op, mode);
}
+static rtx emit_load_ptr PARAMS ((rtx, rtx));
+
+static rtx
+emit_load_ptr (reg, addr)
+ rtx reg, addr;
+{
+ rtx mem = gen_rtx_MEM (ptr_mode, addr);
+
+ if (Pmode != ptr_mode)
+ mem = gen_rtx_SIGN_EXTEND (Pmode, mem);
+ return emit_move_insn (reg, mem);
+}
+
+void
+sh_output_mi_thunk (file, thunk_fndecl, delta, vcall_offset, function)
+ FILE *file;
+ tree thunk_fndecl ATTRIBUTE_UNUSED;
+ HOST_WIDE_INT delta;
+ HOST_WIDE_INT vcall_offset;
+ tree function;
+{
+ CUMULATIVE_ARGS cum;
+ int structure_value_byref = 0;
+ rtx this, this_value, sibcall, insns, funexp;
+ tree funtype = TREE_TYPE (function);
+ int simple_add
+ = (TARGET_SHMEDIA ? CONST_OK_FOR_J (delta) : CONST_OK_FOR_I (delta));
+ int did_load = 0;
+ rtx scratch0, scratch1, scratch2;
+
+ reload_completed = 1;
+ no_new_pseudos = 1;
+ current_function_uses_only_leaf_regs = 1;
+
+ emit_note (NULL, NOTE_INSN_PROLOGUE_END);
+
+ /* Find the "this" pointer. We have such a wide range of ABIs for the
+ SH that it's best to do this completely machine independently.
+ "this" is passed as first argument, unless a structure return pointer
+ comes first, in which case "this" comes second. */
+ INIT_CUMULATIVE_ARGS (cum, funtype, NULL_RTX, 0);
+#ifndef PCC_STATIC_STRUCT_RETURN
+ if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function))))
+ structure_value_byref = 1;
+#endif /* not PCC_STATIC_STRUCT_RETURN */
+ if (structure_value_byref && struct_value_rtx == 0)
+ {
+ tree ptype = build_pointer_type (TREE_TYPE (funtype));
+
+ FUNCTION_ARG_ADVANCE (cum, Pmode, ptype, 1);
+ }
+ this = FUNCTION_ARG (cum, Pmode, ptr_type_node, 1);
+
+ /* For SHcompact, we only have r0 for a scratch register: r1 is the
+ static chain pointer (even if you can't have nested virtual functions
+ right now, someone might implement them sometime), and the rest of the
+ registers are used for argument passing, are callee-saved, or reserved. */
+ scratch0 = scratch1 = scratch2 = gen_rtx_REG (Pmode, 0);
+ if (! TARGET_SH5)
+ {
+ scratch1 = gen_rtx_REG (ptr_mode, 1);
+ /* N.B., if not TARGET_HITACHI, register 2 is used to pass the pointer
+ pointing where to return struct values. */
+ scratch2 = gen_rtx_REG (Pmode, 3);
+ }
+ else if (TARGET_SHMEDIA)
+ {
+ scratch1 = gen_rtx_REG (ptr_mode, 21);
+ scratch2 = gen_rtx_REG (Pmode, TR0_REG);
+ }
+
+ this_value = plus_constant (this, delta);
+ if (vcall_offset
+ && (simple_add || scratch0 != scratch1)
+ && strict_memory_address_p (ptr_mode, this_value))
+ {
+ emit_load_ptr (scratch0, this_value);
+ did_load = 1;
+ }
+
+ if (!delta)
+ ; /* Do nothing. */
+ else if (simple_add)
+ emit_move_insn (this, this_value);
+ else
+ {
+ emit_move_insn (scratch1, GEN_INT (delta));
+ emit_insn (gen_add2_insn (this, scratch1));
+ }
+
+ if (vcall_offset)
+ {
+ rtx offset_addr;
+
+ if (!did_load)
+ emit_load_ptr (scratch0, this);
+
+ offset_addr = plus_constant (scratch0, vcall_offset);
+ if (strict_memory_address_p (ptr_mode, offset_addr))
+ ; /* Do nothing. */
+ else if (! TARGET_SH5)
+ {
+ /* scratch0 != scratch1, and we have indexed loads. Get better
+ schedule by loading the offset into r1 and using an indexed
+ load - then the load of r1 can issue before the load from
+ (this + delta) finishes. */
+ emit_move_insn (scratch1, GEN_INT (vcall_offset));
+ offset_addr = gen_rtx_PLUS (Pmode, scratch0, scratch1);
+ }
+ else if (TARGET_SHMEDIA
+ ? CONST_OK_FOR_J (vcall_offset)
+ : CONST_OK_FOR_I (vcall_offset))
+ {
+ emit_insn (gen_add2_insn (scratch0, GEN_INT (vcall_offset)));
+ offset_addr = scratch0;
+ }
+ else if (scratch0 != scratch1)
+ {
+ emit_move_insn (scratch1, GEN_INT (vcall_offset));
+ emit_insn (gen_add2_insn (scratch0, scratch1));
+ offset_addr = scratch0;
+ }
+ else
+ abort (); /* FIXME */
+ emit_load_ptr (scratch0, offset_addr);
+
+ if (Pmode != ptr_mode)
+ scratch0 = gen_rtx_TRUNCATE (ptr_mode, scratch0);
+ emit_insn (gen_add2_insn (this, scratch0));
+ }
+
+ /* Generate a tail call to the target function. */
+ if (! TREE_USED (function))
+ {
+ assemble_external (function);
+ TREE_USED (function) = 1;
+ }
+ funexp = XEXP (DECL_RTL (function), 0);
+ emit_move_insn (scratch2, funexp);
+ funexp = gen_rtx_MEM (FUNCTION_MODE, scratch2);
+ sibcall = emit_call_insn (gen_sibcall (funexp, const0_rtx, NULL_RTX));
+ SIBLING_CALL_P (sibcall) = 1;
+ use_reg (&CALL_INSN_FUNCTION_USAGE (sibcall), this);
+ emit_barrier ();
+
+ /* Run just enough of rest_of_compilation to do scheduling and get
+ the insns emitted. Note that use_thunk calls
+ assemble_start_function and assemble_end_function. */
+ insns = get_insns ();
+
+ if (optimize > 0 && flag_schedule_insns_after_reload)
+ {
+
+ find_basic_blocks (insns, max_reg_num (), rtl_dump_file);
+ life_analysis (insns, rtl_dump_file, PROP_FINAL);
+
+ split_all_insns (1);
+
+ schedule_insns (rtl_dump_file);
+ }
+
+ MACHINE_DEPENDENT_REORG (insns);
+
+ if (optimize > 0 && flag_delayed_branch)
+ dbr_schedule (insns, rtl_dump_file);
+ shorten_branches (insns);
+ final_start_function (insns, file, 1);
+ final (insns, file, 1, 0);
+ final_end_function ();
+
+ if (optimize > 0 && flag_schedule_insns_after_reload)
+ {
+ /* Release all memory allocated by flow. */
+ free_basic_block_vars (0);
+
+ /* Release all memory held by regsets now. */
+ regset_release_memory ();
+ }
+
+ reload_completed = 0;
+ no_new_pseudos = 0;
+}
+
#include "gt-sh.h"
diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h
index 82325b89d81..1b2f3816e1c 100644
--- a/gcc/config/sh/sh.h
+++ b/gcc/config/sh/sh.h
@@ -359,9 +359,21 @@ extern int target_flags;
{ "subtarget_link_emul_suffix", SUBTARGET_LINK_EMUL_SUFFIX }, \
{ "subtarget_link_spec", SUBTARGET_LINK_SPEC }, \
{ "subtarget_asm_endian_spec", SUBTARGET_ASM_ENDIAN_SPEC }, \
+ { "subtarget_asm_relax_spec", SUBTARGET_ASM_RELAX_SPEC }, \
+ { "subtarget_asm_isa_spec", SUBTARGET_ASM_ISA_SPEC }, \
SUBTARGET_EXTRA_SPECS
-#define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax}"
+#if TARGET_CPU_DEFAULT & HARD_SH4_BIT
+#define SUBTARGET_ASM_RELAX_SPEC "%{!m[1235]*:-isa=sh4}"
+#else
+#define SUBTARGET_ASM_RELAX_SPEC "%{m4*:-isa=sh4}"
+#endif
+
+#define SH_ASM_SPEC \
+ "%(subtarget_asm_endian_spec) %{mrelax:-relax %(subtarget_asm_relax_spec)}\
+%(subtarget_asm_isa_spec)"
+
+#define ASM_SPEC SH_ASM_SPEC
#ifndef SUBTARGET_ASM_ENDIAN_SPEC
#if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT
@@ -371,6 +383,8 @@ extern int target_flags;
#endif
#endif
+#define SUBTARGET_ASM_ISA_SPEC ""
+
#define LINK_EMUL_PREFIX "sh%{ml:l}"
#if TARGET_CPU_DEFAULT & SH5_BIT
@@ -489,6 +503,13 @@ do { \
flag_schedule_insns = 0; \
} \
\
+ if (align_loops == 0) \
+ align_loops = 1 << (TARGET_SH5 ? 3 : 2); \
+ if (align_jumps == 0) \
+ align_jumps = 1 << CACHE_LOG; \
+ else if (align_jumps < (TARGET_SHMEDIA ? 4 : 2)) \
+ align_jumps = TARGET_SHMEDIA ? 4 : 2; \
+ \
/* Allocation boundary (in *bytes*) for the code of a function. \
SH1: 32 bit alignment is faster, because instructions are always \
fetched as a pair from a longword boundary. \
@@ -496,6 +517,20 @@ do { \
if (align_functions == 0) \
align_functions \
= TARGET_SMALLCODE ? FUNCTION_BOUNDARY/8 : (1 << CACHE_LOG); \
+ /* The linker relaxation code breaks when a function contains \
+ alignments that are larger than that at the start of a \
+ compilation unit. */ \
+ if (TARGET_RELAX) \
+ { \
+ int min_align \
+ = align_loops > align_jumps ? align_loops : align_jumps; \
+ \
+ /* Also take possible .long constants / mova tables int account. */\
+ if (min_align < 4) \
+ min_align = 4; \
+ if (align_functions < min_align) \
+ align_functions = min_align; \
+ } \
} while (0)
/* Target machine storage layout. */
@@ -902,10 +937,10 @@ extern char sh_additional_register_names[ADDREGNAMES_SIZE] \
#define HARD_REGNO_NREGS(REGNO, MODE) \
(XD_REGISTER_P (REGNO) \
- ? (GET_MODE_SIZE (MODE) / (2 * UNITS_PER_WORD)) \
+ ? ((GET_MODE_SIZE (MODE) + (2*UNITS_PER_WORD - 1)) / (2*UNITS_PER_WORD)) \
: (TARGET_SHMEDIA && FP_REGISTER_P (REGNO)) \
? ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD/2 - 1) / (UNITS_PER_WORD/2)) \
- : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)) \
+ : ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD))
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
We can allow any mode in any general register. The special registers
@@ -1360,8 +1395,9 @@ extern enum reg_class reg_class_from_letter[];
? R0_REGS \
: (CLASS == FPUL_REGS \
&& ((GET_CODE (X) == REG \
- && (REGNO (X) == MACL_REG || REGNO (X) == MACH_REG \
- || REGNO (X) == T_REG)))) \
+ && (REGNO (X) == MACL_REG || REGNO (X) == MACH_REG \
+ || REGNO (X) == T_REG)) \
+ || GET_CODE (X) == PLUS)) \
? GENERAL_REGS \
: CLASS == FPUL_REGS && immediate_operand ((X), (MODE)) \
? (GET_CODE (X) == CONST_INT && CONST_OK_FOR_I (INTVAL (X)) \
@@ -3252,10 +3288,12 @@ extern int rtx_equal_function_value_matters;
#define OPTIMIZE_MODE_SWITCHING(ENTITY) TARGET_SH4
+#define ACTUAL_NORMAL_MODE(ENTITY) \
+ (TARGET_FPU_SINGLE ? FP_MODE_SINGLE : FP_MODE_DOUBLE)
+
#define NORMAL_MODE(ENTITY) \
(sh_cfun_interrupt_handler_p () ? FP_MODE_NONE \
- : TARGET_FPU_SINGLE ? FP_MODE_SINGLE \
- : FP_MODE_DOUBLE)
+ : ACTUAL_NORMAL_MODE (ENTITY))
#define EPILOGUE_USES(REGNO) ((TARGET_SH2E || TARGET_SH4) \
&& (REGNO) == FPSCR_REG)
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index f26d2b37e50..47d7ae84f85 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -391,9 +391,9 @@
(eq_attr "type" "jump")
(cond [(eq_attr "med_branch_p" "yes")
(const_int 2)
- (and (eq (symbol_ref "GET_CODE (PREV_INSN (insn))")
+ (and (eq (symbol_ref "GET_CODE (prev_nonnote_insn (insn))")
(symbol_ref "INSN"))
- (eq (symbol_ref "INSN_CODE (PREV_INSN (insn))")
+ (eq (symbol_ref "INSN_CODE (prev_nonnote_insn (insn))")
(symbol_ref "code_for_indirect_jump_scratch")))
(if_then_else (eq_attr "braf_branch_p" "yes")
(const_int 6)
@@ -3667,7 +3667,7 @@
[(set (match_operand:SI 2 "" "=&r")
(match_operand:QI 1 "inqhi_operand" ""))
(set (match_operand:QI 0 "arith_reg_operand" "=r")
- (truncate:HI (match_dup 3)))]
+ (truncate:QI (match_dup 3)))]
"TARGET_SHMEDIA"
"
{
@@ -5035,9 +5035,14 @@
;; This one has the additional purpose to record a possible scratch register
;; for the following branch.
+;; ??? Unfortunately, just setting the scratch register is not good enough,
+;; because the insn then might be deemed dead and deleted. And we can't
+;; make the use in the jump insn explicit because that would disable
+;; delay slot scheduling from the target.
(define_insn "indirect_jump_scratch"
[(set (match_operand:SI 0 "register_operand" "=r")
- (unspec:SI [(match_operand 1 "const_int_operand" "")] UNSPEC_BBR))]
+ (unspec:SI [(match_operand 1 "const_int_operand" "")] UNSPEC_BBR))
+ (set (pc) (unspec [(const_int 0)] UNSPEC_BBR))]
"TARGET_SH1"
""
[(set_attr "length" "0")])
@@ -5475,6 +5480,19 @@
[(set_attr "type" "jump")
(set_attr "needs_delay_slot" "yes")])
+;; ??? It would be much saner to explicitly use the scratch register
+;; in the jump insn, and have indirect_jump_scratch only set it,
+;; but fill_simple_delay_slots would refuse to do delay slot filling
+;; from the target then, as it uses simplejump_p.
+;;(define_insn "jump_compact_far"
+;; [(set (pc)
+;; (label_ref (match_operand 0 "" "")))
+;; (use (match_operand 1 "register_operand" "r")]
+;; "TARGET_SH1"
+;; "* return output_far_jump(insn, operands[0], operands[1]);"
+;; [(set_attr "type" "jump")
+;; (set_attr "needs_delay_slot" "yes")])
+
(define_insn "jump_media"
[(set (pc)
(match_operand:DI 0 "target_operand" "b"))]
diff --git a/gcc/config/sparc/freebsd.h b/gcc/config/sparc/freebsd.h
index 3bc6b4f2b7e..bec5a231735 100644
--- a/gcc/config/sparc/freebsd.h
+++ b/gcc/config/sparc/freebsd.h
@@ -26,7 +26,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Because we include sparc/sysv4.h. */
#undef CPP_PREDEFINES
-#define CPP_PREDEFINES FBSD_CPP_PREDEFINES
+/* Do not define it here, we now use TARGET_OS_CPP_BUILTINS. */
#define LINK_SPEC "%(link_arch) \
%{!mno-relax:%{!r:-relax}} \
diff --git a/gcc/config/sparc/netbsd-elf.h b/gcc/config/sparc/netbsd-elf.h
index 7e0d70d9e79..65901c8bf0b 100644
--- a/gcc/config/sparc/netbsd-elf.h
+++ b/gcc/config/sparc/netbsd-elf.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for ELF on NetBSD/sparc
and NetBSD/sparc64.
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
Contributed by Matthew Green (mrg@eterna.com.au).
This file is part of GNU CC.
@@ -26,7 +26,6 @@ Boston, MA 02111-1307, USA. */
NETBSD_OS_CPP_BUILTINS_ELF(); \
if (TARGET_ARCH64) \
{ \
- NETBSD_OS_CPP_BUILTINS_LP64(); \
builtin_define ("__sparc64__"); \
builtin_define ("__sparc_v9__"); \
} \
diff --git a/gcc/config/sparc/sol2-gas-bi.h b/gcc/config/sparc/sol2-gas-bi.h
index 0b6cb618d36..2198fbeeaf9 100644
--- a/gcc/config/sparc/sol2-gas-bi.h
+++ b/gcc/config/sparc/sol2-gas-bi.h
@@ -1,5 +1,5 @@
/* Definitions of target machine for GNU compiler, for bi-arch SPARC
running Solaris 2 using the GNU assembler. */
-#undef AS_SPARC64_FLAG
-#define AS_SPARC64_FLAG "-64 -Av9"
+#undef AS_SPARC64_FLAG
+#define AS_SPARC64_FLAG "-TSO -64 -Av9"
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index bb84f45cb09..3d99ac9ef1a 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -1297,8 +1297,8 @@ input_operand (op, mode)
if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
return 0;
- /* Only a tiny bit of handling for CONSTANT_P_RTX is necessary. */
- if (GET_CODE (op) == CONST && GET_CODE (XEXP (op, 0)) == CONSTANT_P_RTX)
+ /* Accept CONSTANT_P_RTX, since it will be gone by CSE1 and result in 0/1. */
+ if (GET_CODE (op) == CONSTANT_P_RTX)
return 1;
/* Allow any one instruction integer constant, and all CONST_INT
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index a41f6b59428..830467dfb93 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler, for Sun SPARC.
Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997, 1998, 1999
- 2000, 2001, 2002 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com).
64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans,
at Cygnus Support.
@@ -2180,6 +2180,8 @@ do { \
If you change this, execute "rm explow.o recog.o reload.o". */
+#define SYMBOLIC_CONST(X) symbolic_operand (X, VOIDmode)
+
#define RTX_OK_FOR_BASE_P(X) \
((GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) \
|| (GET_CODE (X) == SUBREG \
@@ -2213,6 +2215,8 @@ do { \
&& GET_CODE (op1) != REG \
&& GET_CODE (op1) != LO_SUM \
&& GET_CODE (op1) != MEM \
+ && (! SYMBOLIC_CONST (op1) \
+ || MODE == Pmode) \
&& (GET_CODE (op1) != CONST_INT \
|| SMALL_INT (op1))) \
goto ADDR; \
@@ -2300,6 +2304,34 @@ do { \
else if (GET_CODE (X) == CONST_INT && SMALL_INT (X)) \
goto ADDR; \
}
+
+/* Go to LABEL if ADDR (a legitimate address expression)
+ has an effect that depends on the machine mode it is used for.
+
+ In PIC mode,
+
+ (mem:HI [%l7+a])
+
+ is not equivalent to
+
+ (mem:QI [%l7+a]) (mem:QI [%l7+a+1])
+
+ because [%l7+a+1] is interpreted as the address of (a+1). */
+
+#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
+{ \
+ if (flag_pic == 1) \
+ { \
+ if (GET_CODE (ADDR) == PLUS) \
+ { \
+ rtx op0 = XEXP (ADDR, 0); \
+ rtx op1 = XEXP (ADDR, 1); \
+ if (op0 == pic_offset_table_rtx \
+ && SYMBOLIC_CONST (op1)) \
+ goto LABEL; \
+ } \
+ } \
+}
/* Try machine-dependent ways of modifying an illegitimate address
to be legitimate. If we find one, return the new, valid address.
@@ -2377,12 +2409,6 @@ do { \
} \
/* ??? 64-bit reloads. */ \
} while (0)
-
-/* Go to LABEL if ADDR (a legitimate address expression)
- has an effect that depends on the machine mode it is used for.
- On the SPARC this is never true. */
-
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL)
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */
@@ -2792,9 +2818,6 @@ do { \
#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
do { \
- fputs (".globl ", (FILE)); \
- assemble_name ((FILE), (NAME)); \
- fputs ("\n", (FILE)); \
ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \
} while (0)
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 4024290d436..bc8c634ac18 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -2062,9 +2062,9 @@
(define_insn "*movdi_insn_sp32_v9"
[(set (match_operand:DI 0 "nonimmediate_operand"
- "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?f,?e,?e,?W")
+ "=T,o,T,U,o,r,r,r,?T,?f,?f,?o,?e,?e,?W")
(match_operand:DI 1 "input_operand"
- " J,J,U,T,r,o,i,r, f, T, o, f, f, e, W, e"))]
+ " J,J,U,T,r,o,i,r, f, T, o, f, e, W, e"))]
"! TARGET_ARCH64 && TARGET_V9
&& (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
"@
@@ -2080,13 +2080,12 @@
ldd\t%1, %0
#
#
- #
fmovd\\t%1, %0
ldd\\t%1, %0
std\\t%1, %0"
- [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,*,fpmove,fpload,fpstore")
- (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,2,*,*,*")
- (set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,*,double,*,*")])
+ [(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,fpmove,fpload,fpstore")
+ (set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,*,*,*")
+ (set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,double,*,*")])
(define_insn "*movdi_insn_sp32"
[(set (match_operand:DI 0 "nonimmediate_operand"
@@ -2425,7 +2424,14 @@
(define_split
[(set (match_operand:DI 0 "register_operand" "")
(match_operand:DI 1 "register_operand" ""))]
- "! TARGET_ARCH64 && reload_completed"
+ "reload_completed
+ && (! TARGET_V9
+ || (! TARGET_ARCH64
+ && ((GET_CODE (operands[0]) == REG
+ && REGNO (operands[0]) < 32)
+ || (GET_CODE (operands[0]) == SUBREG
+ && GET_CODE (SUBREG_REG (operands[0])) == REG
+ && REGNO (SUBREG_REG (operands[0])) < 32))))"
[(clobber (const_int 0))]
{
rtx set_dest = operands[0];
@@ -7246,7 +7252,7 @@
== INSN_ADDRESSES (INSN_UID (insn))))
return "b\t%l0%#";
else
- return TARGET_V9 ? "ba,pt%*\t%%xcc, %l0%(" : "b%*\t%l0%(";
+ return TARGET_V9 ? "ba%*,pt\t%%xcc, %l0%(" : "b%*\t%l0%(";
}
[(set_attr "type" "uncond_branch")])
@@ -7949,7 +7955,7 @@
&& mems_ok_for_ldd_peep (operands[0], operands[1], NULL_RTX)"
[(set (match_dup 0)
(const_int 0))]
- "operands[0] = change_address (operands[0], DImode, NULL);")
+ "operands[0] = widen_memory_access (operands[0], DImode, 0);")
(define_peephole2
[(set (match_operand:SI 0 "memory_operand" "")
@@ -7960,7 +7966,7 @@
&& mems_ok_for_ldd_peep (operands[1], operands[0], NULL_RTX)"
[(set (match_dup 1)
(const_int 0))]
- "operands[1] = change_address (operands[1], DImode, NULL);")
+ "operands[1] = widen_memory_access (operands[1], DImode, 0);")
(define_peephole2
[(set (match_operand:SI 0 "register_operand" "")
@@ -7971,7 +7977,7 @@
&& mems_ok_for_ldd_peep (operands[1], operands[3], operands[0])"
[(set (match_dup 0)
(match_dup 1))]
- "operands[1] = change_address (operands[1], DImode, NULL);
+ "operands[1] = widen_memory_access (operands[1], DImode, 0);
operands[0] = gen_rtx_REG (DImode, REGNO (operands[0]));")
(define_peephole2
@@ -7983,7 +7989,7 @@
&& mems_ok_for_ldd_peep (operands[0], operands[2], NULL_RTX)"
[(set (match_dup 0)
(match_dup 1))]
- "operands[0] = change_address (operands[0], DImode, NULL);
+ "operands[0] = widen_memory_access (operands[0], DImode, 0);
operands[1] = gen_rtx_REG (DImode, REGNO (operands[1]));")
(define_peephole2
@@ -7995,7 +8001,7 @@
&& mems_ok_for_ldd_peep (operands[1], operands[3], operands[0])"
[(set (match_dup 0)
(match_dup 1))]
- "operands[1] = change_address (operands[1], DFmode, NULL);
+ "operands[1] = widen_memory_access (operands[1], DFmode, 0);
operands[0] = gen_rtx_REG (DFmode, REGNO (operands[0]));")
(define_peephole2
@@ -8007,7 +8013,7 @@
&& mems_ok_for_ldd_peep (operands[0], operands[2], NULL_RTX)"
[(set (match_dup 0)
(match_dup 1))]
- "operands[0] = change_address (operands[0], DFmode, NULL);
+ "operands[0] = widen_memory_access (operands[0], DFmode, 0);
operands[1] = gen_rtx_REG (DFmode, REGNO (operands[1]));")
(define_peephole2
@@ -8019,7 +8025,7 @@
&& mems_ok_for_ldd_peep (operands[3], operands[1], operands[0])"
[(set (match_dup 2)
(match_dup 3))]
- "operands[3] = change_address (operands[3], DImode, NULL);
+ "operands[3] = widen_memory_access (operands[3], DImode, 0);
operands[2] = gen_rtx_REG (DImode, REGNO (operands[2]));")
(define_peephole2
@@ -8031,7 +8037,7 @@
&& mems_ok_for_ldd_peep (operands[2], operands[0], NULL_RTX)"
[(set (match_dup 2)
(match_dup 3))]
- "operands[2] = change_address (operands[2], DImode, NULL);
+ "operands[2] = widen_memory_access (operands[2], DImode, 0);
operands[3] = gen_rtx_REG (DImode, REGNO (operands[3]));
")
@@ -8044,7 +8050,7 @@
&& mems_ok_for_ldd_peep (operands[3], operands[1], operands[0])"
[(set (match_dup 2)
(match_dup 3))]
- "operands[3] = change_address (operands[3], DFmode, NULL);
+ "operands[3] = widen_memory_access (operands[3], DFmode, 0);
operands[2] = gen_rtx_REG (DFmode, REGNO (operands[2]));")
(define_peephole2
@@ -8056,7 +8062,7 @@
&& mems_ok_for_ldd_peep (operands[2], operands[0], NULL_RTX)"
[(set (match_dup 2)
(match_dup 3))]
- "operands[2] = change_address (operands[2], DFmode, NULL);
+ "operands[2] = widen_memory_access (operands[2], DFmode, 0);
operands[3] = gen_rtx_REG (DFmode, REGNO (operands[3]));")
;; Optimize the case of following a reg-reg move with a test
diff --git a/gcc/config/stormy16/stormy16.c b/gcc/config/stormy16/stormy16.c
index 7a20df4993c..9ab984d8209 100644
--- a/gcc/config/stormy16/stormy16.c
+++ b/gcc/config/stormy16/stormy16.c
@@ -545,6 +545,29 @@ xstormy16_carry_plus_operand (x, mode)
&& (INTVAL (XEXP (x, 1)) < -4 || INTVAL (XEXP (x, 1)) > 4));
}
+/* Detect and error out on out-of-range constants for movhi. */
+int
+xs_hi_general_operand (x, mode)
+ rtx x;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ if ((GET_CODE (x) == CONST_INT)
+ && ((INTVAL (x) >= 32768) || (INTVAL (x) < -32768)))
+ error ("Constant halfword load operand out of range.");
+ return general_operand (x, mode);
+}
+
+/* Detect and error out on out-of-range constants for addhi and subhi. */
+int
+xs_hi_nonmemory_operand (x, mode)
+ rtx x;
+ enum machine_mode mode ATTRIBUTE_UNUSED;
+{
+ if ((GET_CODE (x) == CONST_INT)
+ && ((INTVAL (x) >= 32768) || (INTVAL (x) < -32768)))
+ error ("Constant arithmetic operand out of range.");
+ return nonmemory_operand (x, mode);
+}
enum reg_class
xstormy16_preferred_reload_class (x, class)
@@ -581,7 +604,9 @@ xstormy16_legitimate_address_p (mode, x, strict)
&& LEGITIMATE_ADDRESS_INTEGER_P (XEXP (x, 1), 0))
x = XEXP (x, 0);
- if (GET_CODE (x) == POST_INC
+ if ((GET_CODE (x) == PRE_MODIFY
+ && GET_CODE (XEXP (XEXP (x, 1), 1)) == CONST_INT)
+ || GET_CODE (x) == POST_INC
|| GET_CODE (x) == PRE_DEC)
x = XEXP (x, 0);
@@ -855,6 +880,29 @@ xstormy16_expand_move (mode, dest, src)
rtx dest;
rtx src;
{
+ if ((GET_CODE (dest) == MEM) && (GET_CODE (XEXP (dest, 0)) == PRE_MODIFY))
+ {
+ rtx pmv = XEXP (dest, 0);
+ rtx dest_reg = XEXP (pmv, 0);
+ rtx dest_mod = XEXP (pmv, 1);
+ rtx set = gen_rtx_SET (Pmode, dest_reg, dest_mod);
+ rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+
+ dest = gen_rtx_MEM (mode, dest_reg);
+ emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
+ }
+ else if ((GET_CODE (src) == MEM) && (GET_CODE (XEXP (src, 0)) == PRE_MODIFY))
+ {
+ rtx pmv = XEXP (src, 0);
+ rtx src_reg = XEXP (pmv, 0);
+ rtx src_mod = XEXP (pmv, 1);
+ rtx set = gen_rtx_SET (Pmode, src_reg, src_mod);
+ rtx clobber = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (BImode, 16));
+
+ src = gen_rtx_MEM (mode, src_reg);
+ emit_insn (gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, set, clobber)));
+ }
+
/* There are only limited immediate-to-memory move instructions. */
if (! reload_in_progress
&& ! reload_completed
@@ -915,6 +963,7 @@ struct xstormy16_stack_layout
#define REG_NEEDS_SAVE(REGNUM, IFUN) \
((regs_ever_live[REGNUM] && ! call_used_regs[REGNUM]) \
|| (IFUN && ! fixed_regs[REGNUM] && call_used_regs[REGNUM] \
+ && (REGNO_REG_CLASS (REGNUM) != CARRY_REGS) \
&& (regs_ever_live[REGNUM] || ! current_function_is_leaf)))
/* Compute the stack layout. */
@@ -1014,44 +1063,66 @@ xstormy16_expand_prologue ()
int regno;
rtx insn;
rtx mem_push_rtx;
- rtx mem_fake_push_rtx;
const int ifun = xstormy16_interrupt_function_p ();
mem_push_rtx = gen_rtx_POST_INC (Pmode, stack_pointer_rtx);
mem_push_rtx = gen_rtx_MEM (HImode, mem_push_rtx);
- mem_fake_push_rtx = gen_rtx_PRE_INC (Pmode, stack_pointer_rtx);
- mem_fake_push_rtx = gen_rtx_MEM (HImode, mem_fake_push_rtx);
layout = xstormy16_compute_stack_layout ();
+ if (layout.locals_size >= 32768)
+ error ("Local variable memory requirements exceed capacity.");
+
/* Save the argument registers if necessary. */
if (layout.stdarg_save_size)
for (regno = FIRST_ARGUMENT_REGISTER;
regno < FIRST_ARGUMENT_REGISTER + NUM_ARGUMENT_REGISTERS;
regno++)
{
+ rtx dwarf;
rtx reg = gen_rtx_REG (HImode, regno);
+
insn = emit_move_insn (mem_push_rtx, reg);
RTX_FRAME_RELATED_P (insn) = 1;
+
+ dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (2));
+
+ XVECEXP (dwarf, 0, 0) = gen_rtx_SET (VOIDmode,
+ gen_rtx_MEM (Pmode, stack_pointer_rtx),
+ reg);
+ XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+ GET_MODE_SIZE (Pmode)));
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
- gen_rtx_SET (VOIDmode,
- mem_fake_push_rtx,
- reg),
+ dwarf,
REG_NOTES (insn));
+ RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1;
+ RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1;
}
/* Push each of the registers to save. */
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (REG_NEEDS_SAVE (regno, ifun))
{
+ rtx dwarf;
rtx reg = gen_rtx_REG (HImode, regno);
+
insn = emit_move_insn (mem_push_rtx, reg);
RTX_FRAME_RELATED_P (insn) = 1;
+
+ dwarf = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (2));
+
+ XVECEXP (dwarf, 0, 0) = gen_rtx_SET (VOIDmode,
+ gen_rtx_MEM (Pmode, stack_pointer_rtx),
+ reg);
+ XVECEXP (dwarf, 0, 1) = gen_rtx_SET (Pmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+ GET_MODE_SIZE (Pmode)));
REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR,
- gen_rtx_SET (VOIDmode,
- mem_fake_push_rtx,
- reg),
+ dwarf,
REG_NOTES (insn));
+ RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 0)) = 1;
+ RTX_FRAME_RELATED_P (XVECEXP (dwarf, 0, 1)) = 1;
}
/* It's just possible that the SP here might be what we need for
@@ -1900,6 +1971,11 @@ xstormy16_expand_arith (mode, code, dest, src0, src1, carry)
firstloop = 0;
emit (insn);
}
+
+ /* If we emit nothing, try_split() will think we failed. So emit
+ something that does nothing and can be optimized away. */
+ if (firstloop)
+ emit (gen_nop ());
}
/* Return 1 if OP is a shift operator. */
diff --git a/gcc/config/stormy16/stormy16.h b/gcc/config/stormy16/stormy16.h
index 505236484d9..da131a4af8e 100644
--- a/gcc/config/stormy16/stormy16.h
+++ b/gcc/config/stormy16/stormy16.h
@@ -67,7 +67,10 @@ Boston, MA 02111-1307, USA. */
/* Run-time target specifications */
-#define CPP_PREDEFINES "-Dxstormy16 -Amachine=xstormy16"
+#define TARGET_CPU_CPP_BUILTINS() do { \
+ builtin_define_std ("xstormy16"); \
+ builtin_assert ("machine=xstormy16"); \
+} while (0)
/* This declaration should be present. */
extern int target_flags;
diff --git a/gcc/config/stormy16/stormy16.md b/gcc/config/stormy16/stormy16.md
index 56033d19694..1e48f8b82ca 100644
--- a/gcc/config/stormy16/stormy16.md
+++ b/gcc/config/stormy16/stormy16.md
@@ -150,13 +150,13 @@
(define_expand "movhi"
[(set (match_operand:HI 0 "nonimmediate_nonstack_operand" "")
- (match_operand:HI 1 "general_operand" ""))]
+ (match_operand:HI 1 "xs_hi_general_operand" ""))]
""
"{ xstormy16_expand_move (HImode, operands[0], operands[1]); DONE; }")
(define_insn "*movhi_internal"
[(set (match_operand:HI 0 "nonimmediate_nonstack_operand" "=r,m,e,e,T,r,S")
- (match_operand:HI 1 "general_operand" "r,e,m,L,L,i,i"))]
+ (match_operand:HI 1 "xs_hi_general_operand" "r,e,m,L,L,i,i"))]
""
"@
mov %0,%1
@@ -279,7 +279,7 @@
(define_insn "addhi3"
[(set (match_operand:HI 0 "register_operand" "=r,r,T,T,r,r,r")
(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,0")
- (match_operand:HI 2 "nonmemory_operand" "O,P,L,M,Ir,N,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "O,P,L,M,Ir,N,i")))
(clobber (match_scratch:BI 3 "=X,X,&y,&y,&y,&y,&y"))]
""
"@
@@ -311,7 +311,7 @@
(define_insn "addchi4"
[(set (match_operand:HI 0 "register_operand" "=T,r,r")
(plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")
- (match_operand:HI 2 "nonmemory_operand" "L,Ir,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
(set (match_operand:BI 3 "register_operand" "=y,y,y")
(truncate:BI (lshiftrt:SI (plus:SI (zero_extend:SI (match_dup 1))
(zero_extend:SI (match_dup 2)))
@@ -329,7 +329,7 @@
(zero_extend:HI (match_operand:BI 3
"register_operand"
"y,y,y")))
- (match_operand:HI 2 "nonmemory_operand" "L,Ir,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
(set (match_operand:BI 4 "register_operand" "=y,y,y")
(truncate:BI (lshiftrt:SI (plus:SI (plus:SI
(zero_extend:SI (match_dup 1))
@@ -352,7 +352,7 @@
(define_insn "subhi3"
[(set (match_operand:HI 0 "register_operand" "=r,r,T,T,r,r,r")
(minus:HI (match_operand:HI 1 "register_operand" "0,0,0,0,0,0,0")
- (match_operand:HI 2 "nonmemory_operand" "O,P,L,M,rI,M,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "O,P,L,M,rI,M,i")))
(clobber (match_scratch:BI 3 "=X,X,&y,&y,&y,&y,&y"))]
""
"@
@@ -368,7 +368,7 @@
(define_insn "subchi4"
[(set (match_operand:HI 0 "register_operand" "=T,r,r")
(minus:HI (match_operand:HI 1 "register_operand" "0,0,0")
- (match_operand:HI 2 "nonmemory_operand" "L,Ir,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
(set (match_operand:BI 3 "register_operand" "=y,y,y")
(truncate:BI (lshiftrt:SI (minus:SI (zero_extend:SI (match_dup 1))
(zero_extend:SI (match_dup 2)))
@@ -386,7 +386,7 @@
(zero_extend:HI (match_operand:BI 3
"register_operand"
"y,y,y")))
- (match_operand:HI 2 "nonmemory_operand" "L,Ir,i")))
+ (match_operand:HI 2 "xs_hi_nonmemory_operand" "L,Ir,i")))
(set (match_operand:BI 4 "register_operand" "=y,y,y")
(truncate:BI (lshiftrt:SI (minus:SI (minus:SI
(zero_extend:SI (match_dup 1))
@@ -796,7 +796,7 @@
[(set (pc)
(if_then_else (match_operator:SI 1 "equality_operator"
[(match_operand:SI 2 "register_operand"
- "+r")
+ "r")
(const_int 0)])
(label_ref (match_operand 0 "" ""))
(pc)))
@@ -817,7 +817,7 @@
[(set (pc)
(if_then_else (match_operator:SI 1 "xstormy16_ineqsi_operator"
[(match_operand:SI 2 "register_operand"
- "+r")
+ "r")
(match_operand:SI 3 "nonmemory_operand"
"ri")])
(label_ref (match_operand 0 "" ""))
@@ -851,7 +851,7 @@
(match_operand:HI 3 "nonmemory_operand" "L,Ir,i")])
(label_ref (match_operand 0 "" ""))
(pc)))
- (set (match_operand:HI 2 "register_operand" "=2,2,2")
+ (set (match_operand:HI 2 "register_operand" "=1,1,1")
(minus:HI (minus:HI (match_dup 1) (zero_extend:HI (match_dup 4)))
(match_dup 3)))
(clobber (match_operand:BI 6 "" "=y,y,y"))]
diff --git a/gcc/config/v850/lib1funcs.asm b/gcc/config/v850/lib1funcs.asm
index c5350aa25d2..a2798220463 100644
--- a/gcc/config/v850/lib1funcs.asm
+++ b/gcc/config/v850/lib1funcs.asm
@@ -1,9 +1,9 @@
/* libgcc routines for NEC V850.
Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify it
+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.
diff --git a/gcc/config/v850/rtems.h b/gcc/config/v850/rtems.h
index 14ddfa125f3..c495214e0f7 100644
--- a/gcc/config/v850/rtems.h
+++ b/gcc/config/v850/rtems.h
@@ -2,25 +2,25 @@
Copyright (C) 1996, 1997, 2000, 2002 Free Software Foundation, Inc.
Contributed by Joel Sherrill (joel@OARcorp.com).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
/* Specify predefined symbols in preprocessor. */
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-D__v851__ -D__v850 -D__rtems__ \
- -Asystem=rtems -Acpu=v850 -Amachine=v850"
+#define TARGET_OS_CPP_BUILTINS() do { \
+ builtin_define( "__rtems__" ); \
+ builtin_assert( "system=rtems" ); \
+} while (0)
diff --git a/gcc/config/v850/v850-c.c b/gcc/config/v850/v850-c.c
index 431114edfdb..98b5b7884f5 100644
--- a/gcc/config/v850/v850-c.c
+++ b/gcc/config/v850/v850-c.c
@@ -2,20 +2,20 @@
Copyright (C) 2000 Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/v850/v850-protos.h b/gcc/config/v850/v850-protos.h
index 296b6722dde..9e00af6c4ce 100644
--- a/gcc/config/v850/v850-protos.h
+++ b/gcc/config/v850/v850-protos.h
@@ -1,20 +1,20 @@
/* Prototypes for v850.c functions used in the md file & elsewhere.
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index 2295a552a00..879b1898a95 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -1,22 +1,22 @@
/* Subroutines for insn-output.c for NEC V850 series
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify it
+ 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.
- GNU CC is distributed in the hope that it will be useful, but WITHOUT
+ 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 GNU CC; see the file COPYING. If not, write to the Free
+ 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. */
@@ -1713,13 +1713,10 @@ expand_prologue ()
/* Save arg registers to the stack if necessary. */
else if (current_function_args_info.anonymous_args)
{
- if (TARGET_PROLOG_FUNCTION)
- {
- if (TARGET_V850E && ! TARGET_DISABLE_CALLT)
- emit_insn (gen_save_r6_r9_v850e ());
- else
- emit_insn (gen_save_r6_r9 ());
- }
+ if (TARGET_PROLOG_FUNCTION && TARGET_V850E && !TARGET_DISABLE_CALLT)
+ emit_insn (gen_save_r6_r9_v850e ());
+ else if (TARGET_PROLOG_FUNCTION && ! TARGET_LONG_CALLS)
+ emit_insn (gen_save_r6_r9 ());
else
{
offset = 0;
@@ -1779,19 +1776,14 @@ expand_prologue ()
{
save_all = gen_rtx_PARALLEL
(VOIDmode,
- rtvec_alloc (num_save + (TARGET_V850 ? 2 : 1)));
+ rtvec_alloc (num_save + 1
+ + (TARGET_V850 ? (TARGET_LONG_CALLS ? 2 : 1) : 0)));
XVECEXP (save_all, 0, 0)
= gen_rtx_SET (VOIDmode,
stack_pointer_rtx,
plus_constant (stack_pointer_rtx, -alloc_stack));
- if (TARGET_V850)
- {
- XVECEXP (save_all, 0, num_save+1)
- = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, 10));
- }
-
offset = - default_stack;
for (i = 0; i < num_save; i++)
{
@@ -1804,6 +1796,16 @@ expand_prologue ()
offset -= 4;
}
+ if (TARGET_V850)
+ {
+ XVECEXP (save_all, 0, num_save + 1)
+ = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, 10));
+
+ if (TARGET_LONG_CALLS)
+ XVECEXP (save_all, 0, num_save + 2)
+ = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (Pmode, 11));
+ }
+
code = recog (save_all, NULL_RTX, NULL);
if (code >= 0)
{
@@ -2631,7 +2633,7 @@ pattern_is_ok_for_prologue (op, mode)
*/
- for (i = 2; i < count - 1; i++)
+ for (i = 2; i < count - (TARGET_LONG_CALLS ? 2: 1); i++)
{
rtx dest;
rtx src;
@@ -2671,14 +2673,18 @@ pattern_is_ok_for_prologue (op, mode)
}
}
- /* Make sure that the last entry in the vector is a clobber. */
- vector_element = XVECEXP (op, 0, i);
-
- if (GET_CODE (vector_element) != CLOBBER
- || GET_CODE (XEXP (vector_element, 0)) != REG
- || REGNO (XEXP (vector_element, 0)) != 10)
- return 0;
-
+ /* Make sure that the last entries in the vector are clobbers. */
+ for (; i < count; i++)
+ {
+ vector_element = XVECEXP (op, 0, i);
+
+ if (GET_CODE (vector_element) != CLOBBER
+ || GET_CODE (XEXP (vector_element, 0)) != REG
+ || !(REGNO (XEXP (vector_element, 0)) == 10
+ || (TARGET_LONG_CALLS ? (REGNO (XEXP (vector_element, 0)) == 11) : 0 )))
+ return 0;
+ }
+
return 1;
}
@@ -2720,7 +2726,7 @@ construct_save_jarl (op)
stack_bytes = INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1));
/* Each push will put 4 bytes from the stack... */
- stack_bytes += (count - 2) * 4;
+ stack_bytes += (count - (TARGET_LONG_CALLS ? 3 : 2)) * 4;
/* Make sure that the amount we are popping either 0 or 16 bytes. */
if (stack_bytes != 0 && stack_bytes != -16)
@@ -2731,7 +2737,7 @@ construct_save_jarl (op)
/* Now compute the bit mask of registers to push. */
mask = 0;
- for (i = 1; i < count - 1; i++)
+ for (i = 1; i < count - (TARGET_LONG_CALLS ? 2 : 1); i++)
{
rtx vector_element = XVECEXP (op, 0, i);
@@ -2815,8 +2821,6 @@ v850_output_aligned_bss (file, decl, name, size, align)
int size;
int align;
{
- (*targetm.asm_out.globalize_label) (file, name);
-
switch (v850_get_data_area (decl))
{
case DATA_AREA_ZDA:
diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h
index 8e1d28bd4c2..7485b34e4c6 100644
--- a/gcc/config/v850/v850.h
+++ b/gcc/config/v850/v850.h
@@ -3,20 +3,20 @@
Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
@@ -65,7 +65,12 @@
{ "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }
/* Names to predefine in the preprocessor for this target machine. */
-#define CPP_PREDEFINES "-D__v851__ -D__v850"
+#define TARGET_CPU_CPP_BUILTINS() do { \
+ builtin_define( "__v851__" ); \
+ builtin_define( "__v850" ); \
+ builtin_assert( "machine=v850" ); \
+ builtin_assert( "cpu=v850" ); \
+} while(0)
/* Run-time compilation parameters selecting different hardware subsets. */
diff --git a/gcc/config/v850/v850.md b/gcc/config/v850/v850.md
index 5acbb855f81..ba058a45e76 100644
--- a/gcc/config/v850/v850.md
+++ b/gcc/config/v850/v850.md
@@ -2,20 +2,20 @@
;; Copyright (C) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
;; Contributed by Jeff Law (law@cygnus.com).
-;; This file is part of GNU CC.
+;; This file is part of GCC.
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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.
@@ -1663,7 +1663,7 @@
(set (mem:SI (plus:SI (reg:SI 3)
(match_operand:SI 2 "immediate_operand" "i")))
(match_operand:SI 3 "register_is_ok_for_epilogue" "r"))])]
- "TARGET_PROLOG_FUNCTION"
+ "TARGET_PROLOG_FUNCTION && TARGET_V850"
"* return construct_save_jarl (operands[0]);
"
[(set (attr "length") (if_then_else (eq_attr "long_calls" "yes")
diff --git a/gcc/config/vax/bsd.h b/gcc/config/vax/bsd.h
index 9b3b77045ff..230b827d223 100644
--- a/gcc/config/vax/bsd.h
+++ b/gcc/config/vax/bsd.h
@@ -1,20 +1,20 @@
/* Definitions of target machine for GNU compiler. BSD version.
Copyright (C) 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/elf.h b/gcc/config/vax/elf.h
index fe00d22336c..122e3cfb981 100644
--- a/gcc/config/vax/elf.h
+++ b/gcc/config/vax/elf.h
@@ -2,20 +2,20 @@
Copyright (C) 2002 Free Software Foundation, Inc.
Contributed by Matt Thomas (matt@3am-software.com)
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/netbsd-elf.h b/gcc/config/vax/netbsd-elf.h
index e28d1a15743..efa11120557 100644
--- a/gcc/config/vax/netbsd-elf.h
+++ b/gcc/config/vax/netbsd-elf.h
@@ -2,20 +2,20 @@
for NetBSD/vax ELF systems.
Copyright (C) 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+along with GCC; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
diff --git a/gcc/config/vax/netbsd.h b/gcc/config/vax/netbsd.h
index 0bc31f73c0a..58372c8a50d 100644
--- a/gcc/config/vax/netbsd.h
+++ b/gcc/config/vax/netbsd.h
@@ -3,20 +3,20 @@
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/openbsd.h b/gcc/config/vax/openbsd.h
index bc3af245d86..2f5b67aced1 100644
--- a/gcc/config/vax/openbsd.h
+++ b/gcc/config/vax/openbsd.h
@@ -1,20 +1,20 @@
/* Configuration fragment for a VAX OpenBSD target.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/openbsd1.h b/gcc/config/vax/openbsd1.h
index 3a72ef88049..8f997ced10c 100644
--- a/gcc/config/vax/openbsd1.h
+++ b/gcc/config/vax/openbsd1.h
@@ -1,20 +1,20 @@
/* Configuration fragment for a VAX OpenBSD target.
Copyright (C) 2000 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/ultrix.h b/gcc/config/vax/ultrix.h
index f8ade575737..845707a8825 100644
--- a/gcc/config/vax/ultrix.h
+++ b/gcc/config/vax/ultrix.h
@@ -1,20 +1,20 @@
/* Output variables, constants and external declarations, for GNU compiler.
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/vax-protos.h b/gcc/config/vax/vax-protos.h
index d62b2ac8c8d..cb3b2fac245 100644
--- a/gcc/config/vax/vax-protos.h
+++ b/gcc/config/vax/vax-protos.h
@@ -1,20 +1,20 @@
/* Definitions of target machine for GNU compiler. VAX version.
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c
index 1413882f4a6..53106591841 100644
--- a/gcc/config/vax/vax.c
+++ b/gcc/config/vax/vax.c
@@ -2,20 +2,20 @@
Copyright (C) 1987, 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h
index d52f31d854e..9b4dcb26647 100644
--- a/gcc/config/vax/vax.h
+++ b/gcc/config/vax/vax.h
@@ -2,20 +2,20 @@
Copyright (C) 1987, 1988, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/vax/vax.md b/gcc/config/vax/vax.md
index 1a163ad7763..d0dc9556021 100644
--- a/gcc/config/vax/vax.md
+++ b/gcc/config/vax/vax.md
@@ -2,20 +2,20 @@
;; Copyright (C) 1987, 1988, 1991, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
;; 2002 Free Software Foundation, Inc.
-;; This file is part of GNU CC.
+;; This file is part of GCC.
-;; GNU CC is free software; you can redistribute it and/or modify
+;; 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.
-;; GNU CC is distributed in the hope that it will be useful,
+;; 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 GNU CC; see the file COPYING. If not, write to
+;; 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.
diff --git a/gcc/config/vax/vaxv.h b/gcc/config/vax/vaxv.h
index 7b322307ba0..d3998a8e451 100644
--- a/gcc/config/vax/vaxv.h
+++ b/gcc/config/vax/vaxv.h
@@ -1,20 +1,20 @@
/* Definitions of target machine for GNU compiler. VAX sysV version.
Copyright (C) 1988, 1993, 1996, 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md
index cbda342917b..cc722b932a9 100644
--- a/gcc/config/xtensa/xtensa.md
+++ b/gcc/config/xtensa/xtensa.md
@@ -97,6 +97,7 @@
""
"
{
+ rtx srclo;
rtx dstlo = gen_lowpart (SImode, operands[0]);
rtx src1lo = gen_lowpart (SImode, operands[1]);
rtx src2lo = gen_lowpart (SImode, operands[2]);
@@ -105,9 +106,21 @@
rtx src1hi = gen_highpart (SImode, operands[1]);
rtx src2hi = gen_highpart (SImode, operands[2]);
+ /* Either source can be used for overflow checking, as long as it's
+ not clobbered by the first addition. */
+ if (!rtx_equal_p (dstlo, src1lo))
+ srclo = src1lo;
+ else if (!rtx_equal_p (dstlo, src2lo))
+ srclo = src2lo;
+ else
+ {
+ srclo = gen_reg_rtx (SImode);
+ emit_move_insn (srclo, src1lo);
+ }
+
emit_insn (gen_addsi3 (dstlo, src1lo, src2lo));
emit_insn (gen_addsi3 (dsthi, src1hi, src2hi));
- emit_insn (gen_adddi_carry (dsthi, dstlo, src2lo));
+ emit_insn (gen_adddi_carry (dsthi, dstlo, srclo));
DONE;
}")
@@ -209,9 +222,9 @@
rtx src1hi = gen_highpart (SImode, operands[1]);
rtx src2hi = gen_highpart (SImode, operands[2]);
- emit_insn (gen_subsi3 (dstlo, src1lo, src2lo));
emit_insn (gen_subsi3 (dsthi, src1hi, src2hi));
emit_insn (gen_subdi_carry (dsthi, src1lo, src2lo));
+ emit_insn (gen_subsi3 (dstlo, src1lo, src2lo));
DONE;
}")
diff --git a/gcc/configure b/gcc/configure
index 0ed44d11099..06c4503559a 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -12,6 +12,15 @@ ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
+ --with-local-prefix=DIR specifies directory to put local include"
+ac_help="$ac_help
+ --with-gxx-include-dir=DIR
+ specifies directory to put g++ header files"
+ac_help="$ac_help
+ --with-cpp-install-dir=DIR
+ install the user visible C preprocessor in DIR
+ (relative to PREFIX) as well as PREFIX/bin"
+ac_help="$ac_help
--with-gnu-ld arrange to work with GNU ld."
ac_help="$ac_help
--with-ld arrange to use the specified ld (full pathname)"
@@ -20,17 +29,6 @@ ac_help="$ac_help
ac_help="$ac_help
--with-as arrange to use the specified as (full pathname)"
ac_help="$ac_help
- --with-stabs arrange to use stabs instead of host debug format"
-ac_help="$ac_help
- --with-elf arrange to use ELF instead of host debug format"
-ac_help="$ac_help
- --with-local-prefix=DIR specifies directory to put local include"
-ac_help="$ac_help
- --with-gxx-include-dir=DIR
- specifies directory to put g++ header files"
-ac_help="$ac_help
- --enable-multilib enable library support for multiple ABIs"
-ac_help="$ac_help
--enable-werror enable -Werror in bootstrap stage2 and later"
ac_help="$ac_help
--enable-checking[=LIST]
@@ -46,9 +44,11 @@ ac_help="$ac_help
optimization. Values are opt, noopt,
default is noopt"
ac_help="$ac_help
- --with-cpp-install-dir=DIR
- install the user visible C preprocessor in DIR
- (relative to PREFIX) as well as PREFIX/bin"
+ --with-stabs arrange to use stabs instead of host debug format"
+ac_help="$ac_help
+ --with-elf arrange to use ELF instead of host debug format"
+ac_help="$ac_help
+ --enable-multilib enable library support for multiple ABIs"
ac_help="$ac_help
--enable-__cxa_atexit enable __cxa_atexit for C++"
ac_help="$ac_help
@@ -619,184 +619,6 @@ fi
-remove=rm
-hard_link=ln
-symbolic_link='ln -s'
-copy=cp
-
-# Check for bogus environment variables.
-# Test if LIBRARY_PATH contains the notation for the current directory
-# since this would lead to problems installing/building glibc.
-# LIBRARY_PATH contains the current directory if one of the following
-# is true:
-# - one of the terminals (":" and ";") is the first or last sign
-# - two terminals occur directly after each other
-# - the path contains an element with a dot in it
-echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6
-echo "configure:637: checking LIBRARY_PATH variable" >&5
-case ${LIBRARY_PATH} in
- [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
- library_path_setting="contains current directory"
- ;;
- *)
- library_path_setting="ok"
- ;;
-esac
-echo "$ac_t""$library_path_setting" 1>&6
-if test "$library_path_setting" != "ok"; then
-{ echo "configure: error:
-*** LIBRARY_PATH shouldn't contain the current directory when
-*** building gcc. Please change the environment variable
-*** and run configure again." 1>&2; exit 1; }
-fi
-
-# Test if GCC_EXEC_PREFIX contains the notation for the current directory
-# since this would lead to problems installing/building glibc.
-# GCC_EXEC_PREFIX contains the current directory if one of the following
-# is true:
-# - one of the terminals (":" and ";") is the first or last sign
-# - two terminals occur directly after each other
-# - the path contains an element with a dot in it
-echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6
-echo "configure:662: checking GCC_EXEC_PREFIX variable" >&5
-case ${GCC_EXEC_PREFIX} in
- [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
- gcc_exec_prefix_setting="contains current directory"
- ;;
- *)
- gcc_exec_prefix_setting="ok"
- ;;
-esac
-echo "$ac_t""$gcc_exec_prefix_setting" 1>&6
-if test "$gcc_exec_prefix_setting" != "ok"; then
-{ echo "configure: error:
-*** GCC_EXEC_PREFIX shouldn't contain the current directory when
-*** building gcc. Please change the environment variable
-*** and run configure again." 1>&2; exit 1; }
-fi
-
-# Check for additional parameters
-
-# With GNU ld
-# Check whether --with-gnu-ld or --without-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
- withval="$with_gnu_ld"
- gnu_ld_flag="$with_gnu_ld"
-else
- gnu_ld_flag=no
-fi
-
-
-# With pre-defined ld
-# Check whether --with-ld or --without-ld was given.
-if test "${with_ld+set}" = set; then
- withval="$with_ld"
- DEFAULT_LINKER="$with_ld"
-fi
-
-if test x"${DEFAULT_LINKER+set}" = x"set"; then
- if test ! -x "$DEFAULT_LINKER"; then
- echo "configure: warning: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" 1>&2
- elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
- gnu_ld_flag=yes
- fi
- cat >> confdefs.h <<EOF
-#define DEFAULT_LINKER "$DEFAULT_LINKER"
-EOF
-
-fi
-
-# With GNU as
-# Check whether --with-gnu-as or --without-gnu-as was given.
-if test "${with_gnu_as+set}" = set; then
- withval="$with_gnu_as"
- gas_flag="$with_gnu_as"
-else
- gas_flag=no
-fi
-
-
-# Check whether --with-as or --without-as was given.
-if test "${with_as+set}" = set; then
- withval="$with_as"
- DEFAULT_ASSEMBLER="$with_as"
-fi
-
-if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
- if test ! -x "$DEFAULT_ASSEMBLER"; then
- echo "configure: warning: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" 1>&2
- elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
- gas_flag=yes
- fi
- cat >> confdefs.h <<EOF
-#define DEFAULT_ASSEMBLER "$DEFAULT_ASSEMBLER"
-EOF
-
-fi
-
-# With stabs
-# Check whether --with-stabs or --without-stabs was given.
-if test "${with_stabs+set}" = set; then
- withval="$with_stabs"
- stabs="$with_stabs"
-else
- stabs=no
-fi
-
-
-# With ELF
-# Check whether --with-elf or --without-elf was given.
-if test "${with_elf+set}" = set; then
- withval="$with_elf"
- elf="$with_elf"
-else
- elf=no
-fi
-
-
-# Specify the local prefix
-local_prefix=
-# Check whether --with-local-prefix or --without-local-prefix was given.
-if test "${with_local_prefix+set}" = set; then
- withval="$with_local_prefix"
- case "${withval}" in
-yes) { echo "configure: error: bad value ${withval} given for local include directory prefix" 1>&2; exit 1; } ;;
-no) ;;
-*) local_prefix=$with_local_prefix ;;
-esac
-fi
-
-
-# Default local prefix if it is empty
-if test x$local_prefix = x; then
- local_prefix=/usr/local
-fi
-
-# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
-# passed in by the toplevel make and thus we'd get different behavior
-# depending on where we built the sources.
-gcc_gxx_include_dir=
-# Specify the g++ header file directory
-# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
-if test "${with_gxx_include_dir+set}" = set; then
- withval="$with_gxx_include_dir"
- case "${withval}" in
-yes) { echo "configure: error: bad value ${withval} given for g++ include directory" 1>&2; exit 1; } ;;
-no) ;;
-*) gcc_gxx_include_dir=$with_gxx_include_dir ;;
-esac
-fi
-
-
-if test x${gcc_gxx_include_dir} = x; then
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gcc_gxx_include_dir='${libsubdir}/include/c++'
- else
- topsrcdir=${srcdir}/.. . ${srcdir}/../config.if
- gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir}
- fi
-fi
-
# Determine the host, build, and target systems
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
@@ -845,7 +667,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:849: checking host system type" >&5
+echo "configure:671: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -866,7 +688,7 @@ host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:870: checking target system type" >&5
+echo "configure:692: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -884,7 +706,7 @@ target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:888: checking build system type" >&5
+echo "configure:710: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -907,6 +729,18 @@ test "$host_alias" != "$target_alias" &&
program_prefix=${target_alias}-
+# Define variables host_canonical and build_canonical
+build_canonical=${build}
+host_canonical=${host}
+
+
+
+target_subdir=
+if test "${host}" != "${target}" ; then
+ target_subdir=${target_alias}/
+fi
+
+
# Set program_transform_name
if test "$program_transform_name" = s,x,x,; then
program_transform_name=
@@ -928,11 +762,213 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+# Check for bogus environment variables.
+# Test if LIBRARY_PATH contains the notation for the current directory
+# since this would lead to problems installing/building glibc.
+# LIBRARY_PATH contains the current directory if one of the following
+# is true:
+# - one of the terminals (":" and ";") is the first or last sign
+# - two terminals occur directly after each other
+# - the path contains an element with a dot in it
+echo $ac_n "checking LIBRARY_PATH variable""... $ac_c" 1>&6
+echo "configure:775: checking LIBRARY_PATH variable" >&5
+case ${LIBRARY_PATH} in
+ [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
+ library_path_setting="contains current directory"
+ ;;
+ *)
+ library_path_setting="ok"
+ ;;
+esac
+echo "$ac_t""$library_path_setting" 1>&6
+if test "$library_path_setting" != "ok"; then
+{ echo "configure: error:
+*** LIBRARY_PATH shouldn't contain the current directory when
+*** building gcc. Please change the environment variable
+*** and run configure again." 1>&2; exit 1; }
+fi
+
+# Test if GCC_EXEC_PREFIX contains the notation for the current directory
+# since this would lead to problems installing/building glibc.
+# GCC_EXEC_PREFIX contains the current directory if one of the following
+# is true:
+# - one of the terminals (":" and ";") is the first or last sign
+# - two terminals occur directly after each other
+# - the path contains an element with a dot in it
+echo $ac_n "checking GCC_EXEC_PREFIX variable""... $ac_c" 1>&6
+echo "configure:800: checking GCC_EXEC_PREFIX variable" >&5
+case ${GCC_EXEC_PREFIX} in
+ [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* )
+ gcc_exec_prefix_setting="contains current directory"
+ ;;
+ *)
+ gcc_exec_prefix_setting="ok"
+ ;;
+esac
+echo "$ac_t""$gcc_exec_prefix_setting" 1>&6
+if test "$gcc_exec_prefix_setting" != "ok"; then
+{ echo "configure: error:
+*** GCC_EXEC_PREFIX shouldn't contain the current directory when
+*** building gcc. Please change the environment variable
+*** and run configure again." 1>&2; exit 1; }
+fi
+
+# -----------
+# Directories
+# -----------
+
+# Specify the local prefix
+local_prefix=
+# Check whether --with-local-prefix or --without-local-prefix was given.
+if test "${with_local_prefix+set}" = set; then
+ withval="$with_local_prefix"
+ case "${withval}" in
+yes) { echo "configure: error: bad value ${withval} given for local include directory prefix" 1>&2; exit 1; } ;;
+no) ;;
+*) local_prefix=$with_local_prefix ;;
+esac
+fi
+
+
+# Default local prefix if it is empty
+if test x$local_prefix = x; then
+ local_prefix=/usr/local
+fi
+
+# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
+# passed in by the toplevel make and thus we'd get different behavior
+# depending on where we built the sources.
+gcc_gxx_include_dir=
+# Specify the g++ header file directory
+# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
+if test "${with_gxx_include_dir+set}" = set; then
+ withval="$with_gxx_include_dir"
+ case "${withval}" in
+yes) { echo "configure: error: bad value ${withval} given for g++ include directory" 1>&2; exit 1; } ;;
+no) ;;
+*) gcc_gxx_include_dir=$with_gxx_include_dir ;;
+esac
+fi
+
+
+if test x${gcc_gxx_include_dir} = x; then
+ if test x${enable_version_specific_runtime_libs} = xyes; then
+ gcc_gxx_include_dir='${libsubdir}/include/c++'
+ else
+ topsrcdir=${srcdir}/.. . ${srcdir}/../config.if
+ gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir}
+ fi
+fi
+
+# Check whether --with-cpp_install_dir or --without-cpp_install_dir was given.
+if test "${with_cpp_install_dir+set}" = set; then
+ withval="$with_cpp_install_dir"
+ if test x$withval = xyes; then
+ { echo "configure: error: option --with-cpp-install-dir requires an argument" 1>&2; exit 1; }
+elif test x$withval != xno; then
+ cpp_install_dir=$withval
+fi
+fi
+
+
+# -------------------
+# Find default linker
+# -------------------
+
+# With GNU ld
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+ withval="$with_gnu_ld"
+ gnu_ld_flag="$with_gnu_ld"
+else
+ gnu_ld_flag=no
+fi
+
+
+# With pre-defined ld
+# Check whether --with-ld or --without-ld was given.
+if test "${with_ld+set}" = set; then
+ withval="$with_ld"
+ DEFAULT_LINKER="$with_ld"
+fi
+
+if test x"${DEFAULT_LINKER+set}" = x"set"; then
+ if test ! -x "$DEFAULT_LINKER"; then
+ echo "configure: warning: cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" 1>&2
+ elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
+ gnu_ld_flag=yes
+ fi
+ cat >> confdefs.h <<EOF
+#define DEFAULT_LINKER "$DEFAULT_LINKER"
+EOF
+
+fi
+
+echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6
+echo "configure:909: checking whether a default linker was specified" >&5
+if test x"${DEFAULT_LINKER+set}" = x"set"; then
+ if test x"$gnu_ld_flag" = x"no"; then
+ echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6
+ else
+ echo "$ac_t""yes ($DEFAULT_LINKER - GNU ld)" 1>&6
+ fi
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+# ----------------------
+# Find default assembler
+# ----------------------
+
+# With GNU as
+# Check whether --with-gnu-as or --without-gnu-as was given.
+if test "${with_gnu_as+set}" = set; then
+ withval="$with_gnu_as"
+ gas_flag="$with_gnu_as"
+else
+ gas_flag=no
+fi
+
+
+# Check whether --with-as or --without-as was given.
+if test "${with_as+set}" = set; then
+ withval="$with_as"
+ DEFAULT_ASSEMBLER="$with_as"
+fi
+
+if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
+ if test ! -x "$DEFAULT_ASSEMBLER"; then
+ echo "configure: warning: cannot execute: $DEFAULT_ASSEMBLER: check --with-as or env. var. DEFAULT_ASSEMBLER" 1>&2
+ elif $DEFAULT_ASSEMBLER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
+ gas_flag=yes
+ fi
+ cat >> confdefs.h <<EOF
+#define DEFAULT_ASSEMBLER "$DEFAULT_ASSEMBLER"
+EOF
+
+fi
+
+echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6
+echo "configure:953: checking whether a default assembler was specified" >&5
+if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
+ if test x"$gas_flag" = x"no"; then
+ echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6
+ else
+ echo "$ac_t""yes ($DEFAULT_ASSEMBLER - GNU as)" 1>&6
+ fi
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+# ---------------
+# Find C compiler
+# ---------------
+
# Find the native compiler
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:936: checking for $ac_word" >&5
+echo "configure:972: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -962,7 +998,7 @@ if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:966: checking for $ac_word" >&5
+echo "configure:1002: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1013,7 +1049,7 @@ fi
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1017: checking for $ac_word" >&5
+echo "configure:1053: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1045,7 +1081,7 @@ fi
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1049: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1085: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1056,12 +1092,12 @@ cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext << EOF
-#line 1060 "configure"
+#line 1096 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1065: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1087,12 +1123,12 @@ if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1091: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1127: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1096: checking whether we are using GNU C" >&5
+echo "configure:1132: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1101,7 +1137,7 @@ else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1105: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1120,7 +1156,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1124: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1160: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1153,10 +1189,10 @@ fi
if test "x$CC" != xcc; then
echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6
-echo "configure:1157: checking whether $CC and cc understand -c and -o together" >&5
+echo "configure:1193: checking whether $CC and cc understand -c and -o together" >&5
else
echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6
-echo "configure:1160: checking whether cc understands -c and -o together" >&5
+echo "configure:1196: checking whether cc understands -c and -o together" >&5
fi
set dummy $CC; ac_cc="`echo $2 |
sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`"
@@ -1168,16 +1204,16 @@ else
# We do the test twice because some compilers refuse to overwrite an
# existing .o file with -o, though they will create one.
ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5'
-if { (eval echo configure:1172: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+if { (eval echo configure:1208: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
eval ac_cv_prog_cc_${ac_cc}_c_o=yes
if test "x$CC" != xcc; then
# Test first that cc exists at all.
- if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+ if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:1214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
ac_try='cc -c conftest.c -o conftest.o 1>&5'
- if { (eval echo configure:1180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
- test -f conftest.o && { (eval echo configure:1181: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
+ if { (eval echo configure:1216: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } &&
+ test -f conftest.o && { (eval echo configure:1217: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; };
then
# cc works too.
:
@@ -1212,139 +1248,26 @@ fi
-# See if GNAT has been installed
-if test $host != $build; then
- ac_tool_prefix=${host_alias}-
-else
- ac_tool_prefix=
-fi
-
-
-# Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1227: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$GNATBIND"; then
- ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GNATBIND="${ac_tool_prefix}gnatbind"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-GNATBIND="$ac_cv_prog_GNATBIND"
-if test -n "$GNATBIND"; then
- echo "$ac_t""$GNATBIND" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-if test -z "$ac_cv_prog_GNATBIND"; then
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "gnatbind", so it can be a program name with args.
-set dummy gnatbind; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1259: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$GNATBIND"; then
- ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_GNATBIND="gnatbind"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_GNATBIND" && ac_cv_prog_GNATBIND="no"
-fi
-fi
-GNATBIND="$ac_cv_prog_GNATBIND"
-if test -n "$GNATBIND"; then
- echo "$ac_t""$GNATBIND" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-else
- GNATBIND="no"
-fi
-fi
-
-echo $ac_n "checking for compiler driver that understands Ada""... $ac_c" 1>&6
-echo "configure:1292: checking for compiler driver that understands Ada" >&5
-if eval "test \"`echo '$''{'gcc_cv_prog_adac'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat >conftest.adb <<EOF
-procedure conftest is begin null; end conftest;
-EOF
-gcc_cv_prog_adac=no
-# Have to do ac_tool_prefix and user overrides by hand.
-for cand in ${ADAC+"$ADAC"} ${CC+"$CC"} \
- ${ac_tool_prefix}gcc gcc \
- ${ac_tool_prefix}cc cc \
- ${ac_tool_prefix}gnatgcc gnatgcc \
- ${ac_tool_prefix}gnatcc gnatcc \
- ${ac_tool_prefix}adagcc adagcc \
- ${ac_tool_prefix}adacc adacc ; do
- # There is a bug in all released versions of GCC which causes the
- # driver to exit successfully when the appropriate language module
- # has not been installed. This is fixed in 2.95.4, 3.0.2, and 3.1.
- # Therefore we must check for the error message as well as an
- # unsuccessful exit.
- errors=`($cand -c conftest.adb) 2>&1 || echo failure`
- if test x"$errors" = x; then
- gcc_cv_prog_adac=$cand
- break
- fi
-done
-rm -f conftest.*
-fi
-
-echo "$ac_t""$gcc_cv_prog_adac" 1>&6
-ADAC=$gcc_cv_prog_adac
-
-
-if test x$GNATBIND != xno && test x$ADAC != xno; then
- have_gnat=yes
-else
- have_gnat=no
-fi
-
+# -------------------------
+# Check C compiler features
+# -------------------------
echo $ac_n "checking whether ${CC-cc} accepts -Wno-long-long""... $ac_c" 1>&6
-echo "configure:1334: checking whether ${CC-cc} accepts -Wno-long-long" >&5
+echo "configure:1257: checking whether ${CC-cc} accepts -Wno-long-long" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_no_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
save_CFLAGS="$CFLAGS"
CFLAGS="-Wno-long-long"
cat > conftest.$ac_ext <<EOF
-#line 1341 "configure"
+#line 1264 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:1348: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_prog_cc_no_long_long=yes
else
@@ -1359,37 +1282,8 @@ fi
echo "$ac_t""$ac_cv_prog_cc_no_long_long" 1>&6
-if test x$have_gnat != xno ; then
-echo $ac_n "checking whether ${ADAC} accepts -Wno-long-long""... $ac_c" 1>&6
-echo "configure:1365: checking whether ${ADAC} accepts -Wno-long-long" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_adac_no_long_long'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat >conftest.adb <<EOF
-procedure conftest is begin null; end conftest;
-EOF
-if $ADAC -Wno-long-long -c conftest.adb 1>&5 2>&5 ; then
- ac_cv_prog_adac_no_long_long=yes
-else
- ac_cv_prog_adac_no_long_long=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_prog_adac_no_long_long" 1>&6
-else
- ac_cv_prog_adac_no_long_long=yes
-fi
-
-strict1_warn=
-if test $ac_cv_prog_cc_no_long_long = yes && \
- test $ac_cv_prog_adac_no_long_long = yes ; then
- strict1_warn="-pedantic -Wno-long-long"
-fi
-
-
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1393: checking how to run the C preprocessor" >&5
+echo "configure:1287: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -1404,13 +1298,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 1408 "configure"
+#line 1302 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1414: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1308: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1421,13 +1315,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 1425 "configure"
+#line 1319 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1325: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1438,13 +1332,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 1442 "configure"
+#line 1336 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1448: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1342: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -1469,21 +1363,21 @@ fi
echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:1473: checking for inline" >&5
+echo "configure:1367: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 1480 "configure"
+#line 1374 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:1487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
@@ -1509,19 +1403,19 @@ EOF
esac
echo $ac_n "checking for volatile""... $ac_c" 1>&6
-echo "configure:1513: checking for volatile" >&5
+echo "configure:1407: checking for volatile" >&5
if eval "test \"`echo '$''{'gcc_cv_c_volatile'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1518 "configure"
+#line 1412 "configure"
#include "confdefs.h"
int main() {
volatile int foo;
; return 0; }
EOF
-if { (eval echo configure:1525: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1419: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_volatile=yes
else
@@ -1543,7 +1437,7 @@ fi
echo $ac_n "checking for long double""... $ac_c" 1>&6
-echo "configure:1547: checking for long double" >&5
+echo "configure:1441: checking for long double" >&5
if eval "test \"`echo '$''{'gcc_cv_c_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1551,7 +1445,7 @@ else
gcc_cv_c_long_double=yes
else
cat > conftest.$ac_ext <<EOF
-#line 1555 "configure"
+#line 1449 "configure"
#include "confdefs.h"
int main() {
@@ -1561,7 +1455,7 @@ long double foo = 0.0;
switch (0) case 0: case (sizeof(long double) >= sizeof(double)):;
; return 0; }
EOF
-if { (eval echo configure:1565: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_long_double=yes
else
@@ -1583,19 +1477,19 @@ EOF
fi
echo $ac_n "checking for long long int""... $ac_c" 1>&6
-echo "configure:1587: checking for long long int" >&5
+echo "configure:1481: checking for long long int" >&5
if eval "test \"`echo '$''{'ac_cv_c_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1592 "configure"
+#line 1486 "configure"
#include "confdefs.h"
int main() {
long long int i;
; return 0; }
EOF
-if { (eval echo configure:1599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1493: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_long_long=yes
else
@@ -1615,19 +1509,19 @@ EOF
fi
echo $ac_n "checking for __int64""... $ac_c" 1>&6
-echo "configure:1619: checking for __int64" >&5
+echo "configure:1513: checking for __int64" >&5
if eval "test \"`echo '$''{'ac_cv_c___int64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1624 "configure"
+#line 1518 "configure"
#include "confdefs.h"
int main() {
__int64 i;
; return 0; }
EOF
-if { (eval echo configure:1631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1525: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c___int64=yes
else
@@ -1648,19 +1542,19 @@ EOF
fi
echo $ac_n "checking for built-in _Bool""... $ac_c" 1>&6
-echo "configure:1652: checking for built-in _Bool" >&5
+echo "configure:1546: checking for built-in _Bool" >&5
if eval "test \"`echo '$''{'gcc_cv_c__bool'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1657 "configure"
+#line 1551 "configure"
#include "confdefs.h"
int main() {
_Bool foo;
; return 0; }
EOF
-if { (eval echo configure:1664: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c__bool=yes
else
@@ -1684,13 +1578,13 @@ fi
# sizeof(char) is 1 by definition.
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:1688: checking size of short" >&5
+echo "configure:1582: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1694 "configure"
+#line 1588 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1700,7 +1594,7 @@ int main() {
switch (0) case 0: case (sizeof (short) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_short=$ac_size
else
@@ -1723,13 +1617,13 @@ EOF
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:1727: checking size of int" >&5
+echo "configure:1621: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1733 "configure"
+#line 1627 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1739,7 +1633,7 @@ int main() {
switch (0) case 0: case (sizeof (int) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1743: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_int=$ac_size
else
@@ -1762,13 +1656,13 @@ EOF
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:1766: checking size of long" >&5
+echo "configure:1660: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1772 "configure"
+#line 1666 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1778,7 +1672,7 @@ int main() {
switch (0) case 0: case (sizeof (long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long=$ac_size
else
@@ -1802,13 +1696,13 @@ EOF
if test $ac_cv_c_long_long = yes; then
echo $ac_n "checking size of long long""... $ac_c" 1>&6
-echo "configure:1806: checking size of long long" >&5
+echo "configure:1700: checking size of long long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1812 "configure"
+#line 1706 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1818,7 +1712,7 @@ int main() {
switch (0) case 0: case (sizeof (long long) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1822: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1716: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_long_long=$ac_size
else
@@ -1843,13 +1737,13 @@ EOF
fi
if test $ac_cv_c___int64 = yes; then
echo $ac_n "checking size of __int64""... $ac_c" 1>&6
-echo "configure:1847: checking size of __int64" >&5
+echo "configure:1741: checking size of __int64" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof___int64'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 1853 "configure"
+#line 1747 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -1859,7 +1753,7 @@ int main() {
switch (0) case 0: case (sizeof (__int64) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:1863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1757: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof___int64=$ac_size
else
@@ -1884,12 +1778,12 @@ EOF
fi
echo $ac_n "checking execution character set""... $ac_c" 1>&6
-echo "configure:1888: checking execution character set" >&5
+echo "configure:1782: checking execution character set" >&5
if eval "test \"`echo '$''{'ac_cv_c_charset'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1893 "configure"
+#line 1787 "configure"
#include "confdefs.h"
#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
&& 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21
@@ -1905,7 +1799,7 @@ rm -f conftest*
if test x${ac_cv_c_charset+set} != xset; then
cat > conftest.$ac_ext <<EOF
-#line 1909 "configure"
+#line 1803 "configure"
#include "confdefs.h"
#if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \
&& 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A
@@ -1935,6 +1829,160 @@ EOF
fi
+# -----------------
+# Find Ada compiler
+# -----------------
+
+# See if GNAT has been installed
+if test $host != $build; then
+ ac_tool_prefix=${host_alias}-
+else
+ ac_tool_prefix=
+fi
+
+
+# Extract the first word of "${ac_tool_prefix}gnatbind", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gnatbind; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1848: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$GNATBIND"; then
+ ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_GNATBIND="${ac_tool_prefix}gnatbind"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+GNATBIND="$ac_cv_prog_GNATBIND"
+if test -n "$GNATBIND"; then
+ echo "$ac_t""$GNATBIND" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$ac_cv_prog_GNATBIND"; then
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "gnatbind", so it can be a program name with args.
+set dummy gnatbind; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1880: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_GNATBIND'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$GNATBIND"; then
+ ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_GNATBIND="gnatbind"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_GNATBIND" && ac_cv_prog_GNATBIND="no"
+fi
+fi
+GNATBIND="$ac_cv_prog_GNATBIND"
+if test -n "$GNATBIND"; then
+ echo "$ac_t""$GNATBIND" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ GNATBIND="no"
+fi
+fi
+
+echo $ac_n "checking for compiler driver that understands Ada""... $ac_c" 1>&6
+echo "configure:1913: checking for compiler driver that understands Ada" >&5
+if eval "test \"`echo '$''{'gcc_cv_prog_adac'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat >conftest.adb <<EOF
+procedure conftest is begin null; end conftest;
+EOF
+gcc_cv_prog_adac=no
+# Have to do ac_tool_prefix and user overrides by hand.
+for cand in ${ADAC+"$ADAC"} ${CC+"$CC"} \
+ ${ac_tool_prefix}gcc gcc \
+ ${ac_tool_prefix}cc cc \
+ ${ac_tool_prefix}gnatgcc gnatgcc \
+ ${ac_tool_prefix}gnatcc gnatcc \
+ ${ac_tool_prefix}adagcc adagcc \
+ ${ac_tool_prefix}adacc adacc ; do
+ # There is a bug in all released versions of GCC which causes the
+ # driver to exit successfully when the appropriate language module
+ # has not been installed. This is fixed in 2.95.4, 3.0.2, and 3.1.
+ # Therefore we must check for the error message as well as an
+ # unsuccessful exit.
+ errors=`($cand -c conftest.adb) 2>&1 || echo failure`
+ if test x"$errors" = x; then
+ gcc_cv_prog_adac=$cand
+ break
+ fi
+done
+rm -f conftest.*
+fi
+
+echo "$ac_t""$gcc_cv_prog_adac" 1>&6
+ADAC=$gcc_cv_prog_adac
+
+
+if test x$GNATBIND != xno && test x$ADAC != xno; then
+ have_gnat=yes
+else
+ have_gnat=no
+fi
+
+
+if test x$have_gnat != xno ; then
+echo $ac_n "checking whether ${ADAC} accepts -Wno-long-long""... $ac_c" 1>&6
+echo "configure:1956: checking whether ${ADAC} accepts -Wno-long-long" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_adac_no_long_long'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat >conftest.adb <<EOF
+procedure conftest is begin null; end conftest;
+EOF
+if $ADAC -Wno-long-long -c conftest.adb 1>&5 2>&5 ; then
+ ac_cv_prog_adac_no_long_long=yes
+else
+ ac_cv_prog_adac_no_long_long=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_prog_adac_no_long_long" 1>&6
+else
+ ac_cv_prog_adac_no_long_long=yes
+fi
+
+# ---------------------
+# Warnings and checking
+# ---------------------
+
+strict1_warn=
+if test $ac_cv_prog_cc_no_long_long = yes && \
+ test $ac_cv_prog_adac_no_long_long = yes ; then
+ strict1_warn="-pedantic -Wno-long-long"
+fi
+
+
# If the native compiler is GCC, we can enable warnings even in stage1.
# That's useful for people building cross-compilers, or just running a
# quick `make'.
@@ -1944,17 +1992,6 @@ if test "x$GCC" = "xyes"; then
fi
-# Determine whether or not multilibs are enabled.
-# Check whether --enable-multilib or --disable-multilib was given.
-if test "${enable_multilib+set}" = set; then
- enableval="$enable_multilib"
- :
-else
- enable_multilib=yes
-fi
-
-
-
# Enable -Werror in bootstrap stage2 and later.
# Change the default to "no" on release branches.
# Check whether --enable-werror or --disable-werror was given.
@@ -2052,19 +2089,44 @@ valgrind_command=
if test x$ac_checking_valgrind != x ; then
# It is certainly possible that there's valgrind but no valgrind.h.
# GCC relies on making annotations so we must have both.
+ echo $ac_n "checking for VALGRIND_DISCARD in <memcheck.h>""... $ac_c" 1>&6
+echo "configure:2094: checking for VALGRIND_DISCARD in <memcheck.h>" >&5
+ cat > conftest.$ac_ext <<EOF
+#line 2096 "configure"
+#include "confdefs.h"
+#include <memcheck.h>
+#ifndef VALGRIND_DISCARD
+#error VALGRIND_DISCARD not defined
+#endif
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2104: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ gcc_cv_header_memcheck_h=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ gcc_cv_header_memcheck_h=no
+fi
+rm -f conftest*
+ echo "$ac_t""$gcc_cv_header_memcheck_h" 1>&6
ac_safe=`echo "valgrind.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for valgrind.h""... $ac_c" 1>&6
-echo "configure:2058: checking for valgrind.h" >&5
+echo "configure:2120: checking for valgrind.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2063 "configure"
+#line 2125 "configure"
#include "confdefs.h"
#include <valgrind.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2068: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2089,7 +2151,7 @@ fi
# Extract the first word of "valgrind", so it can be a program name with args.
set dummy valgrind; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2093: checking for $ac_word" >&5
+echo "configure:2155: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_valgrind_path'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2119,8 +2181,8 @@ else
echo "$ac_t""no" 1>&6
fi
- if test "x$valgrind_path" = "x" || test $have_valgrind_h = no; then
- { echo "configure: error: *** Can't find both valgrind and valgrind.h" 1>&2; exit 1; }
+ if test "x$valgrind_path" = "x" || (test $have_valgrind_h = no && test $gcc_cv_header_memcheck_h = no); then
+ { echo "configure: error: *** Can't find both valgrind and valgrind.h/memcheck.h" 1>&2; exit 1; }
fi
valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
valgrind_command="$valgrind_path -q"
@@ -2128,6 +2190,12 @@ fi
#define ENABLE_VALGRIND_CHECKING 1
EOF
+ if test $gcc_cv_header_memcheck_h = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_MEMCHECK_H 1
+EOF
+
+ fi
fi
@@ -2153,17 +2221,41 @@ fi
-# Check whether --with-cpp_install_dir or --without-cpp_install_dir was given.
-if test "${with_cpp_install_dir+set}" = set; then
- withval="$with_cpp_install_dir"
- if test x$withval = xyes; then
- { echo "configure: error: option --with-cpp-install-dir requires an argument" 1>&2; exit 1; }
-elif test x$withval != xno; then
- cpp_install_dir=$withval
+# -------------------------------
+# Miscenalleous configure options
+# -------------------------------
+
+# With stabs
+# Check whether --with-stabs or --without-stabs was given.
+if test "${with_stabs+set}" = set; then
+ withval="$with_stabs"
+ stabs="$with_stabs"
+else
+ stabs=no
+fi
+
+
+# With ELF
+# Check whether --with-elf or --without-elf was given.
+if test "${with_elf+set}" = set; then
+ withval="$with_elf"
+ elf="$with_elf"
+else
+ elf=no
fi
+
+
+# Determine whether or not multilibs are enabled.
+# Check whether --enable-multilib or --disable-multilib was given.
+if test "${enable_multilib+set}" = set; then
+ enableval="$enable_multilib"
+ :
+else
+ enable_multilib=yes
fi
+
# Enable __cxa_atexit for C++.
# Check whether --enable-__cxa_atexit or --disable-__cxa_atexit was given.
if test "${enable___cxa_atexit+set}" = set; then
@@ -2302,7 +2394,7 @@ if test "${with_sysroot+set}" = set; then
else
TARGET_SYSTEM_ROOT=
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=0'
+ TARGET_SYSTEM_ROOT_DEFINE=
CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
fi
@@ -2311,29 +2403,12 @@ fi
-# Stage specific cflags for build.
-stage1_cflags=
-case $build in
-vax-*-*)
- if test x$GCC = xyes
- then
- stage1_cflags="-Wa,-J"
- else
- stage1_cflags="-J"
- fi
- ;;
-powerpc-*-darwin*)
- # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
- # sources; use -no-cpp-precomp to get to GNU cpp.
- # Apple's GCC has bugs in designated initializer handling, so disable
- # that too.
- stage1_cflags="-no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
- ;;
-esac
-
+# -------------------------
+# Checks for other programs
+# -------------------------
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:2337: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:2412: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2360,73 +2435,13 @@ else
fi
-echo $ac_n "checking whether a default assembler was specified""... $ac_c" 1>&6
-echo "configure:2365: checking whether a default assembler was specified" >&5
-if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
- if test x"$gas_flag" = x"no"; then
- echo "$ac_t""yes ($DEFAULT_ASSEMBLER)" 1>&6
- else
- echo "$ac_t""yes ($DEFAULT_ASSEMBLER - GNU as)" 1>&6
- fi
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking whether a default linker was specified""... $ac_c" 1>&6
-echo "configure:2377: checking whether a default linker was specified" >&5
-if test x"${DEFAULT_LINKER+set}" = x"set"; then
- if test x"$gnu_ld_flag" = x"no"; then
- echo "$ac_t""yes ($DEFAULT_LINKER)" 1>&6
- else
- echo "$ac_t""yes ($DEFAULT_LINKER - GNU ld)" 1>&6
- fi
-else
- echo "$ac_t""no" 1>&6
-fi
-
-echo $ac_n "checking for GNU C library""... $ac_c" 1>&6
-echo "configure:2389: checking for GNU C library" >&5
-if eval "test \"`echo '$''{'gcc_cv_glibc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 2394 "configure"
-#include "confdefs.h"
-#include <features.h>
-int main() {
-
-#if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
-#error Not a GNU C library system
-#endif
-; return 0; }
-EOF
-if { (eval echo configure:2404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- gcc_cv_glibc=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- gcc_cv_glibc=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$gcc_cv_glibc" 1>&6
-if test $gcc_cv_glibc = yes; then
- cat >> confdefs.h <<\EOF
-#define _GNU_SOURCE 1
-EOF
-
-fi
-
# Find some useful tools
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2430: checking for $ac_word" >&5
+echo "configure:2445: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2456,7 +2471,7 @@ test -n "$AWK" && break
done
echo $ac_n "checking whether ln works""... $ac_c" 1>&6
-echo "configure:2460: checking whether ln works" >&5
+echo "configure:2475: checking whether ln works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2488,7 +2503,7 @@ else
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:2492: checking whether ln -s works" >&5
+echo "configure:2507: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'gcc_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2522,7 +2537,7 @@ fi
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2526: checking for $ac_word" >&5
+echo "configure:2541: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2560,7 +2575,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2564: checking for a BSD compatible install" >&5
+echo "configure:2579: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2610,13 +2625,241 @@ test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+# See if we have the mktemp command.
+# Extract the first word of "mktemp", so it can be a program name with args.
+set dummy mktemp; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2633: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_have_mktemp_command'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$have_mktemp_command"; then
+ ac_cv_prog_have_mktemp_command="$have_mktemp_command" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_have_mktemp_command="yes"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_have_mktemp_command" && ac_cv_prog_have_mktemp_command="no"
+fi
+fi
+have_mktemp_command="$ac_cv_prog_have_mktemp_command"
+if test -n "$have_mktemp_command"; then
+ echo "$ac_t""$have_mktemp_command" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+# Do we have a single-tree copy of texinfo?
+if test -f $srcdir/../texinfo/Makefile.in; then
+ MAKEINFO='$(objdir)/../texinfo/makeinfo/makeinfo'
+ gcc_cv_prog_makeinfo_modern=yes
+ echo "$ac_t""Using makeinfo from the unified source tree." 1>&6
+else
+ # See if makeinfo has been installed and is modern enough
+ # that we can use it.
+ # Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2672: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$MAKEINFO"; then
+ ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_MAKEINFO="makeinfo"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+MAKEINFO="$ac_cv_prog_MAKEINFO"
+if test -n "$MAKEINFO"; then
+ echo "$ac_t""$MAKEINFO" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -n "$MAKEINFO"; then
+ # Found it, now check the version.
+ echo $ac_n "checking for modern makeinfo""... $ac_c" 1>&6
+echo "configure:2701: checking for modern makeinfo" >&5
+if eval "test \"`echo '$''{'gcc_cv_prog_makeinfo_modern'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_prog_version=`$MAKEINFO --version 2>&1 |
+ sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
+ echo "configure:2707: version of makeinfo is $ac_prog_version" >&5
+ case $ac_prog_version in
+ '') gcc_cv_prog_makeinfo_modern=no;;
+ 4.[2-9]*)
+ gcc_cv_prog_makeinfo_modern=yes;;
+ *) gcc_cv_prog_makeinfo_modern=no;;
+ esac
+
+fi
+
+echo "$ac_t""$gcc_cv_prog_makeinfo_modern" 1>&6
+else
+ gcc_cv_prog_makeinfo_modern=no
+fi
+
+fi
+
+if test $gcc_cv_prog_makeinfo_modern = no; then
+ echo "configure: warning:
+*** Makeinfo is missing or too old.
+*** Info documentation will not be built." 1>&2
+ BUILD_INFO=
+else
+ BUILD_INFO=info
+fi
+
+# Is pod2man recent enough to regenerate manpages?
+echo $ac_n "checking for recent Pod::Man""... $ac_c" 1>&6
+echo "configure:2735: checking for recent Pod::Man" >&5
+if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
+ echo "$ac_t""yes" 1>&6
+ GENERATED_MANPAGES=generated-manpages
+else
+ echo "$ac_t""no" 1>&6
+ GENERATED_MANPAGES=
+fi
+
+# How about lex?
+if test -f $srcdir/../flex/skel.c; then
+ FLEX='$(objdir)/../flex/flex'
+else
+ # Extract the first word of "flex", so it can be a program name with args.
+set dummy flex; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2751: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$FLEX"; then
+ ac_cv_prog_FLEX="$FLEX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_FLEX="flex"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_FLEX" && ac_cv_prog_FLEX="${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing flex"
+fi
+fi
+FLEX="$ac_cv_prog_FLEX"
+if test -n "$FLEX"; then
+ echo "$ac_t""$FLEX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+# Bison?
+# The -L switch is so bison can find its skeleton file.
+if test -f $srcdir/../bison/bison.simple; then
+ BISON='$(objdir)/../bison/bison -L $(srcdir)/../bison/'
+else
+ # Extract the first word of "bison", so it can be a program name with args.
+set dummy bison; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2788: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$BISON"; then
+ ac_cv_prog_BISON="$BISON" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_BISON="bison"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_BISON" && ac_cv_prog_BISON="${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing bison"
+fi
+fi
+BISON="$ac_cv_prog_BISON"
+if test -n "$BISON"; then
+ echo "$ac_t""$BISON" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+# --------------------
+# Checks for C headers
+# --------------------
+
+echo $ac_n "checking for GNU C library""... $ac_c" 1>&6
+echo "configure:2822: checking for GNU C library" >&5
+if eval "test \"`echo '$''{'gcc_cv_glibc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2827 "configure"
+#include "confdefs.h"
+#include <features.h>
+int main() {
+
+#if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
+#error Not a GNU C library system
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:2837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ gcc_cv_glibc=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ gcc_cv_glibc=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$gcc_cv_glibc" 1>&6
+if test $gcc_cv_glibc = yes; then
+ cat >> confdefs.h <<\EOF
+#define _GNU_SOURCE 1
+EOF
+
+fi
+
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2615: checking for ANSI C header files" >&5
+echo "configure:2858: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2620 "configure"
+#line 2863 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -2624,7 +2867,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2628: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2871: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2641,7 +2884,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2645 "configure"
+#line 2888 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -2659,7 +2902,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2663 "configure"
+#line 2906 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -2680,7 +2923,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 2684 "configure"
+#line 2927 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2691,7 +2934,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:2695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -2715,12 +2958,12 @@ EOF
fi
echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:2719: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:2962: checking whether time.h and sys/time.h may both be included" >&5
if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2724 "configure"
+#line 2967 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/time.h>
@@ -2729,7 +2972,7 @@ int main() {
struct tm *tp;
; return 0; }
EOF
-if { (eval echo configure:2733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2976: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_time=yes
else
@@ -2750,19 +2993,19 @@ EOF
fi
echo $ac_n "checking for working stdbool.h""... $ac_c" 1>&6
-echo "configure:2754: checking for working stdbool.h" >&5
+echo "configure:2997: checking for working stdbool.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdbool_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2759 "configure"
+#line 3002 "configure"
#include "confdefs.h"
#include <stdbool.h>
int main() {
bool foo = false;
; return 0; }
EOF
-if { (eval echo configure:2766: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3009: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_stdbool_h=yes
else
@@ -2783,12 +3026,12 @@ EOF
fi
echo $ac_n "checking whether string.h and strings.h may both be included""... $ac_c" 1>&6
-echo "configure:2787: checking whether string.h and strings.h may both be included" >&5
+echo "configure:3030: checking whether string.h and strings.h may both be included" >&5
if eval "test \"`echo '$''{'gcc_cv_header_string'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2792 "configure"
+#line 3035 "configure"
#include "confdefs.h"
#include <string.h>
#include <strings.h>
@@ -2796,7 +3039,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:2800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_header_string=yes
else
@@ -2817,12 +3060,12 @@ EOF
fi
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:2821: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:3064: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2826 "configure"
+#line 3069 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -2838,7 +3081,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:2842: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3085: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -2865,17 +3108,17 @@ for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h \
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2869: checking for $ac_hdr" >&5
+echo "configure:3112: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2874 "configure"
+#line 3117 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2879: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3122: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2905,17 +3148,17 @@ done
# Check for thread headers.
ac_safe=`echo "thread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for thread.h""... $ac_c" 1>&6
-echo "configure:2909: checking for thread.h" >&5
+echo "configure:3152: checking for thread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2914 "configure"
+#line 3157 "configure"
#include "confdefs.h"
#include <thread.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2939,17 +3182,17 @@ fi
ac_safe=`echo "pthread.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for pthread.h""... $ac_c" 1>&6
-echo "configure:2943: checking for pthread.h" >&5
+echo "configure:3186: checking for pthread.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2948 "configure"
+#line 3191 "configure"
#include "confdefs.h"
#include <pthread.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2974,12 +3217,12 @@ fi
# These tests can't be done till we know if we have limits.h.
echo $ac_n "checking for CHAR_BIT""... $ac_c" 1>&6
-echo "configure:2978: checking for CHAR_BIT" >&5
+echo "configure:3221: checking for CHAR_BIT" >&5
if eval "test \"`echo '$''{'gcc_cv_decl_char_bit'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2983 "configure"
+#line 3226 "configure"
#include "confdefs.h"
#ifdef HAVE_LIMITS_H
#include <limits.h>
@@ -3004,7 +3247,7 @@ fi
echo "$ac_t""$gcc_cv_decl_char_bit" 1>&6
if test $gcc_cv_decl_char_bit = no; then
echo $ac_n "checking number of bits in a byte""... $ac_c" 1>&6
-echo "configure:3008: checking number of bits in a byte" >&5
+echo "configure:3251: checking number of bits in a byte" >&5
if eval "test \"`echo '$''{'gcc_cv_c_nbby'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3012,7 +3255,7 @@ else
gcc_cv_c_nbby=
while test $i -lt 65; do
cat > conftest.$ac_ext <<EOF
-#line 3016 "configure"
+#line 3259 "configure"
#include "confdefs.h"
int main() {
@@ -3022,7 +3265,7 @@ switch(0) {
; }
; return 0; }
EOF
-if { (eval echo configure:3026: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3269: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_c_nbby=$i; break
else
@@ -3047,14 +3290,14 @@ EOF
fi
fi
echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6
-echo "configure:3051: checking whether byte ordering is bigendian" >&5
+echo "configure:3294: checking whether byte ordering is bigendian" >&5
if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_bigendian=unknown
# See if sys/param.h defines the BYTE_ORDER macro.
cat > conftest.$ac_ext <<EOF
-#line 3058 "configure"
+#line 3301 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -3065,11 +3308,11 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:3069: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3312: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
# It does; now see whether it defined to BIG_ENDIAN or not.
cat > conftest.$ac_ext <<EOF
-#line 3073 "configure"
+#line 3316 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/param.h>
@@ -3080,7 +3323,7 @@ int main() {
#endif
; return 0; }
EOF
-if { (eval echo configure:3084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_bigendian=yes
else
@@ -3100,7 +3343,7 @@ if test "$cross_compiling" = yes; then
echo $ac_n "cross-compiling... " 2>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3104 "configure"
+#line 3347 "configure"
#include "confdefs.h"
main () {
/* Are we little or big endian? From Harbison&Steele. */
@@ -3113,7 +3356,7 @@ main () {
exit (u.c[sizeof (long) - 1] == 1);
}
EOF
-if { (eval echo configure:3117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_bigendian=no
else
@@ -3131,7 +3374,7 @@ fi
echo "$ac_t""$ac_cv_c_bigendian" 1>&6
if test $ac_cv_c_bigendian = unknown; then
echo $ac_n "checking to probe for byte ordering""... $ac_c" 1>&6
-echo "configure:3135: checking to probe for byte ordering" >&5
+echo "configure:3378: checking to probe for byte ordering" >&5
cat >conftest.c <<EOF
short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
@@ -3182,319 +3425,36 @@ if test $ac_cv_c_bigendian = unknown; then
{ echo "configure: error: unknown endianess - sorry" 1>&2; exit 1; }
fi
-echo $ac_n "checking floating point format""... $ac_c" 1>&6
-echo "configure:3187: checking floating point format" >&5
-if eval "test \"`echo '$''{'ac_cv_c_float_format'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-cat > conftest.$ac_ext <<EOF
-#line 3200 "configure"
-#include "confdefs.h"
-/* This will not work unless sizeof(double) == 8. */
-extern char sizeof_double_must_be_8 [sizeof(double) == 8 ? 1 : -1];
-
-/* This structure must have no internal padding. */
-struct possibility {
- char prefix[8];
- double candidate;
- char postfix[8];
-};
-
-#define C(cand) { "\nformat:", cand, ":tamrof\n" }
-struct possibility table [] =
-{
- C( 3.25724264705901305206e+01), /* @@IEEEFP - IEEE 754 */
- C( 3.53802595280598432000e+18), /* D__float - VAX */
- C( 5.32201830133125317057e-19), /* D.PDP-10 - PDP-10 - the dot is 0x13a */
- C( 1.77977764695171661377e+10), /* IBMHEXFP - s/390 format, ascii */
- C(-5.22995989424860458374e+10) /* IBMHEXFP - s/390 format, EBCDIC */
-};
-EOF
-if { (eval echo configure:3222: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- od -c conftest.o |
- sed 's/^[0-7]*[ ]*/ /
- s/\*/./g
- s/ \\n/*/g
- s/ [0-9][0-9][0-9]/./g
- s/ \\[^ ]/./g' |
- tr -d '
- ' | tr -s '*' '
-' | fold | sed '$a\
-' > conftest.dmp
- if grep 'format:.@IEEEF.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (big-endian)'
- elif grep 'format:.I@@PFE.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (big-endian)'
- elif grep 'format:.FEEEI@.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (little-endian)'
- elif grep 'format:.EFP@@I.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IEEE (little-endian)'
- elif grep 'format:.__floa.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='VAX D-float'
- elif grep 'format:..PDP-1.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='PDP-10'
- elif grep 'format:.BMHEXF.:tamrof' conftest.dmp >/dev/null 2>&1; then
- ac_cv_c_float_format='IBM 370 hex'
+# --------
+# UNSORTED
+# --------
+
+# Stage specific cflags for build.
+stage1_cflags=
+case $build in
+vax-*-*)
+ if test x$GCC = xyes
+ then
+ stage1_cflags="-Wa,-J"
else
- { echo "configure: error: Unknown floating point format" 1>&2; exit 1; }
+ stage1_cflags="-J"
fi
-else
- { echo "configure: error: compile failed" 1>&2; exit 1; }
-fi
-rm -rf conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-
-fi
-
-echo "$ac_t""$ac_cv_c_float_format" 1>&6
-# IEEE is the default format. If the float endianness isn't the same
-# as the integer endianness, we have to set FLOAT_WORDS_BIG_ENDIAN
-# (which is a tristate: yes, no, default). This is only an issue with
-# IEEE; the other formats are only supported by a few machines each,
-# all with the same endianness.
-format=
-fbigend=
-case $ac_cv_c_float_format in
- 'IEEE (big-endian)' )
- if test $ac_cv_c_bigendian = no; then
- fbigend=1
- fi
- ;;
- 'IEEE (little-endian)' )
- if test $ac_cv_c_bigendian = yes; then
- fbigend=0
- fi
- ;;
- 'VAX D-float' )
- format=VAX_FLOAT_FORMAT
- ;;
- 'PDP-10' )
- format=PDP10_FLOAT_FORMAT
- ;;
- 'IBM 370 hex' )
- format=IBM_FLOAT_FORMAT
- ;;
+ ;;
+powerpc-*-darwin*)
+ # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
+ # sources; use -no-cpp-precomp to get to GNU cpp.
+ # Apple's GCC has bugs in designated initializer handling, so disable
+ # that too.
+ stage1_cflags="-no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
+ ;;
esac
-if test -n "$format"; then
- cat >> confdefs.h <<EOF
-#define HOST_FLOAT_FORMAT $format
-EOF
-
-fi
-if test -n "$fbigend"; then
- cat >> confdefs.h <<EOF
-#define HOST_FLOAT_WORDS_BIG_ENDIAN $fbigend
-EOF
-
-fi
-
-
-# See if we have the mktemp command.
-# Extract the first word of "mktemp", so it can be a program name with args.
-set dummy mktemp; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3311: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_have_mktemp_command'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$have_mktemp_command"; then
- ac_cv_prog_have_mktemp_command="$have_mktemp_command" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_have_mktemp_command="yes"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_have_mktemp_command" && ac_cv_prog_have_mktemp_command="no"
-fi
-fi
-have_mktemp_command="$ac_cv_prog_have_mktemp_command"
-if test -n "$have_mktemp_command"; then
- echo "$ac_t""$have_mktemp_command" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-
-# Do we have a single-tree copy of texinfo?
-if test -f $srcdir/../texinfo/Makefile.in; then
- MAKEINFO='$(objdir)/../texinfo/makeinfo/makeinfo'
- gcc_cv_prog_makeinfo_modern=yes
- echo "$ac_t""Using makeinfo from the unified source tree." 1>&6
-else
- # See if makeinfo has been installed and is modern enough
- # that we can use it.
- # Extract the first word of "makeinfo", so it can be a program name with args.
-set dummy makeinfo; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3350: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$MAKEINFO"; then
- ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_MAKEINFO="makeinfo"
- break
- fi
- done
- IFS="$ac_save_ifs"
-fi
-fi
-MAKEINFO="$ac_cv_prog_MAKEINFO"
-if test -n "$MAKEINFO"; then
- echo "$ac_t""$MAKEINFO" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-if test -n "$MAKEINFO"; then
- # Found it, now check the version.
- echo $ac_n "checking for modern makeinfo""... $ac_c" 1>&6
-echo "configure:3379: checking for modern makeinfo" >&5
-if eval "test \"`echo '$''{'gcc_cv_prog_makeinfo_modern'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_prog_version=`$MAKEINFO --version 2>&1 |
- sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'`
- echo "configure:3385: version of makeinfo is $ac_prog_version" >&5
- case $ac_prog_version in
- '') gcc_cv_prog_makeinfo_modern=no;;
- 4.[2-9]*)
- gcc_cv_prog_makeinfo_modern=yes;;
- *) gcc_cv_prog_makeinfo_modern=no;;
- esac
-fi
-
-echo "$ac_t""$gcc_cv_prog_makeinfo_modern" 1>&6
-else
- gcc_cv_prog_makeinfo_modern=no
-fi
-
-fi
-
-if test $gcc_cv_prog_makeinfo_modern = no; then
- echo "configure: warning:
-*** Makeinfo is missing or too old.
-*** Info documentation will not be built." 1>&2
- BUILD_INFO=
-else
- BUILD_INFO=info
-fi
-
-# Is pod2man recent enough to regenerate manpages?
-echo $ac_n "checking for recent Pod::Man""... $ac_c" 1>&6
-echo "configure:3413: checking for recent Pod::Man" >&5
-if (perl -e 'use 1.10 Pod::Man') >/dev/null 2>&1; then
- echo "$ac_t""yes" 1>&6
- GENERATED_MANPAGES=generated-manpages
-else
- echo "$ac_t""no" 1>&6
- GENERATED_MANPAGES=
-fi
-
-# How about lex?
-if test -f $srcdir/../flex/skel.c; then
- FLEX='$(objdir)/../flex/flex'
-else
- # Extract the first word of "flex", so it can be a program name with args.
-set dummy flex; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3429: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_FLEX'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$FLEX"; then
- ac_cv_prog_FLEX="$FLEX" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_FLEX="flex"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_FLEX" && ac_cv_prog_FLEX="${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing flex"
-fi
-fi
-FLEX="$ac_cv_prog_FLEX"
-if test -n "$FLEX"; then
- echo "$ac_t""$FLEX" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
-
-# Bison?
-# The -L switch is so bison can find its skeleton file.
-if test -f $srcdir/../bison/bison.simple; then
- BISON='$(objdir)/../bison/bison -L $(srcdir)/../bison/'
-else
- # Extract the first word of "bison", so it can be a program name with args.
-set dummy bison; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3466: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_BISON'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$BISON"; then
- ac_cv_prog_BISON="$BISON" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_BISON="bison"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_BISON" && ac_cv_prog_BISON="${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing bison"
-fi
-fi
-BISON="$ac_cv_prog_BISON"
-if test -n "$BISON"; then
- echo "$ac_t""$BISON" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
-fi
# These libraries may be used by collect2.
# We may need a special search path to get them linked.
echo $ac_n "checking for collect2 libraries""... $ac_c" 1>&6
-echo "configure:3498: checking for collect2 libraries" >&5
+echo "configure:3458: checking for collect2 libraries" >&5
if eval "test \"`echo '$''{'gcc_cv_collect2_libs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3505,7 +3465,7 @@ for libs in '' -lld -lmld \
do
LIBS="$libs"
cat > conftest.$ac_ext <<EOF
-#line 3509 "configure"
+#line 3469 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3516,7 +3476,7 @@ int main() {
ldopen()
; return 0; }
EOF
-if { (eval echo configure:3520: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gcc_cv_collect2_libs="$libs"; break
else
@@ -3542,14 +3502,14 @@ save_LIBS="$LIBS"
LIBS=
echo $ac_n "checking for library containing exc_resume""... $ac_c" 1>&6
-echo "configure:3546: checking for library containing exc_resume" >&5
+echo "configure:3506: checking for library containing exc_resume" >&5
if eval "test \"`echo '$''{'ac_cv_search_exc_resume'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_exc_resume="no"
cat > conftest.$ac_ext <<EOF
-#line 3553 "configure"
+#line 3513 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3560,7 +3520,7 @@ int main() {
exc_resume()
; return 0; }
EOF
-if { (eval echo configure:3564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_exc_resume="none required"
else
@@ -3571,7 +3531,7 @@ rm -f conftest*
test "$ac_cv_search_exc_resume" = "no" && for i in exc; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3575 "configure"
+#line 3535 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3582,7 +3542,7 @@ int main() {
exc_resume()
; return 0; }
EOF
-if { (eval echo configure:3586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_exc_resume="-l$i"
break
@@ -3606,17 +3566,87 @@ GNAT_LIBEXC="$LIBS"
LIBS="$save_LIBS"
+# Some systems put ldexp and frexp in libm instead of libc; assume
+# they're both in the same place. jcf-dump needs them.
+save_LIBS="$LIBS"
+LIBS=
+
+echo $ac_n "checking for library containing ldexp""... $ac_c" 1>&6
+echo "configure:3576: checking for library containing ldexp" >&5
+if eval "test \"`echo '$''{'ac_cv_search_ldexp'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_func_search_save_LIBS="$LIBS"
+ac_cv_search_ldexp="no"
+cat > conftest.$ac_ext <<EOF
+#line 3583 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char ldexp();
+
+int main() {
+ldexp()
+; return 0; }
+EOF
+if { (eval echo configure:3594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_ldexp="none required"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+test "$ac_cv_search_ldexp" = "no" && for i in m; do
+LIBS="-l$i $ac_func_search_save_LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3605 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char ldexp();
+
+int main() {
+ldexp()
+; return 0; }
+EOF
+if { (eval echo configure:3616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_search_ldexp="-l$i"
+break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+LIBS="$ac_func_search_save_LIBS"
+fi
+
+echo "$ac_t""$ac_cv_search_ldexp" 1>&6
+if test "$ac_cv_search_ldexp" != "no"; then
+ test "$ac_cv_search_ldexp" = "none required" || LIBS="$ac_cv_search_ldexp $LIBS"
+
+else :
+
+fi
+LDEXP_LIB="$LIBS"
+LIBS="$save_LIBS"
+
+
# See if the stage1 system preprocessor understands the ANSI C
# preprocessor stringification operator. (Used by symcat.h.)
echo $ac_n "checking for preprocessor stringizing operator""... $ac_c" 1>&6
-echo "configure:3615: checking for preprocessor stringizing operator" >&5
+echo "configure:3645: checking for preprocessor stringizing operator" >&5
if eval "test \"`echo '$''{'ac_cv_c_stringize'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3620 "configure"
+#line 3650 "configure"
#include "confdefs.h"
#define x(y) #y
@@ -3649,12 +3679,12 @@ echo "$ac_t""${ac_cv_c_stringize}" 1>&6
# Use <inttypes.h> only if it exists,
# doesn't clash with <sys/types.h>, and declares intmax_t.
echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6
-echo "configure:3653: checking for inttypes.h" >&5
+echo "configure:3683: checking for inttypes.h" >&5
if eval "test \"`echo '$''{'gcc_cv_header_inttypes_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3658 "configure"
+#line 3688 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <inttypes.h>
@@ -3662,7 +3692,7 @@ int main() {
intmax_t i = -1;
; return 0; }
EOF
-if { (eval echo configure:3666: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_header_inttypes_h=yes
else
@@ -3689,12 +3719,12 @@ for ac_func in times clock dup2 kill getrlimit setrlimit atoll atoq \
scandir alphasort
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3693: checking for $ac_func" >&5
+echo "configure:3723: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3698 "configure"
+#line 3728 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -3717,7 +3747,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:3721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -3743,12 +3773,12 @@ done
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:3747: checking for ssize_t" >&5
+echo "configure:3777: checking for ssize_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3752 "configure"
+#line 3782 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3779,12 +3809,12 @@ fi
# Try to determine the array type of the second argument of getgroups
# for the target system (int or gid_t).
echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3783: checking for uid_t in sys/types.h" >&5
+echo "configure:3813: checking for uid_t in sys/types.h" >&5
if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3788 "configure"
+#line 3818 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -3813,7 +3843,7 @@ EOF
fi
echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6
-echo "configure:3817: checking type of array argument to getgroups" >&5
+echo "configure:3847: checking type of array argument to getgroups" >&5
if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3821,7 +3851,7 @@ else
ac_cv_type_getgroups=cross
else
cat > conftest.$ac_ext <<EOF
-#line 3825 "configure"
+#line 3855 "configure"
#include "confdefs.h"
/* Thanks to Mike Rendell for this test. */
@@ -3846,7 +3876,7 @@ main()
}
EOF
-if { (eval echo configure:3850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3880: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_type_getgroups=gid_t
else
@@ -3860,7 +3890,7 @@ fi
if test $ac_cv_type_getgroups = cross; then
cat > conftest.$ac_ext <<EOF
-#line 3864 "configure"
+#line 3894 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -3901,7 +3931,7 @@ fi
echo $ac_n "checking whether the printf functions support %p""... $ac_c" 1>&6
-echo "configure:3905: checking whether the printf functions support %p" >&5
+echo "configure:3935: checking whether the printf functions support %p" >&5
if eval "test \"`echo '$''{'gcc_cv_func_printf_ptr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3909,7 +3939,7 @@ else
gcc_cv_func_printf_ptr=no
else
cat > conftest.$ac_ext <<EOF
-#line 3913 "configure"
+#line 3943 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -3922,7 +3952,7 @@ int main()
return (p != q);
}
EOF
-if { (eval echo configure:3926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3956: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
gcc_cv_func_printf_ptr=yes
else
@@ -3960,12 +3990,12 @@ case "${host}" in
;;
esac
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:3964: checking for pid_t" >&5
+echo "configure:3994: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3969 "configure"
+#line 3999 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -3994,17 +4024,17 @@ fi
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
-echo "configure:3998: checking for vfork.h" >&5
+echo "configure:4028: checking for vfork.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4003 "configure"
+#line 4033 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4008: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4029,18 +4059,18 @@ else
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-echo "configure:4033: checking for working vfork" >&5
+echo "configure:4063: checking for working vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
echo $ac_n "checking for vfork""... $ac_c" 1>&6
-echo "configure:4039: checking for vfork" >&5
+echo "configure:4069: checking for vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4044 "configure"
+#line 4074 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
@@ -4063,7 +4093,7 @@ vfork();
; return 0; }
EOF
-if { (eval echo configure:4067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4097: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
@@ -4085,7 +4115,7 @@ fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
-#line 4089 "configure"
+#line 4119 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
@@ -4180,7 +4210,7 @@ main() {
}
}
EOF
-if { (eval echo configure:4184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
@@ -4205,12 +4235,12 @@ fi
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4209: checking for $ac_func" >&5
+echo "configure:4239: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4214 "configure"
+#line 4244 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4233,7 +4263,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4504,7 +4534,7 @@ main ()
EOF
echo $ac_n "checking for working mmap from /dev/zero""... $ac_c" 1>&6
-echo "configure:4508: checking for working mmap from /dev/zero" >&5
+echo "configure:4538: checking for working mmap from /dev/zero" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_dev_zero'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4519,11 +4549,11 @@ else
esac
else
cat > conftest.$ac_ext <<EOF
-#line 4523 "configure"
+#line 4553 "configure"
#include "confdefs.h"
#include "ct-mmap.inc"
EOF
-if { (eval echo configure:4527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_dev_zero=yes
else
@@ -4550,7 +4580,7 @@ EOF
fi
echo $ac_n "checking for working mmap with MAP_ANON(YMOUS)""... $ac_c" 1>&6
-echo "configure:4554: checking for working mmap with MAP_ANON(YMOUS)" >&5
+echo "configure:4584: checking for working mmap with MAP_ANON(YMOUS)" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_anon'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4563,12 +4593,12 @@ else
esac
else
cat > conftest.$ac_ext <<EOF
-#line 4567 "configure"
+#line 4597 "configure"
#include "confdefs.h"
#define USE_MAP_ANON
#include "ct-mmap.inc"
EOF
-if { (eval echo configure:4572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4602: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_anon=yes
else
@@ -4596,7 +4626,7 @@ fi
rm -f ct-mmap.inc
echo $ac_n "checking for working mmap of a file""... $ac_c" 1>&6
-echo "configure:4600: checking for working mmap of a file" >&5
+echo "configure:4630: checking for working mmap of a file" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_file'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4614,7 +4644,7 @@ if test "$cross_compiling" = yes; then
esac
else
cat > conftest.$ac_ext <<EOF
-#line 4618 "configure"
+#line 4648 "configure"
#include "confdefs.h"
/* Test by Zack Weinberg. Modified from MMAP_ANYWHERE test by
@@ -4651,7 +4681,7 @@ int main()
exit(0);
}
EOF
-if { (eval echo configure:4655: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_file=yes
else
@@ -4690,7 +4720,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:4694: checking for iconv" >&5
+echo "configure:4724: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -4698,7 +4728,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 4702 "configure"
+#line 4732 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4708,7 +4738,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4742: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -4720,7 +4750,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 4724 "configure"
+#line 4754 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -4730,7 +4760,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:4734: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -4751,13 +4781,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:4755: checking for iconv declaration" >&5
+echo "configure:4785: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4761 "configure"
+#line 4791 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -4776,7 +4806,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:4780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -4814,12 +4844,12 @@ for ac_func in getenv atol sbrk abort atof getcwd getwd \
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:4818: checking whether $ac_func is declared" >&5
+echo "configure:4848: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4823 "configure"
+#line 4853 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -4833,7 +4863,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:4837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4867: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -4935,12 +4965,12 @@ for ac_func in getrlimit setrlimit getrusage
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:4939: checking whether $ac_func is declared" >&5
+echo "configure:4969: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4944 "configure"
+#line 4974 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -4958,7 +4988,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:4962: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -4996,16 +5026,43 @@ EOF
fi
+cat > conftest.$ac_ext <<EOF
+#line 5031 "configure"
+#include "confdefs.h"
+
+#include "ansidecl.h"
+#include "system.h"
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+int main() {
+rlim_t l = 0;
+; return 0; }
+EOF
+if { (eval echo configure:5044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cat >> confdefs.h <<\EOF
+#define rlim_t long
+EOF
+
+fi
+rm -f conftest*
+
for ac_func in ldgetname
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:5004: checking whether $ac_func is declared" >&5
+echo "configure:5061: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5009 "configure"
+#line 5066 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -5023,7 +5080,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:5027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -5059,12 +5116,12 @@ for ac_func in times
do
ac_tr_decl=HAVE_DECL_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
echo $ac_n "checking whether $ac_func is declared""... $ac_c" 1>&6
-echo "configure:5063: checking whether $ac_func is declared" >&5
+echo "configure:5120: checking whether $ac_func is declared" >&5
if eval "test \"`echo '$''{'gcc_cv_have_decl_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5068 "configure"
+#line 5125 "configure"
#include "confdefs.h"
#undef $ac_tr_decl
#define $ac_tr_decl 1
@@ -5082,7 +5139,7 @@ char *(*pfn) = (char *(*)) $ac_func ;
#endif
; return 0; }
EOF
-if { (eval echo configure:5086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5143: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "gcc_cv_have_decl_$ac_func=yes"
else
@@ -5116,13 +5173,13 @@ fi
# More time-related stuff.
echo $ac_n "checking for struct tms""... $ac_c" 1>&6
-echo "configure:5120: checking for struct tms" >&5
+echo "configure:5177: checking for struct tms" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tms'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5126 "configure"
+#line 5183 "configure"
#include "confdefs.h"
#include "ansidecl.h"
@@ -5135,7 +5192,7 @@ int main() {
struct tms tms;
; return 0; }
EOF
-if { (eval echo configure:5139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5196: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tms=yes
else
@@ -5158,13 +5215,13 @@ fi
# use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
# revisit after autoconf 2.50.
echo $ac_n "checking for clock_t""... $ac_c" 1>&6
-echo "configure:5162: checking for clock_t" >&5
+echo "configure:5219: checking for clock_t" >&5
if eval "test \"`echo '$''{'gcc_cv_type_clock_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5168 "configure"
+#line 5225 "configure"
#include "confdefs.h"
#include "ansidecl.h"
@@ -5174,7 +5231,7 @@ int main() {
clock_t x;
; return 0; }
EOF
-if { (eval echo configure:5178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_type_clock_t=yes
else
@@ -5195,12 +5252,12 @@ EOF
fi
echo $ac_n "checking for uchar""... $ac_c" 1>&6
-echo "configure:5199: checking for uchar" >&5
+echo "configure:5256: checking for uchar" >&5
if eval "test \"`echo '$''{'gcc_cv_type_uchar'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5204 "configure"
+#line 5261 "configure"
#include "confdefs.h"
#include "ansidecl.h"
@@ -5211,7 +5268,7 @@ if ((uchar *)0) return 0;
if (sizeof(uchar)) return 0;
; return 0; }
EOF
-if { (eval echo configure:5215: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_uchar=yes
else
@@ -5241,7 +5298,7 @@ if test "${enable_initfini_array+set}" = set; then
else
echo $ac_n "checking for .preinit_array/.init_array/.fini_array support""... $ac_c" 1>&6
-echo "configure:5245: checking for .preinit_array/.init_array/.fini_array support" >&5
+echo "configure:5302: checking for .preinit_array/.init_array/.fini_array support" >&5
if eval "test \"`echo '$''{'gcc_cv_initfini_array'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5249,7 +5306,7 @@ else
gcc_cv_initfini_array=no
else
cat > conftest.$ac_ext <<EOF
-#line 5253 "configure"
+#line 5310 "configure"
#include "confdefs.h"
static int x = -1;
@@ -5257,7 +5314,7 @@ int main (void) { return x; }
int foo (void) { x = 0; }
int (*fp) (void) __attribute__ ((section (".init_array"))) = foo;
EOF
-if { (eval echo configure:5261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
gcc_cv_initfini_array=yes
else
@@ -5285,12 +5342,12 @@ fi
# mkdir takes a single argument on some systems.
echo $ac_n "checking if mkdir takes one argument""... $ac_c" 1>&6
-echo "configure:5289: checking if mkdir takes one argument" >&5
+echo "configure:5346: checking if mkdir takes one argument" >&5
if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5294 "configure"
+#line 5351 "configure"
#include "confdefs.h"
#include <sys/types.h>
@@ -5307,7 +5364,7 @@ int main() {
mkdir ("foo", 0);
; return 0; }
EOF
-if { (eval echo configure:5311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5368: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
gcc_cv_mkdir_takes_one_arg=no
else
@@ -5347,7 +5404,7 @@ fi
echo $ac_n "checking for main in -lunwind""... $ac_c" 1>&6
-echo "configure:5351: checking for main in -lunwind" >&5
+echo "configure:5408: checking for main in -lunwind" >&5
ac_lib_var=`echo unwind'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5355,14 +5412,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lunwind $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5359 "configure"
+#line 5416 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5399,6 +5456,10 @@ EOF
fi
+# --------------------------------------------------------
+# Build, host, and target specific configuration fragments
+# --------------------------------------------------------
+
target_gtfiles=
build_xm_file=
build_xm_defines=
@@ -5596,6 +5657,10 @@ build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
# put this back in temporarily.
xm_file="ansidecl.h ${xm_file}"
+# --------
+# UNSORTED
+# --------
+
# Truncate the target if necessary
if test x$host_truncate_target != x; then
target=`echo $target | sed -e 's/\(..............\).*/\1/'`
@@ -5651,14 +5716,14 @@ fi
echo $ac_n "checking for library containing strerror""... $ac_c" 1>&6
-echo "configure:5655: checking for library containing strerror" >&5
+echo "configure:5720: checking for library containing strerror" >&5
if eval "test \"`echo '$''{'ac_cv_search_strerror'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_strerror="no"
cat > conftest.$ac_ext <<EOF
-#line 5662 "configure"
+#line 5727 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5669,7 +5734,7 @@ int main() {
strerror()
; return 0; }
EOF
-if { (eval echo configure:5673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_strerror="none required"
else
@@ -5680,7 +5745,7 @@ rm -f conftest*
test "$ac_cv_search_strerror" = "no" && for i in cposix; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5684 "configure"
+#line 5749 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5691,7 +5756,7 @@ int main() {
strerror()
; return 0; }
EOF
-if { (eval echo configure:5695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_strerror="-l$i"
break
@@ -5714,12 +5779,12 @@ fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:5718: checking for working const" >&5
+echo "configure:5783: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5723 "configure"
+#line 5788 "configure"
#include "confdefs.h"
int main() {
@@ -5768,7 +5833,7 @@ ccp = (char const *const *) p;
; return 0; }
EOF
-if { (eval echo configure:5772: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
@@ -5789,12 +5854,12 @@ EOF
fi
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:5793: checking for off_t" >&5
+echo "configure:5858: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5798 "configure"
+#line 5863 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5822,12 +5887,12 @@ EOF
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:5826: checking for size_t" >&5
+echo "configure:5891: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5831 "configure"
+#line 5896 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -5857,19 +5922,19 @@ fi
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:5861: checking for working alloca.h" >&5
+echo "configure:5926: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5866 "configure"
+#line 5931 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:5873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@@ -5890,12 +5955,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:5894: checking for alloca" >&5
+echo "configure:5959: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5899 "configure"
+#line 5964 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@@ -5923,7 +5988,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:5927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@@ -5955,12 +6020,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:5959: checking whether alloca needs Cray hooks" >&5
+echo "configure:6024: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5964 "configure"
+#line 6029 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@@ -5985,12 +6050,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5989: checking for $ac_func" >&5
+echo "configure:6054: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5994 "configure"
+#line 6059 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6013,7 +6078,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6040,7 +6105,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:6044: checking stack direction for C alloca" >&5
+echo "configure:6109: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6048,7 +6113,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 6052 "configure"
+#line 6117 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@@ -6067,7 +6132,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:6071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@@ -6090,12 +6155,12 @@ fi
echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
-echo "configure:6094: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo "configure:6159: checking whether we are using the GNU C Library 2.1 or newer" >&5
if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6099 "configure"
+#line 6164 "configure"
#include "confdefs.h"
#include <features.h>
@@ -6131,17 +6196,17 @@ stdlib.h string.h unistd.h sys/param.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6135: checking for $ac_hdr" >&5
+echo "configure:6200: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6140 "configure"
+#line 6205 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6145: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6172,12 +6237,12 @@ getgid getuid mempcpy munmap putenv setenv setlocale stpcpy strchr strcasecmp \
strdup strtoul tsearch __argz_count __argz_stringify __argz_next
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6176: checking for $ac_func" >&5
+echo "configure:6241: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6181 "configure"
+#line 6246 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6200,7 +6265,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6241,7 +6306,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:6245: checking for iconv" >&5
+echo "configure:6310: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6249,7 +6314,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 6253 "configure"
+#line 6318 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -6259,7 +6324,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:6263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -6271,7 +6336,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 6275 "configure"
+#line 6340 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -6281,7 +6346,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:6285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -6302,13 +6367,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:6306: checking for iconv declaration" >&5
+echo "configure:6371: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6312 "configure"
+#line 6377 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -6327,7 +6392,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:6331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6396: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -6356,19 +6421,19 @@ EOF
echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
-echo "configure:6360: checking for nl_langinfo and CODESET" >&5
+echo "configure:6425: checking for nl_langinfo and CODESET" >&5
if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6365 "configure"
+#line 6430 "configure"
#include "confdefs.h"
#include <langinfo.h>
int main() {
char* cs = nl_langinfo(CODESET);
; return 0; }
EOF
-if { (eval echo configure:6372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_langinfo_codeset=yes
else
@@ -6391,19 +6456,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:6395: checking for LC_MESSAGES" >&5
+echo "configure:6460: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6400 "configure"
+#line 6465 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:6407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -6424,7 +6489,7 @@ EOF
fi
fi
echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:6428: checking whether NLS is requested" >&5
+echo "configure:6493: checking whether NLS is requested" >&5
# Check whether --enable-nls or --disable-nls was given.
if test "${enable_nls+set}" = set; then
enableval="$enable_nls"
@@ -6447,7 +6512,7 @@ fi
EOF
echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:6451: checking whether included gettext is requested" >&5
+echo "configure:6516: checking whether included gettext is requested" >&5
# Check whether --with-included-gettext or --without-included-gettext was given.
if test "${with_included_gettext+set}" = set; then
withval="$with_included_gettext"
@@ -6467,17 +6532,17 @@ fi
ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:6471: checking for libintl.h" >&5
+echo "configure:6536: checking for libintl.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6476 "configure"
+#line 6541 "configure"
#include "confdefs.h"
#include <libintl.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6481: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6546: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6498,12 +6563,12 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
EOF
echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
-echo "configure:6502: checking for GNU gettext in libc" >&5
+echo "configure:6567: checking for GNU gettext in libc" >&5
if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6507 "configure"
+#line 6572 "configure"
#include "confdefs.h"
#include <libintl.h>
extern int _nl_msg_cat_cntr;
@@ -6512,7 +6577,7 @@ bindtextdomain ("", "");
return (int) gettext ("") + _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:6516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gnugettext1_libc=yes
else
@@ -6528,14 +6593,14 @@ echo "$ac_t""$gt_cv_func_gnugettext1_libc" 1>&6
if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
-echo "configure:6532: checking for GNU gettext in libintl" >&5
+echo "configure:6597: checking for GNU gettext in libintl" >&5
if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
gt_save_LIBS="$LIBS"
LIBS="$LIBS -lintl $LIBICONV"
cat > conftest.$ac_ext <<EOF
-#line 6539 "configure"
+#line 6604 "configure"
#include "confdefs.h"
#include <libintl.h>
extern int _nl_msg_cat_cntr;
@@ -6544,7 +6609,7 @@ bindtextdomain ("", "");
return (int) gettext ("") + _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:6548: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gnugettext1_libintl=yes
else
@@ -6577,12 +6642,12 @@ EOF
for ac_func in dcgettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6581: checking for $ac_func" >&5
+echo "configure:6646: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6586 "configure"
+#line 6651 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6605,7 +6670,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6674: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6634,7 +6699,7 @@ done
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6638: checking for $ac_word" >&5
+echo "configure:6703: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6668,7 +6733,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6672: checking for $ac_word" >&5
+echo "configure:6737: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6705,7 +6770,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6709: checking for $ac_word" >&5
+echo "configure:6774: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6755,7 +6820,7 @@ fi
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6759: checking for $ac_word" >&5
+echo "configure:6824: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6789,7 +6854,7 @@ fi
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6793: checking for $ac_word" >&5
+echo "configure:6858: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6825,7 +6890,7 @@ fi
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6829: checking for $ac_word" >&5
+echo "configure:6894: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6897,7 +6962,7 @@ do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6901: checking for $ac_word" >&5
+echo "configure:6966: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6930,7 +6995,7 @@ done
ac_verc_fail=yes
else
echo $ac_n "checking version of bison""... $ac_c" 1>&6
-echo "configure:6934: checking version of bison" >&5
+echo "configure:6999: checking version of bison" >&5
ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -6975,7 +7040,7 @@ EOF
if test "x$CATOBJEXT" != x; then
echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:6979: checking for catalogs to be installed" >&5
+echo "configure:7044: checking for catalogs to be installed" >&5
# Look for .po and .gmo files in the source directory.
CATALOGS=
XLINGUAS=
@@ -7033,7 +7098,7 @@ fi
case $host_os in
win32 | pe | cygwin* | mingw32* | uwin*)
echo $ac_n "checking whether windows registry support is requested""... $ac_c" 1>&6
-echo "configure:7037: checking whether windows registry support is requested" >&5
+echo "configure:7102: checking whether windows registry support is requested" >&5
if test "x$enable_win32_registry" != xno; then
cat >> confdefs.h <<\EOF
#define ENABLE_WIN32_REGISTRY 1
@@ -7042,14 +7107,14 @@ EOF
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for library containing RegOpenKeyExA""... $ac_c" 1>&6
-echo "configure:7046: checking for library containing RegOpenKeyExA" >&5
+echo "configure:7111: checking for library containing RegOpenKeyExA" >&5
if eval "test \"`echo '$''{'ac_cv_search_RegOpenKeyExA'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_func_search_save_LIBS="$LIBS"
ac_cv_search_RegOpenKeyExA="no"
cat > conftest.$ac_ext <<EOF
-#line 7053 "configure"
+#line 7118 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7060,7 +7125,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:7064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="none required"
else
@@ -7071,7 +7136,7 @@ rm -f conftest*
test "$ac_cv_search_RegOpenKeyExA" = "no" && for i in advapi32; do
LIBS="-l$i $ac_func_search_save_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7075 "configure"
+#line 7140 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7082,7 +7147,7 @@ int main() {
RegOpenKeyExA()
; return 0; }
EOF
-if { (eval echo configure:7086: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_search_RegOpenKeyExA="-l$i"
break
@@ -7124,7 +7189,7 @@ esac
if test "x$enable_win32_registry" != xno; then
echo $ac_n "checking registry key on windows hosts""... $ac_c" 1>&6
-echo "configure:7128: checking registry key on windows hosts" >&5
+echo "configure:7193: checking registry key on windows hosts" >&5
cat >> confdefs.h <<EOF
#define WIN32_REGISTRY_KEY "$gcc_cv_win32_registry_key"
EOF
@@ -7166,6 +7231,8 @@ do
fi
done
+symbolic_link='ln -s'
+
# If the host doesn't support symlinks, modify CC in
# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
# Otherwise, we can use "CC=$(CC)".
@@ -7308,16 +7375,15 @@ else
done
fi
-if test x$use_collect2 = xno; then
- use_collect2=
-fi
-
# Add a definition of USE_COLLECT2 if system wants one.
-if test x$use_collect2 != x
-then
- host_xm_defines="${host_xm_defines} USE_COLLECT2"
- xm_defines="${xm_defines} USE_COLLECT2"
-fi
+case $use_collect2 in
+ no) use_collect2= ;;
+ "") ;;
+ *)
+ host_xm_defines="${host_xm_defines} USE_COLLECT2"
+ xm_defines="${xm_defines} USE_COLLECT2"
+ ;;
+esac
# If we have gas in the build tree, make a link to it.
if test -f ../gas/Makefile; then
@@ -7335,14 +7401,20 @@ if test -f ../ld/Makefile; then
rm -f collect-ld; $symbolic_link ../ld/ld-new$host_exeext collect-ld$host_exeext 2>/dev/null
fi
-# Figure out what assembler we will be using.
+# Identify the assembler which will work hand-in-glove with the newly
+# built GCC, so that we can examine its features. This is the assembler
+# which will be driven by the driver program.
+#
+# If build != host, and we aren't building gas in-tree, we identify a
+# build->target assembler and hope that it will have the same features
+# as the host->target assembler we'll be using.
echo $ac_n "checking what assembler to use""... $ac_c" 1>&6
-echo "configure:7341: checking what assembler to use" >&5
+echo "configure:7413: checking what assembler to use" >&5
+in_tree_gas=no
gcc_cv_as=
gcc_cv_gas_major_version=
gcc_cv_gas_minor_version=
gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
-gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
if test -x "$DEFAULT_ASSEMBLER"; then
gcc_cv_as="$DEFAULT_ASSEMBLER"
elif test -x "$AS"; then
@@ -7350,18 +7422,24 @@ elif test -x "$AS"; then
elif test -x as$host_exeext; then
# Build using assembler in the current directory.
gcc_cv_as=./as$host_exeext
-elif test -f $gcc_cv_as_gas_srcdir/configure.in -a -f ../gas/Makefile; then
- # Single tree build which includes gas.
- for f in $gcc_cv_as_bfd_srcdir/configure $gcc_cv_as_gas_srcdir/configure $gcc_cv_as_gas_srcdir/configure.in $gcc_cv_as_gas_srcdir/Makefile.in
- do
- gcc_cv_gas_version=`grep '^VERSION=[0-9]*\.[0-9]*' $f`
- if test x$gcc_cv_gas_version != x; then
- break
- fi
- done
- gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([0-9]*\)"`
- gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
- gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.[0-9]*\.\([0-9]*\)"`
+elif test -f $gcc_cv_as_gas_srcdir/configure.in \
+ && test -f ../gas/Makefile; then
+ # Single tree build which includes gas.
+ in_tree_gas=yes
+ gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
+for f in $gcc_cv_as_bfd_srcdir/configure \
+ $gcc_cv_as_gas_srcdir/configure \
+ $gcc_cv_as_gas_srcdir/configure.in \
+ $gcc_cv_as_gas_srcdir/Makefile.in ; do
+ gcc_cv_gas_version=`grep '^VERSION=[0-9]*\.[0-9]*' $f`
+ if test x$gcc_cv_gas_version != x; then
+ break
+ fi
+done
+gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([0-9]*\)"`
+gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
+gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.[0-9]*\.\([0-9]*\)"`
+
fi
if test "x$gcc_cv_as" = x; then
@@ -7423,15 +7501,25 @@ if test "x$gcc_cv_as" = x; then
fi
done
fi
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- echo "$ac_t"""newly built gas"" 1>&6
-else
- echo "$ac_t""$gcc_cv_as" 1>&6
-fi
+case $in_tree_gas in
+ yes)
+ echo "$ac_t"""newly built gas"" 1>&6
+ ;;
+ no)
+ echo "$ac_t""$gcc_cv_as" 1>&6
+ ;;
+esac
-# Figure out what linker we will be using.
+# Identify the linker which will work hand-in-glove with the newly
+# built GCC, so that we can examine its features. This is the linker
+# which will be driven by the driver program.
+#
+# If build != host, and we aren't building gas in-tree, we identify a
+# build->target linker and hope that it will have the same features
+# as the host->target linker we'll be using.
echo $ac_n "checking what linker to use""... $ac_c" 1>&6
-echo "configure:7435: checking what linker to use" >&5
+echo "configure:7522: checking what linker to use" >&5
+in_tree_ld=no
gcc_cv_ld=
gcc_cv_gld_major_version=
gcc_cv_gld_minor_version=
@@ -7444,8 +7532,10 @@ elif test -x "$LD"; then
elif test -x ld$host_exeext; then
# Build using linker in the current directory.
gcc_cv_ld=./ld$host_exeext
-elif test -f $gcc_cv_ld_gld_srcdir/configure.in -a -f ../ld/Makefile; then
+elif test -f $gcc_cv_ld_gld_srcdir/configure.in \
+ && test -f ../ld/Makefile; then
# Single tree build which includes ld.
+ in_tree_ld=yes
for f in $gcc_cv_ld_bfd_srcdir/configure $gcc_cv_ld_gld_srcdir/configure $gcc_cv_ld_gld_srcdir/configure.in $gcc_cv_ld_gld_srcdir/Makefile.in
do
gcc_cv_gld_version=`grep '^VERSION=[0-9]*\.[0-9]*' $f`
@@ -7516,15 +7606,18 @@ if test "x$gcc_cv_ld" = x; then
fi
done
fi
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
- echo "$ac_t"""newly built ld"" 1>&6
-else
- echo "$ac_t""$gcc_cv_ld" 1>&6
-fi
+case $in_tree_ld in
+ yes)
+ echo "$ac_t"""newly built ld"" 1>&6
+ ;;
+ no)
+ echo "$ac_t""$gcc_cv_ld" 1>&6
+ ;;
+esac
# Figure out what nm we will be using.
echo $ac_n "checking what nm to use""... $ac_c" 1>&6
-echo "configure:7528: checking what nm to use" >&5
+echo "configure:7621: checking what nm to use" >&5
if test -x nm$host_exeext; then
gcc_cv_nm=./nm$host_exeext
elif test "x$program_prefix" != xNONE; then
@@ -7536,7 +7629,7 @@ echo "$ac_t""$gcc_cv_nm" 1>&6
# Figure out what objdump we will be using.
echo $ac_n "checking what objdump to use""... $ac_c" 1>&6
-echo "configure:7540: checking what objdump to use" >&5
+echo "configure:7633: checking what objdump to use" >&5
if test -x objdump$host_exeext; then
gcc_cv_objdump=./objdump$host_exeext
elif test "x$program_prefix" != xNONE; then
@@ -7548,27 +7641,40 @@ echo "$ac_t""$gcc_cv_objdump" 1>&6
# Figure out what assembler alignment features are present.
echo $ac_n "checking assembler alignment features""... $ac_c" 1>&6
-echo "configure:7552: checking assembler alignment features" >&5
+echo "configure:7645: checking assembler alignment features" >&5
gcc_cv_as_alignment_features=none
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- # Gas version 2.6 and later support for .balign and .p2align.
- # bytes to skip when using .p2align.
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 6 -o "$gcc_cv_gas_major_version" -gt 2; then
- gcc_cv_as_alignment_features=".balign and .p2align"
- cat >> confdefs.h <<\EOF
+if test $in_tree_gas = yes; then
+ # Gas version 2.6 and later support for .balign and .p2align.
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 6 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ gcc_cv_as_alignment_features=".balign and .p2align"
+ cat >> confdefs.h <<\EOF
#define HAVE_GAS_BALIGN_AND_P2ALIGN 1
EOF
- fi
- # Gas version 2.8 and later support specifying the maximum
- # bytes to skip when using .p2align.
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 8 -o "$gcc_cv_gas_major_version" -gt 2; then
- gcc_cv_as_alignment_features=".p2align including maximum skip"
- cat >> confdefs.h <<\EOF
+
+
+fi
+
+ # Gas version 2.8 and later support specifying the maximum
+ # bytes to skip when using .p2align.
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 8 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ gcc_cv_as_alignment_features=".p2align including maximum skip"
+ cat >> confdefs.h <<\EOF
#define HAVE_GAS_MAX_SKIP_P2ALIGN 1
EOF
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we have .balign and .p2align
echo ".balign 4" > conftest.s
@@ -7596,12 +7702,21 @@ fi
echo "$ac_t""$gcc_cv_as_alignment_features" 1>&6
echo $ac_n "checking assembler subsection support""... $ac_c" 1>&6
-echo "configure:7600: checking assembler subsection support" >&5
+echo "configure:7706: checking assembler subsection support" >&5
gcc_cv_as_subsections=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_subsections="working .subsection -1"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 9 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_subsections="working .subsection -1"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we have .subsection
echo ".subsection 1" > conftest.s
@@ -7636,12 +7751,19 @@ fi
echo "$ac_t""$gcc_cv_as_subsections" 1>&6
echo $ac_n "checking assembler weak support""... $ac_c" 1>&6
-echo "configure:7640: checking assembler weak support" >&5
+echo "configure:7755: checking assembler weak support" >&5
gcc_cv_as_weak=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 2 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
gcc_cv_as_weak="yes"
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we have .weak
echo " .weak foobar" > conftest.s
@@ -7659,18 +7781,23 @@ fi
echo "$ac_t""$gcc_cv_as_weak" 1>&6
echo $ac_n "checking assembler hidden support""... $ac_c" 1>&6
-echo "configure:7663: checking assembler hidden support" >&5
+echo "configure:7785: checking assembler hidden support" >&5
gcc_cv_as_hidden=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -eq 12 \
- -a "$gcc_cv_gas_patch_version" -ge 1 \
- -o "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -gt 12 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_hidden="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& (test $gcc_cv_gas_minor_version -gt 12 \
+ || (test $gcc_cv_gas_minor_version -eq 12 \
+ && test $gcc_cv_gas_patch_version -ge 1 )) \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_hidden="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we have .hidden
echo " .hidden foobar" > conftest.s
@@ -7735,12 +7862,21 @@ esac
echo $ac_n "checking assembler leb128 support""... $ac_c" 1>&6
-echo "configure:7739: checking assembler leb128 support" >&5
+echo "configure:7866: checking assembler leb128 support" >&5
gcc_cv_as_leb128=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_leb128="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 11 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_leb128="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we have .[us]leb128, and support symbol arithmetic with it.
cat > conftest.s <<EOF
@@ -7780,12 +7916,21 @@ fi
echo "$ac_t""$gcc_cv_as_leb128" 1>&6
echo $ac_n "checking assembler eh_frame optimization""... $ac_c" 1>&6
-echo "configure:7784: checking assembler eh_frame optimization" >&5
+echo "configure:7920: checking assembler eh_frame optimization" >&5
gcc_cv_as_eh_frame=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_eh_frame="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 12 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_eh_frame="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if this is GAS.
as_ver=`$gcc_cv_as --version < /dev/null 2> /dev/null | head -1`
@@ -7861,12 +8006,21 @@ fi
echo "$ac_t""$gcc_cv_as_eh_frame" 1>&6
echo $ac_n "checking assembler section merging support""... $ac_c" 1>&6
-echo "configure:7865: checking assembler section merging support" >&5
+echo "configure:8010: checking assembler section merging support" >&5
gcc_cv_as_shf_merge=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_shf_merge=yes
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 12 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_shf_merge=yes
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
# Check if we support SHF_MERGE sections
echo '.section .rodata.str, "aMS", @progbits, 1' > conftest.s
@@ -7884,7 +8038,7 @@ fi
echo "$ac_t""$gcc_cv_as_shf_merge" 1>&6
echo $ac_n "checking assembler thread-local storage support""... $ac_c" 1>&6
-echo "configure:7888: checking assembler thread-local storage support" >&5
+echo "configure:8042: checking assembler thread-local storage support" >&5
gcc_cv_as_tls=no
conftest_s=
tls_first_major=
@@ -8000,13 +8154,17 @@ foo: .long 25
esac
if test -z "$tls_first_major"; then
:
-elif test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
-then
- if test "$gcc_cv_gas_major_version" -eq "$tls_first_major" \
- -a "$gcc_cv_gas_minor_version" -ge "$tls_first_minor" \
- -o "$gcc_cv_gas_major_version" -gt "$tls_first_major"; then
+elif test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq $tls_first_major \
+&& test $gcc_cv_gas_minor_version -ge $tls_first_minor \
+|| test $gcc_cv_gas_major_version -gt $tls_first_major ; then
+
+
gcc_cv_as_tls=yes
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
echo "$conftest_s" > conftest.s
if $gcc_cv_as --fatal-warnings -o conftest.o conftest.s > /dev/null 2>&1
@@ -8027,20 +8185,23 @@ case "$target" in
# All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
echo $ac_n "checking assembler supports explicit relocations""... $ac_c" 1>&6
-echo "configure:8031: checking assembler supports explicit relocations" >&5
+echo "configure:8189: checking assembler supports explicit relocations" >&5
if eval "test \"`echo '$''{'gcc_cv_as_explicit_relocs'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
gcc_cv_as_explicit_relocs=unknown
- if test x$gcc_cv_gas_major_version != x \
- -a x$gcc_cv_gas_minor_version != x
- then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 12 \
- -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 12 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
gcc_cv_as_explicit_relocs=yes
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
cat > conftest.s << 'EOF'
.set nomacro
@@ -8077,7 +8238,7 @@ EOF
;;
sparc*-*-*)
echo $ac_n "checking assembler .register pseudo-op support""... $ac_c" 1>&6
-echo "configure:8081: checking assembler .register pseudo-op support" >&5
+echo "configure:8242: checking assembler .register pseudo-op support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_register_pseudo_op'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8105,7 +8266,7 @@ EOF
fi
echo $ac_n "checking assembler supports -relax""... $ac_c" 1>&6
-echo "configure:8109: checking assembler supports -relax" >&5
+echo "configure:8270: checking assembler supports -relax" >&5
if eval "test \"`echo '$''{'gcc_cv_as_relax_opt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8133,7 +8294,7 @@ EOF
fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs""... $ac_c" 1>&6
-echo "configure:8137: checking assembler and linker support unaligned pc related relocs" >&5
+echo "configure:8298: checking assembler and linker support unaligned pc related relocs" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8160,7 +8321,7 @@ EOF
fi
echo $ac_n "checking assembler and linker support unaligned pc related relocs against hidden symbols""... $ac_c" 1>&6
-echo "configure:8164: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
+echo "configure:8325: checking assembler and linker support unaligned pc related relocs against hidden symbols" >&5
if eval "test \"`echo '$''{'gcc_cv_as_sparc_ua_pcrel_hidden'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8200,7 +8361,7 @@ EOF
fi
echo $ac_n "checking for assembler offsetable %lo() support""... $ac_c" 1>&6
-echo "configure:8204: checking for assembler offsetable %lo() support" >&5
+echo "configure:8365: checking for assembler offsetable %lo() support" >&5
if eval "test \"`echo '$''{'gcc_cv_as_offsetable_lo10'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8239,12 +8400,19 @@ EOF
i[34567]86-*-* | x86_64-*-*)
echo $ac_n "checking assembler instructions""... $ac_c" 1>&6
-echo "configure:8243: checking assembler instructions" >&5
+echo "configure:8404: checking assembler instructions" >&5
gcc_cv_as_instructions=
- if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 9 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
gcc_cv_as_instructions="filds fists"
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
set "filds fists" "filds mem; fists mem"
while test $# -gt 0
@@ -8266,15 +8434,19 @@ EOF
echo "$ac_t""$gcc_cv_as_instructions" 1>&6
echo $ac_n "checking assembler GOTOFF in data directives""... $ac_c" 1>&6
-echo "configure:8270: checking assembler GOTOFF in data directives" >&5
+echo "configure:8438: checking assembler GOTOFF in data directives" >&5
gcc_cv_as_gotoff_in_data=no
- if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
- then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 11 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
gcc_cv_as_gotoff_in_data=yes
- fi
+
+
+fi
+
elif test x$gcc_cv_as != x; then
cat > conftest.s <<EOF
.text
@@ -8293,10 +8465,55 @@ EOF
echo "$ac_t""$gcc_cv_as_gotoff_in_data" 1>&6
;;
+
+ ia64*-*-*)
+ echo $ac_n "checking assembler supports ltoffx and ldxmov""... $ac_c" 1>&6
+echo "configure:8472: checking assembler supports ltoffx and ldxmov" >&5
+if eval "test \"`echo '$''{'gcc_cv_as_ltoffx_ldxmov_relocs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ gcc_cv_as_ltoffx_ldxmov_relocs=unknown
+ if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 14 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ gcc_cv_as_ltoffx_ldxmov_relocs=yes
+
+
+fi
+
+ elif test x$gcc_cv_as != x; then
+ cat > conftest.s << 'EOF'
+ .text
+ addl r15 = @ltoffx(x#), gp
+ ;;
+ ld8.mov r16 = [r15], x#
+EOF
+ if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
+ gcc_cv_as_ltoffx_ldxmov_relocs=yes
+ else
+ gcc_cv_as_ltoffx_ldxmov_relocs=no
+ fi
+ rm -f conftest.s conftest.o
+ fi
+
+fi
+
+echo "$ac_t""$gcc_cv_as_ltoffx_ldxmov_relocs" 1>&6
+ if test "x$gcc_cv_as_ltoffx_ldxmov_relocs" = xyes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_AS_LTOFFX_LDXMOV_RELOCS 1
+EOF
+
+ fi
+ ;;
esac
echo $ac_n "checking assembler dwarf2 debug_line support""... $ac_c" 1>&6
-echo "configure:8300: checking assembler dwarf2 debug_line support" >&5
+echo "configure:8517: checking assembler dwarf2 debug_line support" >&5
gcc_cv_as_dwarf2_debug_line=no
# ??? Not all targets support dwarf2 debug_line, even within a version
# of gas. Moreover, we need to emit a valid instruction to trigger any
@@ -8313,15 +8530,20 @@ case "$target" in
insn="nop 0"
;;
esac
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_dwarf2_debug_line="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 11 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_dwarf2_debug_line="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo ' .file 1 "conftest.s"' > conftest.s
echo ' .loc 1 3 0' >> conftest.s
@@ -8353,17 +8575,22 @@ fi
echo "$ac_t""$gcc_cv_as_dwarf2_debug_line" 1>&6
echo $ac_n "checking assembler --gdwarf2 support""... $ac_c" 1>&6
-echo "configure:8357: checking assembler --gdwarf2 support" >&5
+echo "configure:8579: checking assembler --gdwarf2 support" >&5
gcc_cv_as_gdwarf2_flag=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_gdwarf2_flag="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 11 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_gdwarf2_flag="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo '' > conftest.s
# ??? This fails with non-gnu grep.
@@ -8382,17 +8609,22 @@ fi
echo "$ac_t""$gcc_cv_as_gdwarf2_flag" 1>&6
echo $ac_n "checking assembler --gstabs support""... $ac_c" 1>&6
-echo "configure:8386: checking assembler --gstabs support" >&5
+echo "configure:8613: checking assembler --gstabs support" >&5
gcc_cv_as_gstabs_flag=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_gstabs_flag="yes"
- fi
+if test $in_tree_gas = yes ; then
+ if test $gcc_cv_gas_major_version -eq 2 \
+&& test $gcc_cv_gas_minor_version -ge 11 \
+|| test $gcc_cv_gas_major_version -gt 2 ; then
+
+
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_gstabs_flag="yes"
+ fi
+
+
+fi
+
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo '' > conftest.s
# ??? This fails with non-gnu grep.
@@ -8410,9 +8642,9 @@ fi
echo "$ac_t""$gcc_cv_as_gstabs_flag" 1>&6
echo $ac_n "checking linker read-only and read-write section mixing""... $ac_c" 1>&6
-echo "configure:8414: checking linker read-only and read-write section mixing" >&5
+echo "configure:8646: checking linker read-only and read-write section mixing" >&5
gcc_cv_ld_ro_rw_mix=unknown
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
+if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
gcc_cv_ld_ro_rw_mix=read-write
fi
@@ -8448,9 +8680,9 @@ fi
echo "$ac_t""$gcc_cv_ld_ro_rw_mix" 1>&6
echo $ac_n "checking linker PT_GNU_EH_FRAME support""... $ac_c" 1>&6
-echo "configure:8452: checking linker PT_GNU_EH_FRAME support" >&5
+echo "configure:8684: checking linker PT_GNU_EH_FRAME support" >&5
gcc_cv_ld_eh_frame_hdr=no
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
+if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
gcc_cv_ld_eh_frame_hdr=yes
fi
@@ -8472,7 +8704,7 @@ echo "$ac_t""$gcc_cv_ld_eh_frame_hdr" 1>&6
case "$target" in
mips*-*-*)
echo $ac_n "checking whether libgloss uses STARTUP directives consistently""... $ac_c" 1>&6
-echo "configure:8476: checking whether libgloss uses STARTUP directives consistently" >&5
+echo "configure:8708: checking whether libgloss uses STARTUP directives consistently" >&5
gcc_cv_mips_libgloss_startup=no
gcc_cv_libgloss_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/libgloss
if test "x$exec_prefix" = xNONE; then
@@ -8677,7 +8909,7 @@ fi
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:8681: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:8913: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
@@ -8839,7 +9071,7 @@ done
rm -f Make-hooks
touch Make-hooks
-target_list="all.build all.cross start.encap rest.encap \
+target_list="all.build all.cross start.encap rest.encap tags \
info dvi generated-manpages \
install-normal install-common install-info install-man \
uninstall \
@@ -8873,18 +9105,6 @@ if test "x$subdirs" != x; then
fi
echo "source ${srcdir}/gdbinit.in" >> .gdbinit
-# Define variables host_canonical and build_canonical
-# because some Cygnus local changes in the Makefile depend on them.
-build_canonical=${build}
-host_canonical=${host}
-target_subdir=
-if test "${host}" != "${target}" ; then
- target_subdir=${target_alias}/
-fi
-
-
-
-
# If $(exec_prefix) exists and is not the same as $(prefix), then compute an
# absolute path for gcc_tooldir based on inserting the number of up-directory
# movements required to get from $(exec_prefix) to $(prefix) into the basic
@@ -9206,26 +9426,28 @@ s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
+s%@build_canonical@%$build_canonical%g
+s%@host_canonical@%$host_canonical%g
+s%@target_subdir@%$target_subdir%g
s%@CC@%$CC%g
s%@NO_MINUS_C_MINUS_O@%$NO_MINUS_C_MINUS_O%g
s%@OUTPUT_OPTION@%$OUTPUT_OPTION%g
+s%@CPP@%$CPP%g
s%@GNATBIND@%$GNATBIND%g
s%@ADAC@%$ADAC%g
s%@strict1_warn@%$strict1_warn%g
-s%@CPP@%$CPP%g
s%@warn_cflags@%$warn_cflags%g
-s%@enable_multilib@%$enable_multilib%g
s%@WERROR@%$WERROR%g
s%@nocommon_flag@%$nocommon_flag%g
s%@valgrind_path@%$valgrind_path%g
s%@valgrind_path_defines@%$valgrind_path_defines%g
s%@valgrind_command@%$valgrind_command%g
s%@coverage_flags@%$coverage_flags%g
+s%@enable_multilib@%$enable_multilib%g
s%@enable_shared@%$enable_shared%g
s%@TARGET_SYSTEM_ROOT@%$TARGET_SYSTEM_ROOT%g
s%@TARGET_SYSTEM_ROOT_DEFINE@%$TARGET_SYSTEM_ROOT_DEFINE%g
s%@CROSS_SYSTEM_HEADER_DIR@%$CROSS_SYSTEM_HEADER_DIR%g
-s%@stage1_cflags@%$stage1_cflags%g
s%@SET_MAKE@%$SET_MAKE%g
s%@AWK@%$AWK%g
s%@LN@%$LN%g
@@ -9240,8 +9462,10 @@ s%@BUILD_INFO@%$BUILD_INFO%g
s%@GENERATED_MANPAGES@%$GENERATED_MANPAGES%g
s%@FLEX@%$FLEX%g
s%@BISON@%$BISON%g
+s%@stage1_cflags@%$stage1_cflags%g
s%@COLLECT2_LIBS@%$COLLECT2_LIBS%g
s%@GNAT_LIBEXC@%$GNAT_LIBEXC%g
+s%@LDEXP_LIB@%$LDEXP_LIB%g
s%@TARGET_GETGROUPS_T@%$TARGET_GETGROUPS_T%g
s%@LIBICONV@%$LIBICONV%g
s%@manext@%$manext%g
@@ -9290,9 +9514,6 @@ s%@ANDER@%$ANDER%g
s%@BANSHEEINC@%$BANSHEEINC%g
s%@BANSHEELIB@%$BANSHEELIB%g
s%@BANSHEEREBUILD@%$BANSHEEREBUILD%g
-s%@build_canonical@%$build_canonical%g
-s%@host_canonical@%$host_canonical%g
-s%@target_subdir@%$target_subdir%g
s%@gcc_tooldir@%$gcc_tooldir%g
s%@dollar@%$dollar%g
s%@slibdir@%$slibdir%g
diff --git a/gcc/configure.in b/gcc/configure.in
index 11cbc814287..f1e5117f4a3 100644
--- a/gcc/configure.in
+++ b/gcc/configure.in
@@ -21,15 +21,31 @@
#Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#02111-1307, USA.
-# Initialization and defaults
+# --------------------------------
+# Initialization and sanity checks
+# --------------------------------
+
AC_PREREQ(2.13)
AC_INIT(tree.c)
AC_CONFIG_HEADER(auto-host.h:config.in)
-remove=rm
-hard_link=ln
-symbolic_link='ln -s'
-copy=cp
+# Determine the host, build, and target systems
+AC_CANONICAL_SYSTEM
+
+# Define variables host_canonical and build_canonical
+build_canonical=${build}
+host_canonical=${host}
+AC_SUBST(build_canonical)
+AC_SUBST(host_canonical)
+
+target_subdir=
+if test "${host}" != "${target}" ; then
+ target_subdir=${target_alias}/
+fi
+AC_SUBST(target_subdir)
+
+# Set program_transform_name
+AC_ARG_PROGRAM
# Check for bogus environment variables.
# Test if LIBRARY_PATH contains the notation for the current directory
@@ -84,7 +100,63 @@ AC_MSG_ERROR([
*** and run configure again.])
fi
-# Check for additional parameters
+# -----------
+# Directories
+# -----------
+
+# Specify the local prefix
+local_prefix=
+AC_ARG_WITH(local-prefix,
+[ --with-local-prefix=DIR specifies directory to put local include],
+[case "${withval}" in
+yes) AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
+no) ;;
+*) local_prefix=$with_local_prefix ;;
+esac])
+
+# Default local prefix if it is empty
+if test x$local_prefix = x; then
+ local_prefix=/usr/local
+fi
+
+# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
+# passed in by the toplevel make and thus we'd get different behavior
+# depending on where we built the sources.
+gcc_gxx_include_dir=
+# Specify the g++ header file directory
+AC_ARG_WITH(gxx-include-dir,
+[ --with-gxx-include-dir=DIR
+ specifies directory to put g++ header files],
+[case "${withval}" in
+yes) AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
+no) ;;
+*) gcc_gxx_include_dir=$with_gxx_include_dir ;;
+esac])
+
+if test x${gcc_gxx_include_dir} = x; then
+ if test x${enable_version_specific_runtime_libs} = xyes; then
+ gcc_gxx_include_dir='${libsubdir}/include/c++'
+ else
+ topsrcdir=${srcdir}/.. . ${srcdir}/../config.if
+changequote(<<, >>)dnl
+ gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir}
+changequote([, ])dnl
+ fi
+fi
+
+AC_ARG_WITH(cpp_install_dir,
+[ --with-cpp-install-dir=DIR
+ install the user visible C preprocessor in DIR
+ (relative to PREFIX) as well as PREFIX/bin],
+[if test x$withval = xyes; then
+ AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
+elif test x$withval != xno; then
+ cpp_install_dir=$withval
+fi])
+
+# -------------------
+# Find default linker
+# -------------------
# With GNU ld
AC_ARG_WITH(gnu-ld,
@@ -106,6 +178,21 @@ if test x"${DEFAULT_LINKER+set}" = x"set"; then
[Define to enable the use of a default linker.])
fi
+AC_MSG_CHECKING([whether a default linker was specified])
+if test x"${DEFAULT_LINKER+set}" = x"set"; then
+ if test x"$gnu_ld_flag" = x"no"; then
+ AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
+ else
+ AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
+ fi
+else
+ AC_MSG_RESULT(no)
+fi
+
+# ----------------------
+# Find default assembler
+# ----------------------
+
# With GNU as
AC_ARG_WITH(gnu-as,
[ --with-gnu-as arrange to work with GNU as],
@@ -125,63 +212,20 @@ if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
[Define to enable the use of a default assembler.])
fi
-# With stabs
-AC_ARG_WITH(stabs,
-[ --with-stabs arrange to use stabs instead of host debug format],
-stabs="$with_stabs",
-stabs=no)
-
-# With ELF
-AC_ARG_WITH(elf,
-[ --with-elf arrange to use ELF instead of host debug format],
-elf="$with_elf",
-elf=no)
-
-# Specify the local prefix
-local_prefix=
-AC_ARG_WITH(local-prefix,
-[ --with-local-prefix=DIR specifies directory to put local include],
-[case "${withval}" in
-yes) AC_MSG_ERROR(bad value ${withval} given for local include directory prefix) ;;
-no) ;;
-*) local_prefix=$with_local_prefix ;;
-esac])
-
-# Default local prefix if it is empty
-if test x$local_prefix = x; then
- local_prefix=/usr/local
-fi
-
-# Don't set gcc_gxx_include_dir to gxx_include_dir since that's only
-# passed in by the toplevel make and thus we'd get different behavior
-# depending on where we built the sources.
-gcc_gxx_include_dir=
-# Specify the g++ header file directory
-AC_ARG_WITH(gxx-include-dir,
-[ --with-gxx-include-dir=DIR
- specifies directory to put g++ header files],
-[case "${withval}" in
-yes) AC_MSG_ERROR(bad value ${withval} given for g++ include directory) ;;
-no) ;;
-*) gcc_gxx_include_dir=$with_gxx_include_dir ;;
-esac])
-
-if test x${gcc_gxx_include_dir} = x; then
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gcc_gxx_include_dir='${libsubdir}/include/c++'
+AC_MSG_CHECKING([whether a default assembler was specified])
+if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
+ if test x"$gas_flag" = x"no"; then
+ AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
else
- topsrcdir=${srcdir}/.. . ${srcdir}/../config.if
-changequote(<<, >>)dnl
- gcc_gxx_include_dir="\$(libsubdir)/\$(unlibsubdir)/..\`echo \$(exec_prefix) | sed -e 's|^\$(prefix)||' -e 's|/[^/]*|/..|g'\`/include/"${libstdcxx_incdir}
-changequote([, ])dnl
+ AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
fi
+else
+ AC_MSG_RESULT(no)
fi
-# Determine the host, build, and target systems
-AC_CANONICAL_SYSTEM
-
-# Set program_transform_name
-AC_ARG_PROGRAM
+# ---------------
+# Find C compiler
+# ---------------
# Find the native compiler
AC_PROG_CC
@@ -195,8 +239,9 @@ fi
AC_SUBST(NO_MINUS_C_MINUS_O)
AC_SUBST(OUTPUT_OPTION)
-# See if GNAT has been installed
-gcc_AC_PROG_GNAT
+# -------------------------
+# Check C compiler features
+# -------------------------
AC_CACHE_CHECK(whether ${CC-cc} accepts -Wno-long-long,
ac_cv_prog_cc_no_long_long,
@@ -206,6 +251,34 @@ AC_TRY_COMPILE(,,ac_cv_prog_cc_no_long_long=yes,
ac_cv_prog_cc_no_long_long=no)
CFLAGS="$save_CFLAGS"])
+AC_PROG_CPP
+AC_C_INLINE
+gcc_AC_C_VOLATILE
+
+gcc_AC_C_LONG_DOUBLE
+gcc_AC_C_LONG_LONG
+gcc_AC_C__BOOL
+
+# sizeof(char) is 1 by definition.
+AC_COMPILE_CHECK_SIZEOF(short)
+AC_COMPILE_CHECK_SIZEOF(int)
+AC_COMPILE_CHECK_SIZEOF(long)
+if test $ac_cv_c_long_long = yes; then
+ AC_COMPILE_CHECK_SIZEOF(long long)
+fi
+if test $ac_cv_c___int64 = yes; then
+ AC_COMPILE_CHECK_SIZEOF(__int64)
+fi
+
+gcc_AC_C_CHARSET
+
+# -----------------
+# Find Ada compiler
+# -----------------
+
+# See if GNAT has been installed
+gcc_AC_PROG_GNAT
+
if test x$have_gnat != xno ; then
AC_CACHE_CHECK(whether ${ADAC} accepts -Wno-long-long,
ac_cv_prog_adac_no_long_long,
@@ -222,6 +295,10 @@ else
ac_cv_prog_adac_no_long_long=yes
fi
+# ---------------------
+# Warnings and checking
+# ---------------------
+
strict1_warn=
if test $ac_cv_prog_cc_no_long_long = yes && \
test $ac_cv_prog_adac_no_long_long = yes ; then
@@ -229,27 +306,6 @@ if test $ac_cv_prog_cc_no_long_long = yes && \
fi
AC_SUBST(strict1_warn)
-AC_PROG_CPP
-AC_C_INLINE
-gcc_AC_C_VOLATILE
-
-gcc_AC_C_LONG_DOUBLE
-gcc_AC_C_LONG_LONG
-gcc_AC_C__BOOL
-
-# sizeof(char) is 1 by definition.
-AC_COMPILE_CHECK_SIZEOF(short)
-AC_COMPILE_CHECK_SIZEOF(int)
-AC_COMPILE_CHECK_SIZEOF(long)
-if test $ac_cv_c_long_long = yes; then
- AC_COMPILE_CHECK_SIZEOF(long long)
-fi
-if test $ac_cv_c___int64 = yes; then
- AC_COMPILE_CHECK_SIZEOF(__int64)
-fi
-
-gcc_AC_C_CHARSET
-
# If the native compiler is GCC, we can enable warnings even in stage1.
# That's useful for people building cross-compilers, or just running a
# quick `make'.
@@ -259,12 +315,6 @@ if test "x$GCC" = "xyes"; then
fi
AC_SUBST(warn_cflags)
-# Determine whether or not multilibs are enabled.
-AC_ARG_ENABLE(multilib,
-[ --enable-multilib enable library support for multiple ABIs],
-[], [enable_multilib=yes])
-AC_SUBST(enable_multilib)
-
# Enable -Werror in bootstrap stage2 and later.
# Change the default to "no" on release branches.
AC_ARG_ENABLE(werror,
@@ -355,17 +405,30 @@ valgrind_command=
if test x$ac_checking_valgrind != x ; then
# It is certainly possible that there's valgrind but no valgrind.h.
# GCC relies on making annotations so we must have both.
+ AC_MSG_CHECKING(for VALGRIND_DISCARD in <memcheck.h>)
+ AC_TRY_CPP(
+ [#include <memcheck.h>
+#ifndef VALGRIND_DISCARD
+#error VALGRIND_DISCARD not defined
+#endif],
+ [gcc_cv_header_memcheck_h=yes],
+ gcc_cv_header_memcheck_h=no)
+ AC_MSG_RESULT($gcc_cv_header_memcheck_h)
AC_CHECK_HEADER(valgrind.h, have_valgrind_h=yes, have_valgrind_h=no)
AM_PATH_PROG_WITH_TEST(valgrind_path, valgrind,
[$ac_dir/$ac_word --version | grep valgrind- >/dev/null 2>&1])
- if test "x$valgrind_path" = "x" || test $have_valgrind_h = no; then
- AC_MSG_ERROR([*** Can't find both valgrind and valgrind.h])
+ if test "x$valgrind_path" = "x" || (test $have_valgrind_h = no && test $gcc_cv_header_memcheck_h = no); then
+ AC_MSG_ERROR([*** Can't find both valgrind and valgrind.h/memcheck.h])
fi
valgrind_path_defines=-DVALGRIND_PATH='\"'$valgrind_path'\"'
valgrind_command="$valgrind_path -q"
AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
[Define if you want to run subprograms and generated programs
through valgrind (a memory checker). This is extremely expensive.])
+ if test $gcc_cv_header_memcheck_h = yes; then
+ AC_DEFINE(HAVE_MEMCHECK_H, 1,
+ [Define if valgrind's memcheck.h header is installed.])
+ fi
fi
AC_SUBST(valgrind_path_defines)
AC_SUBST(valgrind_command)
@@ -392,15 +455,27 @@ esac],
[coverage_flags=""])
AC_SUBST(coverage_flags)
-AC_ARG_WITH(cpp_install_dir,
-[ --with-cpp-install-dir=DIR
- install the user visible C preprocessor in DIR
- (relative to PREFIX) as well as PREFIX/bin],
-[if test x$withval = xyes; then
- AC_MSG_ERROR([option --with-cpp-install-dir requires an argument])
-elif test x$withval != xno; then
- cpp_install_dir=$withval
-fi])
+# -------------------------------
+# Miscenalleous configure options
+# -------------------------------
+
+# With stabs
+AC_ARG_WITH(stabs,
+[ --with-stabs arrange to use stabs instead of host debug format],
+stabs="$with_stabs",
+stabs=no)
+
+# With ELF
+AC_ARG_WITH(elf,
+[ --with-elf arrange to use ELF instead of host debug format],
+elf="$with_elf",
+elf=no)
+
+# Determine whether or not multilibs are enabled.
+AC_ARG_ENABLE(multilib,
+[ --enable-multilib enable library support for multiple ABIs],
+[], [enable_multilib=yes])
+AC_SUBST(enable_multilib)
# Enable __cxa_atexit for C++.
AC_ARG_ENABLE(__cxa_atexit,
@@ -515,72 +590,19 @@ AC_ARG_WITH(sysroot,
esac
], [
TARGET_SYSTEM_ROOT=
- TARGET_SYSTEM_ROOT_DEFINE='-DTARGET_SYSTEM_ROOT=0'
+ TARGET_SYSTEM_ROOT_DEFINE=
CROSS_SYSTEM_HEADER_DIR='$(gcc_tooldir)/sys-include'
])
AC_SUBST(TARGET_SYSTEM_ROOT)
AC_SUBST(TARGET_SYSTEM_ROOT_DEFINE)
AC_SUBST(CROSS_SYSTEM_HEADER_DIR)
-# Stage specific cflags for build.
-stage1_cflags=
-case $build in
-vax-*-*)
- if test x$GCC = xyes
- then
- stage1_cflags="-Wa,-J"
- else
- stage1_cflags="-J"
- fi
- ;;
-powerpc-*-darwin*)
- # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
- # sources; use -no-cpp-precomp to get to GNU cpp.
- # Apple's GCC has bugs in designated initializer handling, so disable
- # that too.
- stage1_cflags="-no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
- ;;
-esac
-AC_SUBST(stage1_cflags)
+# -------------------------
+# Checks for other programs
+# -------------------------
AC_PROG_MAKE_SET
-AC_MSG_CHECKING([whether a default assembler was specified])
-if test x"${DEFAULT_ASSEMBLER+set}" = x"set"; then
- if test x"$gas_flag" = x"no"; then
- AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER)])
- else
- AC_MSG_RESULT([yes ($DEFAULT_ASSEMBLER - GNU as)])
- fi
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_MSG_CHECKING([whether a default linker was specified])
-if test x"${DEFAULT_LINKER+set}" = x"set"; then
- if test x"$gnu_ld_flag" = x"no"; then
- AC_MSG_RESULT([yes ($DEFAULT_LINKER)])
- else
- AC_MSG_RESULT([yes ($DEFAULT_LINKER - GNU ld)])
- fi
-else
- AC_MSG_RESULT(no)
-fi
-
-AC_MSG_CHECKING(for GNU C library)
-AC_CACHE_VAL(gcc_cv_glibc,
-[AC_TRY_COMPILE(
- [#include <features.h>],[
-#if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
-#error Not a GNU C library system
-#endif],
- [gcc_cv_glibc=yes],
- gcc_cv_glibc=no)])
-AC_MSG_RESULT($gcc_cv_glibc)
-if test $gcc_cv_glibc = yes; then
- AC_DEFINE(_GNU_SOURCE, 1, [Always define this when using the GNU C Library])
-fi
-
# Find some useful tools
AC_PROG_AWK
gcc_AC_PROG_LN
@@ -588,25 +610,6 @@ gcc_AC_PROG_LN_S
AC_PROG_RANLIB
gcc_AC_PROG_INSTALL
-AC_HEADER_STDC
-AC_HEADER_TIME
-gcc_AC_HEADER_STDBOOL
-gcc_AC_HEADER_STRING
-AC_HEADER_SYS_WAIT
-AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h \
- fcntl.h unistd.h sys/file.h sys/time.h \
- sys/resource.h sys/param.h sys/times.h sys/stat.h \
- direct.h malloc.h langinfo.h ldfcn.h)
-
-# Check for thread headers.
-AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
-AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
-
-# These tests can't be done till we know if we have limits.h.
-gcc_AC_C_CHAR_BIT
-AC_C_BIGENDIAN_CROSS
-gcc_AC_C_FLOAT_FORMAT
-
# See if we have the mktemp command.
AC_CHECK_PROG(have_mktemp_command, mktemp, yes, no)
@@ -659,6 +662,67 @@ else
AC_CHECK_PROG(BISON, bison, bison, ${CONFIG_SHELL-/bin/sh} ${srcdir}/../missing bison)
fi
+# --------------------
+# Checks for C headers
+# --------------------
+
+AC_MSG_CHECKING(for GNU C library)
+AC_CACHE_VAL(gcc_cv_glibc,
+[AC_TRY_COMPILE(
+ [#include <features.h>],[
+#if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
+#error Not a GNU C library system
+#endif],
+ [gcc_cv_glibc=yes],
+ gcc_cv_glibc=no)])
+AC_MSG_RESULT($gcc_cv_glibc)
+if test $gcc_cv_glibc = yes; then
+ AC_DEFINE(_GNU_SOURCE, 1, [Always define this when using the GNU C Library])
+fi
+
+AC_HEADER_STDC
+AC_HEADER_TIME
+gcc_AC_HEADER_STDBOOL
+gcc_AC_HEADER_STRING
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h \
+ fcntl.h unistd.h sys/file.h sys/time.h \
+ sys/resource.h sys/param.h sys/times.h sys/stat.h \
+ direct.h malloc.h langinfo.h ldfcn.h)
+
+# Check for thread headers.
+AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=])
+AC_CHECK_HEADER(pthread.h, [have_pthread_h=yes], [have_pthread_h=])
+
+# These tests can't be done till we know if we have limits.h.
+gcc_AC_C_CHAR_BIT
+AC_C_BIGENDIAN_CROSS
+
+# --------
+# UNSORTED
+# --------
+
+# Stage specific cflags for build.
+stage1_cflags=
+case $build in
+vax-*-*)
+ if test x$GCC = xyes
+ then
+ stage1_cflags="-Wa,-J"
+ else
+ stage1_cflags="-J"
+ fi
+ ;;
+powerpc-*-darwin*)
+ # The spiffy cpp-precomp chokes on some legitimate constructs in GCC
+ # sources; use -no-cpp-precomp to get to GNU cpp.
+ # Apple's GCC has bugs in designated initializer handling, so disable
+ # that too.
+ stage1_cflags="-no-cpp-precomp -DHAVE_DESIGNATED_INITIALIZERS=0"
+ ;;
+esac
+AC_SUBST(stage1_cflags)
+
# These libraries may be used by collect2.
# We may need a special search path to get them linked.
AC_CACHE_CHECK(for collect2 libraries, gcc_cv_collect2_libs,
@@ -688,6 +752,15 @@ GNAT_LIBEXC="$LIBS"
LIBS="$save_LIBS"
AC_SUBST(GNAT_LIBEXC)
+# Some systems put ldexp and frexp in libm instead of libc; assume
+# they're both in the same place. jcf-dump needs them.
+save_LIBS="$LIBS"
+LIBS=
+AC_SEARCH_LIBS(ldexp, m)
+LDEXP_LIB="$LIBS"
+LIBS="$save_LIBS"
+AC_SUBST(LDEXP_LIB)
+
# See if the stage1 system preprocessor understands the ANSI C
# preprocessor stringification operator. (Used by symcat.h.)
AC_C_STRINGIZE
@@ -777,6 +850,15 @@ gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
#endif
])
+AC_TRY_COMPILE([
+#include "ansidecl.h"
+#include "system.h"
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+],[rlim_t l = 0;],,[AC_DEFINE([rlim_t],[long],
+[Define to \`long' if <sys/resource.h> doesn't define.])])
+
gcc_AC_CHECK_DECLS(ldgetname, , ,[
#include "ansidecl.h"
#include "system.h"
@@ -865,6 +947,10 @@ if test x"$use_libunwind_exceptions" = xyes; then
[Define if gcc should use -lunwind.])
fi
+# --------------------------------------------------------
+# Build, host, and target specific configuration fragments
+# --------------------------------------------------------
+
target_gtfiles=
build_xm_file=
build_xm_defines=
@@ -1058,6 +1144,10 @@ build_xm_file="${build_auto} ansidecl.h ${build_xm_file}"
# put this back in temporarily.
xm_file="ansidecl.h ${xm_file}"
+# --------
+# UNSORTED
+# --------
+
# Truncate the target if necessary
if test x$host_truncate_target != x; then
target=`echo $target | sed -e 's/\(..............\).*/\1/'`
@@ -1188,6 +1278,8 @@ do
fi
done
+symbolic_link='ln -s'
+
# If the host doesn't support symlinks, modify CC in
# FLAGS_TO_PASS so CC="stage1/xgcc -Bstage1/" works.
# Otherwise, we can use "CC=$(CC)".
@@ -1330,16 +1422,15 @@ else
done
fi
-if test x$use_collect2 = xno; then
- use_collect2=
-fi
-
# Add a definition of USE_COLLECT2 if system wants one.
-if test x$use_collect2 != x
-then
- host_xm_defines="${host_xm_defines} USE_COLLECT2"
- xm_defines="${xm_defines} USE_COLLECT2"
-fi
+case $use_collect2 in
+ no) use_collect2= ;;
+ "") ;;
+ *)
+ host_xm_defines="${host_xm_defines} USE_COLLECT2"
+ xm_defines="${xm_defines} USE_COLLECT2"
+ ;;
+esac
# If we have gas in the build tree, make a link to it.
if test -f ../gas/Makefile; then
@@ -1357,13 +1448,19 @@ if test -f ../ld/Makefile; then
rm -f collect-ld; $symbolic_link ../ld/ld-new$host_exeext collect-ld$host_exeext 2>/dev/null
fi
-# Figure out what assembler we will be using.
+# Identify the assembler which will work hand-in-glove with the newly
+# built GCC, so that we can examine its features. This is the assembler
+# which will be driven by the driver program.
+#
+# If build != host, and we aren't building gas in-tree, we identify a
+# build->target assembler and hope that it will have the same features
+# as the host->target assembler we'll be using.
AC_MSG_CHECKING(what assembler to use)
+in_tree_gas=no
gcc_cv_as=
gcc_cv_gas_major_version=
gcc_cv_gas_minor_version=
gcc_cv_as_gas_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/gas
-gcc_cv_as_bfd_srcdir=`echo $srcdir | sed -e 's,/gcc$,,'`/bfd
if test -x "$DEFAULT_ASSEMBLER"; then
gcc_cv_as="$DEFAULT_ASSEMBLER"
elif test -x "$AS"; then
@@ -1371,22 +1468,11 @@ elif test -x "$AS"; then
elif test -x as$host_exeext; then
# Build using assembler in the current directory.
gcc_cv_as=./as$host_exeext
-elif test -f $gcc_cv_as_gas_srcdir/configure.in -a -f ../gas/Makefile; then
- # Single tree build which includes gas.
- for f in $gcc_cv_as_bfd_srcdir/configure $gcc_cv_as_gas_srcdir/configure $gcc_cv_as_gas_srcdir/configure.in $gcc_cv_as_gas_srcdir/Makefile.in
- do
-changequote(,)dnl
- gcc_cv_gas_version=`grep '^VERSION=[0-9]*\.[0-9]*' $f`
-changequote([,])dnl
- if test x$gcc_cv_gas_version != x; then
- break
- fi
- done
-changequote(,)dnl
- gcc_cv_gas_major_version=`expr "$gcc_cv_gas_version" : "VERSION=\([0-9]*\)"`
- gcc_cv_gas_minor_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.\([0-9]*\)"`
- gcc_cv_gas_patch_version=`expr "$gcc_cv_gas_version" : "VERSION=[0-9]*\.[0-9]*\.\([0-9]*\)"`
-changequote([,])dnl
+elif test -f $gcc_cv_as_gas_srcdir/configure.in \
+ && test -f ../gas/Makefile; then
+ # Single tree build which includes gas.
+ in_tree_gas=yes
+ _gcc_COMPUTE_GAS_VERSION
fi
if test "x$gcc_cv_as" = x; then
@@ -1448,14 +1534,24 @@ if test "x$gcc_cv_as" = x; then
fi
done
fi
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- AC_MSG_RESULT("newly built gas")
-else
- AC_MSG_RESULT($gcc_cv_as)
-fi
+case $in_tree_gas in
+ yes)
+ AC_MSG_RESULT("newly built gas")
+ ;;
+ no)
+ AC_MSG_RESULT($gcc_cv_as)
+ ;;
+esac
-# Figure out what linker we will be using.
+# Identify the linker which will work hand-in-glove with the newly
+# built GCC, so that we can examine its features. This is the linker
+# which will be driven by the driver program.
+#
+# If build != host, and we aren't building gas in-tree, we identify a
+# build->target linker and hope that it will have the same features
+# as the host->target linker we'll be using.
AC_MSG_CHECKING(what linker to use)
+in_tree_ld=no
gcc_cv_ld=
gcc_cv_gld_major_version=
gcc_cv_gld_minor_version=
@@ -1468,8 +1564,10 @@ elif test -x "$LD"; then
elif test -x ld$host_exeext; then
# Build using linker in the current directory.
gcc_cv_ld=./ld$host_exeext
-elif test -f $gcc_cv_ld_gld_srcdir/configure.in -a -f ../ld/Makefile; then
+elif test -f $gcc_cv_ld_gld_srcdir/configure.in \
+ && test -f ../ld/Makefile; then
# Single tree build which includes ld.
+ in_tree_ld=yes
for f in $gcc_cv_ld_bfd_srcdir/configure $gcc_cv_ld_gld_srcdir/configure $gcc_cv_ld_gld_srcdir/configure.in $gcc_cv_ld_gld_srcdir/Makefile.in
do
changequote(,)dnl
@@ -1544,11 +1642,14 @@ if test "x$gcc_cv_ld" = x; then
fi
done
fi
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
- AC_MSG_RESULT("newly built ld")
-else
- AC_MSG_RESULT($gcc_cv_ld)
-fi
+case $in_tree_ld in
+ yes)
+ AC_MSG_RESULT("newly built ld")
+ ;;
+ no)
+ AC_MSG_RESULT($gcc_cv_ld)
+ ;;
+esac
# Figure out what nm we will be using.
AC_MSG_CHECKING(what nm to use)
@@ -1575,19 +1676,18 @@ AC_MSG_RESULT($gcc_cv_objdump)
# Figure out what assembler alignment features are present.
AC_MSG_CHECKING(assembler alignment features)
gcc_cv_as_alignment_features=none
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- # Gas version 2.6 and later support for .balign and .p2align.
- # bytes to skip when using .p2align.
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 6 -o "$gcc_cv_gas_major_version" -gt 2; then
- gcc_cv_as_alignment_features=".balign and .p2align"
- AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN)
- fi
- # Gas version 2.8 and later support specifying the maximum
- # bytes to skip when using .p2align.
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 8 -o "$gcc_cv_gas_major_version" -gt 2; then
- gcc_cv_as_alignment_features=".p2align including maximum skip"
- AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN)
- fi
+if test $in_tree_gas = yes; then
+ # Gas version 2.6 and later support for .balign and .p2align.
+ gcc_GAS_VERSION_GTE_IFELSE(2,6,0,[
+ gcc_cv_as_alignment_features=".balign and .p2align"
+ AC_DEFINE(HAVE_GAS_BALIGN_AND_P2ALIGN)
+ ])
+ # Gas version 2.8 and later support specifying the maximum
+ # bytes to skip when using .p2align.
+ gcc_GAS_VERSION_GTE_IFELSE(2,8,0,[
+ gcc_cv_as_alignment_features=".p2align including maximum skip"
+ AC_DEFINE(HAVE_GAS_MAX_SKIP_P2ALIGN)
+ ])
elif test x$gcc_cv_as != x; then
# Check if we have .balign and .p2align
echo ".balign 4" > conftest.s
@@ -1610,10 +1710,12 @@ AC_MSG_RESULT($gcc_cv_as_alignment_features)
AC_MSG_CHECKING(assembler subsection support)
gcc_cv_as_subsections=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_subsections="working .subsection -1"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,9,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_subsections="working .subsection -1"
+ fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if we have .subsection
echo ".subsection 1" > conftest.s
@@ -1648,10 +1750,10 @@ AC_MSG_RESULT($gcc_cv_as_subsections)
AC_MSG_CHECKING(assembler weak support)
gcc_cv_as_weak=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 2 -o "$gcc_cv_gas_major_version" -gt 2; then
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,2,0,[
gcc_cv_as_weak="yes"
- fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if we have .weak
echo " .weak foobar" > conftest.s
@@ -1667,16 +1769,12 @@ AC_MSG_RESULT($gcc_cv_as_weak)
AC_MSG_CHECKING(assembler hidden support)
gcc_cv_as_hidden=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -eq 12 \
- -a "$gcc_cv_gas_patch_version" -ge 1 \
- -o "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -gt 12 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_hidden="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,12,1,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_hidden="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if we have .hidden
echo " .hidden foobar" > conftest.s
@@ -1742,10 +1840,12 @@ AC_SUBST(libgcc_visibility)
AC_MSG_CHECKING(assembler leb128 support)
gcc_cv_as_leb128=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 11 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_leb128="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,11,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_leb128="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if we have .[us]leb128, and support symbol arithmetic with it.
cat > conftest.s <<EOF
@@ -1786,10 +1886,12 @@ AC_MSG_RESULT($gcc_cv_as_leb128)
AC_MSG_CHECKING(assembler eh_frame optimization)
gcc_cv_as_eh_frame=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_eh_frame="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,12,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_eh_frame="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if this is GAS.
as_ver=`$gcc_cv_as --version < /dev/null 2> /dev/null | head -1`
@@ -1864,10 +1966,12 @@ AC_MSG_RESULT($gcc_cv_as_eh_frame)
AC_MSG_CHECKING(assembler section merging support)
gcc_cv_as_shf_merge=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 12 -o "$gcc_cv_gas_major_version" -gt 2 && grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
- gcc_cv_as_shf_merge=yes
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,12,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null; then
+ gcc_cv_as_shf_merge=yes
+ fi
+ ])
elif test x$gcc_cv_as != x; then
# Check if we support SHF_MERGE sections
echo '.section .rodata.str, "aMS", @progbits, 1' > conftest.s
@@ -2000,13 +2104,10 @@ foo: .long 25
esac
if test -z "$tls_first_major"; then
:
-elif test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
-then
- if test "$gcc_cv_gas_major_version" -eq "$tls_first_major" \
- -a "$gcc_cv_gas_minor_version" -ge "$tls_first_minor" \
- -o "$gcc_cv_gas_major_version" -gt "$tls_first_major"; then
+elif test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE($tls_first_major,$tls_first_minor,0,[
gcc_cv_as_tls=yes
- fi
+ ])
elif test x$gcc_cv_as != x; then
echo "$conftest_s" > conftest.s
if $gcc_cv_as --fatal-warnings -o conftest.o conftest.s > /dev/null 2>&1
@@ -2027,14 +2128,10 @@ case "$target" in
AC_CACHE_CHECK([assembler supports explicit relocations],
gcc_cv_as_explicit_relocs, [
gcc_cv_as_explicit_relocs=unknown
- if test x$gcc_cv_gas_major_version != x \
- -a x$gcc_cv_gas_minor_version != x
- then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 12 \
- -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,12,0,[
gcc_cv_as_explicit_relocs=yes
- fi
+ ])
elif test x$gcc_cv_as != x; then
cat > conftest.s << 'EOF'
.set nomacro
@@ -2186,10 +2283,10 @@ changequote(,)dnl
changequote([,])dnl
AC_MSG_CHECKING(assembler instructions)
gcc_cv_as_instructions=
- if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x; then
- if test "$gcc_cv_gas_major_version" -eq 2 -a "$gcc_cv_gas_minor_version" -ge 9 -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,9,0,[
gcc_cv_as_instructions="filds fists"
- fi
+ ])
elif test x$gcc_cv_as != x; then
set "filds fists" "filds mem; fists mem"
while test $# -gt 0
@@ -2209,13 +2306,10 @@ changequote([,])dnl
AC_MSG_CHECKING(assembler GOTOFF in data directives)
gcc_cv_as_gotoff_in_data=no
- if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x
- then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2; then
+ if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,11,0,[
gcc_cv_as_gotoff_in_data=yes
- fi
+ ])
elif test x$gcc_cv_as != x; then
cat > conftest.s <<EOF
.text
@@ -2233,6 +2327,37 @@ EOF
[Define true if the assembler supports '.long foo@GOTOFF'.])
AC_MSG_RESULT($gcc_cv_as_gotoff_in_data)
;;
+
+ ia64*-*-*)
+ AC_CACHE_CHECK([assembler supports ltoffx and ldxmov],
+ gcc_cv_as_ltoffx_ldxmov_relocs, [
+ gcc_cv_as_ltoffx_ldxmov_relocs=unknown
+ if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,14,0,[
+ gcc_cv_as_ltoffx_ldxmov_relocs=yes
+ ])
+ elif test x$gcc_cv_as != x; then
+ cat > conftest.s << 'EOF'
+changequote(,)dnl
+ .text
+ addl r15 = @ltoffx(x#), gp
+ ;;
+ ld8.mov r16 = [r15], x#
+EOF
+changequote([,])dnl
+ if $gcc_cv_as -o conftest.o conftest.s > /dev/null 2>&1; then
+ gcc_cv_as_ltoffx_ldxmov_relocs=yes
+ else
+ gcc_cv_as_ltoffx_ldxmov_relocs=no
+ fi
+ rm -f conftest.s conftest.o
+ fi
+ ])
+ if test "x$gcc_cv_as_ltoffx_ldxmov_relocs" = xyes; then
+ AC_DEFINE(HAVE_AS_LTOFFX_LDXMOV_RELOCS, 1,
+ [Define if your assembler supports ltoffx and ldxmov relocations.])
+ fi
+ ;;
esac
AC_MSG_CHECKING(assembler dwarf2 debug_line support)
@@ -2252,15 +2377,13 @@ case "$target" in
insn="nop 0"
;;
esac
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_dwarf2_debug_line="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,11,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_dwarf2_debug_line="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo ' .file 1 "conftest.s"' > conftest.s
echo ' .loc 1 3 0' >> conftest.s
@@ -2292,15 +2415,13 @@ AC_MSG_RESULT($gcc_cv_as_dwarf2_debug_line)
AC_MSG_CHECKING(assembler --gdwarf2 support)
gcc_cv_as_gdwarf2_flag=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_gdwarf2_flag="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,11,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_gdwarf2_flag="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo '' > conftest.s
# ??? This fails with non-gnu grep.
@@ -2318,15 +2439,13 @@ AC_MSG_RESULT($gcc_cv_as_gdwarf2_flag)
AC_MSG_CHECKING(assembler --gstabs support)
gcc_cv_as_gstabs_flag=no
-if test x$gcc_cv_gas_major_version != x -a x$gcc_cv_gas_minor_version != x;
-then
- if test "$gcc_cv_gas_major_version" -eq 2 \
- -a "$gcc_cv_gas_minor_version" -ge 11 \
- -o "$gcc_cv_gas_major_version" -gt 2 \
- && grep 'obj_format = elf' ../gas/Makefile > /dev/null \
- && test x"$insn" != x ; then
- gcc_cv_as_gstabs_flag="yes"
- fi
+if test $in_tree_gas = yes ; then
+ gcc_GAS_VERSION_GTE_IFELSE(2,11,0,[
+ if grep 'obj_format = elf' ../gas/Makefile > /dev/null \
+ && test x"$insn" != x ; then
+ gcc_cv_as_gstabs_flag="yes"
+ fi
+ ])
elif test x$gcc_cv_as != x -a x"$insn" != x ; then
echo '' > conftest.s
# ??? This fails with non-gnu grep.
@@ -2343,7 +2462,7 @@ AC_MSG_RESULT($gcc_cv_as_gstabs_flag)
AC_MSG_CHECKING(linker read-only and read-write section mixing)
gcc_cv_ld_ro_rw_mix=unknown
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
+if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 10 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
gcc_cv_ld_ro_rw_mix=read-write
fi
@@ -2381,7 +2500,7 @@ AC_MSG_RESULT($gcc_cv_ld_ro_rw_mix)
AC_MSG_CHECKING(linker PT_GNU_EH_FRAME support)
gcc_cv_ld_eh_frame_hdr=no
-if test x$gcc_cv_gld_major_version != x -a x$gcc_cv_gld_minor_version != x; then
+if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 12 -o "$gcc_cv_gld_major_version" -gt 2 && grep 'EMUL = elf' ../ld/Makefile > /dev/null; then
gcc_cv_ld_eh_frame_hdr=yes
fi
@@ -2753,7 +2872,7 @@ done
rm -f Make-hooks
touch Make-hooks
-target_list="all.build all.cross start.encap rest.encap \
+target_list="all.build all.cross start.encap rest.encap tags \
info dvi generated-manpages \
install-normal install-common install-info install-man \
uninstall \
@@ -2787,18 +2906,6 @@ if test "x$subdirs" != x; then
fi
echo "source ${srcdir}/gdbinit.in" >> .gdbinit
-# Define variables host_canonical and build_canonical
-# because some Cygnus local changes in the Makefile depend on them.
-build_canonical=${build}
-host_canonical=${host}
-target_subdir=
-if test "${host}" != "${target}" ; then
- target_subdir=${target_alias}/
-fi
-AC_SUBST(build_canonical)
-AC_SUBST(host_canonical)
-AC_SUBST(target_subdir)
-
# If $(exec_prefix) exists and is not the same as $(prefix), then compute an
# absolute path for gcc_tooldir based on inserting the number of up-directory
# movements required to get from $(exec_prefix) to $(prefix) into the basic
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index da08b79e236..d8464aa5724 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,8 +1,833 @@
+2003-04-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * decl.c (set_current_binding_level): Delete, revert last change.
+ (current_binding_level): Modify to allow it as as lvalue.
+
+2003-04-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * name-lookup.c (find_binding): Pass appropriate pointer type to
+ POP_TIMEVAR_AND_RETURN.
+
+2003-04-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (cp-warn): Add $(STRICT_WARN).
+ * cp-tree.h: Don't insist on having GNUC.
+
2003-04-03 Jason Merrill <jason@redhat.com>
* cvt.c (ocp_convert): Only abort if we try to convert an object
of TREE_ADDRESSABLE type.
+ * class.c (build_vtable): Set DECL_ALIGN here.
+ (get_vtable_decl): Not here.
+ (layout_vtable_decl): Or here.
+ (create_vtable_ptr): Or here.
+ (layout_class_type): Or here.
+ (check_bitfield_decl): Don't mess with field alignment.
+
+2003-04-03 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * operators.def (DEF_SIMPLE_OPERATOR, DEF_ASSN_OPERATOR,
+ DEF_ASSN_OPERATOR): Delete spurious semi-colon.
+ * rtti.c (dfs_class_hint_mark): Likewise.
+
+ * decl.c (push_local_name, push_class_level_binding,
+ maybe_inject_for_scope_var): Don't use POP_TIMEVAR_AND_RETURN in
+ functions returning void.
+ * decl2.c (add_using_namespace): Likewise.
+
+ * decl.c (print_binding_level, print_other_binding_stack,
+ print_binding_stack): Cast argument of %p specifier to void*.
+ * ptree.c (cxx_print_decl): Likewise.
+
+ * cp-tree.h (VAR_OR_FUNCTION_DECL_CHECK,
+ VAR_FUNCTION_OR_PARM_DECL_CHECK,
+ VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK, RECORD_OR_UNION_TYPE_CHECK,
+ BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK, LANG_TYPE_CLASS_CHECK,
+ LANG_TYPE_PTRMEM_CHECK, LANG_DECL_U2_CHECK): Add __extension__.
+
+ * decl.c (set_current_binding_level): New macro. Use throughout
+ when setting the current binding level.
+
+ * cp-tree.h (cp_lvalue_kind, base_access): Delete trailing comma
+ in enum.
+ * method.c (mangling_flags): Likewise.
+
+ * cp-tree.h (lang_type_header): Add __extension__ and use
+ CHAR_BITFIELD for members.
+
+2003-04-02 Geoffrey Keating <geoffk@apple.com>
+
+ PR other/9274
+ * mangle.c: Include gt-cp-mangle.h.
+ (subst_identifiers): Mark with GTY.
+ * config-lang.in (gtfiles): Add cp/mangle.c.
+ * Make-lang.in: (gt-cp-mangle.h): New rule.
+ (cp/mangle.o): Depends on gt-cp-mangle.h.
+
+2003-04-01 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * config-lang.in (gtfiles): Add \$(srcdir)/cp/name-lookup.c
+ after \$(srcdir)/cp/name-lookup.h.
+ * name-lookup.c: (cxx_binding_make): Use ggc_alloc_clearedinstead
+ of ggc_alloc. Include gt-cp-name-lookup.h at the end of the file.
+ * Make-lang.in: (gt-cp-name-lookup.h): Is generated by gengtype.
+ (cp/name-lookup.o): Depends on gt-cp-name-lookup.h.
+
+2003-03-31 Jason Merrill <jason@redhat.com>
+
+ PR java/10145
+ * class.c (check_field_decl): Don't set DECL_ALIGN.
+
+2003-03-30 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7647
+ * decl.c (grokdeclarator): Tidy, slightly.
+ * search.c (lookup_field_1): Add want_type parameter.
+ (lookup_field_r): Adjust call to lookup_field_1.
+
+2003-03-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * Make-lang.in (cp/name-lookup.o): Add more dependencies.
+
+2003-03-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cp-tree.h (binding_for_name: Move to name-lookup.h Adjust
+ prototype.
+ (cxx_scope_find_binding_for_name): Likewise.
+ * decl.c (find_binding: Move to name-lookup.c.
+ (binding_for_name): Likewise.
+ (cxx_scope_find_binding_for_name): Likewise.
+ (BINDING_LEVEL): Remove.
+ (push_binding): Tidy.
+ (push_class_binding): Likewise.
+ (pop_binding): Likewise.
+ (poplevel): Likewise.
+ (poplevel_class): Likewise.
+ (set_identifier_type_value_with_scope): Likewise.
+ (push_overloaded_decl): Likewise.
+ (lookup_tag): Likewise.
+ (unqualified_namespace_lookup): Likewise.
+ (lookup_name_current_level): Likewise.
+ (maybe_inject_for_scope_var): Likewise.
+ (namespace_binding): Move to name-lookup.c.
+ (set_namespace_binding): Likewise.
+ * decl2.c (lookup_using_namespace): Tidy.
+ (qualified_lookup_using_namespace): Likewise.
+ (do_toplevel_using_decl): Likewise.
+ * name-lookup.c: Include "timevar.h"
+ * name-lookup.h (cxx_scope): Declare.
+ (struct cxx_binding): Lose member "has_level". Adjust "scope"
+ member declaration.
+ (BINDING_SCOPE): Adjust definition.
+ (BINDING_HAS_LEVEL_P): Remove.
+
+2003-03-30 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * name-lookup.c: New file.
+ * name-lookup.h: Likewise..
+ * decl.c (push_binding): Adjust use cxx_binding_make.
+ (free_bindings): Move to name-lookup.c
+ (pop_binding): Use cxx_binding_free.
+ (binding_for_name): Tidy.
+ * cp-tree.h: Include "name-lookup.h"
+ (cxx_binding_make): Move to name-lookup.h
+ (cxx_binding_clear): Likewise.
+ (struct cxx_binding): Likewise.
+ (LOCAL_BINDING_P): Likewise.
+ (INHERITED_VALUE_BINDING_P): Likewise.
+ (BINDING_SCOPE): Likewise.
+ (BINDING_HAS_LEVEL_P): Likewise.
+ (BINDING_VALUE): Likewise.
+ (BINDING_TYPE): Likewise.
+ * config-lang.in (gtfiles): Add cp/name-lookup.h
+ * Make-lang.in (cp/name-lookup.o): New rule.
+ (CXX_OBJS): Add cp/name-lookup.o
+ (CXX_TREE_H): Add cp/name-lookup.h
+
+2003-03-28 Jason Merrill <jason@redhat.com>
+
+ PR c++/10245
+ * cvt.c (force_rvalue): New fn.
+ * call.c (build_conditional_expr): Use it.
+ * cp-tree.h: Declare it.
+
+2003-03-28 Mike Stump <mrs@apple.com>
+
+ * error.c (dump_expr): Add 0x to printed hex numbers to make
+ output match source code better.
+
+2003-03-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10218
+ * decl.c (grokfndecl): Return NULL_TREE for bogus out-of-class
+ definitions.
+
+ * decl2.c (generate_ctor_or_dtor_function): Tolerate a
+ non-existant ssdf_decls array.
+ (finish_file): Call generator_ctor_or_dtor_function when there are
+ static constructors or destructors and no other static
+ initializations.
+
+2003-03-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10047
+ * decl2.c (finish_file): Don't warn about explicitly instantiated
+ inline decls.
+
+2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10224
+ * pt.c (lookup_template_class): Only check instantiated args if
+ they do not contain template parameters.
+
+2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10158
+ * parser.c (cp_parser_function_definition): Set
+ DECL_INITIALIZED_IN_CLASS for members.
+ * pt.c (instantiate_decl): Only reduce the template args for
+ friends that are not defined in class.
+
+2003-03-25 Jason Merrill <jason@redhat.com>
+
+ * call.c (print_z_candidate): Change name of first arg to msgid.
+ (joust): Add comment for translators.
+
+2003-03-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898, PR c++/383, DR 322
+ * pt.c (maybe_adjust_types_for_deduction) <DEDUCE_CONV>: Look
+ through reference types on both PARM and ARG.
+
+2003-03-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10119
+ * error.c (dump_expr) <BASELINK>: Use dump_expr.
+ * pt.c (maybe_fold_nontype_args): New function.
+ (tsubst_copy) <SCOPE_REF>: Subst any template_id args.
+ <TEMPLATE_ID_EXPR>: Break out folding code, call it.
+ (tsubst_copy_and_build) <TEMPLATE_ID_EXPR>: Call
+ maybe_fold_nontype_args.
+
+2003-03-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10026
+ * decl2.c (arg_assoc_type) <ERROR_MARK>: Don't die.
+
+2003-03-23 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7086
+ * typeck.c (cxx_mark_addressable): Adjust call to
+ gen_mem_addressof or put_var_into_stack.
+
+2003-03-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9978, c++/9708
+ * cp-tree.h (instantiate_template): Add tsubst_flags parameter.
+ * call.c (add_template_candidate_real): Adjust
+ instantiate_template call.
+ * class.c (resolve_address_of_overloaded_function): Likewise.
+ * decl.c (build_enumerator): Set TREE_CONSTANT.
+ * pt.c (check_instantiated_args): New.
+ (push_inline_template_parms_recursive): Set TREE_CONSTANT,
+ TREE_READONLY.
+ (build_template_parm_index): Copy TREE_CONSTANT, TREE_READONLY.
+ (reduce_template_parm_level): Likewise.
+ (process_template_parm): Likewise.
+ (check_explicit_specialization): Adjust instantiate_template call.
+ (convert_template_argument): Don't check non-type argument here.
+ (lookup_template_class): Check them here.
+ (tsubst_friend_function): Adjust instantiate_template call.
+ (instantiate_template): Add tsubst_flags parameter, use it. Check
+ instantiated args.
+
+2003-03-21 Zack Weinberg <zack@codesourcery.com>
+
+ * decl.c: Update calls to shadow_warning.
+
+2003-03-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898
+ * error.c (dump_decl) [CONST_DECL]: Print '<enumerator>'.
+ (dump_expr) [CONSTRUCTOR]: Print default ctor as a function call.
+
+2003-03-20 Mark Mitchell <mark@codesourcery.com>
+
+ * cp/decl2.c (arg_assoc_class): Correct check for namespace-scope
+ friends.
+ * cp/pt.c (instantiate_class_template): Fix formatting.
+
+2003-03-14 Matt Austern <austern@apple.com>
+
+ * cp-tree.h (unemitted_tinfo_decls): Declaration of a new varray.
+ (unemitted_tinfo_decl_p): Remove.
+ (emit_tinfo_decl): Change declaration to remove unused parameter.
+ * decl2.c (finish_file): Change tinfo emission to loop through
+ unemitted_tinfo_decls array instead of looping through all decls.
+ * rtti.c (unemitted_tinfo_decl_p): Declare as static, remove
+ unused second parameter.
+ (init_rtti_processing): initialize unemitted_tinfo_decls varray.
+ (get_tinfo_decls): push new tinfo decl on unemitted_tinfo_decls.
+ (emit_tinfo_decl): remove unused second parameter, add assertion
+ that decl hasn't already been emitted.
+
+2003-03-19 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * dump.c (cp_dump_tree), cp-tree.h (cp_dump_tree): Change return
+ type from 'int' to 'bool'. Replace 0 and 1 with true and false in
+ return statements.
+
+2003-03-19 Jason Merrill <jason@redhat.com>
+
+ PR c++/8316, c++/9315, c++/10136
+ * call.c (print_z_candidate): Split out from...
+ (print_z_candidiates): ...here.
+ (joust): Use it.
+
+2003-03-17 Roger Sayle <roger@eyesopen.com>
+
+ PR c++/10031
+ * decl.c (duplicate_decls): Use the new type when prototyping
+ anticipated decls, even when the types match. This defines the
+ exception list for the built-in function.
+
+2003-03-17 Jason Merrill <jason@redhat.com>
+
+ PR c++/10091
+ * typeck.c (build_class_member_access_expr): Compare
+ TYPE_MAIN_VARIANTs.
+
+2003-03-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9639
+ * parser.c (cp_parser_declarator_id): Clear parser->scope.
+
+2003-03-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/9993
+ * decl.c (finish_function): Only allow the NRVO to use variables
+ declared at function scope.
+
+2003-03-17 Andreas Jaeger <aj@suse.de>
+
+ * Make-lang.in (cp/TAGS): Remove.
+
+2003-03-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9629
+ * cp-tree.h (struct language_function): Add in_base_initializer.
+ (in_base_initializer): define it.
+ (expand_member_init): Remove INIT param.
+ * init.c (expand_member_init): Remove INIT param, return the member.
+ (emit_mem_initializers): Set in_base_initializer.
+ * class.c (build_base_path): Check in_base_initializer.
+ * parser.c (cp_parser_mem_initializer): Set in_base_initializer.
+ * pt.c (tsubst_initializer_list): Likewise.
+
+2003-03-16 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * decl.c (binding_for_name): Fix initialization thinko.
+
+2003-03-15 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ Compile-time improvement: 2/n.
+ * cp-tree.h (struct cxx_binding): New datatype;
+ (struct lang_identifier): Use it.
+ (LOCAL_BINDING_P): Adjust definition.
+ (INHERITED_VALUE_BINDING_P): Likewise.
+ (BINDING_SCOPE): Likewise.
+ (BINDING_HAS_LEVEL_P): Likewise.
+ (BINDING_VALUE): Likewise.
+ (BINDING_TYPE): Likewise.
+ (IDENTIFIER_VALUE): Likewise.
+ (struct tree_binding): Remove.
+ (TS_CP_BINDING): Likewise.
+ ((union lang_tree_node): Remove field "binding".
+ (cxx_binding_clear): New macro.
+ (binding_for_name): Adjust return type.
+ (qualified_lookup_using_namespace): Adjust prototype.
+ (lookup_using_namespace): Adjust prototype.
+ (cxx_scope_find_binding_for_name): Declare.
+ * cp-tree.def: Remove CPLUS_BINDING definition.
+ * decl.c (push_binding): Adjust local variable type.
+ (add_binding): Likewise.
+ (push_class_binding): Likewise.
+ (pop_binding): Likewise.
+ (poplevel): Likewise.
+ (poplevel_class): Likewise.
+ (free_bindings): Adjust type.
+ (find_binding): Adjust return type, add a third parameter. Remove
+ non-useful assertion now that we use static typing.
+ (cxx_scope_find_binding_for_name): New function.
+ (binding_for_name): Use it. Adjust local variable type. Simplify.
+ (namespace_binding): Simplify.
+ (set_namespace_binding): Likewise.
+ (set_identifier_type_value_with_scope): Adjust local variable type.
+ (lookup_tag): Don't type-abuse of local variable 'old'.
+ (lookup_namespace_name): Likewise. Allocate binding on stack.
+ (select_decl): Adjust prototype.
+ (unqualified_namespace_lookup): Allocate binding on stack.
+ Don't type-abuse of local variable 'val'.
+ (lookup_name_real): Likewise.
+ (maybe_inject_for_scope_var): Adjust local variable type.
+ (cp_tree_node_structure): Remove CPLUS_BINDING case label.
+ (namespace_binding): Adjust logic, simplify.
+ (BINDING_LEVEL): Adjust definition.
+ (push_class_level_binding): Adjust local variable type.
+ (struct cxx_saved_binding): Adjust field 'binding' type.
+ * decl2.c (ambiguous_decl): Adjust prototype.
+ (lookup_using_namespace): Adjust local variable type.
+ (qualified_lookup_using_namespace): Catch type error and correct
+ ensueing logic error.
+ (do_nonmember_using_decl): Adjust local variable type. Allocate
+ temporary cxx_binding on stack.
+ (do_toplevel_using_decl): Adjust local variable type.
+ * ptree.c (cxx_print_cxx_binding): New function.
+ (cxx_print_identifier): Use it.
+ (cxx_print_xnode): Delete CPLUS_BINDING case label.
+
+2003-03-15 Roger Sayle <roger@eyesopen.com>
+
+ * tree.c (count_functions): Fix whitespace.
+
+2003-03-15 Neil Booth <neil@daikokuya.co.uk>
+
+ * Make-lang.in: Update.
+
+2003-03-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/6440
+ * pt.c (maybe_process_partial_specialization): Handle
+ member class template when enclosing class template is
+ explicit specialized.
+ (most_general_template): Stop looking when DECL is already
+ specialized.
+
+2003-03-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/9420
+ * search.c (lookup_conversions): Call complete_type here.
+ * call.c (implicit_conversion): Not here.
+
+2003-03-13 Mark Mitchell <mark@codesourcery.com>
+
+ * decl2.c (do_nonmember_using_decl): Correct handling of
+ simultaneous type/non-type bindings.
+
+ * call.c (initialize_reference): Remove bogus assertion.
+ * decl.c (build_ptrmemfunc_type): Revert change of 2003-03-09.
+
+2003-03-12 Andrew Lewycky <andrew@mxc.ca>
+
+ PR c++/7050
+ * expr.c (cxx_expand_expr): Return const0_rtx for throw
+ expressions.
+
+2003-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9474
+ * decl2.c (do_nonmember_using_decl): Do not call duplicate decls
+ to merge old and new declarations.
+
+2003-03-12 Alexandre Oliva <aoliva@redhat.com>
+
+ * g++.1: Remove.
+ * Make-lang.in (c++.generated-manpages): Build cp/g++.1.
+ (cp/g++.1): Build it from scratch in the build tree.
+ (c++.install-man): Depend on it. Install it from the build tree.
+ (c++.mostlyclean): Clean it.
+
+2003-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9474
+ * decl2.c (do_nonmember_using_decl): Do not call duplicate decls
+ to merge old and new declarations.
+
+ PR c++/9924
+ * decl2.c (do_nonmember_using_decl): Ignore anticipated builtins.
+
+2003-03-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/9820
+ * search.c (lookup_member): Fix handling of functions in a class
+ being defined.
+
+2003-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8700
+ * call.c (convert_class_to_reference): Adjust usage of
+ splice_viable.
+ (any_viable): Remove.
+ (splice_viable): Combine with any_viable.
+ (print_z_candidates): Avoid printing duplicates.
+ (build_user_type_conversion_1): Adjust usage of splice_viable.
+ (build_new_function_call): Likewise.
+ (build_operator_new_call): Likewise.
+ (build_object_call): Likewise.
+ (build_conditional_expr): Likewise.
+ (build_new_op): Likewise.
+ (build_new_method_call): Likewise.
+ (joust): Remove spurious comment.
+ * cp-tree.h (DECL_FRIENDLIST): Correct documentation.
+ * decl2.c (arg_assoc_class): Simplify.
+ * friend.c (add_friend): Likewise.
+
+2003-03-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/8660
+ * decl2.c (check_classfn): A member template only matches a
+ member template.
+
+2003-03-11 Neil Booth <neil@daikokuya.co.uk>
+
+ * Make-lang.in (CXX_C_OBJS): Update.
+ * lang-specs.h: Don't define __GNUG__ here.
+
+2003-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ * call.c (perform_overload_resolution): New function.
+ (build_new_function_call): Use it.
+ (build_operator_new_call): Likewise.
+ (add_candidates): Add explicit_targs and template_only parameters.
+ (build_new_op): Adjust accordingly.
+ * cp-tree.h (build_operator_new_call): New function.
+ (build_function_call_real): Remove.
+ (build_function_call_maybe): Likewise.
+ * init.c (build_new_1): Use build_operator_new_call.
+ * typeck.c (build_function_call_real): Rename to ...
+ (build_function_call): ... this.
+
+2003-03-10 Devang Patel <dpatel@apple.com>
+
+ PR c++/9394
+ * g++spec.c (lang_specific_driver): Use DEFAULT_WORD_SWTCH_TAKES_ARG.
+
+2003-03-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/9798
+ * decl.c (push_using_directive): Push before recursing.
+
+ PR c++/9868, c++/9524
+ * call.c (resolve_scoped_fn_name): Handle the case of a function
+ pointer member.
+
+ * decl2.c (build_offset_ref_call_from_tree): Only mess with 'this'
+ argument in the pointer-to-member case.
+
+2003-03-09 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9373
+ * cp-lang.c (cxx_get_alias_set): Use alias set zero for
+ pointers to member functions.
+
+ PR c++/8534
+ * decl.c (build_ptrmemfunc_type): Do not allow default arugments
+ in pointer-to-member-function types.
+
+2003-03-10 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * expr.c (cplus_expand_constant): Use C90 prototype style.
+ (cxx_expand_expr): Likewise.
+
+2003-03-09 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/9970
+ * decl.c (duplicate_decls): Only copy DECL_THUNKS for virtual
+ functions.
+
+2003-03-08 Geoffrey Keating <geoffk@apple.com>
+
+ * lang-specs.h (c++-header): Change .pch to .gch.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * cp-tree.h (cxx_init): Update prototype.
+ * lex.c (cxx_init): Similarly.
+
+2003-03-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9823
+ * cp-tree.h (begin_mem_initializers): Remove.
+ * parser.c (cp_parser_mem_initializer_list): Inline it here.
+ Do not call finish_mem_initializers if not in a constructor.
+ (cp_parser_class_head): Fix typo in error message.
+ * semantics.c (begin_mem_initializers): Remove.
+ * testsuite/g++.dg/parser/constructor1.C: New test.
+
+ PR c++/9809
+ * call.c (add_function_candidate): Skip builtin fuctions that have
+ not yet been declared.
+
+ PR c++/9982
+ * init.c (build_new_1): Correct logic for determining whether or
+ not to use an array cookie.
+
+ PR c++/9524
+ * parser.c (cp_parser_postfix_expression): Call
+ finish_non_static_data_member, even when processing_template_decl.
+
+ PR c++/9912
+ * cp-tree.h (is_ancestor): New function.
+ (handle_class_head): Change prototype.
+ * decl2.c (is_namespace_ancestor): Rename to ...
+ (namespace_anecestor): ... this.
+ (set_decl_namespace): Adjust accordingly.
+ (handle_class_head): Remove unncessary parameters.
+ * parser.c (cp_parser_class_head): Check that
+ nested-name-specifiers are used appropriately.
+
+2003-03-07 Mark Mitchell <mark@codesourcery.com>
+
+ * call.c (reference_binding): Remove REF_IS_VAR parameter.
+ (implicit_conversion): Adjust call to reference_binding.
+ (make_temporary_var_for_ref_to_type): Add TYPE parameter.
+ (initialize_reference): Adjust handling for references bound to
+ rvalues.
+ * cp-tree.h (make_temporary_var_for_ref_to_temp): Change
+ prototype.
+ (real_non_cast_lvalue_p): New method.
+ * cvt.c (build_up_reference): Adjust use of
+ make_temporary_var_for_ref_to_temp.
+ * tree.c (real_non_cast_lvalue_p): New method.
+
+2003-03-07 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * except.c (init_exception_processing): Use C90 prototype style.
+ (cp_protect_cleanup_actions): Likewise.
+ (prepare_eh_type): Likewise.
+ (build_eh_type_type): Likewise.
+ (build_exc_ptr): Likewise.
+ (do_begin_catch): Likewise.
+ (dtor_nothrow): Likewise.
+ (do_end_catch): Likewise.
+ (push_eh_cleanup): Likewise.
+ (decl_is_java_type): Likewise.
+ (choose_personality_routine): Likewise.
+ (initialize_handler_parm): Likewise.
+ (expand_start_catch_block): Likewise.
+ (expand_end_catch_block): Likewise.
+ (begin_eh_spec_block): Likewise.
+ (finish_eh_spec_block): Likewise.
+ (do_allocate_exception): Likewise.
+ (do_free_exception): Likewise.
+ (wrap_cleanups_r): Likewise.
+ (stabilize_throw_expr): Likewise.
+ (build_throw): Likewise.
+ (complete_ptr_ref_or_void_ptr_p): Likewise.
+ (is_admissible_throw_operand): Likewise.
+ (nothrow_libfn_p): Likewise.
+ (can_convert_eh): Likewise.
+ (check_handlers_1): Likewise.
+ (check_handlers): Likewise.
+
+2003-03-06 Mark Mitchell <mark@codesourcery.com>
+
+ * call.c (merge_conversion_sequences): New function.
+ (build_conv): Set ICS_USER_FLAG for USER_CONVs.
+ (convert_class_to_reference): Correct handling of second
+ standard conversion sequence in a user-defined conversion
+ sequence.
+ (build_user_type_conversion_1): Use merge_conversion_sequences.
+ * cp-tree.def: Add comments for CONV nodes.
+ * rtti.c (get_tinfo_decl): Use build_address/build_nop.
+
+2003-03-07 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * error.c (init_error): Use C90 prototype style.
+ (dump_scope): Likewise.
+ (dump_qualifiers): Likewise.
+ (dump_template_argument): Likewise.
+ (dump_template_argument_list): Likewise.
+ (dump_template_parameter): Likewise.
+ (dump_template_bindings): Likewise.
+ (dump_type): Likewise.
+ (dump_typename): Likewise.
+ (class_key_or_enum): Likewise.
+ (dump_aggr_type): Likewise.
+ (dump_type_prefix): Likewise.
+ (dump_type_suffix): Likewise.
+ (dump_global_iord): Likewise.
+ (dump_simple_decl): Likewise.
+ (dump_decl): Likewise.
+ (dump_template_decl): Likewise.
+ (dump_function_decl): Likewise.
+ (dump_parameters): Likewise.
+ (dump_exception_spec): Likewise.
+ (dump_function_name): Likewise.
+ (dump_template_parms): Likewise.
+ (dump_char): Likewise.
+ (dump_expr_list): Likewise.
+ (dump_expr): Likewise.
+ (dump_binary_op): Likewise.
+ (dump_unary_op): Likewise.
+ (type_as_string): Likewise.
+ (expr_as_string): Likewise.
+ (decl_as_string): Likewise.
+ (context_as_string): Likewise.
+ (lang_decl_name): Likewise.
+ (cp_file_of): Likewise.
+ (cp_line_of): Likewise.
+ (decl_to_string): Likewise.
+ (expr_to_string): Likewise.
+ (fndecl_to_string): Likewise.
+ (code_to_string): Likewise.
+ (language_to_string): Likewise.
+ (parm_to_string): Likewise.
+ (op_to_string): Likewise.
+ (type_to_string): Likewise.
+ (assop_to_string): Likewise.
+ (args_to_string): Likewise.
+ (cv_to_string): Likewise.
+ (cxx_print_error_function): Likewise.
+ (cp_diagnostic_starter): Likewise.
+ (cp_diagnostic_finalizer): Likewise.
+ (cp_print_error_function): Likewise.
+ (function_category): Likewise.
+ (print_instantiation_full_context): Likewise.
+ (print_instantiation_partial_context): Likewise.
+ (maybe_print_instantiation_context): Likewise.
+ (print_instantiation_context): Likewise.
+ (cp_printer): Likewise.
+ (print_integer): Likewise.
+ (print_non_consecutive_character): Likewise.
+ (locate_error): Likewise.
+
+2003-03-06 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9965
+ * call.c (reference_binding): Add ref_is_var parameter.
+ (implicit_conversion): Adjust call to reference_binding.
+ (initialize_reference): Likewise.
+
+ PR c++/9400
+ * decl.c (pushdecl): Don't check for shadowing of DECL_ARTIFICIAL
+ PARM_DECLs.
+
+ PR c++/9791
+ * class.c (get_basefndecls): Use lookup_fnfields_1.
+
+2003-03-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/9188
+ * parser.c (cp_parser_type_parameter): Remove redundant `expect'
+ in error message.
+ (cp_parser_single_declaration): Likewise.
+
+2003-03-05 Jason Merrill <jason@redhat.com>
+
+ PR c++/9440
+ * call.c (build_conditional_expr): Use convert rather than an
+ explicit NOP_EXPR.
+
+2003-03-02 Matt Austern <austern@apple.com>
+
+ * decl.c (cp_binding_level): Add static_decls varray member.
+ (add_decl_to_level): Add static/inline namespace scope
+ declarations to static_decls array.
+ (wrapup_global_for_namespace): Pass static_decls only, instead of
+ all decls, to wrapup_global_declarations/check_global_declarations.
+ (push_namespace): Initialize static_decls for ordinary namespaces.
+ (cxx_init_decl_processing): Initialize static_decls for global
+ namespace.
+
+2003-03-05 Mark Mitchell <mark@codesourcery.com>
+
+ * class.c (end_of_class): Correct thinko.
+
+2003-03-04 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * config-lang.in: Replace ${libstdcxx_version} by its value.
+
+2003-03-04 Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+ * cp-tree.h (cxx_saved_binding): Declare.
+ (struct saved_scope): Adjust type of field 'old_binding'.
+ * decl.c (cxx_saved_binding_make): New macro.
+ (struct cxx_saved_binding): Define.
+ (store_bindings): Adjust prototype. Use cxx_saved_binding to save
+ C++ bindings.
+ (maybe_push_to_top_level): Adjust local variable type.
+ (pop_from_top_level): Likewise.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * Make-lang.in (c++.tags): New target.
+
+2003-03-04 Neil Booth <neil@daikokuya.co.uk>
+
+ * Make-lang.in: Update.
+
+2003-03-03 Jason Merrill <jason@redhat.com>
+
+ * decl.c (finish_enum): Do set the type in a template. Simplify.
+ * pt.c (tsubst_enum, tsubst_copy): Revert last patch.
+
+2003-03-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9878
+ * call.c (convert_class_to_reference): Correct conversion
+ sequences.
+ (reference_binding): Add ref_bound_directly_to_rvalue_p parameter.
+ (implicit_conversion): Adjust call to reference_binding.
+ (add_candidate): Change type of candidates parameter.
+ (add_function_candidate): Likewise.
+ (add_conv_candidate): Likewise.
+ (build_builtin_candidate): Likewise.
+ (add_builtin_candidate): Likewise.
+ (add_builtin_candidates): Likewise.
+ (add_template_candidate_real): Likewise.
+ (add_template_candidate): Likewise.
+ (add_template_conv_candidate): Likewise.
+ (build_user_type_conversion_1): Adjust accordingly.
+ (build_object_call): Likewise.
+ (build_conditional_expr): Likewise.
+ (add_candidates): Likewise.
+ (build_new_op): Likewise.
+ (convert_like_real): Use USER_CONV_CAND. Use build_nop.
+ (build_new_method_call): Adjust calls to add_function_candidate.
+ (make_temporary_var_for_ref_to_temp): New function.
+ (initialize_reference): Add decl parameter.
+ * class.c (build_rtti_vtbl_entries): Use build_address and
+ build_nop.
+ * cp-tree.h (initialize_reference): Change prototype.
+ (make_temporary_var_for_ref_to_temp): New function.
+ (build_type_conversion): Change prototype.
+ (build_address): New function.
+ (build_nop): Likewise.
+ * cvt.c (cp_convert_to_pointer): Adjust call to
+ build_type_conversion. Avoid indicating redundant NOP_EXPRs.
+ Use build_nop.
+ (convert_to_pointer_force): Use build_nop.
+ (build_up_reference): Use make_temporary_var_for_ref_to_temp.
+ (convert_to_reference): Adjust call to build_type_conversion.
+ (ocp_convert): Likewise.
+ (build_type_conversion): Remove for_sure parameter.
+ * decl.c (grok_reference_init): Use initialize_reference.
+ * typeck.c (build_address): New function.
+ (build_nop): Likewise.
+ (build_unary_op): Use them.
+ (build_ptrmemfunc): Tidy slightly.
+ (convert_for_initialization): Adjust call to
+ initialize_reference.
+ * typeck2.c (store_init_value): Remove #if 0'd code.
+
+2003-03-03 Jason Merrill <jason@redhat.com>
+
+ * decl.c (start_function): Clear DECL_NUM_STMTS.
+
+ * class.c (get_vtable_decl): Use vtbl_type_node.
+ (build_primary_vtable): Check for it.
+
+2003-03-02 Aldy Hernandez <aldyh@redhat.com>
+
+ * decl.c (check_initializer): Check for vector_opaque_p.
+
+2003-03-02 Ashif Harji <asharji@uwaterloo.ca>
+
+ * lang-specs.h (default_compilers): Add -no-integrated-cpp flag to
+ invoke an external cpp during compilation.
+
2003-03-01 Gabriel Dos Reis <gdr@integrable-solutions.net>
* decl.c (duplicate_decls): Convert use of warning_with_decl() to
@@ -22,9 +847,9 @@
2003-02-28 Aldy Hernandez <aldyh@redhat.com>
- * parser.c (cp_parser_init_declarator): Revert opaque
- vector_opaque_p change.
- Do not include target.h.
+ * parser.c (cp_parser_init_declarator): Revert opaque
+ vector_opaque_p change.
+ Do not include target.h.
2003-02-28 Mark Mitchell <mark@codesourcery.com>
@@ -37,16 +862,16 @@
build_zero_init.
(build_new_1): Adjust call to build_default_init.
* typeck2.c (process_init_constructor): Adjust call to build_zero_init.
-
+
2003-02-26 Devang Patel <dpatel@apple.com>
- * decl.c (finish_enum): Merge two 'for' loops. Copy value node if required.
- Postpone enum setting for template decls.
- (build_enumerator): Delay copying value node until finish_enum (). Remove
- #if 0'ed code.
+ * decl.c (finish_enum): Merge two 'for' loops. Copy value node if
+ required. Postpone enum setting for template decls.
+ (build_enumerator): Delay copying value node until finish_enum
+ (). Remove #if 0'ed code.
* pt.c (tsubst_enum): Set TREE_TYPE and copy value node.
(tsubst_copy): Add check for enum type.
-
+
2003-02-25 Mark Mitchell <mark@codesourcery.com>
PR c++/9683
@@ -57,9 +882,9 @@
2003-02-24 Gabriel Dos Reis <gdr@integrable-solutions.net>
- * decl.c (add_binding): Time TV_NAME_LOOKUP.
- (push_class_binding): Likewise.
- (set_namespace_binding): Likewise.
+ * decl.c (add_binding): Time TV_NAME_LOOKUP.
+ (push_class_binding): Likewise.
+ (set_namespace_binding): Likewise.
2003-02-24 Mark Mitchell <mark@codesourcery.com>
@@ -89,7 +914,7 @@
* pt.c (instantiate_class_template): Don't try to instantiate
dependent types.
(resolve_typename_type): Use CLASSTYPE_PRIMARY_TEMPLATE.
-
+
2003-02-21 Mark Mitchell <mark@codesourcery.com>
PR c++/9749
@@ -98,7 +923,7 @@
2003-02-21 Nathan Sidwell <nathan@codesourcery.com>
- * search.c (bfs_walk_grow): Remove. Fold into ...
+ * search.c (grow_bfs_bases): Remove. Fold into ...
(bfs_walk): ... here, fix fencepost error. Fix merge lossage
in previous patch.
@@ -252,12 +1077,12 @@
trailing bit fields when computing CLASSTYPE_SIZE_UNIT.
2003-02-18 Matt Austern <austern@apple.com>
-
+
* cp/cp-lang.c: Change lang hooks so that final_write_globals does
nothing for C++.
* cp/decl.c (wrapup_globals_for_namespace): Remove special
handling of global namespace.
-
+
2003-02-18 Geoffrey Keating <geoffk@apple.com>
* cp-tree.h (rid_to_yy): Delete.
@@ -269,6 +1094,10 @@
PR c++/9623
* decl.c (reshape_init): Don't mess with initializer labels.
+ PR c++/9485
+ * parser.c (cp_parser_postfix_expression): Set idk properly for
+ object->scope::member.
+
2003-02-18 Ben Elliston <bje@redhat.com>
PR other/7350
@@ -324,8 +1153,8 @@
2003-02-14 Andrew Pinski <pinskia@physics.uc.edu>
- * decl.c: (define_label): Fix warning for return 0 instead of NULL.
-
+ * decl.c: (define_label): Fix warning for return 0 instead of NULL.
+
2003-02-13 Gabriel Dos Reis <gdr@integrable-solutions.net>
* decl.c: Include "timevar.h".
@@ -361,7 +1190,7 @@
(xref_tag): Likewise.
* Make-lang.in (cp/decl.o): Add dependency on timevar.h
-
+
2003-02-12 Phil Edwards <pme@gcc.gnu.org>
* decl.c (build_enumerator): Remove unneeded test.
@@ -525,10 +1354,10 @@
(build_modify_expr): Likewise.
(build_x_modify_expr): Likewise.
* typeck2.c (build_x_arrow): Likewise.
-
+
2003-01-29 Fariborz Jahanian <fjahanian@apple.com>
- * pt.c (last_pending_template) Declare GTY().
+ * pt.c (last_pending_template) Declare GTY().
2003-01-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
@@ -568,7 +1397,7 @@
PR c++/9415
* pt.c (tsubst_copy_and_build, CALL_EXPR): BASELINK exprs are
already scoped.
-
+
PR c++/8545
* parser.c (cp_parser_cast_expression): Be more tentative.
@@ -615,7 +1444,7 @@
(cp_parser_expression_statement): Use it.
(cp_parser_explicit_instantiation): Likewise.
* pt.c (do_decl_instantiation): Improve error handling logic.
-
+
2003-01-22 Mark Mitchell <mark@codesourcery.com>
PR c++/9384
@@ -649,11 +1478,11 @@
(dependent_template_arg_p): Likewise.
(dependent_template_id_p): Likewise.
(dependent_template_p): Likewise.
-
+
PR c++/9285
PR c++/9294
* parser.c (cp_parser_simple_declaration): Return quickly when
- encountering errors.
+ encountering errors.
2003-01-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
@@ -688,7 +1517,7 @@
PR c++/9272
* parser.c (cp_parser_constructor_declarator_p): Do not assume
that a constructor cannot be declared outside of its own class.
-
+
* parser.c (cp_parser_resolve_typename_type): If the scope cannot
be resolved, neither can the qualified name.
@@ -927,10 +1756,10 @@
2003-01-09 Nathanael Nerode <neroden@gcc.gnu.org>
- * cfns.gperf: ANSIfy function declarations.
- * cfns.h: Regenerate.
- * cp-tree.h: ANSIfy function declarations.
- * parser.c: ANSIfy function declarations & definitions.
+ * cfns.gperf: ANSIfy function declarations.
+ * cfns.h: Regenerate.
+ * cp-tree.h: ANSIfy function declarations.
+ * parser.c: ANSIfy function declarations & definitions.
* decl.c (bad_specifiers): Fix parameter order error I introduced.
@@ -941,7 +1770,7 @@
2003-01-09 Geoffrey Keating <geoffk@apple.com>
Merge to tag pch-merge-20030102:
-
+
* semantics.c (finish_translation_unit): Don't call finish_file.
* parser.c: Don't include ggc.h.
(cp_lexer_new_main): Rename from cp_lexer_new, only create main lexer,
@@ -959,7 +1788,7 @@
* Make-lang.in: Remove $(GGC_H) from all dependencies.
(CXX_TREE_H): Add $(GGC_H).
- * class.c: Don't include ggc.h.
+ * class.c: Don't include ggc.h.
(field_decl_cmp): Make parameters be 'const void *' to match qsort.
(method_name_cmp): Likewise.
(resort_data): New variable.
@@ -1097,7 +1926,7 @@
(register_local_specialization): Revert 2003-01-05 change.
(instantiate_decl): Use hash_local_specialization when creating
the local_specializations table.
-
+
* decl2.c (mark_used): Do not synthesize thunks.
* class.c (layout_class_type): Correct handling of unnamed
@@ -1151,7 +1980,7 @@
(register_local_specialization): Use htab_find_slot, not
htab_find_slot_with_hash.
(instantiate_decl): Pass a hash function to htab_create.
-
+
2003-01-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* parser.c (cp_parser_binary_expression,
@@ -1170,7 +1999,7 @@
2003-01-03 Nathanael Nerode <neroden@gcc.gnu.org>
- * cvt.c, decl.c, decl2.c: This is the C++ front end, not the C
+ * cvt.c, decl.c, decl2.c: This is the C++ front end, not the C
front end.
2003-01-03 Matt Austern <austern@apple.com>
@@ -1188,7 +2017,7 @@
(finish_file): iterate only through keyed_classes list when
deciding whether to emit vtables, remove class from its list after
we do the emission.
-
+
2003-01-02 Jason Merrill <jason@redhat.com>
* call.c (build_conditional_expr): Stabilize lvalues properly.
@@ -1230,7 +2059,7 @@
* parser.c (struct cp_parser): Add access_checks_lists field
(cp_parser_simple_declaration): Use.
- (cp_parser_init_declarator): Likewise.
+ (cp_parser_init_declarator): Likewise.
2003-01-02 Mark Mitchell <mark@codesourcery.com>
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index bff1322f6d4..cf98488526b 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -80,23 +80,25 @@ g++-cross$(exeext): g++$(exeext)
# Shared with C front end:
CXX_C_OBJS = attribs.o c-common.o c-format.o c-pragma.o c-semantics.o c-lex.o \
c-dump.o $(CXX_TARGET_OBJS) c-pretty-print.o c-opts.o c-pch.o \
- c-incpath.o cppdefault.o c-simplify.o tree-inline.o
+ c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
+ c-simplify.o tree-inline.o
# Language-specific object files.
CXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o \
cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o \
cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o \
cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o \
- cp/optimize.o cp/mangle.o cp/cp-lang.o cp/cp-simplify.o \
- tree-mudflap.o cp/cp-mudflap.o
+ cp/optimize.o cp/mangle.o cp/cp-lang.o cp/name-lookup.o \
+ cp/cp-simplify.o tree-mudflap.o cp/cp-mudflap.o
-# Use loose warnings for this front end.
-cp-warn =
+# Use strict warnings for this front end.
+cp-warn = $(STRICT_WARN) $(WERROR)
# These files need -Wno-error because the gimplifier triggers hard to fix
# warnings when converting to GIMPLE form. The warnings are triggered when
# the gimplifier re-writes va_start with a temporary instead of using the
# last named argument of the function.
cp/tree.o-warn = -Wno-error
+cp/typeck.o-warn = -Wno-error
cc1plus$(exeext): $(CXX_OBJS) $(CXX_C_OBJS) $(BACKEND) \
libcpp.a $(LIBDEPS)
@@ -110,7 +112,7 @@ $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf
gtype-cp.h gt-cp-call.h gt-cp-decl.h gt-cp-decl2.h : s-gtype; @true
gt-cp-pt.h gt-cp-repo.h gt-cp-parser.h : s-gtype; @true
-gt-cp-tree.h : s-gtype; @true
+gt-cp-tree.h gt-cp-mangle.h gt-cp-name-lookup.h: s-gtype; @true
#
# Build hooks:
@@ -120,9 +122,12 @@ c++.all.cross: g++-cross$(exeext)
c++.start.encap: g++$(exeext)
c++.rest.encap:
+c++.tags: force
+ cd $(srcdir)/cp; etags *.c *.h
+
c++.info:
c++.dvi:
-c++.generated-manpages:
+c++.generated-manpages: cp/g++.1
#
# Install hooks:
@@ -167,15 +172,23 @@ c++.install-common: installdirs
c++.install-info:
-c++.install-man: installdirs $(srcdir)/cp/g++.1
+cp/g++.1:
+ -rm -f $@
+ if [ "$(ALL)" = all.cross ]; then \
+ echo ".so man1/$(GCC_CROSS_NAME).1" > $@ ; \
+ else \
+ echo ".so man1/$(GCC_INSTALL_NAME).1" > $@ ; \
+ fi
+
+c++.install-man: installdirs cp/g++.1
-if [ -f cc1plus$(exeext) ] ; then \
if [ -f g++-cross$(exeext) ] ; then \
rm -f $(DESTDIR)$(man1dir)/$(GXX_CROSS_NAME)$(man1ext); \
- $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(DESTDIR)$(man1dir)/$(GXX_CROSS_NAME)$(man1ext); \
+ $(INSTALL_DATA) cp/g++.1 $(DESTDIR)$(man1dir)/$(GXX_CROSS_NAME)$(man1ext); \
chmod a-x $(DESTDIR)$(man1dir)/$(GXX_CROSS_NAME)$(man1ext); \
else \
rm -f $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext); \
- $(INSTALL_DATA) $(srcdir)/cp/g++.1 $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext); \
+ $(INSTALL_DATA) cp/g++.1 $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext); \
chmod a-x $(DESTDIR)$(man1dir)/$(GXX_INSTALL_NAME)$(man1ext); \
fi; \
else true; fi
@@ -193,6 +206,7 @@ c++.uninstall:
# We just have to delete files specific to us.
c++.mostlyclean:
+ -rm -f cp/g++.1
-rm -f cp/*$(objext)
-rm -f cp/*$(coverageexts)
c++.clean:
@@ -215,7 +229,8 @@ c++.stage4: stage4-start
#
# .o: .h dependencies.
-CXX_TREE_H = $(TREE_H) cp/cp-tree.h c-common.h cp/cp-tree.def c-common.def \
+CXX_TREE_H = $(TREE_H) cp/name-lookup.h cp/cp-tree.h c-common.h \
+ cp/cp-tree.def c-common.def \
function.h varray.h $(SYSTEM_H) coretypes.h $(CONFIG_H) $(TARGET_H) \
$(GGC_H) \
$(srcdir)/../include/hashtab.h $(srcdir)/../include/splay-tree.h
@@ -265,18 +280,13 @@ cp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) cp/lex.h except.h toplev.h
cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) tree-dump.h
cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h integrate.h insn-config.h \
input.h $(PARAMS_H) debug.h tree-inline.h
-cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h real.h
+cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h real.h gt-cp-mangle.h
+
cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) diagnostic.h gt-cp-parser.h output.h
cp/cp-simplify.o: cp/cp-simplify.c $(CXX_TREE_H) toplev.h c-common.h \
$(TM_H) coretypes.h
cp/cp-mudflap.o: cp/cp-mudflap.c $(CXX_TREE_H) toplev.h c-common.h \
$(TM_H) coretypes.h
-#
-# These exist for maintenance purposes.
-
-# Update the tags table.
-cp/TAGS: force
- cd $(srcdir)/cp ; \
- etags --no-globals -l c *.c *.h ../*.c ../*.h;
-.PHONY: cp/TAGS
+cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+ $(TM_H) $(CXX_TREE_H) timevar.h gt-cp-name-lookup.h
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index d60c460b3fc..ae16b2df7fe 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1,6 +1,6 @@
/* Functions related to invoking methods and overloaded functions.
- Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) and
modified by Brendan Kehoe (brendan@cygnus.com).
@@ -56,33 +56,34 @@ static void op_error (enum tree_code, enum tree_code, tree, tree,
static tree build_object_call (tree, tree);
static tree resolve_args (tree);
static struct z_candidate *build_user_type_conversion_1 (tree, tree, int);
+static void print_z_candidate (const char *msgid, struct z_candidate *,
+ void (*)(const char *, ...));
static void print_z_candidates (struct z_candidate *);
static tree build_this (tree);
-static struct z_candidate *splice_viable (struct z_candidate *);
-static bool any_viable (struct z_candidate *);
+static struct z_candidate *splice_viable (struct z_candidate *, bool, bool *);
static bool any_strictly_viable (struct z_candidate *);
static struct z_candidate *add_template_candidate
- (struct z_candidate *, tree, tree, tree, tree, tree,
+ (struct z_candidate **, tree, tree, tree, tree, tree,
tree, tree, int, unification_kind_t);
static struct z_candidate *add_template_candidate_real
- (struct z_candidate *, tree, tree, tree, tree, tree,
+ (struct z_candidate **, tree, tree, tree, tree, tree,
tree, tree, int, tree, unification_kind_t);
static struct z_candidate *add_template_conv_candidate
- (struct z_candidate *, tree, tree, tree, tree, tree, tree);
-static struct z_candidate *add_builtin_candidates
- (struct z_candidate *, enum tree_code, enum tree_code,
+ (struct z_candidate **, tree, tree, tree, tree, tree, tree);
+static void add_builtin_candidates
+ (struct z_candidate **, enum tree_code, enum tree_code,
tree, tree *, int);
-static struct z_candidate *add_builtin_candidate
- (struct z_candidate *, enum tree_code, enum tree_code,
+static void add_builtin_candidate
+ (struct z_candidate **, enum tree_code, enum tree_code,
tree, tree, tree, tree *, tree *, int);
static bool is_complete (tree);
-static struct z_candidate *build_builtin_candidate
- (struct z_candidate *, tree, tree, tree, tree *, tree *,
+static void build_builtin_candidate
+ (struct z_candidate **, tree, tree, tree, tree *, tree *,
int);
static struct z_candidate *add_conv_candidate
- (struct z_candidate *, tree, tree, tree, tree, tree);
+ (struct z_candidate **, tree, tree, tree, tree, tree);
static struct z_candidate *add_function_candidate
- (struct z_candidate *, tree, tree, tree, tree, tree, int);
+ (struct z_candidate **, tree, tree, tree, tree, tree, int);
static tree implicit_conversion (tree, tree, tree, int);
static tree standard_conversion (tree, tree, tree);
static tree reference_binding (tree, tree, tree, int);
@@ -92,7 +93,7 @@ static bool is_subseq (tree, tree);
static tree maybe_handle_ref_bind (tree *);
static void maybe_handle_implicit_object (tree *);
static struct z_candidate *add_candidate
- (struct z_candidate *, tree, tree, tree, tree, tree, int);
+ (struct z_candidate **, tree, tree, tree, tree, tree, int);
static tree source_type (tree);
static void add_warning (struct z_candidate *, struct z_candidate *);
static bool reference_related_p (tree, tree);
@@ -104,8 +105,9 @@ static tree conditional_conversion (tree, tree);
static char *name_as_c_string (tree, tree, bool *);
static tree call_builtin_trap (void);
static tree prep_operand (tree);
-static struct z_candidate *add_candidates (tree, tree, tree, tree,
- int, struct z_candidate *);
+static void add_candidates (tree, tree, tree, bool, tree, tree,
+ int, struct z_candidate **);
+static tree merge_conversion_sequences (tree, tree);
tree
build_vfield_ref (tree datum, tree type)
@@ -560,7 +562,12 @@ struct z_candidate GTY(()) {
tree fn;
/* The arguments to use when calling this function. */
tree args;
+ /* The implicit conversion sequences for each of the arguments to
+ FN. */
tree convs;
+ /* If FN is a user-defined conversion, the standard conversion
+ sequence from the type returned by FN to the desired destination
+ type. */
tree second_conv;
int viable;
/* If FN is a member function, the binfo indicating the path used to
@@ -667,7 +674,7 @@ build_conv (enum tree_code code, tree type, tree from)
break;
}
ICS_STD_RANK (t) = rank;
- ICS_USER_FLAG (t) = ICS_USER_FLAG (from);
+ ICS_USER_FLAG (t) = (code == USER_CONV || ICS_USER_FLAG (from));
ICS_BAD_FLAG (t) = ICS_BAD_FLAG (from);
return t;
}
@@ -949,8 +956,14 @@ convert_class_to_reference (tree t, tree s, tree expr)
tree conversions;
tree arglist;
tree conv;
+ tree reference_type;
struct z_candidate *candidates;
struct z_candidate *cand;
+ bool any_viable_p;
+
+ conversions = lookup_conversions (s);
+ if (!conversions)
+ return NULL_TREE;
/* [over.match.ref]
@@ -977,10 +990,10 @@ convert_class_to_reference (tree t, tree s, tree expr)
arglist = build_int_2 (0, 0);
TREE_TYPE (arglist) = build_pointer_type (s);
arglist = build_tree_list (NULL_TREE, arglist);
-
- for (conversions = lookup_conversions (s);
- conversions;
- conversions = TREE_CHAIN (conversions))
+
+ reference_type = build_reference_type (t);
+
+ while (conversions)
{
tree fns = TREE_VALUE (conversions);
@@ -988,52 +1001,66 @@ convert_class_to_reference (tree t, tree s, tree expr)
{
tree f = OVL_CURRENT (fns);
tree t2 = TREE_TYPE (TREE_TYPE (f));
- struct z_candidate *old_candidates = candidates;
+
+ cand = NULL;
/* If this is a template function, try to get an exact
match. */
if (TREE_CODE (f) == TEMPLATE_DECL)
{
- candidates
- = add_template_candidate (candidates,
- f, s,
- NULL_TREE,
- arglist,
- build_reference_type (t),
- TYPE_BINFO (s),
- TREE_PURPOSE (conversions),
- LOOKUP_NORMAL,
- DEDUCE_CONV);
+ cand = add_template_candidate (&candidates,
+ f, s,
+ NULL_TREE,
+ arglist,
+ reference_type,
+ TYPE_BINFO (s),
+ TREE_PURPOSE (conversions),
+ LOOKUP_NORMAL,
+ DEDUCE_CONV);
- if (candidates != old_candidates)
+ if (cand)
{
/* Now, see if the conversion function really returns
an lvalue of the appropriate type. From the
point of view of unification, simply returning an
rvalue of the right type is good enough. */
- f = candidates->fn;
+ f = cand->fn;
t2 = TREE_TYPE (TREE_TYPE (f));
if (TREE_CODE (t2) != REFERENCE_TYPE
|| !reference_compatible_p (t, TREE_TYPE (t2)))
- candidates = candidates->next;
+ {
+ candidates = candidates->next;
+ cand = NULL;
+ }
}
}
else if (TREE_CODE (t2) == REFERENCE_TYPE
&& reference_compatible_p (t, TREE_TYPE (t2)))
- candidates
- = add_function_candidate (candidates, f, s, arglist,
- TYPE_BINFO (s),
- TREE_PURPOSE (conversions),
- LOOKUP_NORMAL);
+ cand = add_function_candidate (&candidates, f, s, arglist,
+ TYPE_BINFO (s),
+ TREE_PURPOSE (conversions),
+ LOOKUP_NORMAL);
+
+ if (cand)
+ /* Build a standard conversion sequence indicating the
+ binding from the reference type returned by the
+ function to the desired REFERENCE_TYPE. */
+ cand->second_conv
+ = (direct_reference_binding
+ (reference_type,
+ build1 (IDENTITY_CONV,
+ TREE_TYPE (TREE_TYPE (TREE_TYPE (cand->fn))),
+ NULL_TREE)));
}
+ conversions = TREE_CHAIN (conversions);
}
+ candidates = splice_viable (candidates, pedantic, &any_viable_p);
/* If none of the conversion functions worked out, let our caller
know. */
- if (!any_viable (candidates))
+ if (!any_viable_p)
return NULL_TREE;
-
- candidates = splice_viable (candidates);
+
cand = tourney (candidates);
if (!cand)
return NULL_TREE;
@@ -1044,16 +1071,21 @@ convert_class_to_reference (tree t, tree s, tree expr)
build_this (expr),
TREE_CHAIN (cand->args));
- conv = build1 (IDENTITY_CONV, s, expr);
- conv = build_conv (USER_CONV, TREE_TYPE (TREE_TYPE (cand->fn)),
- conv);
+ /* Build a user-defined conversion sequence representing the
+ conversion. */
+ conv = build_conv (USER_CONV,
+ TREE_TYPE (TREE_TYPE (cand->fn)),
+ build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
TREE_OPERAND (conv, 1) = build_zc_wrapper (cand);
- ICS_USER_FLAG (conv) = 1;
+
+ /* Merge it with the standard conversion sequence from the
+ conversion function's return type to the desired type. */
+ cand->second_conv = merge_conversion_sequences (conv, cand->second_conv);
+
if (cand->viable == -1)
ICS_BAD_FLAG (conv) = 1;
- cand->second_conv = conv;
-
- return conv;
+
+ return cand->second_conv;
}
/* A reference of the indicated TYPE is being bound directly to the
@@ -1063,7 +1095,13 @@ convert_class_to_reference (tree t, tree s, tree expr)
static tree
direct_reference_binding (tree type, tree conv)
{
- tree t = TREE_TYPE (type);
+ tree t;
+
+ my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 20030306);
+ my_friendly_assert (TREE_CODE (TREE_TYPE (conv)) != REFERENCE_TYPE,
+ 20030306);
+
+ t = TREE_TYPE (type);
/* [over.ics.rank]
@@ -1178,7 +1216,7 @@ reference_binding (tree rto, tree rfrom, tree expr, int flags)
in the second case. */
conv = convert_class_to_reference (to, from, expr);
if (conv)
- return direct_reference_binding (rto, conv);
+ return conv;
}
/* From this point on, we conceptually need temporaries, even if we
@@ -1212,11 +1250,13 @@ reference_binding (tree rto, tree rfrom, tree expr, int flags)
-- The reference is bound to the object represented by the rvalue
or to a sub-object within that object.
- In this case, the implicit conversion sequence is supposed to be
- same as we would obtain by generating a temporary. Fortunately,
- if the types are reference compatible, then this is either an
- identity conversion or the derived-to-base conversion, just as
- for direct binding. */
+ -- ...
+
+ We use the first alternative. The implicit conversion sequence
+ is supposed to be same as we would obtain by generating a
+ temporary. Fortunately, if the types are reference compatible,
+ then this is either an identity conversion or the derived-to-base
+ conversion, just as for direct binding. */
if (CLASS_TYPE_P (from) && compatible_p)
{
conv = build1 (IDENTITY_CONV, from, expr);
@@ -1254,7 +1294,6 @@ static tree
implicit_conversion (tree to, tree from, tree expr, int flags)
{
tree conv;
- struct z_candidate *cand;
/* Resolve expressions like `A::p' that we thought might become
pointers-to-members. */
@@ -1268,11 +1307,6 @@ implicit_conversion (tree to, tree from, tree expr, int flags)
|| expr == error_mark_node)
return NULL_TREE;
- /* Make sure both the FROM and TO types are complete so that
- user-defined conversions are available. */
- complete_type (from);
- complete_type (to);
-
if (TREE_CODE (to) == REFERENCE_TYPE)
conv = reference_binding (to, from, expr, flags);
else
@@ -1286,6 +1320,8 @@ implicit_conversion (tree to, tree from, tree expr, int flags)
|| IS_AGGR_TYPE (to))
&& (flags & LOOKUP_NO_CONVERSION) == 0)
{
+ struct z_candidate *cand;
+
cand = build_user_type_conversion_1
(to, expr, LOOKUP_ONLYCONVERTING);
if (cand)
@@ -1304,7 +1340,7 @@ implicit_conversion (tree to, tree from, tree expr, int flags)
functions. */
static struct z_candidate *
-add_candidate (struct z_candidate *candidates,
+add_candidate (struct z_candidate **candidates,
tree fn, tree args, tree convs, tree access_path,
tree conversion_path, int viable)
{
@@ -1317,7 +1353,8 @@ add_candidate (struct z_candidate *candidates,
cand->access_path = access_path;
cand->conversion_path = conversion_path;
cand->viable = viable;
- cand->next = candidates;
+ cand->next = *candidates;
+ *candidates = cand;
return cand;
}
@@ -1330,7 +1367,7 @@ add_candidate (struct z_candidate *candidates,
comes from for purposes of overload resolution. */
static struct z_candidate *
-add_function_candidate (struct z_candidate *candidates,
+add_function_candidate (struct z_candidate **candidates,
tree fn, tree ctype, tree arglist,
tree access_path, tree conversion_path,
int flags)
@@ -1342,6 +1379,11 @@ add_function_candidate (struct z_candidate *candidates,
tree orig_arglist;
int viable = 1;
+ /* Built-in functions that haven't been declared don't really
+ exist. */
+ if (DECL_ANTICIPATED (fn))
+ return NULL;
+
/* The `this', `in_chrg' and VTT arguments to constructors are not
considered in overload resolution. */
if (DECL_CONSTRUCTOR_P (fn))
@@ -1465,7 +1507,7 @@ add_function_candidate (struct z_candidate *candidates,
instead of the function. */
static struct z_candidate *
-add_conv_candidate (struct z_candidate *candidates, tree fn, tree obj,
+add_conv_candidate (struct z_candidate **candidates, tree fn, tree obj,
tree arglist, tree access_path, tree conversion_path)
{
tree totype = TREE_TYPE (TREE_TYPE (fn));
@@ -1484,8 +1526,8 @@ add_conv_candidate (struct z_candidate *candidates, tree fn, tree obj,
flags = LOOKUP_NORMAL;
/* Don't bother looking up the same type twice. */
- if (candidates && candidates->fn == totype)
- return candidates;
+ if (*candidates && (*candidates)->fn == totype)
+ return NULL;
for (i = 0; i < len; ++i)
{
@@ -1530,8 +1572,8 @@ add_conv_candidate (struct z_candidate *candidates, tree fn, tree obj,
conversion_path, viable);
}
-static struct z_candidate *
-build_builtin_candidate (struct z_candidate *candidates, tree fnname,
+static void
+build_builtin_candidate (struct z_candidate **candidates, tree fnname,
tree type1, tree type2, tree *args, tree *argtypes,
int flags)
{
@@ -1573,10 +1615,10 @@ build_builtin_candidate (struct z_candidate *candidates, tree fnname,
viable = 0;
}
- return add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs,
- /*access_path=*/NULL_TREE,
- /*conversion_path=*/NULL_TREE,
- viable);
+ add_candidate (candidates, fnname, /*args=*/NULL_TREE, convs,
+ /*access_path=*/NULL_TREE,
+ /*conversion_path=*/NULL_TREE,
+ viable);
}
static bool
@@ -1612,8 +1654,8 @@ promoted_arithmetic_type_p (tree type)
of which TYPE1 and TYPE2 are, we add both candidates
CODE (TYPE1, TYPE1) and CODE (TYPE2, TYPE2). */
-static struct z_candidate *
-add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
+static void
+add_builtin_candidate (struct z_candidate **candidates, enum tree_code code,
enum tree_code code2, tree fnname, tree type1,
tree type2, tree *args, tree *argtypes, int flags)
{
@@ -1652,7 +1694,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case POSTDECREMENT_EXPR:
case PREDECREMENT_EXPR:
if (TREE_CODE (type1) == BOOLEAN_TYPE)
- return candidates;
+ return;
case POSTINCREMENT_EXPR:
case PREINCREMENT_EXPR:
if (ARITHMETIC_TYPE_P (type1) || TYPE_PTROB_P (type1))
@@ -1660,7 +1702,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
type1 = build_reference_type (type1);
break;
}
- return candidates;
+ return;
/* 7 For every cv-qualified or cv-unqualified complete object type T, there
exist candidate operator functions of the form
@@ -1676,7 +1718,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
&& (TYPE_PTROB_P (type1)
|| TREE_CODE (TREE_TYPE (type1)) == FUNCTION_TYPE))
break;
- return candidates;
+ return;
/* 9 For every type T, there exist candidate operator functions of the form
T* operator+(T*);
@@ -1693,7 +1735,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case NEGATE_EXPR:
if (ARITHMETIC_TYPE_P (type1))
break;
- return candidates;
+ return;
/* 11For every promoted integral type T, there exist candidate operator
functions of the form
@@ -1702,7 +1744,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case BIT_NOT_EXPR:
if (INTEGRAL_TYPE_P (type1))
break;
- return candidates;
+ return;
/* 12For every quintuple C1, C2, T, CV1, CV2), where C2 is a class type, C1
is the same type as C2 or is a derived class of C2, T is a complete
@@ -1725,7 +1767,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
|| is_complete (TREE_TYPE (TREE_TYPE (type2)))))
break;
}
- return candidates;
+ return;
/* 13For every pair of promoted arithmetic types L and R, there exist can-
didate operator functions of the form
@@ -1781,7 +1823,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case TRUNC_DIV_EXPR:
if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
break;
- return candidates;
+ return;
case EQ_EXPR:
case NE_EXPR:
@@ -1823,7 +1865,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
type1 = type2;
break;
}
- return candidates;
+ return;
case PLUS_EXPR:
if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
@@ -1839,7 +1881,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
type2 = ptrdiff_type_node;
break;
}
- return candidates;
+ return;
/* 18For every pair of promoted integral types L and R, there exist candi-
date operator functions of the form
@@ -1860,7 +1902,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case RSHIFT_EXPR:
if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
break;
- return candidates;
+ return;
/* 19For every triple L, VQ, R), where L is an arithmetic or enumeration
type, VQ is either volatile or empty, and R is a promoted arithmetic
@@ -1912,7 +1954,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case TRUNC_DIV_EXPR:
if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
break;
- return candidates;
+ return;
case TRUNC_MOD_EXPR:
case BIT_AND_EXPR:
@@ -1922,7 +1964,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
case RSHIFT_EXPR:
if (INTEGRAL_TYPE_P (type1) && INTEGRAL_TYPE_P (type2))
break;
- return candidates;
+ return;
case NOP_EXPR:
if (ARITHMETIC_TYPE_P (type1) && ARITHMETIC_TYPE_P (type2))
@@ -1937,7 +1979,7 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
type2 = type1;
break;
}
- return candidates;
+ return;
default:
abort ();
@@ -1972,16 +2014,13 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
|| !(TREE_CODE (type2) == POINTER_TYPE
|| TYPE_PTRMEM_P (type2)
|| TYPE_PTRMEMFUNC_P (type2)))
- return candidates;
+ return;
/* We don't check that the two types are the same; the logic
below will actually create two candidates; one in which both
parameter types are TYPE1, and one in which both parameter
types are TYPE2. */
- break;
-
- /* These arguments do not make for a valid overloaded operator. */
- return candidates;
+ break;
default:
abort ();
@@ -1998,13 +2037,14 @@ add_builtin_candidate (struct z_candidate *candidates, enum tree_code code,
|| IS_AGGR_TYPE (type1)
|| TREE_CODE (type1) == ENUMERAL_TYPE))
{
- candidates = build_builtin_candidate
+ build_builtin_candidate
(candidates, fnname, type1, type1, args, argtypes, flags);
- return build_builtin_candidate
+ build_builtin_candidate
(candidates, fnname, type2, type2, args, argtypes, flags);
+ return;
}
- return build_builtin_candidate
+ build_builtin_candidate
(candidates, fnname, type1, type2, args, argtypes, flags);
}
@@ -2031,8 +2071,8 @@ type_decays_to (tree type)
other cases which the standard disallows. add_builtin_candidate will
filter out the invalid set. */
-static struct z_candidate *
-add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
+static void
+add_builtin_candidates (struct z_candidate **candidates, enum tree_code code,
enum tree_code code2, tree fnname, tree *args,
int flags)
{
@@ -2074,20 +2114,22 @@ add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
bool operator||(bool, bool); */
case TRUTH_NOT_EXPR:
- return build_builtin_candidate
+ build_builtin_candidate
(candidates, fnname, boolean_type_node,
NULL_TREE, args, argtypes, flags);
+ return;
case TRUTH_ORIF_EXPR:
case TRUTH_ANDIF_EXPR:
- return build_builtin_candidate
+ build_builtin_candidate
(candidates, fnname, boolean_type_node,
boolean_type_node, args, argtypes, flags);
+ return;
case ADDR_EXPR:
case COMPOUND_EXPR:
case COMPONENT_REF:
- return candidates;
+ return;
case COND_EXPR:
case EQ_EXPR:
@@ -2114,7 +2156,7 @@ add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
tree convs;
if (i == 0 && code == MODIFY_EXPR && code2 == NOP_EXPR)
- return candidates;
+ return;
convs = lookup_conversions (argtypes[i]);
@@ -2129,7 +2171,7 @@ add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
}
else if (! convs)
- return candidates;
+ return;
for (; convs; convs = TREE_CHAIN (convs))
{
@@ -2181,16 +2223,16 @@ add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
{
if (types[1])
for (type = types[1]; type; type = TREE_CHAIN (type))
- candidates = add_builtin_candidate
+ add_builtin_candidate
(candidates, code, code2, fnname, TREE_VALUE (types[0]),
TREE_VALUE (type), args, argtypes, flags);
else
- candidates = add_builtin_candidate
+ add_builtin_candidate
(candidates, code, code2, fnname, TREE_VALUE (types[0]),
NULL_TREE, args, argtypes, flags);
}
- return candidates;
+ return;
}
@@ -2205,7 +2247,7 @@ add_builtin_candidates (struct z_candidate *candidates, enum tree_code code,
add_conv_candidate. */
static struct z_candidate*
-add_template_candidate_real (struct z_candidate *candidates, tree tmpl,
+add_template_candidate_real (struct z_candidate **candidates, tree tmpl,
tree ctype, tree explicit_targs, tree arglist,
tree return_type, tree access_path,
tree conversion_path, int flags, tree obj,
@@ -2233,11 +2275,11 @@ add_template_candidate_real (struct z_candidate *candidates, tree tmpl,
return_type, strict, -1);
if (i != 0)
- return candidates;
+ return NULL;
- fn = instantiate_template (tmpl, targs);
+ fn = instantiate_template (tmpl, targs, tf_none);
if (fn == error_mark_node)
- return candidates;
+ return NULL;
/* In [class.copy]:
@@ -2266,7 +2308,7 @@ add_template_candidate_real (struct z_candidate *candidates, tree tmpl,
tree arg_types = FUNCTION_FIRST_USER_PARMTYPE (fn);
if (arg_types && same_type_p (TYPE_MAIN_VARIANT (TREE_VALUE (arg_types)),
ctype))
- return candidates;
+ return NULL;
}
if (obj != NULL_TREE)
@@ -2304,7 +2346,7 @@ add_template_candidate_real (struct z_candidate *candidates, tree tmpl,
static struct z_candidate *
-add_template_candidate (struct z_candidate *candidates, tree tmpl, tree ctype,
+add_template_candidate (struct z_candidate **candidates, tree tmpl, tree ctype,
tree explicit_targs, tree arglist, tree return_type,
tree access_path, tree conversion_path, int flags,
unification_kind_t strict)
@@ -2318,7 +2360,7 @@ add_template_candidate (struct z_candidate *candidates, tree tmpl, tree ctype,
static struct z_candidate *
-add_template_conv_candidate (struct z_candidate *candidates, tree tmpl,
+add_template_conv_candidate (struct z_candidate **candidates, tree tmpl,
tree obj, tree arglist, tree return_type,
tree access_path, tree conversion_path)
{
@@ -2328,14 +2370,42 @@ add_template_conv_candidate (struct z_candidate *candidates, tree tmpl,
conversion_path, 0, obj, DEDUCE_CONV);
}
+/* The CANDS are the set of candidates that were considered for
+ overload resolution. Return the set of viable candidates. If none
+ of the candidates were viable, set *ANY_VIABLE_P to true. STRICT_P
+ is true if a candidate should be considered viable only if it is
+ strictly viable. */
-static bool
-any_viable (struct z_candidate *cands)
+static struct z_candidate*
+splice_viable (struct z_candidate *cands,
+ bool strict_p,
+ bool *any_viable_p)
{
- for (; cands; cands = cands->next)
- if (pedantic ? cands->viable == 1 : cands->viable)
- return true;
- return false;
+ struct z_candidate *viable;
+ struct z_candidate **last_viable;
+ struct z_candidate **cand;
+
+ viable = NULL;
+ last_viable = &viable;
+ *any_viable_p = false;
+
+ cand = &cands;
+ while (*cand)
+ {
+ struct z_candidate *c = *cand;
+ if (strict_p ? c->viable == 1 : c->viable)
+ {
+ *last_viable = c;
+ *cand = c->next;
+ c->next = NULL;
+ last_viable = &c->next;
+ *any_viable_p = true;
+ }
+ else
+ cand = &c->next;
+ }
+
+ return viable ? viable : cands;
}
static bool
@@ -2347,59 +2417,122 @@ any_strictly_viable (struct z_candidate *cands)
return false;
}
-static struct z_candidate *
-splice_viable (struct z_candidate *cands)
+static tree
+build_this (tree obj)
{
- struct z_candidate **p = &cands;
+ /* Fix this to work on non-lvalues. */
+ return build_unary_op (ADDR_EXPR, obj, 0);
+}
- for (; *p; )
- {
- if (pedantic ? (*p)->viable == 1 : (*p)->viable)
- p = &((*p)->next);
- else
- *p = (*p)->next;
- }
+/* Returns true iff functions are equivalent. Equivalent functions are
+ not '==' only if one is a function-local extern function or if
+ both are extern "C". */
- return cands;
+static inline int
+equal_functions (tree fn1, tree fn2)
+{
+ if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
+ || DECL_EXTERN_C_FUNCTION_P (fn1))
+ return decls_match (fn1, fn2);
+ return fn1 == fn2;
}
-static tree
-build_this (tree obj)
+/* Print information about one overload candidate CANDIDATE. STR is the
+ text to print before the candidate itself and ERRFN is the routine
+ (i.e. error, warning or pedwarn) used to do the printing. */
+
+static void
+print_z_candidate (const char *msgid, struct z_candidate *candidate,
+ void (*errfn)(const char *, ...))
{
- /* Fix this to work on non-lvalues. */
- return build_unary_op (ADDR_EXPR, obj, 0);
+ if (TREE_CODE (candidate->fn) == IDENTIFIER_NODE)
+ {
+ if (TREE_VEC_LENGTH (candidate->convs) == 3)
+ errfn ("%s %D(%T, %T, %T) <built-in>", msgid, candidate->fn,
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)),
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 2)));
+ else if (TREE_VEC_LENGTH (candidate->convs) == 2)
+ errfn ("%s %D(%T, %T) <built-in>", msgid, candidate->fn,
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)),
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 1)));
+ else
+ errfn ("%s %D(%T) <built-in>", msgid, candidate->fn,
+ TREE_TYPE (TREE_VEC_ELT (candidate->convs, 0)));
+ }
+ else if (TYPE_P (candidate->fn))
+ errfn ("%s %T <conversion>", msgid, candidate->fn);
+ else
+ errfn ("%H%s %+#D%s", TREE_LOCUS (candidate->fn), msgid,
+ candidate->fn, candidate->viable == -1 ? " <near match>" : "");
}
static void
print_z_candidates (struct z_candidate *candidates)
{
- const char *str = "candidates are:";
- for (; candidates; candidates = candidates->next)
- {
- if (TREE_CODE (candidates->fn) == IDENTIFIER_NODE)
+ const char *str;
+ struct z_candidate *cand1;
+ struct z_candidate **cand2;
+
+ /* There may be duplicates in the set of candidates. We put off
+ checking this condition as long as possible, since we have no way
+ to eliminate duplicates from a set of functions in less than n^2
+ time. Now we are about to emit an error message, so it is more
+ permissible to go slowly. */
+ for (cand1 = candidates; cand1; cand1 = cand1->next)
+ {
+ tree fn = cand1->fn;
+ /* Skip builtin candidates and conversion functions. */
+ if (TREE_CODE (fn) != FUNCTION_DECL)
+ continue;
+ cand2 = &cand1->next;
+ while (*cand2)
{
- if (TREE_VEC_LENGTH (candidates->convs) == 3)
- error ("%s %D(%T, %T, %T) <built-in>", str, candidates->fn,
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)),
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 2)));
- else if (TREE_VEC_LENGTH (candidates->convs) == 2)
- error ("%s %D(%T, %T) <built-in>", str, candidates->fn,
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)),
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 1)));
+ if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL
+ && equal_functions (fn, (*cand2)->fn))
+ *cand2 = (*cand2)->next;
else
- error ("%s %D(%T) <built-in>", str, candidates->fn,
- TREE_TYPE (TREE_VEC_ELT (candidates->convs, 0)));
+ cand2 = &(*cand2)->next;
}
- else if (TYPE_P (candidates->fn))
- error ("%s %T <conversion>", str, candidates->fn);
- else
- cp_error_at ("%s %+#D%s", str, candidates->fn,
- candidates->viable == -1 ? " <near match>" : "");
+ }
+
+ str = "candidates are:";
+ for (; candidates; candidates = candidates->next)
+ {
+ print_z_candidate (str, candidates, error);
str = " ";
}
}
+/* USER_SEQ is a user-defined conversion sequence, beginning with a
+ USER_CONV. STD_SEQ is the standard conversion sequence applied to
+ the result of the conversion function to convert it to the final
+ desired type. Merge the the two sequences into a single sequence,
+ and return the merged sequence. */
+
+static tree
+merge_conversion_sequences (tree user_seq, tree std_seq)
+{
+ tree *t;
+
+ my_friendly_assert (TREE_CODE (user_seq) == USER_CONV,
+ 20030306);
+
+ /* Find the end of the second conversion sequence. */
+ t = &(std_seq);
+ while (TREE_CODE (*t) != IDENTITY_CONV)
+ t = &TREE_OPERAND (*t, 0);
+
+ /* Replace the identity conversion with the user conversion
+ sequence. */
+ *t = user_seq;
+
+ /* The entire sequence is a user-conversion sequence. */
+ ICS_USER_FLAG (std_seq) = 1;
+
+ return std_seq;
+}
+
/* Returns the best overload candidate to perform the requested
conversion. This function is used for three the overloading situations
described in [over.match.copy], [over.match.conv], and [over.match.ref].
@@ -2411,8 +2544,9 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags)
{
struct z_candidate *candidates, *cand;
tree fromtype = TREE_TYPE (expr);
- tree ctors = NULL_TREE, convs = NULL_TREE, *p;
+ tree ctors = NULL_TREE, convs = NULL_TREE;
tree args = NULL_TREE;
+ bool any_viable_p;
/* We represent conversion within a hierarchy using RVALUE_CONV and
BASE_CONV, as specified by [over.best.ics]; these become plain
@@ -2454,21 +2588,20 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags)
continue;
if (TREE_CODE (ctor) == TEMPLATE_DECL)
- candidates =
- add_template_candidate (candidates, ctor, totype,
- NULL_TREE, args, NULL_TREE,
- TYPE_BINFO (totype),
- TYPE_BINFO (totype),
- flags,
- DEDUCE_CALL);
+ cand = add_template_candidate (&candidates, ctor, totype,
+ NULL_TREE, args, NULL_TREE,
+ TYPE_BINFO (totype),
+ TYPE_BINFO (totype),
+ flags,
+ DEDUCE_CALL);
else
- candidates = add_function_candidate (candidates, ctor, totype,
- args, TYPE_BINFO (totype),
- TYPE_BINFO (totype),
- flags);
+ cand = add_function_candidate (&candidates, ctor, totype,
+ args, TYPE_BINFO (totype),
+ TYPE_BINFO (totype),
+ flags);
- if (candidates)
- candidates->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
+ if (cand)
+ cand->second_conv = build1 (IDENTITY_CONV, totype, NULL_TREE);
}
if (convs)
@@ -2490,7 +2623,6 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags)
for (fns = TREE_VALUE (convs); fns; fns = OVL_NEXT (fns))
{
tree fn = OVL_CURRENT (fns);
- struct z_candidate *old_candidates = candidates;
/* [over.match.funcs] For conversion functions, the function
is considered to be a member of the class of the implicit
@@ -2500,41 +2632,41 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags)
So we pass fromtype as CTYPE to add_*_candidate. */
if (TREE_CODE (fn) == TEMPLATE_DECL)
- candidates =
- add_template_candidate (candidates, fn, fromtype, NULL_TREE,
- args, totype, TYPE_BINFO (fromtype),
- conversion_path,
- flags,
- DEDUCE_CONV);
+ cand = add_template_candidate (&candidates, fn, fromtype,
+ NULL_TREE,
+ args, totype,
+ TYPE_BINFO (fromtype),
+ conversion_path,
+ flags,
+ DEDUCE_CONV);
else
- candidates = add_function_candidate (candidates, fn, fromtype,
- args,
- TYPE_BINFO (fromtype),
- conversion_path,
- flags);
+ cand = add_function_candidate (&candidates, fn, fromtype,
+ args,
+ TYPE_BINFO (fromtype),
+ conversion_path,
+ flags);
- if (candidates != old_candidates)
+ if (cand)
{
- tree ics = implicit_conversion
- (totype, TREE_TYPE (TREE_TYPE (candidates->fn)),
- 0, convflags);
+ tree ics = implicit_conversion (totype,
+ TREE_TYPE (TREE_TYPE (cand->fn)),
+ 0, convflags);
- candidates->second_conv = ics;
+ cand->second_conv = ics;
if (ics == NULL_TREE)
- candidates->viable = 0;
+ cand->viable = 0;
else if (candidates->viable == 1 && ICS_BAD_FLAG (ics))
- candidates->viable = -1;
+ cand->viable = -1;
}
}
}
- if (! any_viable (candidates))
+ candidates = splice_viable (candidates, pedantic, &any_viable_p);
+ if (!any_viable_p)
return 0;
- candidates = splice_viable (candidates);
cand = tourney (candidates);
-
if (cand == 0)
{
if (flags & LOOKUP_COMPLAIN)
@@ -2556,18 +2688,20 @@ build_user_type_conversion_1 (tree totype, tree expr, int flags)
return cand;
}
- for (p = &(cand->second_conv); TREE_CODE (*p) != IDENTITY_CONV; )
- p = &(TREE_OPERAND (*p, 0));
-
- *p = build
+ /* Build the user conversion sequence. */
+ convs = build_conv
(USER_CONV,
(DECL_CONSTRUCTOR_P (cand->fn)
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
- expr, build_zc_wrapper (cand));
-
- ICS_USER_FLAG (cand->second_conv) = ICS_USER_FLAG (*p) = 1;
+ build1 (IDENTITY_CONV, TREE_TYPE (expr), expr));
+ TREE_OPERAND (convs, 1) = build_zc_wrapper (cand);
+
+ /* Combine it with the second conversion sequence. */
+ cand->second_conv = merge_conversion_sequences (convs,
+ cand->second_conv);
+
if (cand->viable == -1)
- ICS_BAD_FLAG (cand->second_conv) = ICS_BAD_FLAG (*p) = 1;
+ ICS_BAD_FLAG (cand->second_conv) = 1;
return cand;
}
@@ -2627,6 +2761,10 @@ resolve_scoped_fn_name (tree scope, tree name)
if (fn && current_class_type)
fn = (adjust_result_of_qualified_name_lookup
(fn, scope, current_class_type));
+
+ /* It might be the name of a function pointer member. */
+ if (fn && TREE_CODE (fn) == FIELD_DECL)
+ fn = resolve_offset_ref (build_offset_ref (scope, fn));
}
if (!fn)
@@ -2675,16 +2813,31 @@ resolve_args (tree args)
return args;
}
-/* Return an expression for a call to FN (a namespace-scope function,
- or a static member function) with the ARGS. */
-
-tree
-build_new_function_call (tree fn, tree args)
+/* Perform overload resolution on FN, which is called with the ARGS.
+
+ Return the candidate function selected by overload resolution, or
+ NULL if the event that overload resolution failed. In the case
+ that overload resolution fails, *CANDIDATES will be the set of
+ candidates considered, and ANY_VIABLE_P will be set to true or
+ false to indicate whether or not any of the candidates were
+ viable.
+
+ The ARGS should already have gone through RESOLVE_ARGS before this
+ function is called. */
+
+static struct z_candidate *
+perform_overload_resolution (tree fn,
+ tree args,
+ struct z_candidate **candidates,
+ bool *any_viable_p)
{
- struct z_candidate *candidates = 0, *cand;
+ struct z_candidate *cand;
tree explicit_targs = NULL_TREE;
int template_only = 0;
+ *candidates = NULL;
+ *any_viable_p = true;
+
/* Check FN and ARGS. */
my_friendly_assert (TREE_CODE (fn) == FUNCTION_DECL
|| TREE_CODE (fn) == TEMPLATE_DECL
@@ -2701,63 +2854,142 @@ build_new_function_call (tree fn, tree args)
template_only = 1;
}
- if (really_overloaded_fn (fn)
- || TREE_CODE (fn) == TEMPLATE_DECL)
- {
- tree t1;
+ /* Add the various candidate functions. */
+ add_candidates (fn, args, explicit_targs, template_only,
+ /*conversion_path=*/NULL_TREE,
+ /*access_path=*/NULL_TREE,
+ LOOKUP_NORMAL,
+ candidates);
- args = resolve_args (args);
+ *candidates = splice_viable (*candidates, pedantic, any_viable_p);
+ if (!*any_viable_p)
+ return NULL;
- if (args == error_mark_node)
- return error_mark_node;
+ cand = tourney (*candidates);
+ return cand;
+}
- for (t1 = fn; t1; t1 = OVL_NEXT (t1))
- {
- tree t = OVL_CURRENT (t1);
-
- my_friendly_assert (!DECL_FUNCTION_MEMBER_P (t), 20020913);
-
- if (TREE_CODE (t) == TEMPLATE_DECL)
- candidates = add_template_candidate
- (candidates, t, NULL_TREE, explicit_targs, args,
- NULL_TREE, /*access_path=*/NULL_TREE,
- /*conversion_path=*/NULL_TREE,
- LOOKUP_NORMAL, DEDUCE_CALL);
- else if (! template_only)
- candidates = add_function_candidate
- (candidates, t, NULL_TREE, args,
- /*access_path=*/NULL_TREE,
- /*conversion_path=*/NULL_TREE, LOOKUP_NORMAL);
- }
+/* Return an expression for a call to FN (a namespace-scope function,
+ or a static member function) with the ARGS. */
+
+tree
+build_new_function_call (tree fn, tree args)
+{
+ struct z_candidate *candidates, *cand;
+ bool any_viable_p;
- if (! any_viable (candidates))
- {
- if (candidates && ! candidates->next)
- return build_function_call (candidates->fn, args);
- error ("no matching function for call to `%D(%A)'",
- DECL_NAME (OVL_CURRENT (fn)), args);
- if (candidates)
- print_z_candidates (candidates);
- return error_mark_node;
- }
- candidates = splice_viable (candidates);
- cand = tourney (candidates);
+ args = resolve_args (args);
+ if (args == error_mark_node)
+ return error_mark_node;
- if (cand == 0)
- {
- error ("call of overloaded `%D(%A)' is ambiguous",
- DECL_NAME (OVL_FUNCTION (fn)), args);
- print_z_candidates (candidates);
- return error_mark_node;
- }
+ cand = perform_overload_resolution (fn, args, &candidates, &any_viable_p);
- return build_over_call (cand, LOOKUP_NORMAL);
+ if (!cand)
+ {
+ if (!any_viable_p && candidates && ! candidates->next)
+ return build_function_call (candidates->fn, args);
+ if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
+ fn = TREE_OPERAND (fn, 0);
+ if (!any_viable_p)
+ error ("no matching function for call to `%D(%A)'",
+ DECL_NAME (OVL_CURRENT (fn)), args);
+ else
+ error ("call of overloaded `%D(%A)' is ambiguous",
+ DECL_NAME (OVL_CURRENT (fn)), args);
+ if (candidates)
+ print_z_candidates (candidates);
+ return error_mark_node;
}
- /* This is not really overloaded. */
- fn = OVL_CURRENT (fn);
+ return build_over_call (cand, LOOKUP_NORMAL);
+}
+
+/* Build a call to a global operator new. FNNAME is the name of the
+ operator (either "operator new" or "operator new[]") and ARGS are
+ the arguments provided. *SIZE points to the total number of bytes
+ required by the allocation, and is updated if that is changed here.
+ *COOKIE_SIZE is non-NULL if a cookie should be used. If this
+ function determins that no cookie should be used, after all,
+ *COOKIE_SIZE is set to NULL_TREE. */
+
+tree
+build_operator_new_call (tree fnname, tree args, tree *size, tree *cookie_size)
+{
+ tree fns;
+ struct z_candidate *candidates;
+ struct z_candidate *cand;
+ bool any_viable_p;
+
+ args = tree_cons (NULL_TREE, *size, args);
+ args = resolve_args (args);
+ if (args == error_mark_node)
+ return args;
+
+ fns = lookup_function_nonclass (fnname, args);
+
+ /* Figure out what function is being called. */
+ cand = perform_overload_resolution (fns, args, &candidates, &any_viable_p);
+
+ /* If no suitable function could be found, issue an error message
+ and give up. */
+ if (!cand)
+ {
+ if (!any_viable_p)
+ error ("no matching function for call to `%D(%A)'",
+ DECL_NAME (OVL_CURRENT (fns)), args);
+ else
+ error ("call of overlopaded `%D(%A)' is ambiguous",
+ DECL_NAME (OVL_CURRENT (fns)), args);
+ if (candidates)
+ print_z_candidates (candidates);
+ return error_mark_node;
+ }
- return build_function_call (fn, args);
+ /* If a cookie is required, add some extra space. Whether
+ or not a cookie is required cannot be determined until
+ after we know which function was called. */
+ if (*cookie_size)
+ {
+ bool use_cookie = true;
+ if (!abi_version_at_least (2))
+ {
+ tree placement = TREE_CHAIN (args);
+ /* In G++ 3.2, the check was implemented incorrectly; it
+ looked at the placement expression, rather than the
+ type of the function. */
+ if (placement && !TREE_CHAIN (placement)
+ && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
+ ptr_type_node))
+ use_cookie = false;
+ }
+ else
+ {
+ tree arg_types;
+
+ arg_types = TYPE_ARG_TYPES (TREE_TYPE (cand->fn));
+ /* Skip the size_t parameter. */
+ arg_types = TREE_CHAIN (arg_types);
+ /* Check the remaining parameters (if any). */
+ if (arg_types
+ && TREE_CHAIN (arg_types) == void_list_node
+ && same_type_p (TREE_VALUE (arg_types),
+ ptr_type_node))
+ use_cookie = false;
+ }
+ /* If we need a cookie, adjust the number of bytes allocated. */
+ if (use_cookie)
+ {
+ /* Update the total size. */
+ *size = size_binop (PLUS_EXPR, *size, *cookie_size);
+ /* Update the argument list to reflect the adjusted size. */
+ TREE_VALUE (args) = *size;
+ }
+ else
+ *cookie_size = NULL_TREE;
+ }
+
+ /* Build the CALL_EXPR. */
+ return build_over_call (cand, LOOKUP_NORMAL);
}
static tree
@@ -2766,6 +2998,7 @@ build_object_call (tree obj, tree args)
struct z_candidate *candidates = 0, *cand;
tree fns, convs, mem_args = NULL_TREE;
tree type = TREE_TYPE (obj);
+ bool any_viable_p;
if (TYPE_PTRMEMFUNC_P (type))
{
@@ -2793,15 +3026,14 @@ build_object_call (tree obj, tree args)
{
tree fn = OVL_CURRENT (fns);
if (TREE_CODE (fn) == TEMPLATE_DECL)
- candidates
- = add_template_candidate (candidates, fn, base, NULL_TREE,
- mem_args, NULL_TREE,
- TYPE_BINFO (type),
- TYPE_BINFO (type),
- LOOKUP_NORMAL, DEDUCE_CALL);
+ add_template_candidate (&candidates, fn, base, NULL_TREE,
+ mem_args, NULL_TREE,
+ TYPE_BINFO (type),
+ TYPE_BINFO (type),
+ LOOKUP_NORMAL, DEDUCE_CALL);
else
- candidates = add_function_candidate
- (candidates, fn, base, mem_args, TYPE_BINFO (type),
+ add_function_candidate
+ (&candidates, fn, base, mem_args, TYPE_BINFO (type),
TYPE_BINFO (type), LOOKUP_NORMAL);
}
}
@@ -2824,29 +3056,26 @@ build_object_call (tree obj, tree args)
{
tree fn = OVL_CURRENT (fns);
if (TREE_CODE (fn) == TEMPLATE_DECL)
- {
- candidates = (add_template_conv_candidate
- (candidates, fn, obj, args, totype,
- /*access_path=*/NULL_TREE,
- /*conversion_path=*/NULL_TREE));
- }
+ add_template_conv_candidate
+ (&candidates, fn, obj, args, totype,
+ /*access_path=*/NULL_TREE,
+ /*conversion_path=*/NULL_TREE);
else
- candidates = add_conv_candidate (candidates, fn, obj, args,
- /*conversion_path=*/NULL_TREE,
- /*access_path=*/NULL_TREE);
+ add_conv_candidate (&candidates, fn, obj, args,
+ /*conversion_path=*/NULL_TREE,
+ /*access_path=*/NULL_TREE);
}
}
- if (! any_viable (candidates))
+ candidates = splice_viable (candidates, pedantic, &any_viable_p);
+ if (!any_viable_p)
{
error ("no match for call to `(%T) (%A)'", TREE_TYPE (obj), args);
print_z_candidates (candidates);
return error_mark_node;
}
- candidates = splice_viable (candidates);
cand = tourney (candidates);
-
if (cand == 0)
{
error ("call of `(%T) (%A)' is ambiguous", TREE_TYPE (obj), args);
@@ -3088,13 +3317,9 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
arg2 = convert_from_reference (arg2);
/* That may not quite have done the trick. If the two types
are cv-qualified variants of one another, we will have
- just used an IDENTITY_CONV. (There's no conversion from
- an lvalue of one class type to an lvalue of another type,
- even a cv-qualified variant, and we don't want to lose
- lvalue-ness here.) So, we manually add a NOP_EXPR here
- if necessary. */
+ just used an IDENTITY_CONV. */
if (!same_type_p (TREE_TYPE (arg2), arg3_type))
- arg2 = build1 (NOP_EXPR, arg3_type, arg2);
+ arg2 = convert (arg3_type, arg2);
arg2_type = TREE_TYPE (arg2);
}
else if (conv3 && !ICS_BAD_FLAG (conv3))
@@ -3102,7 +3327,7 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
arg3 = convert_like (conv3, arg3);
arg3 = convert_from_reference (arg3);
if (!same_type_p (TREE_TYPE (arg3), arg2_type))
- arg3 = build1 (NOP_EXPR, arg2_type, arg3);
+ arg3 = convert (arg2_type, arg3);
arg3_type = TREE_TYPE (arg3);
}
}
@@ -3131,6 +3356,7 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
{
tree args[3];
tree conv;
+ bool any_viable_p;
/* Rearrange the arguments so that add_builtin_candidate only has
to know about two args. In build_builtin_candidates, the
@@ -3138,24 +3364,24 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
args[0] = arg2;
args[1] = arg3;
args[2] = arg1;
- candidates = add_builtin_candidates (candidates,
- COND_EXPR,
- NOP_EXPR,
- ansi_opname (COND_EXPR),
- args,
- LOOKUP_NORMAL);
+ add_builtin_candidates (&candidates,
+ COND_EXPR,
+ NOP_EXPR,
+ ansi_opname (COND_EXPR),
+ args,
+ LOOKUP_NORMAL);
/* [expr.cond]
If the overload resolution fails, the program is
ill-formed. */
- if (!any_viable (candidates))
+ candidates = splice_viable (candidates, pedantic, &any_viable_p);
+ if (!any_viable_p)
{
op_error (COND_EXPR, NOP_EXPR, arg1, arg2, arg3, "no match");
print_z_candidates (candidates);
return error_mark_node;
}
- candidates = splice_viable (candidates);
cand = tourney (candidates);
if (!cand)
{
@@ -3191,18 +3417,10 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
We use ocp_convert rather than build_user_type_conversion because the
latter returns NULL_TREE on failure, while the former gives an error. */
- if (IS_AGGR_TYPE (TREE_TYPE (arg2)))
- arg2 = ocp_convert (TREE_TYPE (arg2), arg2,
- CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
- else
- arg2 = decay_conversion (arg2);
+ arg2 = force_rvalue (arg2);
arg2_type = TREE_TYPE (arg2);
- if (IS_AGGR_TYPE (TREE_TYPE (arg3)))
- arg3 = ocp_convert (TREE_TYPE (arg3), arg3,
- CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
- else
- arg3 = decay_conversion (arg3);
+ arg3 = force_rvalue (arg3);
arg3_type = TREE_TYPE (arg3);
if (arg2 == error_mark_node || arg3 == error_mark_node)
@@ -3323,14 +3541,17 @@ prep_operand (tree operand)
/* Add each of the viable functions in FNS (a FUNCTION_DECL or
OVERLOAD) to the CANDIDATES, returning an updated list of
CANDIDATES. The ARGS are the arguments provided to the call,
- without any implicit object parameter. CONVERSION_PATH,
+ without any implicit object parameter. The EXPLICIT_TARGS are
+ explicit template arguments provided. TEMPLATE_ONLY is true if
+ only template fucntions should be considered. CONVERSION_PATH,
ACCESS_PATH, and FLAGS are as for add_function_candidate. */
-static struct z_candidate *
-add_candidates (tree fns, tree args,
+static void
+add_candidates (tree fns, tree args,
+ tree explicit_targs, bool template_only,
tree conversion_path, tree access_path,
int flags,
- struct z_candidate *candidates)
+ struct z_candidate **candidates)
{
tree ctype;
tree non_static_args;
@@ -3346,7 +3567,7 @@ add_candidates (tree fns, tree args,
fn = OVL_CURRENT (fns);
/* Figure out which set of arguments to use. */
- if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
+ if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
{
/* If this function is a non-static member, prepend the implicit
object parameter. */
@@ -3361,28 +3582,26 @@ add_candidates (tree fns, tree args,
fn_args = args;
if (TREE_CODE (fn) == TEMPLATE_DECL)
- candidates = add_template_candidate (candidates,
- fn,
- ctype,
- NULL_TREE,
- fn_args,
- NULL_TREE,
- access_path,
- conversion_path,
- flags,
- DEDUCE_CALL);
- else
- candidates = add_function_candidate (candidates,
- fn,
- ctype,
- fn_args,
- access_path,
- conversion_path,
- flags);
+ add_template_candidate (candidates,
+ fn,
+ ctype,
+ explicit_targs,
+ fn_args,
+ NULL_TREE,
+ access_path,
+ conversion_path,
+ flags,
+ DEDUCE_CALL);
+ else if (!template_only)
+ add_function_candidate (candidates,
+ fn,
+ ctype,
+ fn_args,
+ access_path,
+ conversion_path,
+ flags);
fns = OVL_NEXT (fns);
}
-
- return candidates;
}
tree
@@ -3393,7 +3612,8 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
tree args[3];
enum tree_code code2 = NOP_EXPR;
tree conv;
- bool viable_candidates;
+ bool strict_p;
+ bool any_viable_p;
if (error_operand_p (arg1)
|| error_operand_p (arg2)
@@ -3455,9 +3675,9 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
/* Add namespace-scope operators to the list of functions to
consider. */
- candidates = add_candidates (lookup_function_nonclass (fnname, arglist),
- arglist, NULL_TREE, NULL_TREE,
- flags, candidates);
+ add_candidates (lookup_function_nonclass (fnname, arglist),
+ arglist, NULL_TREE, false, NULL_TREE, NULL_TREE,
+ flags, &candidates);
/* Add class-member operators to the candidate set. */
if (CLASS_TYPE_P (TREE_TYPE (arg1)))
{
@@ -3467,10 +3687,11 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
if (fns == error_mark_node)
return fns;
if (fns)
- candidates = add_candidates (BASELINK_FUNCTIONS (fns), arglist,
- BASELINK_BINFO (fns),
- TYPE_BINFO (TREE_TYPE (arg1)),
- flags, candidates);
+ add_candidates (BASELINK_FUNCTIONS (fns), arglist,
+ NULL_TREE, false,
+ BASELINK_BINFO (fns),
+ TYPE_BINFO (TREE_TYPE (arg1)),
+ flags, &candidates);
}
/* Rearrange the arguments for ?: so that add_builtin_candidate only has
@@ -3490,8 +3711,7 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
args[2] = NULL_TREE;
}
- candidates = add_builtin_candidates
- (candidates, code, code2, fnname, args, flags);
+ add_builtin_candidates (&candidates, code, code2, fnname, args, flags);
switch (code)
{
@@ -3503,15 +3723,16 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
operators. The built-in candidate set for COMPONENT_REF
would be empty too, but since there are no such built-in
operators, we accept non-strict matches for them. */
- viable_candidates = any_strictly_viable (candidates);
+ strict_p = true;
break;
default:
- viable_candidates = any_viable (candidates);
+ strict_p = pedantic;
break;
}
- if (! viable_candidates)
+ candidates = splice_viable (candidates, strict_p, &any_viable_p);
+ if (!any_viable_p)
{
switch (code)
{
@@ -3545,9 +3766,8 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3)
}
return error_mark_node;
}
- candidates = splice_viable (candidates);
- cand = tourney (candidates);
+ cand = tourney (candidates);
if (cand == 0)
{
if (flags & LOOKUP_COMPLAIN)
@@ -3898,8 +4118,7 @@ convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
{
case USER_CONV:
{
- struct z_candidate *cand
- = WRAPPER_ZC (TREE_OPERAND (convs, 1));
+ struct z_candidate *cand = USER_CONV_CAND (convs);
tree convfn = cand->fn;
tree args;
@@ -4054,9 +4273,7 @@ convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner)
expr = cp_convert (build_pointer_type (TREE_TYPE (ref_type)),
expr);
/* Convert the pointer to the desired reference type. */
- expr = build1 (NOP_EXPR, ref_type, expr);
-
- return expr;
+ return build_nop (ref_type, expr);
}
case LVALUE_CONV:
@@ -4716,6 +4933,7 @@ build_new_method_call (tree instance, tree fns, tree args,
tree fn;
tree class_type;
int template_only = 0;
+ bool any_viable_p;
my_friendly_assert (instance != NULL_TREE, 20020729);
@@ -4792,7 +5010,7 @@ build_new_method_call (tree instance, tree fns, tree args,
{
tree type = build_pointer_type (basetype);
if (!same_type_p (type, TREE_TYPE (instance_ptr)))
- instance_ptr = build1 (NOP_EXPR, type, instance_ptr);
+ instance_ptr = build_nop (type, instance_ptr);
}
class_type = (conversion_path ? BINFO_TYPE (conversion_path) : NULL_TREE);
@@ -4814,28 +5032,26 @@ build_new_method_call (tree instance, tree fns, tree args,
this_arglist = args;
if (TREE_CODE (t) == TEMPLATE_DECL)
- {
- /* A member template. */
- candidates =
- add_template_candidate (candidates, t,
- class_type,
- explicit_targs,
- this_arglist, optype,
- access_binfo,
- conversion_path,
- flags,
- DEDUCE_CALL);
- }
+ /* A member template. */
+ add_template_candidate (&candidates, t,
+ class_type,
+ explicit_targs,
+ this_arglist, optype,
+ access_binfo,
+ conversion_path,
+ flags,
+ DEDUCE_CALL);
else if (! template_only)
- candidates = add_function_candidate (candidates, t,
- class_type,
- this_arglist,
- access_binfo,
- conversion_path,
- flags);
+ add_function_candidate (&candidates, t,
+ class_type,
+ this_arglist,
+ access_binfo,
+ conversion_path,
+ flags);
}
- if (! any_viable (candidates))
+ candidates = splice_viable (candidates, pedantic, &any_viable_p);
+ if (!any_viable_p)
{
/* XXX will LOOKUP_SPECULATIVELY be needed when this is done? */
if (flags & LOOKUP_SPECULATIVELY)
@@ -4857,9 +5073,8 @@ build_new_method_call (tree instance, tree fns, tree args,
print_z_candidates (candidates);
return error_mark_node;
}
- candidates = splice_viable (candidates);
- cand = tourney (candidates);
+ cand = tourney (candidates);
if (cand == 0)
{
char *pretty_name;
@@ -5389,19 +5604,6 @@ add_warning (struct z_candidate *winner, struct z_candidate *loser)
winner->warnings);
}
-/* Returns true iff functions are equivalent. Equivalent functions are
- not '==' only if one is a function-local extern function or if
- both are extern "C". */
-
-static inline int
-equal_functions (tree fn1, tree fn2)
-{
- if (DECL_LOCAL_FUNCTION_P (fn1) || DECL_LOCAL_FUNCTION_P (fn2)
- || DECL_EXTERN_C_FUNCTION_P (fn1))
- return decls_match (fn1, fn2);
- return fn1 == fn2;
-}
-
/* Compare two candidates for overloading as described in
[over.match.best]. Return values:
@@ -5582,7 +5784,6 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
TREE_VEC_LENGTH (cand1->convs)
- (DECL_NONSTATIC_MEMBER_FUNCTION_P (cand1->fn)
- DECL_CONSTRUCTOR_P (cand1->fn)));
- /* HERE */
if (winner)
return winner;
}
@@ -5639,7 +5840,7 @@ joust (struct z_candidate *cand1, struct z_candidate *cand2, bool warn)
if (DECL_P (cand1->fn) && DECL_P (cand2->fn)
&& equal_functions (cand1->fn, cand2->fn))
return 1;
-
+
tweak:
/* Extension: If the worst conversion for one candidate is worse than the
@@ -5664,9 +5865,12 @@ tweak:
{
if (warn)
{
- pedwarn ("choosing `%D' over `%D'", w->fn, l->fn);
- pedwarn (
-" because worst conversion for the former is better than worst conversion for the latter");
+ print_z_candidate ("ISO C++ says that ", w, pedwarn);
+ /* Translators note: This message is a continuation of the
+ previous one, aligned on the right. */
+ print_z_candidate (" and ", l, pedwarn);
+ pedwarn ("are ambiguous even though the worst conversion \
+for the former is better than the worst conversion for the latter");
}
else
add_warning (w, l);
@@ -5782,15 +5986,59 @@ perform_implicit_conversion (tree type, tree expr)
return convert_like (conv, expr);
}
+/* DECL is a VAR_DECL whose type is a REFERENCE_TYPE. The reference
+ is being bound to a temporary. Create and return a new VAR_DECL
+ with the indicated TYPE; this variable will store the value to
+ which the reference is bound. */
+
+tree
+make_temporary_var_for_ref_to_temp (tree decl, tree type)
+{
+ tree var;
+
+ /* Create the variable. */
+ var = build_decl (VAR_DECL, NULL_TREE, type);
+ DECL_ARTIFICIAL (var) = 1;
+ TREE_USED (var) = 1;
+
+ /* Register the variable. */
+ if (TREE_STATIC (decl))
+ {
+ /* Namespace-scope or local static; give it a mangled name. */
+ tree name;
+
+ TREE_STATIC (var) = 1;
+ name = mangle_ref_init_variable (decl);
+ DECL_NAME (var) = name;
+ SET_DECL_ASSEMBLER_NAME (var, name);
+ var = pushdecl_top_level (var);
+ }
+ else
+ {
+ /* Create a new cleanup level if necessary. */
+ maybe_push_cleanup_level (type);
+ /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */
+ DECL_CONTEXT (var) = current_function_decl;
+ }
+
+ return var;
+}
+
/* Convert EXPR to the indicated reference TYPE, in a way suitable for
- initializing a variable of that TYPE. Return the converted
- expression. */
+ initializing a variable of that TYPE. If DECL is non-NULL, it is
+ the VAR_DECL being initialized with the EXPR. (In that case, the
+ type of DECL will be TYPE.)
+
+ Return the converted expression. */
tree
-initialize_reference (tree type, tree expr)
+initialize_reference (tree type, tree expr, tree decl)
{
tree conv;
+ if (type == error_mark_node || error_operand_p (expr))
+ return error_mark_node;
+
conv = reference_binding (type, TREE_TYPE (expr), expr, LOOKUP_NORMAL);
if (!conv || ICS_BAD_FLAG (conv))
{
@@ -5798,6 +6046,80 @@ initialize_reference (tree type, tree expr)
return error_mark_node;
}
+ /* If DECL is non-NULL, then this special rule applies:
+
+ [class.temporary]
+
+ The temporary to which the reference is bound or the temporary
+ that is the complete object to which the reference is bound
+ persists for the lifetime of the reference.
+
+ The temporaries created during the evaluation of the expression
+ initializing the reference, except the temporary to which the
+ reference is bound, are destroyed at the end of the
+ full-expression in which they are created.
+
+ In that case, we store the converted expression into a new
+ VAR_DECL in a new scope.
+
+ However, we want to be careful not to create temporaries when
+ they are not required. For example, given:
+
+ struct B {};
+ struct D : public B {};
+ D f();
+ const B& b = f();
+
+ there is no need to copy the return value from "f"; we can just
+ extend its lifetime. Similarly, given:
+
+ struct S {};
+ struct T { operator S(); };
+ T t;
+ const S& s = t;
+
+ we can extend the lifetime of the returnn value of the conversion
+ operator. */
+ my_friendly_assert (TREE_CODE (conv) == REF_BIND, 20030302);
+ if (decl)
+ {
+ tree var;
+ tree base_conv_type;
+
+ /* Skip over the REF_BIND. */
+ conv = TREE_OPERAND (conv, 0);
+ /* If the next conversion is a BASE_CONV, skip that too -- but
+ remember that the conversion was required. */
+ if (TREE_CODE (conv) == BASE_CONV && !NEED_TEMPORARY_P (conv))
+ {
+ base_conv_type = TREE_TYPE (conv);
+ conv = TREE_OPERAND (conv, 0);
+ }
+ else
+ base_conv_type = NULL_TREE;
+ /* Perform the remainder of the conversion. */
+ expr = convert_like (conv, expr);
+ if (!real_non_cast_lvalue_p (expr))
+ {
+ /* Create the temporary variable. */
+ var = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (expr));
+ DECL_INITIAL (var) = expr;
+ cp_finish_decl (var, expr, NULL_TREE,
+ LOOKUP_ONLYCONVERTING|DIRECT_BIND);
+ /* Use its address to initialize the reference variable. */
+ expr = build_address (var);
+ }
+ else
+ /* Take the address of EXPR. */
+ expr = build_unary_op (ADDR_EXPR, expr, 0);
+ /* If a BASE_CONV was required, perform it now. */
+ if (base_conv_type)
+ expr = (perform_implicit_conversion
+ (build_pointer_type (base_conv_type), expr));
+ return build_nop (type, expr);
+ }
+
+ /* Perform the conversion. */
return convert_like (conv, expr);
}
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index fa79d482e47..bbf0b2caf7c 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -302,8 +302,25 @@ build_base_path (enum tree_code code,
/* Going via virtual base V_BINFO. We need the static offset
from V_BINFO to BINFO, and the dynamic offset from D_BINFO to
V_BINFO. That offset is an entry in D_BINFO's vtable. */
- tree v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
- TREE_TYPE (TREE_TYPE (expr)));
+ tree v_offset;
+
+ if (fixed_type_p < 0 && in_base_initializer)
+ {
+ /* In a base member initializer, we cannot rely on
+ the vtable being set up. We have to use the vtt_parm. */
+ tree derived = BINFO_INHERITANCE_CHAIN (v_binfo);
+
+ v_offset = build (PLUS_EXPR, TREE_TYPE (current_vtt_parm),
+ current_vtt_parm, BINFO_VPTR_INDEX (derived));
+
+ v_offset = build1 (INDIRECT_REF,
+ TREE_TYPE (TYPE_VFIELD (BINFO_TYPE (derived))),
+ v_offset);
+
+ }
+ else
+ v_offset = build_vfield_ref (build_indirect_ref (expr, NULL),
+ TREE_TYPE (TREE_TYPE (expr)));
v_offset = build (PLUS_EXPR, TREE_TYPE (v_offset),
v_offset, BINFO_VPTR_FIELD (v_binfo));
@@ -514,6 +531,11 @@ build_vtable (tree class_type, tree name, tree vtable_type)
DECL_VIRTUAL_P (decl) = 1;
DECL_ALIGN (decl) = TARGET_VTABLE_ENTRY_ALIGN;
+ /* At one time the vtable info was grabbed 2 words at a time. This
+ fails on sparc unless you have 8-byte alignment. (tiemann) */
+ DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
+ DECL_ALIGN (decl));
+
import_export_vtable (decl, class_type, 0);
return decl;
@@ -533,14 +555,9 @@ get_vtable_decl (tree type, int complete)
if (CLASSTYPE_VTABLES (type))
return CLASSTYPE_VTABLES (type);
- decl = build_vtable (type, get_vtable_name (type), void_type_node);
+ decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
CLASSTYPE_VTABLES (type) = decl;
- /* At one time the vtable info was grabbed 2 words at a time. This
- fails on sparc unless you have 8-byte alignment. (tiemann) */
- DECL_ALIGN (decl) = MAX (TYPE_ALIGN (double_type_node),
- DECL_ALIGN (decl));
-
if (complete)
{
DECL_EXTERNAL (decl) = 1;
@@ -594,8 +611,7 @@ build_primary_vtable (tree binfo, tree type)
}
else
{
- my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
- 20000118);
+ my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
virtuals = NULL_TREE;
}
@@ -2001,11 +2017,6 @@ layout_vtable_decl (tree binfo, int n)
TREE_TYPE (vtable) = atype;
DECL_SIZE (vtable) = DECL_SIZE_UNIT (vtable) = NULL_TREE;
layout_decl (vtable, 0);
-
- /* At one time the vtable info was grabbed 2 words at a time. This
- fails on SPARC unless you have 8-byte alignment. */
- DECL_ALIGN (vtable) = MAX (TYPE_ALIGN (double_type_node),
- DECL_ALIGN (vtable));
}
}
@@ -2525,11 +2536,19 @@ get_basefndecls (tree name, tree t)
int n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
int i;
- for (methods = TYPE_METHODS (t); methods; methods = TREE_CHAIN (methods))
- if (TREE_CODE (methods) == FUNCTION_DECL
- && DECL_VINDEX (methods) != NULL_TREE
- && DECL_NAME (methods) == name)
- base_fndecls = tree_cons (NULL_TREE, methods, base_fndecls);
+ /* Find virtual functions in T with the indicated NAME. */
+ i = lookup_fnfields_1 (t, name);
+ if (i != -1)
+ for (methods = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), i);
+ methods;
+ methods = OVL_NEXT (methods))
+ {
+ tree method = OVL_CURRENT (methods);
+
+ if (TREE_CODE (method) == FUNCTION_DECL
+ && DECL_VINDEX (method))
+ base_fndecls = tree_cons (NULL_TREE, method, base_fndecls);
+ }
if (base_fndecls)
return base_fndecls;
@@ -2928,31 +2947,12 @@ check_bitfield_decl (tree field)
{
DECL_SIZE (field) = convert (bitsizetype, w);
DECL_BIT_FIELD (field) = 1;
-
- if (integer_zerop (w)
- && ! (* targetm.ms_bitfield_layout_p) (DECL_FIELD_CONTEXT (field)))
- {
-#ifdef EMPTY_FIELD_BOUNDARY
- DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
- EMPTY_FIELD_BOUNDARY);
-#endif
-#ifdef PCC_BITFIELD_TYPE_MATTERS
- if (PCC_BITFIELD_TYPE_MATTERS)
- {
- DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
- TYPE_ALIGN (type));
- DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
- }
-#endif
- }
}
else
{
/* Non-bit-fields are aligned for their type. */
DECL_BIT_FIELD (field) = 0;
CLEAR_DECL_C_BIT_FIELD (field);
- DECL_ALIGN (field) = MAX (DECL_ALIGN (field), TYPE_ALIGN (type));
- DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (type);
}
}
@@ -3033,15 +3033,6 @@ check_field_decl (tree field,
cp_error_at ("multiple fields in union `%T' initialized");
*any_default_members = 1;
}
-
- /* Non-bit-fields are aligned for their type, except packed fields
- which require only BITS_PER_UNIT alignment. */
- DECL_ALIGN (field) = MAX (DECL_ALIGN (field),
- (DECL_PACKED (field)
- ? BITS_PER_UNIT
- : TYPE_ALIGN (TREE_TYPE (field))));
- if (! DECL_PACKED (field))
- DECL_USER_ALIGN (field) |= TYPE_USER_ALIGN (TREE_TYPE (field));
}
/* Check the data members (both static and non-static), class-scoped
@@ -4413,8 +4404,6 @@ create_vtable_ptr (tree t, tree* virtuals_p)
DECL_ARTIFICIAL (field) = 1;
DECL_FIELD_CONTEXT (field) = t;
DECL_FCONTEXT (field) = t;
- DECL_ALIGN (field) = TYPE_ALIGN (vtbl_ptr_type_node);
- DECL_USER_ALIGN (field) = TYPE_USER_ALIGN (vtbl_ptr_type_node);
TYPE_VFIELD (t) = field;
@@ -4648,7 +4637,7 @@ end_of_class (tree t, int include_virtuals_p)
if (!include_virtuals_p
&& TREE_VIA_VIRTUAL (binfo)
- && !BINFO_PRIMARY_P (binfo))
+ && BINFO_PRIMARY_BASE_OF (binfo) != TYPE_BINFO (t))
continue;
offset = end_of_base (binfo);
@@ -4935,8 +4924,6 @@ layout_class_type (tree t, tree *virtuals_p)
char_type_node);
DECL_BIT_FIELD (padding_field) = 1;
DECL_SIZE (padding_field) = padding;
- DECL_ALIGN (padding_field) = 1;
- DECL_USER_ALIGN (padding_field) = 0;
layout_nonempty_base_or_field (rli, padding_field,
NULL_TREE,
empty_base_offsets);
@@ -5965,7 +5952,8 @@ cannot resolve overloaded function `%D' based on conversion to type `%T'",
continue;
/* Instantiate the template. */
- instantiation = instantiate_template (fn, targs);
+ instantiation = instantiate_template (fn, targs,
+ complain ? tf_error : tf_none);
if (instantiation == error_mark_node)
/* Instantiation failed. */
continue;
@@ -7923,22 +7911,20 @@ build_rtti_vtbl_entries (tree binfo, vtbl_init_data* vid)
/* The second entry is the address of the typeinfo object. */
if (flag_rtti)
- decl = build_unary_op (ADDR_EXPR, get_tinfo_decl (t), 0);
+ decl = build_address (get_tinfo_decl (t));
else
decl = integer_zero_node;
/* Convert the declaration to a type that can be stored in the
vtable. */
- init = build1 (NOP_EXPR, vfunc_ptr_type_node, decl);
- TREE_CONSTANT (init) = 1;
+ init = build_nop (vfunc_ptr_type_node, decl);
*vid->last_init = build_tree_list (NULL_TREE, init);
vid->last_init = &TREE_CHAIN (*vid->last_init);
/* Add the offset-to-top entry. It comes earlier in the vtable that
the the typeinfo entry. Convert the offset to look like a
function pointer, so that we can put it in the vtable. */
- init = build1 (NOP_EXPR, vfunc_ptr_type_node, offset);
- TREE_CONSTANT (init) = 1;
+ init = build_nop (vfunc_ptr_type_node, offset);
*vid->last_init = build_tree_list (NULL_TREE, init);
vid->last_init = &TREE_CHAIN (*vid->last_init);
}
diff --git a/gcc/cp/config-lang.in b/gcc/cp/config-lang.in
index d230bc66236..2927606c12c 100644
--- a/gcc/cp/config-lang.in
+++ b/gcc/cp/config-lang.in
@@ -32,6 +32,6 @@ compilers="cc1plus\$(exeext)"
stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)"
-target_libs="${libstdcxx_version} target-gperf"
+target_libs="target-libstdc++-v3 target-gperf"
-gtfiles="\$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/lex.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/parser.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c"
+gtfiles="\$(srcdir)/cp/mangle.c \$(srcdir)/cp/name-lookup.h \$(srcdir)/cp/name-lookup.c \$(srcdir)/cp/cp-tree.h \$(srcdir)/cp/decl.h \$(srcdir)/cp/lex.h \$(srcdir)/cp/call.c \$(srcdir)/cp/decl.c \$(srcdir)/cp/decl2.c \$(srcdir)/cp/pt.c \$(srcdir)/cp/repo.c \$(srcdir)/cp/semantics.c \$(srcdir)/cp/tree.c \$(srcdir)/cp/parser.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c"
diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c
index efb436785f2..88aa927b50c 100644
--- a/gcc/cp/cp-lang.c
+++ b/gcc/cp/cp-lang.c
@@ -265,8 +265,14 @@ ok_to_generate_alias_set_for_type (tree t)
static HOST_WIDE_INT
cxx_get_alias_set (tree t)
{
- /* It's not yet safe to use alias sets for classes in C++. */
- if (!ok_to_generate_alias_set_for_type(t))
+
+ if (/* It's not yet safe to use alias sets for some classes in C++. */
+ !ok_to_generate_alias_set_for_type (t)
+ /* Nor is it safe to use alias sets for pointers-to-member
+ functions, due to the fact that there may be more than one
+ RECORD_TYPE type corresponding to the same pointer-to-member
+ type. */
+ || TYPE_PTRMEMFUNC_P (t))
return 0;
return c_common_get_alias_set (t);
diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def
index a9c5be7bd4e..bd5e5419f76 100644
--- a/gcc/cp/cp-tree.def
+++ b/gcc/cp/cp-tree.def
@@ -1,8 +1,8 @@
/* This file contains the definitions and documentation for the
additional tree codes used in the GNU C++ compiler (see tree.def
for the standard codes).
- Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, 2003,
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Hacked by Michael Tiemann (tiemann@cygnus.com)
This file is part of GCC.
@@ -222,11 +222,6 @@ DEFTREECODE (DEFAULT_ARG, "default_arg", 'x', 2)
the template may be a LOOKUP_EXPR. */
DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2)
-/* An association between name and entity. Parameters are the scope
- and the (non-type) value. TREE_TYPE indicates the type bound to
- the name. */
-DEFTREECODE (CPLUS_BINDING, "binding", 'x', 2)
-
/* A list-like node for chaining overloading candidates. TREE_TYPE is
the original name, and the parameter is the FUNCTION_DECL. */
DEFTREECODE (OVERLOAD, "overload", 'x', 1)
@@ -270,7 +265,13 @@ DEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", 'e', 1)
DEFTREECODE (TAG_DEFN, "tag_defn", 'e', 0)
-/* And some codes for expressing conversions for overload resolution. */
+/* The following codes are used to represent implicit conversion
+ sequences, in the sense of [over.best.ics]. The conversion
+ sequences are connected through their first operands, with the
+ first conversion to be performed at the end of the chain.
+
+ The innermost conversion (i.e, the one at the end of the chain) is
+ always an IDENTITY_CONV, corresponding to the identity conversion. */
DEFTREECODE (IDENTITY_CONV, "identity_conv", 'e', 1)
DEFTREECODE (LVALUE_CONV, "lvalue_conv", 'e', 1)
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 2bb4adee7f1..3bbe6632712 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -29,11 +29,8 @@ Boston, MA 02111-1307, USA. */
#include "splay-tree.h"
#include "varray.h"
-#ifndef __GNUC__
-#error "You should be using 'make bootstrap' -- see installation instructions"
-#endif
-
#include "c-common.h"
+#include "name-lookup.h"
struct diagnostic_context;
@@ -44,7 +41,6 @@ struct diagnostic_context;
DELETE_EXPR_USE_GLOBAL (in DELETE_EXPR).
LOOKUP_EXPR_GLOBAL (in LOOKUP_EXPR).
TREE_INDIRECT_USING (in NAMESPACE_DECL).
- LOCAL_BINDING_P (in CPLUS_BINDING)
ICS_USER_FLAG (in _CONV)
CLEANUP_P (in TRY_BLOCK)
AGGR_INIT_VIA_CTOR_P (in AGGR_INIT_EXPR)
@@ -56,14 +52,12 @@ struct diagnostic_context;
DELETE_EXPR_USE_VEC (in DELETE_EXPR).
(TREE_CALLS_NEW) (in _EXPR or _REF) (commented-out).
TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (in _TYPE).
- INHERITED_VALUE_BINDING_P (in CPLUS_BINDING)
ICS_ELLIPSIS_FLAG (in _CONV)
BINFO_DEPENDENT_BASE_P (in BINFO)
DECL_INITIALIZED_P (in VAR_DECL)
2: IDENTIFIER_OPNAME_P.
TYPE_POLYMORPHIC_P (in _TYPE)
ICS_THIS_FLAG (in _CONV)
- BINDING_HAS_LEVEL_P (in CPLUS_BINDING)
BINFO_LOST_PRIMARY_P (in BINFO)
TREE_PARMLIST (in TREE_LIST)
3: TYPE_USES_VIRTUAL_BASECLASSES (in a class TYPE).
@@ -160,7 +154,7 @@ struct diagnostic_context;
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
-#define VAR_OR_FUNCTION_DECL_CHECK(NODE) \
+#define VAR_OR_FUNCTION_DECL_CHECK(NODE) __extension__ \
({ const tree __t = (NODE); \
enum tree_code const __c = TREE_CODE(__t); \
if (__c != VAR_DECL && __c != FUNCTION_DECL) \
@@ -168,7 +162,7 @@ struct diagnostic_context;
__FUNCTION__); \
__t; })
-#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) \
+#define VAR_FUNCTION_OR_PARM_DECL_CHECK(NODE) __extension__ \
({ const tree __t = (NODE); \
enum tree_code const __c = TREE_CODE(__t); \
if (__c != VAR_DECL \
@@ -178,7 +172,7 @@ struct diagnostic_context;
__FUNCTION__); \
__t; })
-#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) \
+#define VAR_TEMPL_TYPE_OR_FUNCTION_DECL_CHECK(NODE) __extension__ \
({ const tree __t = (NODE); \
enum tree_code const __c = TREE_CODE(__t); \
if (__c != VAR_DECL \
@@ -189,7 +183,7 @@ struct diagnostic_context;
__FUNCTION__); \
__t; })
-#define RECORD_OR_UNION_TYPE_CHECK(NODE) \
+#define RECORD_OR_UNION_TYPE_CHECK(NODE) __extension__ \
({ const tree __t = (NODE); \
enum tree_code const __c = TREE_CODE(__t); \
if (__c != RECORD_TYPE && __c != UNION_TYPE) \
@@ -197,7 +191,7 @@ struct diagnostic_context;
__FUNCTION__); \
__t; })
-#define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) \
+#define BOUND_TEMPLATE_TEMPLATE_PARM_TYPE_CHECK(NODE) __extension__ \
({ const tree __t = (NODE); \
enum tree_code const __c = TREE_CODE(__t); \
if (__c != BOUND_TEMPLATE_TEMPLATE_PARM) \
@@ -220,15 +214,14 @@ struct diagnostic_context;
#define abi_version_at_least(N) \
(flag_abi_version == 0 || flag_abi_version >= (N))
-
/* Language-dependent contents of an identifier. */
struct lang_identifier GTY(())
{
struct c_common_identifier c_common;
- tree namespace_bindings;
- tree bindings;
+ cxx_binding *namespace_bindings;
+ cxx_binding *bindings;
tree class_value;
tree class_template_info;
struct lang_id2 *x;
@@ -269,33 +262,6 @@ struct ptrmem_cst GTY(())
};
typedef struct ptrmem_cst * ptrmem_cst_t;
-/* Nonzero if this binding is for a local scope, as opposed to a class
- or namespace scope. */
-#define LOCAL_BINDING_P(NODE) TREE_LANG_FLAG_0 (NODE)
-
-/* Nonzero if BINDING_VALUE is from a base class of the class which is
- currently being defined. */
-#define INHERITED_VALUE_BINDING_P(NODE) TREE_LANG_FLAG_1 (NODE)
-
-/* For a binding between a name and an entity at a non-local scope,
- defines the scope where the binding is declared. (Either a class
- _TYPE node, or a NAMESPACE_DECL.) This macro should be used only
- for namespace-level bindings; on the IDENTIFIER_BINDING list
- BINDING_LEVEL is used instead. */
-#define BINDING_SCOPE(NODE) \
- (((struct tree_binding*)CPLUS_BINDING_CHECK (NODE))->scope.scope)
-
-/* Nonzero if NODE has BINDING_LEVEL, rather than BINDING_SCOPE. */
-#define BINDING_HAS_LEVEL_P(NODE) TREE_LANG_FLAG_2 (NODE)
-
-/* This is the declaration bound to the name. Possible values:
- variable, overloaded function, namespace, template, enumerator. */
-#define BINDING_VALUE(NODE) \
- (((struct tree_binding*)CPLUS_BINDING_CHECK (NODE))->value)
-
-/* If name is bound to a type, this is the type (struct, union, enum). */
-#define BINDING_TYPE(NODE) TREE_TYPE (NODE)
-
#define IDENTIFIER_GLOBAL_VALUE(NODE) \
namespace_binding ((NODE), global_namespace)
#define SET_IDENTIFIER_GLOBAL_VALUE(NODE, VAL) \
@@ -328,17 +294,6 @@ typedef struct ptrmem_cst * ptrmem_cst_t;
&& DECL_NAME (NODE) != NULL_TREE \
&& MAIN_NAME_P (DECL_NAME (NODE)))
-
-struct tree_binding GTY(())
-{
- struct tree_common common;
- union tree_binding_u {
- tree GTY ((tag ("0"))) scope;
- struct cp_binding_level * GTY ((tag ("1"))) level;
- } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) scope;
- tree value;
-};
-
/* The overloaded FUNCTION_DECL. */
#define OVL_FUNCTION(NODE) \
(((struct tree_overload*)OVERLOAD_CHECK (NODE))->function)
@@ -416,22 +371,20 @@ struct tree_srcloc GTY(())
#define IDENTIFIER_TEMPLATE(NODE) \
(LANG_IDENTIFIER_CAST (NODE)->class_template_info)
-/* The IDENTIFIER_BINDING is the innermost CPLUS_BINDING for the
- identifier. It's TREE_CHAIN is the next outermost binding. Each
+/* The IDENTIFIER_BINDING is the innermost cxx_binding for the
+ identifier. It's PREVIOUS is the next outermost binding. Each
BINDING_VALUE is a DECL for the associated declaration. Thus,
name lookup consists simply of pulling off the node at the front
of the list (modulo oddities for looking up the names of types,
- and such.) You can use BINDING_SCOPE or BINDING_LEVEL to
- determine the scope that bound the name. */
+ and such.) You can use BINDING_SCOPE to determine the scope
+ that bound the name. */
#define IDENTIFIER_BINDING(NODE) \
(LANG_IDENTIFIER_CAST (NODE)->bindings)
/* The IDENTIFIER_VALUE is the value of the IDENTIFIER_BINDING, or
NULL_TREE if there is no binding. */
#define IDENTIFIER_VALUE(NODE) \
- (IDENTIFIER_BINDING (NODE) \
- ? BINDING_VALUE (IDENTIFIER_BINDING (NODE)) \
- : NULL_TREE)
+ (IDENTIFIER_BINDING (NODE) ? IDENTIFIER_BINDING (NODE)->value : NULL)
/* If IDENTIFIER_CLASS_VALUE is set, then NODE is bound in the current
class, and IDENTIFIER_CLASS_VALUE is the value binding. This is
@@ -536,7 +489,6 @@ union lang_tree_node GTY((desc ("cp_tree_node_structure (&%h)"),
desc ("tree_node_structure (&%h)"))) generic;
struct template_parm_index_s GTY ((tag ("TS_CP_TPI"))) tpi;
struct ptrmem_cst GTY ((tag ("TS_CP_PTRMEM"))) ptrmem;
- struct tree_binding GTY ((tag ("TS_CP_BINDING"))) binding;
struct tree_overload GTY ((tag ("TS_CP_OVERLOAD"))) overload;
struct tree_baselink GTY ((tag ("TS_CP_BASELINK"))) baselink;
struct tree_wrapper GTY ((tag ("TS_CP_WRAPPER"))) wrapper;
@@ -755,7 +707,7 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
struct saved_scope GTY(())
{
- tree old_bindings;
+ cxx_saved_binding *old_bindings;
tree old_namespace;
tree decl_ns_list;
tree class_name;
@@ -854,6 +806,7 @@ struct language_function GTY(())
int returns_null;
int returns_abnormally;
int in_function_try_handler;
+ int in_base_initializer;
int x_expanding_p;
struct named_label_use_list *x_named_label_uses;
@@ -924,6 +877,9 @@ struct language_function GTY(())
#define doing_semantic_analysis_p() (!expanding_p)
+/* Non-zero if we are processing a base initializer. Zero elsewhere. */
+#define in_base_initializer cp_function_chain->in_base_initializer
+
#define in_function_try_handler cp_function_chain->in_function_try_handler
/* Expression always returned from function, or error_mark_node
@@ -1076,17 +1032,17 @@ enum languages { lang_c, lang_cplusplus, lang_java };
/* This is a few header flags for 'struct lang_type'. Actually,
all but the first are used only for lang_type_class; they
are put in this structure to save space. */
-struct lang_type_header GTY(())
+__extension__ struct lang_type_header GTY(())
{
- unsigned char is_lang_type_class : 1;
-
- unsigned char has_type_conversion : 1;
- unsigned char has_init_ref : 1;
- unsigned char has_default_ctor : 1;
- unsigned char uses_multiple_inheritance : 1;
- unsigned char const_needs_init : 1;
- unsigned char ref_needs_init : 1;
- unsigned char has_const_assign_ref : 1;
+ CHAR_BITFIELD is_lang_type_class : 1;
+
+ CHAR_BITFIELD has_type_conversion : 1;
+ CHAR_BITFIELD has_init_ref : 1;
+ CHAR_BITFIELD has_default_ctor : 1;
+ CHAR_BITFIELD uses_multiple_inheritance : 1;
+ CHAR_BITFIELD const_needs_init : 1;
+ CHAR_BITFIELD ref_needs_init : 1;
+ CHAR_BITFIELD has_const_assign_ref : 1;
};
/* This structure provides additional information above and beyond
@@ -1194,13 +1150,13 @@ struct lang_type GTY(())
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
-#define LANG_TYPE_CLASS_CHECK(NODE) \
+#define LANG_TYPE_CLASS_CHECK(NODE) __extension__ \
({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
if (! lt->u.h.is_lang_type_class) \
lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
&lt->u.c; })
-#define LANG_TYPE_PTRMEM_CHECK(NODE) \
+#define LANG_TYPE_PTRMEM_CHECK(NODE) __extension__ \
({ struct lang_type *lt = TYPE_LANG_SPECIFIC (NODE); \
if (lt->u.h.is_lang_type_class) \
lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
@@ -1788,7 +1744,7 @@ struct lang_decl GTY(())
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
-#define LANG_DECL_U2_CHECK(NODE, TF) \
+#define LANG_DECL_U2_CHECK(NODE, TF) __extension__ \
({ struct lang_decl *lt = DECL_LANG_SPECIFIC (NODE); \
if (lt->decl_flags.u2sel != TF) \
lang_check_failed (__FILE__, __LINE__, __FUNCTION__); \
@@ -1971,7 +1927,8 @@ struct lang_decl GTY(())
(TREE_LANG_FLAG_1 (VAR_DECL_CHECK (NODE)))
/* Nonzero if the DECL was initialized in the class definition itself,
- rather than outside the class. */
+ rather than outside the class. This is used for both static member
+ VAR_DECLS, and FUNTION_DECLS that are defined in the class. */
#define DECL_INITIALIZED_IN_CLASS_P(DECL) \
(DECL_LANG_SPECIFIC (DECL)->decl_flags.initialized_in_class)
@@ -2653,14 +2610,8 @@ struct lang_decl GTY(())
/* The format of each node in the DECL_FRIENDLIST is as follows:
The TREE_PURPOSE will be the name of a function, i.e., an
- IDENTIFIER_NODE. The TREE_VALUE will be itself a TREE_LIST, the
- list of functions with that name which are friends. The
- TREE_PURPOSE of each node in this sublist will be error_mark_node,
- if the function was declared a friend individually, in which case
- the TREE_VALUE will be the function_decl. If, however, all
- functions with a given name in a class were declared to be friends,
- the TREE_PUROSE will be the class type, and the TREE_VALUE will be
- NULL_TREE. */
+ IDENTIFIER_NODE. The TREE_VALUE will be itself a TREE_LIST, whose
+ TREE_VALUEs are friends with the given name. */
#define DECL_FRIENDLIST(NODE) (DECL_INITIAL (NODE))
#define FRIEND_NAME(LIST) (TREE_PURPOSE (LIST))
#define FRIEND_DECLS(LIST) (TREE_VALUE (LIST))
@@ -2986,7 +2937,7 @@ typedef enum cp_lvalue_kind {
clk_none = 0, /* Things that are not an lvalue. */
clk_ordinary = 1, /* An ordinary lvalue. */
clk_class = 2, /* An rvalue of class-type. */
- clk_bitfield = 4, /* An lvalue for a bit-field. */
+ clk_bitfield = 4 /* An lvalue for a bit-field. */
} cp_lvalue_kind;
/* The kinds of scopes we recognize. */
@@ -3096,7 +3047,7 @@ typedef enum base_access {
ba_check = 2, /* Check access */
ba_not_special = 3, /* Do not consider special privilege
current_class_type might give. */
- ba_quiet = 4, /* Do not issue error messages (bit mask). */
+ ba_quiet = 4 /* Do not issue error messages (bit mask). */
} base_access;
/* The kind of base we can find, looking in a class hierarchy.
@@ -3557,6 +3508,7 @@ extern tree type_decays_to (tree);
extern tree resolve_scoped_fn_name (tree, tree);
extern tree build_user_type_conversion (tree, tree, int);
extern tree build_new_function_call (tree, tree);
+extern tree build_operator_new_call (tree, tree, tree *, tree *);
extern tree build_new_method_call (tree, tree, tree, tree, int);
extern tree build_special_member_call (tree, tree, tree, tree, int);
extern tree build_new_op (enum tree_code, int, tree, tree, tree);
@@ -3573,7 +3525,8 @@ extern tree type_passed_as (tree);
extern tree convert_for_arg_passing (tree, tree);
extern tree cp_convert_parm_for_inlining (tree, tree, tree);
extern bool is_properly_derived_from (tree, tree);
-extern tree initialize_reference (tree, tree);
+extern tree initialize_reference (tree, tree, tree);
+extern tree make_temporary_var_for_ref_to_temp (tree, tree);
extern tree strip_top_quals (tree);
extern tree perform_implicit_conversion (tree, tree);
extern tree in_charge_arg_for_name (tree);
@@ -3631,11 +3584,12 @@ extern tree get_primary_binfo (tree);
extern tree convert_to_reference (tree, tree, int, int, tree);
extern tree convert_from_reference (tree);
extern tree convert_lvalue (tree, tree);
+extern tree force_rvalue (tree);
extern tree ocp_convert (tree, tree, int, int);
extern tree cp_convert (tree, tree);
extern tree convert_to_void (tree, const char */*implicit context*/);
extern tree convert_force (tree, tree, int);
-extern tree build_type_conversion (tree, tree, int);
+extern tree build_type_conversion (tree, tree);
extern tree build_expr_type_conversion (int, tree, bool);
extern tree type_promotes_to (tree);
extern tree perform_qualification_conversions (tree, tree);
@@ -3702,7 +3656,6 @@ extern tree declare_local_label (tree);
extern tree define_label (const char *, int, tree);
extern void check_goto (tree);
extern void define_case_label (void);
-extern tree binding_for_name (tree, tree);
extern tree namespace_binding (tree, tree);
extern void set_namespace_binding (tree, tree, tree);
extern tree lookup_namespace_name (tree, tree);
@@ -3716,10 +3669,11 @@ extern tree lookup_name_current_level (tree);
extern tree lookup_type_current_level (tree);
extern tree lookup_name_real (tree, int, int, int, int);
extern tree namespace_ancestor (tree, tree);
+extern bool is_ancestor (tree, tree);
extern tree unqualified_namespace_lookup (tree, int, tree *);
extern tree check_for_out_of_scope_variable (tree);
-extern bool lookup_using_namespace (tree, tree, tree, tree, int, tree *);
-extern bool qualified_lookup_using_namespace (tree, tree, tree, int);
+extern bool lookup_using_namespace (tree, cxx_binding *, tree, tree, int, tree *);
+extern bool qualified_lookup_using_namespace (tree, tree, cxx_binding *, int);
extern tree build_library_fn (tree, tree);
extern tree build_library_fn_ptr (const char *, tree);
extern tree build_cp_library_fn_ptr (const char *, tree);
@@ -3842,7 +3796,7 @@ extern tree do_class_using_decl (tree);
extern void do_using_directive (tree);
extern void check_default_args (tree);
extern void mark_used (tree);
-extern tree handle_class_head (enum tag_types, tree, tree, tree, bool, bool *);
+extern tree handle_class_head (enum tag_types, tree, tree, tree);
extern tree lookup_arg_dependent (tree, tree, tree);
extern void finish_static_data_member_decl (tree, tree, tree, int);
extern tree cp_build_parm_decl (tree, tree);
@@ -3902,7 +3856,7 @@ extern void add_friend (tree, tree);
extern tree do_friend (tree, tree, tree, tree, tree, enum overload_flags, tree, int);
/* in init.c */
-extern tree expand_member_init (tree, tree);
+extern tree expand_member_init (tree);
extern void emit_mem_initializers (tree);
extern tree build_aggr_init (tree, tree, int);
extern tree build_init (tree, tree, int);
@@ -3955,7 +3909,7 @@ extern tree make_aggr_type (enum tree_code);
extern void yyerror (const char *);
extern void yyhook (int);
extern int cp_type_qual_from_rid (tree);
-extern const char *cxx_init (const char *);
+extern bool cxx_init (void);
extern void cxx_finish (void);
extern void cxx_init_options (void);
@@ -3999,7 +3953,7 @@ extern tree lookup_template_class (tree, tree, tree, tree, int, tsubst_flags_t)
extern tree lookup_template_function (tree, tree);
extern int uses_template_parms (tree);
extern tree instantiate_class_template (tree);
-extern tree instantiate_template (tree, tree);
+extern tree instantiate_template (tree, tree, tsubst_flags_t);
extern int fn_type_unification (tree, tree, tree, tree, tree, unification_kind_t, int);
extern tree tinst_for_decl (void);
extern void mark_decl_instantiated (tree, int);
@@ -4045,14 +3999,16 @@ extern void init_repo (const char *);
extern void finish_repo (void);
/* in rtti.c */
+/* A varray of all tinfo decls that haven't been emitted yet. */
+extern GTY(()) varray_type unemitted_tinfo_decls;
+
extern void init_rtti_processing (void);
extern tree build_typeid (tree);
extern tree get_tinfo_decl (tree);
extern tree get_typeid (tree);
extern tree build_dynamic_cast (tree, tree);
extern void emit_support_tinfos (void);
-extern bool unemitted_tinfo_decl_p (tree, void *);
-extern bool emit_tinfo_decl (tree *, void *);
+extern bool emit_tinfo_decl (tree);
/* in search.c */
extern tree lookup_base (tree, tree, base_access, base_kind *);
@@ -4196,7 +4152,6 @@ extern void expand_body (tree);
extern tree nullify_returns_r (tree *, int *, void *);
extern void do_pushlevel (scope_kind);
extern tree do_poplevel (void);
-extern void begin_mem_initializers (void);
extern void finish_mem_initializers (tree);
extern void setup_vtbl_ptr (tree, tree);
extern void clear_out_block (void);
@@ -4218,6 +4173,7 @@ extern tree copy_base_binfos (tree, tree, tree);
extern int member_p (tree);
extern cp_lvalue_kind real_lvalue_p (tree);
extern int non_cast_lvalue_p (tree);
+extern cp_lvalue_kind real_non_cast_lvalue_p (tree);
extern int non_cast_lvalue_or_else (tree, const char *);
extern tree build_min (enum tree_code, tree,
...);
@@ -4316,8 +4272,6 @@ extern tree build_x_indirect_ref (tree, const char *);
extern tree build_indirect_ref (tree, const char *);
extern tree build_array_ref (tree, tree);
extern tree get_member_function_from_ptrfunc (tree *, tree);
-extern tree build_function_call_real (tree, tree, int, int);
-extern tree build_function_call_maybe (tree, tree);
extern tree convert_arguments (tree, tree, tree, int);
extern tree build_x_binary_op (enum tree_code, tree, tree);
extern tree build_x_unary_op (enum tree_code, tree);
@@ -4353,6 +4307,8 @@ extern tree check_return_expr (tree);
#define cxx_sizeof(T) cxx_sizeof_or_alignof_type (T, SIZEOF_EXPR, true)
#define cxx_alignof(T) cxx_sizeof_or_alignof_type (T, ALIGNOF_EXPR, true)
extern tree build_ptrmemfunc_access_expr (tree, tree);
+extern tree build_address (tree);
+extern tree build_nop (tree, tree);
/* in typeck2.c */
extern void require_complete_eh_spec_types (tree, tree);
@@ -4391,7 +4347,7 @@ extern tree mangle_guard_variable (tree);
extern tree mangle_ref_init_variable (tree);
/* in dump.c */
-extern int cp_dump_tree (void *, tree);
+extern bool cp_dump_tree (void *, tree);
/* in cp-simplify.c */
extern int cp_simplify_expr PARAMS ((tree *, tree *, tree *));
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index d35ac5cab87..c62edf09cb8 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -90,7 +90,7 @@ cp_convert_to_pointer (tree type, tree expr, bool force)
return error_mark_node;
}
- rval = build_type_conversion (type, expr, true);
+ rval = build_type_conversion (type, expr);
if (rval)
{
if (rval == error_mark_node)
@@ -148,31 +148,33 @@ cp_convert_to_pointer (tree type, tree expr, bool force)
{
enum tree_code code = PLUS_EXPR;
tree binfo;
+ tree intype_class;
+ tree type_class;
+ bool same_p;
+ intype_class = TREE_TYPE (intype);
+ type_class = TREE_TYPE (type);
+
+ same_p = same_type_p (TYPE_MAIN_VARIANT (intype_class),
+ TYPE_MAIN_VARIANT (type_class));
+ binfo = NULL_TREE;
/* Try derived to base conversion. */
- binfo = lookup_base (TREE_TYPE (intype), TREE_TYPE (type),
- ba_check, NULL);
- if (!binfo)
+ if (!same_p)
+ binfo = lookup_base (intype_class, type_class, ba_check, NULL);
+ if (!same_p && !binfo)
{
/* Try base to derived conversion. */
- binfo = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
- ba_check, NULL);
+ binfo = lookup_base (type_class, intype_class, ba_check, NULL);
code = MINUS_EXPR;
}
if (binfo == error_mark_node)
return error_mark_node;
- if (binfo)
+ if (binfo || same_p)
{
- expr = build_base_path (code, expr, binfo, 0);
+ if (binfo)
+ expr = build_base_path (code, expr, binfo, 0);
/* Add any qualifier conversions. */
- if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)),
- TREE_TYPE (type)))
- {
- expr = build1 (NOP_EXPR, type, expr);
- TREE_CONSTANT (expr) =
- TREE_CONSTANT (TREE_OPERAND (expr, 0));
- }
- return expr;
+ return build_nop (type, expr);
}
}
@@ -225,9 +227,7 @@ cp_convert_to_pointer (tree type, tree expr, bool force)
return error_mark_node;
}
- rval = build1 (NOP_EXPR, type, expr);
- TREE_CONSTANT (rval) = TREE_CONSTANT (expr);
- return rval;
+ return build_nop (type, expr);
}
else if (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))
return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0);
@@ -326,14 +326,9 @@ convert_to_pointer_force (tree type, tree expr)
/* Add any qualifier conversions. */
if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)),
TREE_TYPE (type)))
- {
- expr = build1 (NOP_EXPR, type, expr);
- TREE_CONSTANT (expr) =
- TREE_CONSTANT (TREE_OPERAND (expr, 0));
- }
+ expr = build_nop (type, expr);
return expr;
}
-
}
}
@@ -354,7 +349,6 @@ build_up_reference (tree type, tree arg, int flags, tree decl)
tree rval;
tree argtype = TREE_TYPE (arg);
tree target_type = TREE_TYPE (type);
- tree stmt_expr = NULL_TREE;
my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 187);
@@ -364,26 +358,7 @@ build_up_reference (tree type, tree arg, int flags, tree decl)
here because it needs to live as long as DECL. */
tree targ = arg;
- arg = build_decl (VAR_DECL, NULL_TREE, argtype);
- DECL_ARTIFICIAL (arg) = 1;
- TREE_USED (arg) = 1;
- TREE_STATIC (arg) = TREE_STATIC (decl);
-
- if (TREE_STATIC (decl))
- {
- /* Namespace-scope or local static; give it a mangled name. */
- tree name = mangle_ref_init_variable (decl);
- DECL_NAME (arg) = name;
- SET_DECL_ASSEMBLER_NAME (arg, name);
- arg = pushdecl_top_level (arg);
- }
- else
- {
- /* Automatic; make sure we handle the cleanup properly. */
- maybe_push_cleanup_level (argtype);
- /* Don't push unnamed temps. Do set DECL_CONTEXT, though. */
- DECL_CONTEXT (arg) = current_function_decl;
- }
+ arg = make_temporary_var_for_ref_to_temp (decl, TREE_TYPE (arg));
/* Process the initializer for the declaration. */
DECL_INITIAL (arg) = targ;
@@ -416,16 +391,7 @@ build_up_reference (tree type, tree arg, int flags, tree decl)
else
rval
= convert_to_pointer_force (build_pointer_type (target_type), rval);
- rval = build1 (NOP_EXPR, type, rval);
- TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0));
-
- /* If we created and initialized a new temporary variable, add the
- representation of that initialization to the RVAL. */
- if (stmt_expr)
- rval = build (COMPOUND_EXPR, TREE_TYPE (rval), stmt_expr, rval);
-
- /* And return the result. */
- return rval;
+ return build_nop (type, rval);
}
/* Subroutine of convert_to_reference. REFTYPE is the target reference type.
@@ -500,7 +466,7 @@ convert_to_reference (tree reftype, tree expr, int convtype,
/* Look for a user-defined conversion to lvalue that we can use. */
rval_as_conversion
- = build_type_conversion (reftype, expr, 1);
+ = build_type_conversion (reftype, expr);
if (rval_as_conversion && rval_as_conversion != error_mark_node
&& real_lvalue_p (rval_as_conversion))
@@ -607,6 +573,21 @@ convert_lvalue (tree totype, tree expr)
NULL_TREE);
return convert_from_reference (expr);
}
+
+/* Really perform an lvalue-to-rvalue conversion, including copying an
+ argument of class type into a temporary. */
+
+tree
+force_rvalue (tree expr)
+{
+ if (IS_AGGR_TYPE (TREE_TYPE (expr)) && TREE_CODE (expr) != TARGET_EXPR)
+ expr = ocp_convert (TREE_TYPE (expr), expr,
+ CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
+ else
+ expr = decay_conversion (expr);
+
+ return expr;
+}
/* C++ conversions, preference to static cast conversions. */
@@ -706,7 +687,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
if (IS_AGGR_TYPE (intype))
{
tree rval;
- rval = build_type_conversion (type, e, 1);
+ rval = build_type_conversion (type, e);
if (rval)
return rval;
if (flags & LOOKUP_COMPLAIN)
@@ -742,7 +723,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
if (IS_AGGR_TYPE (TREE_TYPE (e)))
{
tree rval;
- rval = build_type_conversion (type, e, 1);
+ rval = build_type_conversion (type, e);
if (rval)
return rval;
else
@@ -1016,24 +997,17 @@ convert_force (tree type, tree expr, int convtype)
allowed (references private members, etc).
If no conversion exists, NULL_TREE is returned.
- If (FOR_SURE & 1) is nonzero, then we allow this type conversion
- to take place immediately. Otherwise, we build a SAVE_EXPR
- which can be evaluated if the results are ever needed.
-
- Changes to this functions should be mirrored in user_harshness.
-
FIXME: Ambiguity checking is wrong. Should choose one by the implicit
object parameter, or by the second standard conversion sequence if
that doesn't do it. This will probably wait for an overloading rewrite.
(jason 8/9/95) */
tree
-build_type_conversion (tree xtype, tree expr, int for_sure)
+build_type_conversion (tree xtype, tree expr)
{
/* C++: check to see if we can convert this aggregate type
into the required type. */
- return build_user_type_conversion
- (xtype, expr, for_sure ? LOOKUP_NORMAL : 0);
+ return build_user_type_conversion (xtype, expr, LOOKUP_NORMAL);
}
/* Convert the given EXPR to one of a group of types suitable for use in an
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 152e75c2e69..ac293dfe669 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -67,7 +67,7 @@ static void storedecls (tree);
static void require_complete_types_for_parms (tree);
static int ambi_op_p (enum tree_code);
static int unary_op_p (enum tree_code);
-static tree store_bindings (tree, tree);
+static cxx_saved_binding *store_bindings (tree, cxx_saved_binding *);
static tree lookup_tag_reverse (tree, tree);
static void push_local_name (tree);
static void warn_extern_redeclared_static (tree, tree);
@@ -98,8 +98,7 @@ static void push_binding (tree, tree, struct cp_binding_level*);
static int add_binding (tree, tree);
static void pop_binding (tree, tree);
static tree local_variable_p_walkfn (tree *, int *, void *);
-static tree find_binding (tree, tree);
-static tree select_decl (tree, int);
+static tree select_decl (cxx_binding *, int);
static int lookup_flags (int, int);
static tree qualify_lookup (tree, int);
static tree record_builtin_java_type (const char *, int);
@@ -327,6 +326,9 @@ struct cp_binding_level GTY(())
/* A chain of NAMESPACE_DECL nodes. */
tree namespaces;
+ /* An array of static functions and variables (for namespaces only) */
+ varray_type static_decls;
+
/* A chain of VTABLE_DECL nodes. */
tree vtables;
@@ -432,9 +434,9 @@ struct cp_binding_level GTY(())
/* The binding level currently in effect. */
#define current_binding_level \
- (cfun && cp_function_chain->bindings \
- ? cp_function_chain->bindings \
- : scope_chain->bindings)
+ (*(cfun && cp_function_chain->bindings \
+ ? &cp_function_chain->bindings \
+ : &scope_chain->bindings))
/* The binding level of the current class, if any. */
@@ -882,44 +884,21 @@ finish_scope (void)
poplevel (0, 0, 0);
}
-/* For a binding between a name and an entity at a block scope,
- this is the `struct cp_binding_level' for the block. */
-#define BINDING_LEVEL(NODE) \
- (((struct tree_binding*)(NODE))->scope.level)
-
-/* A free list of CPLUS_BINDING nodes, connected by their
- TREE_CHAINs. */
-
-static GTY((deletable (""))) tree free_bindings;
-
/* Make DECL the innermost binding for ID. The LEVEL is the binding
level at which this declaration is being bound. */
static void
-push_binding (tree id,
- tree decl,
- struct cp_binding_level* level)
+push_binding (tree id, tree decl, cxx_scope* level)
{
- tree binding;
-
- if (free_bindings)
- {
- binding = free_bindings;
- free_bindings = TREE_CHAIN (binding);
- }
- else
- binding = make_node (CPLUS_BINDING);
+ cxx_binding *binding = cxx_binding_make (decl, NULL);
/* Now, fill in the binding information. */
- BINDING_VALUE (binding) = decl;
- BINDING_TYPE (binding) = NULL_TREE;
- BINDING_LEVEL (binding) = level;
+ binding->previous = IDENTIFIER_BINDING (id);
+ BINDING_SCOPE (binding) = level;
INHERITED_VALUE_BINDING_P (binding) = 0;
LOCAL_BINDING_P (binding) = (level != class_binding_level);
- BINDING_HAS_LEVEL_P (binding) = 1;
/* And put it on the front of the list of bindings for ID. */
- TREE_CHAIN (binding) = IDENTIFIER_BINDING (id);
IDENTIFIER_BINDING (id) = binding;
}
@@ -932,7 +911,7 @@ push_binding (tree id,
static int
add_binding (tree id, tree decl)
{
- tree binding = IDENTIFIER_BINDING (id);
+ cxx_binding *binding = IDENTIFIER_BINDING (id);
int ok = 1;
timevar_push (TV_NAME_LOOKUP);
@@ -1019,6 +998,13 @@ add_decl_to_level (tree decl,
TREE_CHAIN (decl) = b->names;
b->names = decl;
b->names_size++;
+
+ /* If appropriate, add decl to separate list of statics */
+ if (b->namespace_p)
+ if ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
+ || (TREE_CODE (decl) == FUNCTION_DECL
+ && (!TREE_PUBLIC (decl) || DECL_DECLARED_INLINE_P (decl))))
+ VARRAY_PUSH_TREE (b->static_decls, decl);
}
}
@@ -1069,7 +1055,7 @@ int
push_class_binding (tree id, tree decl)
{
int result = 1;
- tree binding = IDENTIFIER_BINDING (id);
+ cxx_binding *binding = IDENTIFIER_BINDING (id);
tree context;
timevar_push (TV_NAME_LOOKUP);
@@ -1078,7 +1064,7 @@ push_class_binding (tree id, tree decl)
other purpose. */
note_name_declared_in_class (id, decl);
- if (binding && BINDING_LEVEL (binding) == class_binding_level)
+ if (binding && BINDING_SCOPE (binding) == class_binding_level)
/* Supplement the existing binding. */
result = add_binding (id, decl);
else
@@ -1124,7 +1110,7 @@ push_class_binding (tree id, tree decl)
static void
pop_binding (tree id, tree decl)
{
- tree binding;
+ cxx_binding *binding;
if (id == NULL_TREE)
/* It's easiest to write the loops that call this function without
@@ -1136,7 +1122,7 @@ pop_binding (tree id, tree decl)
binding = IDENTIFIER_BINDING (id);
/* The name should be bound. */
- my_friendly_assert (binding != NULL_TREE, 0);
+ my_friendly_assert (binding != NULL, 0);
/* The DECL will be either the ordinary binding or the type
binding for this identifier. Remove that binding. */
@@ -1151,15 +1137,14 @@ pop_binding (tree id, tree decl)
{
/* We're completely done with the innermost binding for this
identifier. Unhook it from the list of bindings. */
- IDENTIFIER_BINDING (id) = TREE_CHAIN (binding);
+ IDENTIFIER_BINDING (id) = binding->previous;
/* Add it to the free list. */
- TREE_CHAIN (binding) = free_bindings;
- free_bindings = binding;
+ cxx_binding_free (binding);
- /* Clear the BINDING_LEVEL so the garbage collector doesn't walk
+ /* Clear the BINDING_SCOPE so the garbage collector doesn't walk
it. */
- BINDING_LEVEL (binding) = NULL;
+ BINDING_SCOPE (binding) = NULL;
}
}
@@ -1366,8 +1351,8 @@ poplevel (int keep, int reverse, int functionbody)
if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
&& DECL_NAME (link))
{
- tree outer_binding
- = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (link)));
+ cxx_binding *outer_binding
+ = IDENTIFIER_BINDING (DECL_NAME (link))->previous;
tree ns_binding;
if (!outer_binding)
@@ -1376,7 +1361,7 @@ poplevel (int keep, int reverse, int functionbody)
ns_binding = NULL_TREE;
if (outer_binding
- && (BINDING_LEVEL (outer_binding)
+ && (BINDING_SCOPE (outer_binding)
== current_binding_level->level_chain))
/* We have something like:
@@ -1422,10 +1407,9 @@ poplevel (int keep, int reverse, int functionbody)
current_binding_level->level_chain->
dead_vars_from_for);
- /* Although we don't pop the CPLUS_BINDING, we do clear
- its BINDING_LEVEL since the level is going away now. */
- BINDING_LEVEL (IDENTIFIER_BINDING (DECL_NAME (link)))
- = 0;
+ /* Although we don't pop the cxx_binding, we do clear
+ its BINDING_SCOPE since the level is going away now. */
+ BINDING_SCOPE (IDENTIFIER_BINDING (DECL_NAME (link))) = 0;
}
}
else
@@ -1647,15 +1631,15 @@ poplevel_class (void)
shadowed;
shadowed = TREE_CHAIN (shadowed))
{
- tree t;
+ cxx_binding *binding;
+
+ binding = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
+ while (binding && BINDING_SCOPE (binding) != b)
+ binding = binding->previous;
- t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
- while (t && BINDING_LEVEL (t) != b)
- t = TREE_CHAIN (t);
-
- if (t)
+ if (binding)
IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed))
- = BINDING_VALUE (t);
+ = BINDING_VALUE (binding);
}
}
else
@@ -1849,19 +1833,12 @@ walk_globals (walk_globals_pred p, walk_globals_fn f, void *data)
int
wrapup_globals_for_namespace (tree namespace, void* data)
{
- tree globals = cp_namespace_decls (namespace);
- int len = NAMESPACE_LEVEL (namespace)->names_size;
- tree *vec = (tree *) alloca (sizeof (tree) * len);
- int i;
- int result;
- tree decl;
+ struct cp_binding_level *level = NAMESPACE_LEVEL (namespace);
+ varray_type statics = level->static_decls;
+ tree *vec = &VARRAY_TREE (statics, 0);
+ int len = VARRAY_ACTIVE_SIZE (statics);
int last_time = (data != 0);
- /* Process the decls in reverse order--earliest first.
- Put them into VEC from back to front, then take out from front. */
- for (i = 0, decl = globals; i < len; i++, decl = TREE_CHAIN (decl))
- vec[len - i - 1] = decl;
-
if (last_time)
{
check_global_declarations (vec, len);
@@ -1869,9 +1846,7 @@ wrapup_globals_for_namespace (tree namespace, void* data)
}
/* Write out any globals that need to be output. */
- result = wrapup_global_declarations (vec, len);
-
- return result;
+ return wrapup_global_declarations (vec, len);
}
@@ -1885,7 +1860,7 @@ print_binding_level (struct cp_binding_level* lvl)
tree t;
int i = 0, len;
fprintf (stderr, " blocks=");
- fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks);
+ fprintf (stderr, HOST_PTR_PRINTF, (void *) lvl->blocks);
if (lvl->tag_transparent)
fprintf (stderr, " tag-transparent");
if (lvl->more_cleanups_ok)
@@ -1986,7 +1961,7 @@ print_other_binding_stack (struct cp_binding_level *stack)
for (level = stack; level != global_binding_level; level = level->level_chain)
{
fprintf (stderr, "binding level ");
- fprintf (stderr, HOST_PTR_PRINTF, level);
+ fprintf (stderr, HOST_PTR_PRINTF, (void *) level);
fprintf (stderr, "\n");
print_binding_level (level);
}
@@ -1997,11 +1972,11 @@ print_binding_stack (void)
{
struct cp_binding_level *b;
fprintf (stderr, "current_binding_level=");
- fprintf (stderr, HOST_PTR_PRINTF, current_binding_level);
+ fprintf (stderr, HOST_PTR_PRINTF, (void *) current_binding_level);
fprintf (stderr, "\nclass_binding_level=");
- fprintf (stderr, HOST_PTR_PRINTF, class_binding_level);
+ fprintf (stderr, HOST_PTR_PRINTF, (void *) class_binding_level);
fprintf (stderr, "\nglobal_binding_level=");
- fprintf (stderr, HOST_PTR_PRINTF, global_binding_level);
+ fprintf (stderr, HOST_PTR_PRINTF, (void *) global_binding_level);
fprintf (stderr, "\n");
if (class_binding_level)
{
@@ -2022,117 +1997,7 @@ print_binding_stack (void)
/* Namespace binding access routines: The namespace_bindings field of
the identifier is polymorphic, with three possible values:
- NULL_TREE, a list of CPLUS_BINDINGS, or any other tree_node
- indicating the BINDING_VALUE of global_namespace. */
-
-/* Check whether the a binding for the name to scope is known.
- Assumes that the bindings of the name are already a list
- of bindings. Returns the binding found, or NULL_TREE. */
-
-static tree
-find_binding (tree name, tree scope)
-{
- tree iter, prev = NULL_TREE;
-
- timevar_push (TV_NAME_LOOKUP);
- scope = ORIGINAL_NAMESPACE (scope);
-
- for (iter = IDENTIFIER_NAMESPACE_BINDINGS (name); iter;
- iter = TREE_CHAIN (iter))
- {
- my_friendly_assert (TREE_CODE (iter) == CPLUS_BINDING, 374);
- if (BINDING_SCOPE (iter) == scope)
- {
- /* Move binding found to the front of the list, so
- subsequent lookups will find it faster. */
- if (prev)
- {
- TREE_CHAIN (prev) = TREE_CHAIN (iter);
- TREE_CHAIN (iter) = IDENTIFIER_NAMESPACE_BINDINGS (name);
- IDENTIFIER_NAMESPACE_BINDINGS (name) = iter;
- }
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, iter);
- }
- prev = iter;
- }
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
-}
-
-/* Always returns a binding for name in scope. If the
- namespace_bindings is not a list, convert it to one first.
- If no binding is found, make a new one. */
-
-tree
-binding_for_name (tree name, tree scope)
-{
- tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
- tree result;
-
- scope = ORIGINAL_NAMESPACE (scope);
-
- if (b && TREE_CODE (b) != CPLUS_BINDING)
- {
- /* Get rid of optimization for global scope. */
- IDENTIFIER_NAMESPACE_BINDINGS (name) = NULL_TREE;
- BINDING_VALUE (binding_for_name (name, global_namespace)) = b;
- b = IDENTIFIER_NAMESPACE_BINDINGS (name);
- }
- if (b && (result = find_binding (name, scope)))
- return result;
- /* Not found, make a new one. */
- result = make_node (CPLUS_BINDING);
- TREE_CHAIN (result) = b;
- IDENTIFIER_NAMESPACE_BINDINGS (name) = result;
- BINDING_SCOPE (result) = scope;
- BINDING_TYPE (result) = NULL_TREE;
- BINDING_VALUE (result) = NULL_TREE;
- return result;
-}
-
-/* Return the binding value for name in scope, considering that
- namespace_binding may or may not be a list of CPLUS_BINDINGS. */
-
-tree
-namespace_binding (tree name, tree scope)
-{
- tree b = IDENTIFIER_NAMESPACE_BINDINGS (name);
- if (b == NULL_TREE)
- return NULL_TREE;
- if (scope == NULL_TREE)
- scope = global_namespace;
- if (TREE_CODE (b) != CPLUS_BINDING)
- return (scope == global_namespace) ? b : NULL_TREE;
- name = find_binding (name,scope);
- if (name == NULL_TREE)
- return name;
- return BINDING_VALUE (name);
-}
-
-/* Set the binding value for name in scope. If modifying the binding
- of global_namespace is attempted, try to optimize it. */
-
-void
-set_namespace_binding (tree name, tree scope, tree val)
-{
- tree b;
-
- timevar_push (TV_NAME_LOOKUP);
- if (scope == NULL_TREE)
- scope = global_namespace;
-
- if (scope == global_namespace)
- {
- b = IDENTIFIER_NAMESPACE_BINDINGS (name);
- if (b == NULL_TREE || TREE_CODE (b) != CPLUS_BINDING)
- {
- IDENTIFIER_NAMESPACE_BINDINGS (name) = val;
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
- }
- }
- b = binding_for_name (name, scope);
- BINDING_VALUE (b) = val;
- timevar_pop (TV_NAME_LOOKUP);
-}
+ NULL_TREE, a list of "cxx_binding"s. */
/* Push into the scope of the NAME namespace. If NAME is NULL_TREE, then we
select a name that is unique to this compilation unit. */
@@ -2195,6 +2060,9 @@ push_namespace (tree name)
pushlevel (0);
declare_namespace_level ();
NAMESPACE_LEVEL (d) = current_binding_level;
+ VARRAY_TREE_INIT (current_binding_level->static_decls,
+ name != std_identifier ? 10 : 200,
+ "Static declarations");
}
}
else
@@ -2252,6 +2120,22 @@ pop_nested_namespace (tree ns)
}
+/* Allocate storage for saving a C++ binding. */
+#define cxx_saved_binding_make() \
+ (ggc_alloc (sizeof (cxx_saved_binding)))
+
+struct cxx_saved_binding GTY(())
+{
+ /* Link that chains saved C++ bindings for a given name into a stack. */
+ cxx_saved_binding *previous;
+ /* The name of the current binding. */
+ tree identifier;
+ /* The binding we're saving. */
+ cxx_binding *binding;
+ tree class_value;
+ tree real_type_value;
+};
+
/* Subroutines for reverting temporarily to top-level for instantiation
of templates and such. We actually need to clear out the class- and
local-value slots of all identifiers, so that only the global values
@@ -2259,16 +2143,18 @@ pop_nested_namespace (tree ns)
scope isn't enough, because more binding levels may be pushed. */
struct saved_scope *scope_chain;
-static tree
-store_bindings (tree names, tree old_bindings)
+static cxx_saved_binding *
+store_bindings (tree names, cxx_saved_binding *old_bindings)
{
tree t;
- tree search_bindings = old_bindings;
+ cxx_saved_binding *search_bindings = old_bindings;
timevar_push (TV_NAME_LOOKUP);
for (t = names; t; t = TREE_CHAIN (t))
{
- tree binding, t1, id;
+ tree id;
+ cxx_saved_binding *saved;
+ cxx_saved_binding *t1;
if (TREE_CODE (t) == TREE_LIST)
id = TREE_PURPOSE (t);
@@ -2282,20 +2168,20 @@ store_bindings (tree names, tree old_bindings)
|| !(IDENTIFIER_BINDING (id) || IDENTIFIER_CLASS_VALUE (id)))
continue;
- for (t1 = search_bindings; t1; t1 = TREE_CHAIN (t1))
- if (TREE_VEC_ELT (t1, 0) == id)
+ for (t1 = search_bindings; t1; t1 = t1->previous)
+ if (t1->identifier == id)
goto skip_it;
my_friendly_assert (TREE_CODE (id) == IDENTIFIER_NODE, 135);
- binding = make_tree_vec (4);
- TREE_VEC_ELT (binding, 0) = id;
- TREE_VEC_ELT (binding, 1) = REAL_IDENTIFIER_TYPE_VALUE (id);
- TREE_VEC_ELT (binding, 2) = IDENTIFIER_BINDING (id);
- TREE_VEC_ELT (binding, 3) = IDENTIFIER_CLASS_VALUE (id);
- IDENTIFIER_BINDING (id) = NULL_TREE;
+ saved = cxx_saved_binding_make ();
+ saved->previous = old_bindings;
+ saved->identifier = id;
+ saved->binding = IDENTIFIER_BINDING (id);
+ saved->class_value = IDENTIFIER_CLASS_VALUE (id);;
+ saved->real_type_value = REAL_IDENTIFIER_TYPE_VALUE (id);
+ IDENTIFIER_BINDING (id) = NULL;
IDENTIFIER_CLASS_VALUE (id) = NULL_TREE;
- TREE_CHAIN (binding) = old_bindings;
- old_bindings = binding;
+ old_bindings = saved;
skip_it:
;
}
@@ -2307,7 +2193,7 @@ maybe_push_to_top_level (int pseudo)
{
struct saved_scope *s;
struct cp_binding_level *b;
- tree old_bindings;
+ cxx_saved_binding *old_bindings;
int need_pop;
timevar_push (TV_NAME_LOOKUP);
@@ -2324,7 +2210,7 @@ maybe_push_to_top_level (int pseudo)
else
need_pop = 0;
- old_bindings = NULL_TREE;
+ old_bindings = NULL;
if (scope_chain && previous_class_type)
old_bindings = store_bindings (previous_class_values, old_bindings);
@@ -2377,7 +2263,7 @@ void
pop_from_top_level (void)
{
struct saved_scope *s = scope_chain;
- tree t;
+ cxx_saved_binding *saved;
timevar_push (TV_NAME_LOOKUP);
/* Clear out class-level bindings cache. */
@@ -2387,13 +2273,13 @@ pop_from_top_level (void)
current_lang_base = 0;
scope_chain = s->prev;
- for (t = s->old_bindings; t; t = TREE_CHAIN (t))
+ for (saved = s->old_bindings; saved; saved = saved->previous)
{
- tree id = TREE_VEC_ELT (t, 0);
+ tree id = saved->identifier;
- SET_IDENTIFIER_TYPE_VALUE (id, TREE_VEC_ELT (t, 1));
- IDENTIFIER_BINDING (id) = TREE_VEC_ELT (t, 2);
- IDENTIFIER_CLASS_VALUE (id) = TREE_VEC_ELT (t, 3);
+ IDENTIFIER_BINDING (id) = saved->binding;
+ IDENTIFIER_CLASS_VALUE (id) = saved->class_value;
+ SET_IDENTIFIER_TYPE_VALUE (id, saved->real_type_value);
}
/* If we were in the middle of compiling a function, restore our
@@ -2433,7 +2319,8 @@ set_identifier_type_value_with_scope (tree id,
}
else
{
- tree binding = binding_for_name (id, current_namespace);
+ cxx_binding *binding =
+ binding_for_name (NAMESPACE_LEVEL (current_namespace), id);
BINDING_TYPE (binding) = type;
/* Store marker instead of real type. */
type = global_type_node;
@@ -2610,7 +2497,8 @@ push_local_name (tree decl)
DECL_DISCRIMINATOR (decl) = 1;
VARRAY_TREE (local_names, i) = decl;
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
}
}
@@ -3062,6 +2950,10 @@ duplicate_decls (tree newdecl, tree olddecl)
/* Replace the old RTL to avoid problems with inlining. */
SET_DECL_RTL (olddecl, DECL_RTL (newdecl));
}
+ /* Even if the types match, prefer the new declarations type
+ for anitipated built-ins, for exception lists, etc... */
+ else if (DECL_ANTICIPATED (olddecl))
+ TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
{
@@ -3531,7 +3423,10 @@ duplicate_decls (tree newdecl, tree olddecl)
DECL_BEFRIENDING_CLASSES (newdecl)
= chainon (DECL_BEFRIENDING_CLASSES (newdecl),
DECL_BEFRIENDING_CLASSES (olddecl));
- DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
+ /* DECL_THUNKS is only valid for virtual functions,
+ otherwise it is a DECL_FRIEND_CONTEXT. */
+ if (DECL_VIRTUAL_P (newdecl))
+ DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
}
}
@@ -4080,7 +3975,9 @@ pushdecl (tree x)
if (oldlocal != NULL_TREE && !DECL_EXTERNAL (x)
/* Inline decls shadow nothing. */
&& !DECL_FROM_INLINE (x)
- && TREE_CODE (oldlocal) == PARM_DECL)
+ && TREE_CODE (oldlocal) == PARM_DECL
+ /* Don't check the `this' parameter. */
+ && !DECL_ARTIFICIAL (oldlocal))
{
bool err = false;
@@ -4105,7 +4002,8 @@ pushdecl (tree x)
}
if (warn_shadow && !err)
- shadow_warning ("a parameter", name, oldlocal);
+ shadow_warning (SW_PARAM, false,
+ IDENTIFIER_POINTER (name), oldlocal);
}
/* Maybe warn if shadowing something else. */
@@ -4122,11 +4020,13 @@ pushdecl (tree x)
IDENTIFIER_POINTER (name));
else if (oldlocal != NULL_TREE
&& TREE_CODE (oldlocal) == VAR_DECL)
- shadow_warning ("a previous local", name, oldlocal);
+ shadow_warning (SW_LOCAL, false,
+ IDENTIFIER_POINTER (name), oldlocal);
else if (oldglobal != NULL_TREE
&& TREE_CODE (oldglobal) == VAR_DECL)
/* XXX shadow warnings in outer-more namespaces */
- shadow_warning ("a global declaration", name, oldglobal);
+ shadow_warning (SW_GLOBAL, false,
+ IDENTIFIER_POINTER (name), oldglobal);
}
}
@@ -4302,12 +4202,15 @@ maybe_push_decl (tree decl)
void
push_class_level_binding (tree name, tree x)
{
- tree binding;
+ cxx_binding *binding;
timevar_push (TV_NAME_LOOKUP);
/* The class_binding_level will be NULL if x is a template
parameter name in a member template. */
if (!class_binding_level)
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ {
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
+ }
/* Make sure that this new member does not have the same name
as a template parameter. */
@@ -4357,7 +4260,8 @@ push_class_level_binding (tree name, tree x)
INHERITED_VALUE_BINDING_P (binding) = 0;
TREE_TYPE (shadow) = x;
IDENTIFIER_CLASS_VALUE (name) = x;
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
}
}
@@ -4417,14 +4321,15 @@ push_using_directive (tree used)
if (purpose_member (used, ud) != NULL_TREE)
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, NULL_TREE);
- /* Recursively add all namespaces used. */
- for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
- push_using_directive (TREE_PURPOSE (iter));
-
ancestor = namespace_ancestor (current_decl_namespace (), used);
ud = current_binding_level->using_directives;
ud = tree_cons (used, ancestor, ud);
current_binding_level->using_directives = ud;
+
+ /* Recursively add all namespaces used. */
+ for (iter = DECL_NAMESPACE_USING (used); iter; iter = TREE_CHAIN (iter))
+ push_using_directive (TREE_PURPOSE (iter));
+
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ud);
}
@@ -4529,7 +4434,7 @@ push_overloaded_decl (tree decl, int flags)
{
tree *d;
- for (d = &BINDING_LEVEL (IDENTIFIER_BINDING (name))->names;
+ for (d = &BINDING_SCOPE (IDENTIFIER_BINDING (name))->names;
*d;
d = &TREE_CHAIN (*d))
if (*d == old
@@ -4544,7 +4449,7 @@ push_overloaded_decl (tree decl, int flags)
*d = tree_cons (NULL_TREE, new_binding,
TREE_CHAIN (*d));
- /* And update the CPLUS_BINDING node. */
+ /* And update the cxx_binding node. */
BINDING_VALUE (IDENTIFIER_BINDING (name))
= new_binding;
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, decl);
@@ -5198,7 +5103,7 @@ follow_tag_typedef (tree type)
/* Given NAME, an IDENTIFIER_NODE,
return the structure (or union or enum) definition for that name.
- Searches binding levels from BINDING_LEVEL up to the global level.
+ Searches binding levels from BINDING_SCOPE up to the global level.
If THISLEVEL_ONLY is nonzero, searches only the specified context
(but skips any tag-transparent contexts to find one that is
meaningful for tags).
@@ -5208,10 +5113,8 @@ follow_tag_typedef (tree type)
reported. */
static tree
-lookup_tag (enum tree_code form,
- tree name,
- struct cp_binding_level* binding_level,
- int thislevel_only)
+lookup_tag (enum tree_code form, tree name,
+ struct cp_binding_level* binding_level, int thislevel_only)
{
register struct cp_binding_level *level;
/* Nonzero if, we should look past a template parameter level, even
@@ -5234,18 +5137,22 @@ lookup_tag (enum tree_code form,
/* Do namespace lookup. */
for (tail = current_namespace; 1; tail = CP_DECL_CONTEXT (tail))
{
- tree old = binding_for_name (name, tail);
+ cxx_binding *binding =
+ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (tail), name);
+ tree old;
/* If we just skipped past a template parameter level,
even though THISLEVEL_ONLY, and we find a template
class declaration, then we use the _TYPE node for the
template. See the example below. */
if (thislevel_only && !allow_template_parms_p
- && old && BINDING_VALUE (old)
- && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (old)))
- old = TREE_TYPE (BINDING_VALUE (old));
- else
- old = BINDING_TYPE (old);
+ && binding && BINDING_VALUE (binding)
+ && DECL_CLASS_TEMPLATE_P (BINDING_VALUE (binding)))
+ old = TREE_TYPE (BINDING_VALUE (binding));
+ else if (binding)
+ old = BINDING_TYPE (binding);
+ else
+ old = NULL_TREE;
if (old)
{
@@ -5345,6 +5252,7 @@ lookup_namespace_name (tree namespace, tree name)
{
tree val;
tree template_id = NULL_TREE;
+ cxx_binding binding;
timevar_push (TV_NAME_LOOKUP);
my_friendly_assert (TREE_CODE (namespace) == NAMESPACE_DECL, 370);
@@ -5374,13 +5282,13 @@ lookup_namespace_name (tree namespace, tree name)
my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE, 373);
- val = make_node (CPLUS_BINDING);
- if (!qualified_lookup_using_namespace (name, namespace, val, 0))
+ cxx_binding_clear (&binding);
+ if (!qualified_lookup_using_namespace (name, namespace, &binding, 0))
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
- if (BINDING_VALUE (val))
+ if (binding.value)
{
- val = BINDING_VALUE (val);
+ val = binding.value;
if (template_id)
{
@@ -5695,7 +5603,7 @@ make_unbound_class_template (tree context, tree name, tsubst_flags_t complain)
/* Select the right _DECL from multiple choices. */
static tree
-select_decl (tree binding, int flags)
+select_decl (cxx_binding *binding, int flags)
{
tree val;
val = BINDING_VALUE (binding);
@@ -5731,44 +5639,43 @@ select_decl (tree binding, int flags)
tree
unqualified_namespace_lookup (tree name, int flags, tree* spacesp)
{
- tree b = make_node (CPLUS_BINDING);
tree initial = current_decl_namespace ();
tree scope = initial;
tree siter;
struct cp_binding_level *level;
tree val = NULL_TREE;
+ cxx_binding binding;
timevar_push (TV_NAME_LOOKUP);
+ cxx_binding_clear (&binding);
if (spacesp)
*spacesp = NULL_TREE;
for (; !val; scope = CP_DECL_CONTEXT (scope))
{
+ cxx_binding *b =
+ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
if (spacesp)
*spacesp = tree_cons (scope, NULL_TREE, *spacesp);
- val = binding_for_name (name, scope);
/* Ignore anticipated built-in functions. */
- if (val && BINDING_VALUE (val)
- && DECL_P (BINDING_VALUE (val))
- && DECL_LANG_SPECIFIC (BINDING_VALUE (val))
- && DECL_ANTICIPATED (BINDING_VALUE (val)))
- {
- BINDING_VALUE (b) = NULL_TREE;
- BINDING_TYPE (b) = NULL_TREE;
- }
- else
+ if (b && BINDING_VALUE (b)
+ && DECL_P (BINDING_VALUE (b))
+ && DECL_LANG_SPECIFIC (BINDING_VALUE (b))
+ && DECL_ANTICIPATED (BINDING_VALUE (b)))
+ /* Keep binding cleared. */;
+ else if (b)
{
/* Initialize binding for this context. */
- BINDING_VALUE (b) = BINDING_VALUE (val);
- BINDING_TYPE (b) = BINDING_TYPE (val);
+ binding.value = BINDING_VALUE (b);
+ binding.type = BINDING_TYPE (b);
}
/* Add all _DECLs seen through local using-directives. */
for (level = current_binding_level;
!level->namespace_p;
level = level->level_chain)
- if (!lookup_using_namespace (name, b, level->using_directives,
+ if (!lookup_using_namespace (name, &binding, level->using_directives,
scope, flags, spacesp))
/* Give up because of error. */
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
@@ -5778,7 +5685,8 @@ unqualified_namespace_lookup (tree name, int flags, tree* spacesp)
siter = initial;
while (1)
{
- if (!lookup_using_namespace (name, b, DECL_NAMESPACE_USING (siter),
+ if (!lookup_using_namespace (name, &binding,
+ DECL_NAMESPACE_USING (siter),
scope, flags, spacesp))
/* Give up because of error. */
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
@@ -5786,7 +5694,7 @@ unqualified_namespace_lookup (tree name, int flags, tree* spacesp)
siter = CP_DECL_CONTEXT (siter);
}
- val = select_decl (b, flags);
+ val = select_decl (&binding, flags);
if (scope == global_namespace)
break;
}
@@ -5836,15 +5744,15 @@ lookup_qualified_name (tree scope, tree name, bool is_type_p, int flags)
{
if (TREE_CODE (scope) == NAMESPACE_DECL)
{
- tree val;
+ cxx_binding binding;
- val = make_node (CPLUS_BINDING);
+ cxx_binding_clear (&binding);
flags |= LOOKUP_COMPLAIN;
if (is_type_p)
flags |= LOOKUP_PREFER_TYPES;
- if (!qualified_lookup_using_namespace (name, scope, val, flags))
+ if (!qualified_lookup_using_namespace (name, scope, &binding, flags))
return NULL_TREE;
- return select_decl (val, flags);
+ return select_decl (&binding, flags);
}
else
return lookup_member (scope, name, 0, is_type_p);
@@ -5923,13 +5831,10 @@ check_for_out_of_scope_variable (tree decl)
using IDENTIFIER_CLASS_VALUE. */
tree
-lookup_name_real (tree name,
- int prefer_type,
- int nonclass,
- int namespaces_only,
- int flags)
+lookup_name_real (tree name, int prefer_type, int nonclass,
+ int namespaces_only, int flags)
{
- tree t;
+ cxx_binding *iter;
tree val = NULL_TREE;
timevar_push (TV_NAME_LOOKUP);
@@ -5969,20 +5874,20 @@ lookup_name_real (tree name,
if (current_class_type == NULL_TREE)
nonclass = 1;
- for (t = IDENTIFIER_BINDING (name); t; t = TREE_CHAIN (t))
+ for (iter = IDENTIFIER_BINDING (name); iter; iter = iter->previous)
{
tree binding;
- if (!LOCAL_BINDING_P (t) && nonclass)
+ if (!LOCAL_BINDING_P (iter) && nonclass)
/* We're not looking for class-scoped bindings, so keep going. */
continue;
/* If this is the kind of thing we're looking for, we're done. */
- if (qualify_lookup (BINDING_VALUE (t), flags))
- binding = BINDING_VALUE (t);
+ if (qualify_lookup (BINDING_VALUE (iter), flags))
+ binding = BINDING_VALUE (iter);
else if ((flags & LOOKUP_PREFER_TYPES)
- && qualify_lookup (BINDING_TYPE (t), flags))
- binding = BINDING_TYPE (t);
+ && qualify_lookup (BINDING_TYPE (iter), flags))
+ binding = BINDING_TYPE (iter);
else
binding = NULL_TREE;
@@ -5996,7 +5901,7 @@ lookup_name_real (tree name,
/* Now lookup in namespace scopes. */
if (!val)
{
- t = unqualified_namespace_lookup (name, flags, 0);
+ tree t = unqualified_namespace_lookup (name, flags, 0);
if (t)
val = t;
}
@@ -6056,7 +5961,7 @@ lookup_name_current_level (tree name)
{
while (1)
{
- if (BINDING_LEVEL (IDENTIFIER_BINDING (name)) == b)
+ if (BINDING_SCOPE (IDENTIFIER_BINDING (name)) == b)
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, IDENTIFIER_VALUE (name));
if (b->keep == 2)
@@ -6305,6 +6210,10 @@ cxx_init_decl_processing (void)
NAMESPACE_LEVEL (global_namespace) = global_binding_level;
declare_namespace_level ();
+ VARRAY_TREE_INIT (global_binding_level->static_decls,
+ 200,
+ "Static declarations");
+
/* Create the `std' namespace. */
push_namespace (std_identifier);
std_node = current_namespace;
@@ -7288,10 +7197,7 @@ grok_reference_init (tree decl, tree type, tree init)
DECL_INITIAL for local references (instead assigning to them
explicitly); we need to allow the temporary to be initialized
first. */
- tmp = convert_to_reference
- (type, init, CONV_IMPLICIT,
- LOOKUP_ONLYCONVERTING|LOOKUP_SPECULATIVELY|LOOKUP_NORMAL|DIRECT_BIND,
- decl);
+ tmp = initialize_reference (type, init, decl);
if (tmp == error_mark_node)
return NULL_TREE;
@@ -7772,6 +7678,12 @@ check_initializer (tree decl, tree init, int flags)
scalar, so just don't call it. */
if (CP_AGGREGATE_TYPE_P (type))
init = reshape_init (type, &init);
+
+ if ((*targetm.vector_opaque_p) (type))
+ {
+ error ("opaque vector types cannot be initialized");
+ init = error_mark_node;
+ }
}
/* If DECL has an array type without a specific bound, deduce the
@@ -7939,13 +7851,19 @@ maybe_inject_for_scope_var (tree decl)
{
timevar_push (TV_NAME_LOOKUP);
if (!DECL_NAME (decl))
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ {
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
+ }
/* Declarations of __FUNCTION__ and its ilk appear magically when
the variable is first used. If that happens to be inside a
for-loop, we don't want to do anything special. */
if (DECL_PRETTY_FUNCTION_P (decl))
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ {
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
+ }
if (current_binding_level->is_for_scope)
{
@@ -7961,12 +7879,11 @@ maybe_inject_for_scope_var (tree decl)
Otherwise, we need to preserve the temp slot for decl to last
into the outer binding level. */
- tree outer_binding
- = TREE_CHAIN (IDENTIFIER_BINDING (DECL_NAME (decl)));
+ cxx_binding *outer_binding
+ = IDENTIFIER_BINDING (DECL_NAME (decl))->previous;
- if (outer_binding && BINDING_LEVEL (outer_binding) == outer
- && (TREE_CODE (BINDING_VALUE (outer_binding))
- == VAR_DECL)
+ if (outer_binding && BINDING_SCOPE (outer_binding) == outer
+ && (TREE_CODE (BINDING_VALUE (outer_binding)) == VAR_DECL)
&& DECL_DEAD_FOR_LOCAL (BINDING_VALUE (outer_binding)))
{
BINDING_VALUE (outer_binding)
@@ -8955,13 +8872,19 @@ grokfndecl (tree ctype,
DECL_NOT_REALLY_EXTERN (decl) = 1;
}
+ DID_INLINE_FUNC (decl) = 0;
/* If the declaration was declared inline, mark it as such. */
if (inlinep)
DECL_DECLARED_INLINE_P (decl) = 1;
/* We inline functions that are explicitly declared inline, or, when
the user explicitly asks us to, all functions. */
- if (DECL_DECLARED_INLINE_P (decl) || flag_inline_trees == 2)
+ if (DECL_DECLARED_INLINE_P (decl))
DECL_INLINE (decl) = 1;
+ if (flag_inline_trees == 2 && !DECL_INLINE (decl))
+ {
+ DID_INLINE_FUNC (decl) = 1;
+ DECL_INLINE (decl) = 1;
+ }
DECL_EXTERNAL (decl) = 1;
if (quals != NULL_TREE && TREE_CODE (type) == FUNCTION_TYPE)
@@ -9098,6 +9021,8 @@ grokfndecl (tree ctype,
if (old_decl)
{
+ bool ok;
+
/* Since we've smashed OLD_DECL to its
DECL_TEMPLATE_RESULT, we must do the same to DECL. */
if (TREE_CODE (decl) == TEMPLATE_DECL)
@@ -9106,10 +9031,14 @@ grokfndecl (tree ctype,
/* Attempt to merge the declarations. This can fail, in
the case of some invalid specialization declarations. */
push_scope (ctype);
- if (!duplicate_decls (decl, old_decl))
- error ("no `%#D' member function declared in class `%T'",
- decl, ctype);
+ ok = duplicate_decls (decl, old_decl);
pop_scope (ctype);
+ if (!ok)
+ {
+ error ("no `%#D' member function declared in class `%T'",
+ decl, ctype);
+ return NULL_TREE;
+ }
return old_decl;
}
}
@@ -11633,18 +11562,15 @@ grokdeclarator (tree declarator,
return void_type_node;
}
- /* 9.2p13 [class.mem] */
- if (constructor_name_p (declarator, current_class_type)
- /* The standard does not allow non-static data members
- here either, but we agreed at the 10/99 meeting
- to change that in TC 1 so that they are allowed in
- classes with no user-defined constructors. */
- && staticp)
- pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
- declarator);
-
if (staticp)
{
+ /* [class.mem] forbids static data members with the
+ same name as the enclosing class. Non-static data
+ members are checked in check_field_decls. */
+ if (constructor_name_p (declarator, current_class_type))
+ pedwarn ("ISO C++ forbids static data member `%D' with same name as enclosing class",
+ declarator);
+
/* C++ allows static class members. All other work
for this is done by grokfield. */
decl = build_lang_decl (VAR_DECL, declarator, type);
@@ -13063,10 +12989,14 @@ finish_enum (tree enumtype)
/* We built up the VALUES in reverse order. */
TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
- /* For an enum defined in a template, all further processing is
- postponed until the template is instantiated. */
+ /* For an enum defined in a template, just set the type of the values;
+ all further processing is postponed until the template is
+ instantiated. We need to set the type so that tsubst of a CONST_DECL
+ works. */
if (processing_template_decl)
{
+ for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
+ TREE_TYPE (TREE_VALUE (pair)) = enumtype;
if (at_function_scope_p ())
add_stmt (build_min (TAG_DEFN, enumtype));
return;
@@ -13074,49 +13004,46 @@ finish_enum (tree enumtype)
if (TYPE_VALUES (enumtype))
{
- /* Initialize min and max values and figure out actual values in
- following 'for' loop. */
minnode = maxnode = NULL_TREE;
- /* [dcl.enum]
-
- Following the closing brace of an enum-specifier, each
- enumerator has the type of its enumeration. Prior to the
- closing brace, the type of each enumerator is the type of
- its initializing value. */
for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
{
-
- tree value;
-
- /* If we are going to reset type then copy node first.
- It cannot be shared now. */
- if (TREE_TYPE (TREE_VALUE (pair)) != enumtype)
+ tree decl = TREE_VALUE (pair);
+ tree value = DECL_INITIAL (decl);
+
+ /* [dcl.enum]: Following the closing brace of an enum-specifier,
+ each enumerator has the type of its enumeration. Prior to the
+ closing brace, the type of each enumerator is the type of its
+ initializing value. */
+ TREE_TYPE (decl) = enumtype;
+
+ /* Figure out what the minimum and maximum values of the
+ enumerators are. */
+ if (!minnode)
+ minnode = maxnode = value;
+ else if (tree_int_cst_lt (maxnode, value))
+ maxnode = value;
+ else if (tree_int_cst_lt (value, minnode))
+ minnode = value;
+
+ /* Set the TREE_TYPE for the values as well. That's so that when
+ we call decl_constant_value we get an entity of the right type
+ (but with the constant value). But first make a copy so we
+ don't clobber shared INTEGER_CSTs. */
+ if (TREE_TYPE (value) != enumtype)
{
- if (DECL_INITIAL (TREE_VALUE (pair)))
- DECL_INITIAL (TREE_VALUE (pair)) =
- copy_node (DECL_INITIAL (TREE_VALUE (pair)));
- TREE_TYPE (TREE_VALUE (pair)) = enumtype;
+ value = DECL_INITIAL (decl) = copy_node (value);
+ TREE_TYPE (value) = enumtype;
}
- if (!processing_template_decl)
- {
- /* Adjust min and max value. */
- value = DECL_INITIAL (TREE_VALUE (pair));
-
- if (!minnode)
- minnode = maxnode = value;
- else if (tree_int_cst_lt (maxnode, value))
- maxnode = value;
- else if (tree_int_cst_lt (value, minnode))
- minnode = value;
- }
+ /* In addition, transform the TYPE_VALUES list to contain the
+ values, rather than the CONST_DECLs for them. */
+ TREE_VALUE (pair) = value;
}
}
else
minnode = maxnode = integer_zero_node;
-
/* Compute the number of bits require to represent all values of the
enumeration. We must do this before the type of MINNODE and
MAXNODE are transformed, since min_precision relies on the
@@ -13126,18 +13053,6 @@ finish_enum (tree enumtype)
highprec = min_precision (maxnode, unsignedp);
precision = MAX (lowprec, highprec);
- /* Set the TREE_TYPE for the values as well. That's so that when we
- call decl_constant_value we get an entity of the right type (but
- with the constant value). In addition, transform the TYPE_VALUES
- list to contain the values, rather than the CONST_DECLs for them. */
- for (pair = TYPE_VALUES (enumtype); pair; pair = TREE_CHAIN (pair))
- {
- tree value = DECL_INITIAL (TREE_VALUE (pair));
-
- TREE_TYPE (value) = enumtype;
- TREE_VALUE (pair) = value;
- }
-
/* Set TYPE_MIN_VALUE and TYPE_MAX_VALUE according to `precision'. */
TYPE_SIZE (enumtype) = NULL_TREE;
TYPE_PRECISION (enumtype) = precision;
@@ -13232,8 +13147,7 @@ build_enumerator (tree name, tree value, tree enumtype)
}
/* Remove no-op casts from the value. */
- if (value)
- STRIP_TYPE_NOPS (value);
+ STRIP_TYPE_NOPS (value);
}
/* C++ associates enums with global, function, or class declarations. */
@@ -13264,8 +13178,8 @@ build_enumerator (tree name, tree value, tree enumtype)
decl = build_decl (CONST_DECL, name, type);
DECL_CONTEXT (decl) = FROB_CONTEXT (context);
+ TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
DECL_INITIAL (decl) = value;
- TREE_READONLY (decl) = 1;
if (context && context == current_class_type)
/* In something like `struct S { enum E { i = 7 }; };' we put `i'
@@ -13542,6 +13456,9 @@ start_function (tree declspecs, tree declarator, tree attrs, int flags)
/* Start the statement-tree, start the tree now. */
begin_stmt_tree (&DECL_SAVED_TREE (decl1));
+ /* Don't double-count statements in templates. */
+ DECL_NUM_STMTS (decl1) = 0;
+
/* Let the user know we're compiling this function. */
announce_function (decl1);
@@ -14076,11 +13993,21 @@ finish_function (int flags)
if (current_function_return_value)
{
tree r = current_function_return_value;
- /* This is only worth doing for fns that return in memory--and
- simpler, since we don't have to worry about promoted modes. */
+ tree outer;
+
if (r != error_mark_node
- && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl))))
+ /* This is only worth doing for fns that return in memory--and
+ simpler, since we don't have to worry about promoted modes. */
+ && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)))
+ /* Only allow this for variables declared in the outer scope of
+ the function so we know that their lifetime always ends with a
+ return; see g++.dg/opt/nrv6.C. We could be more flexible if
+ we were to do this optimization in tree-ssa. */
+ /* Skip the artificial function body block. */
+ && (outer = BLOCK_SUBBLOCKS (BLOCK_SUBBLOCKS (DECL_INITIAL (fndecl))),
+ chain_member (r, BLOCK_VARS (outer))))
{
+
DECL_ALIGN (r) = DECL_ALIGN (DECL_RESULT (fndecl));
walk_tree_without_duplicates (&DECL_SAVED_TREE (fndecl),
nullify_returns_r, r);
@@ -14233,6 +14160,7 @@ start_method (tree declspecs, tree declarator, tree attrlist)
DECL_DECLARED_INLINE_P (fndecl) = 1;
+ DID_INLINE_FUNC (fndecl) = 0;
if (flag_default_inline)
DECL_INLINE (fndecl) = 1;
@@ -14488,7 +14416,6 @@ cp_tree_node_structure (union lang_tree_node * t)
{
case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
- case CPLUS_BINDING: return TS_CP_BINDING;
case OVERLOAD: return TS_CP_OVERLOAD;
case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
case PTRMEM_CST: return TS_CP_PTRMEM;
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 0d507d291e5..993f931bc50 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -64,9 +64,8 @@ typedef struct priority_info_s {
static void mark_vtable_entries (tree);
static void grok_function_init (tree, tree);
static bool maybe_emit_vtables (tree);
-static bool is_namespace_ancestor (tree, tree);
static void add_using_namespace (tree, tree, bool);
-static tree ambiguous_decl (tree, tree, tree,int);
+static cxx_binding *ambiguous_decl (tree, cxx_binding *, cxx_binding *, int);
static tree build_anon_union_vars (tree);
static bool acceptable_java_type (tree);
static void output_vtable_inherit (tree);
@@ -658,6 +657,7 @@ tree
check_classfn (tree ctype, tree function)
{
int ix;
+ int is_template;
if (DECL_USE_TEMPLATE (function)
&& !(TREE_CODE (function) == TEMPLATE_DECL
@@ -675,6 +675,10 @@ check_classfn (tree ctype, tree function)
find the method, but we don't complain. */
return NULL_TREE;
+ /* OK, is this a definition of a member template? */
+ is_template = (TREE_CODE (function) == TEMPLATE_DECL
+ || (processing_template_decl - template_class_depth (ctype)));
+
ix = lookup_fnfields_1 (complete_type (ctype),
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
DECL_DESTRUCTOR_P (function) ? dtor_identifier :
@@ -707,6 +711,11 @@ check_classfn (tree ctype, tree function)
if (DECL_STATIC_FUNCTION_P (fndecl)
&& TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
p1 = TREE_CHAIN (p1);
+
+ /* A member template definition only matches a member template
+ declaration. */
+ if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
+ continue;
if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
TREE_TYPE (TREE_TYPE (fndecl)))
@@ -2487,15 +2496,16 @@ generate_ctor_or_dtor_function (bool constructor_p, int priority)
/* Call the static storage duration function with appropriate
arguments. */
- for (i = 0; i < ssdf_decls->elements_used; ++i)
- {
- arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0),
- NULL_TREE);
- arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
- arguments);
- finish_expr_stmt (build_function_call (VARRAY_TREE (ssdf_decls, i),
- arguments));
- }
+ if (ssdf_decls)
+ for (i = 0; i < ssdf_decls->elements_used; ++i)
+ {
+ arguments = tree_cons (NULL_TREE, build_int_2 (priority, 0),
+ NULL_TREE);
+ arguments = tree_cons (NULL_TREE, build_int_2 (constructor_p, 0),
+ arguments);
+ finish_expr_stmt (build_function_call (VARRAY_TREE (ssdf_decls, i),
+ arguments));
+ }
/* If we're generating code for the DEFAULT_INIT_PRIORITY, throw in
calls to any functions marked with attributes indicating that
@@ -2503,7 +2513,7 @@ generate_ctor_or_dtor_function (bool constructor_p, int priority)
if (priority == DEFAULT_INIT_PRIORITY)
{
tree fns;
-
+
for (fns = constructor_p ? static_ctors : static_dtors;
fns;
fns = TREE_CHAIN (fns))
@@ -2588,6 +2598,7 @@ finish_file ()
do
{
tree t;
+ size_t n_old, n_new;
reconsider = false;
@@ -2604,7 +2615,7 @@ finish_file ()
while (keyed_classes != NULL_TREE
&& maybe_emit_vtables (TREE_VALUE (keyed_classes)))
{
- reconsider = 1;
+ reconsider = true;
keyed_classes = TREE_CHAIN (keyed_classes);
}
@@ -2617,7 +2628,7 @@ finish_file ()
{
if (maybe_emit_vtables (TREE_VALUE (next)))
{
- reconsider = 1;
+ reconsider = true;
TREE_CHAIN (t) = TREE_CHAIN (next);
}
else
@@ -2627,10 +2638,34 @@ finish_file ()
}
}
- /* Write out needed type info variables. Writing out one variable
- might cause others to be needed. */
- if (walk_globals (unemitted_tinfo_decl_p, emit_tinfo_decl, /*data=*/0))
- reconsider = true;
+ /* Write out needed type info variables. We have to be careful
+ looping through unemitted decls, because emit_tinfo_decl may
+ cause other variables to be needed. We stick new elements
+ (and old elements that we may need to reconsider) at the end
+ of the array, then shift them back to the beginning once we're
+ done. */
+
+ n_old = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls);
+ for (i = 0; i < n_old; ++i)
+ {
+ tree tinfo_decl = VARRAY_TREE (unemitted_tinfo_decls, i);
+ if (emit_tinfo_decl (tinfo_decl))
+ reconsider = true;
+ else
+ VARRAY_PUSH_TREE (unemitted_tinfo_decls, tinfo_decl);
+ }
+
+ /* The only elements we want to keep are the new ones. Copy
+ them to the beginning of the array, then get rid of the
+ leftovers. */
+ n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
+ memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
+ &VARRAY_TREE (unemitted_tinfo_decls, n_old),
+ n_new * sizeof (tree));
+ memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
+ 0,
+ n_old * sizeof (tree));
+ VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
/* The list of objects with static storage duration is built up
in reverse order. We clear STATIC_AGGREGATES so that any new
@@ -2782,7 +2817,11 @@ finish_file ()
tree decl = VARRAY_TREE (deferred_fns, i);
if (TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
- && !(TREE_ASM_WRITTEN (decl) || DECL_SAVED_TREE (decl)))
+ && !(TREE_ASM_WRITTEN (decl) || DECL_SAVED_TREE (decl)
+ /* An explicit instantiation can be used to specify
+ that the body is in another unit. It will have
+ already verified there was a definition. */
+ || DECL_EXPLICIT_INSTANTIATION (decl)))
{
cp_warning_at ("inline function `%D' used but never defined", decl);
/* This symbol is effectively an "extern" declaration now.
@@ -2806,6 +2845,15 @@ finish_file ()
splay_tree_foreach (priority_info_map,
generate_ctor_and_dtor_functions_for_priority,
/*data=*/0);
+ else
+ {
+ if (static_ctors)
+ generate_ctor_or_dtor_function (/*constructor_p=*/true,
+ DEFAULT_INIT_PRIORITY);
+ if (static_dtors)
+ generate_ctor_or_dtor_function (/*constructor_p=*/false,
+ DEFAULT_INIT_PRIORITY);
+ }
/* We're done with the splay-tree now. */
if (priority_info_map)
@@ -3284,15 +3332,16 @@ build_offset_ref_call_from_tree (tree fn, tree args)
/* This code is not really correct (for example, it does not
handle the case that `A::f' is overloaded), but it is
historically how we have handled this situation. */
- object_addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (fn, 0), 0);
if (TREE_CODE (TREE_OPERAND (fn, 1)) == FIELD_DECL)
- fn = resolve_offset_ref (fn);
+ /* This case should now be handled elsewhere. */
+ abort ();
else
{
+ object_addr = build_unary_op (ADDR_EXPR, TREE_OPERAND (fn, 0), 0);
fn = TREE_OPERAND (fn, 1);
fn = get_member_function_from_ptrfunc (&object_addr, fn);
+ args = tree_cons (NULL_TREE, object_addr, args);
}
- args = tree_cons (NULL_TREE, object_addr, args);
return build_function_call (fn, args);
}
@@ -3358,18 +3407,36 @@ build_call_from_tree (tree fn, tree args, bool disallow_virtual)
return finish_call_expr (fn, args, disallow_virtual);
}
-/* Return 1 if root encloses child. */
+/* Returns true if ROOT (a namespace, class, or function) encloses
+ CHILD. CHILD may be either a class type or a namespace. */
-static bool
-is_namespace_ancestor (tree root, tree child)
+bool
+is_ancestor (tree root, tree child)
{
- if (root == child)
- return true;
+ my_friendly_assert ((TREE_CODE (root) == NAMESPACE_DECL
+ || TREE_CODE (root) == FUNCTION_DECL
+ || CLASS_TYPE_P (root)), 20030307);
+ my_friendly_assert ((TREE_CODE (child) == NAMESPACE_DECL
+ || CLASS_TYPE_P (child)),
+ 20030307);
+
+ /* The global namespace encloses everything. */
if (root == global_namespace)
return true;
- if (child == global_namespace)
- return false;
- return is_namespace_ancestor (root, CP_DECL_CONTEXT (child));
+
+ while (true)
+ {
+ /* If we've run out of scopes, stop. */
+ if (!child)
+ return false;
+ /* If we've reached the ROOT, it encloses CHILD. */
+ if (root == child)
+ return true;
+ /* Go out one level. */
+ if (TYPE_P (child))
+ child = TYPE_NAME (child);
+ child = DECL_CONTEXT (child);
+ }
}
@@ -3380,7 +3447,7 @@ tree
namespace_ancestor (tree ns1, tree ns2)
{
timevar_push (TV_NAME_LOOKUP);
- if (is_namespace_ancestor (ns1, ns2))
+ if (is_ancestor (ns1, ns2))
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ns1);
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
namespace_ancestor (CP_DECL_CONTEXT (ns1), ns2));
@@ -3396,7 +3463,10 @@ add_using_namespace (tree user, tree used, bool indirect)
timevar_push (TV_NAME_LOOKUP);
/* Using oneself is a no-op. */
if (user == used)
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ {
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
+ }
my_friendly_assert (TREE_CODE (user) == NAMESPACE_DECL, 380);
my_friendly_assert (TREE_CODE (used) == NAMESPACE_DECL, 380);
/* Check if we already have this. */
@@ -3406,7 +3476,8 @@ add_using_namespace (tree user, tree used, bool indirect)
if (!indirect)
/* Promote to direct usage. */
TREE_INDIRECT_USING (t) = 0;
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, (void)0);
+ timevar_pop (TV_NAME_LOOKUP);
+ return;
}
/* Add used to the user's using list. */
@@ -3475,11 +3546,11 @@ merge_functions (tree s1, tree s2)
XXX In what way should I treat extern declarations?
XXX I don't want to repeat the entire duplicate_decls here */
-static tree
-ambiguous_decl (tree name, tree old, tree new, int flags)
+static cxx_binding *
+ambiguous_decl (tree name, cxx_binding *old, cxx_binding *new, int flags)
{
tree val, type;
- my_friendly_assert (old != NULL_TREE, 393);
+ my_friendly_assert (old != NULL, 393);
/* Copy the value. */
val = BINDING_VALUE (new);
if (val)
@@ -3514,12 +3585,8 @@ ambiguous_decl (tree name, tree old, tree new, int flags)
BINDING_VALUE (old) = val;
else if (val && val != BINDING_VALUE (old))
{
- if (is_overloaded_fn (BINDING_VALUE (old))
- && is_overloaded_fn (val))
- {
- BINDING_VALUE (old) = merge_functions (BINDING_VALUE (old),
- val);
- }
+ if (is_overloaded_fn (BINDING_VALUE (old)) && is_overloaded_fn (val))
+ BINDING_VALUE (old) = merge_functions (BINDING_VALUE (old), val);
else
{
/* Some declarations are functions, some are not. */
@@ -3565,23 +3632,24 @@ ambiguous_decl (tree name, tree old, tree new, int flags)
Returns false on errors. */
bool
-lookup_using_namespace (tree name, tree val, tree usings, tree scope,
+lookup_using_namespace (tree name, cxx_binding *val, tree usings, tree scope,
int flags, tree *spacesp)
{
tree iter;
- tree val1;
timevar_push (TV_NAME_LOOKUP);
/* Iterate over all used namespaces in current, searching for using
directives of scope. */
for (iter = usings; iter; iter = TREE_CHAIN (iter))
if (TREE_VALUE (iter) == scope)
{
- if (spacesp)
- *spacesp = tree_cons (TREE_PURPOSE (iter), NULL_TREE,
- *spacesp);
- val1 = binding_for_name (name, TREE_PURPOSE (iter));
- /* Resolve ambiguities. */
- val = ambiguous_decl (name, val, val1, flags);
+ tree used = ORIGINAL_NAMESPACE (TREE_PURPOSE (iter));
+ cxx_binding *val1 =
+ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (used), name);
+ if (spacesp)
+ *spacesp = tree_cons (used, NULL_TREE, *spacesp);
+ /* Resolve ambiguities. */
+ if (val1)
+ val = ambiguous_decl (name, val, val1, flags);
}
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP,
BINDING_VALUE (val) != error_mark_node);
@@ -3589,11 +3657,11 @@ lookup_using_namespace (tree name, tree val, tree usings, tree scope,
/* [namespace.qual]
Accepts the NAME to lookup and its qualifying SCOPE.
- Returns the name/type pair found into the CPLUS_BINDING RESULT,
+ Returns the name/type pair found into the cxx_binding *RESULT,
or false on error. */
bool
-qualified_lookup_using_namespace (tree name, tree scope, tree result,
+qualified_lookup_using_namespace (tree name, tree scope, cxx_binding *result,
int flags)
{
/* Maintain a list of namespaces visited... */
@@ -3604,11 +3672,13 @@ qualified_lookup_using_namespace (tree name, tree scope, tree result,
timevar_push (TV_NAME_LOOKUP);
/* Look through namespace aliases. */
scope = ORIGINAL_NAMESPACE (scope);
- while (scope && (result != error_mark_node))
+ while (scope && result->value != error_mark_node)
{
+ cxx_binding *binding =
+ cxx_scope_find_binding_for_name (NAMESPACE_LEVEL (scope), name);
seen = tree_cons (scope, NULL_TREE, seen);
- result = ambiguous_decl (name, result,
- binding_for_name (name, scope), flags);
+ if (binding)
+ result = ambiguous_decl (name, result, binding, flags);
if (!BINDING_VALUE (result) && !BINDING_TYPE (result))
/* Consider using directives. */
for (usings = DECL_NAMESPACE_USING (scope); usings;
@@ -3625,7 +3695,7 @@ qualified_lookup_using_namespace (tree name, tree scope, tree result,
else
scope = NULL_TREE; /* If there never was a todo list. */
}
- POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result != error_mark_node);
+ POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, result->value != error_mark_node);
}
/* [namespace.memdef]/2 */
@@ -3642,7 +3712,7 @@ set_decl_namespace (tree decl, tree scope, bool friendp)
scope = ORIGINAL_NAMESPACE (scope);
/* It is ok for friends to be qualified in parallel space. */
- if (!friendp && !is_namespace_ancestor (current_namespace, scope))
+ if (!friendp && !is_ancestor (current_namespace, scope))
error ("declaration of `%D' not in a namespace surrounding `%D'",
decl, scope);
DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
@@ -3914,13 +3984,12 @@ arg_assoc_class (struct arg_lookup *k, tree type)
/* Process friends. */
for (list = DECL_FRIENDLIST (TYPE_MAIN_DECL (type)); list;
list = TREE_CHAIN (list))
- if (k->name == TREE_PURPOSE (list))
- for (friends = TREE_VALUE (list); friends;
+ if (k->name == FRIEND_NAME (list))
+ for (friends = FRIEND_DECLS (list); friends;
friends = TREE_CHAIN (friends))
/* Only interested in global functions with potentially hidden
(i.e. unqualified) declarations. */
- if (TREE_PURPOSE (friends) == error_mark_node && TREE_VALUE (friends)
- && decl_namespace (TREE_VALUE (friends)) == context)
+ if (CP_DECL_CONTEXT (TREE_VALUE (friends)) == context)
if (add_function (k, TREE_VALUE (friends)))
return true;
@@ -3943,6 +4012,8 @@ arg_assoc_type (struct arg_lookup *k, tree type)
{
switch (TREE_CODE (type))
{
+ case ERROR_MARK:
+ return false;
case VOID_TYPE:
case INTEGER_TYPE:
case REAL_TYPE:
@@ -4182,33 +4253,34 @@ static void
do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype,
tree *newval, tree *newtype)
{
- tree decls;
+ cxx_binding decls;
*newval = *newtype = NULL_TREE;
- decls = make_node (CPLUS_BINDING);
- if (!qualified_lookup_using_namespace (name, scope, decls, 0))
+ cxx_binding_clear (&decls);
+ if (!qualified_lookup_using_namespace (name, scope, &decls, 0))
/* Lookup error */
return;
- if (!BINDING_VALUE (decls) && !BINDING_TYPE (decls))
+ if (!decls.value && !decls.type)
{
error ("`%D' not declared", name);
return;
}
/* Check for using functions. */
- if (BINDING_VALUE (decls) && is_overloaded_fn (BINDING_VALUE (decls)))
+ if (decls.value && is_overloaded_fn (decls.value))
{
tree tmp, tmp1;
if (oldval && !is_overloaded_fn (oldval))
{
- duplicate_decls (OVL_CURRENT (BINDING_VALUE (decls)), oldval);
+ if (!DECL_IMPLICIT_TYPEDEF_P (oldval))
+ error ("`%D' is already declared in this scope", name);
oldval = NULL_TREE;
}
*newval = oldval;
- for (tmp = BINDING_VALUE (decls); tmp; tmp = OVL_NEXT (tmp))
+ for (tmp = decls.value; tmp; tmp = OVL_NEXT (tmp))
{
tree new_fn = OVL_CURRENT (tmp);
@@ -4230,21 +4302,27 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype,
else if (compparms (TYPE_ARG_TYPES (TREE_TYPE (new_fn)),
TYPE_ARG_TYPES (TREE_TYPE (old_fn))))
{
- /* If this using declaration introduces a function
- recognized as a built-in, no longer mark it as
- anticipated in this scope. */
- if (DECL_ANTICIPATED (old_fn))
- {
- DECL_ANTICIPATED (old_fn) = 0;
- break;
- }
-
/* There was already a non-using declaration in
this scope with the same parameter types. If both
are the same extern "C" functions, that's ok. */
- if (!decls_match (new_fn, old_fn))
- error ("`%D' is already declared in this scope", name);
- break;
+ if (decls_match (new_fn, old_fn))
+ {
+ /* If the OLD_FN was a builtin, there is now a
+ real declaration. */
+ if (DECL_ANTICIPATED (old_fn))
+ DECL_ANTICIPATED (old_fn) = 0;
+ break;
+ }
+ else if (!DECL_ANTICIPATED (old_fn))
+ {
+ /* If the OLD_FN was really declared, the
+ declarations don't match. */
+ error ("`%D' is already declared in this scope", name);
+ break;
+ }
+
+ /* If the OLD_FN was not really there, just ignore
+ it and keep going. */
}
}
@@ -4262,13 +4340,13 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype,
}
else
{
- *newval = BINDING_VALUE (decls);
- if (oldval)
- duplicate_decls (*newval, oldval);
- }
+ *newval = decls.value;
+ if (oldval && !decls_match (*newval, oldval))
+ error ("`%D' is already declared in this scope", name);
+ }
- *newtype = BINDING_TYPE (decls);
- if (oldtype && *newtype && oldtype != *newtype)
+ *newtype = decls.type;
+ if (oldtype && *newtype && !same_type_p (oldtype, *newtype))
{
error ("using declaration `%D' introduced ambiguous type `%T'",
name, oldtype);
@@ -4281,14 +4359,15 @@ do_nonmember_using_decl (tree scope, tree name, tree oldval, tree oldtype,
void
do_toplevel_using_decl (tree decl)
{
- tree scope, name, binding;
+ tree scope, name;
tree oldval, oldtype, newval, newtype;
+ cxx_binding *binding;
decl = validate_nonmember_using_decl (decl, &scope, &name);
if (decl == NULL_TREE)
return;
- binding = binding_for_name (name, current_namespace);
+ binding = binding_for_name (NAMESPACE_LEVEL (current_namespace), name);
oldval = BINDING_VALUE (binding);
oldtype = BINDING_TYPE (binding);
@@ -4501,28 +4580,28 @@ mark_used (tree decl)
instantiate_decl (decl, /*defer_ok=*/1);
}
-/* Helper function for class_head_decl and class_head_defn
- nonterminals. AGGR is the class, union or struct tag. SCOPE is the
- explicit scope used (NULL for no scope resolution). ID is the
- name. DEFN_P is true, if this is a definition of the class and
- NEW_TYPE_P is set to nonzero, if we push into the scope containing
- the to be defined aggregate.
-
- Return a TYPE_DECL for the type declared by ID in SCOPE. */
+/* Called when a class-head is encountered. TAG_KIND is the class-key
+ for the class. SCOPE, if non-NULL, is the type or namespace
+ indicated in the nested-name-specifier for the declaration of the
+ class. ID is the name of the class, if any; it may be a TYPE_DECL,
+ or an IDENTIFIER_NODE. ATTRIBUTES are attributes that apply to the
+ class.
+
+ Return a TYPE_DECL for the class being defined. */
tree
handle_class_head (enum tag_types tag_kind, tree scope, tree id,
- tree attributes, bool defn_p, bool *new_type_p)
+ tree attributes)
{
tree decl = NULL_TREE;
tree current = current_scope ();
bool xrefd_p = false;
-
+ bool new_type_p;
+ tree context;
+
if (current == NULL_TREE)
current = current_namespace;
- *new_type_p = false;
-
if (scope)
{
if (TREE_CODE (id) == TYPE_DECL)
@@ -4559,7 +4638,7 @@ handle_class_head (enum tag_types tag_kind, tree scope, tree id,
if (!decl)
{
- decl = TYPE_MAIN_DECL (xref_tag (tag_kind, id, attributes, !defn_p));
+ decl = TYPE_MAIN_DECL (xref_tag (tag_kind, id, attributes, false));
xrefd_p = true;
}
@@ -4569,24 +4648,21 @@ handle_class_head (enum tag_types tag_kind, tree scope, tree id,
return error_mark_node;
}
- if (defn_p)
- {
- /* For a definition, we want to enter the containing scope
- before looking up any base classes etc. Only do so, if this
- is different to the current scope. */
- tree context = CP_DECL_CONTEXT (decl);
-
- *new_type_p = (current != context
- && TREE_CODE (context) != TEMPLATE_TYPE_PARM
- && TREE_CODE (context) != BOUND_TEMPLATE_TEMPLATE_PARM);
- if (*new_type_p)
- push_scope (context);
-
- if (!xrefd_p
- && PROCESSING_REAL_TEMPLATE_DECL_P ()
- && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
- decl = push_template_decl (decl);
- }
+ /* For a definition, we want to enter the containing scope before
+ looking up any base classes etc. Only do so, if this is different
+ to the current scope. */
+ context = CP_DECL_CONTEXT (decl);
+
+ new_type_p = (current != context
+ && TREE_CODE (context) != TEMPLATE_TYPE_PARM
+ && TREE_CODE (context) != BOUND_TEMPLATE_TEMPLATE_PARM);
+ if (new_type_p)
+ push_scope (context);
+
+ if (!xrefd_p
+ && PROCESSING_REAL_TEMPLATE_DECL_P ()
+ && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
+ decl = push_template_decl (decl);
return decl;
}
diff --git a/gcc/cp/dump.c b/gcc/cp/dump.c
index fcd2b4f30df..7f73a3085e3 100644
--- a/gcc/cp/dump.c
+++ b/gcc/cp/dump.c
@@ -202,7 +202,7 @@ dump_op (dump_info_p di, tree t)
}
}
-int
+bool
cp_dump_tree (void* dump_info, tree t)
{
enum tree_code code;
@@ -223,17 +223,17 @@ cp_dump_tree (void* dump_info, tree t)
if (IDENTIFIER_OPNAME_P (t))
{
dump_string (di, "operator");
- return 1;
+ return true;
}
else if (IDENTIFIER_TYPENAME_P (t))
{
dump_child ("tynm", TREE_TYPE (t));
- return 1;
+ return true;
}
else if (t == anonymous_namespace_name)
{
dump_string (di, "unnamed");
- return 1;
+ return true;
}
break;
@@ -243,7 +243,7 @@ cp_dump_tree (void* dump_info, tree t)
dump_string (di, "ptrmem");
dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
- return 1;
+ return true;
}
break;
@@ -254,7 +254,7 @@ cp_dump_tree (void* dump_info, tree t)
dump_string (di, "ptrmem");
dump_child ("ptd", TYPE_PTRMEM_POINTED_TO_TYPE (t));
dump_child ("cls", TYPE_PTRMEM_CLASS_TYPE (t));
- return 1;
+ return true;
}
/* Is it a type used as a base? */
@@ -262,7 +262,7 @@ cp_dump_tree (void* dump_info, tree t)
&& CLASSTYPE_AS_BASE (TYPE_CONTEXT (t)) == t)
{
dump_child ("bfld", TYPE_CONTEXT (t));
- return 1;
+ return true;
}
if (! IS_AGGR_TYPE (t))
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index d2884af06b3..5b2ccd9a850 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -62,64 +62,60 @@ static output_buffer *scratch_buffer = &scratch_buffer_rec;
#define reinit_global_formatting_buffer() \
output_clear_message_text (scratch_buffer)
-static const char *args_to_string PARAMS ((tree, int));
-static const char *assop_to_string PARAMS ((enum tree_code, int));
-static const char *code_to_string PARAMS ((enum tree_code, int));
-static const char *cv_to_string PARAMS ((tree, int));
-static const char *decl_to_string PARAMS ((tree, int));
-static const char *expr_to_string PARAMS ((tree, int));
-static const char *fndecl_to_string PARAMS ((tree, int));
-static const char *op_to_string PARAMS ((enum tree_code, int));
-static const char *parm_to_string PARAMS ((int, int));
-static const char *type_to_string PARAMS ((tree, int));
-
-static void dump_type PARAMS ((tree, int));
-static void dump_typename PARAMS ((tree, int));
-static void dump_simple_decl PARAMS ((tree, tree, int));
-static void dump_decl PARAMS ((tree, int));
-static void dump_template_decl PARAMS ((tree, int));
-static void dump_function_decl PARAMS ((tree, int));
-static void dump_expr PARAMS ((tree, int));
-static void dump_unary_op PARAMS ((const char *, tree, int));
-static void dump_binary_op PARAMS ((const char *, tree, int));
-static void dump_aggr_type PARAMS ((tree, int));
-static enum pad dump_type_prefix PARAMS ((tree, int));
-static void dump_type_suffix PARAMS ((tree, int));
-static void dump_function_name PARAMS ((tree, int));
-static void dump_expr_list PARAMS ((tree, int));
-static void dump_global_iord PARAMS ((tree));
-static enum pad dump_qualifiers PARAMS ((tree, enum pad));
-static void dump_char PARAMS ((int));
-static void dump_parameters PARAMS ((tree, int));
-static void dump_exception_spec PARAMS ((tree, int));
-static const char *class_key_or_enum PARAMS ((tree));
-static void dump_template_argument PARAMS ((tree, int));
-static void dump_template_argument_list PARAMS ((tree, int));
-static void dump_template_parameter PARAMS ((tree, int));
-static void dump_template_bindings PARAMS ((tree, tree));
-static void dump_scope PARAMS ((tree, int));
-static void dump_template_parms PARAMS ((tree, int, int));
-
-static const char *function_category PARAMS ((tree));
-static void maybe_print_instantiation_context PARAMS ((diagnostic_context *));
-static void print_instantiation_full_context PARAMS ((diagnostic_context *));
-static void print_instantiation_partial_context PARAMS ((diagnostic_context *,
- tree,
- const char *, int));
-static void cp_diagnostic_starter PARAMS ((diagnostic_context *,
- diagnostic_info *));
-static void cp_diagnostic_finalizer PARAMS ((diagnostic_context *,
- diagnostic_info *));
-static void cp_print_error_function PARAMS ((diagnostic_context *,
- diagnostic_info *));
-
-static bool cp_printer PARAMS ((output_buffer *, text_info *));
-static void print_non_consecutive_character PARAMS ((output_buffer *, int));
-static void print_integer PARAMS ((output_buffer *, HOST_WIDE_INT));
-static tree locate_error PARAMS ((const char *, va_list));
+static const char *args_to_string (tree, int);
+static const char *assop_to_string (enum tree_code, int);
+static const char *code_to_string (enum tree_code, int);
+static const char *cv_to_string (tree, int);
+static const char *decl_to_string (tree, int);
+static const char *expr_to_string (tree, int);
+static const char *fndecl_to_string (tree, int);
+static const char *op_to_string (enum tree_code, int);
+static const char *parm_to_string (int, int);
+static const char *type_to_string (tree, int);
+
+static void dump_type (tree, int);
+static void dump_typename (tree, int);
+static void dump_simple_decl (tree, tree, int);
+static void dump_decl (tree, int);
+static void dump_template_decl (tree, int);
+static void dump_function_decl (tree, int);
+static void dump_expr (tree, int);
+static void dump_unary_op (const char *, tree, int);
+static void dump_binary_op (const char *, tree, int);
+static void dump_aggr_type (tree, int);
+static enum pad dump_type_prefix (tree, int);
+static void dump_type_suffix (tree, int);
+static void dump_function_name (tree, int);
+static void dump_expr_list (tree, int);
+static void dump_global_iord (tree);
+static enum pad dump_qualifiers (tree, enum pad);
+static void dump_char (int);
+static void dump_parameters (tree, int);
+static void dump_exception_spec (tree, int);
+static const char *class_key_or_enum (tree);
+static void dump_template_argument (tree, int);
+static void dump_template_argument_list (tree, int);
+static void dump_template_parameter (tree, int);
+static void dump_template_bindings (tree, tree);
+static void dump_scope (tree, int);
+static void dump_template_parms (tree, int, int);
+
+static const char *function_category (tree);
+static void maybe_print_instantiation_context (diagnostic_context *);
+static void print_instantiation_full_context (diagnostic_context *);
+static void print_instantiation_partial_context (diagnostic_context *,
+ tree, const char *, int);
+static void cp_diagnostic_starter (diagnostic_context *, diagnostic_info *);
+static void cp_diagnostic_finalizer (diagnostic_context *, diagnostic_info *);
+static void cp_print_error_function (diagnostic_context *, diagnostic_info *);
+
+static bool cp_printer (output_buffer *, text_info *);
+static void print_non_consecutive_character (output_buffer *, int);
+static void print_integer (output_buffer *, HOST_WIDE_INT);
+static tree locate_error (const char *, va_list);
void
-init_error ()
+init_error (void)
{
diagnostic_starter (global_dc) = cp_diagnostic_starter;
diagnostic_finalizer (global_dc) = cp_diagnostic_finalizer;
@@ -131,9 +127,7 @@ init_error ()
/* Dump a scope, if deemed necessary. */
static void
-dump_scope (scope, flags)
- tree scope;
- int flags;
+dump_scope (tree scope, int flags)
{
int f = ~TFF_RETURN_TYPE & (flags & (TFF_SCOPE | TFF_CHASE_TYPEDEF));
@@ -164,9 +158,7 @@ dump_scope (scope, flags)
indication of whether we dumped something. */
static enum pad
-dump_qualifiers (t, p)
- tree t;
- enum pad p;
+dump_qualifiers (tree t, enum pad p)
{
static const int masks[] =
{TYPE_QUAL_CONST, TYPE_QUAL_VOLATILE, TYPE_QUAL_RESTRICT};
@@ -201,9 +193,7 @@ static char digit_buffer[128];
/* Dump the template ARGument under control of FLAGS. */
static void
-dump_template_argument (arg, flags)
- tree arg;
- int flags;
+dump_template_argument (tree arg, int flags)
{
if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
dump_type (arg, flags & ~TFF_CLASS_KEY_OR_ENUM);
@@ -215,9 +205,7 @@ dump_template_argument (arg, flags)
of FLAGS. */
static void
-dump_template_argument_list (args, flags)
- tree args;
- int flags;
+dump_template_argument_list (tree args, int flags)
{
int n = TREE_VEC_LENGTH (args);
int need_comma = 0;
@@ -235,9 +223,7 @@ dump_template_argument_list (args, flags)
/* Dump a template parameter PARM (a TREE_LIST) under control of FLAGS. */
static void
-dump_template_parameter (parm, flags)
- tree parm;
- int flags;
+dump_template_parameter (tree parm, int flags)
{
tree p = TREE_VALUE (parm);
tree a = TREE_PURPOSE (parm);
@@ -276,8 +262,7 @@ dump_template_parameter (parm, flags)
TREE_VEC. */
static void
-dump_template_bindings (parms, args)
- tree parms, args;
+dump_template_bindings (tree parms, tree args)
{
int need_comma = 0;
@@ -321,9 +306,7 @@ dump_template_bindings (parms, args)
format. */
static void
-dump_type (t, flags)
- tree t;
- int flags;
+dump_type (tree t, int flags)
{
if (t == NULL_TREE)
return;
@@ -486,9 +469,7 @@ dump_type (t, flags)
a TYPENAME_TYPE. */
static void
-dump_typename (t, flags)
- tree t;
- int flags;
+dump_typename (tree t, int flags)
{
tree ctx = TYPE_CONTEXT (t);
@@ -503,8 +484,7 @@ dump_typename (t, flags)
/* Return the name of the supplied aggregate, or enumeral type. */
static const char *
-class_key_or_enum (t)
- tree t;
+class_key_or_enum (tree t)
{
if (TREE_CODE (t) == ENUMERAL_TYPE)
return "enum";
@@ -520,9 +500,7 @@ class_key_or_enum (t)
in the form `class foo'. */
static void
-dump_aggr_type (t, flags)
- tree t;
- int flags;
+dump_aggr_type (tree t, int flags)
{
tree name;
const char *variety = class_key_or_enum (t);
@@ -595,9 +573,7 @@ dump_aggr_type (t, flags)
want to pad non-*, non-& cores, but not pad * or & types. */
static enum pad
-dump_type_prefix (t, flags)
- tree t;
- int flags;
+dump_type_prefix (tree t, int flags)
{
enum pad padding = before;
@@ -706,9 +682,7 @@ dump_type_prefix (t, flags)
which appears after the identifier (or function parms). */
static void
-dump_type_suffix (t, flags)
- tree t;
- int flags;
+dump_type_suffix (tree t, int flags)
{
if (TYPE_PTRMEMFUNC_P (t))
t = TYPE_PTRMEMFUNC_FN_TYPE (t);
@@ -797,8 +771,7 @@ dump_type_suffix (t, flags)
}
static void
-dump_global_iord (t)
- tree t;
+dump_global_iord (tree t)
{
const char *p = NULL;
@@ -813,10 +786,7 @@ dump_global_iord (t)
}
static void
-dump_simple_decl (t, type, flags)
- tree t;
- tree type;
- int flags;
+dump_simple_decl (tree t, tree type, int flags)
{
if (flags & TFF_DECL_SPECIFIERS)
{
@@ -836,9 +806,7 @@ dump_simple_decl (t, type, flags)
/* Dump a human readable string for the decl T under control of FLAGS. */
static void
-dump_decl (t, flags)
- tree t;
- int flags;
+dump_decl (tree t, int flags)
{
if (t == NULL_TREE)
return;
@@ -1003,7 +971,7 @@ dump_decl (t, flags)
else if (DECL_INITIAL (t))
dump_expr (DECL_INITIAL (t), flags | TFF_EXPR_IN_PARENS);
else
- print_identifier (scratch_buffer, "enumerator");
+ print_identifier (scratch_buffer, "<enumerator>");
break;
case USING_DECL:
@@ -1031,9 +999,7 @@ dump_decl (t, flags)
'template <...> leaders plus the 'class X' or 'void fn(...)' part. */
static void
-dump_template_decl (t, flags)
- tree t;
- int flags;
+dump_template_decl (tree t, int flags)
{
tree orig_parms = DECL_TEMPLATE_PARMS (t);
tree parms;
@@ -1099,9 +1065,7 @@ dump_template_decl (t, flags)
is %D which doesn't print the throw specs, and %F which does. */
static void
-dump_function_decl (t, flags)
- tree t;
- int flags;
+dump_function_decl (tree t, int flags)
{
tree fntype;
tree parmtypes;
@@ -1193,9 +1157,7 @@ dump_function_decl (t, flags)
already been removed. */
static void
-dump_parameters (parmtypes, flags)
- tree parmtypes;
- int flags;
+dump_parameters (tree parmtypes, int flags)
{
int first;
@@ -1227,9 +1189,7 @@ dump_parameters (parmtypes, flags)
/* Print an exception specification. T is the exception specification. */
static void
-dump_exception_spec (t, flags)
- tree t;
- int flags;
+dump_exception_spec (tree t, int flags)
{
if (t)
{
@@ -1251,9 +1211,7 @@ dump_exception_spec (t, flags)
and destructors properly. */
static void
-dump_function_name (t, flags)
- tree t;
- int flags;
+dump_function_name (tree t, int flags)
{
tree name = DECL_NAME (t);
@@ -1302,10 +1260,7 @@ dump_function_name (t, flags)
decoration. */
static void
-dump_template_parms (info, primary, flags)
- tree info;
- int primary;
- int flags;
+dump_template_parms (tree info, int primary, int flags)
{
tree args = info ? TI_ARGS (info) : NULL_TREE;
@@ -1378,8 +1333,7 @@ dump_template_parms (info, primary, flags)
}
static void
-dump_char (c)
- int c;
+dump_char (int c)
{
switch (c)
{
@@ -1427,9 +1381,7 @@ dump_char (c)
/* Print out a list of initializers (subr of dump_expr) */
static void
-dump_expr_list (l, flags)
- tree l;
- int flags;
+dump_expr_list (tree l, int flags)
{
while (l)
{
@@ -1443,9 +1395,7 @@ dump_expr_list (l, flags)
/* Print out an expression E under control of FLAGS. */
static void
-dump_expr (t, flags)
- tree t;
- int flags;
+dump_expr (tree t, int flags)
{
if (t == 0)
return;
@@ -1524,9 +1474,9 @@ dump_expr (t, flags)
/* Would "%x%0*x" or "%x%*0x" get zero-padding on all
systems? */
{
- static char format[10]; /* "%x%09999x\0" */
+ static char format[12]; /* "0x%x%09999x\0" */
if (!format[0])
- sprintf (format, "%%x%%0%dx", HOST_BITS_PER_INT / 4);
+ sprintf (format, "0x%%x%%0%dx", HOST_BITS_PER_INT / 4);
sprintf (digit_buffer, format, TREE_INT_CST_HIGH (val),
TREE_INT_CST_LOW (val));
output_add_string (scratch_buffer, digit_buffer);
@@ -1890,9 +1840,19 @@ dump_expr (t, flags)
}
}
}
- output_add_character (scratch_buffer, '{');
- dump_expr_list (CONSTRUCTOR_ELTS (t), flags);
- output_add_character (scratch_buffer, '}');
+ if (TREE_TYPE (t) && !CONSTRUCTOR_ELTS (t))
+ {
+ dump_type (TREE_TYPE (t), 0);
+ output_add_character (scratch_buffer, '(');
+ output_add_character (scratch_buffer, ')');
+ }
+ else
+ {
+ output_add_character (scratch_buffer, '{');
+ dump_expr_list (CONSTRUCTOR_ELTS (t), flags);
+ output_add_character (scratch_buffer, '}');
+ }
+
break;
case OFFSET_REF:
@@ -2046,7 +2006,7 @@ dump_expr (t, flags)
break;
case BASELINK:
- print_tree_identifier (scratch_buffer, DECL_NAME (get_first_fn (t)));
+ dump_expr (get_first_fn (t), flags & ~TFF_EXPR_IN_PARENS);
break;
/* else fall through */
@@ -2064,10 +2024,7 @@ dump_expr (t, flags)
}
static void
-dump_binary_op (opstring, t, flags)
- const char *opstring;
- tree t;
- int flags;
+dump_binary_op (const char *opstring, tree t, int flags)
{
print_left_paren (scratch_buffer);
dump_expr (TREE_OPERAND (t, 0), flags | TFF_EXPR_IN_PARENS);
@@ -2082,10 +2039,7 @@ dump_binary_op (opstring, t, flags)
}
static void
-dump_unary_op (opstring, t, flags)
- const char *opstring;
- tree t;
- int flags;
+dump_unary_op (const char *opstring, tree t, int flags)
{
if (flags & TFF_EXPR_IN_PARENS)
print_left_paren (scratch_buffer);
@@ -2099,9 +2053,7 @@ dump_unary_op (opstring, t, flags)
control. */
const char *
-type_as_string (typ, flags)
- tree typ;
- int flags;
+type_as_string (tree typ, int flags)
{
reinit_global_formatting_buffer ();
@@ -2111,9 +2063,7 @@ type_as_string (typ, flags)
}
const char *
-expr_as_string (decl, flags)
- tree decl;
- int flags;
+expr_as_string (tree decl, int flags)
{
reinit_global_formatting_buffer ();
@@ -2123,9 +2073,7 @@ expr_as_string (decl, flags)
}
const char *
-decl_as_string (decl, flags)
- tree decl;
- int flags;
+decl_as_string (tree decl, int flags)
{
reinit_global_formatting_buffer ();
@@ -2135,9 +2083,7 @@ decl_as_string (decl, flags)
}
const char *
-context_as_string (context, flags)
- tree context;
- int flags;
+context_as_string (tree context, int flags)
{
reinit_global_formatting_buffer ();
@@ -2149,9 +2095,7 @@ context_as_string (context, flags)
/* Generate the three forms of printable names for cxx_printable_name. */
const char *
-lang_decl_name (decl, v)
- tree decl;
- int v;
+lang_decl_name (tree decl, int v)
{
if (v >= 2)
return decl_as_string (decl, TFF_DECL_SPECIFIERS);
@@ -2173,8 +2117,7 @@ lang_decl_name (decl, v)
}
const char *
-cp_file_of (t)
- tree t;
+cp_file_of (tree t)
{
if (TREE_CODE (t) == PARM_DECL && DECL_CONTEXT (t))
return TREE_FILENAME (DECL_CONTEXT (t));
@@ -2187,8 +2130,7 @@ cp_file_of (t)
}
int
-cp_line_of (t)
- tree t;
+cp_line_of (tree t)
{
int line = 0;
if (TREE_CODE (t) == PARM_DECL && DECL_CONTEXT (t))
@@ -2215,9 +2157,7 @@ cp_line_of (t)
function. */
static const char *
-decl_to_string (decl, verbose)
- tree decl;
- int verbose;
+decl_to_string (tree decl, int verbose)
{
int flags = 0;
@@ -2238,9 +2178,7 @@ decl_to_string (decl, verbose)
}
static const char *
-expr_to_string (decl, verbose)
- tree decl;
- int verbose ATTRIBUTE_UNUSED;
+expr_to_string (tree decl, int verbose ATTRIBUTE_UNUSED)
{
reinit_global_formatting_buffer ();
@@ -2250,9 +2188,7 @@ expr_to_string (decl, verbose)
}
static const char *
-fndecl_to_string (fndecl, verbose)
- tree fndecl;
- int verbose;
+fndecl_to_string (tree fndecl, int verbose)
{
int flags;
@@ -2268,17 +2204,13 @@ fndecl_to_string (fndecl, verbose)
static const char *
-code_to_string (c, v)
- enum tree_code c;
- int v ATTRIBUTE_UNUSED;
+code_to_string (enum tree_code c, int v ATTRIBUTE_UNUSED)
{
return tree_code_name [c];
}
const char *
-language_to_string (c, v)
- enum languages c;
- int v ATTRIBUTE_UNUSED;
+language_to_string (enum languages c, int v ATTRIBUTE_UNUSED)
{
switch (c)
{
@@ -2300,9 +2232,7 @@ language_to_string (c, v)
/* Return the proper printed version of a parameter to a C++ function. */
static const char *
-parm_to_string (p, v)
- int p;
- int v ATTRIBUTE_UNUSED;
+parm_to_string (int p, int v ATTRIBUTE_UNUSED)
{
if (p < 0)
return "`this'";
@@ -2312,9 +2242,7 @@ parm_to_string (p, v)
}
static const char *
-op_to_string (p, v)
- enum tree_code p;
- int v ATTRIBUTE_UNUSED;
+op_to_string (enum tree_code p, int v ATTRIBUTE_UNUSED)
{
tree id;
@@ -2323,9 +2251,7 @@ op_to_string (p, v)
}
static const char *
-type_to_string (typ, verbose)
- tree typ;
- int verbose;
+type_to_string (tree typ, int verbose)
{
int flags;
@@ -2342,9 +2268,7 @@ type_to_string (typ, verbose)
}
static const char *
-assop_to_string (p, v)
- enum tree_code p;
- int v ATTRIBUTE_UNUSED;
+assop_to_string (enum tree_code p, int v ATTRIBUTE_UNUSED)
{
tree id;
@@ -2353,9 +2277,7 @@ assop_to_string (p, v)
}
static const char *
-args_to_string (p, verbose)
- tree p;
- int verbose;
+args_to_string (tree p, int verbose)
{
int flags = 0;
if (verbose)
@@ -2381,9 +2303,7 @@ args_to_string (p, verbose)
}
static const char *
-cv_to_string (p, v)
- tree p;
- int v;
+cv_to_string (tree p, int v)
{
reinit_global_formatting_buffer ();
@@ -2394,9 +2314,7 @@ cv_to_string (p, v)
/* Langhook for print_error_function. */
void
-cxx_print_error_function (context, file)
- diagnostic_context *context;
- const char *file;
+cxx_print_error_function (diagnostic_context *context, const char *file)
{
lhd_print_error_function (context, file);
output_set_prefix (&context->buffer, file);
@@ -2404,9 +2322,8 @@ cxx_print_error_function (context, file)
}
static void
-cp_diagnostic_starter (context, diagnostic)
- diagnostic_context *context;
- diagnostic_info *diagnostic;
+cp_diagnostic_starter (diagnostic_context *context,
+ diagnostic_info *diagnostic)
{
diagnostic_report_current_module (context);
cp_print_error_function (context, diagnostic);
@@ -2415,9 +2332,8 @@ cp_diagnostic_starter (context, diagnostic)
}
static void
-cp_diagnostic_finalizer (context, diagnostic)
- diagnostic_context *context;
- diagnostic_info *diagnostic __attribute__((unused));
+cp_diagnostic_finalizer (diagnostic_context *context,
+ diagnostic_info *diagnostic ATTRIBUTE_UNUSED)
{
output_destroy_prefix (&context->buffer);
}
@@ -2425,9 +2341,8 @@ cp_diagnostic_finalizer (context, diagnostic)
/* Print current function onto BUFFER, in the process of reporting
a diagnostic message. Called from cp_diagnostic_starter. */
static void
-cp_print_error_function (context, diagnostic)
- diagnostic_context *context;
- diagnostic_info *diagnostic;
+cp_print_error_function (diagnostic_context *context,
+ diagnostic_info *diagnostic)
{
if (diagnostic_last_function_changed (context))
{
@@ -2454,8 +2369,7 @@ cp_print_error_function (context, diagnostic)
/* Returns a description of FUNCTION using standard terminology. */
static const char *
-function_category (fn)
- tree fn;
+function_category (tree fn)
{
if (DECL_FUNCTION_MEMBER_P (fn))
{
@@ -2477,8 +2391,7 @@ function_category (fn)
/* Report the full context of a current template instantiation,
onto BUFFER. */
static void
-print_instantiation_full_context (context)
- diagnostic_context *context;
+print_instantiation_full_context (diagnostic_context *context)
{
tree p = current_instantiation ();
int line = lineno;
@@ -2513,11 +2426,8 @@ print_instantiation_full_context (context)
/* Same as above but less verbose. */
static void
-print_instantiation_partial_context (context, t, file, line)
- diagnostic_context *context;
- tree t;
- const char *file;
- int line;
+print_instantiation_partial_context (diagnostic_context *context,
+ tree t, const char *file, int line)
{
for (; t; t = TREE_CHAIN (t))
{
@@ -2532,8 +2442,7 @@ print_instantiation_partial_context (context, t, file, line)
/* Called from cp_thing to print the template context for an error. */
static void
-maybe_print_instantiation_context (context)
- diagnostic_context *context;
+maybe_print_instantiation_context (diagnostic_context *context)
{
if (!problematic_instantiation_changed () || current_instantiation () == 0)
return;
@@ -2544,7 +2453,7 @@ maybe_print_instantiation_context (context)
/* Report the bare minimum context of a template instantiation. */
void
-print_instantiation_context ()
+print_instantiation_context (void)
{
print_instantiation_partial_context
(global_dc, current_instantiation (), input_filename, lineno);
@@ -2565,9 +2474,7 @@ print_instantiation_context ()
%T type.
%V cv-qualifier. */
static bool
-cp_printer (buffer, text)
- output_buffer *buffer;
- text_info *text;
+cp_printer (output_buffer *buffer, text_info *text)
{
int verbose = 0;
const char *result;
@@ -2611,18 +2518,14 @@ cp_printer (buffer, text)
}
static void
-print_integer (buffer, i)
- output_buffer *buffer;
- HOST_WIDE_INT i;
+print_integer (output_buffer *buffer, HOST_WIDE_INT i)
{
sprintf (digit_buffer, HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT) i);
output_add_string (buffer, digit_buffer);
}
static void
-print_non_consecutive_character (buffer, c)
- output_buffer *buffer;
- int c;
+print_non_consecutive_character (output_buffer *buffer, int c)
{
const char *p = output_last_position (buffer);
@@ -2635,9 +2538,7 @@ print_non_consecutive_character (buffer, c)
behavior of cp_*_at. */
static tree
-locate_error (msgid, ap)
- const char *msgid;
- va_list ap;
+locate_error (const char *msgid, va_list ap)
{
tree here = 0, t;
int plus = 0;
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 44309e3ddfb..ae37b290c1a 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -38,29 +38,29 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "tree-inline.h"
-static void push_eh_cleanup PARAMS ((tree));
-static tree prepare_eh_type PARAMS ((tree));
-static tree build_eh_type_type PARAMS ((tree));
-static tree do_begin_catch PARAMS ((void));
-static int dtor_nothrow PARAMS ((tree));
-static tree do_end_catch PARAMS ((tree));
-static void push_eh_cleanup PARAMS ((tree));
-static bool decl_is_java_type PARAMS ((tree decl, int err));
-static void initialize_handler_parm PARAMS ((tree, tree));
-static tree do_allocate_exception PARAMS ((tree));
-static tree stabilize_throw_expr PARAMS ((tree, tree *));
-static tree wrap_cleanups_r PARAMS ((tree *, int *, void *));
-static int complete_ptr_ref_or_void_ptr_p PARAMS ((tree, tree));
-static bool is_admissible_throw_operand PARAMS ((tree));
-static int can_convert_eh PARAMS ((tree, tree));
-static void check_handlers_1 PARAMS ((tree, tree));
-static tree cp_protect_cleanup_actions PARAMS ((void));
+static void push_eh_cleanup (tree);
+static tree prepare_eh_type (tree);
+static tree build_eh_type_type (tree);
+static tree do_begin_catch (void);
+static int dtor_nothrow (tree);
+static tree do_end_catch (tree);
+static void push_eh_cleanup (tree);
+static bool decl_is_java_type (tree decl, int err);
+static void initialize_handler_parm (tree, tree);
+static tree do_allocate_exception (tree);
+static tree stabilize_throw_expr (tree, tree *);
+static tree wrap_cleanups_r (tree *, int *, void *);
+static int complete_ptr_ref_or_void_ptr_p (tree, tree);
+static bool is_admissible_throw_operand (tree);
+static int can_convert_eh (tree, tree);
+static void check_handlers_1 (tree, tree);
+static tree cp_protect_cleanup_actions (void);
/* Sets up all the global eh stuff that needs to be initialized at the
start of compilation. */
void
-init_exception_processing ()
+init_exception_processing (void)
{
tree tmp;
@@ -90,7 +90,7 @@ init_exception_processing ()
propagated out of a cleanup region. */
static tree
-cp_protect_cleanup_actions ()
+cp_protect_cleanup_actions (void)
{
/* [except.terminate]
@@ -100,8 +100,7 @@ cp_protect_cleanup_actions ()
}
static tree
-prepare_eh_type (type)
- tree type;
+prepare_eh_type (tree type)
{
if (type == NULL_TREE)
return type;
@@ -122,8 +121,7 @@ prepare_eh_type (type)
matching field of the exception model. */
static tree
-build_eh_type_type (type)
- tree type;
+build_eh_type_type (tree type)
{
tree exp;
@@ -142,7 +140,7 @@ build_eh_type_type (type)
}
tree
-build_exc_ptr ()
+build_exc_ptr (void)
{
return build (EXC_PTR_EXPR, ptr_type_node);
}
@@ -151,7 +149,7 @@ build_exc_ptr ()
exception has been handled. */
static tree
-do_begin_catch ()
+do_begin_catch (void)
{
tree fn;
@@ -173,8 +171,7 @@ do_begin_catch ()
NULL_TREE for a ... handler) will not throw an exception. */
static int
-dtor_nothrow (type)
- tree type;
+dtor_nothrow (tree type)
{
if (type == NULL_TREE)
return 0;
@@ -189,8 +186,7 @@ dtor_nothrow (type)
for the current catch block if no others are currently using it. */
static tree
-do_end_catch (type)
- tree type;
+do_end_catch (tree type)
{
tree fn, cleanup;
@@ -214,8 +210,7 @@ do_end_catch (type)
/* This routine creates the cleanup for the current exception. */
static void
-push_eh_cleanup (type)
- tree type;
+push_eh_cleanup (tree type)
{
finish_decl_cleanup (NULL_TREE, do_end_catch (type));
}
@@ -224,9 +219,7 @@ push_eh_cleanup (type)
throw. */
static bool
-decl_is_java_type (decl, err)
- tree decl;
- int err;
+decl_is_java_type (tree decl, int err)
{
bool r = (TREE_CODE (decl) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
@@ -273,8 +266,7 @@ decl_is_java_type (decl, err)
__gxx_personality_(sj|v)0 in init_exception_processing - should it
be done here instead? */
void
-choose_personality_routine (lang)
- enum languages lang;
+choose_personality_routine (enum languages lang)
{
static enum {
chose_none,
@@ -328,9 +320,7 @@ choose_personality_routine (lang)
/* Initialize the catch parameter DECL. */
static void
-initialize_handler_parm (decl, exp)
- tree decl;
- tree exp;
+initialize_handler_parm (tree decl, tree exp)
{
tree init;
tree init_type;
@@ -383,8 +373,7 @@ initialize_handler_parm (decl, exp)
/* Call this to start a catch block. DECL is the catch parameter. */
tree
-expand_start_catch_block (decl)
- tree decl;
+expand_start_catch_block (tree decl)
{
tree exp = NULL_TREE;
tree type;
@@ -451,7 +440,7 @@ expand_start_catch_block (decl)
the label to jump to if this catch block didn't match. */
void
-expand_end_catch_block ()
+expand_end_catch_block (void)
{
if (! doing_eh (1))
return;
@@ -465,7 +454,7 @@ expand_end_catch_block ()
}
tree
-begin_eh_spec_block ()
+begin_eh_spec_block (void)
{
tree r = build_stmt (EH_SPEC_BLOCK, NULL_TREE, NULL_TREE);
add_stmt (r);
@@ -473,9 +462,7 @@ begin_eh_spec_block ()
}
void
-finish_eh_spec_block (raw_raises, eh_spec_block)
- tree raw_raises;
- tree eh_spec_block;
+finish_eh_spec_block (tree raw_raises, tree eh_spec_block)
{
tree raises;
@@ -494,8 +481,7 @@ finish_eh_spec_block (raw_raises, eh_spec_block)
/* Return a pointer to a buffer for an exception object of type TYPE. */
static tree
-do_allocate_exception (type)
- tree type;
+do_allocate_exception (tree type)
{
tree fn;
@@ -518,8 +504,7 @@ do_allocate_exception (type)
directly, but see the comment for stabilize_throw_expr. */
static tree
-do_free_exception (ptr)
- tree ptr;
+do_free_exception (tree ptr)
{
tree fn;
@@ -541,10 +526,8 @@ do_free_exception (ptr)
Called from build_throw via walk_tree_without_duplicates. */
static tree
-wrap_cleanups_r (tp, walk_subtrees, data)
- tree *tp;
- int *walk_subtrees ATTRIBUTE_UNUSED;
- void *data ATTRIBUTE_UNUSED;
+wrap_cleanups_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
{
tree exp = *tp;
tree cleanup;
@@ -583,9 +566,7 @@ wrap_cleanups_r (tp, walk_subtrees, data)
rather than in a MUST_NOT_THROW_EXPR, for this case only. */
static tree
-stabilize_throw_expr (exp, initp)
- tree exp;
- tree *initp;
+stabilize_throw_expr (tree exp, tree *initp)
{
tree init_expr;
@@ -626,8 +607,7 @@ stabilize_throw_expr (exp, initp)
/* Build a throw expression. */
tree
-build_throw (exp)
- tree exp;
+build_throw (tree exp)
{
tree fn;
@@ -805,9 +785,7 @@ build_throw (exp)
the expr or decl from whence TYPE came, if available. */
static int
-complete_ptr_ref_or_void_ptr_p (type, from)
- tree type;
- tree from;
+complete_ptr_ref_or_void_ptr_p (tree type, tree from)
{
int is_ptr;
@@ -835,8 +813,7 @@ complete_ptr_ref_or_void_ptr_p (type, from)
a type or of an abstract class type. */
static bool
-is_admissible_throw_operand (expr)
- tree expr;
+is_admissible_throw_operand (tree expr)
{
tree type = TREE_TYPE (expr);
@@ -873,8 +850,7 @@ is_admissible_throw_operand (expr)
#include "cfns.h"
int
-nothrow_libfn_p (fn)
- tree fn;
+nothrow_libfn_p (tree fn)
{
tree id;
@@ -895,8 +871,7 @@ nothrow_libfn_p (fn)
handler for type TO, as per [except.handle]. */
static int
-can_convert_eh (to, from)
- tree to, from;
+can_convert_eh (tree to, tree from)
{
if (TREE_CODE (to) == REFERENCE_TYPE)
to = TREE_TYPE (to);
@@ -931,9 +906,7 @@ can_convert_eh (to, from)
for B would catch an exception of type C. */
static void
-check_handlers_1 (master, handlers)
- tree master;
- tree handlers;
+check_handlers_1 (tree master, tree handlers)
{
tree type = TREE_TYPE (master);
tree handler;
@@ -954,8 +927,7 @@ check_handlers_1 (master, handlers)
/* Given a chain of HANDLERs, make sure that they're OK. */
void
-check_handlers (handlers)
- tree handlers;
+check_handlers (tree handlers)
{
tree handler;
int save_line = lineno;
diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c
index 739aaccdf05..160a946ef9a 100644
--- a/gcc/cp/expr.c
+++ b/gcc/cp/expr.c
@@ -38,8 +38,7 @@ Boston, MA 02111-1307, USA. */
constants. */
tree
-cplus_expand_constant (cst)
- tree cst;
+cplus_expand_constant (tree cst)
{
switch (TREE_CODE (cst))
{
@@ -79,11 +78,7 @@ cplus_expand_constant (cst)
/* Hook used by expand_expr to expand language-specific tree codes. */
rtx
-cxx_expand_expr (exp, target, tmode, modifier)
- tree exp;
- rtx target;
- enum machine_mode tmode;
- int modifier; /* Actually an enum expand_modifier. */
+cxx_expand_expr (tree exp, rtx target, enum machine_mode tmode, int modifier)
{
tree type = TREE_TYPE (exp);
register enum machine_mode mode = TYPE_MODE (type);
@@ -110,7 +105,7 @@ cxx_expand_expr (exp, target, tmode, modifier)
case THROW_EXPR:
expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
- return NULL;
+ return const0_rtx;
case MUST_NOT_THROW_EXPR:
expand_eh_region_start ();
diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c
index 56b64525233..3ecd3177195 100644
--- a/gcc/cp/friend.c
+++ b/gcc/cp/friend.c
@@ -165,7 +165,7 @@ add_friend (type, decl)
maybe_add_class_template_decl_list (type, decl, /*friend_p=*/1);
- TREE_VALUE (list) = tree_cons (error_mark_node, decl,
+ TREE_VALUE (list) = tree_cons (NULL_TREE, decl,
TREE_VALUE (list));
return;
}
@@ -175,7 +175,7 @@ add_friend (type, decl)
maybe_add_class_template_decl_list (type, decl, /*friend_p=*/1);
DECL_FRIENDLIST (typedecl)
- = tree_cons (DECL_NAME (decl), build_tree_list (error_mark_node, decl),
+ = tree_cons (DECL_NAME (decl), build_tree_list (NULL_TREE, decl),
DECL_FRIENDLIST (typedecl));
if (!uses_template_parms (type))
DECL_BEFRIENDING_CLASSES (decl)
diff --git a/gcc/cp/g++.1 b/gcc/cp/g++.1
deleted file mode 100644
index a5be7bceeff..00000000000
--- a/gcc/cp/g++.1
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/gcc.1
diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c
index 75a1d7c28a4..d2f99d9990c 100644
--- a/gcc/cp/g++spec.c
+++ b/gcc/cp/g++spec.c
@@ -189,6 +189,8 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
else if (strcmp (argv[i], "-static-libgcc") == 0
|| strcmp (argv[i], "-static") == 0)
shared_libgcc = 0;
+ else if (DEFAULT_WORD_SWITCH_TAKES_ARG (&argv[i][1]))
+ i++;
else
/* Pass other options through. */
continue;
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 4cddaa392f0..cce3f827c72 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -146,7 +146,7 @@ initialize_vtbl_ptrs (addr)
list = build_tree_list (type, addr);
/* Walk through the hierarchy, initializing the vptr in each base
- class. We do these in pre-order because can't find the virtual
+ class. We do these in pre-order because we can't find the virtual
bases for a class until we've initialized the vtbl for that
class. */
dfs_walk_real (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs,
@@ -664,6 +664,8 @@ emit_mem_initializers (tree mem_inits)
initializations should be performed. */
mem_inits = sort_mem_initializers (current_class_type, mem_inits);
+ in_base_initializer = 1;
+
/* Initialize base classes. */
while (mem_inits
&& TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
@@ -704,10 +706,11 @@ emit_mem_initializers (tree mem_inits)
mem_inits = TREE_CHAIN (mem_inits);
}
+ in_base_initializer = 0;
/* Initialize the vptrs. */
initialize_vtbl_ptrs (current_class_ptr);
-
+
/* Initialize the data members. */
while (mem_inits)
{
@@ -951,16 +954,15 @@ member_init_ok_or_else (field, type, member_name)
/* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
is a _TYPE node or TYPE_DECL which names a base for that type.
- INIT is a parameter list for that field's or base's constructor.
- Check the validity of NAME, and return a TREE_LIST of the base
- _TYPE or FIELD_DECL and the INIT. If NAME is invalid, return
+ Check the validity of NAME, and return either the base _TYPE, base
+ binfo, or the FIELD_DECL of the member. If NAME is invalid, return
NULL_TREE and issue a diagnostic.
An old style unnamed direct single base construction is permitted,
where NAME is NULL. */
tree
-expand_member_init (tree name, tree init)
+expand_member_init (tree name)
{
tree basetype;
tree field;
@@ -997,14 +999,12 @@ expand_member_init (tree name, tree init)
else
basetype = NULL_TREE;
- my_friendly_assert (init != NULL_TREE, 0);
-
if (basetype)
{
tree binfo;
if (current_template_parms)
- return build_tree_list (basetype, init);
+ return basetype;
binfo = lookup_base (current_class_type, basetype,
ba_ignore, NULL);
@@ -1020,7 +1020,7 @@ expand_member_init (tree name, tree init)
name, current_class_type);
return NULL_TREE;
}
- return build_tree_list (binfo, init);
+ return binfo;
}
else
{
@@ -1030,7 +1030,7 @@ expand_member_init (tree name, tree init)
field = name;
if (member_init_ok_or_else (field, current_class_type, name))
- return build_tree_list (field, init);
+ return field;
}
return NULL_TREE;
@@ -2163,12 +2163,9 @@ build_new_1 (exp)
tree cookie_expr, init_expr;
int has_array = 0;
enum tree_code code;
- int use_cookie, nothrow, check_new;
+ int nothrow, check_new;
/* Nonzero if the user wrote `::new' rather than just `new'. */
int globally_qualified_p;
- /* Nonzero if we're going to call a global operator new, rather than
- a class-specific version. */
- int use_global_new;
int use_java_new = 0;
/* If non-NULL, the number of extra bytes to allocate at the
beginning of the storage allocated for an array-new expression in
@@ -2177,6 +2174,7 @@ build_new_1 (exp)
/* True if the function we are calling is a placement allocation
function. */
bool placement_allocation_fn_p;
+ tree args = NULL_TREE;
placement = TREE_OPERAND (exp, 0);
type = TREE_OPERAND (exp, 1);
@@ -2211,10 +2209,6 @@ build_new_1 (exp)
if (!complete_type_or_else (true_type, exp))
return error_mark_node;
- size = size_in_bytes (true_type);
- if (has_array)
- size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
-
if (TREE_CODE (true_type) == VOID_TYPE)
{
error ("invalid type `void' for new");
@@ -2224,42 +2218,11 @@ build_new_1 (exp)
if (abstract_virtuals_error (NULL_TREE, true_type))
return error_mark_node;
- /* Figure out whether or not we're going to use the global operator
- new. */
- if (!globally_qualified_p
- && IS_AGGR_TYPE (true_type)
- && (has_array
- ? TYPE_HAS_ARRAY_NEW_OPERATOR (true_type)
- : TYPE_HAS_NEW_OPERATOR (true_type)))
- use_global_new = 0;
- else
- use_global_new = 1;
-
- /* We only need cookies for arrays containing types for which we
- need cookies. */
- if (!has_array || !TYPE_VEC_NEW_USES_COOKIE (true_type))
- use_cookie = 0;
- /* When using placement new, users may not realize that they need
- the extra storage. We require that the operator called be
- the global placement operator new[]. */
- else if (placement && !TREE_CHAIN (placement)
- && same_type_p (TREE_TYPE (TREE_VALUE (placement)),
- ptr_type_node))
- use_cookie = !use_global_new;
- /* Otherwise, we need the cookie. */
- else
- use_cookie = 1;
-
- /* Compute the number of extra bytes to allocate, now that we know
- whether or not we need the cookie. */
- if (use_cookie)
- {
- cookie_size = get_cookie_size (true_type);
- size = size_binop (PLUS_EXPR, size, cookie_size);
- }
+ size = size_in_bytes (true_type);
+ if (has_array)
+ size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
/* Allocate the object. */
-
if (! placement && TYPE_FOR_JAVA (true_type))
{
tree class_addr, alloc_decl;
@@ -2281,20 +2244,42 @@ build_new_1 (exp)
else
{
tree fnname;
- tree args;
- args = tree_cons (NULL_TREE, size, placement);
fnname = ansi_opname (code);
- if (use_global_new)
- alloc_call = (build_new_function_call
- (lookup_function_nonclass (fnname, args),
- args));
+ if (!globally_qualified_p
+ && CLASS_TYPE_P (true_type)
+ && (has_array
+ ? TYPE_HAS_ARRAY_NEW_OPERATOR (true_type)
+ : TYPE_HAS_NEW_OPERATOR (true_type)))
+ {
+ /* Use a class-specific operator new. */
+ /* If a cookie is required, add some extra space. */
+ if (has_array && TYPE_VEC_NEW_USES_COOKIE (true_type))
+ {
+ cookie_size = get_cookie_size (true_type);
+ size = size_binop (PLUS_EXPR, size, cookie_size);
+ }
+ /* Create the argument list. */
+ args = tree_cons (NULL_TREE, size, placement);
+ /* Call the function. */
+ alloc_call = build_method_call (build_dummy_object (true_type),
+ fnname, args,
+ TYPE_BINFO (true_type),
+ LOOKUP_NORMAL);
+ }
else
- alloc_call = build_method_call (build_dummy_object (true_type),
- fnname, args,
- TYPE_BINFO (true_type),
- LOOKUP_NORMAL);
+ {
+ /* Use a global operator new. */
+ /* See if a cookie might be required. */
+ if (has_array && TYPE_VEC_NEW_USES_COOKIE (true_type))
+ cookie_size = get_cookie_size (true_type);
+ else
+ cookie_size = NULL_TREE;
+
+ alloc_call = build_operator_new_call (fnname, placement,
+ &size, &cookie_size);
+ }
}
if (alloc_call == error_mark_node)
@@ -2308,6 +2293,7 @@ build_new_1 (exp)
t = TREE_OPERAND (t, 1);
alloc_fn = get_callee_fndecl (t);
my_friendly_assert (alloc_fn != NULL_TREE, 20020325);
+
/* Now, check to see if this function is actually a placement
allocation function. This can happen even when PLACEMENT is NULL
because we might have something like:
@@ -2337,7 +2323,7 @@ build_new_1 (exp)
alloc_expr = alloc_call;
- if (use_cookie)
+ if (cookie_size)
/* Adjust so we're pointing to the start of the object. */
alloc_expr = build (PLUS_EXPR, TREE_TYPE (alloc_expr),
alloc_expr, cookie_size);
@@ -2351,7 +2337,7 @@ build_new_1 (exp)
alloc_node = TREE_OPERAND (alloc_expr, 0);
/* Now initialize the cookie. */
- if (use_cookie)
+ if (cookie_size)
{
tree cookie;
@@ -2431,7 +2417,7 @@ build_new_1 (exp)
| (globally_qualified_p * LOOKUP_GLOBAL));
tree delete_node;
- if (use_cookie)
+ if (cookie_size)
/* Subtract the padding back out to get to the pointer returned
from operator new. */
delete_node = fold (build (MINUS_EXPR, TREE_TYPE (alloc_node),
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index cf4ca4cee36..8a871d8196c 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -36,24 +36,22 @@ Boston, MA 02111-1307, USA. */
{".H", "@c++-header", 0},
{".hh", "@c++-header", 0},
{"@c++-header",
- "%{E|M|MM:cc1plus -E %{!no-gcc:-D__GNUG__=%v1}\
- %(cpp_options) %2 %(cpp_debug_options)}\
+ "%{E|M|MM:cc1plus -E %(cpp_options) %2 %(cpp_debug_options)}\
%{!E:%{!M:%{!MM:\
- %{save-temps:cc1plus -E %{!no-gcc:-D__GNUG__=%v1}\
+ %{save-temps:cc1plus -E\
%(cpp_options) %2 %b.ii \n}\
cc1plus %{save-temps:-fpreprocessed %b.ii}\
- %{!save-temps:%(cpp_unique_options) %{!no-gcc:-D__GNUG__=%v1}}\
+ %{!save-temps:%(cpp_unique_options)}\
%(cc1_options) %2 %{+e1*}\
- -o %g.s %{!o*:--output-pch=%i.pch} %W{o*:--output-pch=%*}%V}}}",
+ -o %g.s %{!o*:--output-pch=%i.gch} %W{o*:--output-pch=%*}%V}}}",
CPLUSPLUS_CPP_SPEC},
{"@c++",
- "%{E|M|MM:cc1plus -E %{!no-gcc:-D__GNUG__=%v1}\
- %(cpp_options) %2 %(cpp_debug_options)}\
+ "%{E|M|MM:cc1plus -E %(cpp_options) %2 %(cpp_debug_options)}\
%{!E:%{!M:%{!MM:\
- %{save-temps:cc1plus -E %{!no-gcc:-D__GNUG__=%v1}\
- %(cpp_options) %2 %b.ii \n}\
- cc1plus %{save-temps:-fpreprocessed %b.ii}\
- %{!save-temps:%(cpp_unique_options) %{!no-gcc:-D__GNUG__=%v1}}\
+ %{save-temps|no-integrated-cpp:cc1plus -E\
+ %(cpp_options) %2 %{save-temps:%b.ii} %{!save-temps:%g.ii} \n}\
+ cc1plus %{save-temps|no-integrated-cpp:-fpreprocessed %{save-temps:%b.ii} %{!save-temps:%g.ii}}\
+ %{!save-temps:%{!no-integrated-cpp:%(cpp_unique_options)}}\
%(cc1_options) %2 %{+e1*}\
%{!fsyntax-only:%(invoke_as)}}}}",
CPLUSPLUS_CPP_SPEC},
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index b221ca65182..3ad9096f829 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -406,9 +406,8 @@ init_cp_pragma ()
the exact order that things are done here. It would be nice if the
initialization done by this routine were moved to its subroutines,
and the ordering dependencies clarified and reduced. */
-const char *
-cxx_init (filename)
- const char *filename;
+bool
+cxx_init (void)
{
input_filename = "<internal>";
@@ -446,15 +445,14 @@ cxx_init (filename)
interface_unknown = 1;
- filename = c_common_init (filename);
- if (filename == NULL)
- return NULL;
+ if (c_common_init () == false)
+ return false;
init_cp_pragma ();
- init_repo (filename);
+ init_repo (main_input_filename);
- return filename;
+ return true;
}
/* Helper function to load global variables with interface
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 06d8f96828d..a105db18bb8 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -127,7 +127,7 @@ substitution_identifier_index_t;
/* For quick substitution checks, look up these common identifiers
once only. */
-static tree subst_identifiers[SUBID_MAX];
+static GTY(()) tree subst_identifiers[SUBID_MAX];
/* Single-letter codes for builtin integer types, defined in
<builtin-type>. These are indexed by integer_type_kind values. */
@@ -2722,3 +2722,4 @@ write_java_integer_type_codes (type)
abort ();
}
+#include "gt-cp-mangle.h"
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index d0483487d87..910cf7b7f2b 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -50,7 +50,7 @@ enum mangling_flags
mf_maybe_uninstantiated = 1,
/* When mangling a numeric value, use the form `_XX_' (instead of
just `XX') if the value has more than one digit. */
- mf_use_underscores_around_value = 2,
+ mf_use_underscores_around_value = 2
};
typedef enum mangling_flags mangling_flags;
diff --git a/gcc/cp/operators.def b/gcc/cp/operators.def
index 98e31740928..b4de745a154 100644
--- a/gcc/cp/operators.def
+++ b/gcc/cp/operators.def
@@ -131,7 +131,7 @@ DEF_SIMPLE_OPERATOR ("--", POSTDECREMENT_EXPR, "mm", 2)
DEF_SIMPLE_OPERATOR ("<?", MIN_EXPR, "v23min", 2)
DEF_SIMPLE_OPERATOR (">?", MAX_EXPR, "v23max", 2)
/* This one is needed for mangling. */
-DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2);
+DEF_SIMPLE_OPERATOR ("::", SCOPE_REF, "sr", 2)
/* Assignment operators. */
DEF_ASSN_OPERATOR ("=", NOP_EXPR, "aS", 2)
@@ -146,8 +146,8 @@ DEF_ASSN_OPERATOR ("^=", BIT_XOR_EXPR, "eO", 2)
DEF_ASSN_OPERATOR ("<<=", LSHIFT_EXPR, "lS", 2)
DEF_ASSN_OPERATOR (">>=", RSHIFT_EXPR, "rS", 2)
/* These operators are GNU extensions. */
-DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2);
-DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2);
+DEF_ASSN_OPERATOR ("<?=", MIN_EXPR, "v23miN", 2)
+DEF_ASSN_OPERATOR (">?=", MAX_EXPR, "v23maX", 2)
/* Ternary operators. */
DEF_SIMPLE_OPERATOR ("?:", COND_EXPR, "qu", 3)
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c
index e29726c6ea1..8991803b304 100644
--- a/gcc/cp/optimize.c
+++ b/gcc/cp/optimize.c
@@ -183,6 +183,7 @@ maybe_clone_body (tree fn)
/* Update CLONE's source position information to match FN's. */
TREE_LOCUS (clone) = TREE_LOCUS (fn);
DECL_INLINE (clone) = DECL_INLINE (fn);
+ DID_INLINE_FUNC (clone) = DID_INLINE_FUNC (fn);
DECL_DECLARED_INLINE_P (clone) = DECL_DECLARED_INLINE_P (fn);
DECL_COMDAT (clone) = DECL_COMDAT (fn);
DECL_WEAK (clone) = DECL_WEAK (fn);
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 9fb5b6564d3..d20458b5382 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -3809,13 +3809,14 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p)
/* Otherwise, if we were avoiding committing until we knew
whether or not we had a pointer-to-member, we now know that
the expression is an ordinary reference to a qualified name. */
- if (qualifying_class && !processing_template_decl)
+ if (qualifying_class)
{
if (TREE_CODE (postfix_expression) == FIELD_DECL)
postfix_expression
= finish_non_static_data_member (postfix_expression,
qualifying_class);
- else if (BASELINK_P (postfix_expression))
+ else if (BASELINK_P (postfix_expression)
+ && !processing_template_decl)
{
tree fn;
tree fns;
@@ -7188,7 +7189,8 @@ cp_parser_mem_initializer_list (cp_parser* parser)
/* Let the semantic analysis code know that we are starting the
mem-initializer-list. */
- begin_mem_initializers ();
+ if (!DECL_CONSTRUCTOR_P (current_function_decl))
+ error ("only constructors take base initializers");
/* Loop through the list. */
while (true)
@@ -7211,7 +7213,8 @@ cp_parser_mem_initializer_list (cp_parser* parser)
}
/* Perform semantic analysis. */
- finish_mem_initializers (mem_initializer_list);
+ if (DECL_CONSTRUCTOR_P (current_function_decl))
+ finish_mem_initializers (mem_initializer_list);
}
/* Parse a mem-initializer.
@@ -7233,7 +7236,8 @@ cp_parser_mem_initializer (cp_parser* parser)
{
tree mem_initializer_id;
tree expression_list;
-
+ tree member;
+
/* Find out what is being initialized. */
if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
{
@@ -7242,6 +7246,10 @@ cp_parser_mem_initializer (cp_parser* parser)
}
else
mem_initializer_id = cp_parser_mem_initializer_id (parser);
+ member = expand_member_init (mem_initializer_id);
+ if (member && !DECL_P (member))
+ in_base_initializer = 1;
+
/* Look for the opening `('. */
cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
/* Parse the expression-list. */
@@ -7253,8 +7261,9 @@ cp_parser_mem_initializer (cp_parser* parser)
/* Look for the closing `)'. */
cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
- return expand_member_init (mem_initializer_id,
- expression_list);
+ in_base_initializer = 0;
+
+ return member ? build_tree_list (member, expression_list) : NULL_TREE;
}
/* Parse a mem-initializer-id.
@@ -7754,7 +7763,7 @@ cp_parser_type_parameter (cp_parser* parser)
/* Look for a keyword to tell us what kind of parameter this is. */
token = cp_parser_require (parser, CPP_KEYWORD,
- "expected `class', `typename', or `template'");
+ "`class', `typename', or `template'");
if (!token)
return error_mark_node;
@@ -10413,7 +10422,10 @@ cp_parser_declarator_id (cp_parser* parser)
/* If the name was qualified, create a SCOPE_REF to represent
that. */
if (parser->scope)
- id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
+ {
+ id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
+ parser->scope = NULL_TREE;
+ }
return id_expression;
}
@@ -11032,6 +11044,10 @@ cp_parser_function_definition (cp_parser* parser, bool* friend_p)
DECL_PENDING_INLINE_INFO (fn) = cache;
DECL_PENDING_INLINE_P (fn) = 1;
+ /* We need to know that this was defined in the class, so that
+ friend templates are handled correctly. */
+ DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
+
/* We're done with the inline definition. */
finish_method (fn);
@@ -11754,8 +11770,8 @@ cp_parser_class_head (cp_parser* parser,
}
else
{
- bool new_type_p;
tree class_type;
+ tree scope;
/* Given:
@@ -11778,14 +11794,25 @@ cp_parser_class_head (cp_parser* parser,
}
}
+ /* Figure out in what scope the declaration is being placed. */
+ scope = current_scope ();
+ if (!scope)
+ scope = current_namespace;
+ /* If that scope does not contain the scope in which the
+ class was originally declared, the program is invalid. */
+ if (scope && !is_ancestor (scope, CP_DECL_CONTEXT (type)))
+ {
+ error ("declaration of `%D' in `%D' which does not "
+ "enclose `%D'", type, scope, nested_name_specifier);
+ return NULL_TREE;
+ }
+
maybe_process_partial_specialization (TREE_TYPE (type));
class_type = current_class_type;
type = TREE_TYPE (handle_class_head (class_key,
nested_name_specifier,
type,
- attributes,
- /*defn_p=*/true,
- &new_type_p));
+ attributes));
if (type != error_mark_node)
{
if (!class_type && TYPE_CONTEXT (type))
@@ -13990,7 +14017,7 @@ cp_parser_single_declaration (cp_parser* parser,
parser->qualifying_scope = NULL_TREE;
parser->object_scope = NULL_TREE;
/* Look for a trailing `;' after the declaration. */
- if (!cp_parser_require (parser, CPP_SEMICOLON, "expected `;'")
+ if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'")
&& cp_parser_committed_to_tentative_parse (parser))
cp_parser_skip_to_end_of_block_or_statement (parser);
/* If it worked, set *FRIEND_P based on the DECL_SPECIFIERS. */
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 9d39ee1aa6c..fe89583855e 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -110,12 +110,14 @@ static tree coerce_template_parms PARAMS ((tree, tree, tree,
static void tsubst_enum PARAMS ((tree, tree, tree));
static tree add_to_template_args PARAMS ((tree, tree));
static tree add_outermost_template_args PARAMS ((tree, tree));
+static bool check_instantiated_args PARAMS ((tree, tree, tsubst_flags_t));
static int maybe_adjust_types_for_deduction PARAMS ((unification_kind_t, tree*,
tree*));
static int type_unification_real PARAMS ((tree, tree, tree, tree,
int, unification_kind_t, int, int));
static void note_template_header PARAMS ((int));
static tree maybe_fold_nontype_arg PARAMS ((tree));
+static void maybe_fold_nontype_args PARAMS ((tree));
static tree convert_nontype_argument PARAMS ((tree, tree));
static tree convert_template_argument PARAMS ((tree, tree, tree,
tsubst_flags_t, int, tree));
@@ -429,6 +431,7 @@ push_inline_template_parms_recursive (parmlist, levels)
tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
TREE_TYPE (parm));
DECL_ARTIFICIAL (decl) = 1;
+ TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
DECL_INITIAL (decl) = DECL_INITIAL (parm);
SET_DECL_TEMPLATE_PARM_P (decl);
pushdecl (decl);
@@ -776,8 +779,22 @@ void
maybe_process_partial_specialization (type)
tree type;
{
+ /* TYPE maybe an ERROR_MARK_NODE. */
+ tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
+
if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
{
+ /* This is for ordinary explicit specialization and partial
+ specialization of a template class such as:
+
+ template <> class C<int>;
+
+ or:
+
+ template <class T> class C<T*>;
+
+ Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
+
if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
&& !COMPLETE_TYPE_P (type))
{
@@ -795,6 +812,62 @@ maybe_process_partial_specialization (type)
else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
error ("specialization of `%T' after instantiation", type);
}
+ else if (CLASS_TYPE_P (type)
+ && !CLASSTYPE_USE_TEMPLATE (type)
+ && CLASSTYPE_TEMPLATE_INFO (type)
+ && context && CLASS_TYPE_P (context)
+ && CLASSTYPE_TEMPLATE_INFO (context))
+ {
+ /* This is for an explicit specialization of member class
+ template according to [temp.expl.spec/18]:
+
+ template <> template <class U> class C<int>::D;
+
+ The context `C<int>' must be an implicit instantiation.
+ Otherwise this is just a member class template declared
+ earlier like:
+
+ template <> class C<int> { template <class U> class D; };
+ template <> template <class U> class C<int>::D;
+
+ In the first case, `C<int>::D' is a specialization of `C<T>::D'
+ while in the second case, `C<int>::D' is a primary template
+ and `C<T>::D' may not exist. */
+
+ if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
+ && !COMPLETE_TYPE_P (type))
+ {
+ tree t;
+
+ if (current_namespace
+ != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
+ {
+ pedwarn ("specializing `%#T' in different namespace", type);
+ cp_pedwarn_at (" from definition of `%#D'",
+ CLASSTYPE_TI_TEMPLATE (type));
+ }
+
+ /* Check for invalid specialization after instantiation:
+
+ template <> template <> class C<int>::D<int>;
+ template <> template <class U> class C<int>::D; */
+
+ for (t = DECL_TEMPLATE_INSTANTIATIONS
+ (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
+ t; t = TREE_CHAIN (t))
+ if (TREE_VALUE (t) != type
+ && TYPE_CONTEXT (TREE_VALUE (t)) == context)
+ error ("specialization `%T' after instantiation `%T'",
+ type, TREE_VALUE (t));
+
+ /* Mark TYPE as a specialization. And as a result, we only
+ have one level of template argument for the innermost
+ class template. */
+ SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
+ CLASSTYPE_TI_ARGS (type)
+ = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
+ }
+ }
else if (processing_specialization)
error ("explicit specialization of non-template `%T'", type);
}
@@ -1769,7 +1842,7 @@ check_explicit_specialization (declarator, decl, template_count, flags)
targs = new_targs;
}
- return instantiate_template (tmpl, targs);
+ return instantiate_template (tmpl, targs, tf_error);
}
/* If this is a specialization of a member template of a
@@ -1980,6 +2053,8 @@ build_template_parm_index (index, level, orig_level, decl, type)
TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
TEMPLATE_PARM_DECL (t) = decl;
TREE_TYPE (t) = type;
+ TREE_CONSTANT (t) = TREE_CONSTANT (decl);
+ TREE_READONLY (t) = TREE_READONLY (decl);
return t;
}
@@ -1999,20 +2074,21 @@ reduce_template_parm_level (index, type, levels)
|| (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
!= TEMPLATE_PARM_LEVEL (index) - levels))
{
- tree decl
- = build_decl (TREE_CODE (TEMPLATE_PARM_DECL (index)),
- DECL_NAME (TEMPLATE_PARM_DECL (index)),
- type);
- tree t
- = build_template_parm_index (TEMPLATE_PARM_IDX (index),
+ tree orig_decl = TEMPLATE_PARM_DECL (index);
+ tree decl, t;
+
+ decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
+ TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
+ TREE_READONLY (decl) = TREE_READONLY (orig_decl);
+ DECL_ARTIFICIAL (decl) = 1;
+ SET_DECL_TEMPLATE_PARM_P (decl);
+
+ t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
TEMPLATE_PARM_LEVEL (index) - levels,
TEMPLATE_PARM_ORIG_LEVEL (index),
decl, type);
TEMPLATE_PARM_DESCENDANTS (index) = t;
- DECL_ARTIFICIAL (decl) = 1;
- SET_DECL_TEMPLATE_PARM_P (decl);
-
/* Template template parameters need this. */
DECL_TEMPLATE_PARMS (decl)
= DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
@@ -2067,10 +2143,11 @@ process_template_parm (list, next)
TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
/* A template parameter is not modifiable. */
- TREE_READONLY (parm) = 1;
+ TREE_READONLY (parm) = TREE_CONSTANT (parm) = 1;
if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
TREE_TYPE (parm) = void_type_node;
decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
+ TREE_CONSTANT (decl) = TREE_READONLY (decl) = 1;
DECL_INITIAL (parm) = DECL_INITIAL (decl)
= build_template_parm_index (idx, processing_template_decl,
processing_template_decl,
@@ -3562,39 +3639,7 @@ convert_template_argument (parm, arg, args, complain, i, in_decl)
}
}
else
- {
- val = groktypename (arg);
- if (! processing_template_decl)
- {
- /* [basic.link]: A name with no linkage (notably, the
- name of a class or enumeration declared in a local
- scope) shall not be used to declare an entity with
- linkage. This implies that names with no linkage
- cannot be used as template arguments. */
- tree t = no_linkage_check (val);
- if (t)
- {
- if (TYPE_ANONYMOUS_P (t))
- pedwarn
- ("template-argument `%T' uses anonymous type", val);
- else
- error
- ("template-argument `%T' uses local type `%T'",
- val, t);
- return error_mark_node;
- }
-
- /* In order to avoid all sorts of complications, we do
- not allow variably-modified types as template
- arguments. */
- if (variably_modified_type_p (val))
- {
- error ("template-argument `%T' is a variably modified type",
- val);
- return error_mark_node;
- }
- }
- }
+ val = groktypename (arg);
}
else
{
@@ -3634,9 +3679,7 @@ convert_template_argument (parm, arg, args, complain, i, in_decl)
/* Convert all template arguments to their appropriate types, and
return a vector containing the innermost resulting template
arguments. If any error occurs, return error_mark_node. Error and
- warning messages are issued under control of COMPLAIN. Some error
- messages are issued even if COMPLAIN is zero; for instance, if a
- template argument is composed from a local class.
+ warning messages are issued under control of COMPLAIN.
If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
provided in ARGLIST, or else trailing parameters must have default
@@ -4137,7 +4180,9 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
arglist2 = coerce_template_parms (parmlist, arglist, template,
complain, /*require_all_args=*/1);
- if (arglist2 == error_mark_node)
+ if (arglist2 == error_mark_node
+ || (!uses_template_parms (arglist2)
+ && check_instantiated_args (template, arglist2, complain)))
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
@@ -4226,7 +4271,11 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
template,
complain, /*require_all_args=*/1);
- if (arglist == error_mark_node)
+ if (arglist == error_mark_node
+ || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
+ && check_instantiated_args (template,
+ INNERMOST_TEMPLATE_ARGS (arglist),
+ complain)))
/* We were unable to bind the arguments. */
POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
@@ -4851,7 +4900,7 @@ tsubst_friend_function (decl, args)
tmpl = determine_specialization (template_id, new_friend,
&new_args,
/*need_member_template=*/0);
- new_friend = instantiate_template (tmpl, new_args);
+ new_friend = instantiate_template (tmpl, new_args, tf_error);
goto done;
}
@@ -5480,12 +5529,8 @@ instantiate_class_template (type)
--processing_template_decl;
}
else
- {
- /* Build new DECL_FRIENDLIST. */
-
- add_friend (type,
- tsubst_friend_function (t, args));
- }
+ /* Build new DECL_FRIENDLIST. */
+ add_friend (type, tsubst_friend_function (t, args));
}
}
@@ -5576,6 +5621,28 @@ maybe_fold_nontype_arg (arg)
return arg;
}
+/* Apply maybe_fold_nontype_arg on a list or vector of args. */
+
+static void
+maybe_fold_nontype_args (tree targs)
+{
+ if (!targs)
+ /*OK*/;
+ else if (TREE_CODE (targs) == TREE_LIST)
+ {
+ tree chain;
+ for (chain = targs; chain; chain = TREE_CHAIN (chain))
+ TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
+ }
+ else
+ {
+ int i;
+ for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
+ TREE_VEC_ELT (targs, i)
+ = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
+ }
+}
+
/* Substitute ARGS into the vector of template arguments T. */
static tree
@@ -7145,10 +7212,6 @@ tsubst_copy (t, args, complain, in_decl)
= tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
/*entering_scope=*/0);
- /* Not yet available. */
- if (!enum_type || enum_type == (TREE_TYPE (t)))
- return t;
-
for (v = TYPE_VALUES (enum_type);
v != NULL_TREE;
v = TREE_CHAIN (v))
@@ -7205,6 +7268,9 @@ tsubst_copy (t, args, complain, in_decl)
template_id_p = true;
template_args = TREE_OPERAND (fns, 1);
fns = TREE_OPERAND (fns, 0);
+ template_args = tsubst_copy (template_args, args,
+ complain, in_decl);
+ maybe_fold_nontype_args (template_args);
}
name = DECL_NAME (get_first_fn (fns));
t = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
@@ -7412,20 +7478,7 @@ tsubst_copy (t, args, complain, in_decl)
tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
in_decl);
- if (targs && TREE_CODE (targs) == TREE_LIST)
- {
- tree chain;
- for (chain = targs; chain; chain = TREE_CHAIN (chain))
- TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
- }
- else if (targs)
- {
- int i;
- for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
- TREE_VEC_ELT (targs, i)
- = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
- }
-
+ maybe_fold_nontype_args (targs);
return lookup_template_function
(tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
}
@@ -7878,6 +7931,8 @@ tsubst_copy_and_build (t, args, complain, in_decl)
tree object;
tree template
= tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
+ tree targs
+ = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
if (TREE_CODE (template) == COMPONENT_REF)
{
@@ -7886,10 +7941,8 @@ tsubst_copy_and_build (t, args, complain, in_decl)
}
else
object = NULL_TREE;
-
- template = lookup_template_function
- (template,
- tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
+ maybe_fold_nontype_args (targs);
+ template = lookup_template_function (template, targs);
if (object)
return build (COMPONENT_REF, TREE_TYPE (template),
@@ -8334,18 +8387,78 @@ tsubst_copy_and_build (t, args, complain, in_decl)
}
}
+/* Verify that the instantiated ARGS are valid. For type arguments,
+ make sure that the type's linkage is ok. For non-type arguments,
+ make sure they are constants if they are integral or enumarations.
+ Emit an error under control of COMPLAIN, and return TRUE on error. */
+
+static bool
+check_instantiated_args (tmpl, args, complain)
+ tree tmpl, args;
+ tsubst_flags_t complain;
+{
+ int ix, len = DECL_NTPARMS (tmpl);
+ bool result = false;
+
+ for (ix = 0; ix != len; ix++)
+ {
+ tree t = TREE_VEC_ELT (args, ix);
+
+ if (TYPE_P (t))
+ {
+ /* [basic.link]: A name with no linkage (notably, the name
+ of a class or enumeration declared in a local scope)
+ shall not be used to declare an entity with linkage.
+ This implies that names with no linkage cannot be used as
+ template arguments. */
+ tree nt = no_linkage_check (t);
+
+ if (nt)
+ {
+ if (!(complain & tf_error))
+ /*OK*/;
+ else if (TYPE_ANONYMOUS_P (nt))
+ error ("`%T' uses anonymous type", t);
+ else
+ error ("`%T' uses local type `%T'", t, nt);
+ result = true;
+ }
+ /* In order to avoid all sorts of complications, we do not
+ allow variably-modified types as template arguments. */
+ else if (variably_modified_type_p (t))
+ {
+ if (complain & tf_error)
+ error ("`%T' is a variably modified type", t);
+ result = true;
+ }
+ }
+ /* A non-type argument of integral or enumerated type must be a
+ constant. */
+ else if (TREE_TYPE (t)
+ && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
+ && !TREE_CONSTANT (t))
+ {
+ if (complain & tf_error)
+ error ("integral expression `%E' is not constant", t);
+ result = true;
+ }
+ }
+ if (result && complain & tf_error)
+ error (" trying to instantiate `%D'", tmpl);
+ return result;
+}
+
/* Instantiate the indicated variable or function template TMPL with
the template arguments in TARG_PTR. */
tree
-instantiate_template (tmpl, targ_ptr)
+instantiate_template (tmpl, targ_ptr, complain)
tree tmpl, targ_ptr;
+ tsubst_flags_t complain;
{
tree fndecl;
tree gen_tmpl;
tree spec;
- int i, len;
- tree inner_args;
if (tmpl == error_mark_node)
return error_mark_node;
@@ -8355,7 +8468,8 @@ instantiate_template (tmpl, targ_ptr)
/* If this function is a clone, handle it specially. */
if (DECL_CLONED_FUNCTION_P (tmpl))
{
- tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr);
+ tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
+ complain);
tree clone;
/* Look for the clone. */
@@ -8389,34 +8503,20 @@ instantiate_template (tmpl, targ_ptr)
return spec;
}
- len = DECL_NTPARMS (gen_tmpl);
- inner_args = INNERMOST_TEMPLATE_ARGS (targ_ptr);
- i = len;
- while (i--)
- {
- tree t = TREE_VEC_ELT (inner_args, i);
- if (TYPE_P (t))
- {
- tree nt = target_type (t);
- if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
- {
- error ("type `%T' composed from a local class is not a valid template-argument", t);
- error (" trying to instantiate `%D'", gen_tmpl);
- return error_mark_node;
- }
- }
- }
-
+ if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
+ complain))
+ return error_mark_node;
+
/* Make sure that we can see identifiers, and compute access
correctly. The desired FUNCTION_DECL for FNDECL may or may not be
created earlier. Let push_access_scope_real figure that out. */
push_access_scope_real
(gen_tmpl, targ_ptr, tsubst (DECL_CONTEXT (gen_tmpl), targ_ptr,
- tf_error, gen_tmpl));
+ complain, gen_tmpl));
/* substitute template parameters */
fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
- targ_ptr, tf_error, gen_tmpl);
+ targ_ptr, complain, gen_tmpl);
pop_access_scope (gen_tmpl);
@@ -8668,6 +8768,12 @@ maybe_adjust_types_for_deduction (strict, parm, arg)
*parm = TREE_TYPE (*parm);
result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
}
+
+ /* DR 322. For conversion deduction, remove a reference type on parm
+ too (which has been swapped into ARG). */
+ if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
+ *arg = TREE_TYPE (*arg);
+
return result;
}
@@ -10130,6 +10236,10 @@ most_general_template (decl)
if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
break;
+ if (CLASS_TYPE_P (TREE_TYPE (decl))
+ && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
+ break;
+
/* Stop if we run into an explicitly specialized class template. */
if (!DECL_NAMESPACE_SCOPE_P (decl)
&& DECL_CONTEXT (decl)
@@ -10696,12 +10806,14 @@ instantiate_decl (d, defer_ok)
td = template_for_substitution (d);
code_pattern = DECL_TEMPLATE_RESULT (td);
- /* In the case of a friend template whose definition is provided
- outside the class, we may have too many arguments. Drop the ones
- we don't need. */
- args = get_innermost_template_args (gen_args,
- TMPL_PARMS_DEPTH
- (DECL_TEMPLATE_PARMS (td)));
+ if (DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
+ /* In the case of a friend template whose definition is provided
+ outside the class, we may have too many arguments. Drop the
+ ones we don't need. */
+ args = get_innermost_template_args
+ (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
+ else
+ args = gen_args;
if (TREE_CODE (d) == FUNCTION_DECL)
pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
@@ -11025,9 +11137,12 @@ tsubst_initializer_list (t, argvec)
decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
NULL_TREE);
+ decl = expand_member_init (decl);
+ if (decl && !DECL_P (decl))
+ in_base_initializer = 1;
+
init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
NULL_TREE);
-
if (!init)
;
else if (TREE_CODE (init) == TREE_LIST)
@@ -11036,9 +11151,11 @@ tsubst_initializer_list (t, argvec)
else if (init != void_type_node)
init = convert_from_reference (init);
- init = expand_member_init (decl, init);
- if (init)
+ in_base_initializer = 0;
+
+ if (decl)
{
+ init = build_tree_list (decl, init);
TREE_CHAIN (init) = inits;
inits = init;
}
@@ -11075,12 +11192,7 @@ tsubst_enum (tag, newtag, args)
for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
{
tree value;
-
- /* Copy node and set type */
- if (DECL_INITIAL (TREE_VALUE (e)))
- DECL_INITIAL (TREE_VALUE (e)) = copy_node (DECL_INITIAL (TREE_VALUE (e)));
- TREE_TYPE (TREE_VALUE (e)) = tag;
-
+
/* Note that in a template enum, the TREE_VALUE is the
CONST_DECL, not the corresponding INTEGER_CST. */
value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
diff --git a/gcc/cp/ptree.c b/gcc/cp/ptree.c
index 5550d00869b..aefc9613e75 100644
--- a/gcc/cp/ptree.c
+++ b/gcc/cp/ptree.c
@@ -48,19 +48,19 @@ cxx_print_decl (FILE *file, tree node, int indent)
&& DECL_PENDING_INLINE_INFO (node))
{
fprintf (file, " pending-inline-info ");
- fprintf (file, HOST_PTR_PRINTF, DECL_PENDING_INLINE_INFO (node));
+ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_PENDING_INLINE_INFO (node));
}
if (TREE_CODE (node) == TYPE_DECL
&& DECL_SORTED_FIELDS (node))
{
fprintf (file, " sorted-fields ");
- fprintf (file, HOST_PTR_PRINTF, DECL_SORTED_FIELDS (node));
+ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_SORTED_FIELDS (node));
}
if ((TREE_CODE (node) == FUNCTION_DECL || TREE_CODE (node) == VAR_DECL)
&& DECL_TEMPLATE_INFO (node))
{
fprintf (file, " template-info ");
- fprintf (file, HOST_PTR_PRINTF, DECL_TEMPLATE_INFO (node));
+ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_TEMPLATE_INFO (node));
}
}
@@ -153,12 +153,21 @@ cxx_print_type (FILE *file, tree node, int indent)
}
}
+
+static void
+cxx_print_binding (FILE *stream, cxx_binding *binding, const char *prefix)
+{
+ fprintf (stream, "%s <", prefix);
+ fprintf (stream, HOST_PTR_PRINTF, (char *) binding);
+ fprintf (stream, ">");
+}
+
void
cxx_print_identifier (FILE *file, tree node, int indent)
{
- print_node (file, "bindings", IDENTIFIER_NAMESPACE_BINDINGS (node), indent + 4);
+ cxx_print_binding (file, IDENTIFIER_NAMESPACE_BINDINGS (node), "bindings");
print_node (file, "class", IDENTIFIER_CLASS_VALUE (node), indent + 4);
- print_node (file, "local bindings", IDENTIFIER_BINDING (node), indent + 4);
+ cxx_print_binding (file, IDENTIFIER_BINDING (node), "local bindings");
print_node (file, "label", IDENTIFIER_LABEL_VALUE (node), indent + 4);
print_node (file, "template", IDENTIFIER_TEMPLATE (node), indent + 4);
print_node (file, "implicit", IDENTIFIER_IMPLICIT_DECL (node), indent + 4);
@@ -170,12 +179,6 @@ cxx_print_xnode (FILE *file, tree node, int indent)
{
switch (TREE_CODE (node))
{
- case CPLUS_BINDING:
- fprintf (file, " scope ");
- fprintf (file, HOST_PTR_PRINTF, BINDING_SCOPE (node));
- print_node (file, "value", BINDING_VALUE (node), indent+4);
- print_node (file, "chain", TREE_CHAIN (node), indent+4);
- break;
case OVERLOAD:
print_node (file, "function", OVL_FUNCTION (node), indent+4);
print_node (file, "chain", TREE_CHAIN (node), indent+4);
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 9ebae8b5448..24ba0fd9b02 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -73,6 +73,9 @@ Boston, MA 02111-1307, USA. */
/* The IDENTIFIER_NODE naming the real class. */
#define TINFO_REAL_NAME(NODE) TREE_PURPOSE (NODE)
+/* A varray of all tinfo decls that haven't yet been emitted. */
+varray_type unemitted_tinfo_decls;
+
static tree build_headof PARAMS((tree));
static tree ifnonnull PARAMS((tree, tree));
static tree tinfo_name PARAMS((tree));
@@ -97,6 +100,7 @@ static tree get_pseudo_ti_init PARAMS ((tree, tree, bool *));
static tree get_pseudo_ti_desc PARAMS((tree));
static void create_tinfo_types PARAMS((void));
static bool typeinfo_in_lib_p (tree);
+static bool unemitted_tinfo_decl_p PARAMS((tree));
static int doing_runtime = 0;
@@ -122,6 +126,8 @@ init_rtti_processing (void)
type_info_ptr_type = build_pointer_type (const_type_info_type);
type_info_ref_type = build_reference_type (const_type_info_type);
+ VARRAY_TREE_INIT (unemitted_tinfo_decls, 10, "RTTI decls");
+
create_tinfo_types ();
}
@@ -367,6 +373,10 @@ get_tinfo_decl (tree type)
/* Remember the type it is for. */
TREE_TYPE (name) = type;
+
+ /* Add decl to the global array of tinfo decls. */
+ my_friendly_assert (unemitted_tinfo_decls != 0, 20030312);
+ VARRAY_PUSH_TREE (unemitted_tinfo_decls, d);
}
return d;
@@ -378,13 +388,8 @@ get_tinfo_decl (tree type)
static tree
get_tinfo_ptr (tree type)
{
- tree exp = get_tinfo_decl (type);
-
- /* Convert to type_info type. */
- exp = build_unary_op (ADDR_EXPR, exp, 0);
- exp = ocp_convert (type_info_ptr_type, exp, CONV_REINTERPRET, 0);
-
- return exp;
+ return build_nop (type_info_ptr_type,
+ build_address (get_tinfo_decl (type)));
}
/* Return the type_info object for TYPE. */
@@ -917,7 +922,7 @@ dfs_class_hint_mark (tree binfo, void *data)
SET_CLASSTYPE_MARKED (basetype);
}
return NULL_TREE;
-};
+}
/* Clear the base's dfs marks, after searching for duplicate bases. */
@@ -1408,8 +1413,8 @@ emit_support_tinfos (void)
/* Return true, iff T is a type_info variable which has not had a
definition emitted for it. */
-bool
-unemitted_tinfo_decl_p (tree t, void *data ATTRIBUTE_UNUSED)
+static bool
+unemitted_tinfo_decl_p (tree t)
{
if (/* It's a var decl */
TREE_CODE (t) == VAR_DECL
@@ -1434,13 +1439,14 @@ unemitted_tinfo_decl_p (tree t, void *data ATTRIBUTE_UNUSED)
generate the initializer. */
bool
-emit_tinfo_decl (tree *decl_ptr, void *data ATTRIBUTE_UNUSED)
+emit_tinfo_decl (tree decl)
{
- tree decl = *decl_ptr;
tree type = TREE_TYPE (DECL_NAME (decl));
bool non_public;
int in_library = typeinfo_in_lib_p (type);
tree var_desc, var_init;
+
+ my_friendly_assert (unemitted_tinfo_decl_p (decl), 20030307);
import_export_tinfo (decl, type, in_library);
if (DECL_REALLY_EXTERN (decl) || !DECL_NEEDED_P (decl))
diff --git a/gcc/cp/search.c b/gcc/cp/search.c
index f97cb743d2d..9fc84311d38 100644
--- a/gcc/cp/search.c
+++ b/gcc/cp/search.c
@@ -81,7 +81,7 @@ struct vbase_info
tree inits;
};
-static tree lookup_field_1 (tree, tree);
+static tree lookup_field_1 (tree, tree, bool);
static tree dfs_check_overlap (tree, void *);
static tree dfs_no_overlap_yet (tree, int, void *);
static base_kind lookup_base_r (tree, tree, base_access,
@@ -420,17 +420,18 @@ get_dynamic_cast_base_type (tree subtype, tree target)
return offset;
}
-/* Search for a member with name NAME in a multiple inheritance lattice
- specified by TYPE. If it does not exist, return NULL_TREE.
+/* Search for a member with name NAME in a multiple inheritance
+ lattice specified by TYPE. If it does not exist, return NULL_TREE.
If the member is ambiguously referenced, return `error_mark_node'.
- Otherwise, return the FIELD_DECL. */
+ Otherwise, return a DECL with the indicated name. If WANT_TYPE is
+ true, type declarations are preferred. */
/* Do a 1-level search for NAME as a member of TYPE. The caller must
figure out whether it can access this field. (Since it is only one
level, this is reasonable.) */
static tree
-lookup_field_1 (tree type, tree name)
+lookup_field_1 (tree type, tree name, bool want_type)
{
register tree field;
@@ -467,14 +468,24 @@ lookup_field_1 (tree type, tree name)
lo = i + 1;
else
{
+ field = NULL_TREE;
+
/* We might have a nested class and a field with the
same name; we sorted them appropriately via
field_decl_cmp, so just look for the last field with
this name. */
- while (i + 1 < hi
- && DECL_NAME (fields[i+1]) == name)
- ++i;
- return fields[i];
+ while (true)
+ {
+ if (!want_type
+ || TREE_CODE (fields[i]) == TYPE_DECL
+ || DECL_CLASS_TEMPLATE_P (fields[i]))
+ field = fields[i];
+ if (i + 1 == hi || DECL_NAME (fields[i+1]) != name)
+ break;
+ i++;
+ }
+
+ return field;
}
}
return NULL_TREE;
@@ -485,7 +496,7 @@ lookup_field_1 (tree type, tree name)
#ifdef GATHER_STATISTICS
n_calls_lookup_field_1++;
#endif /* GATHER_STATISTICS */
- while (field)
+ for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
{
#ifdef GATHER_STATISTICS
n_fields_searched++;
@@ -494,7 +505,7 @@ lookup_field_1 (tree type, tree name)
if (DECL_NAME (field) == NULL_TREE
&& ANON_AGGR_TYPE_P (TREE_TYPE (field)))
{
- tree temp = lookup_field_1 (TREE_TYPE (field), name);
+ tree temp = lookup_field_1 (TREE_TYPE (field), name, want_type);
if (temp)
return temp;
}
@@ -504,10 +515,13 @@ lookup_field_1 (tree type, tree name)
to return a USING_DECL, and the rest of the compiler can't
handle it. Once the class is defined, these are purged
from TYPE_FIELDS anyhow; see handle_using_decl. */
- ;
- else if (DECL_NAME (field) == name)
+ continue;
+
+ if (DECL_NAME (field) == name
+ && (!want_type
+ || TREE_CODE (field) == TYPE_DECL
+ || DECL_CLASS_TEMPLATE_P (field)))
return field;
- field = TREE_CHAIN (field);
}
/* Not found. */
if (name == vptr_identifier)
@@ -1079,7 +1093,7 @@ lookup_field_r (tree binfo, void *data)
if (!nval)
/* Look for a data member or type. */
- nval = lookup_field_1 (type, lfi->name);
+ nval = lookup_field_1 (type, lfi->name, lfi->want_type);
/* If there is no declaration with the indicated name in this type,
then there's nothing to do. */
@@ -1212,11 +1226,15 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type)
const char *errstr = 0;
+ /* Sanity check. */
+ if (TREE_CODE (name) != IDENTIFIER_NODE)
+ abort ();
+
if (xbasetype == current_class_type && TYPE_BEING_DEFINED (xbasetype)
&& IDENTIFIER_CLASS_VALUE (name))
{
tree field = IDENTIFIER_CLASS_VALUE (name);
- if (TREE_CODE (field) != FUNCTION_DECL
+ if (! is_overloaded_fn (field)
&& ! (want_type && TREE_CODE (field) != TYPE_DECL))
/* We're in the scope of this class, and the value has already
been looked up. Just return the cached value. */
@@ -2267,8 +2285,8 @@ lookup_conversions (tree type)
tree t;
tree conversions = NULL_TREE;
- if (COMPLETE_TYPE_P (type))
- bfs_walk (TYPE_BINFO (type), add_conversions, 0, &conversions);
+ complete_type (type);
+ bfs_walk (TYPE_BINFO (type), add_conversions, 0, &conversions);
for (t = conversions; t; t = TREE_CHAIN (t))
IDENTIFIER_MARKED (DECL_NAME (OVL_CURRENT (TREE_VALUE (t)))) = 0;
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 2a57a34f495..ad39d74bd01 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1136,15 +1136,6 @@ finish_eh_cleanup (cleanup)
add_stmt (r);
}
-/* Begin processing a mem-initializer-list. */
-
-void
-begin_mem_initializers ()
-{
- if (! DECL_CONSTRUCTOR_P (current_function_decl))
- error ("only constructors take base initializers");
-}
-
/* The MEM_INITS is a list of mem-initializers, in reverse of the
order they were written by the user. Each node is as for
emit_mem_initializers. */
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 266538f6408..7a4e029aa8b 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -212,6 +212,18 @@ real_lvalue_p (ref)
return lvalue_p_1 (ref, /*treat_class_rvalues_as_lvalues=*/ 0, /*cast*/ 1);
}
+/* Returns the kind of lvalue that REF is, in the sense of
+ [basic.lval]. This function should really be named lvalue_p; it
+ computes the C++ definition of lvalue. */
+
+cp_lvalue_kind
+real_non_cast_lvalue_p (tree ref)
+{
+ return lvalue_p_1 (ref,
+ /*treat_class_rvalues_as_lvalues=*/0,
+ /*allow_cast_as_lvalue=*/0);
+}
+
/* This differs from real_lvalue_p in that class rvalues are
considered lvalues. */
@@ -1009,7 +1021,7 @@ count_functions (t)
return 1;
else if (TREE_CODE (t) == OVERLOAD)
{
- for (i=0; t; t = OVL_CHAIN (t))
+ for (i = 0; t; t = OVL_CHAIN (t))
i++;
return i;
}
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 27cdc022c30..45d528ffb13 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1941,7 +1941,8 @@ build_class_member_access_expr (tree object, tree member,
&& integer_zerop (TREE_OPERAND (object, 0)));
/* Convert OBJECT to the type of MEMBER. */
- if (!same_type_p (object_type, member_scope))
+ if (!same_type_p (TYPE_MAIN_VARIANT (object_type),
+ TYPE_MAIN_VARIANT (member_scope)))
{
tree binfo;
base_kind kind;
@@ -1951,7 +1952,7 @@ build_class_member_access_expr (tree object, tree member,
if (binfo == error_mark_node)
return error_mark_node;
- /* It is invalid to use to try to get to a virtual base of a
+ /* It is invalid to try to get to a virtual base of a
NULL object. The most common cause is invalid use of
offsetof macro. */
if (null_object_p && kind == bk_via_virtual)
@@ -2655,9 +2656,8 @@ get_member_function_from_ptrfunc (instance_ptrptr, function)
}
tree
-build_function_call_real (function, params, require_complete, flags)
+build_function_call (function, params)
tree function, params;
- int require_complete, flags;
{
register tree fntype, fndecl;
register tree value_type;
@@ -2731,20 +2731,10 @@ build_function_call_real (function, params, require_complete, flags)
/* Convert the parameters to the types declared in the
function prototype, or apply default promotions. */
- if (flags & LOOKUP_COMPLAIN)
- coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
- params, fndecl, LOOKUP_NORMAL);
- else
- coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
- params, fndecl, 0);
-
+ coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype),
+ params, fndecl, LOOKUP_NORMAL);
if (coerced_params == error_mark_node)
- {
- if (flags & LOOKUP_SPECULATIVELY)
- return NULL_TREE;
- else
- return error_mark_node;
- }
+ return error_mark_node;
/* Check for errors in format strings. */
@@ -2770,23 +2760,13 @@ build_function_call_real (function, params, require_complete, flags)
result = fold (build_call (function, coerced_params));
value_type = TREE_TYPE (result);
- if (require_complete)
- {
- if (TREE_CODE (value_type) == VOID_TYPE)
- return result;
- result = require_complete_type (result);
- }
+ if (TREE_CODE (value_type) == VOID_TYPE)
+ return result;
+ result = require_complete_type (result);
if (IS_AGGR_TYPE (value_type))
result = build_cplus_new (value_type, result);
return convert_from_reference (result);
}
-
-tree
-build_function_call (function, params)
- tree function, params;
-{
- return build_function_call_real (function, params, 1, LOOKUP_NORMAL);
-}
/* Convert the actual parameter expressions in the list VALUES
to the types in the list TYPELIST.
@@ -3628,8 +3608,6 @@ build_binary_op (code, orig_op0, orig_op1, convert_p)
int uns = TREE_UNSIGNED (result_type);
tree type;
- type = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
final_type = result_type;
/* Handle the case that OP0 does not *contain* a conversion
@@ -4091,7 +4069,45 @@ condition_conversion (expr)
t = fold (build1 (CLEANUP_POINT_EXPR, boolean_type_node, t));
return t;
}
-
+
+/* Return an ADDR_EXPR giving the address of T. This function
+ attempts no optimizations or simplifications; it is a low-level
+ primitive. */
+
+tree
+build_address (tree t)
+{
+ tree addr;
+
+ if (error_operand_p (t) || !cxx_mark_addressable (t))
+ return error_mark_node;
+
+ addr = build1 (ADDR_EXPR,
+ build_pointer_type (TREE_TYPE (t)),
+ t);
+ if (staticp (t))
+ TREE_CONSTANT (addr) = 1;
+
+ return addr;
+}
+
+/* Return a NOP_EXPR converting EXPR to TYPE. */
+
+tree
+build_nop (tree type, tree expr)
+{
+ tree nop;
+
+ if (type == error_mark_node || error_operand_p (expr))
+ return expr;
+
+ nop = build1 (NOP_EXPR, type, expr);
+ if (TREE_CONSTANT (expr))
+ TREE_CONSTANT (nop) = 1;
+
+ return nop;
+}
+
/* C++: Must handle pointers to members.
Perhaps type instantiation should be extended to handle conversion
@@ -4481,9 +4497,6 @@ build_unary_op (code, xarg, noconvert)
if (argtype != error_mark_node)
argtype = build_pointer_type (argtype);
- if (!cxx_mark_addressable (arg))
- return error_mark_node;
-
{
tree addr;
@@ -4517,12 +4530,7 @@ build_unary_op (code, xarg, noconvert)
cp_convert (argtype, byte_position (field))));
}
else
- addr = build1 (ADDR_EXPR, argtype, arg);
-
- /* Address of a static or external variable or
- function counts as a constant */
- if (staticp (arg))
- TREE_CONSTANT (addr) = 1;
+ addr = build_address (arg);
if (TREE_CODE (argtype) == POINTER_TYPE
&& TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
@@ -4736,7 +4744,7 @@ cxx_mark_addressable (exp)
warning ("address requested for `%D', which is declared `register'",
x);
TREE_ADDRESSABLE (x) = 1;
- put_var_into_stack (x);
+ put_var_into_stack (x, /*rescan=*/true);
return true;
case FUNCTION_DECL:
@@ -5800,11 +5808,17 @@ build_ptrmemfunc (type, pfn, force)
int force;
{
tree fn;
- tree pfn_type = TREE_TYPE (pfn);
- tree to_type = build_ptrmemfunc_type (type);
+ tree pfn_type;
+ tree to_type;
+
+ if (error_operand_p (pfn))
+ return error_mark_node;
+
+ pfn_type = TREE_TYPE (pfn);
+ to_type = build_ptrmemfunc_type (type);
/* Handle multiple conversions of pointer to member functions. */
- if (TYPE_PTRMEMFUNC_P (TREE_TYPE (pfn)))
+ if (TYPE_PTRMEMFUNC_P (pfn_type))
{
tree delta = NULL_TREE;
tree npfn = NULL_TREE;
@@ -6185,7 +6199,7 @@ convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum)
if (fndecl)
savew = warningcount, savee = errorcount;
- rhs = initialize_reference (type, rhs);
+ rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE);
if (fndecl)
{
if (warningcount > savew)
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index a4558790bbb..c4540481454 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -388,32 +388,8 @@ store_init_value (decl, init)
return value;
else if (TREE_STATIC (decl)
&& (! TREE_CONSTANT (value)
- || ! initializer_constant_valid_p (value, TREE_TYPE (value))
-#if 0
- /* A STATIC PUBLIC int variable doesn't have to be
- run time inited when doing pic. (mrs) */
- /* Since ctors and dtors are the only things that can
- reference vtables, and they are always written down
- the vtable definition, we can leave the
- vtables in initialized data space.
- However, other initialized data cannot be initialized
- this way. Instead a global file-level initializer
- must do the job. */
- || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
-#endif
- ))
-
+ || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
return value;
-#if 0 /* No, that's C. jason 9/19/94 */
- else
- {
- if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
- {
- if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
- pedwarn ("ISO C++ forbids non-constant aggregate initializer expressions");
- }
- }
-#endif
/* Store the VALUE in DECL_INITIAL. If we're building a
statement-tree we will actually expand the initialization later
diff --git a/gcc/cppexp.c b/gcc/cppexp.c
index 202b2d01a59..59a08e90a67 100644
--- a/gcc/cppexp.c
+++ b/gcc/cppexp.c
@@ -175,7 +175,8 @@ cpp_classify_number (pfile, token)
str++;
/* Require at least one hex digit to classify it as hex. */
- if ((*str == 'x' || *str == 'X') && ISXDIGIT (str[1]))
+ if ((*str == 'x' || *str == 'X')
+ && (str[1] == '.' || ISXDIGIT (str[1])))
{
radix = 16;
str++;
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index 502e8a2e161..1ff34ff0084 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -31,7 +31,11 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "mkdeps.h"
#include "splay-tree.h"
#ifdef ENABLE_VALGRIND_CHECKING
-#include <valgrind.h>
+# ifdef HAVE_MEMCHECK_H
+# include <memcheck.h>
+# else
+# include <valgrind.h>
+# endif
#else
/* Avoid #ifdef:s when we can help it. */
#define VALGRIND_DISCARD(x)
@@ -153,6 +157,7 @@ static int report_missing_guard PARAMS ((splay_tree_node, void *));
static splay_tree_node find_or_create_entry PARAMS ((cpp_reader *,
const char *));
static void handle_missing_header PARAMS ((cpp_reader *, const char *, int));
+static int remove_component_p PARAMS ((const char *));
/* Set up the splay tree we use to store information about all the
file names seen in this compilation. We also have entries for each
@@ -160,7 +165,7 @@ static void handle_missing_header PARAMS ((cpp_reader *, const char *, int));
don't try to open it again in future.
The key of each node is the file name, after processing by
- simplify_path. The path name may or may not be absolute.
+ cpp_simplify_path. The path name may or may not be absolute.
The path string has been malloced, as is automatically freed by
registering free () as the splay tree key deletion function.
@@ -216,15 +221,8 @@ find_or_create_entry (pfile, fname)
splay_tree_node node;
struct include_file *file;
char *name = xstrdup (fname);
- int saved_errno = 0;
-
- if (pfile->cb.simplify_path)
- {
- errno = 0;
- (pfile->cb.simplify_path) (name);
- saved_errno = errno;
- }
+ cpp_simplify_path (name);
node = splay_tree_lookup (pfile->all_include_files, (splay_tree_key) name);
if (node)
free (name);
@@ -233,7 +231,7 @@ find_or_create_entry (pfile, fname)
file = xcnew (struct include_file);
file->name = name;
file->header_name = name;
- file->err_no = saved_errno;
+ file->err_no = errno;
node = splay_tree_insert (pfile->all_include_files,
(splay_tree_key) file->name,
(splay_tree_value) file);
@@ -343,7 +341,7 @@ validate_pch (pfile, filename, pchname)
if (INCLUDE_PCH_P (file))
{
char *f = xstrdup (filename);
- (pfile->cb.simplify_path) (f);
+ cpp_simplify_path (f);
file->header_name = f;
return file;
}
@@ -758,6 +756,18 @@ cpp_make_system_header (pfile, syshdr, externc)
SOURCE_LINE (pfile->map, pfile->line), flags);
}
+/* Allow the client to change the current file. Used by the front end
+ to achieve pseudo-file names like <built-in>.
+ If REASON is LC_LEAVE, then NEW_NAME must be NULL. */
+void
+cpp_change_file (pfile, reason, new_name)
+ cpp_reader *pfile;
+ enum lc_reason reason;
+ const char *new_name;
+{
+ _cpp_do_file_change (pfile, reason, new_name, 1, 0);
+}
+
/* Report on all files that might benefit from a multiple include guard.
Triggered by -H. */
void
@@ -886,6 +896,24 @@ _cpp_read_file (pfile, fname)
return stack_include_file (pfile, f);
}
+/* Pushes the given file onto the buffer stack. Returns nonzero if
+ successful. */
+bool
+cpp_push_include (pfile, filename)
+ cpp_reader *pfile;
+ const char *filename;
+{
+ cpp_token header;
+
+ header.type = CPP_STRING;
+ header.val.str.text = (const unsigned char *) filename;
+ header.val.str.len = strlen (filename);
+ /* Make the command line directive take up a line. */
+ pfile->line++;
+
+ return _cpp_execute_include (pfile, &header, IT_CMDLINE);
+}
+
/* Do appropriate cleanup when a file INC's buffer is popped off the
input stack. */
void
@@ -1171,3 +1199,156 @@ cpp_set_include_chains (pfile, quote, bracket, quote_ignores_source_dir)
pfile->bracket_include = bracket;
}
}
+
+/* Returns true if it is safe to remove the final component of path,
+ when it is followed by a ".." component. We use lstat to avoid
+ symlinks if we have it. If not, we can still catch errors with
+ stat (). */
+static int
+remove_component_p (path)
+ const char *path;
+{
+ struct stat s;
+ int result;
+
+#ifdef HAVE_LSTAT
+ result = lstat (path, &s);
+#else
+ result = stat (path, &s);
+#endif
+
+ /* There's no guarantee that errno will be unchanged, even on
+ success. Cygwin's lstat(), for example, will often set errno to
+ ENOSYS. In case of success, reset errno to zero. */
+ if (result == 0)
+ errno = 0;
+
+ return result == 0 && S_ISDIR (s.st_mode);
+}
+
+/* Simplify a path name in place, deleting redundant components. This
+ reduces OS overhead and guarantees that equivalent paths compare
+ the same (modulo symlinks).
+
+ Transforms made:
+ foo/bar/../quux foo/quux
+ foo/./bar foo/bar
+ foo//bar foo/bar
+ /../quux /quux
+ //quux //quux (POSIX allows leading // as a namespace escape)
+
+ Guarantees no trailing slashes. All transforms reduce the length
+ of the string. Returns PATH. errno is 0 if no error occurred;
+ nonzero if an error occurred when using stat () or lstat (). */
+void
+cpp_simplify_path (path)
+ char *path ATTRIBUTE_UNUSED;
+{
+#ifndef VMS
+ char *from, *to;
+ char *base, *orig_base;
+ int absolute = 0;
+
+ errno = 0;
+ /* Don't overflow the empty path by putting a '.' in it below. */
+ if (*path == '\0')
+ return;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Convert all backslashes to slashes. */
+ for (from = path; *from; from++)
+ if (*from == '\\') *from = '/';
+
+ /* Skip over leading drive letter if present. */
+ if (ISALPHA (path[0]) && path[1] == ':')
+ from = to = &path[2];
+ else
+ from = to = path;
+#else
+ from = to = path;
+#endif
+
+ /* Remove redundant leading /s. */
+ if (*from == '/')
+ {
+ absolute = 1;
+ to++;
+ from++;
+ if (*from == '/')
+ {
+ if (*++from == '/')
+ /* 3 or more initial /s are equivalent to 1 /. */
+ while (*++from == '/');
+ else
+ /* On some hosts // differs from /; Posix allows this. */
+ to++;
+ }
+ }
+
+ base = orig_base = to;
+ for (;;)
+ {
+ int move_base = 0;
+
+ while (*from == '/')
+ from++;
+
+ if (*from == '\0')
+ break;
+
+ if (*from == '.')
+ {
+ if (from[1] == '\0')
+ break;
+ if (from[1] == '/')
+ {
+ from += 2;
+ continue;
+ }
+ else if (from[1] == '.' && (from[2] == '/' || from[2] == '\0'))
+ {
+ /* Don't simplify if there was no previous component. */
+ if (absolute && orig_base == to)
+ {
+ from += 2;
+ continue;
+ }
+ /* Don't simplify if the previous component was "../",
+ or if an error has already occurred with (l)stat. */
+ if (base != to && errno == 0)
+ {
+ /* We don't back up if it's a symlink. */
+ *to = '\0';
+ if (remove_component_p (path))
+ {
+ while (to > base && *to != '/')
+ to--;
+ from += 2;
+ continue;
+ }
+ }
+ move_base = 1;
+ }
+ }
+
+ /* Add the component separator. */
+ if (to > orig_base)
+ *to++ = '/';
+
+ /* Copy this component until the trailing null or '/'. */
+ while (*from != '\0' && *from != '/')
+ *to++ = *from++;
+
+ if (move_base)
+ base = to;
+ }
+
+ /* Change the empty string to "." so that it is not treated as stdin.
+ Null terminate. */
+ if (to == path)
+ *to++ = '.';
+ *to = '\0';
+#else /* VMS */
+ errno = 0;
+#endif /* !VMS */
+}
diff --git a/gcc/cpphash.h b/gcc/cpphash.h
index 16aba087b88..bc0d099599b 100644
--- a/gcc/cpphash.h
+++ b/gcc/cpphash.h
@@ -240,18 +240,6 @@ struct spec_nodes
cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */
};
-/* Encapsulates state used to convert a stream of tokens into a text
- file. */
-struct printer
-{
- FILE *outf; /* Stream to write to. */
- const struct line_map *map; /* Logical to physical line mappings. */
- const cpp_token *prev; /* Previous token. */
- const cpp_token *source; /* Source token for spacing. */
- unsigned int line; /* Line currently being written. */
- unsigned char printed; /* Nonzero if something output at line. */
-};
-
/* Represents the contents of a file cpplib has read in. */
struct cpp_buffer
{
@@ -344,11 +332,6 @@ struct cpp_reader
/* If in_directive, the directive if known. */
const struct directive *directive;
- /* The next -include-d file; NULL if they all are done. If it
- points to NULL, the last one is in progress, and
- _cpp_maybe_push_include_file has yet to restore the line map. */
- struct pending_option **next_include_file;
-
/* Search paths for include files. */
struct cpp_path *quote_include; /* "" */
struct cpp_path *bracket_include; /* <> */
@@ -380,9 +363,6 @@ struct cpp_reader
for include files. (Altered as we get more of them.) */
unsigned int max_include_len;
- /* Macros on or after this line are warned about if unused. */
- unsigned int first_unused_line;
-
/* Date and time text. Calculated together if either is requested. */
const uchar *date;
const uchar *time;
@@ -422,9 +402,6 @@ struct cpp_reader
preprocessor. */
struct spec_nodes spec_nodes;
- /* Used when doing preprocessed output. */
- struct printer print;
-
/* Nonzero means don't look for #include "foo" the source-file
directory. */
unsigned char quote_ignores_source_dir;
@@ -532,6 +509,7 @@ extern cpp_token *_cpp_lex_direct PARAMS ((cpp_reader *));
extern int _cpp_equiv_tokens PARAMS ((const cpp_token *,
const cpp_token *));
extern void _cpp_init_tokenrun PARAMS ((tokenrun *, unsigned int));
+extern void _cpp_init_mbchar PARAMS ((void));
/* In cppinit.c. */
extern void _cpp_maybe_push_include_file PARAMS ((cpp_reader *));
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 2068ba1d675..376d72e9e58 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -25,57 +25,11 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "tm.h"
#include "cpplib.h"
#include "cpphash.h"
-#include "intl.h"
#include "mkdeps.h"
-/* Internal structures and prototypes. */
-
-/* A `struct pending_option' remembers one -D, -A, -U, -include, or
- -imacros switch. */
-typedef void (* cl_directive_handler) PARAMS ((cpp_reader *, const char *));
-struct pending_option
-{
- struct pending_option *next;
- const char *arg;
- cl_directive_handler handler;
-};
-
-/* The `pending' structure accumulates all the options that are not
- actually processed until we hit cpp_read_main_file. It consists of
- several lists, one for each type of option. We keep both head and
- tail pointers for quick insertion. */
-struct cpp_pending
-{
- struct pending_option *directive_head, *directive_tail;
- struct pending_option *imacros_head, *imacros_tail;
- struct pending_option *include_head, *include_tail;
-};
-
-#ifdef __STDC__
-#define APPEND(pend, list, elt) \
- do { if (!(pend)->list##_head) (pend)->list##_head = (elt); \
- else (pend)->list##_tail->next = (elt); \
- (pend)->list##_tail = (elt); \
- } while (0)
-#else
-#define APPEND(pend, list, elt) \
- do { if (!(pend)->list/**/_head) (pend)->list/**/_head = (elt); \
- else (pend)->list/**/_tail->next = (elt); \
- (pend)->list/**/_tail = (elt); \
- } while (0)
-#endif
-
static void init_library PARAMS ((void));
-static void init_builtins PARAMS ((cpp_reader *));
static void mark_named_operators PARAMS ((cpp_reader *));
-static bool push_include PARAMS ((cpp_reader *,
- struct pending_option *));
-static void free_chain PARAMS ((struct pending_option *));
static void read_original_filename PARAMS ((cpp_reader *));
-static void new_pending_directive PARAMS ((struct cpp_pending *,
- const char *,
- cl_directive_handler));
-static int parse_option PARAMS ((const char *));
static void post_options PARAMS ((cpp_reader *));
/* If we have designated initializers (GCC >2.7) these tables can be
@@ -157,21 +111,7 @@ cpp_set_lang (pfile, lang)
CPP_OPTION (pfile, digraphs) = l->digraphs;
}
-#ifdef HOST_EBCDIC
-static int opt_comp PARAMS ((const void *, const void *));
-
-/* Run-time sorting of options array. */
-static int
-opt_comp (p1, p2)
- const void *p1, *p2;
-{
- return strcmp (((struct cl_option *) p1)->opt_text,
- ((struct cl_option *) p2)->opt_text);
-}
-#endif
-
-/* init initializes library global state. It might not need to
- do anything depending on the platform and compiler. */
+/* Initialize library global state. */
static void
init_library ()
{
@@ -181,23 +121,20 @@ init_library ()
{
initialized = 1;
-#ifdef HOST_EBCDIC
- /* For non-ASCII hosts, the cl_options array needs to be sorted at
- runtime. */
- qsort (cl_options, N_OPTS, sizeof (struct cl_option), opt_comp);
-#endif
-
/* Set up the trigraph map. This doesn't need to do anything if
we were compiled with a compiler that supports C99 designated
initializers. */
init_trigraph_map ();
+
+ _cpp_init_mbchar ();
}
}
/* Initialize a cpp_reader structure. */
cpp_reader *
-cpp_create_reader (lang)
+cpp_create_reader (lang, table)
enum c_lang lang;
+ hash_table *table;
{
cpp_reader *pfile;
@@ -218,9 +155,6 @@ cpp_create_reader (lang)
CPP_OPTION (pfile, warn_deprecated) = 1;
CPP_OPTION (pfile, warn_long_long) = !CPP_OPTION (pfile, c99);
- CPP_OPTION (pfile, pending) =
- (struct cpp_pending *) xcalloc (1, sizeof (struct cpp_pending));
-
/* Default CPP arithmetic to something sensible for the host for the
benefit of dumb users like fix-header. */
CPP_OPTION (pfile, precision) = CHAR_BIT * sizeof (long);
@@ -266,6 +200,8 @@ cpp_create_reader (lang)
_cpp_init_includes (pfile);
+ _cpp_init_hashtable (pfile, table);
+
return pfile;
}
@@ -278,8 +214,6 @@ cpp_destroy (pfile)
cpp_context *context, *contextn;
tokenrun *run, *runn;
- free_chain (CPP_OPTION (pfile, pending)->include_head);
- free (CPP_OPTION (pfile, pending));
free (pfile->op_stack);
while (CPP_BUFFER (pfile) != NULL)
@@ -394,10 +328,10 @@ mark_named_operators (pfile)
}
}
-/* Subroutine of cpp_read_main_file; reads the builtins table above and
- enters them, and language-specific macros, into the hash table. */
-static void
-init_builtins (pfile)
+/* Read the builtins table above and enter them, and language-specific
+ macros, into the hash table. */
+void
+cpp_init_builtins (pfile)
cpp_reader *pfile;
{
const struct builtin *b;
@@ -425,44 +359,6 @@ init_builtins (pfile)
if (CPP_OPTION (pfile, objc))
_cpp_define_builtin (pfile, "__OBJC__ 1");
-
- if (pfile->cb.register_builtins)
- (*pfile->cb.register_builtins) (pfile);
-}
-
-/* Pushes a command line -imacro and -include file indicated by P onto
- the buffer stack. Returns nonzero if successful. */
-static bool
-push_include (pfile, p)
- cpp_reader *pfile;
- struct pending_option *p;
-{
- cpp_token header;
-
- /* Later: maybe update this to use the #include "" search path
- if cpp_read_file fails. */
- header.type = CPP_STRING;
- header.val.str.text = (const unsigned char *) p->arg;
- header.val.str.len = strlen (p->arg);
- /* Make the command line directive take up a line. */
- pfile->line++;
-
- return _cpp_execute_include (pfile, &header, IT_CMDLINE);
-}
-
-/* Frees a pending_option chain. */
-static void
-free_chain (head)
- struct pending_option *head;
-{
- struct pending_option *next;
-
- while (head)
- {
- next = head->next;
- free (head);
- head = next;
- }
}
/* Sanity-checks are dependent on command-line options, so it is
@@ -536,19 +432,17 @@ cpp_add_dependency_target (pfile, target, quote)
or stdin if it is the empty string. Return the original filename
on success (e.g. foo.i->foo.c), or NULL on failure. */
const char *
-cpp_read_main_file (pfile, fname, table)
+cpp_read_main_file (pfile, fname)
cpp_reader *pfile;
const char *fname;
- hash_table *table;
{
sanity_checks (pfile);
post_options (pfile);
- /* The front ends don't set up the hash table until they have
- finished processing the command line options, so initializing the
- hashtable is deferred until now. */
- _cpp_init_hashtable (pfile, table);
+ /* Mark named operators before handling command line macros. */
+ if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
+ mark_named_operators (pfile);
if (CPP_OPTION (pfile, deps.style) != DEPS_NONE)
{
@@ -606,71 +500,6 @@ read_original_filename (pfile)
_cpp_backup_tokens (pfile, 1);
}
-/* Handle pending command line options: -D, -U, -A, -imacros and
- -include. This should be called after debugging has been properly
- set up in the front ends. */
-void
-cpp_finish_options (pfile)
- cpp_reader *pfile;
-{
- /* Mark named operators before handling command line macros. */
- if (CPP_OPTION (pfile, cplusplus) && CPP_OPTION (pfile, operator_names))
- mark_named_operators (pfile);
-
- /* Install builtins and process command line macros etc. in the order
- they appeared, but only if not already preprocessed. */
- if (! CPP_OPTION (pfile, preprocessed))
- {
- struct pending_option *p;
-
- _cpp_do_file_change (pfile, LC_RENAME, _("<built-in>"), 1, 0);
- init_builtins (pfile);
- _cpp_do_file_change (pfile, LC_RENAME, _("<command line>"), 1, 0);
- for (p = CPP_OPTION (pfile, pending)->directive_head; p; p = p->next)
- (*p->handler) (pfile, p->arg);
-
- /* Scan -imacros files after -D, -U, but before -include.
- pfile->next_include_file is NULL, so _cpp_pop_buffer does not
- push -include files. */
- for (p = CPP_OPTION (pfile, pending)->imacros_head; p; p = p->next)
- if (push_include (pfile, p))
- cpp_scan_nooutput (pfile);
-
- pfile->next_include_file = &CPP_OPTION (pfile, pending)->include_head;
- _cpp_maybe_push_include_file (pfile);
- }
-
- pfile->first_unused_line = pfile->line;
-
- free_chain (CPP_OPTION (pfile, pending)->imacros_head);
- free_chain (CPP_OPTION (pfile, pending)->directive_head);
-}
-
-/* Push the next buffer on the stack given by -include, if any. */
-void
-_cpp_maybe_push_include_file (pfile)
- cpp_reader *pfile;
-{
- if (pfile->next_include_file)
- {
- struct pending_option *head = *pfile->next_include_file;
-
- while (head && !push_include (pfile, head))
- head = head->next;
-
- if (head)
- pfile->next_include_file = &head->next;
- else
- {
- /* All done; restore the line map from <command line>. */
- _cpp_do_file_change (pfile, LC_RENAME,
- pfile->line_maps.maps[0].to_file, 1, 0);
- /* Don't come back here again. */
- pfile->next_include_file = NULL;
- }
- }
-}
-
/* This is called at the end of preprocessing. It pops the last
buffer and writes dependency output, and returns the number of
errors.
@@ -711,219 +540,6 @@ cpp_finish (pfile, deps_stream)
return pfile->errors;
}
-/* Add a directive to be handled later in the initialization phase. */
-static void
-new_pending_directive (pend, text, handler)
- struct cpp_pending *pend;
- const char *text;
- cl_directive_handler handler;
-{
- struct pending_option *o = (struct pending_option *)
- xmalloc (sizeof (struct pending_option));
-
- o->arg = text;
- o->next = NULL;
- o->handler = handler;
- APPEND (pend, directive, o);
-}
-
-/* Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
- I.e. a const string initializer with parens around it. That is
- what N_("string") resolves to, so we make no_* be macros instead. */
-#define no_ass N_("assertion missing after %s")
-#define no_fil N_("file name missing after %s")
-#define no_mac N_("macro name missing after %s")
-
-/* This is the list of all command line options, with the leading
- "-" removed. It must be sorted in ASCII collating order. */
-#define COMMAND_LINE_OPTIONS \
- DEF_OPT("A", no_ass, OPT_A) \
- DEF_OPT("D", no_mac, OPT_D) \
- DEF_OPT("U", no_mac, OPT_U) \
- DEF_OPT("imacros", no_fil, OPT_imacros) \
- DEF_OPT("include", no_fil, OPT_include)
-
-#define DEF_OPT(text, msg, code) code,
-enum opt_code
-{
- COMMAND_LINE_OPTIONS
- N_OPTS
-};
-#undef DEF_OPT
-
-struct cl_option
-{
- const char *opt_text;
- const char *msg;
- size_t opt_len;
- enum opt_code opt_code;
-};
-
-#define DEF_OPT(text, msg, code) { text, msg, sizeof(text) - 1, code },
-#ifdef HOST_EBCDIC
-static struct cl_option cl_options[] =
-#else
-static const struct cl_option cl_options[] =
-#endif
-{
- COMMAND_LINE_OPTIONS
-};
-#undef DEF_OPT
-#undef COMMAND_LINE_OPTIONS
-
-/* Perform a binary search to find which, if any, option the given
- command-line matches. Returns its index in the option array,
- negative on failure. Complications arise since some options can be
- suffixed with an argument, and multiple complete matches can occur,
- e.g. -pedantic and -pedantic-errors. */
-static int
-parse_option (input)
- const char *input;
-{
- unsigned int md, mn, mx;
- size_t opt_len;
- int comp;
-
- mn = 0;
- mx = N_OPTS;
-
- while (mx > mn)
- {
- md = (mn + mx) / 2;
-
- opt_len = cl_options[md].opt_len;
- comp = strncmp (input, cl_options[md].opt_text, opt_len);
-
- if (comp > 0)
- mn = md + 1;
- else if (comp < 0)
- mx = md;
- else
- {
- if (input[opt_len] == '\0')
- return md;
- /* We were passed more text. If the option takes an argument,
- we may match a later option or we may have been passed the
- argument. The longest possible option match succeeds.
- If the option takes no arguments we have not matched and
- continue the search (e.g. input="stdc++" match was "stdc"). */
- mn = md + 1;
- if (cl_options[md].msg)
- {
- /* Scan forwards. If we get an exact match, return it.
- Otherwise, return the longest option-accepting match.
- This loops no more than twice with current options. */
- mx = md;
- for (; mn < (unsigned int) N_OPTS; mn++)
- {
- opt_len = cl_options[mn].opt_len;
- if (strncmp (input, cl_options[mn].opt_text, opt_len))
- break;
- if (input[opt_len] == '\0')
- return mn;
- if (cl_options[mn].msg)
- mx = mn;
- }
- return mx;
- }
- }
- }
-
- return -1;
-}
-
-/* Handle one command-line option in (argc, argv).
- Can be called multiple times, to handle multiple sets of options.
- Returns number of strings consumed. */
-int
-cpp_handle_option (pfile, argc, argv)
- cpp_reader *pfile;
- int argc;
- char **argv;
-{
- int i = 0;
- struct cpp_pending *pend = CPP_OPTION (pfile, pending);
-
- {
- enum opt_code opt_code;
- int opt_index;
- const char *arg = 0;
-
- /* Skip over '-'. */
- opt_index = parse_option (&argv[i][1]);
- if (opt_index < 0)
- return i;
-
- opt_code = cl_options[opt_index].opt_code;
- if (cl_options[opt_index].msg)
- {
- arg = &argv[i][cl_options[opt_index].opt_len + 1];
- if (arg[0] == '\0')
- {
- arg = argv[++i];
- if (!arg)
- {
- cpp_error (pfile, DL_ERROR,
- cl_options[opt_index].msg, argv[i - 1]);
- return argc;
- }
- }
- }
-
- switch (opt_code)
- {
- case N_OPTS: /* Shut GCC up. */
- break;
-
- case OPT_D:
- new_pending_directive (pend, arg, cpp_define);
- break;
-
- case OPT_A:
- if (arg[0] == '-')
- {
- /* -A with an argument beginning with '-' acts as
- #unassert on whatever immediately follows the '-'.
- If "-" is the whole argument, we eliminate all
- predefined macros and assertions, including those
- that were specified earlier on the command line.
- That way we can get rid of any that were passed
- automatically in from GCC. */
-
- if (arg[1] == '\0')
- {
- free_chain (pend->directive_head);
- pend->directive_head = NULL;
- pend->directive_tail = NULL;
- }
- else
- new_pending_directive (pend, arg + 1, cpp_unassert);
- }
- else
- new_pending_directive (pend, arg, cpp_assert);
- break;
- case OPT_U:
- new_pending_directive (pend, arg, cpp_undef);
- break;
- case OPT_include:
- case OPT_imacros:
- {
- struct pending_option *o = (struct pending_option *)
- xmalloc (sizeof (struct pending_option));
- o->arg = arg;
- o->next = NULL;
-
- if (opt_code == OPT_include)
- APPEND (pend, include, o);
- else
- APPEND (pend, imacros, o);
- }
- break;
- }
- }
- return i + 1;
-}
-
static void
post_options (pfile)
cpp_reader *pfile;
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index 169730d53ae..93e04b8b529 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -89,6 +89,16 @@ static tokenrun *next_tokenrun PARAMS ((tokenrun *));
static unsigned int hex_digit_value PARAMS ((unsigned int));
static _cpp_buff *new_buff PARAMS ((size_t));
+/* Change to the native locale for multibyte conversions. */
+void
+_cpp_init_mbchar ()
+{
+#ifdef MULTIBYTE_CHARS
+ setlocale (LC_CTYPE, "");
+ GET_ENVIRONMENT (literal_codeset, "LANG");
+#endif
+}
+
/* Utility routine:
Compares, the token TOKEN to the NUL-terminated string STRING.
@@ -1721,14 +1731,15 @@ maybe_read_ucs (pfile, pstr, limit, pc)
}
}
-#ifdef TARGET_EBCDIC
- cpp_error (pfile, DL_ERROR, "universal-character-name on EBCDIC target");
- code = 0x3f; /* EBCDIC invalid character */
-#else
- /* True extended characters are OK. */
- if (code >= 0xa0
- && !(code & 0x80000000)
- && !(code >= 0xD800 && code <= 0xDFFF))
+ if (CPP_OPTION (pfile, EBCDIC))
+ {
+ cpp_error (pfile, DL_ERROR, "universal-character-name on EBCDIC target");
+ code = 0x3f; /* EBCDIC invalid character */
+ }
+ /* True extended characters are OK. */
+ else if (code >= 0xa0
+ && !(code & 0x80000000)
+ && !(code >= 0xD800 && code <= 0xDFFF))
;
/* The standard permits $, @ and ` to be specified as UCNs. We use
hex escapes so that this also works with EBCDIC hosts. */
@@ -1737,7 +1748,6 @@ maybe_read_ucs (pfile, pstr, limit, pc)
/* Don't give another error if one occurred above. */
else if (length == 0)
cpp_error (pfile, DL_ERROR, "universal-character-name out of range");
-#endif
*pstr = p;
*pc = code;
@@ -1756,11 +1766,20 @@ cpp_parse_escape (pfile, pstr, limit, wide)
const unsigned char *limit;
int wide;
{
+ /* Values of \a \b \e \f \n \r \t \v respectively. */
+ static const uchar ascii[] = { 7, 8, 27, 12, 10, 13, 9, 11 };
+ static const uchar ebcdic[] = { 47, 22, 39, 12, 21, 13, 5, 11 };
+
int unknown = 0;
- const unsigned char *str = *pstr;
+ const unsigned char *str = *pstr, *charconsts;
cppchar_t c, mask;
unsigned int width;
+ if (CPP_OPTION (pfile, EBCDIC))
+ charconsts = ebcdic;
+ else
+ charconsts = ascii;
+
if (wide)
width = CPP_OPTION (pfile, wchar_precision);
else
@@ -1774,12 +1793,12 @@ cpp_parse_escape (pfile, pstr, limit, wide)
switch (c)
{
case '\\': case '\'': case '"': case '?': break;
- case 'b': c = TARGET_BS; break;
- case 'f': c = TARGET_FF; break;
- case 'n': c = TARGET_NEWLINE; break;
- case 'r': c = TARGET_CR; break;
- case 't': c = TARGET_TAB; break;
- case 'v': c = TARGET_VT; break;
+ case 'b': c = charconsts[1]; break;
+ case 'f': c = charconsts[3]; break;
+ case 'n': c = charconsts[4]; break;
+ case 'r': c = charconsts[5]; break;
+ case 't': c = charconsts[6]; break;
+ case 'v': c = charconsts[7]; break;
case '(': case '{': case '[': case '%':
/* '\(', etc, are used at beginning of line to avoid confusing Emacs.
@@ -1791,14 +1810,14 @@ cpp_parse_escape (pfile, pstr, limit, wide)
if (CPP_WTRADITIONAL (pfile))
cpp_error (pfile, DL_WARNING,
"the meaning of '\\a' is different in traditional C");
- c = TARGET_BELL;
+ c = charconsts[0];
break;
case 'e': case 'E':
if (CPP_PEDANTIC (pfile))
cpp_error (pfile, DL_PEDWARN,
"non-ISO-standard escape sequence, '\\%c'", (int) c);
- c = TARGET_ESC;
+ c = charconsts[2];
break;
case 'u': case 'U':
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index ed2bc958751..7d2d9652477 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1,6 +1,6 @@
/* CPP Library. (Directive handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Contributed by Per Bothner, 1994-95.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -2072,14 +2072,7 @@ _cpp_pop_buffer (pfile)
/* Don't generate a callback for popping the main file. */
if (pfile->buffer)
- {
- _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
-
- /* If this is the main file, there may be some -include
- files left to push. */
- if (!pfile->buffer->prev)
- _cpp_maybe_push_include_file (pfile);
- }
+ _cpp_do_file_change (pfile, LC_LEAVE, 0, 0, 0);
}
}
diff --git a/gcc/cpplib.h b/gcc/cpplib.h
index 384dd209ac2..ec5f8e47c1e 100644
--- a/gcc/cpplib.h
+++ b/gcc/cpplib.h
@@ -206,15 +206,6 @@ struct cpp_token
typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
typedef CPPCHAR_SIGNED_T cppchar_signed_t;
-/* Values for opts.dump_macros.
- dump_only means inhibit output of the preprocessed text
- and instead output the definitions of all user-defined
- macros in a form suitable for use as input to cpp.
- dump_names means pass #define and the macro name through to output.
- dump_definitions means pass the whole definition (plus #define) through
-*/
-enum { dump_none = 0, dump_only, dump_names, dump_definitions };
-
/* This structure is nested inside struct cpp_reader, and
carries all the options visible to the command line. */
struct cpp_options
@@ -222,9 +213,6 @@ struct cpp_options
/* Characters between tab stops. */
unsigned int tabstop;
- /* Pending options - -D, -U, -A, -I, -ixxx. */
- struct cpp_pending *pending;
-
/* Map between header names and file names, used only on DOS where
file names are limited in length. */
struct file_name_map_list *map_list;
@@ -306,17 +294,10 @@ struct cpp_options
/* Nonzero means turn warnings into errors. */
unsigned char warnings_are_errors;
- /* Nonzero causes output not to be done, but directives such as
- #define that have side effects are still obeyed. */
- unsigned char no_output;
-
/* Nonzero means we should look for header.gcc files that remap file
names. */
unsigned char remap;
- /* Nonzero means don't output line number information. */
- unsigned char no_line_commands;
-
/* Zero means dollar signs are punctuation. */
unsigned char dollars_in_ident;
@@ -339,12 +320,6 @@ struct cpp_options
bother trying to do macro expansion and whatnot. */
unsigned char preprocessed;
- /* Nonzero means dump macros in some fashion - see above. */
- unsigned char dump_macros;
-
- /* Nonzero means pass #include lines through to the output. */
- unsigned char dump_includes;
-
/* Print column number in error messages. */
unsigned char show_column;
@@ -354,6 +329,12 @@ struct cpp_options
/* True for traditional preprocessing. */
unsigned char traditional;
+ /* True to warn about precompiled header files we couldn't use. */
+ bool warn_invalid_pch;
+
+ /* True if dependencies should be restored from a precompiled header. */
+ bool restore_pch_deps;
+
/* Dependency generation. */
struct
{
@@ -380,14 +361,11 @@ struct cpp_options
/* True means chars (wide chars) are unsigned. */
bool unsigned_char, unsigned_wchar;
+ /* True if target is EBCDIC. */
+ bool EBCDIC;
+
/* Nonzero means __STDC__ should have the value 0 in system headers. */
unsigned char stdc_0_in_system_headers;
-
- /* True to warn about precompiled header files we couldn't use. */
- bool warn_invalid_pch;
-
- /* True if dependencies should be restored from a precompiled header. */
- bool restore_pch_deps;
};
/* Call backs. */
@@ -402,10 +380,6 @@ struct cpp_callbacks
void (*undef) PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
void (*ident) PARAMS ((cpp_reader *, unsigned int, const cpp_string *));
void (*def_pragma) PARAMS ((cpp_reader *, unsigned int));
- void (*simplify_path) PARAMS ((char *));
- /* Called when the client has a chance to properly register
- built-ins with cpp_define() and cpp_assert(). */
- void (*register_builtins) PARAMS ((cpp_reader *));
int (*valid_pch) PARAMS ((cpp_reader *, const char *, int));
void (*read_pch) PARAMS ((cpp_reader *, const char *, int, const char *));
};
@@ -511,8 +485,13 @@ struct cpp_hashnode GTY(())
} GTY ((desc ("0"))) value;
};
-/* Call this first to get a handle to pass to other functions. */
-extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang));
+/* Call this first to get a handle to pass to other functions.
+
+ If you want cpplib to manage its own hashtable, pass in a NULL
+ pointer. Otherwise you should pass in an initialized hash table
+ that cpplib will share; this technique is used by the C front
+ ends. */
+extern cpp_reader *cpp_create_reader PARAMS ((enum c_lang, struct ht *));
/* Call this to change the selected language standard (e.g. because of
command line options). */
@@ -540,30 +519,15 @@ extern const struct line_maps *cpp_get_line_maps PARAMS ((cpp_reader *));
extern cpp_callbacks *cpp_get_callbacks PARAMS ((cpp_reader *));
extern void cpp_set_callbacks PARAMS ((cpp_reader *, cpp_callbacks *));
-/* Now call cpp_handle_option to handle 1 switch. The return value is
- the number of arguments used. Options processing is not completed
- until you call cpp_finish_options. */
-extern int cpp_handle_option PARAMS ((cpp_reader *, int, char **));
-
/* This function reads the file, but does not start preprocessing. It
returns the name of the original file; this is the same as the
input file, except for preprocessed input. This will generate at
least one file change callback, and possibly a line change callback
- too. If there was an error opening the file, it returns NULL.
+ too. If there was an error opening the file, it returns NULL. */
+extern const char *cpp_read_main_file PARAMS ((cpp_reader *, const char *));
- If you want cpplib to manage its own hashtable, pass in a NULL
- pointer. Otherwise you should pass in an initialized hash table
- that cpplib will share; this technique is used by the C front
- ends. */
-extern const char *cpp_read_main_file PARAMS ((cpp_reader *, const char *,
- struct ht *));
-
-/* Deferred handling of command line options that can generate debug
- callbacks, such as -D and -imacros. Call this after
- cpp_read_main_file. The front ends need this separation so they
- can initialize debug output with the original file name, returned
- from cpp_read_main_file, before they get debug callbacks. */
-extern void cpp_finish_options PARAMS ((cpp_reader *));
+/* Set up built-ins like __FILE__. */
+extern void cpp_init_builtins PARAMS ((cpp_reader *));
/* Call this to finish preprocessing. If you requested dependency
generation, pass an open stream to write the information to,
@@ -601,7 +565,7 @@ extern cppchar_t
cpp_interpret_charconst PARAMS ((cpp_reader *, const cpp_token *,
unsigned int *, int *));
-/* Used to register builtins during the register_builtins callback.
+/* Used to register macros and assertions, perhaps from the command line.
The text is the same as the command line argument. */
extern void cpp_define PARAMS ((cpp_reader *, const char *));
extern void cpp_assert PARAMS ((cpp_reader *, const char *));
@@ -741,6 +705,10 @@ extern unsigned char *cpp_quote_string PARAMS ((unsigned char *,
/* In cppfiles.c */
extern int cpp_included PARAMS ((cpp_reader *, const char *));
extern void cpp_make_system_header PARAMS ((cpp_reader *, int, int));
+extern void cpp_simplify_path PARAMS ((char *));
+extern bool cpp_push_include PARAMS ((cpp_reader *, const char *));
+extern void cpp_change_file PARAMS ((cpp_reader *, enum lc_reason,
+ const char *));
/* In cpppch.c */
struct save_macro_data;
@@ -753,9 +721,6 @@ extern void cpp_prepare_state PARAMS ((cpp_reader *,
extern int cpp_read_state PARAMS ((cpp_reader *, const char *, FILE *,
struct save_macro_data *));
-/* In cppmain.c */
-extern void cpp_preprocess_file PARAMS ((cpp_reader *, const char *, FILE *));
-
#ifdef __cplusplus
}
#endif
diff --git a/gcc/cppmacro.c b/gcc/cppmacro.c
index 99043ff2ef0..94fa8583a8a 100644
--- a/gcc/cppmacro.c
+++ b/gcc/cppmacro.c
@@ -1,6 +1,6 @@
/* Part of CPP library. (Macro and #define handling.)
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
- 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Written by Per Bothner, 1994.
Based on CCCP program by Paul Rubin, June 1986
Adapted to ANSI C, Richard Stallman, Jan 1987
@@ -89,8 +89,6 @@ _cpp_warn_if_unused_macro (pfile, node, v)
cpp_macro *macro = node->value.macro;
if (!macro->used
- /* Skip front-end built-ins and command line macros. */
- && macro->line >= pfile->first_unused_line
&& MAIN_FILE_P (lookup_line (&pfile->line_maps, macro->line)))
cpp_error_with_line (pfile, DL_WARNING, macro->line, 0,
"macro \"%s\" is not used", NODE_NAME (node));
@@ -1568,7 +1566,7 @@ _cpp_create_definition (pfile, node)
macro->params = 0;
macro->paramc = 0;
macro->variadic = 0;
- macro->used = 0;
+ macro->used = !CPP_OPTION (pfile, warn_unused_macros);
macro->count = 0;
macro->fun_like = 0;
/* To suppress some diagnostics. */
diff --git a/gcc/cppmain.c b/gcc/cppmain.c
deleted file mode 100644
index 8088f78dacf..00000000000
--- a/gcc/cppmain.c
+++ /dev/null
@@ -1,434 +0,0 @@
-/* Preprocess only, using cpplib.
- Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002
- Free Software Foundation, Inc.
- Written by Per Bothner, 1994-95.
-
-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, 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
-#include "config.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tm.h"
-#include "cpplib.h"
-#include "cpphash.h"
-
-static void setup_callbacks PARAMS ((cpp_reader *));
-
-/* General output routines. */
-static void scan_translation_unit PARAMS ((cpp_reader *));
-static void scan_translation_unit_trad PARAMS ((cpp_reader *));
-static void account_for_newlines PARAMS ((cpp_reader *, const uchar *,
- size_t));
-static int dump_macro PARAMS ((cpp_reader *, cpp_hashnode *, void *));
-
-static void print_line PARAMS ((cpp_reader *, const struct line_map *,
- unsigned int, const char *));
-static void maybe_print_line PARAMS ((cpp_reader *, const struct line_map *,
- unsigned int));
-
-/* Callback routines for the parser. Most of these are active only
- in specific modes. */
-static void cb_line_change PARAMS ((cpp_reader *, const cpp_token *, int));
-static void cb_define PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
-static void cb_undef PARAMS ((cpp_reader *, unsigned int, cpp_hashnode *));
-static void cb_include PARAMS ((cpp_reader *, unsigned int,
- const unsigned char *, const cpp_token *));
-static void cb_ident PARAMS ((cpp_reader *, unsigned int,
- const cpp_string *));
-static void cb_file_change PARAMS ((cpp_reader *, const struct line_map *));
-static void cb_def_pragma PARAMS ((cpp_reader *, unsigned int));
-
-/* Preprocess and output. */
-void
-cpp_preprocess_file (pfile, in_fname, out_stream)
- cpp_reader *pfile;
- const char *in_fname;
- FILE *out_stream;
-{
- /* Initialize the printer structure. Setting print.line to -1 here
- is a trick to guarantee that the first token of the file will
- cause a linemarker to be output by maybe_print_line. */
- pfile->print.line = (unsigned int) -1;
- pfile->print.printed = 0;
- pfile->print.prev = 0;
- pfile->print.map = 0;
- pfile->print.outf = out_stream;
-
- setup_callbacks (pfile);
-
- if (cpp_read_main_file (pfile, in_fname, NULL))
- {
- cpp_options *options = &pfile->opts;
- cpp_finish_options (pfile);
-
- /* A successful cpp_read_main_file guarantees that we can call
- cpp_scan_nooutput or cpp_get_token next. */
- if (options->no_output)
- {
- /* Scan -included buffers, then the main file. */
- while (pfile->buffer->prev)
- cpp_scan_nooutput (pfile);
- cpp_scan_nooutput (pfile);
- }
- else if (options->traditional)
- scan_translation_unit_trad (pfile);
- else
- scan_translation_unit (pfile);
-
- /* -dM command line option. Should this be in cpp_finish? */
- if (options->dump_macros == dump_only)
- cpp_forall_identifiers (pfile, dump_macro, NULL);
- }
-
- /* Flush any pending output. */
- if (pfile->print.printed)
- putc ('\n', pfile->print.outf);
-}
-
-/* Set up the callbacks as appropriate. */
-static void
-setup_callbacks (pfile)
- cpp_reader *pfile;
-{
- cpp_options *options = &pfile->opts;
- cpp_callbacks *cb = cpp_get_callbacks (pfile);
-
- if (! options->no_output)
- {
- cb->line_change = cb_line_change;
- /* Don't emit #pragma or #ident directives if we are processing
- assembly language; the assembler may choke on them. */
- if (options->lang != CLK_ASM)
- {
- cb->ident = cb_ident;
- cb->def_pragma = cb_def_pragma;
- }
- if (! options->no_line_commands)
- cb->file_change = cb_file_change;
- }
-
- if (options->dump_includes)
- cb->include = cb_include;
-
- if (options->dump_macros == dump_names
- || options->dump_macros == dump_definitions)
- {
- cb->define = cb_define;
- cb->undef = cb_undef;
- }
-}
-
-/* Writes out the preprocessed file, handling spacing and paste
- avoidance issues. */
-static void
-scan_translation_unit (pfile)
- cpp_reader *pfile;
-{
- bool avoid_paste = false;
-
- pfile->print.source = NULL;
- for (;;)
- {
- const cpp_token *token = cpp_get_token (pfile);
-
- if (token->type == CPP_PADDING)
- {
- avoid_paste = true;
- if (pfile->print.source == NULL
- || (!(pfile->print.source->flags & PREV_WHITE)
- && token->val.source == NULL))
- pfile->print.source = token->val.source;
- continue;
- }
-
- if (token->type == CPP_EOF)
- break;
-
- /* Subtle logic to output a space if and only if necessary. */
- if (avoid_paste)
- {
- if (pfile->print.source == NULL)
- pfile->print.source = token;
- if (pfile->print.source->flags & PREV_WHITE
- || (pfile->print.prev
- && cpp_avoid_paste (pfile, pfile->print.prev, token))
- || (pfile->print.prev == NULL && token->type == CPP_HASH))
- putc (' ', pfile->print.outf);
- }
- else if (token->flags & PREV_WHITE)
- putc (' ', pfile->print.outf);
-
- avoid_paste = false;
- pfile->print.source = NULL;
- pfile->print.prev = token;
- cpp_output_token (token, pfile->print.outf);
-
- if (token->type == CPP_COMMENT)
- account_for_newlines (pfile, token->val.str.text, token->val.str.len);
- }
-}
-
-/* Adjust pfile->print.line for newlines embedded in output. */
-static void
-account_for_newlines (pfile, str, len)
- cpp_reader *pfile;
- const uchar *str;
- size_t len;
-{
- while (len--)
- if (*str++ == '\n')
- pfile->print.line++;
-}
-
-/* Writes out a traditionally preprocessed file. */
-static void
-scan_translation_unit_trad (pfile)
- cpp_reader *pfile;
-{
- while (_cpp_read_logical_line_trad (pfile))
- {
- size_t len = pfile->out.cur - pfile->out.base;
- maybe_print_line (pfile, pfile->print.map, pfile->out.first_line);
- fwrite (pfile->out.base, 1, len, pfile->print.outf);
- pfile->print.printed = 1;
- if (!CPP_OPTION (pfile, discard_comments))
- account_for_newlines (pfile, pfile->out.base, len);
- }
-}
-
-/* If the token read on logical line LINE needs to be output on a
- different line to the current one, output the required newlines or
- a line marker, and return 1. Otherwise return 0. */
-static void
-maybe_print_line (pfile, map, line)
- cpp_reader *pfile;
- const struct line_map *map;
- unsigned int line;
-{
- /* End the previous line of text. */
- if (pfile->print.printed)
- {
- putc ('\n', pfile->print.outf);
- pfile->print.line++;
- pfile->print.printed = 0;
- }
-
- if (line >= pfile->print.line && line < pfile->print.line + 8)
- {
- while (line > pfile->print.line)
- {
- putc ('\n', pfile->print.outf);
- pfile->print.line++;
- }
- }
- else
- print_line (pfile, map, line, "");
-}
-
-/* Output a line marker for logical line LINE. Special flags are "1"
- or "2" indicating entering or leaving a file. */
-static void
-print_line (pfile, map, line, special_flags)
- cpp_reader *pfile;
- const struct line_map *map;
- unsigned int line;
- const char *special_flags;
-{
- /* End any previous line of text. */
- if (pfile->print.printed)
- putc ('\n', pfile->print.outf);
- pfile->print.printed = 0;
-
- pfile->print.line = line;
- if (! CPP_OPTION (pfile, no_line_commands))
- {
- size_t to_file_len = strlen (map->to_file);
- unsigned char *to_file_quoted = alloca (to_file_len * 4 + 1);
- unsigned char *p;
-
- /* cpp_quote_string does not nul-terminate, so we have to do it
- ourselves. */
- p = cpp_quote_string (to_file_quoted,
- (unsigned char *)map->to_file, to_file_len);
- *p = '\0';
- fprintf (pfile->print.outf, "# %u \"%s\"%s",
- SOURCE_LINE (map, pfile->print.line),
- to_file_quoted, special_flags);
-
- if (map->sysp == 2)
- fputs (" 3 4", pfile->print.outf);
- else if (map->sysp == 1)
- fputs (" 3", pfile->print.outf);
-
- putc ('\n', pfile->print.outf);
- }
-}
-
-/* Called when a line of output is started. TOKEN is the first token
- of the line, and at end of file will be CPP_EOF. */
-static void
-cb_line_change (pfile, token, parsing_args)
- cpp_reader *pfile;
- const cpp_token *token;
- int parsing_args;
-{
- if (token->type == CPP_EOF || parsing_args)
- return;
-
- maybe_print_line (pfile, pfile->print.map, token->line);
- pfile->print.prev = 0;
- pfile->print.source = 0;
-
- /* Supply enough spaces to put this token in its original column,
- one space per column greater than 2, since scan_translation_unit
- will provide a space if PREV_WHITE. Don't bother trying to
- reconstruct tabs; we can't get it right in general, and nothing
- ought to care. Some things do care; the fault lies with them. */
- if (!CPP_OPTION (pfile, traditional))
- {
- pfile->print.printed = 1;
- if (token->col > 2)
- {
- unsigned int spaces = token->col - 2;
-
- while (spaces--)
- putc (' ', pfile->print.outf);
- }
- }
-}
-
-static void
-cb_ident (pfile, line, str)
- cpp_reader *pfile;
- unsigned int line;
- const cpp_string * str;
-{
- maybe_print_line (pfile, pfile->print.map, line);
- fprintf (pfile->print.outf, "#ident \"%s\"\n", str->text);
- pfile->print.line++;
-}
-
-static void
-cb_define (pfile, line, node)
- cpp_reader *pfile;
- unsigned int line;
- cpp_hashnode *node;
-{
- maybe_print_line (pfile, pfile->print.map, line);
- fputs ("#define ", pfile->print.outf);
-
- /* -dD command line option. */
- if (CPP_OPTION (pfile, dump_macros) == dump_definitions)
- fputs ((const char *) cpp_macro_definition (pfile, node),
- pfile->print.outf);
- else
- fputs ((const char *) NODE_NAME (node), pfile->print.outf);
-
- putc ('\n', pfile->print.outf);
- pfile->print.line++;
-}
-
-static void
-cb_undef (pfile, line, node)
- cpp_reader *pfile;
- unsigned int line;
- cpp_hashnode *node;
-{
- maybe_print_line (pfile, pfile->print.map, line);
- fprintf (pfile->print.outf, "#undef %s\n", NODE_NAME (node));
- pfile->print.line++;
-}
-
-static void
-cb_include (pfile, line, dir, header)
- cpp_reader *pfile;
- unsigned int line;
- const unsigned char *dir;
- const cpp_token *header;
-{
- maybe_print_line (pfile, pfile->print.map, line);
- fprintf (pfile->print.outf, "#%s %s\n", dir,
- cpp_token_as_text (pfile, header));
- pfile->print.line++;
-}
-
-/* The file name, line number or system header flags have changed, as
- described in MAP. From this point on, the old pfile->print.map might be
- pointing to freed memory, and so must not be dereferenced. */
-
-static void
-cb_file_change (pfile, map)
- cpp_reader *pfile;
- const struct line_map *map;
-{
- const char *flags = "";
-
- /* First time? */
- if (pfile->print.map == NULL)
- {
- /* Avoid printing foo.i when the main file is foo.c. */
- if (!CPP_OPTION (pfile, preprocessed))
- print_line (pfile, map, map->from_line, flags);
- }
- else
- {
- /* Bring current file to correct line when entering a new file. */
- if (map->reason == LC_ENTER)
- maybe_print_line (pfile, map - 1, map->from_line - 1);
-
- if (map->reason == LC_ENTER)
- flags = " 1";
- else if (map->reason == LC_LEAVE)
- flags = " 2";
- print_line (pfile, map, map->from_line, flags);
- }
-
- pfile->print.map = map;
-}
-
-/* Copy a #pragma directive to the preprocessed output. */
-static void
-cb_def_pragma (pfile, line)
- cpp_reader *pfile;
- unsigned int line;
-{
- maybe_print_line (pfile, pfile->print.map, line);
- fputs ("#pragma ", pfile->print.outf);
- cpp_output_line (pfile, pfile->print.outf);
- pfile->print.line++;
-}
-
-/* Dump out the hash table. */
-static int
-dump_macro (pfile, node, v)
- cpp_reader *pfile;
- cpp_hashnode *node;
- void *v ATTRIBUTE_UNUSED;
-{
- if (node->type == NT_MACRO && !(node->flags & NODE_BUILTIN))
- {
- fputs ("#define ", pfile->print.outf);
- fputs ((const char *) cpp_macro_definition (pfile, node),
- pfile->print.outf);
- putc ('\n', pfile->print.outf);
- pfile->print.line++;
- }
-
- return 1;
-}
diff --git a/gcc/cpppch.c b/gcc/cpppch.c
index e7f0c91adfd..637160cd1a8 100644
--- a/gcc/cpppch.c
+++ b/gcc/cpppch.c
@@ -30,9 +30,10 @@ static hashval_t hashmem PARAMS ((const void *, size_t));
static hashval_t cpp_string_hash PARAMS ((const void *));
static int cpp_string_eq PARAMS ((const void *, const void *));
static int count_defs PARAMS ((cpp_reader *, cpp_hashnode *, void *));
+static int comp_hashnodes PARAMS ((const void *, const void *));
+static int collect_ht_nodes PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static int write_defs PARAMS ((cpp_reader *, cpp_hashnode *, void *));
static int save_macros PARAMS ((cpp_reader *, cpp_hashnode *, void *));
-static int reset_ht PARAMS ((cpp_reader *, cpp_hashnode *, void *));
/* This structure represents a macro definition on disk. */
struct macrodef_struct
@@ -109,6 +110,10 @@ struct cpp_savedstate
/* The size of the definitions of those identifiers (the size of
'definedstrs'). */
size_t hashsize;
+ /* Number of definitions */
+ size_t n_defs;
+ /* Array of definitions. In cpp_write_pch_deps it is used for sorting. */
+ cpp_hashnode **defs;
/* Space for the next definition. Definitions are null-terminated
strings. */
unsigned char *definedstrs;
@@ -239,7 +244,10 @@ count_defs (pfile, hn, ss_p)
news.text = NODE_NAME (hn);
slot = htab_find (ss->definedhash, &news);
if (slot == NULL)
- ss->hashsize += NODE_LEN (hn) + 1;
+ {
+ ss->hashsize += NODE_LEN (hn) + 1;
+ ss->n_defs += 1;
+ }
}
return 1;
@@ -252,8 +260,7 @@ count_defs (pfile, hn, ss_p)
}
}
-/* Write the identifiers into 'definedstrs' of the state. */
-
+/* Collect the identifiers into the state's string table. */
static int
write_defs (pfile, hn, ss_p)
cpp_reader *pfile ATTRIBUTE_UNUSED;
@@ -280,9 +287,8 @@ write_defs (pfile, hn, ss_p)
slot = htab_find (ss->definedhash, &news);
if (slot == NULL)
{
- memcpy (ss->definedstrs, NODE_NAME (hn), NODE_LEN (hn));
- ss->definedstrs[NODE_LEN (hn)] = 0;
- ss->definedstrs += NODE_LEN (hn) + 1;
+ ss->defs[ss->n_defs] = hn;
+ ss->n_defs += 1;
}
}
return 1;
@@ -296,6 +302,18 @@ write_defs (pfile, hn, ss_p)
}
}
+/* Comparison function for qsort. The arguments point to pointers of
+ type ht_hashnode *. */
+static int
+comp_hashnodes (px, py)
+ const void *px;
+ const void *py;
+{
+ cpp_hashnode *x = *(cpp_hashnode **) px;
+ cpp_hashnode *y = *(cpp_hashnode **) py;
+ return ustrcmp (NODE_NAME (x), NODE_NAME (y));
+}
+
/* Write out the remainder of the dependency information. This should be
called after the PCH is ready to be saved. */
@@ -307,23 +325,37 @@ cpp_write_pch_deps (r, f)
struct macrodef_struct z;
struct cpp_savedstate *const ss = r->savedstate;
unsigned char *definedstrs;
+ size_t i;
- ss->hashsize = 0;
-
- /* Write out the list of identifiers which have been seen and
+ /* Collect the list of identifiers which have been seen and
weren't defined to anything previously. */
+ ss->hashsize = 0;
+ ss->n_defs = 0;
cpp_forall_identifiers (r, count_defs, ss);
- definedstrs = ss->definedstrs = xmalloc (ss->hashsize);
+
+ ss->defs = xmalloc (ss->n_defs * sizeof (cpp_hashnode *));
+ ss->n_defs = 0;
cpp_forall_identifiers (r, write_defs, ss);
+
+ /* Sort the list, copy it into a buffer, and write it out. */
+ qsort (ss->defs, ss->n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
+ definedstrs = ss->definedstrs = xmalloc (ss->hashsize);
+ for (i = 0; i < ss->n_defs; ++i)
+ {
+ size_t len = NODE_LEN (ss->defs[i]);
+ memcpy (definedstrs, NODE_NAME (ss->defs[i]), len + 1);
+ definedstrs += len + 1;
+ }
+
memset (&z, 0, sizeof (z));
z.definition_length = ss->hashsize;
if (fwrite (&z, sizeof (z), 1, f) != 1
- || fwrite (definedstrs, ss->hashsize, 1, f) != 1)
+ || fwrite (ss->definedstrs, ss->hashsize, 1, f) != 1)
{
cpp_errno (r, DL_ERROR, "while writing precompiled header");
return -1;
}
- free (definedstrs);
+ free (ss->definedstrs);
/* Free the saved state. */
free (ss);
@@ -362,6 +394,44 @@ cpp_write_pch_state (r, f)
return 0;
}
+
+/* Data structure to transform hash table nodes into a sorted list */
+
+struct ht_node_list
+{
+ /* Array of nodes */
+ cpp_hashnode **defs;
+ /* Number of nodes in the array */
+ size_t n_defs;
+ /* Size of the allocated array */
+ size_t asize;
+};
+
+/* Callback for collecting identifiers from hash table */
+
+static int
+collect_ht_nodes (pfile, hn, nl_p)
+ cpp_reader *pfile ATTRIBUTE_UNUSED;
+ cpp_hashnode *hn;
+ void *nl_p;
+{
+ struct ht_node_list *const nl = (struct ht_node_list *)nl_p;
+
+ if (hn->type != NT_VOID || hn->flags & NODE_POISONED)
+ {
+ if (nl->n_defs == nl->asize)
+ {
+ nl->asize *= 2;
+ nl->defs = xrealloc (nl->defs, nl->asize * sizeof (cpp_hashnode *));
+ }
+
+ nl->defs[nl->n_defs] = hn;
+ ++nl->n_defs;
+ }
+ return 1;
+}
+
+
/* Return nonzero if FD is a precompiled header which is consistent
with the preprocessor's current definitions. It will be consistent
when:
@@ -385,6 +455,8 @@ cpp_valid_state (r, name, fd)
size_t namebufsz = 256;
unsigned char *namebuf = xmalloc (namebufsz);
unsigned char *undeftab = NULL;
+ struct ht_node_list nl;
+ unsigned char *first, *last;
unsigned int i;
/* Read in the list of identifiers that must be defined
@@ -417,7 +489,7 @@ cpp_valid_state (r, name, fd)
|| h->flags & NODE_POISONED)
{
if (CPP_OPTION (r, warn_invalid_pch))
- cpp_error (r, DL_WARNING,
+ cpp_error (r, DL_WARNING_SYSHDR,
"%s: not used because `%.*s' not defined",
name, m.name_length, namebuf);
goto fail;
@@ -429,7 +501,7 @@ cpp_valid_state (r, name, fd)
|| memcmp (namebuf, newdefn, m.definition_length) != 0)
{
if (CPP_OPTION (r, warn_invalid_pch))
- cpp_error (r, DL_WARNING,
+ cpp_error (r, DL_WARNING_SYSHDR,
"%s: not used because `%.*s' defined as `%s' not `%.*s'",
name, m.name_length, namebuf, newdefn + m.name_length,
m.definition_length - m.name_length,
@@ -445,21 +517,33 @@ cpp_valid_state (r, name, fd)
undeftab = xmalloc (m.definition_length);
if ((size_t) read (fd, undeftab, m.definition_length) != m.definition_length)
goto error;
- for (i = 0; i < m.definition_length; )
+
+ /* Collect identifiers from the current hash table. */
+ nl.n_defs = 0;
+ nl.asize = 10;
+ nl.defs = xmalloc (nl.asize * sizeof (cpp_hashnode *));
+ cpp_forall_identifiers (r, &collect_ht_nodes, &nl);
+ qsort (nl.defs, nl.n_defs, sizeof (cpp_hashnode *), &comp_hashnodes);
+
+ /* Loop through nl.defs and undeftab, both of which are sorted lists.
+ There should be no matches. */
+ first = undeftab;
+ last = undeftab + m.definition_length;
+ i = 0;
+
+ while (first < last && i < nl.n_defs)
{
- int l = ustrlen (undeftab + i);
- cpp_hashnode *h;
- h = cpp_lookup (r, undeftab + i, l);
- if (h->type != NT_VOID
- || h->flags & NODE_POISONED)
- {
- if (CPP_OPTION (r, warn_invalid_pch))
- cpp_error (r, DL_WARNING, "%s: not used because `%s' is defined",
- name, undeftab + i);
- goto fail;
- }
- i += l + 1;
+ int cmp = ustrcmp (first, NODE_NAME (nl.defs[i]));
+
+ if (cmp < 0)
+ first += ustrlen (first) + 1;
+ else if (cmp > 0)
+ ++i;
+ else
+ goto fail;
}
+
+ free(nl.defs);
free (undeftab);
/* We win! */
@@ -474,6 +558,8 @@ cpp_valid_state (r, name, fd)
free (namebuf);
if (undeftab != NULL)
free (undeftab);
+ if (nl.defs != NULL)
+ free (nl.defs);
return 1;
}
@@ -541,23 +627,6 @@ cpp_prepare_state (r, data)
*data = d;
}
-/* Erase all the existing macros and assertions. */
-
-static int
-reset_ht (r, h, unused)
- cpp_reader *r ATTRIBUTE_UNUSED;
- cpp_hashnode *h;
- void *unused ATTRIBUTE_UNUSED;
-{
- if (h->type != NT_VOID
- && (h->flags & NODE_BUILTIN) == 0)
- {
- h->type = NT_VOID;
- memset (&h->value, 0, sizeof (h->value));
- }
- return 1;
-}
-
/* Given a precompiled header that was previously determined to be valid,
apply all its definitions (and undefinitions) to the current state.
DEPNAME is passed to deps_restore. */
@@ -577,11 +646,6 @@ cpp_read_state (r, name, f, data)
size_t i, mac_count;
int saved_line = r->line;
- /* Erase all the existing hashtable entries for macros. At this
- point, they're all from the PCH file, and their pointers won't be
- valid. */
- cpp_forall_identifiers (r, reset_ht, NULL);
-
/* Restore spec_nodes, which will be full of references to the old
hashtable entries and so will now be invalid. */
{
diff --git a/gcc/cppspec.c b/gcc/cppspec.c
index ef7238953fd..db15d7dfd37 100644
--- a/gcc/cppspec.c
+++ b/gcc/cppspec.c
@@ -31,32 +31,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
assume the user knows what they're doing. If no explicit input is
mentioned, it will read stdin. */
-/* Snarfed from gcc.c: */
-
-/* This defines which switch letters take arguments. */
-
-#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
- ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
- || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
- || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
- || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
- || (CHAR) == 'B' || (CHAR) == 'b')
-
#ifndef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)
#endif
-/* This defines which multi-letter switches take arguments. */
-
-#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
- (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
- || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
- || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
- || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
- || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem") || !strcmp (STR, "specs") \
- || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ"))
-
#ifndef WORD_SWITCH_TAKES_ARG
#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
#endif
@@ -87,9 +65,6 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
/* Do we need to insert -E? */
int need_E = 1;
- /* Do we need to insert -no-gcc? */
- int need_no_gcc = 1;
-
/* Have we seen an input file? */
int seen_input = 0;
@@ -144,8 +119,6 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
}
else if (argv[i][1] == 'x')
need_fixups = 0;
- else if (argv[i][1] == 'g' && !strcmp(&argv[i][2], "cc"))
- need_no_gcc = 0;
else if (WORD_SWITCH_TAKES_ARG (&argv[i][1]))
quote = 1;
}
@@ -194,7 +167,7 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
/* If we don't need to edit the command line, we can bail early. */
- new_argc = argc + need_E + need_no_gcc + read_stdin
+ new_argc = argc + need_E + read_stdin
+ !!o_here + !!lang_c_here + !!lang_S_here;
if (new_argc == argc)
@@ -209,9 +182,6 @@ lang_specific_driver (in_argc, in_argv, in_added_libraries)
if (need_E)
new_argv[j++] = "-E";
- if (need_no_gcc)
- new_argv[j++] = "-no-gcc";
-
for (i = 1; i < argc; i++, j++)
{
if (i == lang_c_here)
diff --git a/gcc/cse.c b/gcc/cse.c
index 6321c7c6dd9..4109b58a868 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -3352,17 +3352,11 @@ fold_rtx (x, insn)
/* If the next insn is a CODE_LABEL followed by a jump table,
PC's value is a LABEL_REF pointing to that label. That
lets us fold switch statements on the VAX. */
- if (insn && GET_CODE (insn) == JUMP_INSN)
- {
- rtx next = next_nonnote_insn (insn);
-
- if (next && GET_CODE (next) == CODE_LABEL
- && NEXT_INSN (next) != 0
- && GET_CODE (NEXT_INSN (next)) == JUMP_INSN
- && (GET_CODE (PATTERN (NEXT_INSN (next))) == ADDR_VEC
- || GET_CODE (PATTERN (NEXT_INSN (next))) == ADDR_DIFF_VEC))
- return gen_rtx_LABEL_REF (Pmode, next);
- }
+ {
+ rtx next;
+ if (insn && tablejump_p (insn, &next, NULL))
+ return gen_rtx_LABEL_REF (Pmode, next);
+ }
break;
case SUBREG:
@@ -7494,15 +7488,8 @@ count_reg_usage (x, counts, dest, incr)
/* Unless we are setting a REG, count everything in SET_DEST. */
if (GET_CODE (SET_DEST (x)) != REG)
count_reg_usage (SET_DEST (x), counts, NULL_RTX, incr);
-
- /* If SRC has side-effects, then we can't delete this insn, so the
- usage of SET_DEST inside SRC counts.
-
- ??? Strictly-speaking, we might be preserving this insn
- because some other SET has side-effects, but that's hard
- to do and can't happen now. */
count_reg_usage (SET_SRC (x), counts,
- side_effects_p (SET_SRC (x)) ? NULL_RTX : SET_DEST (x),
+ SET_DEST (x),
incr);
return;
diff --git a/gcc/cselib.c b/gcc/cselib.c
index 63fab2233a9..3aac058df27 100644
--- a/gcc/cselib.c
+++ b/gcc/cselib.c
@@ -49,7 +49,7 @@ static struct elt_loc_list *new_elt_loc_list PARAMS ((struct elt_loc_list *,
static void unchain_one_value PARAMS ((cselib_val *));
static void unchain_one_elt_list PARAMS ((struct elt_list **));
static void unchain_one_elt_loc_list PARAMS ((struct elt_loc_list **));
-static void clear_table PARAMS ((int));
+static void clear_table PARAMS ((void));
static int discard_useless_locs PARAMS ((void **, void *));
static int discard_useless_values PARAMS ((void **, void *));
static void remove_useless_values PARAMS ((void));
@@ -63,7 +63,6 @@ static cselib_val *cselib_lookup_mem PARAMS ((rtx, int));
static void cselib_invalidate_regno PARAMS ((unsigned int,
enum machine_mode));
static int cselib_mem_conflict_p PARAMS ((rtx, rtx));
-static int cselib_invalidate_mem_1 PARAMS ((void **, void *));
static void cselib_invalidate_mem PARAMS ((rtx));
static void cselib_invalidate_rtx PARAMS ((rtx, rtx, void *));
static void cselib_record_set PARAMS ((rtx, cselib_val *,
@@ -128,6 +127,15 @@ static GTY((deletable (""))) struct elt_loc_list *empty_elt_loc_lists;
/* Set by discard_useless_locs if it deleted the last location of any
value. */
static int values_became_useless;
+
+/* Used as stop element of the containing_mem list so we can check
+ presence in the list by checking the next pointer. */
+static cselib_val dummy_val;
+
+/* Used to list all values that contain memory reference.
+ May or may not contain the useless values - the list is compacted
+ each time memory is invalidated. */
+static cselib_val *first_containing_mem = &dummy_val;
/* Allocate a struct elt_list and fill in its two elements with the
@@ -216,17 +224,12 @@ unchain_one_value (v)
which are known to have been used. */
static void
-clear_table (clear_all)
- int clear_all;
+clear_table ()
{
unsigned int i;
- if (clear_all)
- for (i = 0; i < cselib_nregs; i++)
- REG_VALUES (i) = 0;
- else
- for (i = 0; i < VARRAY_ACTIVE_SIZE (used_regs); i++)
- REG_VALUES (VARRAY_UINT (used_regs, i)) = 0;
+ for (i = 0; i < VARRAY_ACTIVE_SIZE (used_regs); i++)
+ REG_VALUES (VARRAY_UINT (used_regs, i)) = 0;
max_value_regs = 0;
@@ -237,6 +240,8 @@ clear_table (clear_all)
n_useless_values = 0;
next_unknown_value = 0;
+
+ first_containing_mem = &dummy_val;
}
/* The equality test for our hash table. The first argument ENTRY is a table
@@ -371,6 +376,7 @@ discard_useless_values (x, info)
static void
remove_useless_values ()
{
+ cselib_val **p, *v;
/* First pass: eliminate locations that reference the value. That in
turn can make more values useless. */
do
@@ -383,6 +389,15 @@ remove_useless_values ()
/* Second pass: actually remove the values. */
htab_traverse (hash_table, discard_useless_values, 0);
+ p = &first_containing_mem;
+ for (v = *p; v != &dummy_val; v = v->next_containing_mem)
+ if (v->locs)
+ {
+ *p = v;
+ p = &(*p)->next_containing_mem;
+ }
+ *p = &dummy_val;
+
if (n_useless_values != 0)
abort ();
}
@@ -706,6 +721,7 @@ new_cselib_val (value, mode)
CSELIB_VAL_PTR (e->u.val_rtx) = e;
e->addr_list = 0;
e->locs = 0;
+ e->next_containing_mem = 0;
return e;
}
@@ -730,6 +746,11 @@ add_mem_for_addr (addr_elt, mem_elt, x)
mem_elt->locs
= new_elt_loc_list (mem_elt->locs,
replace_equiv_address_nv (x, addr_elt->u.val_rtx));
+ if (mem_elt->next_containing_mem == NULL)
+ {
+ mem_elt->next_containing_mem = first_containing_mem;
+ first_containing_mem = mem_elt;
+ }
}
/* Subroutine of cselib_lookup. Return a value for X, which is a MEM rtx.
@@ -1078,68 +1099,75 @@ cselib_mem_conflict_p (mem_base, val)
return 0;
}
-/* For the value found in SLOT, walk its locations to determine if any overlap
- INFO (which is a MEM rtx). */
+/* Invalidate any locations in the table which are changed because of a
+ store to MEM_RTX. If this is called because of a non-const call
+ instruction, MEM_RTX is (mem:BLK const0_rtx). */
-static int
-cselib_invalidate_mem_1 (slot, info)
- void **slot;
- void *info;
+static void
+cselib_invalidate_mem (mem_rtx)
+ rtx mem_rtx;
{
- cselib_val *v = (cselib_val *) *slot;
- rtx mem_rtx = (rtx) info;
- struct elt_loc_list **p = &v->locs;
- int had_locs = v->locs != 0;
+ cselib_val **vp, *v, *next;
- while (*p)
+ vp = &first_containing_mem;
+ for (v = *vp; v != &dummy_val; v = next)
{
- rtx x = (*p)->loc;
- cselib_val *addr;
- struct elt_list **mem_chain;
-
- /* MEMs may occur in locations only at the top level; below
- that every MEM or REG is substituted by its VALUE. */
- if (GET_CODE (x) != MEM
- || ! cselib_mem_conflict_p (mem_rtx, x))
- {
- p = &(*p)->next;
- continue;
- }
+ bool has_mem = false;
+ struct elt_loc_list **p = &v->locs;
+ int had_locs = v->locs != 0;
- /* This one overlaps. */
- /* We must have a mapping from this MEM's address to the
- value (E). Remove that, too. */
- addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0);
- mem_chain = &addr->addr_list;
- for (;;)
+ while (*p)
{
- if ((*mem_chain)->elt == v)
+ rtx x = (*p)->loc;
+ cselib_val *addr;
+ struct elt_list **mem_chain;
+
+ /* MEMs may occur in locations only at the top level; below
+ that every MEM or REG is substituted by its VALUE. */
+ if (GET_CODE (x) != MEM)
{
- unchain_one_elt_list (mem_chain);
- break;
+ p = &(*p)->next;
+ continue;
+ }
+ if (! cselib_mem_conflict_p (mem_rtx, x))
+ {
+ has_mem = true;
+ p = &(*p)->next;
+ continue;
}
- mem_chain = &(*mem_chain)->next;
- }
-
- unchain_one_elt_loc_list (p);
- }
+ /* This one overlaps. */
+ /* We must have a mapping from this MEM's address to the
+ value (E). Remove that, too. */
+ addr = cselib_lookup (XEXP (x, 0), VOIDmode, 0);
+ mem_chain = &addr->addr_list;
+ for (;;)
+ {
+ if ((*mem_chain)->elt == v)
+ {
+ unchain_one_elt_list (mem_chain);
+ break;
+ }
- if (had_locs && v->locs == 0)
- n_useless_values++;
+ mem_chain = &(*mem_chain)->next;
+ }
- return 1;
-}
+ unchain_one_elt_loc_list (p);
+ }
-/* Invalidate any locations in the table which are changed because of a
- store to MEM_RTX. If this is called because of a non-const call
- instruction, MEM_RTX is (mem:BLK const0_rtx). */
+ if (had_locs && v->locs == 0)
+ n_useless_values++;
-static void
-cselib_invalidate_mem (mem_rtx)
- rtx mem_rtx;
-{
- htab_traverse (hash_table, cselib_invalidate_mem_1, mem_rtx);
+ next = v->next_containing_mem;
+ if (has_mem)
+ {
+ *vp = v;
+ vp = &(*vp)->next_containing_mem;
+ }
+ else
+ v->next_containing_mem = NULL;
+ }
+ *vp = &dummy_val;
}
/* Invalidate DEST, which is being assigned to or clobbered. The second and
@@ -1326,7 +1354,7 @@ cselib_process_insn (insn)
&& GET_CODE (PATTERN (insn)) == ASM_OPERANDS
&& MEM_VOLATILE_P (PATTERN (insn))))
{
- clear_table (0);
+ clear_table ();
return;
}
@@ -1404,8 +1432,6 @@ cselib_init ()
{
reg_values = reg_values_old;
used_regs = used_regs_old;
- VARRAY_CLEAR (reg_values);
- VARRAY_CLEAR (used_regs);
}
else
{
@@ -1414,7 +1440,6 @@ cselib_init ()
}
hash_table = htab_create_ggc (31, get_value_hash, entry_and_rtx_equal_p,
NULL);
- clear_table (1);
cselib_current_insn_in_libcall = false;
}
@@ -1423,6 +1448,7 @@ cselib_init ()
void
cselib_finish ()
{
+ clear_table ();
reg_values_old = reg_values;
reg_values = 0;
used_regs_old = used_regs;
diff --git a/gcc/cselib.h b/gcc/cselib.h
index f29ee8de04e..9cceddbfcbc 100644
--- a/gcc/cselib.h
+++ b/gcc/cselib.h
@@ -38,6 +38,8 @@ typedef struct cselib_val_struct GTY(())
/* If this value is used as an address, points to a list of values that
use it as an address in a MEM. */
struct elt_list *addr_list;
+
+ struct cselib_val_struct *next_containing_mem;
} cselib_val;
/* A list of rtl expressions that hold the same value. */
diff --git a/gcc/dbxout.c b/gcc/dbxout.c
index 21e948b3d48..84216f5bff6 100644
--- a/gcc/dbxout.c
+++ b/gcc/dbxout.c
@@ -189,32 +189,41 @@ static GTY(()) struct dbx_file *current_file;
static GTY(()) int next_file_number;
-/* Typical USG systems don't have stab.h, and they also have
- no use for DBX-format debugging info. */
-
-#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
-
-/* Last source file name mentioned in a NOTE insn. */
+/* A counter for dbxout_function_end. */
-static const char *lastfile;
-
-/* Current working directory. */
-
-static const char *cwd;
+static GTY(()) int scope_labelno;
/* Nonzero if we have actually used any of the GDB extensions
to the debugging format. The idea is that we use them for the
first time only if there's a strong reason, but once we have done that,
we use them whenever convenient. */
-static int have_used_extensions = 0;
+static GTY(()) int have_used_extensions = 0;
/* Number for the next N_SOL filename stabs label. The number 0 is reserved
for the N_SO filename stabs label. */
-#if defined (DBX_DEBUGGING_INFO) && !defined (DBX_OUTPUT_SOURCE_FILENAME)
-static int source_label_number = 1;
-#endif
+static GTY(()) int source_label_number = 1;
+
+/* Last source file name mentioned in a NOTE insn. */
+
+static GTY(()) const char *lastfile;
+
+/* Used by PCH machinery to detect if 'lastfile' should be reset to
+ base_input_file. */
+static GTY(()) int lastfile_is_base;
+
+/* Typical USG systems don't have stab.h, and they also have
+ no use for DBX-format debugging info. */
+
+#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
+
+/* The original input file name. */
+static const char *base_input_file;
+
+/* Current working directory. */
+
+static const char *cwd;
#ifdef DEBUG_SYMS_TEXT
#define FORCE_TEXT function_section (current_function_decl);
@@ -323,6 +332,7 @@ static void dbxout_begin_function PARAMS ((tree));
static void dbxout_begin_block PARAMS ((unsigned, unsigned));
static void dbxout_end_block PARAMS ((unsigned, unsigned));
static void dbxout_function_decl PARAMS ((tree));
+static void dbxout_handle_pch PARAMS ((unsigned));
const struct gcc_debug_hooks dbx_debug_hooks =
{
@@ -349,7 +359,8 @@ const struct gcc_debug_hooks dbx_debug_hooks =
dbxout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ dbxout_handle_pch /* handle_pch */
};
#endif /* DBX_DEBUGGING_INFO */
@@ -375,7 +386,8 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
dbxout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ dbxout_handle_pch /* handle_pch */
};
#endif /* XCOFF_DEBUGGING_INFO */
@@ -383,7 +395,6 @@ const struct gcc_debug_hooks xcoff_debug_hooks =
static void
dbxout_function_end ()
{
- static int scope_labelno = 0;
char lscope_label_name[100];
/* Convert Ltext into the appropriate format for local labels in case
the system doesn't insert underscores in front of user generated
@@ -473,7 +484,7 @@ dbxout_init (input_file_name)
ASM_STABS_OP, STABS_GCC_MARKER, N_OPT);
#endif
- lastfile = input_file_name;
+ base_input_file = lastfile = input_file_name;
next_type_number = 1;
@@ -559,6 +570,31 @@ dbxout_end_source_file (line)
#endif
}
+/* Handle a few odd cases that occur when trying to make PCH files work. */
+
+static void
+dbxout_handle_pch (unsigned at_end)
+{
+ if (! at_end)
+ {
+ /* When using the PCH, this file will be included, so we need to output
+ a BINCL. */
+ dbxout_start_source_file (0, lastfile);
+
+ /* The base file when using the PCH won't be the same as
+ the base file when it's being generated. */
+ lastfile = NULL;
+ }
+ else
+ {
+ /* ... and an EINCL. */
+ dbxout_end_source_file (0);
+
+ /* Deal with cases where 'lastfile' was never actually changed. */
+ lastfile_is_base = lastfile == NULL;
+ }
+}
+
#if defined (DBX_DEBUGGING_INFO)
/* Output debugging info to FILE to switch to sourcefile FILENAME. */
@@ -567,6 +603,12 @@ dbxout_source_file (file, filename)
FILE *file;
const char *filename;
{
+ if (lastfile == 0 && lastfile_is_base)
+ {
+ lastfile = base_input_file;
+ lastfile_is_base = 0;
+ }
+
if (filename && (lastfile == 0 || strcmp (filename, lastfile)))
{
#ifdef DBX_OUTPUT_SOURCE_FILENAME
@@ -1330,7 +1372,17 @@ dbxout_type (type, full)
{
fprintf (asmfile, "r");
CHARS (1);
- dbxout_type_index (type);
+
+ /* If this type derives from another type, output type index of
+ parent type. This is particularly important when parent type
+ is an enumerated type, because not generating the parent type
+ index would transform the definition of this enumerated type
+ into a plain unsigned type. */
+ if (TREE_TYPE (type) != 0)
+ dbxout_type_index (TREE_TYPE (type));
+ else
+ dbxout_type_index (type);
+
fprintf (asmfile, ";");
CHARS (1);
print_int_cst_octal (TYPE_MIN_VALUE (type));
diff --git a/gcc/debug.c b/gcc/debug.c
index 6a9c3925153..ca17373dbdd 100644
--- a/gcc/debug.c
+++ b/gcc/debug.c
@@ -43,7 +43,8 @@ const struct gcc_debug_hooks do_nothing_debug_hooks =
debug_nothing_tree, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ debug_nothing_int /* handle_pch */
};
/* This file contains implementations of each debug hook that do
diff --git a/gcc/debug.h b/gcc/debug.h
index 11c996fddd0..2793e302115 100644
--- a/gcc/debug.h
+++ b/gcc/debug.h
@@ -101,6 +101,10 @@ struct gcc_debug_hooks
/* Called from final_scan_insn for any CODE_LABEL insn whose
LABEL_NAME is non-null. */
void (* label) PARAMS ((rtx));
+
+ /* Called after the start and before the end of writing a PCH file.
+ The parameter is 0 if after the start, 1 if before the end. */
+ void (* handle_pch) PARAMS ((unsigned int));
};
extern const struct gcc_debug_hooks *debug_hooks;
diff --git a/gcc/defaults.h b/gcc/defaults.h
index ec504a3b5fa..129c0d1ffe1 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -572,9 +572,8 @@ You Lose! You must define PREFERRED_DEBUGGING_TYPE!
&& !ROUND_TOWARDS_ZERO)
#endif
-/* If FLOAT_WORDS_BIG_ENDIAN and HOST_FLOAT_WORDS_BIG_ENDIAN are not defined
- in the header files, then this implies the word-endianness is the same as
- for integers. */
+/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files,
+ then the word-endianness is the same as for integers. */
#ifndef FLOAT_WORDS_BIG_ENDIAN
#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
#endif
diff --git a/gcc/df.c b/gcc/df.c
index c151249a197..b23c2862b17 100644
--- a/gcc/df.c
+++ b/gcc/df.c
@@ -180,7 +180,7 @@ and again mark them read/write.
#include "recog.h"
#include "function.h"
#include "regs.h"
-#include "obstack.h"
+#include "alloc-pool.h"
#include "hard-reg-set.h"
#include "basic-block.h"
#include "sbitmap.h"
@@ -197,7 +197,8 @@ and again mark them read/write.
} \
while (0)
-static struct obstack df_ref_obstack;
+static alloc_pool df_ref_pool;
+static alloc_pool df_link_pool;
static struct df *ddf;
static void df_reg_table_realloc PARAMS((struct df *, int));
@@ -307,7 +308,6 @@ static void hybrid_search_sbitmap PARAMS ((basic_block, sbitmap *, sbitmap *,
enum df_confluence_op,
transfer_function_sbitmap,
sbitmap, sbitmap, void *));
-static inline bool read_modify_subreg_p PARAMS ((rtx));
/* Local memory allocation/deallocation routines. */
@@ -503,7 +503,9 @@ df_alloc (df, n_regs)
int n_insns;
basic_block bb;
- gcc_obstack_init (&df_ref_obstack);
+ df_link_pool = create_alloc_pool ("df_link pool", sizeof (struct df_link),
+ 100);
+ df_ref_pool = create_alloc_pool ("df_ref pool", sizeof (struct ref), 100);
/* Perhaps we should use LUIDs to save memory for the insn_refs
table. This is only a small saving; a few pointers. */
@@ -588,7 +590,9 @@ df_free (df)
BITMAP_XFREE (df->all_blocks);
df->all_blocks = 0;
- obstack_free (&df_ref_obstack, NULL);
+ free_alloc_pool (df_ref_pool);
+ free_alloc_pool (df_link_pool);
+
}
/* Local miscellaneous routines. */
@@ -630,8 +634,7 @@ df_link_create (ref, next)
{
struct df_link *link;
- link = (struct df_link *) obstack_alloc (&df_ref_obstack,
- sizeof (*link));
+ link = pool_alloc (df_link_pool);
link->next = next;
link->ref = ref;
return link;
@@ -769,8 +772,7 @@ df_ref_create (df, reg, loc, insn, ref_type, ref_flags)
{
struct ref *this_ref;
- this_ref = (struct ref *) obstack_alloc (&df_ref_obstack,
- sizeof (*this_ref));
+ this_ref = pool_alloc (df_ref_pool);
DF_REF_REG (this_ref) = reg;
DF_REF_LOC (this_ref) = loc;
DF_REF_INSN (this_ref) = insn;
@@ -849,6 +851,7 @@ df_ref_record (df, reg, loc, insn, ref_type, ref_flags)
{
loc = &SUBREG_REG (reg);
reg = *loc;
+ ref_flags |= DF_REF_STRIPPED;
}
regno = REGNO (GET_CODE (reg) == SUBREG ? SUBREG_REG (reg) : reg);
@@ -884,7 +887,7 @@ df_ref_record (df, reg, loc, insn, ref_type, ref_flags)
/* Return non-zero if writes to paradoxical SUBREGs, or SUBREGs which
are too narrow, are read-modify-write. */
-static inline bool
+bool
read_modify_subreg_p (x)
rtx x;
{
@@ -893,13 +896,8 @@ read_modify_subreg_p (x)
return false;
isize = GET_MODE_SIZE (GET_MODE (SUBREG_REG (x)));
osize = GET_MODE_SIZE (GET_MODE (x));
- if (isize <= osize)
- return true;
- if (isize <= UNITS_PER_WORD)
- return false;
- if (osize > UNITS_PER_WORD)
- return false;
- return true;
+ /* Paradoxical subreg writes don't leave a trace of the old content. */
+ return (isize > osize && isize > UNITS_PER_WORD);
}
@@ -911,10 +909,18 @@ df_def_record_1 (df, x, bb, insn)
basic_block bb;
rtx insn;
{
- rtx *loc = &SET_DEST (x);
- rtx dst = *loc;
+ rtx *loc;
+ rtx dst;
enum df_ref_flags flags = 0;
+ /* We may recursivly call ourselves on EXPR_LIST when dealing with PARALLEL
+ construct. */
+ if (GET_CODE (x) == EXPR_LIST || GET_CODE (x) == CLOBBER)
+ loc = &XEXP (x, 0);
+ else
+ loc = &SET_DEST (x);
+ dst = *loc;
+
/* Some targets place small structures in registers for
return values of functions. */
if (GET_CODE (dst) == PARALLEL && GET_MODE (dst) == BLKmode)
@@ -922,14 +928,19 @@ df_def_record_1 (df, x, bb, insn)
int i;
for (i = XVECLEN (dst, 0) - 1; i >= 0; i--)
- df_def_record_1 (df, XVECEXP (dst, 0, i), bb, insn);
+ {
+ rtx temp = XVECEXP (dst, 0, i);
+ if (GET_CODE (temp) == EXPR_LIST || GET_CODE (temp) == CLOBBER
+ || GET_CODE (temp) == SET)
+ df_def_record_1 (df, temp, bb, insn);
+ }
return;
}
#ifdef CLASS_CANNOT_CHANGE_MODE
if (GET_CODE (dst) == SUBREG
- && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (dst)),
- GET_MODE (dst)))
+ && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (dst),
+ GET_MODE (SUBREG_REG (dst))))
flags |= DF_REF_MODE_CHANGE;
#endif
@@ -938,7 +949,8 @@ df_def_record_1 (df, x, bb, insn)
while (GET_CODE (dst) == STRICT_LOW_PART
|| GET_CODE (dst) == ZERO_EXTRACT
|| GET_CODE (dst) == SIGN_EXTRACT
- || read_modify_subreg_p (dst))
+ || ((df->flags & DF_FOR_REGALLOC) == 0
+ && read_modify_subreg_p (dst)))
{
/* Strict low part always contains SUBREG, but we do not want to make
it appear outside, as whole register is always considered. */
@@ -949,8 +961,8 @@ df_def_record_1 (df, x, bb, insn)
}
#ifdef CLASS_CANNOT_CHANGE_MODE
if (GET_CODE (dst) == SUBREG
- && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (dst)),
- GET_MODE (dst)))
+ && CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (dst),
+ GET_MODE (SUBREG_REG (dst))))
flags |= DF_REF_MODE_CHANGE;
#endif
loc = &XEXP (dst, 0);
@@ -1072,7 +1084,8 @@ df_uses_record (df, loc, ref_type, bb, insn, flags)
{
enum df_ref_flags use_flags;
case SUBREG:
- if (read_modify_subreg_p (dst))
+ if ((df->flags & DF_FOR_REGALLOC) == 0
+ && read_modify_subreg_p (dst))
{
use_flags = DF_REF_READ_WRITE;
#ifdef CLASS_CANNOT_CHANGE_MODE
@@ -1104,7 +1117,7 @@ df_uses_record (df, loc, ref_type, bb, insn, flags)
#ifdef CLASS_CANNOT_CHANGE_MODE
if (CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (dst),
GET_MODE (SUBREG_REG (dst))))
- use_flags |= DF_REF_MODE_CHANGE;
+ use_flags |= DF_REF_MODE_CHANGE;
#endif
df_uses_record (df, &SUBREG_REG (dst), DF_REF_REG_USE, bb,
insn, use_flags);
@@ -2155,6 +2168,7 @@ df_analyse_1 (df, blocks, flags, update)
{
df_reg_info_compute (df, df->all_blocks);
}
+
free (df->dfs_order);
free (df->rc_order);
free (df->rts_order);
diff --git a/gcc/df.h b/gcc/df.h
index d20d298cf7a..fa8aab4557c 100644
--- a/gcc/df.h
+++ b/gcc/df.h
@@ -31,6 +31,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define DF_ALL 255
#define DF_HARD_REGS 1024 /* Mark hard registers. */
#define DF_EQUIV_NOTES 2048 /* Mark uses present in EQUIV/EQUAL notes. */
+#define DF_FOR_REGALLOC 4096 /* If called for the register allocator. */
enum df_ref_type {DF_REF_REG_DEF, DF_REF_REG_USE, DF_REF_REG_MEM_LOAD,
DF_REF_REG_MEM_STORE};
@@ -52,13 +53,22 @@ enum df_ref_flags
DF_REF_READ_WRITE = 1,
/* This flag is set on register references inside a subreg on
- machines which have CLASS_CANNOT_CHANGE_MODE and where the mode
- change of that subreg expression is invalid for this class.
+ machines which have CANNOT_CHANGE_MODE_CLASS.
Note, that this flag can also be set on df_refs representing
the REG itself (i.e., one might not see the subreg anyore).
Also note, that this flag is set also for hardreg refs, i.e.,
you must check yourself if it's a pseudo. */
- DF_REF_MODE_CHANGE = 2
+ DF_REF_MODE_CHANGE = 2,
+
+ /* This flag is set, if we stripped the subreg from the reference.
+ In this case we must make conservative guesses, at what the
+ outer mode was. */
+ DF_REF_STRIPPED = 4,
+
+ /* This flag is set during register allocation if it's okay for
+ the reference's INSN to have one of its operands replaced with a
+ memory reference. */
+ DF_REF_MEM_OK = 8
};
@@ -348,3 +358,4 @@ extern void iterative_dataflow_bitmap PARAMS ((bitmap *, bitmap *, bitmap *,
enum df_confluence_op,
transfer_function_bitmap,
int *, void *));
+extern bool read_modify_subreg_p PARAMS ((rtx));
diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi
index f8018da6b63..b4c341b77f1 100644
--- a/gcc/doc/c-tree.texi
+++ b/gcc/doc/c-tree.texi
@@ -858,13 +858,13 @@ entity.
@item TREE_TYPE
This macro returns the type of the entity declared.
-@item DECL_SOURCE_FILE
+@item TREE_FILENAME
This macro returns the name of the file in which the entity was
declared, as a @code{char*}. For an entity declared implicitly by the
compiler (like @code{__builtin_memcpy}), this will be the string
@code{"<internal>"}.
-@item DECL_SOURCE_LINE
+@item TREE_LINENO
This macro returns the line number at which the entity was declared, as
an @code{int}.
diff --git a/gcc/doc/contrib.texi b/gcc/doc/contrib.texi
index fff93c4d88b..aaf4e7b8dc1 100644
--- a/gcc/doc/contrib.texi
+++ b/gcc/doc/contrib.texi
@@ -1,5 +1,5 @@
-@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002
-@c Free Software Foundation, Inc.
+@c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000,
+@c 2001,2002,2003 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -45,6 +45,9 @@ Godmar Back for his Java improvements and encouragement.
Scott Bambrough for help porting the Java compiler.
@item
+Wolfgang Bangerth for processing tons of bug reports.
+
+@item
Jon Beniston for his Win32 port of Java.
@item
@@ -55,6 +58,9 @@ Eric Blake for helping to make GCJ and libgcj conform to the
specifications.
@item
+Eric Botcazou for fixing middle- and backend bugs left and right.
+
+@item
Hans-J. Boehm for his @uref{http://www.hpl.hp.com/personal/Hans_Boehm/gc/,,
garbage collector}, IA-64 libffi port, and other Java work.
@@ -109,6 +115,9 @@ John Carr for his alias work, SPARC hacking, infrastructure improvements,
previous contributions to the steering committee, loop optimizations, etc.
@item
+Stephane Carrez for 68HC11 and 68HC12 ports.
+
+@item
Steve Chamberlain for support for the Hitachi SH and H8 processors
and the PicoJava processor, and for GCJ config fixes.
@@ -159,7 +168,11 @@ that print a copy of their source.
Russell Davidson for fstream and stringstream fixes in libstdc++.
@item
-Mo DeJong for GCJ and libgcj bug fixes.
+Mo DeJong for GCJ and libgcj bugfixes.
+
+@item
+DJ Delorie for the DJGPP port, build and libiberty maintenance, and
+various bugfixes.
@item
Gabriel Dos Reis for contributions to g++, contributions and
@@ -203,6 +216,9 @@ configuration support for locales and fstream-related fixes.
Vadim Egorov for libstdc++ fixes in strings, streambufs, and iostreams.
@item
+Christian Ehrhardt for dealing with bug reports.
+
+@item
Ben Elliston for his work to move the Objective-C runtime into its
own subdirectory and for his work on autoconf.
@@ -214,6 +230,10 @@ Doug Evans for much of the global optimization framework, arc, m32r,
and SPARC work.
@item
+Christopher Faylor for his work on the Cygwin port and for caring and
+feeding the gcc.gnu.org box and saving its users tons of spam.
+
+@item
Fred Fish for BeOS support and Ada fixes.
@item
@@ -305,12 +325,12 @@ Andreas Jaeger for various fixes to the MIPS port
@item
Jakub Jelinek for his SPARC work and sibling call optimizations as well
-as lots of bug fixes and test cases, and for improving the Java build
+as lots of bugfixes and test cases, and for improving the Java build
system.
@item
-Janis Johnson for ia64 testing and fixes and for her quality improvement
-sidetracks.
+Janis Johnson for ia64 testing and fixes, her quality improvement
+sidetracks, and web page maintenance.
@item
J. Kean Johnston for OpenServer support.
@@ -393,7 +413,7 @@ with analysis and improvements of x86 performance.
Ted Lemon wrote parts of the RTL reader and printer.
@item
-Kriang Lerdsuwanakij for improvements to demangler and various c++ fixes.
+Kriang Lerdsuwanakij for improvements to the demangler and many c++ fixes.
@item
Warren Levy for tremendous work on libgcj (Java Runtime Library) and
@@ -531,6 +551,9 @@ MT-safe string and shadow headers.
Felix Natter for documentation on porting libstdc++.
@item
+Nathanael Nerode for cleaning up the configuration/build process.
+
+@item
NeXT, Inc.@: donated the front end that supports the Objective-C
language.
@@ -542,6 +565,10 @@ engine setup, various documentation fixes and other small fixes.
Geoff Noer for this work on getting cygwin native builds working.
@item
+Diego Novillo for his SPEC performance tracking web pages and assorted
+fixes in the middle end and various back ends.
+
+@item
David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, FreeBSD/ARM,
FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related infrastructure
improvements.
@@ -559,6 +586,9 @@ ABI support, improvements to dejagnu's MIPS support, Java configuration
clean-ups and porting work, etc.
@item
+Hartmut Penner for work on the s390 port.
+
+@item
Paul Petersen wrote the machine description for the Alliant FX/8.
@item
@@ -589,6 +619,9 @@ David Reese of Sun Microsystems contributed to the Solaris on PowerPC
port.
@item
+Volker Reichelt for keeping up with the problem reports.
+
+@item
Joern Rennecke for maintaining the sh port, loop, regmove & reload
hacking.
@@ -620,6 +653,10 @@ Juha Sarlin for improvements to the H8 code generator.
Greg Satz assisted in making GCC work on HP-UX for the 9000 series 300.
@item
+Roger Sayle for improvements to constant folding and GCC's RTL optimizers
+as well as for fixing numerous bugs.
+
+@item
Bradley Schatz for his work on the GCJ FAQ.
@item
@@ -671,6 +708,9 @@ Andrey Slepuhin for assorted AIX hacking.
Christopher Smith did the port for Convex machines.
@item
+Danny Smith for his major efforts on the Mingw (and Cygwin) ports.
+
+@item
Randy Smith finished the Sun FPA support.
@item
@@ -704,7 +744,7 @@ Mike Stump for his Elxsi port, g++ contributions over the years and more
recently his vxworks contributions
@item
-Jeff Sturm for Java porting help, bug fixes, and encouragement.
+Jeff Sturm for Java porting help, bugfixes, and encouragement.
@item
Shigeya Suzuki for this fixes for the bsdi platforms.
@@ -784,6 +824,9 @@ related infrastructure improvements to help x86 code generation,
value range propagation and other work, WE32k port.
@item
+Ulrich Weigand for work on the s390 port.
+
+@item
Zack Weinberg for major work on cpplib and various other bugfixes.
@item
diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi
index a6d6fb0db9f..cf962c4563a 100644
--- a/gcc/doc/cpp.texi
+++ b/gcc/doc/cpp.texi
@@ -2031,6 +2031,12 @@ This macro is defined, with value 1, if (and only if) the NeXT runtime
(as in @option{-fnext-runtime}) is in use for Objective-C. If the GNU
runtime is used, this macro is not defined, so that you can use this
macro to determine which runtime (NeXT or GNU) is being used.
+
+@item __LP64__
+@item _LP64
+These macros are defined, with value 1, if (and only if) the compilation
+is for a target where @code{long int} and pointer both use 64-bits and
+@code{int} uses 32-bit.
@end table
@node System-specific Predefined Macros
diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi
index c830710af58..9212c80f755 100644
--- a/gcc/doc/cppopts.texi
+++ b/gcc/doc/cppopts.texi
@@ -498,13 +498,6 @@ it does not use shell special characters.
Cancel an assertion with the predicate @var{predicate} and answer
@var{answer}.
-@item -A-
-@opindex A-
-Cancel all predefined assertions and all assertions preceding it on
-the command line. Also, undefine all predefined macros and all
-macros preceding it on the command line. (This is a historical wart and
-may change in the future.)
-
@item -dCHARS
@var{CHARS} is a sequence of one or more of the following characters,
and must not be preceded by a space. Other characters are interpreted
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index f09ee529f37..07efa56ad5d 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -887,19 +887,6 @@ the containing function. You should specify, for @var{result}, a value
returned by @code{__builtin_apply}.
@end deftypefn
-@cindex underscores in variables in macros
-@cindex @samp{_} in variables in macros
-@cindex local variables in macros
-@cindex variables, local, in macros
-@cindex macros, local variables in
-
-The reason for using names that start with underscores for the local
-variables is to avoid conflicts with variable names that occur within the
-expressions that are substituted for @code{a} and @code{b}. Eventually we
-hope to design a new form of declaration syntax that allows you to declare
-variables whose scopes start only after their initializers; this will be a
-more reliable way to prevent such conflicts.
-
@node Typeof
@section Referring to a Type with @code{typeof}
@findex typeof
@@ -950,6 +937,19 @@ arithmetic type and evaluates each of its arguments exactly once:
_a > _b ? _a : _b; @})
@end example
+@cindex underscores in variables in macros
+@cindex @samp{_} in variables in macros
+@cindex local variables in macros
+@cindex variables, local, in macros
+@cindex macros, local variables in
+
+The reason for using names that start with underscores for the local
+variables is to avoid conflicts with variable names that occur within the
+expressions that are substituted for @code{a} and @code{b}. Eventually we
+hope to design a new form of declaration syntax that allows you to declare
+variables whose scopes start only after their initializers; this will be a
+more reliable way to prevent such conflicts.
+
@noindent
Some more examples of the use of @code{typeof}:
@@ -4316,7 +4316,7 @@ extern int printf (char *, ...);
class a @{
public:
- sub (int i)
+ void sub (int i)
@{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
diff --git a/gcc/doc/gccint.texi b/gcc/doc/gccint.texi
index b6bec095fa0..e69f67fc87d 100644
--- a/gcc/doc/gccint.texi
+++ b/gcc/doc/gccint.texi
@@ -140,6 +140,7 @@ Additional tutorial information is linked to from
* Contributing:: How to contribute to testing and developing GCC.
* Portability:: Goals of GCC's portability features.
* Interface:: Function-call interface of GCC output.
+* Libgcc:: Low-level runtime library used by GCC.
* Languages:: Languages for which GCC front ends are written.
* Source Tree:: GCC source tree structure and build system.
* Passes:: Order of passes, what they do, and what each file is for.
@@ -168,6 +169,7 @@ Additional tutorial information is linked to from
@include contribute.texi
@include portability.texi
@include interface.texi
+@include libgcc.texi
@include languages.texi
@include sourcebuild.texi
@include passes.texi
diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi
index b7cfee2019d..69dbcacaea7 100644
--- a/gcc/doc/gcov.texi
+++ b/gcc/doc/gcov.texi
@@ -120,6 +120,7 @@ gcov @r{[}@var{options}@r{]} @var{sourcefile}
@ignore
@c man begin SYNOPSIS
gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
+ [@option{-a}|@option{--all-blocks}]
[@option{-b}|@option{--branch-probabilities}]
[@option{-c}|@option{--branch-counts}]
[@option{-n}|@option{--no-output}]
@@ -127,6 +128,7 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}]
[@option{-p}|@option{--preserve-paths}]
[@option{-f}|@option{--function-summaries}]
[@option{-o}|@option{--object-directory} @var{directory|file}] @var{sourcefile}
+ [@option{-u}|@option{--unconditional-branches}]
@c man end
@c man begin SEEALSO
gpl(7), gfdl(7), fsf-funding(7), gcc(1) and the Info entry for @file{gcc}.
@@ -145,11 +147,19 @@ exit without doing any further processing.
Display the @command{gcov} version number (on the standard output),
and exit without doing any further processing.
+@item -a
+@itemx --all-blocks
+Write individual execution counts for every basic block. Normally gcov
+outputs execution counts only for the main blocks of a line. With this
+option you can determine if blocks within a single line are not being
+executed.
+
@item -b
@itemx --branch-probabilities
Write branch frequencies to the output file, and write branch summary
info to the standard output. This option allows you to see how often
-each branch in your program was taken.
+each branch in your program was taken. Unconditional branches will not
+be shown, unless the @option{-u} option is given.
@item -c
@itemx --branch-counts
@@ -192,6 +202,11 @@ source file name, without its extension. If a file is specified here,
the data files are named after that file, without its extension. If this
option is not supplied, it defaults to the current directory.
+@item -u
+@itemx --unconditional-branches
+When branch counts are given, include those of unconditional branches.
+Unconditional branches are normally not interesting.
+
@end table
Gcov should be run with the current directory the same as that when you
@@ -248,10 +263,14 @@ Here is a sample:
@smallexample
-: 0:Source:tmp.c
- -: 0:Object:tmp.bb
+ -: 0:Graph:tmp.bbg
+ -: 0:Data:tmp.da
+ -: 0:Runs:1
+ -: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
+function main called 1 returned 1 blocks executed 75%
1: 4:@{
1: 5: int i, total;
-: 6:
@@ -265,9 +284,58 @@ Here is a sample:
-: 14: else
1: 15: printf ("Success\n");
1: 16: return 0;
- 1: 17:@}
+ -: 17:@}
@end smallexample
+When you use the @option{-a} option, you will get individual block
+counts, and the output looks like this:
+
+@smallexample
+ -: 0:Source:tmp.c
+ -: 0:Graph:tmp.bbg
+ -: 0:Data:tmp.da
+ -: 0:Runs:1
+ -: 0:Programs:1
+ -: 1:#include <stdio.h>
+ -: 2:
+ -: 3:int main (void)
+function main called 1 returned 1 blocks executed 75%
+ 1: 4:@{
+ 1: 4-block 0
+ 1: 5: int i, total;
+ -: 6:
+ 1: 7: total = 0;
+ -: 8:
+ 11: 9: for (i = 0; i < 10; i++)
+ 11: 9-block 0
+ 10: 10: total += i;
+ 10: 10-block 0
+ -: 11:
+ 1: 12: if (total != 45)
+ 1: 12-block 0
+ #####: 13: printf ("Failure\n");
+ $$$$$: 13-block 0
+ -: 14: else
+ 1: 15: printf ("Success\n");
+ 1: 15-block 0
+ 1: 16: return 0;
+ 1: 16-block 0
+ -: 17:@}
+@end smallexample
+
+In this mode, each basic block is only shown on one line -- the last
+line of the block. A multi-line block will only contribute to the
+execution count of that last line, and other lines will not be shown
+to contain code, unless previous blocks end on those lines.
+The total execution count of a line is shown and subsequent lines show
+the execution counts for individual blocks that end on that line. After each
+block, the branch and call counts of the block will be shown, if the
+@option{-b} option is given.
+
+Because of the way gcc instruments calls, a call count can be shown
+after a line with no individual blocks.
+As you can see, line 13 contains a basic block that was not executed.
+
@need 450
When you use the @option{-b} option, your output looks like this:
@@ -284,31 +352,34 @@ Here is a sample of a resulting @file{tmp.c.gcov} file:
@smallexample
-: 0:Source:tmp.c
- -: 0:Object:tmp.bb
+ -: 0:Graph:tmp.bbg
+ -: 0:Data:tmp.da
+ -: 0:Runs:1
+ -: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
+function main called 1 returned 1 blocks executed 75%
1: 4:@{
1: 5: int i, total;
-: 6:
1: 7: total = 0;
-: 8:
11: 9: for (i = 0; i < 10; i++)
-branch 0: taken 90%
-branch 1: taken 100%
-branch 2: taken 100%
+branch 0 taken 91% (fallthrough)
+branch 1 taken 9%
10: 10: total += i;
-: 11:
1: 12: if (total != 45)
-branch 0: taken 100%
+branch 0 taken 0% (fallthrough)
+branch 1 taken 100%
#####: 13: printf ("Failure\n");
-call 0: never executed
-branch 1: never executed
+call 0 never executed
-: 14: else
1: 15: printf ("Success\n");
-call 0: returns 100%
+call 0 called 1 returned 100%
1: 16: return 0;
- 1: 17:@}
+ -: 17:@}
@end smallexample
For each basic block, a line is printed after the last line of the basic
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 0d1496ddeb0..593497a0c0c 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1213,6 +1213,9 @@ Before you install GCC, we encourage you to run the testsuites and to
compare your results with results from a similar configuration that have
been submitted to the
@uref{http://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}.
+Some of these archived results are linked from the build status lists
+at @uref{http://gcc.gnu.org/buildstat.html}, although not everyone who
+reports a successful build runs the testsuites and submits the results.
This step is optional and may require you to download additional software,
but it can give you confidence in your new GCC installation or point out
problems before you install and start using your new GCC.
@@ -2075,22 +2078,19 @@ of the configuration used in the stock FreeBSD configuration of GCC. In
particular, @option{--enable-threads} is now configured by default.
However, as a general user, do not attempt to replace the system
compiler with this release. Known to bootstrap and check with good
-results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE and 5-CURRENT@.
+results on FreeBSD 4.8-STABLE and 5-CURRENT@. In the past, known to
+bootstrap and check with good results on FreeBSD 3.0, 3.4, 4.0, 4.2,
+4.3, 4.4, 4.5-STABLE@.
In principle, @option{--enable-threads} is now compatible with
@option{--enable-libgcj} on FreeBSD@. However, it has only been built
-and tested on @samp{i386-*-freebsd4.5} and @samp{alpha-*-freebsd5.0}.
+and tested on @samp{i386-*-freebsd[45]} and @samp{alpha-*-freebsd[45]}.
The static
library may be incorrectly built (symbols are missing at link time).
There is a rare timing-based startup hang (probably involves an
assumption about the thread library). Multi-threaded boehm-gc (required for
libjava) exposes severe threaded signal-handling bugs on FreeBSD before
-4.5-RELEASE. The alpha port may not fully bootstrap without some manual
-intervention: @command{gcjh} will crash with a floating-point exception while
-generating @file{java/lang/Double.h} (just copy the version built on
-@samp{i386-*-freebsd*} and rerun the top-level @command{gmake} with no
-arguments and it
-should properly complete the bootstrap). Other CPU architectures
+4.5-RELEASE@. Other CPU architectures
supported by FreeBSD will require additional configuration tuning in, at
the very least, both boehm-gc and libffi.
@@ -2921,32 +2921,23 @@ switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin*
PowerPC running Darwin (Mac OS X kernel).
-GCC 3.0 does not support Darwin, but 3.1 and later releases will work.
-
Pre-installed versions of Mac OS X may not include any developer tools,
meaning that you will not be able to build GCC from source. Tool
binaries are available at
-@uref{http://www.opensource.apple.com/projects/darwin/} (free
+@uref{http://developer.apple.com/tools/compilers.html} (free
registration required).
-Versions of the assembler prior to ``cctools-364'' cannot handle the
-4-argument form of @code{rlwinm} and related mask-using instructions. Darwin
-1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364,
-check out @file{cctools} with tag @samp{Apple-364}, build it, and
-install the assembler as @file{usr/bin/as}. See
-@uref{http://www.opensource.apple.com/tools/cvs/docs.html} for details.
-
-Also, the default stack limit of 512K is too small, and a bootstrap will
-typically fail when self-compiling @file{expr.c}. Set the stack to 800K
-or more, for instance by doing @samp{limit stack 800}. It's also
-convenient to use the GNU preprocessor instead of Apple's during the
-first stage of bootstrapping; this is automatic when doing @samp{make
-bootstrap}, but to do it from the toplevel objdir you will need to say
-@samp{make CC='cc -no-cpp-precomp' bootstrap}.
+The default stack limit of 512K is too small, which may cause compiles
+to fail with 'Bus error'. Set the stack larger, for instance
+by doing @samp{limit stack 800}. It's a good idea to use the GNU
+preprocessor instead of Apple's @file{cpp-precomp} during the first stage of
+bootstrapping; this is automatic when doing @samp{make bootstrap}, but
+to do it from the toplevel objdir you will need to say @samp{make
+CC='cc -no-cpp-precomp' bootstrap}.
-Note that the version of GCC shipped by Apple typically includes a
-number of extensions not available in a standard GCC release. These
-extensions are generally specific to Mac programming.
+The version of GCC shipped by Apple typically includes a number of
+extensions not available in a standard GCC release. These extensions
+are generally specific to Mac programming.
@html
<hr />
@@ -3042,12 +3033,12 @@ GCC you first have to install a pre-built compiler, see our
@uref{binaries.html,,binaries page} for details.
The Solaris 2 @command{/bin/sh} will often fail to configure
-@file{libstdc++-v3}, @file{boehm-gc} or
-@file{libjava}. If you encounter this problem, set @env{CONFIG_SHELL} to
-@command{/bin/ksh} in your environment before running @command{configure}.
+@file{libstdc++-v3}, @file{boehm-gc} or @file{libjava}. We therefore
+recommend to set @env{CONFIG_SHELL} to @command{/bin/ksh} in your
+environment.
Solaris 2 comes with a number of optional OS packages. Some of these
-packages are needed to use GCC fully, namely @code{SUNWarc},
+are needed to use GCC fully, namely @code{SUNWarc},
@code{SUNWbtool}, @code{SUNWesu}, @code{SUNWhea}, @code{SUNWlibm},
@code{SUNWsprot}, and @code{SUNWtoo}. If you did not install all
optional packages when installing Solaris 2, you will need to verify that
diff --git a/gcc/doc/interface.texi b/gcc/doc/interface.texi
index c554434c447..d2210e93865 100644
--- a/gcc/doc/interface.texi
+++ b/gcc/doc/interface.texi
@@ -83,20 +83,3 @@ go in a register:
@dots{}
@}
@end example
-
-@cindex arithmetic libraries
-@cindex math libraries
-@opindex msoft-float
-Code compiled with GCC may call certain library routines. Most of
-them handle arithmetic for which there are no instructions. This
-includes multiply and divide on some machines, and floating point
-operations on any machine for which floating point support is disabled
-with @option{-msoft-float}. Some standard parts of the C library, such as
-@code{bcopy} or @code{memcpy}, are also called automatically. The usual
-function call interface is used for calling the library routines.
-
-Some of these routines can be defined in mostly machine-independent C;
-they appear in @file{libgcc2.c}. Others must be hand-written in
-assembly language for each processor. Wherever they are defined, they
-are compiled into the support library, @file{libgcc.a}, which is
-automatically searched when you link programs with GCC@.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index cd009a4472f..45e0ef0e4e4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -166,7 +166,7 @@ in the following sections.
-ansi -std=@var{standard} -aux-info @var{filename} @gol
-fno-asm -fno-builtin -fno-builtin-@var{function} @gol
-fhosted -ffreestanding -fms-extensions @gol
--trigraphs -traditional -traditional-cpp @gol
+-trigraphs -no-integrated-cpp -traditional -traditional-cpp @gol
-fallow-single-precision -fcond-mismatch @gol
-fsigned-bitfields -fsigned-char @gol
-funsigned-bitfields -funsigned-char @gol
@@ -450,6 +450,7 @@ in the following sections.
-mstrict-align -mno-strict-align -mrelocatable @gol
-mno-relocatable -mrelocatable-lib -mno-relocatable-lib @gol
-mtoc -mno-toc -mlittle -mlittle-endian -mbig -mbig-endian @gol
+-mdynamic-no-pic @gol
-mcall-aix -mcall-sysv -mcall-netbsd @gol
-maix-struct-return -msvr4-struct-return @gol
-mabi=altivec -mabi=no-altivec @gol
@@ -713,7 +714,7 @@ in the following sections.
-fcall-saved-@var{reg} -fcall-used-@var{reg} @gol
-ffixed-@var{reg} -fexceptions @gol
-fnon-call-exceptions -funwind-tables @gol
--fasynchronous-unwind-tables @gol
+-fasynchronous-unwind-tables -fforced-unwind-exceptions @gol
-finhibit-size-directive -finstrument-functions @gol
-fno-common -fno-ident -fno-gnu-linker @gol
-fpcc-struct-return -fpic -fPIC @gol
@@ -1207,6 +1208,17 @@ Accept some non-standard constructs used in Microsoft header files.
Support ISO C trigraphs. The @option{-ansi} option (and @option{-std}
options for strict ISO C conformance) implies @option{-trigraphs}.
+@item -no-integrated-cpp
+@opindex no-integrated-cpp
+Performs a compilation in two passes: preprocessing and compiling. This
+option allows a user supplied "cc1", "cc1plus", or "cc1obj" via the
+@option{-B} option. The user supplied compilation step can then add in
+an additional preprocessing step after normal preprocessing but before
+compiling. The default is to use the integrated cpp (internal cpp)
+
+The semantics of this option will change if "cc1", "cc1plus", and
+"cc1obj" are merged.
+
@cindex traditional C language
@cindex C language, traditional
@item -traditional
@@ -3582,8 +3594,8 @@ invoking @option{-O2} on programs that use computed gotos.
@item -O3
@opindex O3
Optimize yet more. @option{-O3} turns on all optimizations specified by
-@option{-O2} and also turns on the @option{-finline-functions} and
-@option{-frename-registers} options.
+@option{-O2} and also turns on the @option{-finline-functions},
+@option{-funit-at-a-time} and @option{-frename-registers} options.
@item -O0
@opindex O0
@@ -3704,6 +3716,28 @@ the compilation faster and less code will be inlined (which presumably
means slower programs). This option is particularly useful for programs that
use inlining heavily such as those based on recursive templates with C++.
+Inlining is actually controlled by a number of parameters, which may be
+specified individually by using @option{--param @var{name}=@var{value}}.
+The @option{-finline-limit=@var{n}} option sets some of these parameters
+as follows:
+
+@table @gcctabopt
+ @item max-inline-insns
+ is set to @var{n}.
+ @item max-inline-insns-single
+ is set to @var{n}/2.
+ @item max-inline-insns-single-auto
+ is set to @var{n}/2.
+ @item min-inline-insns
+ is set to 130 or @var{n}/4, whichever is smaller.
+ @item max-inline-insns-rtl
+ is set to @var{n}.
+@end table
+
+Using @option{-finline-limit=600} thus results in the default settings
+for these parameters. See below for a documentation of the individual
+parameters controlling inlining.
+
@emph{Note:} pseudo instruction represents, in this particular context, an
abstract measurement of function's size. In no way, it represents a count
of assembly instructions and as such its exact meaning might change from one
@@ -4601,10 +4635,53 @@ before flushing the current state and starting over. Large functions
with few branches or calls can create excessively large lists which
needlessly consume memory and resources.
+@item max-inline-insns-single
+Several parameters control the tree inliner used in gcc.
+This number sets the maximum number of instructions (counted in gcc's
+internal representation) in a single function that the tree inliner
+will consider for inlining. This only affects functions declared
+inline and methods implemented in a class declaration (C++).
+The default value is 300.
+
+@item max-inline-insns-auto
+When you use @option{-finline-functions} (included in @option{-O3}),
+a lot of functions that would otherwise not be considered for inlining
+by the compiler will be investigated. To those functions, a different
+(more restrictive) limit compared to functions declared inline can
+be applied.
+The default value is 300.
+
@item max-inline-insns
-If an function contains more than this many instructions, it
-will not be inlined. This option is precisely equivalent to
-@option{-finline-limit}.
+The tree inliner does decrease the allowable size for single functions
+to be inlined after we already inlined the number of instructions
+given here by repeated inlining. This number should be a factor of
+two or more larger than the single function limit.
+Higher numbers result in better runtime performance, but incur higher
+compile-time resource (CPU time, memory) requirements and result in
+larger binaries. Very high values are not advisable, as too large
+binaries may adversely affect runtime performance.
+The default value is 600.
+
+@item max-inline-slope
+After exceeding the maximum number of inlined instructions by repeated
+inlining, a linear function is used to decrease the allowable size
+for single functions. The slope of that function is the negative
+reciprocal of the number specified here.
+The default value is 32.
+
+@item min-inline-insns
+The repeated inlining is throttled more and more by the linear function
+after exceeding the limit. To avoid too much throttling, a minimum for
+this function is specified here to allow repeated inlining for very small
+functions even when a lot of repeated inlining already has been done.
+The default value is 130.
+
+@item max-inline-insns-rtl
+For languages that use the RTL inliner (this happens at a later stage
+than tree inlining), you can set the maximum allowable size (counted
+in RTL instructions) for the RTL inliner with this parameter.
+The default value is 600.
+
@item max-unrolled-insns
The maximum number of instructions that a loop should have if that loop
@@ -5375,18 +5452,6 @@ Output the accumulated assembler options specified by @option{-Wa}.
@item %Z
Output the accumulated preprocessor options specified by @option{-Wp}.
-@item %v1
-Substitute the major version number of GCC@.
-(For version 2.9.5, this is 2.)
-
-@item %v2
-Substitute the minor version number of GCC@.
-(For version 2.9.5, this is 9.)
-
-@item %v3
-Substitute the patch level number of GCC@.
-(For version 2.9.5, this is 5.)
-
@item %a
Process the @code{asm} spec. This is used to compute the
switches to be passed to the assembler.
@@ -7295,6 +7360,13 @@ On System V.4 and embedded PowerPC systems compile code for the
processor in big endian mode. The @option{-mbig-endian} option is
the same as @option{-mbig}.
+@item -mdynamic-no-pic
+@opindex mdynamic-no-pic
+On Darwin and Mac OS X systems, compile code so that it is not
+relocatable, but that its external references are relocatable. The
+resulting code is suitable for applications, but not shared
+libraries.
+
@item -mcall-sysv
@opindex mcall-sysv
On System V.4 and embedded PowerPC systems compile code using calling
@@ -10917,6 +10989,13 @@ instructions to throw exceptions, i.e.@: memory references or floating
point instructions. It does not allow exceptions to be thrown from
arbitrary signal handlers such as @code{SIGALRM}.
+@item -fforced-unwind-exceptions
+@opindex fforced-unwind-exceptions
+Generate code that checks for non-catchable exceptions derived from
+@code{_Unwind_ForcedUnwind}, such as from @code{longjmp_unwind} or
+from pthread cancellation. There is some amount of code-size
+overhead associated with this, so it is not default.
+
@item -funwind-tables
@opindex funwind-tables
Similar to @option{-fexceptions}, except that it will just generate any needed
diff --git a/gcc/doc/passes.texi b/gcc/doc/passes.texi
index 107fe5d2437..0de28bbb8ce 100644
--- a/gcc/doc/passes.texi
+++ b/gcc/doc/passes.texi
@@ -82,7 +82,9 @@ the other C-like languages: @file{c-common.c},
@file{c-pragma.c},
@file{c-semantics.c},
@file{c-lex.c},
-@file{c-incpath.c}
+@file{c-incpath.c},
+@file{c-ppoutput.c},
+@file{c-cppbuiltin.c},
@file{c-common.h},
@file{c-dump.h},
@file{c-incpath.h}
@@ -540,17 +542,6 @@ The option @option{-dB} causes a debugging dump of the RTL code after
this pass. This dump file's name is made by appending @samp{.bbro} to
the input file name.
-@cindex cross-jumping
-@cindex no-op move instructions
-@item
-Jump optimization is repeated, this time including cross-jumping
-and deletion of no-op move instructions.
-
-@opindex dJ
-The option @option{-dJ} causes a debugging dump of the RTL code after
-this pass. This dump file's name is made by appending @samp{.jump2}
-to the input file name.
-
@cindex delayed branch scheduling
@cindex scheduling, delayed branch
@item
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index f10a800862b..3141a23d7e7 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 2002 Free Software Foundation, Inc.
+@c Copyright (C) 2002, 2003 Free Software Foundation, Inc.
@c This is part of the GCC manual.
@c For copying conditions, see the file gcc.texi.
@@ -539,6 +539,9 @@ deprecated).
@itemx start.encap
@itemx rest.encap
FIXME: exactly what goes in each of these targets?
+@item tags
+Build an @command{etags} @file{TAGS} file in the language subdirectory
+in the source tree.
@item info
Build info documentation for the front end, in the source directory.
This target is only called by @command{make bootstrap} if a suitable
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index a3c68a2923a..9ff8040a739 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -619,7 +619,7 @@ Here are run-time target specifications.
This function-like macro expands to a block of code that defines
built-in preprocessor macros and assertions for the target cpu, using
the functions @code{builtin_define}, @code{builtin_define_std} and
-@code{builtin_assert} defined in @file{c-common.c}. When the front end
+@code{builtin_assert}. When the front end
calls this macro it provides a trailing semicolon, and since it has
finished command line option processing your code can use those
results freely.
@@ -1160,8 +1160,7 @@ make it all fit in fewer cache lines.
Alignment in bits to be given to a structure bit-field that follows an
empty field such as @code{int : 0;}.
-Note that @code{PCC_BITFIELD_TYPE_MATTERS} also affects the alignment
-that results from an empty field.
+If @code{PCC_BITFIELD_TYPE_MATTERS} is true, it overrides this macro.
@findex STRUCTURE_SIZE_BOUNDARY
@item STRUCTURE_SIZE_BOUNDARY
@@ -2816,6 +2815,16 @@ value @code{STARTING_FRAME_OFFSET}.
@c i'm not sure if the above is still correct.. had to change it to get
@c rid of an overfull. --mew 2feb93
+@findex STACK_ALIGNMENT_NEEDED
+@item STACK_ALIGNMENT_NEEDED
+Define to zero to disable final alignment of the stack during reload.
+The non-zero default for this macro is suitable for most ports.
+
+On ports where @code{STARTING_FRAME_OFFSET} is non-zero or where there
+is a register save block following the local block that doesn't require
+alignment to @code{STACK_BOUNDARY}, it may be beneficial to disable
+stack alignment and do it in the backend.
+
@findex STACK_POINTER_OFFSET
@item STACK_POINTER_OFFSET
Offset from the stack pointer register to the first location at which
@@ -3246,6 +3255,16 @@ for backward compatibility in pre GCC 3.0 compiled code.
If this macro is not defined, it defaults to
@code{DWARF_FRAME_REGISTERS}.
+@findex DWARF_REG_TO_UNWIND_COLUMN
+@item DWARF_REG_TO_UNWIND_COLUMN (@var{regno})
+
+Define this macro if the target's representation for dwarf registers
+is different than the internal representation for unwind column.
+Given a dwarf register, this macro should return the interal unwind
+column number to use instead.
+
+See the PowerPC's SPE target for an example.
+
@end table
@node Elimination
@@ -7600,6 +7619,15 @@ Default value is false if @code{EH_FRAME_SECTION_NAME} is defined, and
true otherwise.
@end deftypevar
+@deftypefn {Target Hook} rtx TARGET_DWARF_REGISTER_SPAN (rtx @var{reg})
+Given a register, this hook should return a parallel of registers to
+represent where to find the register pieces. Define this hook if the
+register and its mode are represented in Dwarf in non-contiguous
+locations, or if the register should be represented in more than one
+register in Dwarf. Otherwise, this hook should return @code{NULL_RTX}.
+If not defined, the default is to return @code{NULL_RTX}.
+@end deftypefn
+
@node Alignment Output
@subsection Assembler Commands for Alignment
diff --git a/gcc/dummy-conditions.c b/gcc/dummy-conditions.c
index 02c55b2bf5f..eb3fb417314 100644
--- a/gcc/dummy-conditions.c
+++ b/gcc/dummy-conditions.c
@@ -1,20 +1,20 @@
/* Support for calculating constant conditions.
Copyright (C) 2002 Free Software Foundation, Inc.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/dwarf2asm.h b/gcc/dwarf2asm.h
index 859883d45e3..8d6fd18bd89 100644
--- a/gcc/dwarf2asm.h
+++ b/gcc/dwarf2asm.h
@@ -19,60 +19,56 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-/* ??? Format checking yields "null format string" warnings, which is
- the way these routines are signaled that there is no associated
- debug information. So the attributes are commented out. */
-
extern void dw2_assemble_integer PARAMS ((int, rtx));
extern void dw2_asm_output_data PARAMS ((int, unsigned HOST_WIDE_INT,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_delta PARAMS ((int, const char *,
const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_4 */;
+ ATTRIBUTE_NULL_PRINTF_4;
extern void dw2_asm_output_offset PARAMS ((int, const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_pcrel PARAMS ((int, const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_addr PARAMS ((int, const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_addr_rtx PARAMS ((int, rtx,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_encoded_addr_rtx PARAMS ((int, rtx,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_nstring PARAMS ((const char *, size_t,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_data_uleb128 PARAMS ((unsigned HOST_WIDE_INT,
const char *, ...))
- /* ATTRIBUTE_PRINTF_2 */;
+ ATTRIBUTE_NULL_PRINTF_2;
extern void dw2_asm_output_data_sleb128 PARAMS ((HOST_WIDE_INT,
const char *, ...))
- /* ATTRIBUTE_PRINTF_2 */;
+ ATTRIBUTE_NULL_PRINTF_2;
extern void dw2_asm_output_delta_uleb128 PARAMS ((const char *, const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern void dw2_asm_output_delta_sleb128 PARAMS ((const char *, const char *,
const char *, ...))
- /* ATTRIBUTE_PRINTF_3 */;
+ ATTRIBUTE_NULL_PRINTF_3;
extern int size_of_uleb128 PARAMS ((unsigned HOST_WIDE_INT));
extern int size_of_sleb128 PARAMS ((HOST_WIDE_INT));
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index e602f7ef4d2..7a670725324 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -257,6 +257,18 @@ dw_fde_node;
#define DWARF_OFFSET_SIZE 4
#endif
+/* According to the (draft) DWARF 3 specification, the initial length
+ should either be 4 or 12 bytes. When it's 12 bytes, the first 4
+ bytes are 0xffffffff, followed by the length stored in the next 8
+ bytes.
+
+ However, the SGI/MIPS ABI uses an initial length which is equal to
+ DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
+
+#ifndef DWARF_INITIAL_LENGTH_SIZE
+#define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
+#endif
+
#define DWARF_VERSION 2
/* Round SIZE up to the nearest BOUNDARY. */
@@ -1906,7 +1918,7 @@ output_call_frame_info (for_eh)
dw_fde_ref fde;
dw_cfi_ref cfi;
char l1[20], l2[20], section_start_label[20];
- int any_lsda_needed = 0;
+ bool any_lsda_needed = false;
char augmentation[6];
int augmentation_size;
int fde_encoding = DW_EH_PE_absptr;
@@ -1917,17 +1929,19 @@ output_call_frame_info (for_eh)
if (fde_table_in_use == 0)
return;
- /* If we don't have any functions we'll want to unwind out of, don't emit any
- EH unwind information. */
+ /* If we don't have any functions we'll want to unwind out of, don't
+ emit any EH unwind information. Note that if exceptions aren't
+ enabled, we won't have collected nothrow information, and if we
+ asked for asynchronous tables, we always want this info. */
if (for_eh)
{
- int any_eh_needed = flag_asynchronous_unwind_tables;
+ bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
for (i = 0; i < fde_table_in_use; i++)
if (fde_table[i].uses_eh_lsda)
- any_eh_needed = any_lsda_needed = 1;
+ any_eh_needed = any_lsda_needed = true;
else if (! fde_table[i].nothrow)
- any_eh_needed = 1;
+ any_eh_needed = true;
if (! any_eh_needed)
return;
@@ -2065,7 +2079,7 @@ output_call_frame_info (for_eh)
fde = &fde_table[i];
/* Don't emit EH unwind info for leaf functions that don't need it. */
- if (!flag_asynchronous_unwind_tables && for_eh
+ if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
&& (fde->nothrow || fde->all_throwers_are_sibcalls)
&& !fde->uses_eh_lsda)
continue;
@@ -3268,7 +3282,8 @@ const struct gcc_debug_hooks dwarf2_debug_hooks =
emitting the abstract description of inline functions until
something tries to reference them. */
dwarf2out_abstract_function, /* outlining_inline_function */
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ debug_nothing_int /* handle_pch */
};
#endif
@@ -3397,7 +3412,8 @@ limbo_die_node;
language, and compiler version. */
/* Fixed size portion of the DWARF compilation unit header. */
-#define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3)
+#define DWARF_COMPILE_UNIT_HEADER_SIZE \
+ (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
/* Fixed size portion of public names info. */
#define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
@@ -3752,6 +3768,8 @@ static dw_die_ref modified_type_die PARAMS ((tree, int, int, dw_die_ref));
static int type_is_enum PARAMS ((tree));
static unsigned int reg_number PARAMS ((rtx));
static dw_loc_descr_ref reg_loc_descriptor PARAMS ((rtx));
+static dw_loc_descr_ref one_reg_loc_descriptor PARAMS ((unsigned int));
+static dw_loc_descr_ref multiple_reg_loc_descriptor PARAMS ((rtx, rtx));
static dw_loc_descr_ref int_loc_descriptor PARAMS ((HOST_WIDE_INT));
static dw_loc_descr_ref based_loc_descr PARAMS ((unsigned, long));
static int is_based_loc PARAMS ((rtx));
@@ -6349,7 +6367,10 @@ size_of_die (die)
size += 1;
break;
case dw_val_class_die_ref:
- size += DWARF_OFFSET_SIZE;
+ if (AT_ref_external (a))
+ size += DWARF2_ADDR_SIZE;
+ else
+ size += DWARF_OFFSET_SIZE;
break;
case dw_val_class_fde_ref:
size += DWARF_OFFSET_SIZE;
@@ -6909,7 +6930,11 @@ output_die (die)
static void
output_compilation_unit_header ()
{
- dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset - DWARF_OFFSET_SIZE,
+ if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
+ dw2_asm_output_data (4, 0xffffffff,
+ "Initial length escape value indicating 64-bit DWARF extension");
+ dw2_asm_output_data (DWARF_OFFSET_SIZE,
+ next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
"Length of Compilation Unit Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
@@ -7020,6 +7045,9 @@ output_pubnames ()
unsigned i;
unsigned long pubnames_length = size_of_pubnames ();
+ if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
+ dw2_asm_output_data (4, 0xffffffff,
+ "Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
"Length of Public Names Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
@@ -7078,6 +7106,9 @@ output_aranges ()
unsigned i;
unsigned long aranges_length = size_of_aranges ();
+ if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
+ dw2_asm_output_data (4, 0xffffffff,
+ "Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
"Length of Address Ranges Info");
dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
@@ -7484,7 +7515,7 @@ output_file_names ()
int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
- "File Entry: 0x%x", i);
+ "File Entry: 0x%lx", (unsigned long) i);
/* Include directory index. */
dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
@@ -7523,6 +7554,9 @@ output_line_info ()
ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
+ if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
+ dw2_asm_output_data (4, 0xffffffff,
+ "Initial length escape value indicating 64-bit DWARF extension");
dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
"Length of Source Line Info");
ASM_OUTPUT_LABEL (asm_out_file, l1);
@@ -8157,24 +8191,90 @@ reg_number (rtl)
}
/* Return a location descriptor that designates a machine register or
- zero if there is no such. */
+ zero if there is none. */
static dw_loc_descr_ref
reg_loc_descriptor (rtl)
rtx rtl;
{
- dw_loc_descr_ref loc_result = NULL;
unsigned reg;
+ rtx regs;
if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
return 0;
reg = reg_number (rtl);
- if (reg <= 31)
- loc_result = new_loc_descr (DW_OP_reg0 + reg, 0, 0);
+ regs = (*targetm.dwarf_register_span) (rtl);
+
+ if (HARD_REGNO_NREGS (reg, GET_MODE (rtl)) > 1
+ || regs)
+ return multiple_reg_loc_descriptor (rtl, regs);
else
- loc_result = new_loc_descr (DW_OP_regx, reg, 0);
+ return one_reg_loc_descriptor (reg);
+}
+
+/* Return a location descriptor that designates a machine register for
+ a given hard register number. */
+static dw_loc_descr_ref
+one_reg_loc_descriptor (regno)
+ unsigned int regno;
+{
+ if (regno <= 31)
+ return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
+ else
+ return new_loc_descr (DW_OP_regx, regno, 0);
+}
+
+/* Given an RTL of a register, return a location descriptor that
+ designates a value that spans more than one register. */
+
+static dw_loc_descr_ref
+multiple_reg_loc_descriptor (rtl, regs)
+ rtx rtl, regs;
+{
+ int nregs, size, i;
+ unsigned reg;
+ dw_loc_descr_ref loc_result = NULL;
+
+ reg = reg_number (rtl);
+ nregs = HARD_REGNO_NREGS (reg, GET_MODE (rtl));
+
+ /* Simple, contiguous registers. */
+ if (regs == NULL_RTX)
+ {
+ size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
+
+ loc_result = NULL;
+ while (nregs--)
+ {
+ dw_loc_descr_ref t;
+
+ t = one_reg_loc_descriptor (reg);
+ add_loc_descr (&loc_result, t);
+ add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
+ ++reg;
+ }
+ return loc_result;
+ }
+
+ /* Now onto stupid register sets in non contiguous locations. */
+
+ if (GET_CODE (regs) != PARALLEL)
+ abort ();
+
+ size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
+ loc_result = NULL;
+
+ for (i = 0; i < XVECLEN (regs, 0); ++i)
+ {
+ dw_loc_descr_ref t;
+
+ t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
+ add_loc_descr (&loc_result, t);
+ size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
+ add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
+ }
return loc_result;
}
@@ -8328,6 +8428,11 @@ mem_loc_descriptor (rtl, mode)
add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
break;
+ case LO_SUM:
+ rtl = XEXP (rtl, 1);
+
+ /* ... fall through ... */
+
case LABEL_REF:
/* Some ports can transform a symbol ref into a label ref, because
the symbol ref is too far away and has to be dumped into a constant
@@ -9372,13 +9477,17 @@ rtl_for_decl_location (decl)
rtl = DECL_RTL_IF_SET (decl);
/* When generating abstract instances, ignore everything except
- constants and symbols living in memory. */
+ constants, symbols living in memory, and symbols living in
+ fixed registers. */
if (! reload_completed)
{
if (rtl
&& (CONSTANT_P (rtl)
|| (GET_CODE (rtl) == MEM
- && CONSTANT_P (XEXP (rtl, 0)))))
+ && CONSTANT_P (XEXP (rtl, 0)))
+ || (GET_CODE (rtl) == REG
+ && TREE_CODE (decl) == VAR_DECL
+ && TREE_STATIC (decl))))
{
rtl = (*targetm.delegitimize_address) (rtl);
return rtl;
@@ -11947,6 +12056,10 @@ decls_for_scope (stmt, context_die, depth)
gen_decl_die (decl, context_die);
}
+ /* If we're at -g1, we're not interested in subblocks. */
+ if (debug_info_level <= DINFO_LEVEL_TERSE)
+ return;
+
/* Output the DIEs to represent all sub-blocks (and the items declared
therein) of this block. */
for (subblocks = BLOCK_SUBBLOCKS (stmt);
@@ -12127,6 +12240,9 @@ gen_decl_die (decl, context_die)
break;
default:
+ if ((int)TREE_CODE (decl) > NUM_TREE_CODES)
+ /* Probably some frontend-internal decl. Assume we don't care. */
+ break;
abort ();
}
}
@@ -12223,7 +12339,9 @@ dwarf2out_decl (decl)
/* If we're a nested function, initially use a parent of NULL; if we're
a plain function, this will be fixed up in decls_for_scope. If
we're a method, it will be ignored, since we already have a DIE. */
- if (decl_function_context (decl))
+ if (decl_function_context (decl)
+ /* But if we're in terse mode, we don't care about scope. */
+ && debug_info_level > DINFO_LEVEL_TERSE)
context_die = NULL;
break;
@@ -12423,7 +12541,8 @@ dwarf2out_source_line (line, filename)
unsigned int line;
const char *filename;
{
- if (debug_info_level >= DINFO_LEVEL_NORMAL)
+ if (debug_info_level >= DINFO_LEVEL_NORMAL
+ && line != 0)
{
function_section (current_function_decl);
@@ -12692,7 +12811,7 @@ output_indirect_string (h, v)
/* Clear the marks for a die and its children.
- Be cool if the mark isn't set. */
+ Be cool if the mark isn't set. */
static void
prune_unmark_dies (die)
@@ -12766,7 +12885,7 @@ prune_unused_types_mark (die, dokids)
for (c = die->die_child; c; c = c->die_sib)
{
/* If this is an array type, we need to make sure our
- kids get marked, even if they're types. */
+ kids get marked, even if they're types. */
if (die->die_tag == DW_TAG_array_type)
prune_unused_types_mark (c, 1);
else
@@ -12878,14 +12997,10 @@ prune_unused_types ()
/* Also set the mark on nodes referenced from the
pubname_table or arange_table. */
- for (i=0; i < pubname_table_in_use; i++)
- {
- prune_unused_types_mark (pubname_table[i].die, 1);
- }
- for (i=0; i < arange_table_in_use; i++)
- {
- prune_unused_types_mark (arange_table[i], 1);
- }
+ for (i = 0; i < pubname_table_in_use; i++)
+ prune_unused_types_mark (pubname_table[i].die, 1);
+ for (i = 0; i < arange_table_in_use; i++)
+ prune_unused_types_mark (arange_table[i], 1);
/* Get rid of nodes that aren't marked. */
prune_unused_types_prune (comp_unit_die);
@@ -12939,8 +13054,6 @@ dwarf2out_finish (input_filename)
dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
tree context;
- context = NULL_TREE; /* [GIMPLE] Avoid uninitialized use warning. */
-
if (origin)
add_child_die (origin->die_parent, die);
else if (die == comp_unit_die)
@@ -12989,14 +13102,14 @@ dwarf2out_finish (input_filename)
we'll see the end of an include file before the beginning. */
reverse_all_dies (comp_unit_die);
+ if (flag_eliminate_unused_debug_types)
+ prune_unused_types ();
+
/* Generate separate CUs for each of the include files we've seen.
They will go into limbo_die_list. */
if (flag_eliminate_dwarf2_dups)
break_out_includes (comp_unit_die);
- if (flag_eliminate_unused_debug_types)
- prune_unused_types ();
-
/* Traverse the DIE's and add add sibling attributes to those DIE's
that have children. */
add_sibling_attributes (comp_unit_die);
diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c
index 3e74fe4712e..50ab06bd6b2 100644
--- a/gcc/dwarfout.c
+++ b/gcc/dwarfout.c
@@ -1294,7 +1294,8 @@ const struct gcc_debug_hooks dwarf_debug_hooks =
dwarfout_global_decl,
dwarfout_deferred_inline_function,
debug_nothing_tree, /* outlining_inline_function */
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ debug_nothing_int /* handle_pch */
};
/************************ general utility functions **************************/
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 28c75ee2896..96903a3148c 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -111,6 +111,8 @@ REAL_VALUE_TYPE dconst0;
REAL_VALUE_TYPE dconst1;
REAL_VALUE_TYPE dconst2;
REAL_VALUE_TYPE dconstm1;
+REAL_VALUE_TYPE dconstm2;
+REAL_VALUE_TYPE dconsthalf;
/* All references to the following fixed hard registers go through
these unique rtl objects. On machines where the frame-pointer and
@@ -310,13 +312,14 @@ get_mem_attrs (alias, expr, offset, size, align, mode)
mem_attrs attrs;
void **slot;
- /* If everything is the default, we can just return zero. */
+ /* If everything is the default, we can just return zero.
+ This must match what the corresponding MEM_* macros return when the
+ field is not present. */
if (alias == 0 && expr == 0 && offset == 0
&& (size == 0
|| (mode != BLKmode && GET_MODE_SIZE (mode) == INTVAL (size)))
- && (align == BITS_PER_UNIT
- || (STRICT_ALIGNMENT
- && mode != BLKmode && align == GET_MODE_ALIGNMENT (mode))))
+ && (STRICT_ALIGNMENT && mode != BLKmode
+ ? align == GET_MODE_ALIGNMENT (mode) : align == BITS_PER_UNIT))
return 0;
attrs.alias = alias;
@@ -1371,6 +1374,13 @@ gen_lowpart (mode, x)
{
/* The only additional case we can do is MEM. */
int offset = 0;
+
+ /* The following exposes the use of "x" to CSE. */
+ if (GET_MODE_SIZE (GET_MODE (x)) <= UNITS_PER_WORD
+ && SCALAR_INT_MODE_P (GET_MODE (x))
+ && ! no_new_pseudos)
+ return gen_lowpart (mode, force_reg (GET_MODE (x), x));
+
if (WORDS_BIG_ENDIAN)
offset = (MAX (GET_MODE_SIZE (GET_MODE (x)), UNITS_PER_WORD)
- MAX (GET_MODE_SIZE (mode), UNITS_PER_WORD));
@@ -1420,7 +1430,7 @@ gen_highpart (mode, x)
return result;
}
-/* Like gen_highpart_mode, but accept mode of EXP operand in case EXP can
+/* Like gen_highpart, but accept mode of EXP operand in case EXP can
be VOIDmode constant. */
rtx
gen_highpart_mode (outermode, innermode, exp)
@@ -3368,6 +3378,8 @@ try_split (pat, trial, last)
rtx tem;
rtx note, seq;
int probability;
+ rtx insn_last, insn;
+ int njumps = 0;
if (any_condjump_p (trial)
&& (note = find_reg_note (trial, REG_BR_PROB, 0)))
@@ -3386,172 +3398,147 @@ try_split (pat, trial, last)
after = NEXT_INSN (after);
}
- if (seq)
+ if (!seq)
+ return trial;
+
+ /* Avoid infinite loop if any insn of the result matches
+ the original pattern. */
+ insn_last = seq;
+ while (1)
{
- /* Sometimes there will be only one insn in that list, this case will
- normally arise only when we want it in turn to be split (SFmode on
- the 29k is an example). */
- if (NEXT_INSN (seq) != NULL_RTX)
- {
- rtx insn_last, insn;
- int njumps = 0;
+ if (INSN_P (insn_last)
+ && rtx_equal_p (PATTERN (insn_last), pat))
+ return trial;
+ if (!NEXT_INSN (insn_last))
+ break;
+ insn_last = NEXT_INSN (insn_last);
+ }
- /* Avoid infinite loop if any insn of the result matches
- the original pattern. */
- insn_last = seq;
- while (1)
+ /* Mark labels. */
+ for (insn = insn_last; insn ; insn = PREV_INSN (insn))
+ {
+ if (GET_CODE (insn) == JUMP_INSN)
+ {
+ mark_jump_label (PATTERN (insn), insn, 0);
+ njumps++;
+ if (probability != -1
+ && any_condjump_p (insn)
+ && !find_reg_note (insn, REG_BR_PROB, 0))
{
- if (INSN_P (insn_last)
- && rtx_equal_p (PATTERN (insn_last), pat))
- return trial;
- if (NEXT_INSN (insn_last) == NULL_RTX)
- break;
- insn_last = NEXT_INSN (insn_last);
+ /* We can preserve the REG_BR_PROB notes only if exactly
+ one jump is created, otherwise the machine description
+ is responsible for this step using
+ split_branch_probability variable. */
+ if (njumps != 1)
+ abort ();
+ REG_NOTES (insn)
+ = gen_rtx_EXPR_LIST (REG_BR_PROB,
+ GEN_INT (probability),
+ REG_NOTES (insn));
}
+ }
+ }
+
+ /* If we are splitting a CALL_INSN, look for the CALL_INSN
+ in SEQ and copy our CALL_INSN_FUNCTION_USAGE to it. */
+ if (GET_CODE (trial) == CALL_INSN)
+ {
+ for (insn = insn_last; insn ; insn = PREV_INSN (insn))
+ if (GET_CODE (insn) == CALL_INSN)
+ {
+ CALL_INSN_FUNCTION_USAGE (insn)
+ = CALL_INSN_FUNCTION_USAGE (trial);
+ SIBLING_CALL_P (insn) = SIBLING_CALL_P (trial);
+ }
+ }
- /* Mark labels. */
+ /* Copy notes, particularly those related to the CFG. */
+ for (note = REG_NOTES (trial); note; note = XEXP (note, 1))
+ {
+ switch (REG_NOTE_KIND (note))
+ {
+ case REG_EH_REGION:
insn = insn_last;
while (insn != NULL_RTX)
{
- if (GET_CODE (insn) == JUMP_INSN)
- {
- mark_jump_label (PATTERN (insn), insn, 0);
- njumps++;
- if (probability != -1
- && any_condjump_p (insn)
- && !find_reg_note (insn, REG_BR_PROB, 0))
- {
- /* We can preserve the REG_BR_PROB notes only if exactly
- one jump is created, otherwise the machine description
- is responsible for this step using
- split_branch_probability variable. */
- if (njumps != 1)
- abort ();
- REG_NOTES (insn)
- = gen_rtx_EXPR_LIST (REG_BR_PROB,
- GEN_INT (probability),
- REG_NOTES (insn));
- }
- }
-
+ if (GET_CODE (insn) == CALL_INSN
+ || (flag_non_call_exceptions
+ && may_trap_p (PATTERN (insn))))
+ REG_NOTES (insn)
+ = gen_rtx_EXPR_LIST (REG_EH_REGION,
+ XEXP (note, 0),
+ REG_NOTES (insn));
insn = PREV_INSN (insn);
}
+ break;
- /* If we are splitting a CALL_INSN, look for the CALL_INSN
- in SEQ and copy our CALL_INSN_FUNCTION_USAGE to it. */
- if (GET_CODE (trial) == CALL_INSN)
+ case REG_NORETURN:
+ case REG_SETJMP:
+ case REG_ALWAYS_RETURN:
+ insn = insn_last;
+ while (insn != NULL_RTX)
{
- insn = insn_last;
- while (insn != NULL_RTX)
- {
- if (GET_CODE (insn) == CALL_INSN)
- CALL_INSN_FUNCTION_USAGE (insn)
- = CALL_INSN_FUNCTION_USAGE (trial);
-
- insn = PREV_INSN (insn);
- }
+ if (GET_CODE (insn) == CALL_INSN)
+ REG_NOTES (insn)
+ = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
+ XEXP (note, 0),
+ REG_NOTES (insn));
+ insn = PREV_INSN (insn);
}
+ break;
- /* Copy notes, particularly those related to the CFG. */
- for (note = REG_NOTES (trial); note; note = XEXP (note, 1))
+ case REG_NON_LOCAL_GOTO:
+ insn = insn_last;
+ while (insn != NULL_RTX)
{
- switch (REG_NOTE_KIND (note))
- {
- case REG_EH_REGION:
- insn = insn_last;
- while (insn != NULL_RTX)
- {
- if (GET_CODE (insn) == CALL_INSN
- || (flag_non_call_exceptions
- && may_trap_p (PATTERN (insn))))
- REG_NOTES (insn)
- = gen_rtx_EXPR_LIST (REG_EH_REGION,
- XEXP (note, 0),
- REG_NOTES (insn));
- insn = PREV_INSN (insn);
- }
- break;
-
- case REG_NORETURN:
- case REG_SETJMP:
- case REG_ALWAYS_RETURN:
- insn = insn_last;
- while (insn != NULL_RTX)
- {
- if (GET_CODE (insn) == CALL_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)
- {
- if (GET_CODE (insn) == JUMP_INSN)
- REG_NOTES (insn)
- = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
- XEXP (note, 0),
- REG_NOTES (insn));
- insn = PREV_INSN (insn);
- }
- break;
-
- default:
- break;
- }
+ if (GET_CODE (insn) == JUMP_INSN)
+ REG_NOTES (insn)
+ = gen_rtx_EXPR_LIST (REG_NOTE_KIND (note),
+ XEXP (note, 0),
+ REG_NOTES (insn));
+ insn = PREV_INSN (insn);
}
+ break;
- /* If there are LABELS inside the split insns increment the
- usage count so we don't delete the label. */
- if (GET_CODE (trial) == INSN)
- {
- insn = insn_last;
- while (insn != NULL_RTX)
- {
- if (GET_CODE (insn) == INSN)
- mark_label_nuses (PATTERN (insn));
+ default:
+ break;
+ }
+ }
- insn = PREV_INSN (insn);
- }
- }
+ /* If there are LABELS inside the split insns increment the
+ usage count so we don't delete the label. */
+ if (GET_CODE (trial) == INSN)
+ {
+ insn = insn_last;
+ while (insn != NULL_RTX)
+ {
+ if (GET_CODE (insn) == INSN)
+ mark_label_nuses (PATTERN (insn));
- tem = emit_insn_after_scope (seq, trial, INSN_SCOPE (trial));
+ insn = PREV_INSN (insn);
+ }
+ }
- delete_insn (trial);
- if (has_barrier)
- emit_barrier_after (tem);
+ tem = emit_insn_after_scope (seq, trial, INSN_SCOPE (trial));
- /* Recursively call try_split for each new insn created; by the
- time control returns here that insn will be fully split, so
- set LAST and continue from the insn after the one returned.
- We can't use next_active_insn here since AFTER may be a note.
- Ignore deleted insns, which can be occur if not optimizing. */
- for (tem = NEXT_INSN (before); tem != after; tem = NEXT_INSN (tem))
- if (! INSN_DELETED_P (tem) && INSN_P (tem))
- tem = try_split (PATTERN (tem), tem, 1);
- }
- /* Avoid infinite loop if the result matches the original pattern. */
- else if (rtx_equal_p (PATTERN (seq), pat))
- return trial;
- else
- {
- PATTERN (trial) = PATTERN (seq);
- INSN_CODE (trial) = -1;
- try_split (PATTERN (trial), trial, last);
- }
+ delete_insn (trial);
+ if (has_barrier)
+ emit_barrier_after (tem);
- /* Return either the first or the last insn, depending on which was
- requested. */
- return last
- ? (after ? PREV_INSN (after) : last_insn)
- : NEXT_INSN (before);
- }
+ /* Recursively call try_split for each new insn created; by the
+ time control returns here that insn will be fully split, so
+ set LAST and continue from the insn after the one returned.
+ We can't use next_active_insn here since AFTER may be a note.
+ Ignore deleted insns, which can be occur if not optimizing. */
+ for (tem = NEXT_INSN (before); tem != after; tem = NEXT_INSN (tem))
+ if (! INSN_DELETED_P (tem) && INSN_P (tem))
+ tem = try_split (PATTERN (tem), tem, 1);
- return trial;
+ /* Return either the first or the last insn, depending on which was
+ requested. */
+ return last
+ ? (after ? PREV_INSN (after) : last_insn)
+ : NEXT_INSN (before);
}
/* Make and return an INSN rtx, initializing all its slots.
@@ -5568,6 +5555,10 @@ init_emit_once (line_numbers)
REAL_VALUE_FROM_INT (dconst1, 1, 0, double_mode);
REAL_VALUE_FROM_INT (dconst2, 2, 0, double_mode);
REAL_VALUE_FROM_INT (dconstm1, -1, -1, double_mode);
+ REAL_VALUE_FROM_INT (dconstm2, -2, -1, double_mode);
+
+ dconsthalf = dconst1;
+ dconsthalf.exp--;
for (i = 0; i <= 2; i++)
{
diff --git a/gcc/except.c b/gcc/except.c
index f89701d02c5..f57e39410a6 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -186,6 +186,7 @@ struct eh_region GTY(())
we can match up fixup regions. */
struct eh_region_u_cleanup {
tree exp;
+ struct eh_region *prev_try;
} GTY ((tag ("ERT_CLEANUP"))) cleanup;
/* The real region (by expression and by pointer) that fixup code
@@ -586,6 +587,7 @@ expand_eh_region_end_cleanup (handler)
region->type = ERT_CLEANUP;
region->label = gen_label_rtx ();
region->u.cleanup.exp = handler;
+ region->u.cleanup.prev_try = cfun->eh->try_region;
around_label = gen_label_rtx ();
emit_jump (around_label);
@@ -1142,21 +1144,40 @@ convert_from_eh_region_ranges_1 (pinsns, orig_sp, cur)
}
else if (INSN_P (insn))
{
- if (cur > 0
- && ! find_reg_note (insn, REG_EH_REGION, NULL_RTX)
- /* Calls can always potentially throw exceptions, unless
- they have a REG_EH_REGION note with a value of 0 or less.
- Which should be the only possible kind so far. */
- && (GET_CODE (insn) == CALL_INSN
- /* If we wanted exceptions for non-call insns, then
- any may_trap_p instruction could throw. */
- || (flag_non_call_exceptions
- && GET_CODE (PATTERN (insn)) != CLOBBER
- && GET_CODE (PATTERN (insn)) != USE
- && may_trap_p (PATTERN (insn)))))
+ rtx note;
+ switch (cur)
{
- REG_NOTES (insn) = alloc_EXPR_LIST (REG_EH_REGION, GEN_INT (cur),
+ default:
+ /* An existing region note may be present to suppress
+ exception handling. Anything with a note value of -1
+ cannot throw an exception of any kind. A note value
+ of 0 means that "normal" exceptions are suppressed,
+ but not necessarily "forced unwind" exceptions. */
+ note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+ if (note)
+ {
+ if (flag_forced_unwind_exceptions
+ && INTVAL (XEXP (note, 0)) >= 0)
+ XEXP (note, 0) = GEN_INT (cur);
+ break;
+ }
+
+ /* Calls can always potentially throw exceptions; if we wanted
+ exceptions for non-call insns, then any may_trap_p
+ instruction can throw. */
+ if (GET_CODE (insn) != CALL_INSN
+ && (!flag_non_call_exceptions
+ || GET_CODE (PATTERN (insn)) == CLOBBER
+ || GET_CODE (PATTERN (insn)) == USE
+ || !may_trap_p (PATTERN (insn))))
+ break;
+
+ REG_NOTES (insn) = alloc_EXPR_LIST (REG_EH_REGION,
+ GEN_INT (cur),
REG_NOTES (insn));
+
+ case 0:
+ break;
}
if (GET_CODE (insn) == CALL_INSN
@@ -1714,9 +1735,15 @@ build_post_landing_pads ()
struct eh_region *c;
for (c = region->u.try.catch; c ; c = c->u.catch.next_catch)
{
- /* ??? _Unwind_ForcedUnwind wants no match here. */
if (c->u.catch.type_list == NULL)
- emit_jump (c->label);
+ {
+ if (flag_forced_unwind_exceptions)
+ emit_cmp_and_jump_insns
+ (cfun->eh->filter, const0_rtx, GT, NULL_RTX,
+ word_mode, 0, c->label);
+ else
+ emit_jump (c->label);
+ }
else
{
/* Need for one cmp/jump per type caught. Each type
@@ -1777,10 +1804,35 @@ build_post_landing_pads ()
break;
case ERT_CLEANUP:
- case ERT_MUST_NOT_THROW:
region->post_landing_pad = region->label;
break;
+ case ERT_MUST_NOT_THROW:
+ /* See maybe_remove_eh_handler about removing region->label. */
+ if (flag_forced_unwind_exceptions && region->label)
+ {
+ region->post_landing_pad = gen_label_rtx ();
+
+ start_sequence ();
+
+ emit_label (region->post_landing_pad);
+ emit_cmp_and_jump_insns (cfun->eh->filter, const0_rtx, GT,
+ NULL_RTX, word_mode, 0, region->label);
+
+ region->resume
+ = emit_jump_insn (gen_rtx_RESX (VOIDmode,
+ region->region_number));
+ emit_barrier ();
+
+ seq = get_insns ();
+ end_sequence ();
+
+ emit_insn_before (seq, region->label);
+ }
+ else
+ region->post_landing_pad = region->label;
+ break;
+
case ERT_CATCH:
case ERT_THROW:
/* Nothing to do. */
@@ -1958,6 +2010,21 @@ sjlj_find_directly_reachable_regions (lp_info)
if (rc != RNL_NOT_CAUGHT)
break;
}
+
+ /* Forced unwind exceptions aren't blocked. */
+ if (flag_forced_unwind_exceptions && rc == RNL_BLOCKED)
+ {
+ struct eh_region *r;
+ for (r = region->outer; r ; r = r->outer)
+ if (r->type == ERT_CLEANUP)
+ {
+ rc = RNL_MAYBE_CAUGHT;
+ if (! region->label)
+ region = r;
+ break;
+ }
+ }
+
if (rc == RNL_MAYBE_CAUGHT || rc == RNL_CAUGHT)
{
lp_info[region->region_number].directly_reachable = 1;
@@ -2612,8 +2679,6 @@ reachable_next_level (region, type_thrown, info)
for (c = region->u.try.catch; c ; c = c->u.catch.next_catch)
{
/* A catch-all handler ends the search. */
- /* ??? _Unwind_ForcedUnwind will want outer cleanups
- to be run as well. */
if (c->u.catch.type_list == NULL)
{
add_reachable_handler (info, region, c);
@@ -2795,10 +2860,34 @@ reachable_handlers (insn)
region = region->outer;
}
- for (; region; region = region->outer)
- if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)
- break;
+ while (region)
+ {
+ if (reachable_next_level (region, type_thrown, &info) >= RNL_CAUGHT)
+ {
+ /* Forced unwind exceptions are neither BLOCKED nor CAUGHT.
+ Make sure the cleanup regions are reachable. */
+ if (flag_forced_unwind_exceptions)
+ {
+ while ((region = region->outer) != NULL)
+ if (region->type == ERT_CLEANUP)
+ {
+ add_reachable_handler (&info, region, region);
+ break;
+ }
+ }
+ break;
+ }
+ /* If we have processed one cleanup, there is no point in
+ processing any more of them. Each cleanup will have an edge
+ to the next outer cleanup region, so the flow graph will be
+ accurate. */
+ if (region->type == ERT_CLEANUP)
+ region = region->u.cleanup.prev_try;
+ else
+ region = region->outer;
+ }
+
return info.handlers;
}
@@ -2910,6 +2999,10 @@ can_throw_external (insn)
if (INTVAL (XEXP (note, 0)) <= 0)
return false;
+ /* Forced unwind excptions are not catchable. */
+ if (flag_forced_unwind_exceptions && GET_CODE (insn) == CALL_INSN)
+ return true;
+
region = cfun->eh->region_array[INTVAL (XEXP (note, 0))];
type_thrown = NULL_TREE;
@@ -3264,12 +3357,26 @@ collect_one_action_chain (ar_hash, region)
{
if (c->u.catch.type_list == NULL)
{
+ int filter;
+
+ /* Forced exceptions run cleanups, always. Record them if
+ they exist. */
+ next = 0;
+ if (flag_forced_unwind_exceptions)
+ {
+ struct eh_region *r;
+ for (r = c->outer; r ; r = r->outer)
+ if (r->type == ERT_CLEANUP)
+ {
+ next = add_action_record (ar_hash, 0, 0);
+ break;
+ }
+ }
+
/* Retrieve the filter from the head of the filter list
where we have stored it (see assign_filter_values). */
- int filter
- = TREE_INT_CST_LOW (TREE_VALUE (c->u.catch.filter_list));
-
- next = add_action_record (ar_hash, filter, 0);
+ filter = TREE_INT_CST_LOW (TREE_VALUE (c->u.catch.filter_list));
+ next = add_action_record (ar_hash, filter, next);
}
else
{
@@ -3314,6 +3421,13 @@ collect_one_action_chain (ar_hash, region)
requires no call-site entry. Note that this differs from
the no handler or cleanup case in that we do require an lsda
to be generated. Return a magic -2 value to record this. */
+ if (flag_forced_unwind_exceptions)
+ {
+ struct eh_region *r;
+ for (r = region->outer; r ; r = r->outer)
+ if (r->type == ERT_CLEANUP)
+ return 0;
+ }
return -2;
case ERT_CATCH:
diff --git a/gcc/except.h b/gcc/except.h
index 3fc6d3a57b4..01c6f2395c3 100644
--- a/gcc/except.h
+++ b/gcc/except.h
@@ -21,11 +21,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-#ifndef GCC_VARRAY_H
-struct varray_head_tag;
-#define varray_type struct varray_head_tag *
-#endif
-
struct function;
struct inline_remap;
@@ -142,10 +137,6 @@ extern int (*lang_eh_type_covers) PARAMS ((tree a, tree b));
/* Map a type to a runtime object to match type. */
extern tree (*lang_eh_runtime_type) PARAMS ((tree));
-#ifndef GCC_VARRAY_H
-#undef varray_type
-#endif
-
/* Just because the user configured --with-sjlj-exceptions=no doesn't
mean that we can use call frame exceptions. Detect that the target
diff --git a/gcc/explow.c b/gcc/explow.c
index fb133687c4a..50556e8d6bf 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1365,7 +1365,7 @@ allocate_dynamic_stack_space (size, target, known_align)
pred = insn_data[(int) CODE_FOR_allocate_stack].operand[1].predicate;
if (pred && ! ((*pred) (size, mode)))
- size = copy_to_mode_reg (mode, size);
+ size = copy_to_mode_reg (mode, convert_to_mode (mode, size, 1));
emit_insn (gen_allocate_stack (target, size));
}
diff --git a/gcc/expr.c b/gcc/expr.c
index 28d0c3a6cea..16be53537ea 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -95,7 +95,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
int cse_not_expected;
/* Chain of pending expressions for PLACEHOLDER_EXPR to replace. */
-static tree placeholder_list = 0;
+tree placeholder_list = 0;
/* This structure is used by move_by_pieces to describe the move to
be performed. */
@@ -155,7 +155,7 @@ static rtx clear_storage_via_libcall PARAMS ((rtx, rtx));
static tree clear_storage_libcall_fn PARAMS ((int));
static rtx compress_float_constant PARAMS ((rtx, rtx));
static rtx get_subtarget PARAMS ((rtx));
-static int is_zeros_p PARAMS ((tree));
+static int is_zeros_p PARAMS ((tree));
static int mostly_zeros_p PARAMS ((tree));
static void store_constructor_field PARAMS ((rtx, unsigned HOST_WIDE_INT,
HOST_WIDE_INT, enum machine_mode,
@@ -170,15 +170,12 @@ static HOST_WIDE_INT highest_pow2_factor PARAMS ((tree));
static HOST_WIDE_INT highest_pow2_factor_for_type PARAMS ((tree, tree));
static int is_aligning_offset PARAMS ((tree, tree));
static rtx expand_increment PARAMS ((tree, int, int));
-static void do_jump_by_parts_greater PARAMS ((tree, int, rtx, rtx));
-static void do_jump_by_parts_equality PARAMS ((tree, rtx, rtx));
-static void do_compare_and_jump PARAMS ((tree, enum rtx_code, enum rtx_code,
- rtx, rtx));
static rtx do_store_flag PARAMS ((tree, rtx, enum machine_mode, int));
#ifdef PUSH_ROUNDING
static void emit_single_push_insn PARAMS ((enum machine_mode, rtx, tree));
#endif
static void do_tablejump PARAMS ((rtx, enum machine_mode, rtx, rtx, rtx));
+static rtx const_vector_from_tree PARAMS ((tree));
/* Record for each mode whether we can move a register directly to or
from an object of that mode in memory. If we can't, we won't try
@@ -1406,6 +1403,8 @@ convert_modes (mode, oldmode, x, unsignedp)
&& ((GET_CODE (x) == MEM && ! MEM_VOLATILE_P (x)
&& direct_load[(int) mode])
|| (GET_CODE (x) == REG
+ && (! HARD_REGISTER_P (x)
+ || HARD_REGNO_MODE_OK (REGNO (x), mode))
&& TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode),
GET_MODE_BITSIZE (GET_MODE (x)))))))))
{
@@ -3382,6 +3381,61 @@ emit_move_insn_1 (x, y)
return get_last_insn ();
}
+ /* Handle MODE_CC modes: If we don't have a special move insn for this mode,
+ find a mode to do it in. If we have a movcc, use it. Otherwise,
+ find the MODE_INT mode of the same width. */
+ else if (GET_MODE_CLASS (mode) == MODE_CC
+ && mov_optab->handlers[(int) mode].insn_code == CODE_FOR_nothing)
+ {
+ enum insn_code insn_code;
+ enum machine_mode tmode = VOIDmode;
+ rtx x1 = x, y1 = y;
+
+ if (mode != CCmode
+ && mov_optab->handlers[(int) CCmode].insn_code != CODE_FOR_nothing)
+ tmode = CCmode;
+ else
+ for (tmode = QImode; tmode != VOIDmode;
+ tmode = GET_MODE_WIDER_MODE (tmode))
+ if (GET_MODE_SIZE (tmode) == GET_MODE_SIZE (mode))
+ break;
+
+ if (tmode == VOIDmode)
+ abort ();
+
+ /* Get X and Y in TMODE. We can't use gen_lowpart here because it
+ may call change_address which is not appropriate if we were
+ called when a reload was in progress. We don't have to worry
+ about changing the address since the size in bytes is supposed to
+ be the same. Copy the MEM to change the mode and move any
+ substitutions from the old MEM to the new one. */
+
+ if (reload_in_progress)
+ {
+ x = gen_lowpart_common (tmode, x1);
+ if (x == 0 && GET_CODE (x1) == MEM)
+ {
+ x = adjust_address_nv (x1, tmode, 0);
+ copy_replacements (x1, x);
+ }
+
+ y = gen_lowpart_common (tmode, y1);
+ if (y == 0 && GET_CODE (y1) == MEM)
+ {
+ y = adjust_address_nv (y1, tmode, 0);
+ copy_replacements (y1, y);
+ }
+ }
+ else
+ {
+ x = gen_lowpart (tmode, x);
+ y = gen_lowpart (tmode, y);
+ }
+
+ insn_code = mov_optab->handlers[(int) tmode].insn_code;
+ return emit_insn (GEN_FCN (insn_code) (x, y));
+ }
+
/* This will handle any multi-word or full-word mode that lacks a move_insn
pattern. However, you will get better code if you define such patterns,
even if they must turn into multiple assembler instructions. */
@@ -4297,6 +4351,16 @@ store_expr (exp, target, want_value)
int dont_return_target = 0;
int dont_store_target = 0;
+ if (VOID_TYPE_P (TREE_TYPE (exp)))
+ {
+ /* C++ can generate ?: expressions with a throw expression in one
+ branch and an rvalue in the other. Here, we resolve attempts to
+ store the throw expression's nonexistant result. */
+ if (want_value)
+ abort ();
+ expand_expr (exp, const0_rtx, VOIDmode, 0);
+ return NULL_RTX;
+ }
if (TREE_CODE (exp) == COMPOUND_EXPR)
{
/* Perform first part of compound expression, then assign from second
@@ -5090,9 +5154,6 @@ store_constructor (exp, target, cleared, size)
HOST_WIDE_INT lo, hi, count;
tree position;
- lo = 0; /* [GIMPLE] Avoid uninitialized use warning. */
- hi = 0; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* If the range is constant and "small", unroll the loop. */
if (const_bounds_p
&& host_integerp (lo_index, 0)
@@ -5332,9 +5393,6 @@ store_constructor (exp, target, cleared, size)
HOST_WIDE_INT startb, endb;
rtx bitlength_rtx, startbit_rtx, endbit_rtx, targetx;
- startb = 0; /* [GIMPLE] Avoid uninitialized use warning. */
- endb = 0; /* [GIMPLE] Avoid uninitialized use warning. */
-
bitlength_rtx = expand_expr (bitlength,
NULL_RTX, MEM, EXPAND_CONST_ADDRESS);
@@ -5446,7 +5504,7 @@ store_field (target, bitsize, bitpos, mode, exp, value_mode, unsignedp, type,
side-effects. */
if (bitsize == 0)
return expand_expr (exp, const0_rtx, VOIDmode, 0);
- else if (bitsize >=0 && bitsize < HOST_BITS_PER_WIDE_INT)
+ else if (bitsize >= 0 && bitsize < HOST_BITS_PER_WIDE_INT)
width_mask = ((HOST_WIDE_INT) 1 << bitsize) - 1;
/* If we are storing into an unaligned field of an aligned union that is
@@ -6475,8 +6533,6 @@ expand_expr (exp, target, tmode, modifier)
int ignore;
tree context;
- op0 = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* Handle ERROR_MARK before anybody tries to access its type. */
if (TREE_CODE (exp) == ERROR_MARK || TREE_CODE (type) == ERROR_MARK)
{
@@ -6830,6 +6886,9 @@ expand_expr (exp, target, tmode, modifier)
return temp;
+ case VECTOR_CST:
+ return const_vector_from_tree (exp);
+
case CONST_DECL:
return expand_expr (DECL_INITIAL (exp), target, VOIDmode, modifier);
@@ -6891,7 +6950,7 @@ expand_expr (exp, target, tmode, modifier)
temp = SAVE_EXPR_RTL (exp);
if (temp && GET_CODE (temp) == REG)
{
- put_var_into_stack (exp);
+ put_var_into_stack (exp, /*rescan=*/true);
temp = SAVE_EXPR_RTL (exp);
}
if (temp == 0 || GET_CODE (temp) != MEM)
@@ -6918,12 +6977,12 @@ expand_expr (exp, target, tmode, modifier)
/* If the mode of TEMP does not match that of the expression, it
must be a promoted value. We pass store_expr a SUBREG of the
wanted mode but mark it so that we know that it was already
- extended. Note that `unsignedp' was modified above in
- this case. */
+ extended. */
if (GET_CODE (temp) == REG && GET_MODE (temp) != mode)
{
temp = gen_lowpart_SUBREG (mode, SAVE_EXPR_RTL (exp));
+ promote_mode (type, mode, &unsignedp, 0);
SUBREG_PROMOTED_VAR_P (temp) = 1;
SUBREG_PROMOTED_UNSIGNED_SET (temp, unsignedp);
}
@@ -7444,7 +7503,8 @@ expand_expr (exp, target, tmode, modifier)
forcing the SAVE_EXPR into memory. */
if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR)
{
- put_var_into_stack (TREE_OPERAND (exp, 0));
+ put_var_into_stack (TREE_OPERAND (exp, 0),
+ /*rescan=*/true);
op0 = SAVE_EXPR_RTL (TREE_OPERAND (exp, 0));
}
else
@@ -9041,7 +9101,7 @@ expand_expr (exp, target, tmode, modifier)
preserve_temp_slots (target);
SET_DECL_RTL (slot, target);
if (TREE_ADDRESSABLE (slot))
- put_var_into_stack (slot);
+ put_var_into_stack (slot, /*rescan=*/false);
/* Since SLOT is not known to the called function
to belong to its stack frame, we must build an explicit
@@ -9080,7 +9140,7 @@ expand_expr (exp, target, tmode, modifier)
/* If we must have an addressable slot, then make sure that
the RTL that we just stored in slot is OK. */
if (TREE_ADDRESSABLE (slot))
- put_var_into_stack (slot);
+ put_var_into_stack (slot, /*rescan=*/true);
}
}
@@ -9230,7 +9290,8 @@ expand_expr (exp, target, tmode, modifier)
forcing the SAVE_EXPR into memory. */
if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR)
{
- put_var_into_stack (TREE_OPERAND (exp, 0));
+ put_var_into_stack (TREE_OPERAND (exp, 0),
+ /*rescan=*/true);
op0 = SAVE_EXPR_RTL (TREE_OPERAND (exp, 0));
}
else
@@ -9283,21 +9344,30 @@ expand_expr (exp, target, tmode, modifier)
&& MEM_ALIGN (op0) < BIGGEST_ALIGNMENT)
{
tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
- rtx new
- = assign_stack_temp_for_type
- (TYPE_MODE (inner_type),
- MEM_SIZE (op0) ? INTVAL (MEM_SIZE (op0))
- : int_size_in_bytes (inner_type),
- 1, build_qualified_type (inner_type,
- (TYPE_QUALS (inner_type)
- | TYPE_QUAL_CONST)));
+ rtx new;
if (TYPE_ALIGN_OK (inner_type))
abort ();
+ if (TREE_ADDRESSABLE (inner_type))
+ {
+ /* We can't make a bitwise copy of this object, so fail. */
+ error ("cannot take the address of an unaligned member");
+ return const0_rtx;
+ }
+
+ new = assign_stack_temp_for_type
+ (TYPE_MODE (inner_type),
+ MEM_SIZE (op0) ? INTVAL (MEM_SIZE (op0))
+ : int_size_in_bytes (inner_type),
+ 1, build_qualified_type (inner_type,
+ (TYPE_QUALS (inner_type)
+ | TYPE_QUAL_CONST)));
+
emit_block_move (new, op0, expr_size (TREE_OPERAND (exp, 0)),
(modifier == EXPAND_STACK_PARM
? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL));
+
op0 = new;
}
@@ -9855,980 +9925,6 @@ expand_increment (exp, post, ignore)
return temp;
}
-/* At the start of a function, record that we have no previously-pushed
- arguments waiting to be popped. */
-
-void
-init_pending_stack_adjust ()
-{
- pending_stack_adjust = 0;
-}
-
-/* When exiting from function, if safe, clear out any pending stack adjust
- so the adjustment won't get done.
-
- Note, if the current function calls alloca, then it must have a
- frame pointer regardless of the value of flag_omit_frame_pointer. */
-
-void
-clear_pending_stack_adjust ()
-{
-#ifdef EXIT_IGNORE_STACK
- if (optimize > 0
- && (! flag_omit_frame_pointer || current_function_calls_alloca)
- && EXIT_IGNORE_STACK
- && ! (DECL_INLINE (current_function_decl) && ! flag_no_inline)
- && ! flag_inline_functions)
- {
- stack_pointer_delta -= pending_stack_adjust,
- pending_stack_adjust = 0;
- }
-#endif
-}
-
-/* Pop any previously-pushed arguments that have not been popped yet. */
-
-void
-do_pending_stack_adjust ()
-{
- if (inhibit_defer_pop == 0)
- {
- if (pending_stack_adjust != 0)
- adjust_stack (GEN_INT (pending_stack_adjust));
- pending_stack_adjust = 0;
- }
-}
-
-/* Expand conditional expressions. */
-
-/* Generate code to evaluate EXP and jump to LABEL if the value is zero.
- LABEL is an rtx of code CODE_LABEL, in this function and all the
- functions here. */
-
-void
-jumpifnot (exp, label)
- tree exp;
- rtx label;
-{
- do_jump (exp, label, NULL_RTX);
-}
-
-/* Generate code to evaluate EXP and jump to LABEL if the value is nonzero. */
-
-void
-jumpif (exp, label)
- tree exp;
- rtx label;
-{
- do_jump (exp, NULL_RTX, label);
-}
-
-/* Generate code to evaluate EXP and jump to IF_FALSE_LABEL if
- the result is zero, or IF_TRUE_LABEL if the result is one.
- Either of IF_FALSE_LABEL and IF_TRUE_LABEL may be zero,
- meaning fall through in that case.
-
- do_jump always does any pending stack adjust except when it does not
- actually perform a jump. An example where there is no jump
- is when EXP is `(foo (), 0)' and IF_FALSE_LABEL is null.
-
- This function is responsible for optimizing cases such as
- &&, || and comparison operators in EXP. */
-
-void
-do_jump (exp, if_false_label, if_true_label)
- tree exp;
- rtx if_false_label, if_true_label;
-{
- enum tree_code code = TREE_CODE (exp);
- /* Some cases need to create a label to jump to
- in order to properly fall through.
- These cases set DROP_THROUGH_LABEL nonzero. */
- rtx drop_through_label = 0;
- rtx temp;
- int i;
- tree type;
- enum machine_mode mode;
-
-#ifdef MAX_INTEGER_COMPUTATION_MODE
- check_max_integer_computation_mode (exp);
-#endif
-
- emit_queue ();
-
- switch (code)
- {
- case ERROR_MARK:
- break;
-
- case INTEGER_CST:
- temp = integer_zerop (exp) ? if_false_label : if_true_label;
- if (temp)
- emit_jump (temp);
- break;
-
-#if 0
- /* This is not true with #pragma weak */
- case ADDR_EXPR:
- /* The address of something can never be zero. */
- if (if_true_label)
- emit_jump (if_true_label);
- break;
-#endif
-
- case NOP_EXPR:
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == COMPONENT_REF
- || TREE_CODE (TREE_OPERAND (exp, 0)) == BIT_FIELD_REF
- || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_REF
- || TREE_CODE (TREE_OPERAND (exp, 0)) == ARRAY_RANGE_REF)
- goto normal;
- case CONVERT_EXPR:
- /* If we are narrowing the operand, we have to do the compare in the
- narrower mode. */
- if ((TYPE_PRECISION (TREE_TYPE (exp))
- < TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (exp, 0)))))
- goto normal;
- case NON_LVALUE_EXPR:
- case REFERENCE_EXPR:
- case ABS_EXPR:
- case NEGATE_EXPR:
- case LROTATE_EXPR:
- case RROTATE_EXPR:
- /* These cannot change zero->nonzero or vice versa. */
- do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
- break;
-
- case WITH_RECORD_EXPR:
- /* Put the object on the placeholder list, recurse through our first
- operand, and pop the list. */
- placeholder_list = tree_cons (TREE_OPERAND (exp, 1), NULL_TREE,
- placeholder_list);
- do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
- placeholder_list = TREE_CHAIN (placeholder_list);
- break;
-
-#if 0
- /* This is never less insns than evaluating the PLUS_EXPR followed by
- a test and can be longer if the test is eliminated. */
- case PLUS_EXPR:
- /* Reduce to minus. */
- exp = build (MINUS_EXPR, TREE_TYPE (exp),
- TREE_OPERAND (exp, 0),
- fold (build1 (NEGATE_EXPR, TREE_TYPE (TREE_OPERAND (exp, 1)),
- TREE_OPERAND (exp, 1))));
- /* Process as MINUS. */
-#endif
-
- case MINUS_EXPR:
- /* Nonzero iff operands of minus differ. */
- do_compare_and_jump (build (NE_EXPR, TREE_TYPE (exp),
- TREE_OPERAND (exp, 0),
- TREE_OPERAND (exp, 1)),
- NE, NE, if_false_label, if_true_label);
- break;
-
- case BIT_AND_EXPR:
- /* If we are AND'ing with a small constant, do this comparison in the
- smallest type that fits. If the machine doesn't have comparisons
- that small, it will be converted back to the wider comparison.
- This helps if we are testing the sign bit of a narrower object.
- combine can't do this for us because it can't know whether a
- ZERO_EXTRACT or a compare in a smaller mode exists, but we do. */
-
- if (! SLOW_BYTE_ACCESS
- && TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
- && TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
- && (i = tree_floor_log2 (TREE_OPERAND (exp, 1))) >= 0
- && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
- && (type = (*lang_hooks.types.type_for_mode) (mode, 1)) != 0
- && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
- && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
- != CODE_FOR_nothing))
- {
- do_jump (convert (type, exp), if_false_label, if_true_label);
- break;
- }
- goto normal;
-
- case TRUTH_NOT_EXPR:
- do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
- break;
-
- case TRUTH_ANDIF_EXPR:
- if (if_false_label == 0)
- if_false_label = drop_through_label = gen_label_rtx ();
- do_jump (TREE_OPERAND (exp, 0), if_false_label, NULL_RTX);
- start_cleanup_deferral ();
- do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
- end_cleanup_deferral ();
- break;
-
- case TRUTH_ORIF_EXPR:
- if (if_true_label == 0)
- if_true_label = drop_through_label = gen_label_rtx ();
- do_jump (TREE_OPERAND (exp, 0), NULL_RTX, if_true_label);
- start_cleanup_deferral ();
- do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
- end_cleanup_deferral ();
- break;
-
- case COMPOUND_EXPR:
- push_temp_slots ();
- expand_expr (TREE_OPERAND (exp, 0), const0_rtx, VOIDmode, 0);
- preserve_temp_slots (NULL_RTX);
- free_temp_slots ();
- pop_temp_slots ();
- emit_queue ();
- do_pending_stack_adjust ();
- do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label);
- break;
-
- case COMPONENT_REF:
- case BIT_FIELD_REF:
- case ARRAY_REF:
- case ARRAY_RANGE_REF:
- {
- HOST_WIDE_INT bitsize, bitpos;
- int unsignedp;
- enum machine_mode mode;
- tree type;
- tree offset;
- int volatilep = 0;
-
- /* Get description of this reference. We don't actually care
- about the underlying object here. */
- get_inner_reference (exp, &bitsize, &bitpos, &offset, &mode,
- &unsignedp, &volatilep);
-
- type = (*lang_hooks.types.type_for_size) (bitsize, unsignedp);
- if (! SLOW_BYTE_ACCESS
- && type != 0 && bitsize >= 0
- && TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
- && (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
- != CODE_FOR_nothing))
- {
- do_jump (convert (type, exp), if_false_label, if_true_label);
- break;
- }
- goto normal;
- }
-
- case COND_EXPR:
- /* Do (a ? 1 : 0) and (a ? 0 : 1) as special cases. */
- if (integer_onep (TREE_OPERAND (exp, 1))
- && integer_zerop (TREE_OPERAND (exp, 2)))
- do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
-
- else if (integer_zerop (TREE_OPERAND (exp, 1))
- && integer_onep (TREE_OPERAND (exp, 2)))
- do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
-
- else
- {
- rtx label1 = gen_label_rtx ();
- drop_through_label = gen_label_rtx ();
-
- do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX);
-
- start_cleanup_deferral ();
- /* Now the THEN-expression. */
- do_jump (TREE_OPERAND (exp, 1),
- if_false_label ? if_false_label : drop_through_label,
- if_true_label ? if_true_label : drop_through_label);
- /* In case the do_jump just above never jumps. */
- do_pending_stack_adjust ();
- emit_label (label1);
-
- /* Now the ELSE-expression. */
- do_jump (TREE_OPERAND (exp, 2),
- if_false_label ? if_false_label : drop_through_label,
- if_true_label ? if_true_label : drop_through_label);
- end_cleanup_deferral ();
- }
- break;
-
- case EQ_EXPR:
- {
- tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
-
- if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
- || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
- {
- tree exp0 = save_expr (TREE_OPERAND (exp, 0));
- tree exp1 = save_expr (TREE_OPERAND (exp, 1));
- do_jump
- (fold
- (build (TRUTH_ANDIF_EXPR, TREE_TYPE (exp),
- fold (build (EQ_EXPR, TREE_TYPE (exp),
- fold (build1 (REALPART_EXPR,
- TREE_TYPE (inner_type),
- exp0)),
- fold (build1 (REALPART_EXPR,
- TREE_TYPE (inner_type),
- exp1)))),
- fold (build (EQ_EXPR, TREE_TYPE (exp),
- fold (build1 (IMAGPART_EXPR,
- TREE_TYPE (inner_type),
- exp0)),
- fold (build1 (IMAGPART_EXPR,
- TREE_TYPE (inner_type),
- exp1)))))),
- if_false_label, if_true_label);
- }
-
- else if (integer_zerop (TREE_OPERAND (exp, 1)))
- do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
-
- else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
- && !can_compare_p (EQ, TYPE_MODE (inner_type), ccp_jump))
- do_jump_by_parts_equality (exp, if_false_label, if_true_label);
- else
- do_compare_and_jump (exp, EQ, EQ, if_false_label, if_true_label);
- break;
- }
-
- case NE_EXPR:
- {
- tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
-
- if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
- || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT)
- {
- tree exp0 = save_expr (TREE_OPERAND (exp, 0));
- tree exp1 = save_expr (TREE_OPERAND (exp, 1));
- do_jump
- (fold
- (build (TRUTH_ORIF_EXPR, TREE_TYPE (exp),
- fold (build (NE_EXPR, TREE_TYPE (exp),
- fold (build1 (REALPART_EXPR,
- TREE_TYPE (inner_type),
- exp0)),
- fold (build1 (REALPART_EXPR,
- TREE_TYPE (inner_type),
- exp1)))),
- fold (build (NE_EXPR, TREE_TYPE (exp),
- fold (build1 (IMAGPART_EXPR,
- TREE_TYPE (inner_type),
- exp0)),
- fold (build1 (IMAGPART_EXPR,
- TREE_TYPE (inner_type),
- exp1)))))),
- if_false_label, if_true_label);
- }
-
- else if (integer_zerop (TREE_OPERAND (exp, 1)))
- do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
-
- else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
- && !can_compare_p (NE, TYPE_MODE (inner_type), ccp_jump))
- do_jump_by_parts_equality (exp, if_true_label, if_false_label);
- else
- do_compare_and_jump (exp, NE, NE, if_false_label, if_true_label);
- break;
- }
-
- case LT_EXPR:
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- if (GET_MODE_CLASS (mode) == MODE_INT
- && ! can_compare_p (LT, mode, ccp_jump))
- do_jump_by_parts_greater (exp, 1, if_false_label, if_true_label);
- else
- do_compare_and_jump (exp, LT, LTU, if_false_label, if_true_label);
- break;
-
- case LE_EXPR:
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- if (GET_MODE_CLASS (mode) == MODE_INT
- && ! can_compare_p (LE, mode, ccp_jump))
- do_jump_by_parts_greater (exp, 0, if_true_label, if_false_label);
- else
- do_compare_and_jump (exp, LE, LEU, if_false_label, if_true_label);
- break;
-
- case GT_EXPR:
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- if (GET_MODE_CLASS (mode) == MODE_INT
- && ! can_compare_p (GT, mode, ccp_jump))
- do_jump_by_parts_greater (exp, 0, if_false_label, if_true_label);
- else
- do_compare_and_jump (exp, GT, GTU, if_false_label, if_true_label);
- break;
-
- case GE_EXPR:
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- if (GET_MODE_CLASS (mode) == MODE_INT
- && ! can_compare_p (GE, mode, ccp_jump))
- do_jump_by_parts_greater (exp, 1, if_true_label, if_false_label);
- else
- do_compare_and_jump (exp, GE, GEU, if_false_label, if_true_label);
- break;
-
- case UNORDERED_EXPR:
- case ORDERED_EXPR:
- {
- enum rtx_code cmp, rcmp;
- int do_rev;
-
- if (code == UNORDERED_EXPR)
- cmp = UNORDERED, rcmp = ORDERED;
- else
- cmp = ORDERED, rcmp = UNORDERED;
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
-
- do_rev = 0;
- if (! can_compare_p (cmp, mode, ccp_jump)
- && (can_compare_p (rcmp, mode, ccp_jump)
- /* If the target doesn't provide either UNORDERED or ORDERED
- comparisons, canonicalize on UNORDERED for the library. */
- || rcmp == UNORDERED))
- do_rev = 1;
-
- if (! do_rev)
- do_compare_and_jump (exp, cmp, cmp, if_false_label, if_true_label);
- else
- do_compare_and_jump (exp, rcmp, rcmp, if_true_label, if_false_label);
- }
- break;
-
- {
- enum rtx_code rcode1;
- enum tree_code tcode2;
-
- case UNLT_EXPR:
- rcode1 = UNLT;
- tcode2 = LT_EXPR;
- goto unordered_bcc;
- case UNLE_EXPR:
- rcode1 = UNLE;
- tcode2 = LE_EXPR;
- goto unordered_bcc;
- case UNGT_EXPR:
- rcode1 = UNGT;
- tcode2 = GT_EXPR;
- goto unordered_bcc;
- case UNGE_EXPR:
- rcode1 = UNGE;
- tcode2 = GE_EXPR;
- goto unordered_bcc;
- case UNEQ_EXPR:
- rcode1 = UNEQ;
- tcode2 = EQ_EXPR;
- goto unordered_bcc;
-
- unordered_bcc:
- mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- if (can_compare_p (rcode1, mode, ccp_jump))
- do_compare_and_jump (exp, rcode1, rcode1, if_false_label,
- if_true_label);
- else
- {
- tree op0 = save_expr (TREE_OPERAND (exp, 0));
- tree op1 = save_expr (TREE_OPERAND (exp, 1));
- tree cmp0, cmp1;
-
- /* If the target doesn't support combined unordered
- compares, decompose into UNORDERED + comparison. */
- cmp0 = fold (build (UNORDERED_EXPR, TREE_TYPE (exp), op0, op1));
- cmp1 = fold (build (tcode2, TREE_TYPE (exp), op0, op1));
- exp = build (TRUTH_ORIF_EXPR, TREE_TYPE (exp), cmp0, cmp1);
- do_jump (exp, if_false_label, if_true_label);
- }
- }
- break;
-
- /* Special case:
- __builtin_expect (<test>, 0) and
- __builtin_expect (<test>, 1)
-
- We need to do this here, so that <test> is not converted to a SCC
- operation on machines that use condition code registers and COMPARE
- like the PowerPC, and then the jump is done based on whether the SCC
- operation produced a 1 or 0. */
- case CALL_EXPR:
- /* Check for a built-in function. */
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
- {
- tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
- tree arglist = TREE_OPERAND (exp, 1);
-
- if (TREE_CODE (fndecl) == FUNCTION_DECL
- && DECL_BUILT_IN (fndecl)
- && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_EXPECT
- && arglist != NULL_TREE
- && TREE_CHAIN (arglist) != NULL_TREE)
- {
- rtx seq = expand_builtin_expect_jump (exp, if_false_label,
- if_true_label);
-
- if (seq != NULL_RTX)
- {
- emit_insn (seq);
- return;
- }
- }
- }
- /* fall through and generate the normal code. */
-
- default:
- normal:
- temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
-#if 0
- /* This is not needed any more and causes poor code since it causes
- comparisons and tests from non-SI objects to have different code
- sequences. */
- /* Copy to register to avoid generating bad insns by cse
- from (set (mem ...) (arithop)) (set (cc0) (mem ...)). */
- if (!cse_not_expected && GET_CODE (temp) == MEM)
- temp = copy_to_reg (temp);
-#endif
- do_pending_stack_adjust ();
- /* Do any postincrements in the expression that was tested. */
- emit_queue ();
-
- if (GET_CODE (temp) == CONST_INT
- || (GET_CODE (temp) == CONST_DOUBLE && GET_MODE (temp) == VOIDmode)
- || GET_CODE (temp) == LABEL_REF)
- {
- rtx target = temp == const0_rtx ? if_false_label : if_true_label;
- if (target)
- emit_jump (target);
- }
- else if (GET_MODE_CLASS (GET_MODE (temp)) == MODE_INT
- && ! can_compare_p (NE, GET_MODE (temp), ccp_jump))
- /* Note swapping the labels gives us not-equal. */
- do_jump_by_parts_equality_rtx (temp, if_true_label, if_false_label);
- else if (GET_MODE (temp) != VOIDmode)
- do_compare_rtx_and_jump (temp, CONST0_RTX (GET_MODE (temp)),
- NE, TREE_UNSIGNED (TREE_TYPE (exp)),
- GET_MODE (temp), NULL_RTX,
- if_false_label, if_true_label);
- else
- abort ();
- }
-
- if (drop_through_label)
- {
- /* If do_jump produces code that might be jumped around,
- do any stack adjusts from that code, before the place
- where control merges in. */
- do_pending_stack_adjust ();
- emit_label (drop_through_label);
- }
-}
-
-/* Given a comparison expression EXP for values too wide to be compared
- with one insn, test the comparison and jump to the appropriate label.
- The code of EXP is ignored; we always test GT if SWAP is 0,
- and LT if SWAP is 1. */
-
-static void
-do_jump_by_parts_greater (exp, swap, if_false_label, if_true_label)
- tree exp;
- int swap;
- rtx if_false_label, if_true_label;
-{
- rtx op0 = expand_expr (TREE_OPERAND (exp, swap), NULL_RTX, VOIDmode, 0);
- rtx op1 = expand_expr (TREE_OPERAND (exp, !swap), NULL_RTX, VOIDmode, 0);
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- int unsignedp = TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (exp, 0)));
-
- do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label, if_true_label);
-}
-
-/* Compare OP0 with OP1, word at a time, in mode MODE.
- UNSIGNEDP says to do unsigned comparison.
- Jump to IF_TRUE_LABEL if OP0 is greater, IF_FALSE_LABEL otherwise. */
-
-void
-do_jump_by_parts_greater_rtx (mode, unsignedp, op0, op1, if_false_label, if_true_label)
- enum machine_mode mode;
- int unsignedp;
- rtx op0, op1;
- rtx if_false_label, if_true_label;
-{
- int nwords = (GET_MODE_SIZE (mode) / UNITS_PER_WORD);
- rtx drop_through_label = 0;
- int i;
-
- if (! if_true_label || ! if_false_label)
- drop_through_label = gen_label_rtx ();
- if (! if_true_label)
- if_true_label = drop_through_label;
- if (! if_false_label)
- if_false_label = drop_through_label;
-
- /* Compare a word at a time, high order first. */
- for (i = 0; i < nwords; i++)
- {
- rtx op0_word, op1_word;
-
- if (WORDS_BIG_ENDIAN)
- {
- op0_word = operand_subword_force (op0, i, mode);
- op1_word = operand_subword_force (op1, i, mode);
- }
- else
- {
- op0_word = operand_subword_force (op0, nwords - 1 - i, mode);
- op1_word = operand_subword_force (op1, nwords - 1 - i, mode);
- }
-
- /* All but high-order word must be compared as unsigned. */
- do_compare_rtx_and_jump (op0_word, op1_word, GT,
- (unsignedp || i > 0), word_mode, NULL_RTX,
- NULL_RTX, if_true_label);
-
- /* Consider lower words only if these are equal. */
- do_compare_rtx_and_jump (op0_word, op1_word, NE, unsignedp, word_mode,
- NULL_RTX, NULL_RTX, if_false_label);
- }
-
- if (if_false_label)
- emit_jump (if_false_label);
- if (drop_through_label)
- emit_label (drop_through_label);
-}
-
-/* Given an EQ_EXPR expression EXP for values too wide to be compared
- with one insn, test the comparison and jump to the appropriate label. */
-
-static void
-do_jump_by_parts_equality (exp, if_false_label, if_true_label)
- tree exp;
- rtx if_false_label, if_true_label;
-{
- rtx op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
- rtx op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
- enum machine_mode mode = TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)));
- int nwords = (GET_MODE_SIZE (mode) / UNITS_PER_WORD);
- int i;
- rtx drop_through_label = 0;
-
- if (! if_false_label)
- drop_through_label = if_false_label = gen_label_rtx ();
-
- for (i = 0; i < nwords; i++)
- do_compare_rtx_and_jump (operand_subword_force (op0, i, mode),
- operand_subword_force (op1, i, mode),
- EQ, TREE_UNSIGNED (TREE_TYPE (exp)),
- word_mode, NULL_RTX, if_false_label, NULL_RTX);
-
- if (if_true_label)
- emit_jump (if_true_label);
- if (drop_through_label)
- emit_label (drop_through_label);
-}
-
-/* Jump according to whether OP0 is 0.
- We assume that OP0 has an integer mode that is too wide
- for the available compare insns. */
-
-void
-do_jump_by_parts_equality_rtx (op0, if_false_label, if_true_label)
- rtx op0;
- rtx if_false_label, if_true_label;
-{
- int nwords = GET_MODE_SIZE (GET_MODE (op0)) / UNITS_PER_WORD;
- rtx part;
- int i;
- rtx drop_through_label = 0;
-
- /* The fastest way of doing this comparison on almost any machine is to
- "or" all the words and compare the result. If all have to be loaded
- from memory and this is a very wide item, it's possible this may
- be slower, but that's highly unlikely. */
-
- part = gen_reg_rtx (word_mode);
- emit_move_insn (part, operand_subword_force (op0, 0, GET_MODE (op0)));
- for (i = 1; i < nwords && part != 0; i++)
- part = expand_binop (word_mode, ior_optab, part,
- operand_subword_force (op0, i, GET_MODE (op0)),
- part, 1, OPTAB_WIDEN);
-
- if (part != 0)
- {
- do_compare_rtx_and_jump (part, const0_rtx, EQ, 1, word_mode,
- NULL_RTX, if_false_label, if_true_label);
-
- return;
- }
-
- /* If we couldn't do the "or" simply, do this with a series of compares. */
- if (! if_false_label)
- drop_through_label = if_false_label = gen_label_rtx ();
-
- for (i = 0; i < nwords; i++)
- do_compare_rtx_and_jump (operand_subword_force (op0, i, GET_MODE (op0)),
- const0_rtx, EQ, 1, word_mode, NULL_RTX,
- if_false_label, NULL_RTX);
-
- if (if_true_label)
- emit_jump (if_true_label);
-
- if (drop_through_label)
- emit_label (drop_through_label);
-}
-
-/* Generate code for a comparison of OP0 and OP1 with rtx code CODE.
- (including code to compute the values to be compared)
- and set (CC0) according to the result.
- The decision as to signed or unsigned comparison must be made by the caller.
-
- We force a stack adjustment unless there are currently
- things pushed on the stack that aren't yet used.
-
- If MODE is BLKmode, SIZE is an RTX giving the size of the objects being
- compared. */
-
-rtx
-compare_from_rtx (op0, op1, code, unsignedp, mode, size)
- rtx op0, op1;
- enum rtx_code code;
- int unsignedp;
- enum machine_mode mode;
- rtx size;
-{
- enum rtx_code ucode;
- rtx tem;
-
- /* If one operand is constant, make it the second one. Only do this
- if the other operand is not constant as well. */
-
- if (swap_commutative_operands_p (op0, op1))
- {
- tem = op0;
- op0 = op1;
- op1 = tem;
- code = swap_condition (code);
- }
-
- if (flag_force_mem)
- {
- op0 = force_not_mem (op0);
- op1 = force_not_mem (op1);
- }
-
- do_pending_stack_adjust ();
-
- ucode = unsignedp ? unsigned_condition (code) : code;
- if ((tem = simplify_relational_operation (ucode, mode, op0, op1)) != 0)
- return tem;
-
-#if 0
- /* There's no need to do this now that combine.c can eliminate lots of
- sign extensions. This can be less efficient in certain cases on other
- machines. */
-
- /* If this is a signed equality comparison, we can do it as an
- unsigned comparison since zero-extension is cheaper than sign
- extension and comparisons with zero are done as unsigned. This is
- the case even on machines that can do fast sign extension, since
- zero-extension is easier to combine with other operations than
- sign-extension is. If we are comparing against a constant, we must
- convert it to what it would look like unsigned. */
- if ((code == EQ || code == NE) && ! unsignedp
- && GET_MODE_BITSIZE (GET_MODE (op0)) <= HOST_BITS_PER_WIDE_INT)
- {
- if (GET_CODE (op1) == CONST_INT
- && (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0))) != INTVAL (op1))
- op1 = GEN_INT (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0)));
- unsignedp = 1;
- }
-#endif
-
- emit_cmp_insn (op0, op1, code, size, mode, unsignedp);
-
-#if HAVE_cc0
- return gen_rtx_fmt_ee (code, VOIDmode, cc0_rtx, const0_rtx);
-#else
- return gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
-#endif
-}
-
-/* Like do_compare_and_jump but expects the values to compare as two rtx's.
- The decision as to signed or unsigned comparison must be made by the caller.
-
- If MODE is BLKmode, SIZE is an RTX giving the size of the objects being
- compared. */
-
-void
-do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode, size,
- if_false_label, if_true_label)
- rtx op0, op1;
- enum rtx_code code;
- int unsignedp;
- enum machine_mode mode;
- rtx size;
- rtx if_false_label, if_true_label;
-{
- enum rtx_code ucode;
- rtx tem;
- int dummy_true_label = 0;
-
- /* Reverse the comparison if that is safe and we want to jump if it is
- false. */
- if (! if_true_label && ! FLOAT_MODE_P (mode))
- {
- if_true_label = if_false_label;
- if_false_label = 0;
- code = reverse_condition (code);
- }
-
- /* If one operand is constant, make it the second one. Only do this
- if the other operand is not constant as well. */
-
- if (swap_commutative_operands_p (op0, op1))
- {
- tem = op0;
- op0 = op1;
- op1 = tem;
- code = swap_condition (code);
- }
-
- if (flag_force_mem)
- {
- op0 = force_not_mem (op0);
- op1 = force_not_mem (op1);
- }
-
- do_pending_stack_adjust ();
-
- ucode = unsignedp ? unsigned_condition (code) : code;
- if ((tem = simplify_relational_operation (ucode, mode, op0, op1)) != 0)
- {
- if (tem == const_true_rtx)
- {
- if (if_true_label)
- emit_jump (if_true_label);
- }
- else
- {
- if (if_false_label)
- emit_jump (if_false_label);
- }
- return;
- }
-
-#if 0
- /* There's no need to do this now that combine.c can eliminate lots of
- sign extensions. This can be less efficient in certain cases on other
- machines. */
-
- /* If this is a signed equality comparison, we can do it as an
- unsigned comparison since zero-extension is cheaper than sign
- extension and comparisons with zero are done as unsigned. This is
- the case even on machines that can do fast sign extension, since
- zero-extension is easier to combine with other operations than
- sign-extension is. If we are comparing against a constant, we must
- convert it to what it would look like unsigned. */
- if ((code == EQ || code == NE) && ! unsignedp
- && GET_MODE_BITSIZE (GET_MODE (op0)) <= HOST_BITS_PER_WIDE_INT)
- {
- if (GET_CODE (op1) == CONST_INT
- && (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0))) != INTVAL (op1))
- op1 = GEN_INT (INTVAL (op1) & GET_MODE_MASK (GET_MODE (op0)));
- unsignedp = 1;
- }
-#endif
-
- if (! if_true_label)
- {
- dummy_true_label = 1;
- if_true_label = gen_label_rtx ();
- }
-
- emit_cmp_and_jump_insns (op0, op1, code, size, mode, unsignedp,
- if_true_label);
-
- if (if_false_label)
- emit_jump (if_false_label);
- if (dummy_true_label)
- emit_label (if_true_label);
-}
-
-/* Generate code for a comparison expression EXP (including code to compute
- the values to be compared) and a conditional jump to IF_FALSE_LABEL and/or
- IF_TRUE_LABEL. One of the labels can be NULL_RTX, in which case the
- generated code will drop through.
- SIGNED_CODE should be the rtx operation for this comparison for
- signed data; UNSIGNED_CODE, likewise for use if data is unsigned.
-
- We force a stack adjustment unless there are currently
- things pushed on the stack that aren't yet used. */
-
-static void
-do_compare_and_jump (exp, signed_code, unsigned_code, if_false_label,
- if_true_label)
- tree exp;
- enum rtx_code signed_code, unsigned_code;
- rtx if_false_label, if_true_label;
-{
- rtx op0, op1;
- tree type;
- enum machine_mode mode;
- int unsignedp;
- enum rtx_code code;
-
- /* Don't crash if the comparison was erroneous. */
- op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0);
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == ERROR_MARK)
- return;
-
- op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0);
- if (TREE_CODE (TREE_OPERAND (exp, 1)) == ERROR_MARK)
- return;
-
- type = TREE_TYPE (TREE_OPERAND (exp, 0));
- mode = TYPE_MODE (type);
- if (TREE_CODE (TREE_OPERAND (exp, 0)) == INTEGER_CST
- && (TREE_CODE (TREE_OPERAND (exp, 1)) != INTEGER_CST
- || (GET_MODE_BITSIZE (mode)
- > GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp,
- 1)))))))
- {
- /* op0 might have been replaced by promoted constant, in which
- case the type of second argument should be used. */
- type = TREE_TYPE (TREE_OPERAND (exp, 1));
- mode = TYPE_MODE (type);
- }
- unsignedp = TREE_UNSIGNED (type);
- code = unsignedp ? unsigned_code : signed_code;
-
-#ifdef HAVE_canonicalize_funcptr_for_compare
- /* If function pointers need to be "canonicalized" before they can
- be reliably compared, then canonicalize them. */
- if (HAVE_canonicalize_funcptr_for_compare
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE
- && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0))))
- == FUNCTION_TYPE))
- {
- rtx new_op0 = gen_reg_rtx (mode);
-
- emit_insn (gen_canonicalize_funcptr_for_compare (new_op0, op0));
- op0 = new_op0;
- }
-
- if (HAVE_canonicalize_funcptr_for_compare
- && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 1))) == POINTER_TYPE
- && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1))))
- == FUNCTION_TYPE))
- {
- rtx new_op1 = gen_reg_rtx (mode);
-
- emit_insn (gen_canonicalize_funcptr_for_compare (new_op1, op1));
- op1 = new_op1;
- }
-#endif
-
- /* Do any postincrements in the expression that was tested. */
- emit_queue ();
-
- do_compare_rtx_and_jump (op0, op1, code, unsignedp, mode,
- ((mode == BLKmode)
- ? expr_size (TREE_OPERAND (exp, 0)) : NULL_RTX),
- if_false_label, if_true_label);
-}
-
/* Generate code to calculate EXP using a store-flag instruction
and return an rtx for the result. EXP is either a comparison
or a TRUTH_NOT_EXPR whose operand is a comparison.
@@ -11367,4 +10463,41 @@ vector_mode_valid_p (mode)
return mov_optab->handlers[innermode].insn_code != CODE_FOR_nothing;
}
+/* Return a CONST_VECTOR rtx for a VECTOR_CST tree. */
+static rtx
+const_vector_from_tree (exp)
+ tree exp;
+{
+ rtvec v;
+ int units, i;
+ tree link, elt;
+ enum machine_mode inner, mode;
+
+ mode = TYPE_MODE (TREE_TYPE (exp));
+
+ if (is_zeros_p (exp))
+ return CONST0_RTX (mode);
+
+ units = GET_MODE_NUNITS (mode);
+ inner = GET_MODE_INNER (mode);
+
+ v = rtvec_alloc (units);
+
+ link = TREE_VECTOR_CST_ELTS (exp);
+ for (i = 0; link; link = TREE_CHAIN (link), ++i)
+ {
+ elt = TREE_VALUE (link);
+
+ if (TREE_CODE (elt) == REAL_CST)
+ RTVEC_ELT (v, i) = CONST_DOUBLE_FROM_REAL_VALUE (TREE_REAL_CST (elt),
+ inner);
+ else
+ RTVEC_ELT (v, i) = immed_double_const (TREE_INT_CST_LOW (elt),
+ TREE_INT_CST_HIGH (elt),
+ inner);
+ }
+
+ return gen_rtx_raw_CONST_VECTOR (mode, v);
+}
+
#include "gt-expr.h"
diff --git a/gcc/expr.h b/gcc/expr.h
index 2f243266cf2..cf794fc7401 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -770,14 +770,6 @@ extern rtx expand_mult_add PARAMS ((rtx, rtx, rtx, rtx,enum machine_mode, int));
extern rtx expand_mult_highpart_adjust PARAMS ((enum machine_mode, rtx, rtx, rtx, rtx, int));
extern rtx assemble_static_space PARAMS ((int));
-
-/* Hook called by expand_expr for language-specific tree codes.
- It is up to the language front end to install a hook
- if it has any such codes that expand_expr needs to know about. */
-extern rtx (*lang_expand_expr) PARAMS ((union tree_node *, rtx,
- enum machine_mode,
- enum expand_modifier modifier));
-
extern int safe_from_p PARAMS ((rtx, tree, int));
/* Call this once to initialize the contents of the optabs
@@ -799,3 +791,5 @@ extern void mark_seen_cases PARAMS ((tree, unsigned char *,
#endif
extern int vector_mode_valid_p PARAMS ((enum machine_mode));
+
+extern tree placeholder_list;
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog
index f668eac5e73..14f1b845aa3 100644
--- a/gcc/f/ChangeLog
+++ b/gcc/f/ChangeLog
@@ -1,3 +1,73 @@
+2003-03-27 Steven Bosscher <steven@gcc.gnu.org>
+
+ * ffe.texi: Don't mention dead file proj.c.
+
+2003-03-26 Roger Sayle <roger@eyesopen.com>
+
+ PR fortran/9793
+ * target.h (ffetarget_divide_integer1): Perform division by -1
+ using negation to prevent possible overflow trap on the host.
+
+2003-03-25 Marcelo Abreu <mmabreu@inf.ufrgs.br>
+
+ PR fortran/10204
+ * ffe.texi: Reference the GCC web site in the URL.
+
+2003-03-24 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ PR fortran/10197
+ * news.texi: Document PR fortran/10197 fixed.
+
+Sun Mar 23 23:43:45 2003 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7086
+ * com.c (ffecom_sym_transform_): Adjust calls to
+ put_var_into_stack.
+ (ffe_mark_addressable): Likewise.
+
+2003-03-22 Bud Davis <bdavis9659@comcast.net>
+
+ * com.c (ffecom_constantunion_with_type): New function.
+ * com.h (ffecom_constantunion_with_type): Declare.
+ * stc.c (ffestc_R810): Check for kind type.
+ * ste.c (ffeste_R810): Use ffecom_constantunion_with_type
+ to discern SELECT CASE variables.
+
+2003-03-15 Roger Sayle <roger@eyesopen.com>
+
+ * stb.c (ffestb_R100110_): Allow the number before the X format
+ to be optional when not -fpedantic.
+ * std.c (ffestd_R1001dump_1010_3_): Delete unused static function.
+ (ffestd_R1001dump_): For the FFESTP_formattypeX case, call
+ ffestd_R1001dump_1010_2_ instead of ffestd_R1001dump_1010_3_.
+
+2003-03-15 Roger Sayle <roger@eyesopen.com>
+
+ * f/ste.c (ffeste_R810): Fix whitespace.
+
+2003-03-15 Andreas Jaeger <aj@suse.de>
+
+ * g77spec.c (DEFAULT_SWITCH_TAKES_ARG): Remove.
+ (DEFAULT_WORD_SWITCH_TAKES_ARG): Remove.
+
+2003-03-12 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * g77.texi, invoke.texi, g77spec.c, lang-specs.h: GCC, not
+ GNU CC. Especially here.
+
+2003-03-10 Roger Sayle <roger@eyesopen.com>
+
+ * com.c (duplicate_decls): Synchronize with C's duplicate_decls.
+
+Sat Mar 8 21:11:40 2003 Neil Booth <neil@daikokuya.co.uk>
+
+ * com.c (ffe_init): Update prototype; move code to ffe_post_options.
+ (ffe_post_options): New.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * Make-lang.in (f77.tags): New target.
+
2003-02-20 Toon Moene <toon@moene.indiv.nluug.nl>
* news.texi: Document fixing PR fortran/9038.
diff --git a/gcc/f/Make-lang.in b/gcc/f/Make-lang.in
index 7af9c9e583a..7acba675a3e 100644
--- a/gcc/f/Make-lang.in
+++ b/gcc/f/Make-lang.in
@@ -92,7 +92,7 @@ F77_OBJS = f/bad.o f/bit.o f/bld.o f/com.o f/data.o f/equiv.o f/expr.o \
f/stv.o f/stw.o f/symbol.o f/target.o f/top.o f/type.o f/where.o
# Use loose warnings for this front end.
-f-warn =
+f-warn = $(WERROR)
# type-punning warning
f/sta.o-warn = -Wno-error
@@ -145,6 +145,9 @@ f77.all.cross: g77-cross$(exeext)
f77.start.encap: g77$(exeext)
f77.rest.encap:
+f77.tags: force
+ cd $(srcdir)/f; etags *.c *.h
+
f77.info: $(srcdir)/f/g77.info
f77.dvi: f/g77.dvi
f77.generated-manpages: $(srcdir)/f/g77.1
diff --git a/gcc/f/com.c b/gcc/f/com.c
index 69ef0997298..0516228d4b2 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -1,5 +1,5 @@
/* com.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
Free Software Foundation, Inc.
Contributed by James Craig Burley.
@@ -7443,7 +7443,7 @@ ffecom_sym_transform_ (ffesymbol s)
assert (et != NULL_TREE);
if (! TREE_STATIC (et))
- put_var_into_stack (et);
+ put_var_into_stack (et, /*rescan=*/true);
offset = ffestorag_modulo (est)
+ ffestorag_offset (ffesymbol_storage (s))
@@ -10591,6 +10591,78 @@ ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
return item;
}
+/* Transform constant-union to tree, with the type known. */
+
+tree
+ffecom_constantunion_with_type (ffebldConstantUnion *cu,
+ tree tree_type, ffebldConst ct)
+{
+ tree item;
+
+ int val;
+
+ switch (ct)
+ {
+#if FFETARGET_okINTEGER1
+ case FFEBLD_constINTEGER1:
+ val = ffebld_cu_val_integer1 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER2
+ case FFEBLD_constINTEGER2:
+ val = ffebld_cu_val_integer2 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER3
+ case FFEBLD_constINTEGER3:
+ val = ffebld_cu_val_integer3 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER4
+ case FFEBLD_constINTEGER4:
+ val = ffebld_cu_val_integer4 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL1
+ case FFEBLD_constLOGICAL1:
+ val = ffebld_cu_val_logical1 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL2
+ case FFEBLD_constLOGICAL2:
+ val = ffebld_cu_val_logical2 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL3
+ case FFEBLD_constLOGICAL3:
+ val = ffebld_cu_val_logical3 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL4
+ case FFEBLD_constLOGICAL4:
+ val = ffebld_cu_val_logical4 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+ default:
+ assert ("constant type not supported"==NULL);
+ return error_mark_node;
+ break;
+ }
+
+ TREE_TYPE (item) = tree_type;
+
+ TREE_CONSTANT (item) = 1;
+
+ return item;
+}
/* Transform expression into constant tree.
If the expression can be transformed into a tree that is constant,
@@ -13220,9 +13292,6 @@ duplicate_decls (tree newdecl, tree olddecl)
COPY_DECL_RTL (olddecl, newdecl);
/* Merge the type qualifiers. */
- if (DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
- && !TREE_THIS_VOLATILE (newdecl))
- TREE_THIS_VOLATILE (olddecl) = 0;
if (TREE_READONLY (newdecl))
TREE_READONLY (olddecl) = 1;
if (TREE_THIS_VOLATILE (newdecl))
@@ -14030,8 +14099,9 @@ insert_block (tree block)
}
/* Each front end provides its own. */
-static const char *ffe_init PARAMS ((const char *));
+static bool ffe_init PARAMS ((void));
static void ffe_finish PARAMS ((void));
+static bool ffe_post_options PARAMS ((const char **));
static void ffe_init_options PARAMS ((void));
static void ffe_print_identifier PARAMS ((FILE *, tree, int));
@@ -14050,6 +14120,8 @@ struct language_function GTY(())
#define LANG_HOOKS_INIT_OPTIONS ffe_init_options
#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION ffe_decode_option
+#undef LANG_HOOKS_POST_OPTIONS
+#define LANG_HOOKS_POST_OPTIONS ffe_post_options
#undef LANG_HOOKS_PARSE_FILE
#define LANG_HOOKS_PARSE_FILE ffe_parse_file
#undef LANG_HOOKS_MARK_ADDRESSABLE
@@ -14115,9 +14187,12 @@ const char *const tree_code_name[] = {
};
#undef DEFTREECODE
-static const char *
-ffe_init (const char *filename)
+static bool
+ffe_post_options (pfilename)
+ const char **pfilename;
{
+ const char *filename = *pfilename;
+
/* Open input file. */
if (filename == 0 || !strcmp (filename, "-"))
{
@@ -14126,9 +14201,17 @@ ffe_init (const char *filename)
}
else
finput = fopen (filename, "r");
+
if (finput == 0)
fatal_io_error ("can't open %s", filename);
+ return false;
+}
+
+
+static bool
+ffe_init ()
+{
#ifdef IO_BUFFER_SIZE
setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE);
#endif
@@ -14144,11 +14227,8 @@ ffe_init (const char *filename)
ffelex_hash_kludge (finput);
/* FIXME: The ffelex_hash_kludge code needs to be cleaned up to
- return the new file name. */
- if (main_input_filename)
- filename = main_input_filename;
-
- return filename;
+ set the new file name. Maybe in ffe_post_options. */
+ return true;
}
static void
@@ -14214,7 +14294,7 @@ ffe_mark_addressable (tree exp)
}
assert ("address of register var requested" == NULL);
}
- put_var_into_stack (x);
+ put_var_into_stack (x, /*rescan=*/true);
/* drops in */
case FUNCTION_DECL:
diff --git a/gcc/f/com.h b/gcc/f/com.h
index 8b8bb861e82..b58e5ba1205 100644
--- a/gcc/f/com.h
+++ b/gcc/f/com.h
@@ -210,6 +210,8 @@ tree ffecom_arg_expr (ffebld expr, tree *length);
tree ffecom_arg_ptr_to_const_expr (ffebld expr, tree *length);
tree ffecom_arg_ptr_to_expr (ffebld expr, tree *length);
tree ffecom_call_gfrt (ffecomGfrt ix, tree args, tree hook);
+tree ffecom_constantunion_with_type (ffebldConstantUnion *cu,
+ tree tree_type,ffebldConst ct);
tree ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
ffeinfoKindtype kt, tree tree_type);
tree ffecom_const_expr (ffebld expr);
diff --git a/gcc/f/ffe.texi b/gcc/f/ffe.texi
index 4136a47a745..a580a6ad43c 100644
--- a/gcc/f/ffe.texi
+++ b/gcc/f/ffe.texi
@@ -17,7 +17,7 @@ search for the string TBD.
If you want to help by working on one or more of these items,
email @email{gcc@@gcc.gnu.org}.
If you're planning to do more than just research issues and offer comments,
-see @uref{http://www.gnu.org/software/gcc/contribute.html} for steps you might
+see @uref{http://gcc.gnu.org/contribute.html} for steps you might
need to take first.
@menu
@@ -199,8 +199,7 @@ in @file{xyz.h} and implemented there (if it's a macro) or in @file{xyz.c}.
The ``porting'' files of note currently are:
@table @file
-@item proj.c
-@itemx proj.h
+@item proj.h
This defines the ``language'' used by all the other source files,
the language being Standard C plus some useful things
like @code{ARRAY_SIZE} and such.
diff --git a/gcc/f/g77.texi b/gcc/f/g77.texi
index 3c1fce2a49a..b37b20ed956 100644
--- a/gcc/f/g77.texi
+++ b/gcc/f/g77.texi
@@ -250,7 +250,7 @@ many people have helped create and improve GNU Fortran.
@itemize @bullet
@item
The packaging and compiler portions of GNU Fortran are based largely
-on the GNU CC compiler.
+on the GCC compiler.
@xref{Contributors,,Contributors to GCC,gcc,Using the GNU Compiler
Collection (GCC)},
for more information.
@@ -800,7 +800,7 @@ but apply to other languages as well.
@xref{G++ and GCC,,Compile C; C++; Objective-C; Ada; Fortran;
or Java,gcc,Using the GNU Compiler Collection (GCC)},
for information on the way different languages are handled
-by the GNU CC compiler (@command{gcc}).
+by the GCC compiler (@command{gcc}).
@cindex @command{g77}, command
@cindex commands, @command{g77}
@@ -10987,7 +10987,7 @@ ways to find it:
@item
Look in the service directory for someone who might help you for a fee.
The service directory is found in the file named @file{SERVICE} in the
-GNU CC distribution.
+GCC distribution.
@item
Send a message to @email{@value{email-help}}.
diff --git a/gcc/f/g77spec.c b/gcc/f/g77spec.c
index 3df50628539..426bb965d0a 100644
--- a/gcc/f/g77spec.c
+++ b/gcc/f/g77spec.c
@@ -1,20 +1,21 @@
/* Specific flags and argument handling of the Fortran front-end.
- Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -100,36 +101,14 @@ static void append_arg PARAMS ((const char *));
static int g77_newargc;
static const char **g77_newargv;
-/* --- This comes from gcc.c (2.8.1) verbatim: */
-
-/* This defines which switch letters take arguments. */
-
-#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
- ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
- || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
- || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
- || (CHAR) == 'L' || (CHAR) == 'A')
-
#ifndef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)
#endif
-/* This defines which multi-letter switches take arguments. */
-
-#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
- (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
- || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
- || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
- || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
- || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem") || !strcmp (STR, "specs"))
-
#ifndef WORD_SWITCH_TAKES_ARG
#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
#endif
-/* --- End of verbatim. */
-
/* Assumes text[0] == '-'. Returns number of argv items that belong to
(and follow) this one, an option id for options important to the
caller, and a pointer to the first char of the arg, if embedded (else
diff --git a/gcc/f/invoke.texi b/gcc/f/invoke.texi
index 50c7ca42e73..3079d70d09c 100644
--- a/gcc/f/invoke.texi
+++ b/gcc/f/invoke.texi
@@ -255,7 +255,7 @@ program is written is generally indicated by the suffix.
Suffixes specific to GNU Fortran are listed below.
@xref{Overall Options,,Options Controlling the Kind of
Output,gcc,Using the GNU Compiler Collection (GCC)}, for
-information on suffixes recognized by GNU CC.
+information on suffixes recognized by GCC.
@table @gcctabopt
@cindex .f filename suffix
@@ -286,7 +286,7 @@ You can force @samp{.f} files to be preprocessed by @command{cpp} by using
@item @var{file}.fpp
@item @var{file}.FPP
Fortran source code that must be preprocessed (by the C preprocessor
-@command{cpp}, which is part of GNU CC).
+@command{cpp}, which is part of GCC).
Note that preprocessing is not extended to the contents of
files included by the @code{INCLUDE} directive---the @code{#include}
diff --git a/gcc/f/lang-specs.h b/gcc/f/lang-specs.h
index 46a45286a35..3c8c8e15317 100644
--- a/gcc/f/lang-specs.h
+++ b/gcc/f/lang-specs.h
@@ -35,8 +35,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
f771 %|.f %(cc1_options) %{I*} %{!fsyntax-only:%(invoke_as)}}}}", 0},
{".r", "@ratfor", 0},
{"@ratfor",
- "%{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{CC:%{!E:%eGNU C does not support -CC without using -E}}\
+ "%{C:%{!E:%eGCC does not support -C without using -E}}\
+ %{CC:%{!E:%eGCC does not support -CC without using -E}}\
ratfor %{C} %{CC} %{v} %{E:%W{o*}} %{!E: %{!pipe:-o %g.f} %i |\n\
f771 %m.f %(cc1_options) %{I*} %{!fsyntax-only:%(invoke_as)}}", 0},
{".f", "@f77", 0},
diff --git a/gcc/f/news.texi b/gcc/f/news.texi
index 2194852f8d2..0d07df41f0a 100644
--- a/gcc/f/news.texi
+++ b/gcc/f/news.texi
@@ -11,7 +11,7 @@
@c in the standalone derivations of this file (e.g. NEWS).
@set copyrights-news 1995,1996,1997,1998,1999,2000,2001,2002,2003
-@set last-update-news 2003-02-20
+@set last-update-news 2003-03-24
@ifset DOC-NEWS
@include root.texi
@@ -191,6 +191,8 @@ Incorrect output with 0-based array of characters
Double complex zero ** double precision number -> NaN instead of zero
@item 9038
-ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none
+@item 10197
+Direct access files not unformatted by default
@end table
@item
Richard Henderson (@email{rth@@redhat.com}) analyzed and improved the handling
diff --git a/gcc/f/stb.c b/gcc/f/stb.c
index bf456a1afc1..57d7ac33313 100644
--- a/gcc/f/stb.c
+++ b/gcc/f/stb.c
@@ -10514,7 +10514,7 @@ ffestb_R100110_ (ffelexToken t)
case FFESTP_formattypeX:
err = FFEBAD_FORMAT_BAD_X_SPEC;
- pre = required;
+ pre = ffe_is_pedantic() ? required : optional;
post = disallowed;
dot = disallowed;
exp = disallowed;
diff --git a/gcc/f/stc.c b/gcc/f/stc.c
index a28e3a949e6..b9602c20a46 100644
--- a/gcc/f/stc.c
+++ b/gcc/f/stc.c
@@ -9197,11 +9197,17 @@ ffestc_R810 (ffesttCaseList cases, ffelexToken name)
}
if (((caseobj->expr1 != NULL)
&& ((ffeinfo_basictype (ffebld_info (caseobj->expr1))
- != s->type)))
+ != s->type)
+ || ((ffeinfo_kindtype (ffebld_info (caseobj->expr1))
+ != s->kindtype)
+ && (ffeinfo_kindtype (ffebld_info (caseobj->expr1)) != FFEINFO_kindtypeINTEGER1 ))
|| ((caseobj->range)
&& (caseobj->expr2 != NULL)
&& ((ffeinfo_basictype (ffebld_info (caseobj->expr2))
- != s->type))))
+ != s->type)
+ || ((ffeinfo_kindtype (ffebld_info (caseobj->expr2))
+ != s->kindtype)
+ && (ffeinfo_kindtype (ffebld_info (caseobj->expr2)) != FFEINFO_kindtypeINTEGER1)))))))
{
ffebad_start (FFEBAD_CASE_TYPE_DISAGREE);
ffebad_here (0, ffelex_token_where_line (caseobj->t),
@@ -9212,6 +9218,8 @@ ffestc_R810 (ffesttCaseList cases, ffelexToken name)
continue;
}
+
+
if ((s->type == FFEINFO_basictypeLOGICAL) && (caseobj->range))
{
ffebad_start (FFEBAD_CASE_LOGICAL_RANGE);
diff --git a/gcc/f/std.c b/gcc/f/std.c
index bd2add21f65..c9ff189b796 100644
--- a/gcc/f/std.c
+++ b/gcc/f/std.c
@@ -532,8 +532,6 @@ static void ffestd_R1001dump_1010_1_ (ffests s, ffesttFormatList f,
const char *string);
static void ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f,
const char *string);
-static void ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f,
- const char *string);
static void ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f,
const char *string);
static void ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f,
@@ -3608,7 +3606,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
break;
case FFESTP_formattypeX:
- ffestd_R1001dump_1010_3_ (s, next, "X");
+ ffestd_R1001dump_1010_2_ (s, next, "X");
break;
case FFESTP_formattypeS:
@@ -3914,26 +3912,6 @@ ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f, const char *string)
ffests_puts (s, string);
}
-/* ffestd_R1001dump_1010_3_ -- Dump a particular format
-
- ffesttFormatList f;
- ffestd_R1001dump_1010_3_(f,"I");
-
- The format is dumped with form nX. */
-
-static void
-ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f, const char *string)
-{
- assert (f->u.R1010.val.present);
-
- if (f->u.R1010.val.rtexpr)
- ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
- else
- ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
-
- ffests_puts (s, string);
-}
-
/* ffestd_R1001dump_1010_4_ -- Dump a particular format
ffesttFormatList f;
diff --git a/gcc/f/ste.c b/gcc/f/ste.c
index 39978929480..75029d8e6c7 100644
--- a/gcc/f/ste.c
+++ b/gcc/f/ste.c
@@ -2712,22 +2712,19 @@ ffeste_R810 (ffestw block, unsigned long casenum)
do
{
texprlow = (c->low == NULL) ? NULL_TREE
- : ffecom_constantunion (&ffebld_constant_union (c->low), s->type,
- s->kindtype,
- ffecom_tree_type[s->type][s->kindtype]);
+ : ffecom_constantunion_with_type (&ffebld_constant_union (c->low),
+ ffecom_tree_type[s->type][s->kindtype],c->low->consttype);
if (c->low != c->high)
{
texprhigh = (c->high == NULL) ? NULL_TREE
- : ffecom_constantunion (&ffebld_constant_union (c->high),
- s->type, s->kindtype,
- ffecom_tree_type[s->type][s->kindtype]);
+ : ffecom_constantunion_with_type (&ffebld_constant_union (c->high),
+ ffecom_tree_type[s->type][s->kindtype],c->high->consttype);
pushok = pushcase_range (texprlow, texprhigh, convert,
tlabel, &duplicate);
}
else
pushok = pushcase (texprlow, convert, tlabel, &duplicate);
- assert((pushok !=2) || (pushok !=0));
- if (pushok==2)
+ if (pushok == 2)
{
ffebad_start_msg ("SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)",
FFEBAD_severityFATAL);
diff --git a/gcc/f/target.h b/gcc/f/target.h
index 971f8667ad9..7c48b791d1f 100644
--- a/gcc/f/target.h
+++ b/gcc/f/target.h
@@ -1154,7 +1154,8 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
FFEBAD; })
#define ffetarget_divide_integer1(res,l,r) \
(((r) == 0) ? (*(res) = 0, FFEBAD_DIV_BY_ZERO) \
- : (*(res) = (l) / (r), FFEBAD))
+ : (((r) == -1) ? (*(res) = -(l), FFEBAD) \
+ : (*(res) = (l) / (r), FFEBAD)))
#define ffetarget_divide_integer2(res,l,r) \
ffetarget_divide_integer1(res,l,r)
#define ffetarget_divide_integer3(res,l,r) \
diff --git a/gcc/fix-header.c b/gcc/fix-header.c
index 305a8685222..033019eb849 100644
--- a/gcc/fix-header.c
+++ b/gcc/fix-header.c
@@ -1,6 +1,6 @@
/* fix-header.c - Make C header file suitable for C++.
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003 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
@@ -67,7 +67,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
* INFILE.H is a full pathname for the input file (e.g. /usr/include/stdio.h)
* OUTFILE.H is the full pathname for where to write the output file,
if anything needs to be done. (e.g. ./include/stdio.h)
- * OPTIONS are such as you would pass to cpp.
+ * OPTIONS can be -D or -I switches as you would pass to cpp.
Written by Per Bothner <bothner@cygnus.com>, July 1993. */
@@ -622,10 +622,9 @@ read_scan_file (in_fname, argc, argv)
obstack_init (&scan_file_obstack);
- scan_in = cpp_create_reader (CLK_GNUC89);
+ scan_in = cpp_create_reader (CLK_GNUC89, NULL);
cb = cpp_get_callbacks (scan_in);
cb->file_change = cb_file_change;
- cb->simplify_path = simplify_path;
/* We are going to be scanning a header file out of its proper context,
so ignore warnings and errors. */
@@ -633,19 +632,40 @@ read_scan_file (in_fname, argc, argv)
options->inhibit_warnings = 1;
options->inhibit_errors = 1;
+ if (! cpp_read_main_file (scan_in, in_fname))
+ exit (FATAL_EXIT_CODE);
+
+ cpp_change_file (scan_in, LC_RENAME, "<built-in>");
+ cpp_init_builtins (scan_in);
+ cpp_change_file (scan_in, LC_RENAME, in_fname);
+
+ /* Process switches after builtins so -D can override them. */
for (i = 0; i < argc; i += strings_processed)
{
- if (argv[i][0] == 'I')
+ strings_processed = 0;
+ if (argv[i][0] == '-')
{
- if (argv[i][1] != '\0')
- strings_processed = 1, add_path (argv[i] + 1, BRACKET, false);
- else if (i + 1 == argc)
- strings_processed = 0;
- else
- strings_processed = 2, add_path (argv[i + 1], BRACKET, false);
+ if (argv[i][1] == 'I')
+ {
+ if (argv[i][2] != '\0')
+ {
+ strings_processed = 1;
+ add_path (xstrdup (argv[i] + 2), BRACKET, false);
+ }
+ else if (i + 1 != argc)
+ {
+ strings_processed = 2;
+ add_path (xstrdup (argv[i + 1]), BRACKET, false);
+ }
+ }
+ else if (argv[i][1] == 'D')
+ {
+ if (argv[i][2] != '\0')
+ strings_processed = 1, cpp_define (scan_in, argv[i] + 2);
+ else if (i + 1 != argc)
+ strings_processed = 2, cpp_define (scan_in, argv[i + 1]);
+ }
}
- else
- strings_processed = cpp_handle_option (scan_in, argc - i, argv + i);
if (strings_processed == 0)
break;
@@ -659,10 +679,6 @@ read_scan_file (in_fname, argc, argv)
register_include_chains (scan_in, NULL /* sysroot */, NULL /* iprefix */,
true /* stdinc */, false /* cxx_stdinc */,
false /* verbose */);
- if (! cpp_read_main_file (scan_in, in_fname, NULL))
- exit (FATAL_EXIT_CODE);
-
- cpp_finish_options (scan_in);
/* We are scanning a system header, so mark it as such. */
cpp_make_system_header (scan_in, 1, 0);
diff --git a/gcc/fixinc/check.tpl b/gcc/fixinc/check.tpl
index 1f796fe8fd1..bc5e4b8732f 100644
--- a/gcc/fixinc/check.tpl
+++ b/gcc/fixinc/check.tpl
@@ -17,7 +17,7 @@ TARGET_MACHINE='*'
DESTDIR=`${PWDCMD-pwd}`/res
SRCDIR=`${PWDCMD-pwd}`/inc
FIND_BASE='.'
-VERBOSE=1
+VERBOSE=[=` echo ${VERBOSE-1} `=]
INPUT=`${PWDCMD-pwd}`
ORIGDIR=${INPUT}
diff --git a/gcc/fixinc/fixinc.dgux b/gcc/fixinc/fixinc.dgux
deleted file mode 100755
index 39a5b63f00e..00000000000
--- a/gcc/fixinc/fixinc.dgux
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/bin/sh
-#
-# modified for dgux by hassey@dg-rtp.dg.com based on
-#
-# fixinc.svr4 written by Ron Guilmette (rfg@ncd.com).
-#
-# This file is part of GNU CC.
-#
-# GNU CC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# GNU CC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU CC; see the file COPYING. If not, write to
-# the Free Software Foundation, 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-#
-#
-# See README-fixinc for more information.
-
-# Fail if no arg to specify a directory for the output.
-if [ x$1 = x ]
-then echo fixincludes: no output directory specified
-exit 1
-fi
-
-# Directory in which to store the results.
-LIB=${1?"fixincludes: output directory not specified"}
-
-# Make sure it exists.
-if [ ! -d $LIB ]; then
- mkdir $LIB || exit 1
-fi
-
-ORIG_DIR=`${PWDCMD-pwd}`
-
-# Make LIB absolute if it is relative.
-# Don't do this if not necessary, since may screw up automounters.
-case $LIB in
-/*)
- ;;
-*)
- cd $LIB; LIB=`${PWDCMD-pwd}`
- ;;
-esac
-
-echo 'Building fixincludes in ' ${LIB}
-
-# Determine whether this filesystem has symbolic links.
-if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
- rm -f $LIB/ShouldNotExist
- LINKS=true
-else
- LINKS=false
-fi
-
-echo 'Making directories:'
-# Directory containing the original header files.
-shift
-if [ $# -eq 0 ] ; then
- set /usr/include
-fi
-
-INLIST="$@"
-
-for INPUT in ${INLIST} ; do
-cd ${ORIG_DIR}
-cd ${INPUT}
-
-if $LINKS; then
- files=`ls -LR | sed -n s/:$//p`
-else
- files=`find . -type d -print | sed '/^.$/d'`
-fi
-for file in $files; do
- rm -rf $LIB/$file
- if [ ! -d $LIB/$file ]
- then mkdir $LIB/$file
- fi
-done
-
-# treetops gets an alternating list
-# of old directories to copy
-# and the new directories to copy to.
-treetops="${INPUT} ${LIB}"
-
-if $LINKS; then
- echo 'Making internal symbolic directory links'
- for file in $files; do
- dest=`ls -ld $file | sed -n 's/.*-> //p'`
- if [ "$dest" ]; then
- cwd=`${PWDCMD-pwd}`
- # In case $dest is relative, get to $file's dir first.
- cd ${INPUT}
- cd `echo ./$file | sed -n 's&[^/]*$&&p'`
- # Check that the target directory exists.
- # Redirections changed to avoid bug in sh on Ultrix.
- (cd $dest) > /dev/null 2>&1
- if [ $? = 0 ]; then
- cd $dest
- # X gets the dir that the link actually leads to.
- x=`${PWDCMD-pwd}`
- # If link leads back into ${INPUT},
- # make a similar link here.
- if expr $x : "${INPUT}/.*" > /dev/null; then
- # Y gets the actual target dir name, relative to ${INPUT}.
- y=`echo $x | sed -n "s&${INPUT}/&&p"`
- # DOTS is the relative path from ${LIB}/$file's dir back to ${LIB}.
- dots=`echo "$file" |
- sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
- echo $file '->' $dots$y ': Making link'
- rm -fr ${LIB}/$file > /dev/null 2>&1
- ln -s $dots$y ${LIB}/$file > /dev/null 2>&1
- else
- # If the link is to outside ${INPUT},
- # treat this directory as if it actually contained the files.
-# This line used to have $dest instead of $x.
-# $dest seemed to be wrong for links found in subdirectories
-# of ${INPUT}. Does this change break anything?
- treetops="$treetops $x ${LIB}/$file"
- fi
- fi
- cd $cwd
- fi
- done
-fi
-
-# Completely replace <_int_varargs.h> with a file that defines
-# va_list and gnuc_va_list
-
-file=_int_varargs.h
-if [ -r ${INPUT}/$file ]; then
- echo Replacing $file
- cat > ${LIB}/$file << EOF
-/* This file was generated by fixinc.dgux. */
-#ifndef __INT_VARARGS_H
-#define __INT_VARARGS_H
-
-#ifndef ___int_features_h
-#include <sys/_int_features.h>
-#endif
-
-#if !(defined(_VA_LIST) || defined(_VA_LIST_))
-#define _VA_LIST
-#define _VA_LIST_
-
-#ifdef __LINT__
-
-#ifdef __STDC__
-typedef void * va_list;
-#else
-typedef char * va_list;
-#endif
-
-#else
-#if _M88K_ANY
-
-#if defined(__DCC__)
-
-typedef struct {
- int next_arg;
- int *mem_ptr;
- int *reg_ptr;
-} va_list;
-
-#else /* ! defined(__DCC__) */
-
-typedef struct {
- int __va_arg; /* argument number */
- int *__va_stk; /* start of args passed on stack */
- int *__va_reg; /* start of args passed in regs */
-} va_list;
-
-#endif /* ! defined(__DCC__) */
-
-#elif _IX86_ANY
-
-#if defined(__GNUC__) || defined(__STDC__)
-typedef void * va_list;
-#else
-typedef char * va_list;
-#endif
-
-#endif /* _IX86_ANY */
-
-#endif /* __LINT__ */
-#endif /* !(defined(_VA_LIST) || defined(_VA_LIST_)) */
-#endif /* #ifndef __INT_VARARGS_H */
-
-EOF
- chmod a+r ${LIB}/$file
-fi
-
-echo 'Removing unneeded directories:'
-cd $LIB
-files=`find . -type d -print | sort -r`
-for file in $files; do
- rmdir $LIB/$file > /dev/null 2>&1
-done
-
-if $LINKS; then
- echo 'Making internal symbolic non-directory links'
- cd ${INPUT}
- files=`find . -type l -print`
- for file in $files; do
- dest=`ls -ld $file | sed -n 's/.*-> //p'`
- if expr "$dest" : '[^/].*' > /dev/null; then
- target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
- if [ -f $target ]; then
- ln -s $dest ${LIB}/$file >/dev/null 2>&1
- fi
- fi
- done
-fi
-
-done
-
-exit 0
diff --git a/gcc/fixinc/fixinc.interix b/gcc/fixinc/fixinc.interix
index d0fe4cfba78..1e5413eeb6a 100644
--- a/gcc/fixinc/fixinc.interix
+++ b/gcc/fixinc/fixinc.interix
@@ -1,165 +1,3 @@
#!/bin/sh
rm -f include/stddef.h
exit
-#
-# fixinc.interix -- Install modified versions of Interix system include
-# files.
-#
-# Based on fixinc.sco script by Ian Lance Taylor (ian@airs.com)).
-# With modifications by Douglas Rupp (drupp@cs.washington.edu)
-#
-# Copyright (C) 1999 Free Software Foundation, Inc.
-#
-# This file is part of GNU CC.
-#
-# GNU CC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# GNU CC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU CC; see the file COPYING. If not, write to
-# the Free Software Foundation, 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-#
-# ?????? fixup comment
-# This script munges the native include files provided with Windows NT
-# 3.5 SDK systems so as to provide a reasonable namespace when
-# compiling with gcc. The header files by default do not
-# provide many essential definitions and declarations if
-# __STDC__ is 1. This script modifies the header files to check
-# for __STRICT_ANSI__ being defined instead. Once munged, the
-# resulting new system include files are placed in a directory
-# that GNU C will search *before* searching the Include
-# directory.
-#
-# See README-fixinc for more information.
-
-# Fail if no arg to specify a directory for the output.
-if [ x$1 = x ]
-then echo fixincludes: no output directory specified
-exit 1
-fi
-
-# Directory in which to store the results.
-LIB=${1}
-
-# Make sure it exists.
-if [ ! -d $LIB ]; then
- mkdir $LIB || exit 1
-fi
-
-ORIG_DIR=`${PWDCMD-pwd}`
-
-# Make LIB absolute if it is relative.
-# Don't do this if not necessary, since may screw up automounters.
-case $LIB in
-/*)
- ;;
-*)
- cd $LIB; LIB=`${PWDCMD-pwd}`
- ;;
-esac
-
-echo 'Building fixincludes in ' ${LIB}
-
-# Determine whether this filesystem has symbolic links.
-if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
- rm -f $LIB/ShouldNotExist
- LINKS=true
-else
- LINKS=false
-fi
-
-echo 'Making directories:'
-# Directory containing the original header files.
-shift
-if [ $# -eq 0 ] ; then
- set /usr/include
-fi
-
-INLIST="$@"
-
-for INPUT in ${INLIST} ; do
-cd ${ORIG_DIR}
-cd ${INPUT}
-
-if $LINKS; then
- files=`ls -LR | sed -n s/:$//p`
-else
- files=`find . -type d -print | sed '/^\.$/d'`
-fi
-
-if [ "x$files" = x ]; then
- echo No files found in $INPUT\; skipped
- continue
-fi
-
-for file in $files; do
- rm -rf $LIB/$file
- if [ ! -d $LIB/$file ]
- then mkdir $LIB/$file
- fi
-done
-
-# treetops gets an alternating list
-# of old directories to copy
-# and the new directories to copy to.
-treetops="${INPUT} ${LIB}"
-
-set - $treetops
-while [ $# != 0 ]; do
- # $1 is an old directory to copy, and $2 is the new directory to copy to.
- echo "Finding header files in $1:"
- cd ${INPUT}
- cd $1
- files=`find . -name '*.[hH]' -type f -print`
- echo "Checking header files in $1; transforming into directory $2:"
- for file in $files; do
- echo " " $file
- if [ -r $file ]; then
- cp $file $2/$file >/dev/null 2>&1 || echo "Can't copy $file"
- chmod +w,a+r $2/$file
-
-# The following have been removed from the sed command below
-# because it is more useful to leave these things in.
-# The only reason to remove them was for -pedantic,
-# which isn't much of a reason. -- rms.
-# ??? above/below
-# /^[ ]*#[ ]*ident/d
-# s/!__STDC__/!defined (__STRICT_ANSI__)/g
-
- sed -e '/#[ ]*include.*[<"][A-Za-z]:\\/ s,\\,/,g' \
- -e '/#[ ]*include.*[<"][A-Za-z]:\// s,\([A-Za-z]\):/,//\1/,' \
- -e '\,#[ ]*include.*[<"]//[A-Za-z]/, y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,' \
- -e '\,#[ ]*INCLUDE.*[<"]//[A-Za-z]/, s,INCLUDE,include,' \
- $2/$file > $2/$file.sed
-
- mv $2/$file.sed $2/$file
- if cmp $file $2/$file >/dev/null 2>&1; then
- rm $2/$file
- else
- echo Fixed $file
- flip -u $2/$file
- fi
- fi
- done
- shift; shift
-done
-
-echo 'Removing unneeded directories:'
-# (Rmdir leaf to root, and if the rmdir fails, who cares....)
-cd $LIB
-files=`find . -type d -print | sort -r`
-for file in $files; do
- rmdir $LIB/$file > /dev/null 2>&1
-done
-
-done # for include directory list
-
-exit 0
diff --git a/gcc/fixinc/fixincl.c b/gcc/fixinc/fixincl.c
index 7c38637b1d0..cd3303ac349 100644
--- a/gcc/fixinc/fixincl.c
+++ b/gcc/fixinc/fixincl.c
@@ -284,6 +284,7 @@ ENV_TABLE
case 'A':
verbose_level = VERB_APPLIES; break;
+ default:
case 'p':
case 'P':
verbose_level = VERB_PROGRESS; break;
@@ -296,11 +297,14 @@ ENV_TABLE
case 'E':
verbose_level = VERB_EVERYTHING; break;
}
-
- while ((pz_find_base[0] == '.') && (pz_find_base[1] == '/'))
- pz_find_base += 2;
- if ((pz_find_base[0] != '.') || (pz_find_base[1] != NUL))
- find_base_len = strlen( pz_find_base );
+ if (verbose_level >= VERB_EVERYTHING) {
+ verbose_level = VERB_EVERYTHING;
+ fputs ("fixinc verbosity: EVERYTHING\n", stderr);
+ }
+ while ((pz_find_base[0] == '.') && (pz_find_base[1] == '/'))
+ pz_find_base += 2;
+ if ((pz_find_base[0] != '.') || (pz_find_base[1] != NUL))
+ find_base_len = strlen( pz_find_base );
/* Compile all the regular expressions now.
That way, it is done only once for the whole run.
diff --git a/gcc/fixinc/fixincl.x b/gcc/fixinc/fixincl.x
index 10a1c1690ea..80e489af9db 100644
--- a/gcc/fixinc/fixincl.x
+++ b/gcc/fixinc/fixincl.x
@@ -5,7 +5,7 @@
* files which are fixed to work correctly with ANSI C and placed in a
* directory that GNU C will search.
*
- * This file contains 147 fixup descriptions.
+ * This file contains 149 fixup descriptions.
*
* See README for more information.
*
@@ -1117,6 +1117,46 @@ static const char* apzBadquotePatch[] = {
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Bsd_Stdio_Attrs_Conflict fix
+ */
+tSCC zBsd_Stdio_Attrs_ConflictName[] =
+ "bsd_stdio_attrs_conflict";
+
+/*
+ * File name selection pattern
+ */
+tSCC zBsd_Stdio_Attrs_ConflictList[] =
+ "|stdio.h|";
+/*
+ * Machine/OS name selection pattern
+ */
+tSCC* apzBsd_Stdio_Attrs_ConflictMachs[] = {
+ "*-*-*bsd*",
+ "*-*-*darwin*",
+ (const char*)NULL };
+
+/*
+ * content selection pattern - do fix if pattern found
+ */
+tSCC zBsd_Stdio_Attrs_ConflictSelect0[] =
+ "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
+
+#define BSD_STDIO_ATTRS_CONFLICT_TEST_CT 1
+static tTestDesc aBsd_Stdio_Attrs_ConflictTests[] = {
+ { TT_EGREP, zBsd_Stdio_Attrs_ConflictSelect0, (regex_t*)NULL }, };
+
+/*
+ * Fix Command Arguments for Bsd_Stdio_Attrs_Conflict
+ */
+static const char* apzBsd_Stdio_Attrs_ConflictPatch[] = {
+ "format",
+ "#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)\n\
+#define _BSD_STRINGX(_BSD_X) #_BSD_X\n\
+int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) \"__svfscanf\");",
+ (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Broken_Assert_Stdio fix
*/
tSCC zBroken_Assert_StdioName[] =
@@ -2338,6 +2378,46 @@ static const char* apzIp_Missing_SemiPatch[] = { "sed",
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
+ * Description of Irix___Restrict fix
+ */
+tSCC zIrix___RestrictName[] =
+ "irix___restrict";
+
+/*
+ * File name selection pattern
+ */
+tSCC zIrix___RestrictList[] =
+ "|internal/sgimacros.h|";
+/*
+ * Machine/OS name selection pattern
+ */
+tSCC* apzIrix___RestrictMachs[] = {
+ "mips-sgi-irix6.5",
+ (const char*)NULL };
+
+/*
+ * content selection pattern - do fix if pattern found
+ */
+tSCC zIrix___RestrictSelect0[] =
+ "(#ifdef __c99\n\
+)(#[ \t]*define __restrict restrict)";
+
+#define IRIX___RESTRICT_TEST_CT 1
+static tTestDesc aIrix___RestrictTests[] = {
+ { TT_EGREP, zIrix___RestrictSelect0, (regex_t*)NULL }, };
+
+/*
+ * Fix Command Arguments for Irix___Restrict
+ */
+static const char* apzIrix___RestrictPatch[] = {
+ "format",
+ "%1# ifndef __cplusplus\n\
+%2\n\
+# endif",
+ (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
* Description of Irix_Asm_Apostrophe fix
*/
tSCC zIrix_Asm_ApostropheName[] =
@@ -2409,46 +2489,6 @@ static const char* apzIrix_Limits_ConstPatch[] = {
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
- * Description of Irix___Restrict fix
- */
-tSCC zIrix___RestrictName[] =
- "irix___restrict";
-
-/*
- * File name selection pattern
- */
-tSCC zIrix___RestrictList[] =
- "|internal/sgimacros.h|";
-/*
- * Machine/OS name selection pattern
- */
-tSCC* apzIrix___RestrictMachs[] = {
- "mips-sgi-irix6.5",
- (const char*)NULL };
-
-/*
- * content selection pattern - do fix if pattern found
- */
-tSCC zIrix___RestrictSelect0[] =
- "(#ifdef __c99\n\
-)(#[ \t]*define __restrict restrict)";
-
-#define IRIX___RESTRICT_TEST_CT 1
-static tTestDesc aIrix___RestrictTests[] = {
- { TT_EGREP, zIrix___RestrictSelect0, (regex_t*)NULL }, };
-
-/*
- * Fix Command Arguments for Irix___Restrict
- */
-static const char* apzIrix___RestrictPatch[] = {
- "format",
- "%1# ifndef __cplusplus\n\
-%2\n\
-# endif",
- (char*)NULL };
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * *
- *
* Description of Irix_Socklen_T fix
*/
tSCC zIrix_Socklen_TName[] =
@@ -3749,35 +3789,70 @@ static const char* apzSco_UtimePatch[] = {
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
- * Description of Solaris_Mutex_Init fix
+ * Description of Solaris_Mutex_Init_1 fix
*/
-tSCC zSolaris_Mutex_InitName[] =
- "solaris_mutex_init";
+tSCC zSolaris_Mutex_Init_1Name[] =
+ "solaris_mutex_init_1";
/*
* File name selection pattern
*/
-tSCC zSolaris_Mutex_InitList[] =
+tSCC zSolaris_Mutex_Init_1List[] =
"|pthread.h|";
/*
* Machine/OS name selection pattern
*/
-#define apzSolaris_Mutex_InitMachs (const char**)NULL
+#define apzSolaris_Mutex_Init_1Machs (const char**)NULL
/*
* content selection pattern - do fix if pattern found
*/
-tSCC zSolaris_Mutex_InitSelect0[] =
+tSCC zSolaris_Mutex_Init_1Select0[] =
+ "@\\(#\\)pthread.h[ \t]+1.1[0-9][ \t]+9[567]/[0-9/]+ SMI";
+
+#define SOLARIS_MUTEX_INIT_1_TEST_CT 1
+static tTestDesc aSolaris_Mutex_Init_1Tests[] = {
+ { TT_EGREP, zSolaris_Mutex_Init_1Select0, (regex_t*)NULL }, };
+
+/*
+ * Fix Command Arguments for Solaris_Mutex_Init_1
+ */
+static const char* apzSolaris_Mutex_Init_1Patch[] = { "sed",
+ "-e", "/define[ \t]*PTHREAD_MUTEX_INI/s/{0, 0,/{{{0}, 0}, {{{0}}},/\n\
+/define[ \t]*PTHREAD_COND_INI/s/{0,/{{{0},0},/",
+ (char*)NULL };
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Description of Solaris_Mutex_Init_2 fix
+ */
+tSCC zSolaris_Mutex_Init_2Name[] =
+ "solaris_mutex_init_2";
+
+/*
+ * File name selection pattern
+ */
+tSCC zSolaris_Mutex_Init_2List[] =
+ "|pthread.h|";
+/*
+ * Machine/OS name selection pattern
+ */
+#define apzSolaris_Mutex_Init_2Machs (const char**)NULL
+
+/*
+ * content selection pattern - do fix if pattern found
+ */
+tSCC zSolaris_Mutex_Init_2Select0[] =
"@\\(#\\)pthread.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
-#define SOLARIS_MUTEX_INIT_TEST_CT 1
-static tTestDesc aSolaris_Mutex_InitTests[] = {
- { TT_EGREP, zSolaris_Mutex_InitSelect0, (regex_t*)NULL }, };
+#define SOLARIS_MUTEX_INIT_2_TEST_CT 1
+static tTestDesc aSolaris_Mutex_Init_2Tests[] = {
+ { TT_EGREP, zSolaris_Mutex_Init_2Select0, (regex_t*)NULL }, };
/*
- * Fix Command Arguments for Solaris_Mutex_Init
+ * Fix Command Arguments for Solaris_Mutex_Init_2
*/
-static const char* apzSolaris_Mutex_InitPatch[] = {
+static const char* apzSolaris_Mutex_Init_2Patch[] = {
"format",
"#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)\n\
%0\n\
@@ -5803,9 +5878,9 @@ static const char* apzX11_SprintfPatch[] = {
*
* List of all fixes
*/
-#define REGEX_COUNT 159
+#define REGEX_COUNT 161
#define MACH_LIST_SIZE_LIMIT 261
-#define FIX_COUNT 147
+#define FIX_COUNT 149
/*
* Enumerate the fixes
@@ -5836,6 +5911,7 @@ typedef enum {
BAD_LVAL_FIXIDX,
BAD_STRUCT_TERM_FIXIDX,
BADQUOTE_FIXIDX,
+ BSD_STDIO_ATTRS_CONFLICT_FIXIDX,
BROKEN_ASSERT_STDIO_FIXIDX,
BROKEN_ASSERT_STDLIB_FIXIDX,
BROKEN_CABS_FIXIDX,
@@ -5867,9 +5943,9 @@ typedef enum {
IO_QUOTES_DEF_FIXIDX,
IO_QUOTES_USE_FIXIDX,
IP_MISSING_SEMI_FIXIDX,
+ IRIX___RESTRICT_FIXIDX,
IRIX_ASM_APOSTROPHE_FIXIDX,
IRIX_LIMITS_CONST_FIXIDX,
- IRIX___RESTRICT_FIXIDX,
IRIX_SOCKLEN_T_FIXIDX,
IRIX_STDIO_VA_LIST_FIXIDX,
IRIX_WCSFTIME_FIXIDX,
@@ -5904,7 +5980,8 @@ typedef enum {
RS6000_PARAM_FIXIDX,
SCO_STATIC_FUNC_FIXIDX,
SCO_UTIME_FIXIDX,
- SOLARIS_MUTEX_INIT_FIXIDX,
+ SOLARIS_MUTEX_INIT_1_FIXIDX,
+ SOLARIS_MUTEX_INIT_2_FIXIDX,
SOLARIS_STDIO_TAG_FIXIDX,
SOLARIS_WIDEC_FIXIDX,
STATSSWTCH_FIXIDX,
@@ -6086,6 +6163,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
BADQUOTE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aBadquoteTests, apzBadquotePatch, 0 },
+ { zBsd_Stdio_Attrs_ConflictName, zBsd_Stdio_Attrs_ConflictList,
+ apzBsd_Stdio_Attrs_ConflictMachs,
+ BSD_STDIO_ATTRS_CONFLICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aBsd_Stdio_Attrs_ConflictTests, apzBsd_Stdio_Attrs_ConflictPatch, 0 },
+
{ zBroken_Assert_StdioName, zBroken_Assert_StdioList,
apzBroken_Assert_StdioMachs,
BROKEN_ASSERT_STDIO_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
@@ -6241,6 +6323,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
IP_MISSING_SEMI_TEST_CT, FD_MACH_ONLY,
aIp_Missing_SemiTests, apzIp_Missing_SemiPatch, 0 },
+ { zIrix___RestrictName, zIrix___RestrictList,
+ apzIrix___RestrictMachs,
+ IRIX___RESTRICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aIrix___RestrictTests, apzIrix___RestrictPatch, 0 },
+
{ zIrix_Asm_ApostropheName, zIrix_Asm_ApostropheList,
apzIrix_Asm_ApostropheMachs,
IRIX_ASM_APOSTROPHE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
@@ -6251,11 +6338,6 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
IRIX_LIMITS_CONST_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aIrix_Limits_ConstTests, apzIrix_Limits_ConstPatch, 0 },
- { zIrix___RestrictName, zIrix___RestrictList,
- apzIrix___RestrictMachs,
- IRIX___RESTRICT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
- aIrix___RestrictTests, apzIrix___RestrictPatch, 0 },
-
{ zIrix_Socklen_TName, zIrix_Socklen_TList,
apzIrix_Socklen_TMachs,
IRIX_SOCKLEN_T_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
@@ -6426,10 +6508,15 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
SCO_UTIME_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aSco_UtimeTests, apzSco_UtimePatch, 0 },
- { zSolaris_Mutex_InitName, zSolaris_Mutex_InitList,
- apzSolaris_Mutex_InitMachs,
- SOLARIS_MUTEX_INIT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
- aSolaris_Mutex_InitTests, apzSolaris_Mutex_InitPatch, 0 },
+ { zSolaris_Mutex_Init_1Name, zSolaris_Mutex_Init_1List,
+ apzSolaris_Mutex_Init_1Machs,
+ SOLARIS_MUTEX_INIT_1_TEST_CT, FD_MACH_ONLY,
+ aSolaris_Mutex_Init_1Tests, apzSolaris_Mutex_Init_1Patch, 0 },
+
+ { zSolaris_Mutex_Init_2Name, zSolaris_Mutex_Init_2List,
+ apzSolaris_Mutex_Init_2Machs,
+ SOLARIS_MUTEX_INIT_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
+ aSolaris_Mutex_Init_2Tests, apzSolaris_Mutex_Init_2Patch, 0 },
{ zSolaris_Stdio_TagName, zSolaris_Stdio_TagList,
apzSolaris_Stdio_TagMachs,
diff --git a/gcc/fixinc/inclhack.def b/gcc/fixinc/inclhack.def
index 23f4c263f13..525641231b5 100644
--- a/gcc/fixinc/inclhack.def
+++ b/gcc/fixinc/inclhack.def
@@ -724,6 +724,26 @@ fix = {
/*
+ * Various systems derived from BSD4.4 contain a macro definition
+ * for vfscanf that interacts badly with requirements of builtin-attrs.def.
+ * Known to be fixed in FreeBSD 5 system headers.
+ */
+fix = {
+ hackname = bsd_stdio_attrs_conflict;
+ mach = *-*-*bsd*;
+ mach = *-*-*darwin*;
+ files = stdio.h;
+ select = "^#define[ \t]*vfscanf[ \t]*__svfscanf[ \t]*$";
+ c_fix = format;
+ c_fix_arg = '#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)' "\n"
+ '#define _BSD_STRINGX(_BSD_X) #_BSD_X' "\n"
+ 'int vfscanf(FILE *, const char *, __builtin_va_list) '
+ '__asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");';
+ test_text = '#define vfscanf __svfscanf';
+};
+
+
+/*
* check for broken assert.h that needs stdio.h
*/
fix = {
@@ -2057,6 +2077,26 @@ fix = {
/*
+ * Sun Solaris 2.5.1, 2.6 defines PTHREAD_{MUTEX|COND}_INITIALIZER
+ * incorrectly, so we replace them with versions that correspond to
+ * the definition. We also explicitly name this fix "1" and the next
+ * fix "2" because this one does not deal with the last field. This
+ * fix needs to run before the next.
+ */
+fix = {
+ hackname = solaris_mutex_init_1;
+ select = '@\(#\)pthread.h' "[ \t]+1.1[0-9][ \t]+9[567]/[0-9/]+ SMI";
+ files = pthread.h;
+ sed = "/define[ \t]*PTHREAD_MUTEX_INI/s/{0, 0,/{{{0}, 0}, {{{0}}},/\n"
+ "/define[ \t]*PTHREAD_COND_INI/s/{0,/{{{0},0},/";
+ test_text =
+ '#ident "@(#)pthread.h 1.16 97/05/05 SMI"'"\n"
+ "#define PTHREAD_MUTEX_INITIALIZER\t{0, 0, 0}\n"
+ "#define PTHREAD_COND_INITIALIZER\t{0, 0} /* */\n";
+};
+
+
+/*
* Sun Solaris defines PTHREAD_MUTEX_INITIALIZER with a trailing
* "0" for the last field of the pthread_mutex_t structure, which is
* of type upad64_t, which itself is typedef'd to int64_t, but with
@@ -2064,7 +2104,7 @@ fix = {
* initializer to "{0}" instead
*/
fix = {
- hackname = solaris_mutex_init;
+ hackname = solaris_mutex_init_2;
select = '@\(#\)pthread.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
files = pthread.h;
c_fix = format;
diff --git a/gcc/fixinc/tests/base/pthread.h b/gcc/fixinc/tests/base/pthread.h
index 0b2afc7867f..ec7ff351f45 100644
--- a/gcc/fixinc/tests/base/pthread.h
+++ b/gcc/fixinc/tests/base/pthread.h
@@ -20,7 +20,23 @@ extern int __page_size;
#endif /* PTHREAD_PAGE_SIZE_CHECK */
-#if defined( SOLARIS_MUTEX_INIT_CHECK )
+#if defined( SOLARIS_MUTEX_INIT_1_CHECK )
+#ident "@(#)pthread.h 1.16 97/05/05 SMI"
+#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+#define PTHREAD_MUTEX_INITIALIZER {{{0}, 0}, {{{0}}}, 0}
+#else
+#define PTHREAD_MUTEX_INITIALIZER {{{0}, 0}, {{{0}}}, {0}}
+#endif
+#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
+#define PTHREAD_COND_INITIALIZER {{{0},0}, 0} /* */
+#else
+#define PTHREAD_COND_INITIALIZER {{{0},0}, {0}} /* */
+#endif
+
+#endif /* SOLARIS_MUTEX_INIT_1_CHECK */
+
+
+#if defined( SOLARIS_MUTEX_INIT_2_CHECK )
#ident "@(#)pthread.h 1.26 98/04/12 SMI"
#if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG)
#define PTHREAD_MUTEX_INITIALIZER {{{0},0}, {{{0}}}, 0}
@@ -33,7 +49,7 @@ extern int __page_size;
#define PTHREAD_COND_INITIALIZER {{{0}, 0}, {0}} /* DEFAULTCV */
#endif
#define PTHREAD_RWLOCK_INITIALIZER {0, 0, 0, {0, 0, 0}, {0, 0}, {0, 0}}
-#endif /* SOLARIS_MUTEX_INIT_CHECK */
+#endif /* SOLARIS_MUTEX_INIT_2_CHECK */
#if defined( THREAD_KEYWORD_CHECK )
diff --git a/gcc/fixinc/tests/base/stdio.h b/gcc/fixinc/tests/base/stdio.h
index bfa929fb666..d0eadbc5c63 100644
--- a/gcc/fixinc/tests/base/stdio.h
+++ b/gcc/fixinc/tests/base/stdio.h
@@ -19,6 +19,13 @@ extern int getopt(int, char *const[], const char *);
#endif /* ALPHA_GETOPT_CHECK */
+#if defined( BSD_STDIO_ATTRS_CONFLICT_CHECK )
+#define _BSD_STRING(_BSD_X) _BSD_STRINGX(_BSD_X)
+#define _BSD_STRINGX(_BSD_X) #_BSD_X
+int vfscanf(FILE *, const char *, __builtin_va_list) __asm__ (_BSD_STRING(__USER_LABEL_PREFIX__) "__svfscanf");
+#endif /* BSD_STDIO_ATTRS_CONFLICT_CHECK */
+
+
#if defined( HPUX11_VSNPRINTF_CHECK )
extern int vsnprintf(char *, _hpux_size_t, const char *, __gnuc_va_list);
#endif /* HPUX11_VSNPRINTF_CHECK */
diff --git a/gcc/fixproto b/gcc/fixproto
index 5f84880a117..8bffaa9110f 100755
--- a/gcc/fixproto
+++ b/gcc/fixproto
@@ -4,7 +4,8 @@
# fixproto TARGET-DIR SOURCE-DIR-ALL SOURCE-DIR-STD
#
# COPYRIGHT
-# Copyright (C) 1993, 1994, 1997, 1998, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1993, 1994, 1997, 1998, 2002, 2003
+# Free Software Foundation, Inc.
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
@@ -133,13 +134,6 @@ if [ `echo $* | wc -w` != 0 ] ; then
done
fi
-required_stdlib_h="abort abs atexit atof atoi atol bsearch calloc exit free getenv labs malloc putenv qsort rand realloc srand strtod strtol strtoul system"
-# "div ldiv", - ignored because these depend on div_t, ldiv_t
-# ignore these: "mblen mbstowcs mbstowc wcstombs wctomb"
-# Left out getgroups, because SunOS4 has incompatible BSD and SVR4 versions.
-# Should perhaps also add NULL
-required_unistd_h="_exit access alarm chdir chown close ctermid cuserid dup dup2 execl execle execlp execv execve execvp fork fpathconf getcwd getegid geteuid getgid getlogin getopt getpgrp getpid getppid getuid isatty link lseek pathconf pause pipe read rmdir setgid setpgid setsid setuid sleep sysconf tcgetpgrp tcsetpgrp ttyname unlink write"
-
done_dirs=""
subdirs_made=""
echo "" >fixproto.list
@@ -283,35 +277,57 @@ done
# This might be more cleanly moved into the main loop, by adding
# a <dummy> source directory at the end. FIXME!
-for rel_source_file in unistd.h stdlib.h
-do
- if grep "$rel_source_file" fixproto.list >/dev/null
- then true
+
+# All the headers we create define size_t and NULL.
+for rel_source_file in unistd.h stdlib.h string.h time.h ; do
+ if grep "$rel_source_file" fixproto.list >/dev/null ; then
+ : # It exists, we don't need to make it
else
echo Adding missing $rel_source_file
rel_source_ident=`echo $rel_source_file | tr ./ __`
- required_list=`eval echo '${required_'${rel_source_ident}'-}'`
cat >tmp.h <<EOF
+/* Fake ${rel_source_file}, created by GCC.
+ The functions declared in this file do not necessarily exist in
+ your C library. */
#ifndef __${rel_source_ident}
#define __${rel_source_ident}
-EOF
- if test $rel_source_file = stdlib.h
- then
- # Make sure it contains a definition of size_t.
- cat >>tmp.h <<EOF
+#define __need_NULL
#define __need_size_t
#include <stddef.h>
EOF
- fi
+ # Insert special stuff for particular files here.
+ case ${rel_source_file} in
+ time.h)
+ # If time.h doesn't exist, find out if sys/time.h does.
+ if test -f $src_dir_std/sys/time.h \
+ || grep "sys/time.h" fixproto.list >/dev/null ; then
+ # It does; include it and hope it has the needed declarations.
+ # Some versions require sys/types.h.
+ cat >>tmp.h <<EOF
+
+#include <sys/types.h>
+#include <sys/time.h>
+EOF
+ else
+ # It doesn't. Make up plausible definitions for time_t, clock_t.
+ # Forward-declare struct tm. Hope nobody tries to use it. (Odds
+ # are they won't.)
+ cat >>tmp.h <<EOF
+
+typedef long time_t;
+typedef long clock_t;
+struct tm;
+EOF
+ fi ;;
+ esac
cat >>tmp.h <<EOF
#endif /* __${rel_source_ident} */
EOF
${FIX_HEADER} $rel_source_file tmp.h $abs_target_dir/$rel_source_file ${DEFINES} $include_path
if test $? != 0 ; then exit 1 ; fi
- if test -f $abs_target_dir/$rel_source_file
- then
+ if test -f $abs_target_dir/$rel_source_file ; then
rm tmp.h
else
mv tmp.h $abs_target_dir/$rel_source_file
diff --git a/gcc/flags.h b/gcc/flags.h
index 4f55b898507..fb55d1f6a2c 100644
--- a/gcc/flags.h
+++ b/gcc/flags.h
@@ -476,6 +476,10 @@ extern int flag_unwind_tables;
extern int flag_asynchronous_unwind_tables;
+/* Nonzero means allow for forced unwinding. */
+
+extern int flag_forced_unwind_exceptions;
+
/* Nonzero means don't place uninitialized global data in common storage
by default. */
@@ -516,6 +520,10 @@ extern int flag_debug_asm;
extern int flag_dump_rtl_in_asm;
+/* Greater than zero if user symbols are prepended by a leading underscore
+ in generated assembly code. */
+extern int flag_leading_underscore;
+
/* -fgnu-linker specifies use of the GNU linker for initializations.
-fno-gnu-linker says that collect will be used. */
extern int flag_gnu_linker;
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 72437233293..782b3c4698b 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -116,6 +116,9 @@ static int count_cond PARAMS ((tree, int));
static tree fold_binary_op_with_conditional_arg
PARAMS ((enum tree_code, tree, tree, tree, int));
static bool fold_real_zero_addition_p PARAMS ((tree, tree, int));
+static tree fold_mathfn_compare PARAMS ((enum built_in_function,
+ enum tree_code, tree, tree, tree));
+static tree fold_inf_compare PARAMS ((enum tree_code, tree, tree, tree));
/* The following constants represent a bit based encoding of GCC's
comparison operators. This encoding simplifies transformations
@@ -4174,7 +4177,12 @@ extract_muldiv_1 (t, c, code, wide_type)
/* ... or its type is larger than ctype,
then we cannot pass through this truncation. */
|| (GET_MODE_SIZE (TYPE_MODE (ctype))
- < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))))
+ < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))
+ /* ... or signedness changes for division or modulus,
+ then we cannot pass through this conversion. */
+ || (code != MULT_EXPR
+ && (TREE_UNSIGNED (ctype)
+ != TREE_UNSIGNED (TREE_TYPE (op0))))))
break;
/* Pass the constant down and see if we can make a simplification. If
@@ -4335,14 +4343,6 @@ extract_muldiv_1 (t, c, code, wide_type)
&& integer_zerop (const_binop (TRUNC_MOD_EXPR, op1, c, 0)))
return omit_one_operand (type, integer_zero_node, op0);
- /* Arrange for the code below to simplify two constants first. */
- if (TREE_CODE (op1) == INTEGER_CST && TREE_CODE (op0) != INTEGER_CST)
- {
- tree tmp = op0;
- op0 = op1;
- op1 = tmp;
- }
-
/* ... fall through ... */
case TRUNC_DIV_EXPR: case CEIL_DIV_EXPR: case FLOOR_DIV_EXPR:
@@ -4667,6 +4667,200 @@ fold_real_zero_addition_p (type, addend, negate)
return negate && !HONOR_SIGN_DEPENDENT_ROUNDING (TYPE_MODE (type));
}
+/* Subroutine of fold() that checks comparisons of built-in math
+ functions against real constants.
+
+ FCODE is the DECL_FUNCTION_CODE of the built-in, CODE is the comparison
+ operator: EQ_EXPR, NE_EXPR, GT_EXPR, LT_EXPR, GE_EXPR or LE_EXPR. TYPE
+ is the type of the result and ARG0 and ARG1 are the operands of the
+ comparison. ARG1 must be a TREE_REAL_CST.
+
+ The function returns the constant folded tree if a simplification
+ can be made, and NULL_TREE otherwise. */
+
+static tree
+fold_mathfn_compare (fcode, code, type, arg0, arg1)
+ enum built_in_function fcode;
+ enum tree_code code;
+ tree type, arg0, arg1;
+{
+ REAL_VALUE_TYPE c;
+
+ if (fcode == BUILT_IN_SQRT
+ || fcode == BUILT_IN_SQRTF
+ || fcode == BUILT_IN_SQRTL)
+ {
+ tree arg = TREE_VALUE (TREE_OPERAND (arg0, 1));
+ enum machine_mode mode = TYPE_MODE (TREE_TYPE (arg0));
+
+ c = TREE_REAL_CST (arg1);
+ if (REAL_VALUE_NEGATIVE (c))
+ {
+ /* sqrt(x) < y is always false, if y is negative. */
+ if (code == EQ_EXPR || code == LT_EXPR || code == LE_EXPR)
+ return omit_one_operand (type,
+ convert (type, integer_zero_node),
+ arg);
+
+ /* sqrt(x) > y is always true, if y is negative and we
+ don't care about NaNs, i.e. negative values of x. */
+ if (code == NE_EXPR || !HONOR_NANS (mode))
+ return omit_one_operand (type,
+ convert (type, integer_one_node),
+ arg);
+
+ /* sqrt(x) > y is the same as x >= 0, if y is negative. */
+ return fold (build (GE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg), dconst0)));
+ }
+ else if (code == GT_EXPR || code == GE_EXPR)
+ {
+ REAL_VALUE_TYPE c2;
+
+ REAL_ARITHMETIC (c2, MULT_EXPR, c, c);
+ real_convert (&c2, mode, &c2);
+
+ if (REAL_VALUE_ISINF (c2))
+ {
+ /* sqrt(x) > y is x == +Inf, when y is very large. */
+ if (HONOR_INFINITIES (mode))
+ return fold (build (EQ_EXPR, type, arg,
+ build_real (TREE_TYPE (arg), c2)));
+
+ /* sqrt(x) > y is always false, when y is very large
+ and we don't care about infinities. */
+ return omit_one_operand (type,
+ convert (type, integer_zero_node),
+ arg);
+ }
+
+ /* sqrt(x) > c is the same as x > c*c. */
+ return fold (build (code, type, arg,
+ build_real (TREE_TYPE (arg), c2)));
+ }
+ else if (code == LT_EXPR || code == LE_EXPR)
+ {
+ REAL_VALUE_TYPE c2;
+
+ REAL_ARITHMETIC (c2, MULT_EXPR, c, c);
+ real_convert (&c2, mode, &c2);
+
+ if (REAL_VALUE_ISINF (c2))
+ {
+ /* sqrt(x) < y is always true, when y is a very large
+ value and we don't care about NaNs or Infinities. */
+ if (! HONOR_NANS (mode) && ! HONOR_INFINITIES (mode))
+ return omit_one_operand (type,
+ convert (type, integer_one_node),
+ arg);
+
+ /* sqrt(x) < y is x != +Inf when y is very large and we
+ don't care about NaNs. */
+ if (! HONOR_NANS (mode))
+ return fold (build (NE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg), c2)));
+
+ /* sqrt(x) < y is x >= 0 when y is very large and we
+ don't care about Infinities. */
+ if (! HONOR_INFINITIES (mode))
+ return fold (build (GE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg), dconst0)));
+
+ /* sqrt(x) < y is x >= 0 && x != +Inf, when y is large. */
+ if ((*lang_hooks.decls.global_bindings_p) () != 0
+ || contains_placeholder_p (arg))
+ return NULL_TREE;
+
+ arg = save_expr (arg);
+ return fold (build (TRUTH_ANDIF_EXPR, type,
+ fold (build (GE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg),
+ dconst0))),
+ fold (build (NE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg),
+ c2)))));
+ }
+
+ /* sqrt(x) < c is the same as x < c*c, if we ignore NaNs. */
+ if (! HONOR_NANS (mode))
+ return fold (build (code, type, arg,
+ build_real (TREE_TYPE (arg), c2)));
+
+ /* sqrt(x) < c is the same as x >= 0 && x < c*c. */
+ if ((*lang_hooks.decls.global_bindings_p) () == 0
+ && ! contains_placeholder_p (arg))
+ {
+ arg = save_expr (arg);
+ return fold (build (TRUTH_ANDIF_EXPR, type,
+ fold (build (GE_EXPR, type, arg,
+ build_real (TREE_TYPE (arg),
+ dconst0))),
+ fold (build (code, type, arg,
+ build_real (TREE_TYPE (arg),
+ c2)))));
+ }
+ }
+ }
+
+ return NULL_TREE;
+}
+
+/* Subroutine of fold() that optimizes comparisons against Infinities,
+ either +Inf or -Inf.
+
+ CODE is the comparison operator: EQ_EXPR, NE_EXPR, GT_EXPR, LT_EXPR,
+ GE_EXPR or LE_EXPR. TYPE is the type of the result and ARG0 and ARG1
+ are the operands of the comparison. ARG1 must be a TREE_REAL_CST.
+
+ The function returns the constant folded tree if a simplification
+ can be made, and NULL_TREE otherwise. */
+
+static tree
+fold_inf_compare (code, type, arg0, arg1)
+ enum tree_code code;
+ tree type, arg0, arg1;
+{
+ /* For negative infinity swap the sense of the comparison. */
+ if (REAL_VALUE_NEGATIVE (TREE_REAL_CST (arg1)))
+ code = swap_tree_comparison (code);
+
+ switch (code)
+ {
+ case GT_EXPR:
+ /* x > +Inf is always false, if with ignore sNANs. */
+ if (HONOR_SNANS (TYPE_MODE (TREE_TYPE (arg0))))
+ return NULL_TREE;
+ return omit_one_operand (type,
+ convert (type, integer_zero_node),
+ arg0);
+
+ case LE_EXPR:
+ /* x <= +Inf is always true, if we don't case about NaNs. */
+ if (! HONOR_NANS (TYPE_MODE (TREE_TYPE (arg0))))
+ return omit_one_operand (type,
+ convert (type, integer_one_node),
+ arg0);
+
+ /* x <= +Inf is the same as x == x, i.e. isfinite(x). */
+ if ((*lang_hooks.decls.global_bindings_p) () == 0
+ && ! contains_placeholder_p (arg0))
+ {
+ arg0 = save_expr (arg0);
+ return fold (build (EQ_EXPR, type, arg0, arg0));
+ }
+ break;
+
+ case EQ_EXPR: /* ??? x == +Inf is x > DBL_MAX */
+ case GE_EXPR: /* ??? x >= +Inf is x > DBL_MAX */
+ case LT_EXPR: /* ??? x < +Inf is x <= DBL_MAX */
+ case NE_EXPR: /* ??? x != +Inf is !(x > DBL_MAX) */
+
+ default:
+ break;
+ }
+
+ return NULL_TREE;
+}
/* Return the tree for neg (ARG0) when ARG0 is known to be either
an integer constant or real constant.
@@ -5418,8 +5612,6 @@ fold (expr)
if all operands are constant. */
int wins = 1;
- tem = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* Don't try to process an RTL_EXPR since its operands aren't trees.
Likewise for a SAVE_EXPR that's already been evaluated. */
if (code == RTL_EXPR || (code == SAVE_EXPR && SAVE_EXPR_RTL (t) != 0))
@@ -6245,6 +6437,22 @@ fold (expr)
TREE_OPERAND (arg0, 0),
TREE_OPERAND (arg1, 0))),
TREE_OPERAND (arg0, 1)));
+
+ /* Fold A - (A & B) into ~B & A. */
+ if (!TREE_SIDE_EFFECTS (arg0)
+ && TREE_CODE (arg1) == BIT_AND_EXPR)
+ {
+ if (operand_equal_p (arg0, TREE_OPERAND (arg1, 1), 0))
+ return fold (build (BIT_AND_EXPR, type,
+ fold (build1 (BIT_NOT_EXPR, type,
+ TREE_OPERAND (arg1, 0))),
+ arg0));
+ if (operand_equal_p (arg0, TREE_OPERAND (arg1, 0), 0))
+ return fold (build (BIT_AND_EXPR, type,
+ fold (build1 (BIT_NOT_EXPR, type,
+ TREE_OPERAND (arg1, 1))),
+ arg0));
+ }
}
/* See if ARG1 is zero and X - ARG1 reduces to X. */
@@ -6849,20 +7057,42 @@ fold (expr)
&& TREE_CODE (arg1) == NEGATE_EXPR)
return fold (build (code, type, TREE_OPERAND (arg1, 0),
TREE_OPERAND (arg0, 0)));
- /* (-a) CMP CST -> a swap(CMP) (-CST) */
- if (TREE_CODE (arg0) == NEGATE_EXPR && TREE_CODE (arg1) == REAL_CST)
- return
- fold (build
- (swap_tree_comparison (code), type,
- TREE_OPERAND (arg0, 0),
- build_real (TREE_TYPE (arg1),
- REAL_VALUE_NEGATE (TREE_REAL_CST (arg1)))));
- /* IEEE doesn't distinguish +0 and -0 in comparisons. */
- /* a CMP (-0) -> a CMP 0 */
- if (TREE_CODE (arg1) == REAL_CST
- && REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (arg1)))
- return fold (build (code, type, arg0,
- build_real (TREE_TYPE (arg1), dconst0)));
+
+ if (TREE_CODE (arg1) == REAL_CST)
+ {
+ REAL_VALUE_TYPE cst;
+ cst = TREE_REAL_CST (arg1);
+
+ /* (-a) CMP CST -> a swap(CMP) (-CST) */
+ if (TREE_CODE (arg0) == NEGATE_EXPR)
+ return
+ fold (build (swap_tree_comparison (code), type,
+ TREE_OPERAND (arg0, 0),
+ build_real (TREE_TYPE (arg1),
+ REAL_VALUE_NEGATE (cst))));
+
+ /* IEEE doesn't distinguish +0 and -0 in comparisons. */
+ /* a CMP (-0) -> a CMP 0 */
+ if (REAL_VALUE_MINUS_ZERO (cst))
+ return fold (build (code, type, arg0,
+ build_real (TREE_TYPE (arg1), dconst0)));
+
+ /* x != NaN is always true, other ops are always false. */
+ if (REAL_VALUE_ISNAN (cst)
+ && ! HONOR_SNANS (TYPE_MODE (TREE_TYPE (arg1))))
+ {
+ t = (code == NE_EXPR) ? integer_one_node : integer_zero_node;
+ return omit_one_operand (type, convert (type, t), arg0);
+ }
+
+ /* Fold comparisons against infinity. */
+ if (REAL_VALUE_ISINF (cst))
+ {
+ tem = fold_inf_compare (code, type, arg0, arg1);
+ if (tem != NULL_TREE)
+ return tem;
+ }
+ }
/* If this is a comparison of a real constant with a PLUS_EXPR
or a MINUS_EXPR of a real constant, we can convert it into a
@@ -6878,6 +7108,21 @@ fold (expr)
arg1, TREE_OPERAND (arg0, 1), 0))
&& ! TREE_CONSTANT_OVERFLOW (tem))
return fold (build (code, type, TREE_OPERAND (arg0, 0), tem));
+
+ /* Fold comparisons against built-in math functions. */
+ if (TREE_CODE (arg1) == REAL_CST
+ && flag_unsafe_math_optimizations
+ && ! flag_errno_math)
+ {
+ enum built_in_function fcode = builtin_mathfn_code (arg0);
+
+ if (fcode != END_BUILTINS)
+ {
+ tem = fold_mathfn_compare (fcode, code, type, arg0, arg1);
+ if (tem != NULL_TREE)
+ return tem;
+ }
+ }
}
/* Convert foo++ == CONST into ++foo == CONST + INCR.
diff --git a/gcc/function.c b/gcc/function.c
index 851dd246ee9..40186b04a99 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -70,6 +70,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
#endif
+#ifndef STACK_ALIGNMENT_NEEDED
+#define STACK_ALIGNMENT_NEEDED 1
+#endif
+
/* Some systems use __main in a way incompatible with its use in gcc, in these
cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
give the same symbol without quotes for an alternative entry point. You
@@ -291,6 +295,7 @@ static void compute_insns_for_mem PARAMS ((rtx, rtx, htab_t));
static void prepare_function_start PARAMS ((void));
static void do_clobber_return_reg PARAMS ((rtx, void *));
static void do_use_return_reg PARAMS ((rtx, void *));
+static void instantiate_virtual_regs_lossage PARAMS ((rtx));
/* Pointer to chain of `struct function' for containing functions. */
static GTY(()) struct function *outer_function_chain;
@@ -566,16 +571,27 @@ assign_stack_local_1 (mode, size, align, function)
frame_off = STARTING_FRAME_OFFSET % frame_alignment;
frame_phase = frame_off ? frame_alignment - frame_off : 0;
- /* Round frame offset to that alignment.
- We must be careful here, since FRAME_OFFSET might be negative and
- division with a negative dividend isn't as well defined as we might
- like. So we instead assume that ALIGNMENT is a power of two and
- use logical operations which are unambiguous. */
+ /* Round the frame offset to the specified alignment. The default is
+ to always honor requests to align the stack but a port may choose to
+ do its own stack alignment by defining STACK_ALIGNMENT_NEEDED. */
+ if (STACK_ALIGNMENT_NEEDED
+ || mode != BLKmode
+ || size != 0)
+ {
+ /* We must be careful here, since FRAME_OFFSET might be negative and
+ division with a negative dividend isn't as well defined as we might
+ like. So we instead assume that ALIGNMENT is a power of two and
+ use logical operations which are unambiguous. */
#ifdef FRAME_GROWS_DOWNWARD
- function->x_frame_offset = FLOOR_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase;
+ function->x_frame_offset
+ = (FLOOR_ROUND (function->x_frame_offset - frame_phase, alignment)
+ + frame_phase);
#else
- function->x_frame_offset = CEIL_ROUND (function->x_frame_offset - frame_phase, alignment) + frame_phase;
+ function->x_frame_offset
+ = (CEIL_ROUND (function->x_frame_offset - frame_phase, alignment)
+ + frame_phase);
#endif
+ }
/* On a big-endian machine, if we are allocating more space than we will use,
use the least significant bytes of those that are allocated. */
@@ -1288,12 +1304,16 @@ init_temp_slots ()
target_temp_slot_level = 0;
}
-/* Retroactively move an auto variable from a register to a stack slot.
- This is done when an address-reference to the variable is seen. */
+/* Retroactively move an auto variable from a register to a stack
+ slot. This is done when an address-reference to the variable is
+ seen. If RESCAN is true, all previously emitted instructions are
+ examined and modified to handle the fact that DECL is now
+ addressable. */
void
-put_var_into_stack (decl)
+put_var_into_stack (decl, rescan)
tree decl;
+ int rescan;
{
rtx reg;
enum machine_mode promoted_mode, decl_mode;
@@ -1368,7 +1388,7 @@ put_var_into_stack (decl)
to put things in the stack for the sake of setjmp, try to keep it
in a register until we know we actually need the address. */
if (can_use_addressof)
- gen_mem_addressof (reg, decl);
+ gen_mem_addressof (reg, decl, rescan);
else
put_reg_into_stack (function, reg, TREE_TYPE (decl), promoted_mode,
decl_mode, volatilep, 0, usedp, 0);
@@ -1415,7 +1435,7 @@ put_var_into_stack (decl)
/* Prevent sharing of rtl that might lose. */
if (GET_CODE (XEXP (reg, 0)) == PLUS)
XEXP (reg, 0) = copy_rtx (XEXP (reg, 0));
- if (usedp)
+ if (usedp && rescan)
{
schedule_fixup_var_refs (function, reg, TREE_TYPE (decl),
promoted_mode, 0);
@@ -2855,15 +2875,19 @@ static int cfa_offset;
#define ARG_POINTER_CFA_OFFSET(FNDECL) FIRST_PARM_OFFSET (FNDECL)
#endif
-/* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just had its
- address taken. DECL is the decl or SAVE_EXPR for the object stored in the
- register, for later use if we do need to force REG into the stack. REG is
- overwritten by the MEM like in put_reg_into_stack. */
+/* Build up a (MEM (ADDRESSOF (REG))) rtx for a register REG that just
+ had its address taken. DECL is the decl or SAVE_EXPR for the
+ object stored in the register, for later use if we do need to force
+ REG into the stack. REG is overwritten by the MEM like in
+ put_reg_into_stack. RESCAN is true if previously emitted
+ instructions must be rescanned and modified now that the REG has
+ been transformed. */
rtx
-gen_mem_addressof (reg, decl)
+gen_mem_addressof (reg, decl, rescan)
rtx reg;
tree decl;
+ int rescan;
{
rtx r = gen_rtx_ADDRESSOF (Pmode, gen_reg_rtx (GET_MODE (reg)),
REGNO (reg), decl);
@@ -2901,10 +2925,11 @@ gen_mem_addressof (reg, decl)
if (DECL_P (decl) && decl_rtl == reg)
SET_DECL_RTL (decl, reg);
- if (TREE_USED (decl) || (DECL_P (decl) && DECL_INITIAL (decl) != 0))
+ if (rescan
+ && (TREE_USED (decl) || (DECL_P (decl) && DECL_INITIAL (decl) != 0)))
fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type), reg, 0);
}
- else
+ else if (rescan)
fixup_var_refs (reg, GET_MODE (reg), 0, reg, 0);
return reg;
@@ -3525,6 +3550,8 @@ instantiate_virtual_regs (fndecl, insns)
|| GET_CODE (insn) == CALL_INSN)
{
instantiate_virtual_regs_1 (&PATTERN (insn), insn, 1);
+ if (INSN_DELETED_P (insn))
+ continue;
instantiate_virtual_regs_1 (&REG_NOTES (insn), NULL_RTX, 0);
/* Instantiate any virtual registers in CALL_INSN_FUNCTION_USAGE. */
if (GET_CODE (insn) == CALL_INSN)
@@ -3697,6 +3724,22 @@ instantiate_new_reg (x, poffset)
return new;
}
+
+/* Called when instantiate_virtual_regs has failed to update the instruction.
+ Usually this means that non-matching instruction has been emit, however for
+ asm statements it may be the problem in the constraints. */
+static void
+instantiate_virtual_regs_lossage (insn)
+ rtx insn;
+{
+ if (asm_noperands (PATTERN (insn)) >= 0)
+ {
+ error_for_asm (insn, "impossible constraint in `asm'");
+ delete_insn (insn);
+ }
+ else
+ abort ();
+}
/* Given a pointer to a piece of rtx and an optional pointer to the
containing object, instantiate any virtual registers present in it.
@@ -3733,6 +3776,10 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
if (x == 0)
return 1;
+ /* We may have detected and deleted invalid asm statements. */
+ if (object && INSN_P (object) && INSN_DELETED_P (object))
+ return 1;
+
code = GET_CODE (x);
/* Check for some special cases. */
@@ -3770,7 +3817,10 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
/* The only valid sources here are PLUS or REG. Just do
the simplest possible thing to handle them. */
if (GET_CODE (src) != REG && GET_CODE (src) != PLUS)
- abort ();
+ {
+ instantiate_virtual_regs_lossage (object);
+ return 1;
+ }
start_sequence ();
if (GET_CODE (src) != REG)
@@ -3786,7 +3836,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
if (! validate_change (object, &SET_SRC (x), temp, 0)
|| ! extra_insns)
- abort ();
+ instantiate_virtual_regs_lossage (object);
return 1;
}
@@ -3896,7 +3946,10 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
emit_insn_before (seq, object);
if (! validate_change (object, loc, temp, 0)
&& ! validate_replace_rtx (x, temp, object))
- abort ();
+ {
+ instantiate_virtual_regs_lossage (object);
+ return 1;
+ }
}
}
@@ -4052,7 +4105,7 @@ instantiate_virtual_regs_1 (loc, object, extra_insns)
emit_insn_before (seq, object);
if (! validate_change (object, loc, temp, 0)
&& ! validate_replace_rtx (x, temp, object))
- abort ();
+ instantiate_virtual_regs_lossage (object);
}
}
@@ -4940,7 +4993,7 @@ assign_parms (fndecl)
stack. So, we go back to that sequence, just so that
the fixups will happen. */
push_to_sequence (conversion_insns);
- put_var_into_stack (parm);
+ put_var_into_stack (parm, /*rescan=*/true);
conversion_insns = get_insns ();
end_sequence ();
}
@@ -4994,30 +5047,32 @@ assign_parms (fndecl)
SET_DECL_RTL (parm, stack_parm);
}
-
- /* If this "parameter" was the place where we are receiving the
- function's incoming structure pointer, set up the result. */
- if (parm == function_result_decl)
- {
- tree result = DECL_RESULT (fndecl);
- rtx addr = DECL_RTL (parm);
- rtx x;
-
-#ifdef POINTERS_EXTEND_UNSIGNED
- if (GET_MODE (addr) != Pmode)
- addr = convert_memory_address (Pmode, addr);
-#endif
-
- x = gen_rtx_MEM (DECL_MODE (result), addr);
- set_mem_attributes (x, result, 1);
- SET_DECL_RTL (result, x);
- }
}
/* Output all parameter conversion instructions (possibly including calls)
now that all parameters have been copied out of hard registers. */
emit_insn (conversion_insns);
+ /* If we are receiving a struct value address as the first argument, set up
+ the RTL for the function result. As this might require code to convert
+ the transmitted address to Pmode, we do this here to ensure that possible
+ preliminary conversions of the address have been emitted already. */
+ if (function_result_decl)
+ {
+ tree result = DECL_RESULT (fndecl);
+ rtx addr = DECL_RTL (function_result_decl);
+ rtx x;
+
+#ifdef POINTERS_EXTEND_UNSIGNED
+ if (GET_MODE (addr) != Pmode)
+ addr = convert_memory_address (Pmode, addr);
+#endif
+
+ x = gen_rtx_MEM (DECL_MODE (result), addr);
+ set_mem_attributes (x, result, 1);
+ SET_DECL_RTL (result, x);
+ }
+
last_parm_insn = get_last_insn ();
current_function_args_size = stack_args_size.constant;
@@ -5467,7 +5522,7 @@ setjmp_protect (block)
||
#endif
! DECL_REGISTER (decl)))
- put_var_into_stack (decl);
+ put_var_into_stack (decl, /*rescan=*/true);
for (sub = BLOCK_SUBBLOCKS (block); sub; sub = TREE_CHAIN (sub))
setjmp_protect (sub);
}
@@ -5494,7 +5549,7 @@ setjmp_protect_args ()
||
#endif
! DECL_REGISTER (decl)))
- put_var_into_stack (decl);
+ put_var_into_stack (decl, /*rescan=*/true);
}
/* Return the context-pointer register corresponding to DECL,
@@ -6055,7 +6110,7 @@ get_block_vector (block, n_blocks_p)
return block_vector;
}
-static int next_block_index = 2;
+static GTY(()) int next_block_index = 2;
/* Set BLOCK_NUMBER for all the blocks in FN. */
@@ -7586,19 +7641,8 @@ thread_prologue_and_epilogue_insns (f)
that with a conditional return instruction. */
else if (condjump_p (jump))
{
- rtx ret, *loc;
-
- ret = SET_SRC (PATTERN (jump));
- if (GET_CODE (XEXP (ret, 1)) == LABEL_REF)
- loc = &XEXP (ret, 1);
- else
- loc = &XEXP (ret, 2);
- ret = gen_rtx_RETURN (VOIDmode);
-
- if (! validate_change (jump, loc, ret, 0))
+ if (! redirect_jump (jump, 0, 0))
continue;
- if (JUMP_LABEL (jump))
- LABEL_NUSES (JUMP_LABEL (jump))--;
/* If this block has only one successor, it both jumps
and falls through to the fallthru block, so we can't
diff --git a/gcc/function.h b/gcc/function.h
index 5d4258ffe5b..6a6977e742f 100644
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -378,6 +378,8 @@ struct function GTY(())
int stack_alignment_needed;
/* Preferred alignment of the end of stack frame. */
int preferred_stack_boundary;
+ /* Set when the call to function itself has been emit. */
+ bool recursive_call_emit;
/* Language-specific code can use this to store whatever it likes. */
struct language_function * language;
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 6662787fb5e..430d47886d2 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -202,7 +202,11 @@ static int report_times;
/* Nonzero means place this string before uses of /, so that include
and library files can be found in an alternate location. */
+#ifdef TARGET_SYSTEM_ROOT
static const char *target_system_root = TARGET_SYSTEM_ROOT;
+#else
+static const char *target_system_root = 0;
+#endif
/* Nonzero means pass the updated target_system_root to the compiler. */
@@ -462,12 +466,6 @@ or with constant text in a single argument.
%X Output the accumulated linker options specified by compilations.
%Y Output the accumulated assembler options specified by compilations.
%Z Output the accumulated preprocessor options specified by compilations.
- %v1 Substitute the major version number of GCC.
- (For version 2.5.3, this is 2.)
- %v2 Substitute the minor version number of GCC.
- (For version 2.5.3, this is 5.)
- %v3 Substitute the patch level number of GCC.
- (For version 2.5.3, this is 3.)
%a process ASM_SPEC as a spec.
This allows config.h to specify part of the spec for running as.
%A process ASM_FINAL_SPEC as a spec. A capital A is actually
@@ -752,14 +750,12 @@ static const char *trad_capable_cpp =
therefore no dependency entry, confuses make into thinking a .o
file that happens to exist is up-to-date. */
static const char *cpp_unique_options =
-"%{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{CC:%{!E:%eGNU C does not support -CC without using -E}}\
+"%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}}\
%{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*} %{P} %I\
%{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 %*}}}}}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}\
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs}\
%{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i\
%{fmudflap:-D_MUDFLAP -include mf-runtime.h}\
@@ -833,30 +829,10 @@ struct user_specs
static struct user_specs *user_specs_head, *user_specs_tail;
-/* This defines which switch letters take arguments. */
-
-#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
- ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
- || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
- || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
- || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'B' || (CHAR) == 'b')
-
#ifndef SWITCH_TAKES_ARG
#define SWITCH_TAKES_ARG(CHAR) DEFAULT_SWITCH_TAKES_ARG(CHAR)
#endif
-/* This defines which multi-letter switches take arguments. */
-
-#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
- (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
- || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
- || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
- || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
- || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
- || !strcmp (STR, "isystem") || !strcmp (STR, "-param") \
- || !strcmp (STR, "specs") \
- || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ"))
-
#ifndef WORD_SWITCH_TAKES_ARG
#define WORD_SWITCH_TAKES_ARG(STR) DEFAULT_WORD_SWITCH_TAKES_ARG (STR)
#endif
@@ -929,11 +905,11 @@ static const struct compiler default_compilers[] =
%{!E:%{!M:%{!MM:\
%{traditional|ftraditional:\
%eGNU C no longer supports -traditional without -E}\
- %{save-temps|traditional-cpp:%(trad_capable_cpp) \
- %(cpp_options) %b.i \n\
- cc1 -fpreprocessed %b.i %(cc1_options)}\
- %{!save-temps:%{!traditional-cpp:\
- cc1 %(cpp_unique_options) %(cc1_options)}}\
+ %{save-temps|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \
+ %(cpp_options) %{save-temps:%b.i} %{!save-temps:%g.i} \n\
+ cc1 -fpreprocessed %{save-temps:%b.i} %{!save-temps:%g.i} %(cc1_options)}\
+ %{!save-temps:%{!traditional-cpp:%{!no-integrated-cpp:\
+ cc1 %(cpp_unique_options) %(cc1_options)}}}\
%{!fsyntax-only:%(invoke_as)}}}}", 0},
{"-",
"%{!E:%e-E required when input is from standard input}\
@@ -1056,6 +1032,7 @@ static const struct option_map option_map[] =
{"--library-directory", "-L", "a"},
{"--machine", "-m", "aj"},
{"--machine-", "-m", "*j"},
+ {"--no-integrated-cpp", "-no-integrated-cpp", 0},
{"--no-line-commands", "-P", 0},
{"--no-precompiled-includes", "-noprecomp", 0},
{"--no-standard-includes", "-nostdinc", 0},
@@ -4263,6 +4240,9 @@ static int
do_spec_2 (spec)
const char *spec;
{
+ const char *string;
+ int result;
+
clear_args ();
arg_going = 0;
delete_this_arg = 0;
@@ -4271,7 +4251,22 @@ do_spec_2 (spec)
input_from_pipe = 0;
suffix_subst = NULL;
- return do_spec_1 (spec, 0, NULL);
+ result = do_spec_1 (spec, 0, NULL);
+
+ /* End any pending argument. */
+ if (arg_going)
+ {
+ obstack_1grow (&obstack, 0);
+ string = obstack_finish (&obstack);
+ if (this_is_library_file)
+ string = find_file (string);
+ store_arg (string, delete_this_arg, this_is_output_file);
+ if (this_is_output_file)
+ outfiles[input_file_number] = string;
+ arg_going = 0;
+ }
+
+ return result;
}
@@ -5174,18 +5169,6 @@ do_spec_1 (spec, inswitch, soft_matched_part)
p = handle_braces (p);
if (p == 0)
return -1;
- /* End any pending argument. */
- if (arg_going)
- {
- obstack_1grow (&obstack, 0);
- string = obstack_finish (&obstack);
- if (this_is_library_file)
- string = find_file (string);
- store_arg (string, delete_this_arg, this_is_output_file);
- if (this_is_output_file)
- outfiles[input_file_number] = string;
- arg_going = 0;
- }
break;
case ':':
@@ -5334,63 +5317,6 @@ do_spec_1 (spec, inswitch, soft_matched_part)
}
break;
- case 'v':
- {
- int c1 = *p++; /* Select first or second version number. */
- const char *v = compiler_version;
- const char *q;
- static const char zeroc = '0';
-
- /* The format of the version string is
- ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */
-
- /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */
- while (! ISDIGIT (*v))
- v++;
- if (v > compiler_version && v[-1] != '-')
- abort ();
-
- /* If desired, advance to second version number. */
- if (c1 >= '2')
- {
- /* Set V after the first period. */
- while (ISDIGIT (*v))
- v++;
- if (*v != '.')
- abort ();
- v++;
- }
-
- /* If desired, advance to third version number.
- But don't complain if it's not present */
- if (c1 == '3')
- {
- /* Set V after the second period. */
- while (ISDIGIT (*v))
- v++;
- if ((*v != 0) && (*v != ' ') && (*v != '.') && (*v != '-'))
- abort ();
- if (*v != 0)
- v++;
- }
-
- /* Set Q at the next period or at the end. */
- q = v;
- while (ISDIGIT (*q))
- q++;
- if (*q != 0 && q > v && *q != ' ' && *q != '.' && *q != '-')
- abort ();
-
- if (q > v)
- /* Put that part into the command. */
- obstack_grow (&obstack, v, q - v);
- else
- /* Default to "0" */
- obstack_grow (&obstack, &zeroc, 1);
- arg_going = 1;
- }
- break;
-
default:
error ("spec failure: unrecognized spec option '%c'", c);
break;
diff --git a/gcc/gcc.h b/gcc/gcc.h
index feab0ef0710..06691bd9f6b 100644
--- a/gcc/gcc.h
+++ b/gcc/gcc.h
@@ -31,6 +31,28 @@ struct spec_function
const char *(*func) PARAMS ((int, const char **));
};
+/* This defines which switch letters take arguments. */
+
+#define DEFAULT_SWITCH_TAKES_ARG(CHAR) \
+ ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o' \
+ || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \
+ || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x' \
+ || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V' \
+ || (CHAR) == 'B' || (CHAR) == 'b')
+
+/* This defines which multi-letter switches take arguments. */
+
+#define DEFAULT_WORD_SWITCH_TAKES_ARG(STR) \
+ (!strcmp (STR, "Tdata") || !strcmp (STR, "Ttext") \
+ || !strcmp (STR, "Tbss") || !strcmp (STR, "include") \
+ || !strcmp (STR, "imacros") || !strcmp (STR, "aux-info") \
+ || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
+ || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
+ || !strcmp (STR, "isystem") || !strcmp (STR, "-param") \
+ || !strcmp (STR, "specs") \
+ || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ"))
+
+
/* These are exported by gcc.c. */
extern int do_spec PARAMS ((const char *));
extern void record_temp_file PARAMS ((const char *, int, int));
diff --git a/gcc/gcov-io.h b/gcc/gcov-io.h
index ce29f67c8cb..14dc5842ad1 100644
--- a/gcc/gcov-io.h
+++ b/gcc/gcov-io.h
@@ -90,6 +90,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
bbg: function-graph*
function-graph: announce_function basic_blocks {arcs | lines}*
announce_function: header string:name int32:checksum
+ string:source int32:lineno
basic_block: header int32:flags*
arcs: header int32:block_no arc*
arc: int32:dest_block int32:flags
@@ -121,7 +122,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
summary: in32:checksum int32:runs int32:arcs int64:sum int64:max \
int64:max_sum int64:sum_max
- The ANNOUNCE_FUNCTION record is the same as that in the BBG file.
+ The ANNOUNCE_FUNCTION record is the same as that in the BBG file,
+ but without the source location.
The ARC_COUNTS gives the counter values for those arcs that are
instrumented. The SUMMARY records give information about the whole
object file and about the whole program. The checksum is used for
@@ -195,7 +197,7 @@ typedef long long gcov_type;
(GCOV_TAG_MASK (TAG) > GCOV_TAG_MASK (SUB))
/* Basic block flags. */
-#define GCOV_BLOCK_UNEXPECTED (1 << 0)
+#define GCOV_BLOCK_UNEXPECTED (1 << 1)
/* Arc flags. */
#define GCOV_ARC_ON_TREE (1 << 0)
@@ -302,18 +304,27 @@ static int gcov_write_summary PARAMS ((FILE *, unsigned,
ATTRIBUTE_UNUSED;
#endif
#define gcov_save_position(STREAM) \
- ftell (STREAM)
+ da_file_position (STREAM)
#define gcov_reserve_length(STREAM) \
- (gcov_write_unsigned (STREAM, 0) ? 0 : ftell (STREAM) - 4)
+ (gcov_write_unsigned (STREAM, 0) ? 0 : da_file_position (STREAM) - 4)
static int gcov_write_length PARAMS((FILE *, long))
ATTRIBUTE_UNUSED;
#define gcov_resync(STREAM, BASE, LENGTH) \
- fseek (STREAM, BASE + (long)LENGTH, SEEK_SET)
+ da_file_seek (STREAM, BASE + (long)LENGTH, SEEK_SET)
#define gcov_skip(STREAM, LENGTH) \
- fseek (STREAM, LENGTH, SEEK_CUR)
+ da_file_seek (STREAM, LENGTH, SEEK_CUR)
#define gcov_skip_string(STREAM, LENGTH) \
- fseek (STREAM, (LENGTH) + 4 - ((LENGTH) & 3), SEEK_CUR)
-
+ da_file_seek (STREAM, (LENGTH) + 4 - ((LENGTH) & 3), SEEK_CUR)
+#if IN_LIBGCC2
+static FILE *da_file_open PARAMS ((const char *, int *));
+static int da_file_close PARAMS ((void));
+static int da_file_eof PARAMS ((void));
+static int da_file_error PARAMS ((void));
+#endif
+static unsigned long da_file_position PARAMS ((FILE *));
+static int da_file_seek PARAMS ((FILE *, long, int));
+static size_t da_file_write PARAMS ((const void *, size_t, size_t, FILE *));
+static size_t da_file_read PARAMS ((void *, size_t, size_t, FILE *));
/* Write VALUE to coverage file FILE. Return nonzero if failed due to
file i/o error, or value error. */
@@ -332,7 +343,7 @@ gcov_write_unsigned (file, value)
value >>= 8;
}
return ((sizeof (value) > sizeof (buffer) && value)
- || fwrite (buffer, sizeof (buffer), 1, file) != 1);
+ || da_file_write (buffer, 1, sizeof (buffer), file) != sizeof (buffer));
}
/* Write VALUE to coverage file FILE. Return nonzero if failed due to
@@ -353,7 +364,7 @@ gcov_write_counter (file, value)
value >>= 8;
}
return ((sizeof (value) > sizeof (buffer) && value != 0 && value != -1)
- || fwrite (buffer, sizeof (buffer), 1, file) != 1);
+ || da_file_write (buffer, 1, sizeof (buffer), file) != sizeof (buffer));
}
/* Write VALUE to coverage file FILE. Return nonzero if failed due to
@@ -366,11 +377,12 @@ gcov_write_string (file, string, length)
const char *string;
{
unsigned pad = 0;
+ unsigned rem = 4 - (length & 3);
if (string)
return (gcov_write_unsigned (file, length)
- || fwrite (string, length, 1, file) != 1
- || fwrite (&pad, 4 - (length & 3), 1, file) != 1);
+ || da_file_write (string, 1, length, file) != length
+ || da_file_write (&pad, 1, rem, file) != rem);
else
return gcov_write_unsigned (file, 0);
}
@@ -387,7 +399,7 @@ gcov_read_unsigned (file, value_p)
unsigned ix;
unsigned char buffer[4];
- if (fread (buffer, sizeof (buffer), 1, file) != 1)
+ if (da_file_read (buffer, 1, sizeof (buffer), file) != sizeof (buffer))
return 1;
for (ix = sizeof (value); ix < sizeof (buffer); ix++)
if (buffer[ix])
@@ -413,7 +425,7 @@ gcov_read_counter (file, value_p)
unsigned ix;
unsigned char buffer[8];
- if (fread (buffer, sizeof (buffer), 1, file) != 1)
+ if (da_file_read (buffer, 1, sizeof (buffer), file) != sizeof (buffer))
return 1;
for (ix = sizeof (value); ix < sizeof (buffer); ix++)
if (buffer[ix])
@@ -457,7 +469,7 @@ gcov_read_string (file, string_p, length_p)
length += 4 - (length & 3);
*string_p = (char *) xmalloc (length);
- return fread (*string_p, length, 1, file) != 1;
+ return da_file_read (*string_p, 1, length, file) != length;
}
@@ -472,10 +484,10 @@ gcov_write_length (file, place)
FILE *file;
long place;
{
- long here = ftell (file);
- int result = (!place || fseek (file, place, SEEK_SET)
+ long here = da_file_position (file);
+ int result = (!place || da_file_seek (file, place, SEEK_SET)
|| gcov_write_unsigned (file, here - place - 4));
- if (fseek (file, here, SEEK_SET))
+ if (da_file_seek (file, here, SEEK_SET))
result = 1;
return result;
}
@@ -517,4 +529,288 @@ gcov_write_summary (da_file, tag, summary)
}
#endif
+#if IN_LIBGCC2
+/* The kernel had problems with managing a lot of small reads/writes we use;
+ the functions below are used to buffer whole file in memory, thus reading and
+ writing it only once. This should be feasible, as we have this amount
+ of memory for counters allocated anyway. */
+
+static FILE *actual_da_file;
+static unsigned long actual_da_file_position;
+static unsigned long actual_da_file_length;
+static char *actual_da_file_buffer;
+static unsigned long actual_da_file_buffer_size;
+
+/* Open the file NAME and return it; in EXISTED return 1 if it existed
+ already. */
+static FILE *
+da_file_open (name, existed)
+ const char *name;
+ int *existed;
+{
+#if defined (TARGET_HAS_F_SETLKW)
+ struct flock s_flock;
+
+ s_flock.l_type = F_WRLCK;
+ s_flock.l_whence = SEEK_SET;
+ s_flock.l_start = 0;
+ s_flock.l_len = 0; /* Until EOF. */
+ s_flock.l_pid = getpid ();
+#endif
+
+ if (actual_da_file)
+ return 0;
+ actual_da_file_position = 0;
+ if (!actual_da_file_buffer)
+ {
+ actual_da_file_buffer = malloc (1);
+ actual_da_file_buffer_size = 1;
+ }
+
+ actual_da_file = fopen (name, "r+t");
+ if (actual_da_file)
+ *existed = 1;
+ else
+ {
+ actual_da_file = fopen (name, "w+t");
+ if (actual_da_file)
+ *existed = 0;
+ else
+ return 0;
+ }
+
+#if defined (TARGET_HAS_F_SETLKW)
+ /* After a fork, another process might try to read and/or write
+ the same file simultaneously. So if we can, lock the file to
+ avoid race conditions. */
+ while (fcntl (fileno (actual_da_file), F_SETLKW, &s_flock)
+ && errno == EINTR)
+ continue;
+#endif
+
+ if (*existed)
+ {
+ if (fseek (actual_da_file, 0, SEEK_END))
+ {
+ fclose (actual_da_file);
+ actual_da_file = 0;
+ return 0;
+ }
+ actual_da_file_length = ftell (actual_da_file);
+ rewind (actual_da_file);
+ }
+ else
+ actual_da_file_length = 0;
+
+ if (actual_da_file_length > actual_da_file_buffer_size)
+ {
+ actual_da_file_buffer_size = actual_da_file_length;
+ actual_da_file_buffer = realloc (actual_da_file_buffer,
+ actual_da_file_buffer_size);
+ if (!actual_da_file_buffer)
+ {
+ fclose (actual_da_file);
+ actual_da_file = 0;
+ return 0;
+ }
+ }
+
+ if (*existed)
+ {
+ if (fread (actual_da_file_buffer, actual_da_file_length,
+ 1, actual_da_file) != 1)
+ {
+ fclose (actual_da_file);
+ actual_da_file = 0;
+ return 0;
+ }
+ rewind (actual_da_file);
+ }
+
+ return actual_da_file;
+}
+
+/* Write changes to the .da file and close it. */
+static int da_file_close ()
+{
+ if (!actual_da_file)
+ return -1;
+
+ if (fwrite (actual_da_file_buffer, actual_da_file_length,
+ 1, actual_da_file) != 1)
+ return da_file_error ();
+
+ if (fclose (actual_da_file))
+ {
+ actual_da_file = 0;
+ return -1;
+ }
+
+ actual_da_file = 0;
+ return 0;
+}
+
+/* Returns current position in .da file. */
+static unsigned long
+da_file_position (file)
+ FILE *file;
+{
+ if (file)
+ return ftell (file);
+ return actual_da_file_position;
+}
+
+/* Tests whether we have reached end of .da file. */
+static int
+da_file_eof ()
+{
+ return actual_da_file_position == actual_da_file_length;
+}
+
+/* Change position in the .da file. */
+static int
+da_file_seek (file, pos, whence)
+ FILE *file;
+ long pos;
+ int whence;
+{
+ if (file)
+ return fseek (file, pos, whence);
+
+ if (!actual_da_file)
+ return -1;
+
+ switch (whence)
+ {
+ case SEEK_CUR:
+ if (pos < 0 && (unsigned long) -pos > actual_da_file_position)
+ return da_file_error ();
+
+ actual_da_file_position += pos;
+ break;
+ case SEEK_SET:
+ actual_da_file_position = pos;
+ break;
+ case SEEK_END:
+ if ((unsigned long) -pos > actual_da_file_length)
+ return da_file_error ();
+ actual_da_file_position = actual_da_file_length + pos;
+ }
+ if (actual_da_file_position > actual_da_file_length)
+ return da_file_error ();
+ return 0;
+}
+
+/* Write LEN chars of DATA to actual .da file; ELTS is expected to be 1,
+ FILE 0. */
+static size_t
+da_file_write (data, elts, len, file)
+ const void *data;
+ size_t elts;
+ size_t len;
+ FILE *file;
+{
+ size_t l = len;
+ const char *dat = data;
+
+ if (file)
+ return fwrite (data, elts, len, file);
+
+ if (elts != 1)
+ abort ();
+
+ if (!actual_da_file)
+ return -1;
+ if (actual_da_file_position + len > actual_da_file_buffer_size)
+ {
+ actual_da_file_buffer_size = 2 * (actual_da_file_position + len);
+ actual_da_file_buffer = realloc (actual_da_file_buffer,
+ actual_da_file_buffer_size);
+ if (!actual_da_file_buffer)
+ return da_file_error ();
+ }
+ while (len--)
+ actual_da_file_buffer[actual_da_file_position++] = *dat++;
+ if (actual_da_file_position > actual_da_file_length)
+ actual_da_file_length = actual_da_file_position;
+
+ return l;
+}
+
+/* Read LEN chars of DATA from actual .da file; ELTS is expected to be 1,
+ FILE 0. */
+static size_t
+da_file_read (data, elts, len, file)
+ void *data;
+ size_t elts;
+ size_t len;
+ FILE *file;
+{
+ size_t l;
+ char *dat = data;
+
+ if (file)
+ return fread (data, elts, len, file);
+
+ if (elts != 1)
+ abort ();
+
+ if (!actual_da_file)
+ return -1;
+ if (actual_da_file_position + len > actual_da_file_length)
+ len = actual_da_file_length - actual_da_file_position;
+ l = len;
+
+ while (len--)
+ *dat++ = actual_da_file_buffer[actual_da_file_position++];
+ return l;
+}
+
+/* Close the current .da file and report error. */
+static int
+da_file_error ()
+{
+ if (actual_da_file)
+ fclose (actual_da_file);
+ actual_da_file = 0;
+ return -1;
+}
+#else /* !IN_LIBGCC2 */
+static size_t
+da_file_write (data, elts, len, file)
+ const void *data;
+ size_t elts;
+ size_t len;
+ FILE *file;
+{
+ return fwrite (data, elts, len, file);
+}
+
+static size_t
+da_file_read (data, elts, len, file)
+ void *data;
+ size_t elts;
+ size_t len;
+ FILE *file;
+{
+ return fread (data, elts, len, file);
+}
+
+static unsigned long
+da_file_position (file)
+ FILE *file;
+{
+ return ftell (file);
+}
+
+static int
+da_file_seek (file, pos, whence)
+ FILE *file;
+ long pos;
+ int whence;
+{
+ return fseek (file, pos, whence);
+}
+#endif
+
#endif /* GCC_GCOV_IO_H */
diff --git a/gcc/gcov.c b/gcc/gcov.c
index dd6dfc9f0df..95968b585a6 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -69,6 +69,7 @@ typedef HOST_WIDEST_INT gcov_type;
struct function_info;
struct block_info;
+struct source_info;
/* Describes an arc between two basic blocks. */
@@ -86,9 +87,18 @@ typedef struct arc_info
unsigned int fake : 1;
unsigned int fall_through : 1;
- /* Arc to a call. */
- unsigned int is_call : 1;
-
+ /* Arc is for a function that abnormally returns. */
+ unsigned int is_call_non_return : 1;
+
+ /* Arc is for catch/setjump. */
+ unsigned int is_nonlocal_return : 1;
+
+ /* Is an unconditional branch. */
+ unsigned int is_unconditional : 1;
+
+ /* Loop making arc. */
+ unsigned int cycle : 1;
+
/* Next branch on line. */
struct arc_info *line_next;
@@ -112,17 +122,41 @@ typedef struct block_info
/* Block execution count. */
gcov_type count;
+ unsigned flags : 13;
unsigned count_valid : 1;
unsigned valid_chain : 1;
unsigned invalid_chain : 1;
- /* Array of line numbers and source files. source files are
- introduced by a linenumber of zero, the next 'line number' is the
- number of the source file. Always starts with a source file. */
- unsigned *encoding;
- unsigned num_encodings;
+ /* Block is a call instrumenting site. */
+ unsigned is_call_site : 1; /* Does the call. */
+ unsigned is_call_return : 1; /* Is the return. */
+
+ /* Block is a landing pad for longjmp or throw. */
+ unsigned is_nonlocal_return : 1;
- /* Temporary chain for solving graph. */
+ union
+ {
+ struct
+ {
+ /* Array of line numbers and source files. source files are
+ introduced by a linenumber of zero, the next 'line number' is
+ the number of the source file. Always starts with a source
+ file. */
+ unsigned *encoding;
+ unsigned num;
+ } line; /* Valid until blocks are linked onto lines */
+ struct
+ {
+ /* Single line graph cycle workspace. Used for all-blocks
+ mode. */
+ arc_t *arc;
+ unsigned ident;
+ } cycle; /* Used in all-blocks mode, after blocks are linked onto
+ lines. */
+ } u;
+
+ /* Temporary chain for solving graph, and for chaining blocks on one
+ line. */
struct block_info *chain;
} block_t;
@@ -138,10 +172,18 @@ typedef struct function_info
/* Array of basic blocks. */
block_t *blocks;
unsigned num_blocks;
+ unsigned blocks_executed;
/* Raw arc coverage counts. */
gcov_type *counts;
unsigned num_counts;
+
+ /* First line number. */
+ unsigned line;
+ struct source_info *src;
+
+ /* Next function in same source file. */
+ struct function_info *line_next;
/* Next function. */
struct function_info *next;
@@ -170,8 +212,14 @@ typedef struct coverage_info
typedef struct line_info
{
gcov_type count; /* execution count */
- arc_t *branches; /* branches from blocks that end on this
- line. */
+ union
+ {
+ arc_t *branches; /* branches from blocks that end on this
+ line. Used for branch-counts when not
+ all-blocks mode. */
+ block_t *blocks; /* blocks which start on this line. Used
+ in all-blocks mode. */
+ } u;
unsigned exists : 1;
} line_t;
@@ -189,6 +237,10 @@ typedef struct source_info
unsigned num_lines;
coverage_t coverage;
+
+ /* Functions in this source file. These are in ascending line
+ number order. */
+ function_t *functions;
/* Next source file. */
struct source_info *next;
@@ -202,6 +254,11 @@ static function_t *functions;
static source_t *sources;
+/* This holds data summary information. */
+
+static struct gcov_summary object_summary;
+static unsigned program_count;
+
/* Modification time of graph file. */
static time_t bbg_file_time;
@@ -218,6 +275,9 @@ static char *da_file_name;
static int flag_branches = 0;
+/* Show unconditional branches too. */
+static int flag_unconditional = 0;
+
/* Output a gcov file if this is true. This is on by default, and can
be turned off by the -n option. */
@@ -229,6 +289,11 @@ static int flag_gcov_file = 1;
static int flag_long_names = 0;
+/* Output count information for every basic block, not merely those
+ that contain line number information. */
+
+static int flag_all_blocks = 0;
+
/* Output summary info for each function. */
static int flag_function_summary = 0;
@@ -256,14 +321,16 @@ static void print_usage PARAMS ((int)) ATTRIBUTE_NORETURN;
static void print_version PARAMS ((void)) ATTRIBUTE_NORETURN;
static void process_file PARAMS ((const char *));
static void create_file_names PARAMS ((const char *));
+static source_t *find_source PARAMS ((char *));
static int read_graph_file PARAMS ((void));
static int read_count_file PARAMS ((void));
static void solve_flow_graph PARAMS ((function_t *));
static void add_branch_counts PARAMS ((coverage_t *, const arc_t *));
-static void add_line_counts PARAMS ((coverage_t *, const function_t *));
+static void add_line_counts PARAMS ((coverage_t *, function_t *));
static void function_summary PARAMS ((const coverage_t *, const char *));
static const char *format_gcov PARAMS ((gcov_type, gcov_type, int));
static void accumulate_line_counts PARAMS ((source_t *));
+static int output_branch_count PARAMS ((FILE *, int, const arc_t *));
static void output_lines PARAMS ((FILE *, const source_t *));
static char *make_gcov_file_name PARAMS ((const char *, const char *));
static void release_structures PARAMS ((void));
@@ -328,6 +395,7 @@ print_usage (error_p)
fnotice (file, "Print code coverage information.\n\n");
fnotice (file, " -h, --help Print this help, then exit\n");
fnotice (file, " -v, --version Print version number, then exit\n");
+ fnotice (file, " -a, --all-blocks Show information for every basic block\n");
fnotice (file, " -b, --branch-probabilities Include branch probabilities in output\n");
fnotice (file, " -c, --branch-counts Given counts of branches taken\n\
rather than percentages\n");
@@ -337,6 +405,7 @@ print_usage (error_p)
fnotice (file, " -f, --function-summaries Output summaries for each function\n");
fnotice (file, " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n");
fnotice (file, " -p, --preserve-paths Preserve all pathname components\n");
+ fnotice (file, " -u, --unconditional-branches Show unconditional branch counts too\n");
fnotice (file, "\nFor bug reporting instructions, please see:\n%s.\n",
bug_report_url);
exit (status);
@@ -365,6 +434,7 @@ static const struct option options[] =
{
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, 'v' },
+ { "all-blocks", no_argument, NULL, 'a' },
{ "branch-probabilities", no_argument, NULL, 'b' },
{ "branch-counts", no_argument, NULL, 'c' },
{ "no-output", no_argument, NULL, 'n' },
@@ -373,6 +443,7 @@ static const struct option options[] =
{ "preserve-paths", no_argument, NULL, 'p' },
{ "object-directory", required_argument, NULL, 'o' },
{ "object-file", required_argument, NULL, 'o' },
+ { "unconditional-branches", no_argument, NULL, 'u' },
};
/* Process args, return index to first non-arg. */
@@ -384,30 +455,30 @@ process_args (argc, argv)
{
int opt;
- while ((opt = getopt_long (argc, argv, "hvbclnfo:p", options, NULL)) != -1)
+ while ((opt = getopt_long (argc, argv, "abcfhlno:puv", options, NULL)) != -1)
{
switch (opt)
{
- case 'h':
- print_usage (false);
- /* print_usage will exit. */
- case 'v':
- print_version ();
- /* print_version will exit. */
+ case 'a':
+ flag_all_blocks = 1;
+ break;
case 'b':
flag_branches = 1;
break;
case 'c':
flag_counts = 1;
break;
- case 'n':
- flag_gcov_file = 0;
+ case 'f':
+ flag_function_summary = 1;
break;
+ case 'h':
+ print_usage (false);
+ /* print_usage will exit. */
case 'l':
flag_long_names = 1;
break;
- case 'f':
- flag_function_summary = 1;
+ case 'n':
+ flag_gcov_file = 0;
break;
case 'o':
object_directory = optarg;
@@ -415,6 +486,12 @@ process_args (argc, argv)
case 'p':
flag_preserve_paths = 1;
break;
+ case 'u':
+ flag_unconditional = 1;
+ break;
+ case 'v':
+ print_version ();
+ /* print_version will exit. */
default:
print_usage (true);
/* print_usage will exit. */
@@ -528,7 +605,6 @@ release_structures ()
arc_n = arc->succ_next;
free (arc);
}
- free (block->encoding);
}
free (fn->blocks);
free (fn->counts);
@@ -597,6 +673,34 @@ create_file_names (file_name)
return;
}
+/* Find or create a source file structure for FILE_NAME. Free
+ FILE_NAME appropriately */
+
+static source_t *
+find_source (file_name)
+ char *file_name;
+{
+
+ source_t *src;
+
+ for (src = sources; src; src = src->next)
+ if (!strcmp (file_name, src->name))
+ {
+ free (file_name);
+ break;
+ }
+ if (!src)
+ {
+ src = (source_t *)xcalloc (1, sizeof (source_t));
+ src->name = file_name;
+ src->coverage.name = file_name;
+ src->index = sources ? sources->index + 1 : 1;
+ src->next = sources;
+ sources = src;
+ }
+ return src;
+}
+
/* Read the graph file. Return nonzero on fatal error. */
static int
@@ -650,22 +754,45 @@ read_graph_file ()
goto corrupt;
base = gcov_save_position (file);
-
+
if (tag == GCOV_TAG_FUNCTION)
{
char *function_name = NULL;
- unsigned checksum;
+ char *function_file = NULL;
+ unsigned checksum, lineno;
+ source_t *src;
+ function_t *probe, *prev;
if (gcov_read_string (file, &function_name, NULL)
- || gcov_read_unsigned (file, &checksum))
+ || gcov_read_unsigned (file, &checksum)
+ || gcov_read_string (file, &function_file, NULL)
+ || gcov_read_unsigned (file, &lineno))
goto corrupt;
+ src = find_source (function_file);
fn = (function_t *)xcalloc (1, sizeof (function_t));
fn->name = function_name;
fn->checksum = checksum;
+ fn->src = src;
+ fn->line = lineno;
fn->next = functions;
functions = fn;
current_tag = tag;
+
+ if (lineno >= src->num_lines)
+ src->num_lines = lineno + 1;
+ /* Now insert it into the source file's list of
+ functions. Normally functions will be encountered in
+ ascending order, so a simple scan is quick. */
+ for (probe = src->functions, prev = NULL;
+ probe && probe->line > lineno;
+ prev = probe, probe = probe->line_next)
+ continue;
+ fn->line_next = probe;
+ if (prev)
+ prev->line_next = fn;
+ else
+ src->functions = fn;
}
else if (fn && tag == GCOV_TAG_BLOCKS)
{
@@ -674,9 +801,19 @@ read_graph_file ()
bbg_file_name, fn->name);
else
{
- fn->num_blocks = length / 4;
+ unsigned ix, num_blocks = length / 4;
+ fn->num_blocks = num_blocks;
+
fn->blocks
= (block_t *)xcalloc (fn->num_blocks, sizeof (block_t));
+ for (ix = 0; ix != num_blocks; ix++)
+ {
+ unsigned flags;
+
+ if (gcov_read_unsigned (file, &flags))
+ goto corrupt;
+ fn->blocks[ix].flags = flags;
+ }
}
}
else if (fn && tag == GCOV_TAG_ARCS)
@@ -717,7 +854,24 @@ read_graph_file ()
fn->blocks[dest].pred = arc;
fn->blocks[dest].num_pred++;
- arc->is_call = arc->fake;
+ if (arc->fake)
+ {
+ if (src)
+ {
+ /* Exceptional exit from this function, the
+ source block must be a call. */
+ fn->blocks[src].is_call_site = 1;
+ arc->is_call_non_return = 1;
+ }
+ else
+ {
+ /* Non-local return from a callee of this
+ function. The destination block is a catch or
+ setjmp. */
+ arc->is_nonlocal_return = 1;
+ fn->blocks[dest].is_nonlocal_return = 1;
+ }
+ }
if (!arc->on_tree)
fn->num_counts++;
@@ -731,7 +885,7 @@ read_graph_file ()
if (gcov_read_unsigned (file, &blockno)
|| blockno >= fn->num_blocks
- || fn->blocks[blockno].encoding)
+ || fn->blocks[blockno].u.line.encoding)
goto corrupt;
for (ix = 0; ; )
@@ -759,28 +913,15 @@ read_graph_file ()
goto corrupt;
if (!file_name)
break;
- for (src = sources; src; src = src->next)
- if (!strcmp (file_name, src->name))
- {
- free (file_name);
- break;
- }
- if (!src)
- {
- src = (source_t *)xcalloc (1, sizeof (source_t));
- src->name = file_name;
- src->coverage.name = file_name;
- src->index = sources ? sources->index + 1 : 1;
- src->next = sources;
- sources = src;
- }
+ src = find_source (file_name);
+
line_nos[ix++] = 0;
line_nos[ix++] = src->index;
}
}
- fn->blocks[blockno].encoding = line_nos;
- fn->blocks[blockno].num_encodings = ix;
+ fn->blocks[blockno].u.line.encoding = line_nos;
+ fn->blocks[blockno].u.line.num = ix;
}
else if (current_tag && !GCOV_TAG_IS_SUBTAG (current_tag, tag))
{
@@ -906,7 +1047,15 @@ read_count_file ()
goto cleanup;
}
base = gcov_save_position (file);
- if (tag == GCOV_TAG_FUNCTION)
+ if (tag == GCOV_TAG_OBJECT_SUMMARY)
+ {
+ if (gcov_read_summary (file, &object_summary))
+ goto corrupt;
+ }
+ else if (tag == GCOV_TAG_PROGRAM_SUMMARY
+ || tag == GCOV_TAG_INCORRECT_SUMMARY)
+ program_count++;
+ else if (tag == GCOV_TAG_FUNCTION)
{
unsigned checksum;
struct function_info *fn_n = functions;
@@ -977,6 +1126,7 @@ solve_flow_graph (fn)
unsigned ix;
arc_t *arc;
gcov_type *count_ptr = fn->counts;
+ block_t *blk;
block_t *valid_blocks = NULL; /* valid, but unpropagated blocks. */
block_t *invalid_blocks = NULL; /* invalid, but inferable blocks. */
@@ -1004,25 +1154,48 @@ solve_flow_graph (fn)
/* Propagate the measured counts, this must be done in the same
order as the code in profile.c */
- for (ix = 0; ix != fn->num_blocks; ix++)
+ for (ix = 0, blk = fn->blocks; ix != fn->num_blocks; ix++, blk++)
{
block_t const *prev_dst = NULL;
int out_of_order = 0;
+ int non_fake_succ = 0;
- for (arc = fn->blocks[ix].succ; arc; arc = arc->succ_next)
+ for (arc = blk->succ; arc; arc = arc->succ_next)
{
+ if (!arc->fake)
+ non_fake_succ++;
+
if (!arc->on_tree)
{
if (count_ptr)
arc->count = *count_ptr++;
arc->count_valid = 1;
- fn->blocks[ix].num_succ--;
+ blk->num_succ--;
arc->dst->num_pred--;
}
if (prev_dst && prev_dst > arc->dst)
out_of_order = 1;
prev_dst = arc->dst;
}
+ if (non_fake_succ == 1)
+ {
+ /* If there is only one non-fake exit, it is an
+ unconditional branch. */
+ for (arc = blk->succ; arc; arc = arc->succ_next)
+ if (!arc->fake)
+ {
+ arc->is_unconditional = 1;
+ /* If this block is instrumenting a call, it might be
+ an artifical block. It is not artificial if it has
+ a non-fallthrough exit, or the destination of this
+ arc has more than one entry. Mark the destination
+ block as a return site, if none of those conditions
+ hold. */
+ if (blk->is_call_site && arc->fall_through
+ && arc->dst->pred == arc && !arc->pred_next)
+ arc->dst->is_call_return = 1;
+ }
+ }
/* Sort the successor arcs into ascending dst order. profile.c
normally produces arcs in the right order, but sometimes with
@@ -1030,7 +1203,7 @@ solve_flow_graph (fn)
smart sort. */
if (out_of_order)
{
- arc_t *start = fn->blocks[ix].succ;
+ arc_t *start = blk->succ;
unsigned changes = 1;
while (changes)
@@ -1058,20 +1231,18 @@ solve_flow_graph (fn)
}
}
}
- fn->blocks[ix].succ = start;
+ blk->succ = start;
}
/* Place it on the invalid chain, it will be ignored if that's
wrong. */
- fn->blocks[ix].invalid_chain = 1;
- fn->blocks[ix].chain = invalid_blocks;
- invalid_blocks = &fn->blocks[ix];
+ blk->invalid_chain = 1;
+ blk->chain = invalid_blocks;
+ invalid_blocks = blk;
}
while (invalid_blocks || valid_blocks)
{
- block_t *blk;
-
while ((blk = invalid_blocks))
{
gcov_type total = 0;
@@ -1196,13 +1367,13 @@ add_branch_counts (coverage, arc)
coverage_t *coverage;
const arc_t *arc;
{
- if (arc->is_call)
+ if (arc->is_call_non_return)
{
coverage->calls++;
if (arc->src->count)
coverage->calls_executed++;
}
- else
+ else if (!arc->is_unconditional)
{
coverage->branches++;
if (arc->src->count)
@@ -1374,7 +1545,7 @@ make_gcov_file_name (input_name, src_name)
static void
add_line_counts (coverage, fn)
coverage_t *coverage;
- const function_t *fn;
+ function_t *fn;
{
unsigned ix;
line_t *line = NULL; /* this is propagated from one iteration to the
@@ -1383,13 +1554,15 @@ add_line_counts (coverage, fn)
/* Scan each basic block. */
for (ix = 0; ix != fn->num_blocks; ix++)
{
- const block_t *block = &fn->blocks[ix];
+ block_t *block = &fn->blocks[ix];
unsigned *encoding;
const source_t *src = NULL;
unsigned jx;
- for (jx = 0, encoding = block->encoding;
- jx != block->num_encodings; jx++, encoding++)
+ if (block->count && ix && ix + 1 != fn->num_blocks)
+ fn->blocks_executed++;
+ for (jx = 0, encoding = block->u.line.encoding;
+ jx != block->u.line.num; jx++, encoding++)
if (!*encoding)
{
unsigned src_n = *++encoding;
@@ -1406,26 +1579,34 @@ add_line_counts (coverage, fn)
{
if (!line->exists)
coverage->lines++;
- if (!line->count && block->count)
+ if (!line->count && block->count)
coverage->lines_executed++;
}
line->exists = 1;
line->count += block->count;
}
+ free (block->u.line.encoding);
+ block->u.cycle.arc = NULL;
+ block->u.cycle.ident = ~0U;
- if (line && flag_branches)
+ if (!ix || ix + 1 == fn->num_blocks)
+ /* Entry or exit block */;
+ else if (flag_all_blocks)
{
- arc_t *arc;
+ line_t *block_line = line ? line : &fn->src->lines[fn->line];
+ block->chain = block_line->u.blocks;
+ block_line->u.blocks = block;
+ }
+ else if (flag_branches)
+ {
+ arc_t *arc;
+
for (arc = block->succ; arc; arc = arc->succ_next)
{
- /* Ignore fall through arcs as they aren't really branches. */
- if (arc->fall_through)
- continue;
-
- arc->line_next = line->branches;
- line->branches = arc;
- if (coverage)
+ arc->line_next = line->u.branches;
+ line->u.branches = arc;
+ if (coverage && !arc->is_unconditional)
add_branch_counts (coverage, arc);
}
}
@@ -1441,22 +1622,159 @@ accumulate_line_counts (src)
source_t *src;
{
line_t *line;
+ function_t *fn, *fn_p, *fn_n;
unsigned ix;
+
+ /* Reverse the function order. */
+ for (fn = src->functions, fn_p = NULL; fn;
+ fn_p = fn, fn = fn_n)
+ {
+ fn_n = fn->line_next;
+ fn->line_next = fn_p;
+ }
+ src->functions = fn_p;
for (ix = src->num_lines, line = src->lines; ix--; line++)
{
- arc_t *arc, *arc_p, *arc_n;
-
- /* Total and reverse the branch information. */
- for (arc = line->branches, arc_p = NULL; arc; arc_p = arc, arc = arc_n)
+ if (!flag_all_blocks)
{
- arc_n = arc->line_next;
- arc->line_next = arc_p;
-
- add_branch_counts (&src->coverage, arc);
+ arc_t *arc, *arc_p, *arc_n;
+
+ /* Total and reverse the branch information. */
+ for (arc = line->u.branches, arc_p = NULL; arc;
+ arc_p = arc, arc = arc_n)
+ {
+ arc_n = arc->line_next;
+ arc->line_next = arc_p;
+
+ add_branch_counts (&src->coverage, arc);
+ }
+ line->u.branches = arc_p;
}
- line->branches = arc_p;
+ else if (line->u.blocks)
+ {
+ /* The user expects the line count to be the number of times
+ a line has been executed. Simply summing the block count
+ will give an artificially high number. The Right Thing
+ is to sum the entry counts to the graph of blocks on this
+ line, then find the elementary cycles of the local graph
+ and add the transition counts of those cycles. */
+ block_t *block, *block_p, *block_n;
+ gcov_type count = 0;
+
+ /* Reverse the block information */
+ for (block = line->u.blocks, block_p = NULL; block;
+ block_p = block, block = block_n)
+ {
+ block_n = block->chain;
+ block->chain = block_p;
+ block->u.cycle.ident = ix;
+ }
+ line->u.blocks = block_p;
+
+ /* Sum the entry arcs. */
+ for (block = line->u.blocks; block; block = block->chain)
+ {
+ arc_t *arc;
+
+ for (arc = block->pred; arc; arc = arc->pred_next)
+ {
+ if (arc->src->u.cycle.ident != ix)
+ count += arc->count;
+ if (flag_branches)
+ add_branch_counts (&src->coverage, arc);
+ }
+ }
+
+ /* Find the loops. This uses the algorithm described in
+ Tiernan 'An Efficient Search Algorithm to Find the
+ Elementary Circuits of a Graph', CACM Dec 1970. We hold
+ the P array by having each block point to the arc that
+ connects to the previous block. The H array is implicitly
+ held because of the arc ordering, and the block's
+ previous arc pointer.
+
+ Although the algorithm is O(N^3) for highly connected
+ graphs, at worst we'll have O(N^2), as most blocks have
+ only one or two exits. Most graphs will be small.
+
+ For each loop we find, locate the arc with the smallest
+ transition count, and add that to the cumulative
+ count. Remove the arc from consideration. */
+ for (block = line->u.blocks; block; block = block->chain)
+ {
+ block_t *head = block;
+ arc_t *arc;
+
+ next_vertex:;
+ arc = head->succ;
+ current_vertex:;
+ while (arc)
+ {
+ block_t *dst = arc->dst;
+ if (/* Already used that arc. */
+ arc->cycle
+ /* Not to same graph, or before first vertex. */
+ || dst->u.cycle.ident != ix
+ /* Already in path. */
+ || dst->u.cycle.arc)
+ {
+ arc = arc->succ_next;
+ continue;
+ }
+
+ if (dst == block)
+ {
+ /* Found a closing arc. */
+ gcov_type cycle_count = arc->count;
+ arc_t *cycle_arc = arc;
+ arc_t *probe_arc;
+
+ /* Locate the smallest arc count of the loop. */
+ for (dst = head; (probe_arc = dst->u.cycle.arc);
+ dst = probe_arc->src)
+ if (cycle_count > probe_arc->count)
+ {
+ cycle_count = probe_arc->count;
+ cycle_arc = probe_arc;
+ }
+
+ count += cycle_count;
+ cycle_arc->cycle = 1;
+ /* Unwind to the cyclic arc. */
+ while (head != cycle_arc->src)
+ {
+ arc = head->u.cycle.arc;
+ head = arc->src;
+ }
+ /* Move on. */
+ arc = arc->succ_next;
+ continue;
+ }
+
+ /* Add new block to chain. */
+ dst->u.cycle.arc = arc;
+ head = dst;
+ goto next_vertex;
+ }
+ /* We could not add another vertex to the path. Remove
+ the last vertex from the list. */
+ arc = head->u.cycle.arc;
+ if (arc)
+ {
+ /* It was not the first vertex. Move onto next arc. */
+ head->u.cycle.arc = NULL;
+ head = arc->src;
+ arc = arc->succ_next;
+ goto current_vertex;
+ }
+ /* Mark this block as unusable. */
+ block->u.cycle.ident = ~0U;
+ }
+ line->count = count;
+ }
+
if (line->exists)
{
src->coverage.lines++;
@@ -1466,6 +1784,50 @@ accumulate_line_counts (src)
}
}
+/* Ouput information about ARC number IX. Returns non-zero if
+ anything is output. */
+
+static int
+output_branch_count (gcov_file, ix, arc)
+ FILE *gcov_file;
+ int ix;
+ const arc_t *arc;
+{
+
+ if (arc->is_call_non_return)
+ {
+ if (arc->src->count)
+ {
+ fnotice (gcov_file, "call %2d returned %s\n", ix,
+ format_gcov (arc->src->count - arc->count,
+ arc->src->count, -flag_counts));
+ }
+ else
+ fnotice (gcov_file, "call %2d never executed\n", ix);
+ }
+ else if (!arc->is_unconditional)
+ {
+ if (arc->src->count)
+ fnotice (gcov_file, "branch %2d taken %s%s\n", ix,
+ format_gcov (arc->count, arc->src->count, -flag_counts),
+ arc->fall_through ? " (fallthrough)" : "");
+ else
+ fnotice (gcov_file, "branch %2d never executed\n", ix);
+ }
+ else if (flag_unconditional && !arc->dst->is_call_return)
+ {
+ if (arc->src->count)
+ fnotice (gcov_file, "unconditional %2d taken %s\n", ix,
+ format_gcov (arc->count, arc->src->count, -flag_counts));
+ else
+ fnotice (gcov_file, "unconditional %2d never executed\n", ix);
+ }
+ else
+ return 0;
+ return 1;
+
+}
+
/* Read in the source file one line at a time, and output that line to
the gcov file preceded by its execution count and other
information. */
@@ -1480,10 +1842,13 @@ output_lines (gcov_file, src)
const line_t *line; /* current line info ptr. */
char string[STRING_SIZE]; /* line buffer. */
char const *retval = ""; /* status of source file reading. */
+ function_t *fn = src->functions;
fprintf (gcov_file, "%9s:%5d:Source:%s\n", "-", 0, src->name);
fprintf (gcov_file, "%9s:%5d:Graph:%s\n", "-", 0, bbg_file_name);
fprintf (gcov_file, "%9s:%5d:Data:%s\n", "-", 0, da_file_name);
+ fprintf (gcov_file, "%9s:%5d:Runs:%u\n", "-", 0, object_summary.runs);
+ fprintf (gcov_file, "%9s:%5d:Programs:%u\n", "-", 0, program_count);
source_file = fopen (src->name, "r");
if (!source_file)
@@ -1508,6 +1873,25 @@ output_lines (gcov_file, src)
for (line_num = 1, line = &src->lines[line_num];
line_num < src->num_lines; line_num++, line++)
{
+ for (; fn && fn->line == line_num; fn = fn->line_next)
+ {
+ arc_t *arc = fn->blocks[fn->num_blocks - 1].pred;
+ gcov_type return_count = fn->blocks[fn->num_blocks - 1].count;
+
+ for (; arc; arc = arc->pred_next)
+ if (arc->fake)
+ return_count -= arc->count;
+
+ fprintf (gcov_file, "function %s", fn->name);
+ fprintf (gcov_file, " called %s",
+ format_gcov (fn->blocks[0].count, 0, -1));
+ fprintf (gcov_file, " returned %s",
+ format_gcov (return_count, fn->blocks[0].count, 0));
+ fprintf (gcov_file, " blocks executed %s",
+ format_gcov (fn->blocks_executed, fn->num_blocks - 2, 0));
+ fprintf (gcov_file, "\n");
+ }
+
/* For lines which don't exist in the .bb file, print '-' before
the source line. For lines which exist but were never
executed, print '#####' before the source line. Otherwise,
@@ -1535,37 +1919,34 @@ output_lines (gcov_file, src)
}
if (!retval)
fputs ("??\n", gcov_file);
-
- if (flag_branches)
+
+ if (flag_all_blocks)
{
- int ix;
+ block_t *block;
arc_t *arc;
+ int ix, jx;
- for (ix = 0, arc = line->branches; arc; arc = arc->line_next, ix++)
+ for (ix = jx = 0, block = line->u.blocks; block;
+ block = block->chain)
{
- if (arc->is_call)
- {
- if (arc->src->count)
- fnotice
- (gcov_file, "call %2d returns %s\n", ix,
- format_gcov (arc->src->count - arc->count,
- arc->src->count,
- -flag_counts));
- else
- fnotice (gcov_file, "call %2d never executed\n", ix);
- }
- else
- {
- if (arc->src->count)
- fnotice
- (gcov_file, "branch %2d taken %s\n", ix,
- format_gcov (arc->count, arc->src->count,
- -flag_counts));
- else
- fnotice (gcov_file, "branch %2d never executed\n", ix);
- }
+ if (!block->is_call_return)
+ fprintf (gcov_file, "%9s:%5u-block %2d\n",
+ !line->exists ? "-" : !block->count ? "$$$$$"
+ : format_gcov (block->count, 0, -1),
+ line_num, ix++);
+ if (flag_branches)
+ for (arc = block->succ; arc; arc = arc->succ_next)
+ jx += output_branch_count (gcov_file, jx, arc);
}
}
+ else if (flag_branches)
+ {
+ int ix;
+ arc_t *arc;
+
+ for (ix = 0, arc = line->u.branches; arc; arc = arc->line_next)
+ ix += output_branch_count (gcov_file, ix, arc);
+ }
}
/* Handle all remaining source lines. There may be lines after the
diff --git a/gcc/gcse.c b/gcc/gcse.c
index f5bb66d0053..3460a0c7cec 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -299,14 +299,6 @@ static FILE *debug_stderr;
/* An obstack for our working variables. */
static struct obstack gcse_obstack;
-/* Nonzero for each mode that supports (set (reg) (reg)).
- This is trivially true for integer and floating point values.
- It may or may not be true for condition codes. */
-static char can_copy_p[(int) NUM_MACHINE_MODES];
-
-/* Nonzero if can_copy_p has been initialized. */
-static int can_copy_init_p;
-
struct reg_use {rtx reg_rtx; };
/* Hash table of expressions. */
@@ -470,6 +462,7 @@ struct ls_expr
{
struct expr * expr; /* Gcse expression reference for LM. */
rtx pattern; /* Pattern of this mem. */
+ rtx pattern_regs; /* List of registers mentioned by the mem. */
rtx loads; /* INSN list of loads seen. */
rtx stores; /* INSN list of stores seen. */
struct ls_expr * next; /* Next in the list. */
@@ -572,6 +565,7 @@ static void hash_scan_set PARAMS ((rtx, rtx, struct hash_table *));
static void hash_scan_clobber PARAMS ((rtx, rtx, struct hash_table *));
static void hash_scan_call PARAMS ((rtx, rtx, struct hash_table *));
static int want_to_gcse_p PARAMS ((rtx));
+static bool gcse_constant_p PARAMS ((rtx));
static int oprs_unchanged_p PARAMS ((rtx, rtx, int));
static int oprs_anticipatable_p PARAMS ((rtx, rtx));
static int oprs_available_p PARAMS ((rtx, rtx));
@@ -622,6 +616,7 @@ static void find_implicit_sets PARAMS ((void));
static int one_cprop_pass PARAMS ((int, int, int));
static bool constprop_register PARAMS ((rtx, rtx, rtx, int));
static struct expr *find_bypass_set PARAMS ((int, int));
+static bool reg_killed_on_edge PARAMS ((rtx, edge));
static int bypass_block PARAMS ((basic_block, rtx, rtx));
static int bypass_conditional_jumps PARAMS ((void));
static void alloc_pre_mem PARAMS ((int, int));
@@ -686,14 +681,18 @@ static void compute_ld_motion_mems PARAMS ((void));
static void trim_ld_motion_mems PARAMS ((void));
static void update_ld_motion_stores PARAMS ((struct expr *));
static void reg_set_info PARAMS ((rtx, rtx, void *));
-static int store_ops_ok PARAMS ((rtx, basic_block));
-static void find_moveable_store PARAMS ((rtx));
+static bool store_ops_ok PARAMS ((rtx, int *));
+static rtx extract_mentioned_regs PARAMS ((rtx));
+static rtx extract_mentioned_regs_helper PARAMS ((rtx, rtx));
+static void find_moveable_store PARAMS ((rtx, int *, int *));
static int compute_store_table PARAMS ((void));
-static int load_kills_store PARAMS ((rtx, rtx));
-static int find_loads PARAMS ((rtx, rtx));
-static int store_killed_in_insn PARAMS ((rtx, rtx));
-static int store_killed_after PARAMS ((rtx, rtx, basic_block));
-static int store_killed_before PARAMS ((rtx, rtx, basic_block));
+static bool load_kills_store PARAMS ((rtx, rtx));
+static bool find_loads PARAMS ((rtx, rtx));
+static bool store_killed_in_insn PARAMS ((rtx, rtx, rtx));
+static bool store_killed_after PARAMS ((rtx, rtx, rtx, basic_block,
+ int *, rtx *));
+static bool store_killed_before PARAMS ((rtx, rtx, rtx, basic_block,
+ int *));
static void build_store_vectors PARAMS ((void));
static void insert_insn_start_bb PARAMS ((rtx, basic_block));
static int insert_store PARAMS ((struct ls_expr *, edge));
@@ -779,13 +778,6 @@ gcse_main (f, file)
return 0;
}
- /* See what modes support reg/reg copy operations. */
- if (! can_copy_init_p)
- {
- compute_can_copy ();
- can_copy_init_p = 1;
- }
-
gcc_obstack_init (&gcse_obstack);
bytes_used = 0;
@@ -909,15 +901,20 @@ gcse_main (f, file)
end_alias_analysis ();
allocate_reg_info (max_reg_num (), FALSE, FALSE);
- /* Store motion disabled until it is fixed. */
- if (0 && !optimize_size && flag_gcse_sm)
+ if (!optimize_size && flag_gcse_sm)
store_motion ();
+
/* Record where pseudo-registers are set. */
return run_jump_opt_after_gcse;
}
/* Misc. utilities. */
+/* Nonzero for each mode that supports (set (reg) (reg)).
+ This is trivially true for integer and floating point values.
+ It may or may not be true for condition codes. */
+static char can_copy[(int) NUM_MACHINE_MODES];
+
/* Compute which modes support reg/reg copy operations. */
static void
@@ -927,26 +924,43 @@ compute_can_copy ()
#ifndef AVOID_CCMODE_COPIES
rtx reg, insn;
#endif
- memset (can_copy_p, 0, NUM_MACHINE_MODES);
+ memset (can_copy, 0, NUM_MACHINE_MODES);
start_sequence ();
for (i = 0; i < NUM_MACHINE_MODES; i++)
if (GET_MODE_CLASS (i) == MODE_CC)
{
#ifdef AVOID_CCMODE_COPIES
- can_copy_p[i] = 0;
+ can_copy[i] = 0;
#else
reg = gen_rtx_REG ((enum machine_mode) i, LAST_VIRTUAL_REGISTER + 1);
insn = emit_insn (gen_rtx_SET (VOIDmode, reg, reg));
if (recog (PATTERN (insn), insn, NULL) >= 0)
- can_copy_p[i] = 1;
+ can_copy[i] = 1;
#endif
}
else
- can_copy_p[i] = 1;
+ can_copy[i] = 1;
end_sequence ();
}
+
+/* Returns whether the mode supports reg/reg copy operations. */
+
+bool
+can_copy_p (mode)
+ enum machine_mode mode;
+{
+ static bool can_copy_init_p = false;
+
+ if (! can_copy_init_p)
+ {
+ compute_can_copy ();
+ can_copy_init_p = true;
+ }
+
+ return can_copy[mode] != 0;
+}
/* Cover function to xmalloc to record bytes allocated. */
@@ -1463,7 +1477,7 @@ mems_conflict_for_gcse_p (dest, setter, data)
/* If we are setting a MEM in our list of specially recognized MEMs,
don't mark as killed this time. */
- if (dest == gcse_mem_operand && pre_ldst_mems != NULL)
+ if (expr_equiv_p (dest, gcse_mem_operand) && pre_ldst_mems != NULL)
{
if (!find_rtx_in_ldst (dest))
gcse_mems_conflict_p = 1;
@@ -2155,6 +2169,25 @@ insert_set_in_table (x, insn, table)
}
}
+/* Determine whether the rtx X should be treated as a constant for
+ the purposes of GCSE's constant propagation. */
+
+static bool
+gcse_constant_p (x)
+ rtx x;
+{
+ /* Consider a COMPARE of two integers constant. */
+ if (GET_CODE (x) == COMPARE
+ && GET_CODE (XEXP (x, 0)) == CONST_INT
+ && GET_CODE (XEXP (x, 1)) == CONST_INT)
+ return true;
+
+ if (GET_CODE (x) == CONSTANT_P_RTX)
+ return false;
+
+ return CONSTANT_P (x);
+}
+
/* Scan pattern PAT of INSN and add an entry to the hash TABLE (set or
expression one). */
@@ -2178,14 +2211,14 @@ hash_scan_set (pat, insn, table)
/* If this is a single set and we are doing constant propagation,
see if a REG_NOTE shows this equivalent to a constant. */
if (table->set_p && (note = find_reg_equal_equiv_note (insn)) != 0
- && CONSTANT_P (XEXP (note, 0)))
+ && gcse_constant_p (XEXP (note, 0)))
src = XEXP (note, 0), pat = gen_rtx_SET (VOIDmode, dest, src);
/* Only record sets of pseudo-regs in the hash table. */
if (! table->set_p
&& regno >= FIRST_PSEUDO_REGISTER
/* Don't GCSE something if we can't do a reg/reg copy. */
- && can_copy_p [GET_MODE (dest)]
+ && can_copy_p (GET_MODE (dest))
/* GCSE commonly inserts instruction after the insn. We can't
do that easily for EH_REGION notes so disable GCSE on these
for now. */
@@ -2221,10 +2254,9 @@ hash_scan_set (pat, insn, table)
&& regno >= FIRST_PSEUDO_REGISTER
&& ((GET_CODE (src) == REG
&& REGNO (src) >= FIRST_PSEUDO_REGISTER
- && can_copy_p [GET_MODE (dest)]
+ && can_copy_p (GET_MODE (dest))
&& REGNO (src) != regno)
- || (CONSTANT_P (src)
- && GET_CODE (src) != CONSTANT_P_RTX))
+ || gcse_constant_p (src))
/* A copy is not available if its src or dest is subsequently
modified. Here we want to search from INSN+1 on, but
oprs_available_p searches from INSN on. */
@@ -4015,7 +4047,7 @@ find_avail_set (regno, insn)
If the source operand changed, we may still use it for the next
iteration of this loop, but we may not use it for substitutions. */
- if (CONSTANT_P (src) || oprs_not_set_p (src, insn))
+ if (gcse_constant_p (src) || oprs_not_set_p (src, insn))
set1 = set;
/* If the source of the set is anything except a register, then
@@ -4207,7 +4239,7 @@ cprop_insn (insn, alter_jumps)
src = SET_SRC (pat);
/* Constant propagation. */
- if (CONSTANT_P (src))
+ if (gcse_constant_p (src))
{
if (constprop_register (insn, reg_used->reg_rtx, src, alter_jumps))
{
@@ -4328,8 +4360,7 @@ do_local_cprop (x, insn, alter_jumps, libcall_sp)
if (l->in_libcall)
continue;
- if (CONSTANT_P (this_rtx)
- && GET_CODE (this_rtx) != CONSTANT_P_RTX)
+ if (gcse_constant_p (this_rtx))
newcnst = this_rtx;
if (REG_P (this_rtx) && REGNO (this_rtx) >= FIRST_PSEUDO_REGISTER
/* Don't copy propagate if it has attached REG_EQUIV note.
@@ -4611,7 +4642,7 @@ find_implicit_sets ()
&& (GET_CODE (cond) == EQ || GET_CODE (cond) == NE)
&& GET_CODE (XEXP (cond, 0)) == REG
&& REGNO (XEXP (cond, 0)) >= FIRST_PSEUDO_REGISTER
- && CONSTANT_P (XEXP (cond, 1)))
+ && gcse_constant_p (XEXP (cond, 1)))
{
dest = GET_CODE (cond) == EQ ? BRANCH_EDGE (bb)->dest
: FALLTHRU_EDGE (bb)->dest;
@@ -4733,7 +4764,7 @@ find_bypass_set (regno, bb)
abort ();
src = SET_SRC (set->expr);
- if (CONSTANT_P (src))
+ if (gcse_constant_p (src))
result = set;
if (GET_CODE (src) != REG)
@@ -4745,11 +4776,35 @@ find_bypass_set (regno, bb)
}
+/* Subroutine of bypass_block that checks whether a pseudo is killed by
+ any of the instructions inserted on an edge. Jump bypassing places
+ condition code setters on CFG edges using insert_insn_on_edge. This
+ function is required to check that our data flow analysis is still
+ valid prior to commit_edge_insertions. */
+
+static bool
+reg_killed_on_edge (reg, e)
+ rtx reg;
+ edge e;
+{
+ rtx insn;
+
+ for (insn = e->insns; insn; insn = NEXT_INSN (insn))
+ if (INSN_P (insn) && reg_set_p (reg, insn))
+ return true;
+
+ return false;
+}
+
/* Subroutine of bypass_conditional_jumps that attempts to bypass the given
basic block BB which has more than one predecessor. If not NULL, SETCC
is the first instruction of BB, which is immediately followed by JUMP_INSN
JUMP. Otherwise, SETCC is NULL, and JUMP is the first insn of BB.
- Returns nonzero if a change was made. */
+ Returns nonzero if a change was made.
+
+ During the jump bypassing pass, we may place copies of SETCC instuctions
+ on CFG edges. The following routine must be careful to pay attention to
+ these inserted insns when performing its transformations. */
static int
bypass_block (bb, setcc, jump)
@@ -4757,8 +4812,9 @@ bypass_block (bb, setcc, jump)
rtx setcc, jump;
{
rtx insn, note;
- edge e, enext;
+ edge e, enext, edest;
int i, change;
+ int may_be_loop_header;
insn = (setcc != NULL) ? setcc : jump;
@@ -4769,6 +4825,14 @@ bypass_block (bb, setcc, jump)
if (note)
find_used_regs (&XEXP (note, 0), NULL);
+ may_be_loop_header = false;
+ for (e = bb->pred; e; e = e->pred_next)
+ if (e->flags & EDGE_DFS_BACK)
+ {
+ may_be_loop_header = true;
+ break;
+ }
+
change = 0;
for (e = bb->pred; e; e = enext)
{
@@ -4780,6 +4844,13 @@ bypass_block (bb, setcc, jump)
if (e->src->index >= bypass_last_basic_block)
continue;
+ /* The irreducible loops created by redirecting of edges entering the
+ loop from outside would decrease effectivity of some of the following
+ optimalizations, so prevent this. */
+ if (may_be_loop_header
+ && !(e->flags & EDGE_DFS_BACK))
+ continue;
+
for (i = 0; i < reg_use_count; i++)
{
struct reg_use *reg_used = &reg_use_table[i];
@@ -4796,6 +4867,10 @@ bypass_block (bb, setcc, jump)
if (! set)
continue;
+ /* Check the data flow is valid after edge insertions. */
+ if (e->insns && reg_killed_on_edge (reg_used->reg_rtx, e))
+ continue;
+
src = SET_SRC (pc_set (jump));
if (setcc != NULL)
@@ -4806,10 +4881,27 @@ bypass_block (bb, setcc, jump)
new = simplify_replace_rtx (src, reg_used->reg_rtx,
SET_SRC (set->expr));
+ /* Jump bypassing may have already placed instructions on
+ edges of the CFG. We can't bypass an outgoing edge that
+ has instructions associated with it, as these insns won't
+ get executed if the incoming edge is redirected. */
+
if (new == pc_rtx)
- dest = FALLTHRU_EDGE (bb)->dest;
+ {
+ edest = FALLTHRU_EDGE (bb);
+ dest = edest->insns ? NULL : edest->dest;
+ }
else if (GET_CODE (new) == LABEL_REF)
- dest = BLOCK_FOR_INSN (XEXP (new, 0));
+ {
+ dest = BLOCK_FOR_INSN (XEXP (new, 0));
+ /* Don't bypass edges containing instructions. */
+ for (edest = bb->succ; edest; edest = edest->succ_next)
+ if (edest->dest == dest && edest->insns)
+ {
+ dest = NULL;
+ break;
+ }
+ }
else
dest = NULL;
@@ -4866,6 +4958,7 @@ bypass_conditional_jumps ()
return 0;
bypass_last_basic_block = last_basic_block;
+ mark_dfs_back_edges ();
changed = 0;
FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR->next_bb->next_bb,
@@ -5403,7 +5496,7 @@ pre_insert_copy_insn (expr, insn)
if (!set)
abort ();
- new_insn = emit_insn_after (gen_move_insn (reg, SET_DEST (set)), insn);
+ new_insn = emit_insn_after (gen_move_insn (reg, copy_rtx (SET_DEST (set))), insn);
/* Keep register set table up to date. */
record_one_set (regno, new_insn);
@@ -6480,6 +6573,7 @@ ldst_entry (x)
ptr->next = pre_ldst_mems;
ptr->expr = NULL;
ptr->pattern = x;
+ ptr->pattern_regs = NULL_RTX;
ptr->loads = NULL_RTX;
ptr->stores = NULL_RTX;
ptr->reaching_reg = NULL_RTX;
@@ -6622,10 +6716,23 @@ simple_mem (x)
if (GET_MODE (x) == BLKmode)
return 0;
- if (!rtx_varies_p (XEXP (x, 0), 0))
- return 1;
+ /* If we are handling exceptions, we must be careful with memory references
+ that may trap. If we are not, the behavior is undefined, so we may just
+ continue. */
+ if (flag_non_call_exceptions && may_trap_p (x))
+ return 0;
- return 0;
+ if (side_effects_p (x))
+ return 0;
+
+ /* Do not consider function arguments passed on stack. */
+ if (reg_mentioned_p (stack_pointer_rtx, x))
+ return 0;
+
+ if (flag_float_store && FLOAT_MODE_P (GET_MODE (x)))
+ return 0;
+
+ return 1;
}
/* Make sure there isn't a buried reference in this pattern anywhere.
@@ -6838,7 +6945,7 @@ update_ld_motion_stores (expr)
fprintf (gcse_file, "\n");
}
- copy = gen_move_insn ( reg, SET_SRC (pat));
+ copy = gen_move_insn ( reg, copy_rtx (SET_SRC (pat)));
new = emit_insn_before (copy, insn);
record_one_set (REGNO (reg), new);
SET_SRC (pat) = reg;
@@ -6852,9 +6959,16 @@ update_ld_motion_stores (expr)
/* Store motion code. */
+#define ANTIC_STORE_LIST(x) ((x)->loads)
+#define AVAIL_STORE_LIST(x) ((x)->stores)
+#define LAST_AVAIL_CHECK_FAILURE(x) ((x)->reaching_reg)
+
/* This is used to communicate the target bitvector we want to use in the
reg_set_info routine when called via the note_stores mechanism. */
-static sbitmap * regvec;
+static int * regvec;
+
+/* And current insn, for the same routine. */
+static rtx compute_store_table_current_insn;
/* Used in computing the reverse edge graph bit vectors. */
static sbitmap * st_antloc;
@@ -6873,16 +6987,43 @@ reg_set_info (dest, setter, data)
dest = SUBREG_REG (dest);
if (GET_CODE (dest) == REG)
- SET_BIT (*regvec, REGNO (dest));
+ regvec[REGNO (dest)] = INSN_UID (compute_store_table_current_insn);
}
-/* Return nonzero if the register operands of expression X are killed
- anywhere in basic block BB. */
+/* Return zero if some of the registers in list X are killed
+ due to set of registers in bitmap REGS_SET. */
+
+static bool
+store_ops_ok (x, regs_set)
+ rtx x;
+ int *regs_set;
+{
+ rtx reg;
-static int
-store_ops_ok (x, bb)
+ for (; x; x = XEXP (x, 1))
+ {
+ reg = XEXP (x, 0);
+ if (regs_set[REGNO(reg)])
+ return false;
+ }
+
+ return true;
+}
+
+/* Returns a list of registers mentioned in X. */
+static rtx
+extract_mentioned_regs (x)
rtx x;
- basic_block bb;
+{
+ return extract_mentioned_regs_helper (x, NULL_RTX);
+}
+
+/* Helper for extract_mentioned_regs; ACCUM is used to accumulate used
+ registers. */
+static rtx
+extract_mentioned_regs_helper (x, accum)
+ rtx x;
+ rtx accum;
{
int i;
enum rtx_code code;
@@ -6892,15 +7033,13 @@ store_ops_ok (x, bb)
repeat:
if (x == 0)
- return 1;
+ return accum;
code = GET_CODE (x);
switch (code)
{
case REG:
- /* If a reg has changed after us in this
- block, the operand has been killed. */
- return TEST_BIT (reg_set_in_block[bb->index], REGNO (x));
+ return alloc_EXPR_LIST (0, x, accum);
case MEM:
x = XEXP (x, 0);
@@ -6910,7 +7049,8 @@ store_ops_ok (x, bb)
case PRE_INC:
case POST_DEC:
case POST_INC:
- return 0;
+ /* We do not run this function with arguments having side effects. */
+ abort ();
case PC:
case CC0: /*FIXME*/
@@ -6922,7 +7062,7 @@ store_ops_ok (x, bb)
case LABEL_REF:
case ADDR_VEC:
case ADDR_DIFF_VEC:
- return 1;
+ return accum;
default:
break;
@@ -6938,63 +7078,140 @@ store_ops_ok (x, bb)
rtx tem = XEXP (x, i);
/* If we are about to do the last recursive call
- needed at this level, change it into iteration.
- This function is called enough to be worth it. */
+ needed at this level, change it into iteration. */
if (i == 0)
{
x = tem;
goto repeat;
}
- if (! store_ops_ok (tem, bb))
- return 0;
+ accum = extract_mentioned_regs_helper (tem, accum);
}
else if (fmt[i] == 'E')
{
int j;
for (j = 0; j < XVECLEN (x, i); j++)
- {
- if (! store_ops_ok (XVECEXP (x, i, j), bb))
- return 0;
- }
+ accum = extract_mentioned_regs_helper (XVECEXP (x, i, j), accum);
}
}
- return 1;
+ return accum;
}
-/* Determine whether insn is MEM store pattern that we will consider moving. */
+/* Determine whether INSN is MEM store pattern that we will consider moving.
+ REGS_SET_BEFORE is bitmap of registers set before (and including) the
+ current insn, REGS_SET_AFTER is bitmap of registers set after (and
+ including) the insn in this basic block. We must be passing through BB from
+ head to end, as we are using this fact to speed things up.
+
+ The results are stored this way:
+
+ -- the first anticipatable expression is added into ANTIC_STORE_LIST
+ -- if the processed expression is not anticipatable, NULL_RTX is added
+ there instead, so that we can use it as indicator that no further
+ expression of this type may be anticipatable
+ -- if the expression is available, it is added as head of AVAIL_STORE_LIST;
+ consequently, all of them but this head are dead and may be deleted.
+ -- if the expression is not available, the insn due to that it fails to be
+ available is stored in reaching_reg.
+
+ The things are complicated a bit by fact that there already may be stores
+ to the same MEM from other blocks; also caller must take care of the
+ neccessary cleanup of the temporary markers after end of the basic block.
+ */
static void
-find_moveable_store (insn)
+find_moveable_store (insn, regs_set_before, regs_set_after)
rtx insn;
+ int *regs_set_before;
+ int *regs_set_after;
{
struct ls_expr * ptr;
- rtx dest = PATTERN (insn);
+ rtx dest, set, tmp;
+ int check_anticipatable, check_available;
+ basic_block bb = BLOCK_FOR_INSN (insn);
- if (GET_CODE (dest) != SET
- || GET_CODE (SET_SRC (dest)) == ASM_OPERANDS)
+ set = single_set (insn);
+ if (!set)
return;
- dest = SET_DEST (dest);
+ dest = SET_DEST (set);
if (GET_CODE (dest) != MEM || MEM_VOLATILE_P (dest)
|| GET_MODE (dest) == BLKmode)
return;
- if (GET_CODE (XEXP (dest, 0)) != SYMBOL_REF)
- return;
-
- if (rtx_varies_p (XEXP (dest, 0), 0))
+ if (side_effects_p (dest))
return;
+ /* If we are handling exceptions, we must be careful with memory references
+ that may trap. If we are not, the behavior is undefined, so we may just
+ continue. */
+ if (flag_non_call_exceptions && may_trap_p (dest))
+ return;
+
ptr = ldst_entry (dest);
- ptr->stores = alloc_INSN_LIST (insn, ptr->stores);
-}
+ if (!ptr->pattern_regs)
+ ptr->pattern_regs = extract_mentioned_regs (dest);
+
+ /* Do not check for anticipatability if we either found one anticipatable
+ store already, or tested for one and found out that it was killed. */
+ check_anticipatable = 0;
+ if (!ANTIC_STORE_LIST (ptr))
+ check_anticipatable = 1;
+ else
+ {
+ tmp = XEXP (ANTIC_STORE_LIST (ptr), 0);
+ if (tmp != NULL_RTX
+ && BLOCK_FOR_INSN (tmp) != bb)
+ check_anticipatable = 1;
+ }
+ if (check_anticipatable)
+ {
+ if (store_killed_before (dest, ptr->pattern_regs, insn, bb, regs_set_before))
+ tmp = NULL_RTX;
+ else
+ tmp = insn;
+ ANTIC_STORE_LIST (ptr) = alloc_INSN_LIST (tmp,
+ ANTIC_STORE_LIST (ptr));
+ }
-/* Perform store motion. Much like gcse, except we move expressions the
- other way by looking at the flowgraph in reverse. */
+ /* It is not neccessary to check whether store is available if we did
+ it successfully before; if we failed before, do not bother to check
+ until we reach the insn that caused us to fail. */
+ check_available = 0;
+ if (!AVAIL_STORE_LIST (ptr))
+ check_available = 1;
+ else
+ {
+ tmp = XEXP (AVAIL_STORE_LIST (ptr), 0);
+ if (BLOCK_FOR_INSN (tmp) != bb)
+ check_available = 1;
+ }
+ if (check_available)
+ {
+ /* Check that we have already reached the insn at that the check
+ failed last time. */
+ if (LAST_AVAIL_CHECK_FAILURE (ptr))
+ {
+ for (tmp = bb->end;
+ tmp != insn && tmp != LAST_AVAIL_CHECK_FAILURE (ptr);
+ tmp = PREV_INSN (tmp))
+ continue;
+ if (tmp == insn)
+ check_available = 0;
+ }
+ else
+ check_available = store_killed_after (dest, ptr->pattern_regs, insn,
+ bb, regs_set_after,
+ &LAST_AVAIL_CHECK_FAILURE (ptr));
+ }
+ if (!check_available)
+ AVAIL_STORE_LIST (ptr) = alloc_INSN_LIST (insn, AVAIL_STORE_LIST (ptr));
+}
+
+/* Find available and anticipatable stores. */
static int
compute_store_table ()
@@ -7002,7 +7219,9 @@ compute_store_table ()
int ret;
basic_block bb;
unsigned regno;
- rtx insn, pat;
+ rtx insn, pat, tmp;
+ int *last_set_in, *already_set;
+ struct ls_expr * ptr, **prev_next_ptr_ptr;
max_gcse_regno = max_reg_num ();
@@ -7010,16 +7229,55 @@ compute_store_table ()
max_gcse_regno);
sbitmap_vector_zero (reg_set_in_block, last_basic_block);
pre_ldst_mems = 0;
+ last_set_in = xmalloc (sizeof (int) * max_gcse_regno);
+ already_set = xmalloc (sizeof (int) * max_gcse_regno);
/* Find all the stores we care about. */
FOR_EACH_BB (bb)
{
- regvec = & (reg_set_in_block[bb->index]);
- for (insn = bb->end;
- insn && insn != PREV_INSN (bb->end);
- insn = PREV_INSN (insn))
+ /* First compute the registers set in this block. */
+ memset (last_set_in, 0, sizeof (int) * max_gcse_regno);
+ regvec = last_set_in;
+
+ for (insn = bb->head;
+ insn != NEXT_INSN (bb->end);
+ insn = NEXT_INSN (insn))
+ {
+ if (! INSN_P (insn))
+ continue;
+
+ if (GET_CODE (insn) == CALL_INSN)
+ {
+ bool clobbers_all = false;
+#ifdef NON_SAVING_SETJMP
+ if (NON_SAVING_SETJMP
+ && find_reg_note (insn, REG_SETJMP, NULL_RTX))
+ clobbers_all = true;
+#endif
+
+ for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+ if (clobbers_all
+ || TEST_HARD_REG_BIT (regs_invalidated_by_call, regno))
+ last_set_in[regno] = INSN_UID (insn);
+ }
+
+ pat = PATTERN (insn);
+ compute_store_table_current_insn = insn;
+ note_stores (pat, reg_set_info, NULL);
+ }
+
+ /* Record the set registers. */
+ for (regno = 0; regno < max_gcse_regno; regno++)
+ if (last_set_in[regno])
+ SET_BIT (reg_set_in_block[bb->index], regno);
+
+ /* Now find the stores. */
+ memset (already_set, 0, sizeof (int) * max_gcse_regno);
+ regvec = already_set;
+ for (insn = bb->head;
+ insn != NEXT_INSN (bb->end);
+ insn = NEXT_INSN (insn))
{
- /* Ignore anything that is not a normal insn. */
if (! INSN_P (insn))
continue;
@@ -7035,53 +7293,83 @@ compute_store_table ()
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (clobbers_all
|| TEST_HARD_REG_BIT (regs_invalidated_by_call, regno))
- SET_BIT (reg_set_in_block[bb->index], regno);
+ already_set[regno] = 1;
}
pat = PATTERN (insn);
note_stores (pat, reg_set_info, NULL);
/* Now that we've marked regs, look for stores. */
- if (GET_CODE (pat) == SET)
- find_moveable_store (insn);
+ find_moveable_store (insn, already_set, last_set_in);
+
+ /* Unmark regs that are no longer set. */
+ for (regno = 0; regno < max_gcse_regno; regno++)
+ if (last_set_in[regno] == INSN_UID (insn))
+ last_set_in[regno] = 0;
}
+
+ /* Clear temporary marks. */
+ for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr))
+ {
+ LAST_AVAIL_CHECK_FAILURE(ptr) = NULL_RTX;
+ if (ANTIC_STORE_LIST (ptr)
+ && (tmp = XEXP (ANTIC_STORE_LIST (ptr), 0)) == NULL_RTX)
+ ANTIC_STORE_LIST (ptr) = XEXP (ANTIC_STORE_LIST (ptr), 1);
+ }
+ }
+
+ /* Remove the stores that are not available anywhere, as there will
+ be no opportunity to optimize them. */
+ for (ptr = pre_ldst_mems, prev_next_ptr_ptr = &pre_ldst_mems;
+ ptr != NULL;
+ ptr = *prev_next_ptr_ptr)
+ {
+ if (!AVAIL_STORE_LIST (ptr))
+ {
+ *prev_next_ptr_ptr = ptr->next;
+ free_ldst_entry (ptr);
+ }
+ else
+ prev_next_ptr_ptr = &ptr->next;
}
ret = enumerate_ldsts ();
if (gcse_file)
{
- fprintf (gcse_file, "Store Motion Expressions.\n");
+ fprintf (gcse_file, "ST_avail and ST_antic (shown under loads..)\n");
print_ldst_list (gcse_file);
}
+ free (last_set_in);
+ free (already_set);
return ret;
}
/* Check to see if the load X is aliased with STORE_PATTERN. */
-static int
+static bool
load_kills_store (x, store_pattern)
rtx x, store_pattern;
{
if (true_dependence (x, GET_MODE (x), store_pattern, rtx_addr_varies_p))
- return 1;
- return 0;
+ return true;
+ return false;
}
/* Go through the entire insn X, looking for any loads which might alias
- STORE_PATTERN. Return 1 if found. */
+ STORE_PATTERN. Return true if found. */
-static int
+static bool
find_loads (x, store_pattern)
rtx x, store_pattern;
{
const char * fmt;
int i, j;
- int ret = 0;
+ int ret = false;
if (!x)
- return 0;
+ return false;
if (GET_CODE (x) == SET)
x = SET_SRC (x);
@@ -7089,7 +7377,7 @@ find_loads (x, store_pattern)
if (GET_CODE (x) == MEM)
{
if (load_kills_store (x, store_pattern))
- return 1;
+ return true;
}
/* Recursively process the insn. */
@@ -7107,20 +7395,37 @@ find_loads (x, store_pattern)
}
/* Check if INSN kills the store pattern X (is aliased with it).
- Return 1 if it it does. */
+ Return true if it it does. */
-static int
-store_killed_in_insn (x, insn)
- rtx x, insn;
+static bool
+store_killed_in_insn (x, x_regs, insn)
+ rtx x, x_regs, insn;
{
+ rtx reg, base;
+
if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
- return 0;
+ return false;
if (GET_CODE (insn) == CALL_INSN)
{
/* A normal or pure call might read from pattern,
but a const call will not. */
- return ! CONST_OR_PURE_CALL_P (insn) || pure_call_p (insn);
+ if (! CONST_OR_PURE_CALL_P (insn) || pure_call_p (insn))
+ return true;
+
+ /* But even a const call reads its parameters. Check whether the
+ base of some of registers used in mem is stack pointer. */
+ for (reg = x_regs; reg; reg = XEXP (reg, 1))
+ {
+ base = find_base_term (reg);
+ if (!base
+ || (GET_CODE (base) == ADDRESS
+ && GET_MODE (base) == Pmode
+ && XEXP (base, 0) == stack_pointer_rtx))
+ return true;
+ }
+
+ return false;
}
if (GET_CODE (PATTERN (insn)) == SET)
@@ -7130,80 +7435,78 @@ store_killed_in_insn (x, insn)
if (GET_CODE (SET_DEST (pat)) == MEM && !expr_equiv_p (SET_DEST (pat), x))
/* pretend its a load and check for aliasing. */
if (find_loads (SET_DEST (pat), x))
- return 1;
+ return true;
return find_loads (SET_SRC (pat), x);
}
else
return find_loads (PATTERN (insn), x);
}
-/* Returns 1 if the expression X is loaded or clobbered on or after INSN
- within basic block BB. */
+/* Returns true if the expression X is loaded or clobbered on or after INSN
+ within basic block BB. REGS_SET_AFTER is bitmap of registers set in
+ or after the insn. X_REGS is list of registers mentioned in X. If the store
+ is killed, return the last insn in that it occurs in FAIL_INSN. */
-static int
-store_killed_after (x, insn, bb)
- rtx x, insn;
+static bool
+store_killed_after (x, x_regs, insn, bb, regs_set_after, fail_insn)
+ rtx x, x_regs, insn;
basic_block bb;
+ int *regs_set_after;
+ rtx *fail_insn;
{
- rtx last = bb->end;
-
- if (insn == last)
- return 0;
+ rtx last = bb->end, act;
- /* Check if the register operands of the store are OK in this block.
- Note that if registers are changed ANYWHERE in the block, we'll
- decide we can't move it, regardless of whether it changed above
- or below the store. This could be improved by checking the register
- operands while looking for aliasing in each insn. */
- if (!store_ops_ok (XEXP (x, 0), bb))
- return 1;
+ if (!store_ops_ok (x_regs, regs_set_after))
+ {
+ /* We do not know where it will happen. */
+ if (fail_insn)
+ *fail_insn = NULL_RTX;
+ return true;
+ }
- for ( ; insn && insn != NEXT_INSN (last); insn = NEXT_INSN (insn))
- if (store_killed_in_insn (x, insn))
- return 1;
+ /* Scan from the end, so that fail_insn is determined correctly. */
+ for (act = last; act != PREV_INSN (insn); act = PREV_INSN (act))
+ if (store_killed_in_insn (x, x_regs, act))
+ {
+ if (fail_insn)
+ *fail_insn = act;
+ return true;
+ }
- return 0;
+ return false;
}
-
-/* Returns 1 if the expression X is loaded or clobbered on or before INSN
- within basic block BB. */
-static int
-store_killed_before (x, insn, bb)
- rtx x, insn;
+
+/* Returns true if the expression X is loaded or clobbered on or before INSN
+ within basic block BB. X_REGS is list of registers mentioned in X.
+ REGS_SET_BEFORE is bitmap of registers set before or in this insn. */
+static bool
+store_killed_before (x, x_regs, insn, bb, regs_set_before)
+ rtx x, x_regs, insn;
basic_block bb;
+ int *regs_set_before;
{
rtx first = bb->head;
- if (insn == first)
- return store_killed_in_insn (x, insn);
+ if (!store_ops_ok (x_regs, regs_set_before))
+ return true;
- /* Check if the register operands of the store are OK in this block.
- Note that if registers are changed ANYWHERE in the block, we'll
- decide we can't move it, regardless of whether it changed above
- or below the store. This could be improved by checking the register
- operands while looking for aliasing in each insn. */
- if (!store_ops_ok (XEXP (x, 0), bb))
- return 1;
-
- for ( ; insn && insn != PREV_INSN (first); insn = PREV_INSN (insn))
- if (store_killed_in_insn (x, insn))
- return 1;
+ for ( ; insn != PREV_INSN (first); insn = PREV_INSN (insn))
+ if (store_killed_in_insn (x, x_regs, insn))
+ return true;
- return 0;
+ return false;
}
-
-#define ANTIC_STORE_LIST(x) ((x)->loads)
-#define AVAIL_STORE_LIST(x) ((x)->stores)
-
-/* Given the table of available store insns at the end of blocks,
- determine which ones are not killed by aliasing, and generate
- the appropriate vectors for gen and killed. */
+
+/* Fill in available, anticipatable, transparent and kill vectors in
+ STORE_DATA, based on lists of available and anticipatable stores. */
static void
build_store_vectors ()
{
- basic_block bb, b;
+ basic_block bb;
+ int *regs_set_in_block;
rtx insn, st;
struct ls_expr * ptr;
+ unsigned regno;
/* Build the gen_vector. This is any store in the table which is not killed
by aliasing later in its block. */
@@ -7215,55 +7518,32 @@ build_store_vectors ()
for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr))
{
- /* Put all the stores into either the antic list, or the avail list,
- or both. */
- rtx store_list = ptr->stores;
- ptr->stores = NULL_RTX;
-
- for (st = store_list; st != NULL; st = XEXP (st, 1))
+ for (st = AVAIL_STORE_LIST (ptr); st != NULL; st = XEXP (st, 1))
{
insn = XEXP (st, 0);
bb = BLOCK_FOR_INSN (insn);
- if (!store_killed_after (ptr->pattern, insn, bb))
+ /* If we've already seen an available expression in this block,
+ we can delete this one (It occurs earlier in the block). We'll
+ copy the SRC expression to an unused register in case there
+ are any side effects. */
+ if (TEST_BIT (ae_gen[bb->index], ptr->index))
{
- /* If we've already seen an available expression in this block,
- we can delete the one we saw already (It occurs earlier in
- the block), and replace it with this one). We'll copy the
- old SRC expression to an unused register in case there
- are any side effects. */
- if (TEST_BIT (ae_gen[bb->index], ptr->index))
- {
- /* Find previous store. */
- rtx st;
- for (st = AVAIL_STORE_LIST (ptr); st ; st = XEXP (st, 1))
- if (BLOCK_FOR_INSN (XEXP (st, 0)) == bb)
- break;
- if (st)
- {
- rtx r = gen_reg_rtx (GET_MODE (ptr->pattern));
- if (gcse_file)
- fprintf (gcse_file, "Removing redundant store:\n");
- replace_store_insn (r, XEXP (st, 0), bb);
- XEXP (st, 0) = insn;
- continue;
- }
- }
- SET_BIT (ae_gen[bb->index], ptr->index);
- AVAIL_STORE_LIST (ptr) = alloc_INSN_LIST (insn,
- AVAIL_STORE_LIST (ptr));
- }
-
- if (!store_killed_before (ptr->pattern, insn, bb))
- {
- SET_BIT (st_antloc[BLOCK_NUM (insn)], ptr->index);
- ANTIC_STORE_LIST (ptr) = alloc_INSN_LIST (insn,
- ANTIC_STORE_LIST (ptr));
+ rtx r = gen_reg_rtx (GET_MODE (ptr->pattern));
+ if (gcse_file)
+ fprintf (gcse_file, "Removing redundant store:\n");
+ replace_store_insn (r, XEXP (st, 0), bb);
+ continue;
}
+ SET_BIT (ae_gen[bb->index], ptr->index);
}
- /* Free the original list of store insns. */
- free_INSN_LIST_list (&store_list);
+ for (st = ANTIC_STORE_LIST (ptr); st != NULL; st = XEXP (st, 1))
+ {
+ insn = XEXP (st, 0);
+ bb = BLOCK_FOR_INSN (insn);
+ SET_BIT (st_antloc[bb->index], ptr->index);
+ }
}
ae_kill = (sbitmap *) sbitmap_vector_alloc (last_basic_block, num_stores);
@@ -7271,42 +7551,33 @@ build_store_vectors ()
transp = (sbitmap *) sbitmap_vector_alloc (last_basic_block, num_stores);
sbitmap_vector_zero (transp, last_basic_block);
+ regs_set_in_block = xmalloc (sizeof (int) * max_gcse_regno);
- for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr))
- FOR_EACH_BB (b)
- {
- if (store_killed_after (ptr->pattern, b->head, b))
- {
- /* The anticipatable expression is not killed if it's gen'd. */
- /*
- We leave this check out for now. If we have a code sequence
- in a block which looks like:
- ST MEMa = x
- L y = MEMa
- ST MEMa = z
- We should flag this as having an ANTIC expression, NOT
- transparent, NOT killed, and AVAIL.
- Unfortunately, since we haven't re-written all loads to
- use the reaching reg, we'll end up doing an incorrect
- Load in the middle here if we push the store down. It happens in
- gcc.c-torture/execute/960311-1.c with -O3
- If we always kill it in this case, we'll sometimes do
- unnecessary work, but it shouldn't actually hurt anything.
- if (!TEST_BIT (ae_gen[b], ptr->index)). */
- SET_BIT (ae_kill[b->index], ptr->index);
- }
- else
- SET_BIT (transp[b->index], ptr->index);
- }
+ FOR_EACH_BB (bb)
+ {
+ for (regno = 0; regno < max_gcse_regno; regno++)
+ regs_set_in_block[regno] = TEST_BIT (reg_set_in_block[bb->index], regno);
+
+ for (ptr = first_ls_expr (); ptr != NULL; ptr = next_ls_expr (ptr))
+ {
+ if (store_killed_after (ptr->pattern, ptr->pattern_regs, bb->head,
+ bb, regs_set_in_block, NULL))
+ {
+ /* It should not be neccessary to consider the expression
+ killed if it is both anticipatable and available. */
+ if (!TEST_BIT (st_antloc[bb->index], ptr->index)
+ || !TEST_BIT (ae_gen[bb->index], ptr->index))
+ SET_BIT (ae_kill[bb->index], ptr->index);
+ }
+ else
+ SET_BIT (transp[bb->index], ptr->index);
+ }
+ }
+
+ free (regs_set_in_block);
- /* Any block with no exits calls some non-returning function, so
- we better mark the store killed here, or we might not store to
- it at all. If we knew it was abort, we wouldn't have to store,
- but we don't know that for sure. */
if (gcse_file)
{
- fprintf (gcse_file, "ST_avail and ST_antic (shown under loads..)\n");
- print_ldst_list (gcse_file);
dump_sbitmap_vector (gcse_file, "st_antloc", "", st_antloc, last_basic_block);
dump_sbitmap_vector (gcse_file, "st_kill", "", ae_kill, last_basic_block);
dump_sbitmap_vector (gcse_file, "Transpt", "", transp, last_basic_block);
@@ -7367,7 +7638,7 @@ insert_store (expr, e)
return 0;
reg = expr->reaching_reg;
- insn = gen_move_insn (expr->pattern, reg);
+ insn = gen_move_insn (copy_rtx (expr->pattern), reg);
/* If we are inserting this expression on ALL predecessor edges of a BB,
insert it at the start of the BB, and reset the insert bits on the other
@@ -7455,9 +7726,6 @@ delete_store (expr, bb)
if (expr->reaching_reg == NULL_RTX)
expr->reaching_reg = gen_reg_rtx (GET_MODE (expr->pattern));
-
- /* If there is more than 1 store, the earlier ones will be dead,
- but it doesn't hurt to replace them here. */
reg = expr->reaching_reg;
for (i = AVAIL_STORE_LIST (expr); i; i = XEXP (i, 1))
@@ -7519,7 +7787,7 @@ store_motion ()
init_alias_analysis ();
- /* Find all the stores that are live to the end of their block. */
+ /* Find all the available and anticipatable stores. */
num_stores = compute_store_table ();
if (num_stores == 0)
{
@@ -7528,9 +7796,9 @@ store_motion ()
return;
}
- /* Now compute whats actually available to move. */
- add_noreturn_fake_exit_edges ();
+ /* Now compute kill & transp vectors. */
build_store_vectors ();
+ add_noreturn_fake_exit_edges ();
edge_list = pre_edge_rev_lcm (gcse_file, num_stores, transp, ae_gen,
st_antloc, ae_kill, &pre_insert_map,
@@ -7615,13 +7883,6 @@ bypass_jumps (file)
return 0;
}
- /* See what modes support reg/reg copy operations. */
- if (! can_copy_init_p)
- {
- compute_can_copy ();
- can_copy_init_p = 1;
- }
-
gcc_obstack_init (&gcse_obstack);
bytes_used = 0;
diff --git a/gcc/genattrtab.h b/gcc/genattrtab.h
index c64ae64fe17..d41f03da67c 100644
--- a/gcc/genattrtab.h
+++ b/gcc/genattrtab.h
@@ -1,20 +1,20 @@
/* External definitions of source files of genattrtab.
Copyright (C) 2001 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/genautomata.c b/gcc/genautomata.c
index 06c5d968e83..ad511d9d166 100644
--- a/gcc/genautomata.c
+++ b/gcc/genautomata.c
@@ -3,20 +3,20 @@
Written by Vladimir Makarov <vmakarov@redhat.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify it
+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.
-GNU CC is distributed in the hope that it will be useful, but WITHOUT
+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 GNU CC; see the file COPYING. If not, write to the Free
+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. */
diff --git a/gcc/genconditions.c b/gcc/genconditions.c
index bc52cb3fc67..412f1f1d588 100644
--- a/gcc/genconditions.c
+++ b/gcc/genconditions.c
@@ -1,20 +1,20 @@
/* Process machine description and calculate constant conditions.
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/genextract.c b/gcc/genextract.c
index 912aa78c52d..e80fd202d3f 100644
--- a/gcc/genextract.c
+++ b/gcc/genextract.c
@@ -323,7 +323,7 @@ print_path (path)
/* We first write out the operations (XEXP or XVECEXP) in reverse
order, then write "insn", then the indices in forward order. */
- for (i = len - 1; i >=0 ; i--)
+ for (i = len - 1; i >= 0 ; i--)
{
if (ISLOWER(path[i]))
printf ("XVECEXP (");
diff --git a/gcc/gengtype-lex.l b/gcc/gengtype-lex.l
index c4f96c59e73..36b1596651e 100644
--- a/gcc/gengtype-lex.l
+++ b/gcc/gengtype-lex.l
@@ -52,7 +52,7 @@ update_lineno (l, len)
ID [[:alpha:]_][[:alnum:]_]*
WS [[:space:]]+
-IWORD short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t
+IWORD short|long|(un)?signed|char|int|HOST_WIDE_INT|bool|size_t|CHAR_BITFIELD
ITYPE {IWORD}({WS}{IWORD})*
%x in_struct in_struct_comment in_comment in_yacc_escape
diff --git a/gcc/gengtype.c b/gcc/gengtype.c
index 31ae7a692d2..cb74d3a92b8 100644
--- a/gcc/gengtype.c
+++ b/gcc/gengtype.c
@@ -25,6 +25,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "gengtype.h"
#include "gtyp-gen.h"
+#define NO_GENRTL_H
+#include "rtl.h"
+#undef abort
+
/* Nonzero iff an error has occurred. */
static int hit_error = 0;
@@ -347,22 +351,15 @@ note_variable (s, t, o, pos)
variables = n;
}
-enum rtx_code {
-#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) ENUM ,
-#include "rtl.def"
-#undef DEF_RTL_EXPR
- NUM_RTX_CODE
-};
-
/* We really don't care how long a CONST_DOUBLE is. */
#define CONST_DOUBLE_FORMAT "ww"
-static const char * const rtx_format[NUM_RTX_CODE] = {
+const char * const rtx_format[NUM_RTX_CODE] = {
#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) FORMAT ,
#include "rtl.def"
#undef DEF_RTL_EXPR
};
-static int rtx_next[NUM_RTX_CODE];
+static int rtx_next_new[NUM_RTX_CODE];
/* Generate the contents of the rtx_next array. This really doesn't belong
in gengtype at all, but it's needed for adjust_field_rtx_def. */
@@ -375,15 +372,15 @@ gen_rtx_next ()
{
int k;
- rtx_next[i] = -1;
+ rtx_next_new[i] = -1;
if (strncmp (rtx_format[i], "iuu", 3) == 0)
- rtx_next[i] = 2;
+ rtx_next_new[i] = 2;
else if (i == COND_EXEC || i == SET || i == EXPR_LIST || i == INSN_LIST)
- rtx_next[i] = 1;
+ rtx_next_new[i] = 1;
else
for (k = strlen (rtx_format[i]) - 1; k >= 0; k--)
if (rtx_format[i][k] == 'e' || rtx_format[i][k] == 'u')
- rtx_next[i] = k;
+ rtx_next_new[i] = k;
}
}
@@ -397,12 +394,12 @@ write_rtx_next ()
oprintf (f, "\n/* Used to implement the RTX_NEXT macro. */\n");
oprintf (f, "const unsigned char rtx_next[NUM_RTX_CODE] = {\n");
for (i = 0; i < NUM_RTX_CODE; i++)
- if (rtx_next[i] == -1)
+ if (rtx_next_new[i] == -1)
oprintf (f, " 0,\n");
else
oprintf (f,
" offsetof (struct rtx_def, fld) + %d * sizeof (rtunion),\n",
- rtx_next[i]);
+ rtx_next_new[i]);
oprintf (f, "};\n");
}
@@ -451,28 +448,47 @@ adjust_field_rtx_def (t, opt)
{
pair_p note_flds = NULL;
int c;
-
- for (c = 0; c < 3; c++)
+
+ for (c = NOTE_INSN_BIAS; c <= NOTE_INSN_MAX; c++)
{
pair_p old_note_flds = note_flds;
note_flds = xmalloc (sizeof (*note_flds));
note_flds->line.file = __FILE__;
note_flds->line.line = __LINE__;
- note_flds->name = "rttree";
- note_flds->type = tree_tp;
note_flds->opt = xmalloc (sizeof (*note_flds->opt));
note_flds->opt->next = nodot;
note_flds->opt->name = "tag";
+ note_flds->opt->info = xasprintf ("%d", c);
note_flds->next = old_note_flds;
+
+ switch (c)
+ {
+ /* NOTE_INSN_MAX is used as the default field for line
+ number notes. */
+ case NOTE_INSN_MAX:
+ note_flds->opt->name = "default";
+ note_flds->name = "rtstr";
+ note_flds->type = &string_type;
+ break;
+
+ case NOTE_INSN_BLOCK_BEG:
+ case NOTE_INSN_BLOCK_END:
+ note_flds->name = "rttree";
+ note_flds->type = tree_tp;
+ break;
+
+ case NOTE_INSN_EXPECTED_VALUE:
+ note_flds->name = "rtx";
+ note_flds->type = rtx_tp;
+ break;
+
+ default:
+ note_flds->name = "rtint";
+ note_flds->type = scalar_tp;
+ break;
+ }
}
-
- note_flds->type = rtx_tp;
- note_flds->name = "rtx";
- note_flds->opt->info = "NOTE_INSN_EXPECTED_VALUE";
- note_flds->next->opt->info = "NOTE_INSN_BLOCK_BEG";
- note_flds->next->next->opt->info = "NOTE_INSN_BLOCK_END";
-
new_structure ("rtx_def_note_subunion", 1, &lexer_line, note_flds, NULL);
}
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 5b0e330ecfd..db8cbd03207 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -1,5 +1,6 @@
/* Simple garbage collection for the GNU compiler.
- Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2001, 2002, 2003
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -38,7 +39,11 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#endif
#ifdef ENABLE_VALGRIND_CHECKING
-#include <valgrind.h>
+# ifdef HAVE_MEMCHECK_H
+# include <memcheck.h>
+# else
+# include <valgrind.h>
+# endif
#else
/* Avoid #ifdef:s when we can help it. */
#define VALGRIND_DISCARD(x)
@@ -108,7 +113,7 @@ ggc_mark_roots ()
if (*cti->base)
{
ggc_set_mark (*cti->base);
- htab_traverse (*cti->base, ggc_htab_delete, (PTR) cti);
+ htab_traverse_noresize (*cti->base, ggc_htab_delete, (PTR) cti);
ggc_set_mark ((*cti->base)->entries);
}
}
@@ -538,6 +543,7 @@ gt_pch_save (f)
memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size);
}
ggc_pch_finish (state.d, state.f);
+ gt_pch_fixup_stringpool ();
free (state.ptrs);
htab_delete (saving_htab);
@@ -640,19 +646,19 @@ ggc_rlimit_bound (limit)
struct rlimit rlim;
# ifdef RLIMIT_RSS
if (getrlimit (RLIMIT_RSS, &rlim) == 0
- && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != (rlim_t) RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
# ifdef RLIMIT_DATA
if (getrlimit (RLIMIT_DATA, &rlim) == 0
- && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != (rlim_t) RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
# ifdef RLIMIT_AS
if (getrlimit (RLIMIT_AS, &rlim) == 0
- && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != (rlim_t) RLIM_INFINITY
&& rlim.rlim_cur < limit)
limit = rlim.rlim_cur;
# endif
@@ -689,7 +695,7 @@ ggc_min_heapsize_heuristic()
/* Adjust for rlimits. */
min_heap_kbytes = ggc_rlimit_bound (min_heap_kbytes);
- min_heap_kbytes /= 1024; /* convert to Kbytes. */
+ min_heap_kbytes /= 1024; /* convert to Kbytes. */
/* The heuristic is RAM/8, with a lower bound of 4M and an upper
bound of 128M (when RAM >= 1GB). */
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c
index e0064e7fdb2..ee5f9129e1f 100644
--- a/gcc/ggc-page.c
+++ b/gcc/ggc-page.c
@@ -26,13 +26,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "rtl.h"
#include "tm_p.h"
#include "toplev.h"
-#include "varray.h"
#include "flags.h"
#include "ggc.h"
#include "timevar.h"
#include "params.h"
#ifdef ENABLE_VALGRIND_CHECKING
-#include <valgrind.h>
+# ifdef HAVE_MEMCHECK_H
+# include <memcheck.h>
+# else
+# include <valgrind.h>
+# endif
#else
/* Avoid #ifdef:s when we can help it. */
#define VALGRIND_DISCARD(x)
@@ -253,9 +256,9 @@ typedef struct page_entry
struct page_group *group;
#endif
- /* Saved in-use bit vector for pages that aren't in the topmost
- context during collection. */
- unsigned long *save_in_use_p;
+ /* This is the index in the by_depth varray where this page table
+ can be found. */
+ unsigned long index_by_depth;
/* Context depth of this page. */
unsigned short context_depth;
@@ -367,6 +370,36 @@ static struct globals
/* The file descriptor for debugging output. */
FILE *debug_file;
+
+ /* Current number of elements in use in depth below. */
+ unsigned int depth_in_use;
+
+ /* Maximum number of elements that can be used before resizing. */
+ unsigned int depth_max;
+
+ /* Each element of this arry is an index in by_depth where the given
+ depth starts. This structure is indexed by that given depth we
+ are interested in. */
+ unsigned int *depth;
+
+ /* Current number of elements in use in by_depth below. */
+ unsigned int by_depth_in_use;
+
+ /* Maximum number of elements that can be used before resizing. */
+ unsigned int by_depth_max;
+
+ /* Each element of this array is a pointer to a page_entry, all
+ page_entries can be found in here by increasing depth.
+ index_by_depth in the page_entry is the index into this data
+ structure where that page_entry can be found. This is used to
+ speed up finding all page_entries at a particular depth. */
+ page_entry **by_depth;
+
+ /* Each element is a pointer to the saved in_use_p bits, if any,
+ zero otherwise. We allocate them all together, to enable a
+ better runtime data access pattern. */
+ unsigned long **save_in_use;
+
} G;
/* The size in bytes required to maintain a bitmap for the objects
@@ -379,6 +412,9 @@ static struct globals
free list. This cannot be larger than HOST_BITS_PER_INT for the
in_use bitmask for page_group. */
#define GGC_QUIRE_SIZE 16
+
+/* Initial guess as to how many page table entries we might need. */
+#define INITIAL_PTE_COUNT 128
static int ggc_allocated_p PARAMS ((const void *));
static page_entry *lookup_page_table_entry PARAMS ((const void *));
@@ -398,13 +434,62 @@ static void clear_marks PARAMS ((void));
static void sweep_pages PARAMS ((void));
static void ggc_recalculate_in_use_p PARAMS ((page_entry *));
static void compute_inverse PARAMS ((unsigned));
+static inline void adjust_depth PARAMS ((void));
+static void move_ptes_to_front PARAMS ((int, int));
#ifdef ENABLE_GC_CHECKING
static void poison_pages PARAMS ((void));
#endif
void debug_print_page_list PARAMS ((int));
+static void push_depth PARAMS ((unsigned int));
+static void push_by_depth PARAMS ((page_entry *, unsigned long *));
+/* Push an entry onto G.depth. */
+
+inline static void
+push_depth (i)
+ unsigned int i;
+{
+ if (G.depth_in_use >= G.depth_max)
+ {
+ G.depth_max *= 2;
+ G.depth = (unsigned int *) xrealloc ((char *) G.depth,
+ G.depth_max * sizeof (unsigned int));
+ }
+ G.depth[G.depth_in_use++] = i;
+}
+
+/* Push an entry onto G.by_depth and G.save_in_use. */
+
+inline static void
+push_by_depth (p, s)
+ page_entry *p;
+ unsigned long *s;
+{
+ if (G.by_depth_in_use >= G.by_depth_max)
+ {
+ G.by_depth_max *= 2;
+ G.by_depth = (page_entry **) xrealloc ((char *) G.by_depth,
+ G.by_depth_max * sizeof (page_entry *));
+ G.save_in_use = (unsigned long **) xrealloc ((char *) G.save_in_use,
+ G.by_depth_max * sizeof (unsigned long *));
+ }
+ G.by_depth[G.by_depth_in_use] = p;
+ G.save_in_use[G.by_depth_in_use++] = s;
+}
+
+#if (GCC_VERSION < 3001)
+#define prefetch(X) ((void) X)
+#else
+#define prefetch(X) __builtin_prefetch (X)
+#endif
+
+#define save_in_use_p_i(__i) \
+ (G.save_in_use[__i])
+#define save_in_use_p(__p) \
+ (save_in_use_p_i (__p->index_by_depth))
+
/* Returns nonzero if P was allocated in GC'able memory. */
static inline int
@@ -772,6 +857,26 @@ alloc_page (order)
return entry;
}
+/* Adjust the size of G.depth so that no index greater than the one
+ used by the top of the G.by_depth is used. */
+
+static inline void
+adjust_depth ()
+{
+ page_entry *top;
+
+ if (G.by_depth_in_use)
+ {
+ top = G.by_depth[G.by_depth_in_use-1];
+
+ /* Peel back indicies in depth that index into by_depth, so that
+ as new elements are added to by_depth, we note the indicies
+ of those elements, if they are for new context depths. */
+ while (G.depth_in_use > (size_t)top->context_depth+1)
+ --G.depth_in_use;
+ }
+}
+
/* For a page that is no longer needed, put it on the free page list. */
static inline void
@@ -793,6 +898,30 @@ free_page (entry)
clear_page_group_in_use (entry->group, entry->page);
#endif
+ if (G.by_depth_in_use > 1)
+ {
+ page_entry *top = G.by_depth[G.by_depth_in_use-1];
+
+ /* If they are at the same depth, put top element into freed
+ slot. */
+ if (entry->context_depth == top->context_depth)
+ {
+ int i = entry->index_by_depth;
+ G.by_depth[i] = top;
+ G.save_in_use[i] = G.save_in_use[G.by_depth_in_use-1];
+ top->index_by_depth = i;
+ }
+ else
+ {
+ /* We cannot free a page from a context deeper than the
+ current one. */
+ abort ();
+ }
+ }
+ --G.by_depth_in_use;
+
+ adjust_depth ();
+
entry->next = G.free_pages;
G.free_pages = entry;
}
@@ -885,8 +1014,7 @@ static unsigned char size_lookup[257] =
8
};
-/* Allocate a chunk of memory of SIZE bytes. If ZERO is nonzero, the
- memory is zeroed; otherwise, its contents are undefined. */
+/* Allocate a chunk of memory of SIZE bytes. Its contents are undefined. */
void *
ggc_alloc (size)
@@ -916,6 +1044,14 @@ ggc_alloc (size)
struct page_entry *new_entry;
new_entry = alloc_page (order);
+ new_entry->index_by_depth = G.by_depth_in_use;
+ push_by_depth (new_entry, 0);
+
+ /* We can skip context depths, if we do, make sure we go all the
+ way to the new depth. */
+ while (new_entry->context_depth >= G.depth_in_use)
+ push_depth (G.by_depth_in_use-1);
+
/* If this is the only entry, it's also the tail. */
if (entry == NULL)
G.page_tails[order] = new_entry;
@@ -1218,6 +1354,15 @@ init_ggc ()
for (i = OBJECT_SIZE (order); size_lookup [i] == o; --i)
size_lookup[i] = order;
}
+
+ G.depth_in_use = 0;
+ G.depth_max = 10;
+ G.depth = (unsigned int *) xmalloc (G.depth_max * sizeof (unsigned int));
+
+ G.by_depth_in_use = 0;
+ G.by_depth_max = INITIAL_PTE_COUNT;
+ G.by_depth = (page_entry **) xmalloc (G.by_depth_max * sizeof (page_entry *));
+ G.save_in_use = (unsigned long **) xmalloc (G.by_depth_max * sizeof (unsigned long *));
}
/* Increment the `GC context'. Objects allocated in an outer context
@@ -1260,7 +1405,7 @@ ggc_recalculate_in_use_p (p)
/* Something is in use if it is marked, or if it was in use in a
context further down the context stack. */
- p->in_use_p[i] |= p->save_in_use_p[i];
+ p->in_use_p[i] |= save_in_use_p (p)[i];
/* Decrement the free object count for every object allocated. */
for (j = p->in_use_p[i]; j; j >>= 1)
@@ -1278,7 +1423,10 @@ void
ggc_pop_context ()
{
unsigned long omask;
- unsigned order, depth;
+ unsigned int depth, i, e;
+#ifdef ENABLE_CHECKING
+ unsigned int order;
+#endif
depth = --G.context_depth;
omask = (unsigned long)1 << (depth + 1);
@@ -1290,9 +1438,66 @@ ggc_pop_context ()
G.context_depth_allocations &= omask - 1;
G.context_depth_collections &= omask - 1;
- /* Any remaining pages in the popped context are lowered to the new
- current context; i.e. objects allocated in the popped context and
- left over are imported into the previous context. */
+ /* The G.depth array is shortend so that the last index is the
+ context_depth of the top element of by_depth. */
+ if (depth+1 < G.depth_in_use)
+ e = G.depth[depth+1];
+ else
+ e = G.by_depth_in_use;
+
+ /* We might not have any PTEs of depth depth. */
+ if (depth < G.depth_in_use)
+ {
+
+ /* First we go through all the pages at depth depth to
+ recalculate the in use bits. */
+ for (i = G.depth[depth]; i < e; ++i)
+ {
+ page_entry *p;
+
+#ifdef ENABLE_CHECKING
+ p = G.by_depth[i];
+
+ /* Check that all of the pages really are at the depth that
+ we expect. */
+ if (p->context_depth != depth)
+ abort ();
+ if (p->index_by_depth != i)
+ abort ();
+#endif
+
+ prefetch (&save_in_use_p_i (i+8));
+ prefetch (&save_in_use_p_i (i+16));
+ if (save_in_use_p_i (i))
+ {
+ p = G.by_depth[i];
+ ggc_recalculate_in_use_p (p);
+ free (save_in_use_p_i (i));
+ save_in_use_p_i (i) = 0;
+ }
+ }
+ }
+
+ /* Then, we reset all page_entries with a depth greater than depth
+ to be at depth. */
+ for (i = e; i < G.by_depth_in_use; ++i)
+ {
+ page_entry *p = G.by_depth[i];
+
+ /* Check that all of the pages really are at the depth we
+ expect. */
+#ifdef ENABLE_CHECKING
+ if (p->context_depth <= depth)
+ abort ();
+ if (p->index_by_depth != i)
+ abort ();
+#endif
+ p->context_depth = depth;
+ }
+
+ adjust_depth ();
+
+#ifdef ENABLE_CHECKING
for (order = 2; order < NUM_ORDERS; order++)
{
page_entry *p;
@@ -1300,18 +1505,12 @@ ggc_pop_context ()
for (p = G.pages[order]; p != NULL; p = p->next)
{
if (p->context_depth > depth)
- p->context_depth = depth;
-
- /* If this page is now in the topmost context, and we'd
- saved its allocation state, restore it. */
- else if (p->context_depth == depth && p->save_in_use_p)
- {
- ggc_recalculate_in_use_p (p);
- free (p->save_in_use_p);
- p->save_in_use_p = 0;
- }
+ abort ();
+ else if (p->context_depth == depth && save_in_use_p (p))
+ abort ();
}
}
+#endif
}
/* Unmark all objects. */
@@ -1341,9 +1540,9 @@ clear_marks ()
marks. So, back them up first. */
if (p->context_depth < G.context_depth)
{
- if (! p->save_in_use_p)
- p->save_in_use_p = xmalloc (bitmap_size);
- memcpy (p->save_in_use_p, p->in_use_p, bitmap_size);
+ if (! save_in_use_p (p))
+ save_in_use_p (p) = xmalloc (bitmap_size);
+ memcpy (save_in_use_p (p), p->in_use_p, bitmap_size);
}
/* Reset reset the number of free objects and clear the
@@ -1777,6 +1976,58 @@ ggc_pch_finish (d, f)
free (d);
}
+/* Move the PCH PTE entries just added to the end of by_depth, to the
+ front. */
+
+static void
+move_ptes_to_front (count_old_page_tables, count_new_page_tables)
+ int count_old_page_tables;
+ int count_new_page_tables;
+{
+ unsigned i;
+
+ /* First, we swap the new entries to the front of the varrays. */
+ page_entry **new_by_depth;
+ unsigned long **new_save_in_use;
+
+ new_by_depth = (page_entry **) xmalloc (G.by_depth_max * sizeof (page_entry *));
+ new_save_in_use = (unsigned long **) xmalloc (G.by_depth_max * sizeof (unsigned long *));
+
+ memcpy (&new_by_depth[0],
+ &G.by_depth[count_old_page_tables],
+ count_new_page_tables * sizeof (void *));
+ memcpy (&new_by_depth[count_new_page_tables],
+ &G.by_depth[0],
+ count_old_page_tables * sizeof (void *));
+ memcpy (&new_save_in_use[0],
+ &G.save_in_use[count_old_page_tables],
+ count_new_page_tables * sizeof (void *));
+ memcpy (&new_save_in_use[count_new_page_tables],
+ &G.save_in_use[0],
+ count_old_page_tables * sizeof (void *));
+
+ free (G.by_depth);
+ free (G.save_in_use);
+
+ G.by_depth = new_by_depth;
+ G.save_in_use = new_save_in_use;
+
+ /* Now update all the index_by_depth fields. */
+ for (i = G.by_depth_in_use; i > 0; --i)
+ {
+ page_entry *p = G.by_depth[i-1];
+ p->index_by_depth = i-1;
+ }
+
+ /* And last, we update the depth pointers in G.depth. The first
+ entry is already 0, and context 0 entries always start at index
+ 0, so there is nothing to update in the first slot. We need a
+ second slot, only if we have old ptes, and if we do, they start
+ at index count_new_page_tables. */
+ if (count_old_page_tables)
+ push_depth (count_new_page_tables);
+}
+
void
ggc_pch_read (f, addr)
FILE *f;
@@ -1785,9 +2036,13 @@ ggc_pch_read (f, addr)
struct ggc_pch_ondisk d;
unsigned i;
char *offs = addr;
-
- /* We've just read in a PCH file. So, every object that used to be allocated
- is now free. */
+ unsigned long count_old_page_tables;
+ unsigned long count_new_page_tables;
+
+ count_old_page_tables = G.by_depth_in_use;
+
+ /* We've just read in a PCH file. So, every object that used to be
+ allocated is now free. */
clear_marks ();
#ifdef GGC_POISON
poison_pages ();
@@ -1818,10 +2073,10 @@ ggc_pch_read (f, addr)
size_t bytes;
size_t num_objs;
size_t j;
-
+
if (d.totals[i] == 0)
continue;
-
+
bytes = ROUND_UP (d.totals[i] * OBJECT_SIZE (i), G.pagesize);
num_objs = bytes / OBJECT_SIZE (i);
entry = xcalloc (1, (sizeof (struct page_entry)
@@ -1852,8 +2107,20 @@ ggc_pch_read (f, addr)
else
G.pages[i] = entry;
G.page_tails[i] = entry;
+
+ /* We start off by just adding all the new information to the
+ end of the varrays, later, we will move the new information
+ to the front of the varrays, as the PCH page tables are at
+ context 0. */
+ push_by_depth (entry, 0);
}
+ /* Now, we update the various data structures that speed page table
+ handling. */
+ count_new_page_tables = G.by_depth_in_use - count_old_page_tables;
+
+ move_ptes_to_front (count_old_page_tables, count_new_page_tables);
+
/* Update the statistics. */
G.allocated = G.allocated_last_gc = offs - (char *)addr;
}
diff --git a/gcc/ggc.h b/gcc/ggc.h
index 17b8e721c7d..e1364a3a84e 100644
--- a/gcc/ggc.h
+++ b/gcc/ggc.h
@@ -124,6 +124,7 @@ extern void ggc_mark_roots PARAMS ((void));
/* Save and restore the string pool entries for PCH. */
extern void gt_pch_save_stringpool PARAMS ((void));
+extern void gt_pch_fixup_stringpool PARAMS ((void));
extern void gt_pch_restore_stringpool PARAMS ((void));
/* PCH and GGC handling for strings, mostly trivial. */
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 5caf6846e8b..16b55fe6d70 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -457,6 +457,7 @@ simplify_expr (expr_p, pre_p, post_p, simple_test_f, fallback)
case REAL_CST:
case STRING_CST:
case COMPLEX_CST:
+ case VECTOR_CST:
break;
/* FIXME make this a decl. */
diff --git a/gcc/ginclude/float.h b/gcc/ginclude/float.h
index f501a8abe93..75fcd5422d9 100644
--- a/gcc/ginclude/float.h
+++ b/gcc/ginclude/float.h
@@ -1,19 +1,19 @@
/* Copyright (C) 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/ginclude/iso646.h b/gcc/ginclude/iso646.h
index 79f4fd7c7f9..f09672a9787 100644
--- a/gcc/ginclude/iso646.h
+++ b/gcc/ginclude/iso646.h
@@ -1,19 +1,19 @@
/* Copyright (C) 1997, 1999 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/ginclude/stdarg.h b/gcc/ginclude/stdarg.h
index e451c31c53f..f178505e892 100644
--- a/gcc/ginclude/stdarg.h
+++ b/gcc/ginclude/stdarg.h
@@ -1,19 +1,19 @@
/* Copyright (C) 1989, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/ginclude/stdbool.h b/gcc/ginclude/stdbool.h
index 33f7d3d4110..93003e2b346 100644
--- a/gcc/ginclude/stdbool.h
+++ b/gcc/ginclude/stdbool.h
@@ -1,19 +1,19 @@
/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
index 2cd15899af1..f1046f44bb1 100644
--- a/gcc/ginclude/stddef.h
+++ b/gcc/ginclude/stddef.h
@@ -1,19 +1,19 @@
/* Copyright (C) 1989, 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index 8ea2481ce81..a8b587e8a8e 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -1298,7 +1298,7 @@ schedule_insn (insn, ready, clock)
char buf[2048];
print_insn (buf, insn, 0);
- buf[40]=0;
+ buf[40] = 0;
fprintf (sched_dump, ";;\t%3i--> %-40s:", clock, buf);
if (recog_memoized (insn) < 0)
@@ -2251,7 +2251,7 @@ schedule_block (b, rgn_n_insns)
/* Allow the target to reorder the list, typically for
better instruction bundling. */
- if (targetm.sched.reorder
+ if (sort_p && targetm.sched.reorder
&& (ready.n_ready == 0
|| !SCHED_GROUP_P (ready_element (&ready, 0))))
can_issue_more =
diff --git a/gcc/hooks.c b/gcc/hooks.c
index 8926638347c..1ec672585c2 100644
--- a/gcc/hooks.c
+++ b/gcc/hooks.c
@@ -157,3 +157,10 @@ hook_rtx_rtx_identity (x)
return x;
}
+/* Generic hook that takes an rtx and returns NULL_RTX. */
+rtx
+hook_rtx_rtx_null (x)
+ rtx x ATTRIBUTE_UNUSED;
+{
+ return 0;
+}
diff --git a/gcc/hooks.h b/gcc/hooks.h
index f7a4d6d3020..5866da71bc9 100644
--- a/gcc/hooks.h
+++ b/gcc/hooks.h
@@ -46,5 +46,6 @@ bool default_can_output_mi_thunk_no_vcall
bool hook_bool_tree_tree_false PARAMS ((tree, tree));
rtx hook_rtx_rtx_identity PARAMS ((rtx));
+rtx hook_rtx_rtx_null PARAMS ((rtx));
#endif
diff --git a/gcc/hosthooks-def.h b/gcc/hosthooks-def.h
index 488e3ea2e97..8a2b6b803cb 100644
--- a/gcc/hosthooks-def.h
+++ b/gcc/hosthooks-def.h
@@ -1,20 +1,20 @@
/* Default macros to initialize the lang_hooks data structure.
Copyright 2003 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/hosthooks.h b/gcc/hosthooks.h
index 92b9e5d6e32..7b9dba50ef1 100644
--- a/gcc/hosthooks.h
+++ b/gcc/hosthooks.h
@@ -1,20 +1,20 @@
/* The host_hooks data structure.
Copyright 2003 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index ed04aefed64..9236b6a08bb 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -2365,7 +2365,8 @@ find_if_block (ce_info)
/* The THEN block of an IF-THEN combo must have zero or one successors. */
if (then_succ != NULL_EDGE
&& (then_succ->succ_next != NULL_EDGE
- || (then_succ->flags & EDGE_COMPLEX)))
+ || (then_succ->flags & EDGE_COMPLEX)
+ || (flow2_completed && tablejump_p (then_bb->end, NULL, NULL))))
return FALSE;
/* If the THEN block has no successors, conditional execution can still
@@ -2412,7 +2413,8 @@ find_if_block (ce_info)
&& then_succ->dest == else_succ->dest
&& else_bb->pred->pred_next == NULL_EDGE
&& else_succ->succ_next == NULL_EDGE
- && ! (else_succ->flags & EDGE_COMPLEX))
+ && ! (else_succ->flags & EDGE_COMPLEX)
+ && ! (flow2_completed && tablejump_p (else_bb->end, NULL, NULL)))
join_bb = else_succ->dest;
/* Otherwise it is not an IF-THEN or IF-THEN-ELSE combination. */
@@ -2741,6 +2743,8 @@ find_if_case_1 (test_bb, then_edge, else_edge)
{
new_bb->index = then_bb_index;
BASIC_BLOCK (then_bb_index) = new_bb;
+ if (post_dominators)
+ add_to_dominance_info (post_dominators, new_bb);
}
/* We've possibly created jump to next insn, cleanup_cfg will solve that
later. */
diff --git a/gcc/integrate.c b/gcc/integrate.c
index 6cb93ccf01c..848e59a7679 100644
--- a/gcc/integrate.c
+++ b/gcc/integrate.c
@@ -159,11 +159,13 @@ function_cannot_inline_p (fndecl)
tree last = tree_last (TYPE_ARG_TYPES (TREE_TYPE (fndecl)));
/* For functions marked as inline increase the maximum size to
- MAX_INLINE_INSNS (-finline-limit-<n>). For regular functions
- use the limit given by INTEGRATE_THRESHOLD. */
+ MAX_INLINE_INSNS_RTL (--param max-inline-insn-rtl=<n>). For
+ regular functions use the limit given by INTEGRATE_THRESHOLD.
+ Note that the RTL inliner is not used by the languages that use
+ the tree inliner (C, C++). */
int max_insns = (DECL_INLINE (fndecl))
- ? (MAX_INLINE_INSNS
+ ? (MAX_INLINE_INSNS_RTL
+ 8 * list_length (DECL_ARGUMENTS (fndecl)))
: INTEGRATE_THRESHOLD (fndecl);
diff --git a/gcc/intl/ChangeLog b/gcc/intl/ChangeLog
index 1fe7f37090b..4c1f235fd79 100644
--- a/gcc/intl/ChangeLog
+++ b/gcc/intl/ChangeLog
@@ -1,3 +1,8 @@
+2003-03-14 Loren J. Rittle <ljrittle@acm.org>
+
+ * Makefile.in (.y.c): Only enable production rule when
+ maintaining.
+
2002-05-25 Roman Lechtchinsky <rl@cs.tu-berlin.de>
* gettextP.h (SWAP): Change parameter type to unsigned int.
diff --git a/gcc/intl/Makefile.in b/gcc/intl/Makefile.in
index 94d7576a562..645cd33c156 100644
--- a/gcc/intl/Makefile.in
+++ b/gcc/intl/Makefile.in
@@ -95,9 +95,12 @@ LTV_AGE=0
.c.lo:
$(LIBTOOL) --mode=compile $(COMPILE) $<
+# Unless maintaining, suppress (a) smart makes who think they know how to
+# automake Yacc files and (b) makes who handle VPATH search of generated
+# files differently than GNU make.
.y.c:
- $(YACC) $(YFLAGS) --output $@ $<
- rm -f $*.h
+@MAINT@ $(YACC) $(YFLAGS) --output $@ $<
+@MAINT@ rm -f $*.h
.sin.sed:
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 31bd3a4dc80..c141615b6b0 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,100 @@
+2003-03-30 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * gcj.texi: Remove @ at start of file.
+
+2003-03-25 Tom Tromey <tromey@redhat.com>
+
+ * parse.y (create_interface): Call CHECK_DEPRECATED.
+
+2003-03-23 Zack Weinberg <zack@codesourcery.com>
+
+ * Make-lang.in: Link jcf-dump against $(LDEXP_LIB).
+
+2003-03-21 Zack Weinberg <zack@codesourcery.com>
+
+ * javaop.h (jfloat, jdouble): Make them structures mirroring
+ the bit fields of IEEE float and double respectively.
+ (JFLOAT_FINITE, JFLOAT_QNAN_MASK, JFLOAT_EXP_BIAS,
+ JDOUBLE_FINITE, JDOUBLE_QNAN_MASK, JDOUBLE_EXP_BIAS): New.
+ (union Word, union DWord): Delete.
+ (WORD_TO_FLOAT, WORDS_TO_DOUBLE): Update to match.
+
+ * gjavah.c (java_float_finite, java_double_finite, F_NAN_MASK,
+ D_NAN_MASK): Delete.
+ (jni_print_float, jni_print_double): New. Generate
+ hexadecimal floating constants.
+ (print_field_info): Use jni_print_float/double.
+
+ * jcf-dump.c: Include math.h. Use ldexp/frexp to assemble
+ finite floating point numbers for output; special case
+ non-finite floats.
+
+2003-03-19 Nathanael Nerode <neroden@gcc.gnu.org>
+
+ * lang.c (java_dump_tree): Change return type from 'int' to 'bool'.
+ Replace 0 and 1 with true and false in return statements.
+
+2003-03-19 Tom Tromey <tromey@redhat.com>
+
+ * lex.c (do_java_lex): Renamed from java_lex.
+ (java_lex): New function.
+ Include timevar.h.
+
+2003-03-13 Tom Tromey <tromey@redhat.com>
+
+ * parse.y (resolve_inner_class): Error if qualifier is a primitive
+ type.
+
+2003-03-04 Andrew Haley <aph@redhat.com>
+
+ * gjavah.c (is_first_data_member): New global variable.
+ (print_c_decl): If it's the first data member, align it as the
+ superclass.
+ (process_file): Set is_first_data_member.
+
+2003-03-11 Tom Tromey <tromey@redhat.com>
+
+ * parse.y (resolve_field_access): Initialize class if field is
+ found in another static field.
+ * expr.c (build_class_init): Don't optimize out initialization of
+ implemented interface.
+
+2003-03-11 Andrew Haley <aph@redhat.com>
+
+ * jcf-io.c (caching_stat): Initialize origsep to remove compiler
+ warning.
+
+2003-03-10 Ranjit Mathew <rmathew@hotmail.com>
+
+ * jcf-io.c (caching_stat): Account for both DIR_SEPARATOR
+ and DIR_SEPARATOR_2 for a target.
+ Correct minor typos.
+
+ * jcf-write.c (make_class_file_name): Take both DIR_SEPARATOR
+ and DIR_SEPARATOR_2 for a target into account.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * lang.c (java_init): Update prototype, move code to java_post_options.
+ (java_post_options): Similarly.
+
+2003-03-05 Ranjit Mathew <rmathew@hotmail.com>
+
+ * jcf.h (COMPARE_FILENAMES): New macro similar to "strcmp" to
+ compare file name components depending on the case-sensitivity
+ or otherwise of the host file system.
+
+ * jcf-path.c (add_entry): Use COMPARE_FILENAMES instead of
+ "strcmp" to compare file name components.
+ Use IS_DIR_SEPARATOR instead of comparing directly against
+ DIR_SEPARATOR.
+ (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of
+ comparing directly against DIR_SEPARATOR.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * Make-lang.in (java.tags): New target.
+
2003-03-01 Roger Sayle <roger@eyesopen.com>
* java/builtins.c (builtin_type): Handle DEF_FUNCTION_TYPE_VAR_3.
@@ -25,7 +122,7 @@
* java/decl.c (java_init_decl_processing): Get soft_fmod_node from
built_in_decls[BUILT_IN_FMOD] rather than define it ourselves.
-
+
2003-02-23 Tom Tromey <tromey@redhat.com>
* lang-options.h: Added -Wdeprecated.
@@ -67,12 +164,12 @@
2003-02-12 Ranjit Mathew <rmathew@hotmail.com>
- * decl.c (java_init_decl_processing): Change
+ * decl.c (java_init_decl_processing): Change
soft_lookupjnimethod_node to reflect the change in
signature of _Jv_LookupJNIMethod in libjava/jni.cc
* expr.c (build_jni_stub): Calculate and pass the size
on the stack of the arguments to a JNI function. Use
- new target macro MODIFY_JNI_METHOD_CALL to allow a
+ new target macro MODIFY_JNI_METHOD_CALL to allow a
target to modify the call to a JNI method.
2003-02-08 Roger Sayle <roger@eyesopen.com>
@@ -258,7 +355,7 @@
2003-01-14 Andrew Haley <aph@redhat.com>
* decl.c (java_init_decl_processing): _Jv_NewMultiArray is a
- varargs function -- correct.
+ varargs function -- correct.
2003-01-14 Andrew Haley <aph@redhat.com>
@@ -505,7 +602,7 @@
* gcj.texi: Change version number to 3.4.
2002-12-05 Ranjit Mathew <rmathew@hotmail.com>
- Andrew Haley <aph@redhat.com>
+ Andrew Haley <aph@redhat.com>
* parse.y (source_end_java_method): Remove custom encoding of line
numbers for a function decl before passing it to the back end.
@@ -1422,7 +1519,7 @@
(read_class): Call it.
(java_parse_file): Likewise.
-Thu Mar 28 13:22:22 CET 2002 Jan Hubicka <jh@suse.cz>
+2002-03-28 Jan Hubicka <jh@suse.cz>
* java/lang.c (java_init_options): Set flag_trapping_math to 0.
@@ -2136,7 +2233,7 @@ Thu Mar 28 13:22:22 CET 2002 Jan Hubicka <jh@suse.cz>
* check-init.c (check_init) [SWITCH_EXPR]: Use SWITCH_HAS_DEFAULT.
-Mon Dec 10 06:09:57 2001 Douglas B. Rupp <rupp@gnat.com>
+2001-12-10 Douglas B. Rupp <rupp@gnat.com>
* Make-lang.in (jvspec.o): Add $(OUTPUT_OPTION).
@@ -2457,7 +2554,7 @@ Mon Dec 10 06:09:57 2001 Douglas B. Rupp <rupp@gnat.com>
into for loop, restore TREE_CHAIN on local `tem' before the next
iteration.
-Tue Oct 23 14:02:17 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2001-10-23 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* lang.c (lang_get_alias_set): Deleted.
@@ -3839,7 +3936,7 @@ Tue Oct 23 14:02:17 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
instead of parse_ctxt fields - the lists are global.
(init_src_parse): New function.
-Fri Feb 23 15:28:39 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2001-02-23 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* decl.c (set_block): Set NAMES and BLOCKS from BLOCK.
@@ -4020,7 +4117,7 @@ Fri Feb 23 15:28:39 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* jvspec.c (lang_specific_driver): Link with the shared
libgcc by default.
-Sun Feb 4 15:52:44 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2001-02-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* check-init.c (check_init): Call internal_error instead of fatal.
* expr.c (java_lang_expand_expr): Likewise.
@@ -4573,7 +4670,7 @@ Sun Feb 4 15:52:44 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
necessary.
Fixes gcj/367.
-Thu Nov 23 02:19:14 2000 J"orn Rennecke <amylaar@redhat.com>
+2000-11-23 J"orn Rennecke <amylaar@redhat.com>
* Make-lang.in (jvspec.o): Depend on $(CONFIG_H).
@@ -5071,12 +5168,12 @@ Thu Nov 23 02:19:14 2000 J"orn Rennecke <amylaar@redhat.com>
`class$'.
(mangle_static_field): Use mangle_field.
-Tue Oct 3 13:44:37 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-10-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (find_local_variable): Removed uncessary type check and
fixed range check typo. From Corey Minyard.
-Wed Sep 13 16:06:52 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-09-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (give_name_to_locals): New local `code_offset'. Call
`maybe_adjust_start_pc'.
@@ -5088,7 +5185,7 @@ Wed Sep 13 16:06:52 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(note_instructions): Likewise.
* jcf-parse.c (parse_class_file): Call `note_instructions'.
-Wed Sep 13 11:50:35 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-09-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (field_access:): Fixed indentation.
(qualify_ambiguous_name): Properly qualify `this.a[b].c'.
@@ -5394,7 +5491,7 @@ Wed Sep 13 11:50:35 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* ChangeLog: Fixed typo in some jcf-write.c entries mentioning
generate_bytecode_{conditional,insns}.
-Sun Aug 13 09:41:49 2000 Anthony Green <green@redhat.com>
+2000-08-13 Anthony Green <green@redhat.com>
* check-init.c (check_init): Add case for BIT_FIELD_REF (required
for -pg builds).
@@ -5452,7 +5549,7 @@ Sun Aug 13 09:41:49 2000 Anthony Green <green@redhat.com>
(patch_incomplete_class_ref): `build_dot_class_method_invocation'
to use `ref_type' directly.
-Sun Aug 6 00:47:24 2000 Ovidiu Predescu <ovidiu@cup.hp.com>
+2000-08-06 Ovidiu Predescu <ovidiu@cup.hp.com>
* lang-options.h: Added a comma after the last element to avoid
syntax errors when other languages define additional options.
@@ -5894,7 +5991,7 @@ Sun Aug 6 00:47:24 2000 Ovidiu Predescu <ovidiu@cup.hp.com>
(find_most_specific_methods_list): New local variables `abstract'
and `candidates'. Use them to pick the right method.
-Tue Jun 6 11:39:05 2000 Tom Tromey <tromey@ferrule.cygnus.com>
+2000-06-06 Tom Tromey <tromey@ferrule.cygnus.com>
* parse.y (check_modifiers_consistency): Don't subtract out
`PUBLIC_TK' from argument to THIS_MODIFIER_ONLY.
@@ -5905,7 +6002,7 @@ Tue Jun 6 11:39:05 2000 Tom Tromey <tromey@ferrule.cygnus.com>
(LIBS): Add above.
(DEPLIBS): Ditto.
-Fri Jun 2 16:48:55 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-06-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (get_dispatch_table): Build the vtable dummy entry list
element with a null purpose. Fixed leading comment.
@@ -5969,12 +6066,12 @@ Fri Jun 2 16:48:55 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
one.)
(resolve_qualified_expression_name): Fixed comment.
-Thu Apr 27 17:47:34 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-04-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (jcf_parse_source): Reset current_class and
current_function_decl to NULL before parsing a new file.
-Thu Apr 27 17:25:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-04-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (block_end:): If the collected block doesn't feature a
statement, insert an empty statement.
@@ -6013,7 +6110,7 @@ Thu Apr 27 17:25:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_classfile): Scan the source_file for
slashes with the right pointer variable.
-Wed May 17 17:27:44 2000 Andrew Cagney <cagney@b1.cygnus.com>
+2000-05-17 Andrew Cagney <cagney@b1.cygnus.com>
* lang.c (lang_decode_option): Update -Wunused flags by calling
set_Wunused.
@@ -6120,7 +6217,7 @@ Wed May 17 17:27:44 2000 Andrew Cagney <cagney@b1.cygnus.com>
or `private' methods.
(patch_invoke): Handle INVOKE_NONVIRTUAL case.
-Wed Apr 26 14:29:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-04-26 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (complete_start_java_method): Don't call _Jv_InitClass
from <clinit>
@@ -6146,7 +6243,7 @@ Wed Apr 26 14:29:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_method_invocation): Insert proper context as second
parameter to pure inner class constructor super invocations.
-Mon Apr 24 14:59:36 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-04-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (end_class_declaration): Reset the interface number
counter.
@@ -6174,7 +6271,7 @@ Mon Apr 24 14:59:36 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* boehm.c (mark_reference_fields): Added `last_view_index'
argument. Use DECL_FIELD_OFFSET to determine field's offset.
-Thu Apr 20 17:41:28 2000 Mo DeJong <mdejong@cygnus.com>
+2000-04-20 Mo DeJong <mdejong@cygnus.com>
* parse.h (INTERFACE_INNER_MODIFIERS): New macro.
* parse.y (check_class_interface_creation): Fixed comments. Select
@@ -6194,7 +6291,7 @@ Thu Apr 20 17:41:28 2000 Mo DeJong <mdejong@cygnus.com>
class, when doing inheritance check for protected reference.
Fixes PR gcj/124.
-Thu Apr 20 18:20:58 2000 Jason Schroeder <shrode@subnature.com>
+2000-04-20 Jason Schroeder <shrode@subnature.com>
* jcf-dump.c (SPECIAL_IINC): Fixed typo printing iinc instruction.
@@ -6316,7 +6413,7 @@ Thu Apr 20 18:20:58 2000 Jason Schroeder <shrode@subnature.com>
* parse.y (create_new_parser_context): Likewise.
-Thu Mar 30 15:26:56 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-03-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (java_lang_expand_expr): Added Anthony's Thu Jan 6 2000
patch missing hunk. Fixed indentation.
@@ -6352,13 +6449,13 @@ Thu Mar 30 15:26:56 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jvspec.c (jvgenmain_spec): Add `%{<...}' construct for each
Java-specific `-f' option.
-Sun Mar 26 11:37:55 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-03-26 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* decl.c (init_decl_processing): Only call initialize_sizetypes once.
Adjust order of making types.
Make bitsize_*_node values.
-Sat Mar 25 09:12:10 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-03-25 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* class.c (make_field_value): Use byte_position.
* expr.c (JAVA_ARRAY_LENGTH_OFFSET): Use byte_position.
@@ -6381,7 +6478,7 @@ Sat Mar 25 09:12:10 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
(find_most_specific_methods_list): Pick the closest candidate when
they're all abstract.
-Mon Mar 20 08:58:51 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-03-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_insns): TRY_FINALLY_EXPR:
properly initialize `finished_label'. Don't emit gotos for empty
@@ -6416,7 +6513,7 @@ Mon Mar 20 08:58:51 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_incomplete_class_ref): Invoke synthetic method if necessary.
(build_try_statement): Fixed leading comment.
-Fri Mar 17 08:09:14 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-03-17 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* class.c (make_field_value): Properly handle sizes.
(get_dispatch_vector): Use tree_low_cst and host_integerp.
@@ -6474,7 +6571,7 @@ Fri Mar 17 08:09:14 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
mark_reference_fields.
(mark_reference_fields): New function.
-Tue Mar 14 17:15:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-03-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (register_incomplete_type): Fixed initialization of
JDEP_ENCLOSING.
@@ -6506,7 +6603,7 @@ Tue Mar 14 17:15:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
Section dealing with qualified expression rewritten to use
resolve_field_access.
-Mon Mar 13 12:21:13 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-03-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (PUSH_CPC): Fixed indentation.
(DEBUG_CPC): New macro.
@@ -6529,7 +6626,7 @@ Mon Mar 13 12:21:13 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(resolve_qualified_expression_name): Handle situation where `this'
is implied.
-Mon Mar 13 11:36:51 2000 Hans Boehm <boehm@acm.org>
+2000-03-13 Hans Boehm <boehm@acm.org>
* typeck.c (build_prim_array_type): Correctly set the high word too.
@@ -6560,7 +6657,7 @@ Mon Mar 13 11:36:51 2000 Hans Boehm <boehm@acm.org>
* expr.c (force_evaluation_order): Call force_evaluation_order on
function's arguments too.
-Mon Mar 6 18:07:07 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-03-06 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* decl.c (emit_init_test_initialization): Mark KEY as unused.
* expr.c (build_newarray): Cast TREE_INT_CST_LOW to HOST_WIDE_INT.
@@ -6608,7 +6705,7 @@ Mon Mar 6 18:07:07 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
(lookup_java_method): Re-written by calling lookup_do.
(lookup_do): New function.
-Thu Mar 2 15:18:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-03-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Removed dead code. Handle (blank)
final variables.
@@ -6669,13 +6766,13 @@ Thu Mar 2 15:18:33 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (current_function_decl): Move to toplev.c.
-Mon Feb 28 08:20:42 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-02-28 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* java-tree.h (LABEL_PC): Relect name changes in ../tree.h.
(DECL_BIT_INDEX): Use underlying representation.
* parse.h (DECL_INHERITED_SOURCE_LINE): Likewise.
-Sun Feb 27 16:40:33 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-02-27 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* expr.c (build_java_ret): Pass proper type to size_binop.
@@ -6702,25 +6799,25 @@ Sun Feb 27 16:40:33 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
(struct lang_decl): Add init_test_table field.
(init_test_hash_entry): Define.
-Fri Feb 25 18:41:31 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* gjavah.c (main): Avoid using `argi' to report unimplemented
options.
-Fri Feb 25 18:47:25 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_insns): TRY_FINALLY_EXPR:
initialize locals to avoid warnings. Local `exception_type' moved
into if statement.
-Fri Feb 25 18:00:37 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_expression_name): Use `orig' as a second
argument to resolve_field_access.
(resolve_field_access): Removed unnecessary code when dealing with
static fields.
-Wed Feb 23 17:41:50 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-23 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (push_super_field): Don't push the field twice.
* jcf-parse.c (parse_source_file): Call java_reorder_fields.
@@ -6738,7 +6835,7 @@ Wed Feb 23 17:41:50 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (init_decl_processing): `_Jv_IsInstanceOf' returned
value type set to `boolean_type_node'.
-Mon Jan 18 14:30:09 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
+2000-01-18 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
* jcf-dump.c (main): Test for correct condition after
output file creation.
@@ -6747,7 +6844,7 @@ Mon Jan 18 14:30:09 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
* jcf-depend.c (add_entry): Fix test for first list entry.
-Sat Feb 19 18:43:13 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-02-19 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* class.c (build_class_ref, push_super_field): Set DECL_SIZE_UNIT.
* constants.c (build_constants_constructor): Likewise.
@@ -6756,7 +6853,7 @@ Sat Feb 19 18:43:13 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* jcf-depend.c (add_entry): Add entries to the end of the list.
-Wed Nov 03 02:16:00 PST 1999 Pekka Nikander <pekka.nikander@hut.fi>
+1999-11-03 Pekka Nikander <pekka.nikander@hut.fi>
* decl.c (INT_TYPE_SIZE): Define if necessary.
(expand_java_return): Handle the case of a native integer smaller
@@ -6768,12 +6865,12 @@ Wed Nov 03 02:16:00 PST 1999 Pekka Nikander <pekka.nikander@hut.fi>
* jv-scan.c (help): Likewise.
* jcf-dump.c (help): Likewise.
-Thu Feb 17 14:30:37 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_insns): Don't generate empty
`finally' clauses.
-Thu Feb 17 13:20:58 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (load_class): Call `fatal' if no file containing
the target class are found.
@@ -6820,7 +6917,7 @@ Thu Feb 17 13:20:58 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jv-scan.c: Likewise.
-Sat Feb 12 04:34:04 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (outer_field_access_fix): First parameter now a tree
node. Check for assignement to final. First argument to
@@ -6834,7 +6931,7 @@ Sat Feb 12 04:34:04 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_unaryop): Use node instead of its line/column value when
calling outer_field_access_fix.
-Fri Feb 11 17:38:26 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (interface_declaration:): No longer tagged
<node>. Re-installed default action.
@@ -6846,24 +6943,24 @@ Fri Feb 11 17:38:26 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(register_fields): Inner class static field limitations not to
apply to inner interfaces.
-Thu Feb 10 22:07:35 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (load_class): Update `java_error_count' when a
class' file can't be found.
(parse.y): Avoid (byte)code generation when errors seen.
-Thu Feb 10 20:10:43 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_complete_lhs): Handle TRUNC_DIV_EXPR. Ensure `fatal'
decodes a valid node.
(patch_binop): Handle TRUNC_DIV_EXPR.
-Thu Feb 10 16:04:26 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_package): New local `acc'. Try to progressively
build and guess a package and type name.
-Thu Feb 10 12:52:09 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (find_applicable_accessible_methods_list): Load and
layout the search class if necessary.
@@ -6926,7 +7023,7 @@ Thu Feb 10 12:52:09 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_unaryop): Handle outer field access when generating
bytecode.
-Thu Feb 3 20:23:19 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (FIELD_THISN): New macro.
* jcf-write.c (append_synthetic_attribute): New function.
@@ -6993,7 +7090,7 @@ Thu Feb 3 20:23:19 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
assemble doubles correctly when HOST_FLOAT_WORDS_BIG_ENDIAN is
defined to be 1.
-Wed Feb 2 18:43:37 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.def (INSTANCE_INITIALIZERS_EXPR): New tree code.
* java-tree.h (TYPE_II_STMT_LIST): New macro.
@@ -7086,7 +7183,7 @@ Wed Feb 2 18:43:37 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(main): Use getopt_long_only to parse command line.
(usage): Changed message.
-Tue Feb 1 22:23:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.def (NEW_ANONYMOUS_ARRAY_EXPR): New tree code.
* parse.h (ANONYMOUS_ARRAY_BASE_TYPE, ANONYMOUS_ARRAY_DIMS_SIG,
@@ -7097,7 +7194,7 @@ Tue Feb 1 22:23:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(qualify_ambiguous_name): Likewise.
(java_complete_expand_class): Likewise.
-Tue Feb 1 14:59:35 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-02-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.def (SYNCHRONIZED_EXPR): Fixed typo.
* parse.h (MANGLE_ALIAS_INITIALIZER_PARAMETER_NAME_ID): New macro.
@@ -7143,7 +7240,7 @@ Tue Feb 1 14:59:35 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
error handling/recovery.
* java-tree.h (SYNCHRONIZED_EXPR): Fixed typo in comment.
-Fri Jan 28 20:10:57 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-28 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (ARG_FINAL_P, FIELD_LOCAL_ALIAS,
FIELD_LOCAL_ALIAS_USED): New macros.
@@ -7320,7 +7417,7 @@ Fri Jan 28 20:10:57 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC.
(set_java_signature): Likewise.
-Mon Jan 18 14:30:09 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
+2000-01-18 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
* gjavah.c: Delete ACC_VISIBILITY define.
* jcf.h: Add ACC_VISIBILITY define.
@@ -7329,7 +7426,7 @@ Mon Jan 18 14:30:09 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
default package access check.
(local_variable_declaration_statement): Use final: rule.
-Mon Jan 17 11:58:17 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
+2000-01-17 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
* parse.y (format_parameter:): Use final: rule instead of modifiers:.
(final:): New rule.
@@ -7338,7 +7435,7 @@ Mon Jan 17 11:58:17 2000 Joerg Brunsmann <joerg.brunsmann@fernuni-hagen.de>
* gjavah.c (print_field_info): Allow non-static final fields.
-Fri Jan 14 18:03:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (enum jdep_code): New entry `JDEP_ANONYMOUS'.
* parse.y (patch_anonymous_class): New function.
@@ -7347,7 +7444,7 @@ Fri Jan 14 18:03:41 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(parser_check_super_interface): Simplify argument to CLASS_INTERFACE.
(verify_constructor_super): Tuned error message.
-Fri Jan 14 00:14:24 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (FOR_LOOP_P): Replaces IS_FOR_LOOP_P.
(ANONYMOUS_CLASS_P): New macro.
@@ -7391,7 +7488,7 @@ Fri Jan 14 00:14:24 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
(search_loop): Use FOR_LOOP_P.
(labeled_block_contains_loop_p): Likewise.
-Wed Jan 12 00:38:47 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (set_super_info): Set CLASS_STATIC when appropriate.
(enclosing_context_p): New function.
@@ -7572,7 +7669,7 @@ Wed Jan 12 00:38:47 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (build_string_concatenation): Only use
StringBuffer(String) shortcut if String arg is constant.
-Wed Jan 12 20:20:11 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_insns): binop: Change the type of
the shift value to int. Fixed typo in comment.
@@ -7593,12 +7690,12 @@ Wed Jan 12 20:20:11 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (jcf-dump, gcjh): Move ../errors.o before $(LIBS).
-Thu Jan 6 16:31:28 2000 Anthony Green <green@cygnus.com>
+2000-01-06 Anthony Green <green@cygnus.com>
* expr.c (java_lang_expand_expr): Switch to permanent obstack
before building constant array decl.
-Thu Jan 6 00:54:10 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
+2000-01-06 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_conditional): Fixed indentation in
method invocation and typo in conditional expression.
@@ -7657,7 +7754,7 @@ Thu Jan 6 00:54:10 2000 Alexandre Petit-Bianco <apbianco@cygnus.com>
patch_throw_statement, check_thrown_exceptions,
patch_conditional_expr): Likewise.
-Fri Dec 24 00:25:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (LIBDEPS): Added gcc's errors.o
(../jcf-dump$(exeext):): Link with gcc's errors.o
@@ -7696,7 +7793,7 @@ Fri Dec 24 00:25:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
fixes PR gcj/119.
(process_file): Use `\n\' at end of each line in string.
-Thu Dec 16 00:09:45 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (expand_invoke): Layout the loaded class before
attempting to use it.
@@ -7729,7 +7826,7 @@ Thu Dec 16 00:09:45 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* typeck.c (lookup_java_method): Take WFLs in method names into
account.
-Tue Dec 14 14:20:16 1999 Per Bothner <per@bothner.com>
+1999-12-14 Per Bothner <per@bothner.com>
* class.c (make_class_data): flag_keep_inline_functions to keep
private methods in the method array.
@@ -7739,12 +7836,12 @@ Tue Dec 14 14:20:16 1999 Per Bothner <per@bothner.com>
* check-init.c (check_init): Take into account both types of
`throw's when checking for uninitialized variables.
-Fri Dec 10 21:53:45 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_complete_lhs): Force convertion of array
dimensions to int_type_node, that's what runtime's ABI expects.
-Fri Dec 10 16:13:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (EXPR_WFL_QUALIFICATION): Temporary uses the third
operand of a WFL, until the Java front-end gets fixed with regard
@@ -7758,7 +7855,7 @@ Fri Dec 10 16:13:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
java-tree.h: Ditto.
jcf-write.c: Ditto.
-Wed Dec 8 15:33:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-08 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (java_lang_expand_expr): Switch to permanent obstack
before calling expand_eh_region_start and expand_start_all_catch.
@@ -7774,18 +7871,18 @@ Wed Dec 8 15:33:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(init_decl_processing): Mark all memory allocating DECLs with
DECL_IS_MALLOC.
-Wed Dec 1 04:25:06 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-12-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* except.c (expand_end_java_handler): Call
expand_resume_after_catch and end_catch_handler.
-Tue Nov 30 12:36:15 1999 Anthony Green <green@cygnus.com>
+1999-11-30 Anthony Green <green@cygnus.com>
* verify.c (verify_jvm_instructions): Create new return label
chain if non existent (don't rely on the verified state of the jsr
target.)
-Tue Nov 30 12:28:34 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (generate_bytecode_insns): Fixed indentation for
COMPOUND_EXPR and FIX_TRUNC_EXPR cases.
@@ -7800,7 +7897,7 @@ Tue Nov 30 12:28:34 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (find_local_variable): Reuse single slot decls when
appropriate.
-Wed Nov 24 17:33:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (saw_java_source): Global variable removed.
(read_class): Don't use `saw_java_source'. Added extra braces.
@@ -7810,12 +7907,12 @@ Wed Nov 24 17:33:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* except.c (emit_handlers): Zero catch_clauses after emitting them.
-Tue Nov 23 17:29:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-23 Alexandre Petit-Bianco <apbianco@cygnus.com>
* verify.c (merge_type_state): Non verified subroutines being
considered more than once to trigger passive type merge.
-Tue Nov 23 10:55:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-23 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (catch_clause_parameter:): Still set `$$' to NULL_TREE
in case of error. Error message tuned.
@@ -7839,12 +7936,12 @@ Tue Nov 23 10:55:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang.c (lang_decode_option): Parse new options.
-Wed Nov 17 21:09:28 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class): Always convert TYPE_SIZE_UNIT to
int_type_node: that's what `_Jv_AllocObject' expects.
-Thu Nov 11 01:57:14 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (lookup_method_invoke): Use lang_printable_name to
reliably build the type name during error report. Fixes PR gcj/97.
@@ -7855,7 +7952,7 @@ Thu Nov 11 01:57:14 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(jcf_path_init): Search for libjava.zip. Fixes PR gcj/84.
(DIR_UP): New macro.
-Tue Nov 9 12:12:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (source_end_java_method): Resume permanent allocation,
reversing Apr 27 1998 patch.
@@ -7867,39 +7964,39 @@ Tue Nov 9 12:12:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (finish_class): Emit inlined methods if any native
methods exist in the class. Fixes PR gcj/85.
-Thu Nov 4 16:27:01 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-04 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_qualified_expression_name): Handle PLUS_EXPR.
(qualify_ambiguous_name): Likewise.
-Wed Nov 3 15:20:02 MST 1999 Godmar Back <gback@cs.utah.edu>
+1999-11-03 Godmar Back <gback@cs.utah.edu>
* typeck.c: (lookup_java_method): search all inherited
interfaces when looking up interface method.
-Mon Nov 1 23:42:00 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (method_header:): Issue error message for rule `type
error'.
(synchronized:): Error report when not using synchronized.
-Mon Nov 1 01:32:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-11-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_qualified_expression_name): Prevent `this' from
being used before the superclass constructor has been called.
(complete_function_arguments): Use CALL_EXPLICIT_CONSTRUCTOR_P
instead of `CALL_THIS_CONSTRUCTOR_P'.
-Sat Oct 30 21:35:13 1999 Todd T. Fries <todd@lighthouse.fries.net>
+1999-10-30 Todd T. Fries <todd@lighthouse.fries.net>
* check-init.c: Fix typo in comment.
-Fri Oct 29 14:35:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-10-29 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (add_method_1): Set DECL_INLINE to 1 for private, static
and final method.
-Fri Oct 29 14:23:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-10-29 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (expression_statement:): Call function to report
improper invocation of a constructor.
@@ -7915,12 +8012,12 @@ Fri Oct 29 14:23:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jvgenmain.c (main): _Jv_Compiler_Properties now an extern; set
in generated `main'.
-Thu Oct 21 01:27:31 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-10-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_qualified_expression_name): Handle MODIFY_EXPR.
(qualify_ambiguous_name): Likewise.
-Wed Oct 20 01:41:47 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-10-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_complete_tree): fold_constant_for_init to work on
permanent_obstack.
@@ -7965,7 +8062,7 @@ Wed Oct 20 01:41:47 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* verify.c (verify_jvm_instructions): Likewise.
-Tue Oct 12 22:28:10 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-10-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (RELOCATION_VALUE_1): Fixed integer value from 0 to 1.
@@ -7983,11 +8080,11 @@ Tue Oct 12 22:28:10 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
well. Fixes Java PR gcj/59.
* parse-scan.y (yyerror): Report errors.
-Fri Sep 24 12:23:05 1999 Glenn Chambers <GChambers@provsol.com>
+1999-09-24 Glenn Chambers <GChambers@provsol.com>
* decl.c (insert_block): Remove unconditional `abort'.
-Fri Sep 24 10:48:10 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+1999-09-24 Bernd Schmidt <bernds@cygnus.co.uk>
* decl.c (builtin_function): No longer static. New arg CLASS. Arg
FUNCTION_CODE now of type int. All callers changed.
@@ -8006,7 +8103,7 @@ Fri Sep 24 10:48:10 1999 Bernd Schmidt <bernds@cygnus.co.uk>
(WORDS_TO_LONG): Likewise.
(WORDS_TO_DOUBLE): Likewise.
-Tue Sep 14 16:24:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-09-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-write.c (RELOCATION_VALUE_0): New macro.
(RELOCATION_VALUE_1): Likewise.
@@ -8035,7 +8132,7 @@ Tue Sep 14 16:24:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang.c (lang_decode_option): Extend comment.
-Thu Sep 16 15:42:39 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-09-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_method_add_stmt): Test against GET_CURRENT_BLOCK
instead of fndecl.
@@ -8080,7 +8177,7 @@ Thu Sep 16 15:42:39 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* zextract.c (ALLOC): Use xmalloc, not malloc.
-Sun Sep 12 23:30:09 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-09-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Make-lang.in (jvspec.o): Depend on system.h and gcc.h.
@@ -8092,12 +8189,12 @@ Sun Sep 12 23:30:09 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
(lang_specific_driver): All calls to the function pointer
parameter now explicitly call `fatal'.
-Sat Sep 11 16:46:44 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-09-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (find_applicable_accessible_methods_list): Search
abstract classes as interfaces.
-Thu Sep 9 17:33:28 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-09-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (finish_class): We're now outside a valid method
declaration. Tell the rest of gcc so.
@@ -8113,7 +8210,7 @@ Thu Sep 9 17:33:28 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(decode_signature_piece): Don't emit "::" in JArray<>.
(print_namelet): Only print trailing `;' when printing a class.
-Fri Sep 10 10:32:32 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+1999-09-10 Bernd Schmidt <bernds@cygnus.co.uk>
* java-tree.h: Delete declarations for all tree nodes now moved to
global_trees.
@@ -8173,7 +8270,7 @@ Fri Sep 10 10:32:32 1999 Bernd Schmidt <bernds@cygnus.co.uk>
* Make-lang.in: Likewise.
-Mon Aug 30 16:41:41 1999 Hans-Peter Nilsson <hp@axis.se>
+1999-08-30 Hans-Peter Nilsson <hp@axis.se>
* Makefile.in (xref.o): Depend on xref.c explicitly.
@@ -8183,7 +8280,7 @@ Mon Aug 30 16:41:41 1999 Hans-Peter Nilsson <hp@axis.se>
* lang.c (lang_printable_name): Likewise.
-Fri Aug 27 23:31:57 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-27 Jeffrey A Law (law@cygnus.com)
* gjavah.c, jcf-write.c, verify.c: Do not use C++ style
comments in C code.
@@ -8193,13 +8290,13 @@ Fri Aug 27 23:31:57 1999 Jeffrey A Law (law@cygnus.com)
* gjavah.c (print_cxx_classname): Print "::" before qualified
name.
-Thu Aug 26 09:10:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-26 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (lookup_cl): Changed leading comment. Now does its best
to set the column number.
(qualify_ambiguous_name): Take WFL wrappers into account.
-Wed Aug 25 15:37:15 1999 Gregg Townsend <gmt@cs.arizona.edu>
+1999-08-25 Gregg Townsend <gmt@cs.arizona.edu>
* verify.c (verify_jvm_instructions): Don't check instruction
validity beyond end of method.
@@ -8262,7 +8359,7 @@ Wed Aug 25 15:37:15 1999 Gregg Townsend <gmt@cs.arizona.edu>
* verify.c (start_pc_cmp): Don't needlessly cast away const.
-Sun Aug 22 11:07:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (check_method_redefinition): Changed leading comment.
(check_abstract_method_definitions): New function.
@@ -8271,7 +8368,7 @@ Sun Aug 22 11:07:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(verify_constructor_super): Fixed indentation.
(lookup_method_invoke): Likewise.
-Thu Aug 19 10:26:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (method_header): Return a null pointer if the current
class node is null.
@@ -8280,18 +8377,18 @@ Thu Aug 19 10:26:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(source_start_java_method): Likewise.
(java_method_add_stmt): Likewise.
-Wed Aug 18 13:17:15 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-18 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (emit_register_class): Removed unnecessary call to
start_sequence.
* parse.y (labeled_block_contains_loop_p): Removed unused local
variable.
-Tue Aug 17 22:51:44 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_refold): Added prototype.
-Tue Aug 17 21:48:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-08-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (BINOP_COMPOUND_CANDIDATES): New macro.
(java_stabilize_reference): Removed unnecessary `else'.
@@ -8313,7 +8410,7 @@ Tue Aug 17 21:48:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (java_lang_expand_expr): Mark static array data as
referenced.
-Tue Aug 10 00:28:31 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+1999-08-10 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
* jvgenmain.c (main): NUL-terminate name_obstack.
@@ -8465,7 +8562,7 @@ Tue Aug 10 00:28:31 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
(java_complete_expand_methods, java_expand_finals): Make static.
(convert_narrow): Remove static prototype.
-Tue Aug 3 20:21:20 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+1999-08-03 J"orn Rennecke <amylaar@cygnus.co.uk>
* Makefile.in (decl.o): Depends on $(srcdir)/../defaults.h.
@@ -8537,7 +8634,7 @@ Tue Aug 3 20:21:20 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
(print_full_cxx_name): New function.
(print_c_decl): Use print_full_cxx_name.
-Thu Jul 22 12:41:12 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-07-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Handle MAX_EXPR.
@@ -8567,7 +8664,7 @@ Thu Jul 22 12:41:12 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang-options.h (DEFINE_LANG_NAME ("Java")): Add
-fuse-divide-subroutine
-Tue Jul 20 13:20:05 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-07-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_and_layout): Check methods only once.
(resolve_qualified_expression_name): Verify thrown exceptions
@@ -8580,17 +8677,17 @@ Tue Jul 20 13:20:05 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (expand_expr): Do not return the last statement in a
block as the block's value.
-Sat Jul 3 22:26:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-07-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (force_evaluation_order): Save the COMPOUND_EXPR'ed
CALL_EXPR, to avoid order of evaluation changes.
-Fri Jul 2 17:44:08 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-07-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Do not use
IDENTIFIER_LOCAL_VALUE when name is a STRING_CST.
-Thu Jul 1 23:31:16 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-07-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Handle MAX_EXPR.
* expr.c (force_evaluation_order): Force method call arguments to
@@ -8598,7 +8695,7 @@ Thu Jul 1 23:31:16 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Loop again to qualify
NEW_ARRAY_EXPR properly.
-Wed Jun 30 17:27:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_invoke): Resolve unresolved invoked method
returned type.
@@ -8615,7 +8712,7 @@ Wed Jun 30 17:27:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jvspec.c (lang_specific_driver): Recognize --help.
-Fri Jun 25 13:35:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_package): Fixed bogus return statement.
(patch_method_invocation): Resolve method invocation beginning with
@@ -8628,19 +8725,19 @@ Fri Jun 25 13:35:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java.stage3): Likewise for stage3-start.
(java.stage4): Likewise for stage4-start.
-Thu Jun 24 13:12:15 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_complete_lhs): When doing cross referencing, don't
try to keep file location on a WFL expanded as a CALL_EXPR.
-Wed Jun 23 14:37:15 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-23 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (finish_method_declaration): Insert a RETURN_EXPR when
compiling to class file a void method with an empty method body.
As a side effect, the bytecode backend will generate the
appropriate `return' instruction.
-Tue Jun 22 20:43:49 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (lookup_package_type_and_set_next): New function prototype.
(resolve_package): Search current and imported packages.
@@ -8665,22 +8762,22 @@ Tue Jun 22 20:43:49 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
instruction. With some control flows it is possible that the last
block ends with an `athrow'.
-Mon Jun 14 13:13:39 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Reorganized the post
evaluation of non WFL leading expression nodes.
-Fri Jun 11 21:37:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Handle ARRAY_REF after
CONVERT_EXPR.
-Thu Jun 10 22:26:17 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Handle qualified expression
beginning with a STRING_CST.
-Thu Jun 10 20:27:25 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (register_fields): Set DECL_INITIAL on both
pre-initialized static and public fields.
@@ -8693,12 +8790,12 @@ Thu Jun 10 20:27:25 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(fold_constant_for_init): Pre-initialized field decl constant to
be folded.
-Mon Jun 7 16:09:51 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-06-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (note_possible_classname): Mark returned node with
QUALIFIED_P only if the original class name contained a '/'.
-Sat Jun 5 11:46:59 1999 Anthony Green <green@cygnus.com>
+1999-06-05 Anthony Green <green@cygnus.com>
* Make-lang.in (gcjh): More parallel build fixes.
@@ -8706,38 +8803,38 @@ Sat Jun 5 11:46:59 1999 Anthony Green <green@cygnus.com>
* Make-lang.in (JCF_DUMP_SOURCES, jvgenmain): Fix parallel builds.
-Wed Jun 2 10:44:38 1999 Anthony Green <green@cygnus.com>
+1999-06-02 Anthony Green <green@cygnus.com>
* except.c (link_handler): Chain exception handlers in order.
-Wed Jun 2 10:41:24 1999 Anthony Green <green@cygnus.com>
+1999-06-02 Anthony Green <green@cygnus.com>
* expr.c (expand_byte_code): Fill unreachable bytecode regions
with nops and process as usual in order to always set correct EH
ranges. Emit detailed warnings about unreachable bytecodes.
-Wed Jun 2 10:35:13 1999 Anthony Green <green@cygnus.com>
+1999-06-02 Anthony Green <green@cygnus.com>
* class.c (build_utf8_ref): Mark cinit and utf8 tree nodes as
constant.
-Fri May 28 18:22:45 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-28 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (lookup_field_wrapper): Unified returned value to NULL
or the searched field decl.
-Fri May 28 11:34:05 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-28 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (fold_constant_for_init): Convert numerical constant
values to the type of the assigned field.
-Thu May 27 19:57:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (lookup_field): Relaxed the test on class loading error
detection.
* parse.y (fold_constant_for_init): Enabeled old code.
-Wed May 26 18:06:02 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-26 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (valid_ref_assignconv_cast_p): Let `_Jv_CheckCast'
decide the validity of the cast of a java.lang.Cloneable reference
@@ -8745,32 +8842,32 @@ Wed May 26 18:06:02 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_conditional_expr): Fixed first argument passed to
binary_numeric_promotion.
-Wed May 26 15:33:06 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-26 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Take into account that a
CONVERT_EXPR might specify a type as a WFL.
-Tue May 25 15:06:13 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_assignment): Save the rhs before using it as an
argument to _Jv_CheckArrayStore.
-Tue May 25 11:23:59 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_parse_doc_section): Fixed `tag' buffer size.
-Mon May 24 13:26:00 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_lex): Accepts `+' or `-' after the beginning of a
floating point litteral only when the exponent indicator has been
parsed.
-Sat May 22 13:54:41 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (formal_parameter:): Construct argument tree list
element even if a yet unsupported final parameter was encountered.
-Tue May 18 00:28:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-18 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (finish_method_declaration): Issue errors for native or
abstract methods declared with a method body, as well as for non
@@ -8816,29 +8913,29 @@ Tue May 18 00:28:58 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(link_handler): Changed interface to allow merging of eh_ranges.
Split overlapping ranges. Return `void'.
-Mon May 17 19:20:24 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (constructor_block_end:): New rule, tagged <node>.
(constructor_body:): Use `constructor_block_end' instead of
`block_end'.
-Mon May 17 18:01:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (statement_nsi:): Pop `for' statement block.
(java_complete_lhs): Labeled blocks containing no statement are
marked as completing normally.
-Fri May 14 12:31:08 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* xref.c (xref_set_current_fp): New function, defined.
* xref.h (xref_set_current_fp): New function, prototyped.
-Fri May 14 11:57:54 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Take into account that
LABELED_BLOCK_STMT can be empty.
-Thu May 13 18:30:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (java_check_regular_methods): Warning check on not
overriding methods with default access in other packages does not
@@ -8847,7 +8944,7 @@ Thu May 13 18:30:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
it by NULL_TREE. This prevents gcc from generating an irrelevant
warning.
-Thu May 13 13:23:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-05-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Removed code accepting to see things
falling through default:, when doing xrefs.
@@ -8918,7 +9015,7 @@ Thu May 13 13:23:38 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(find_spec_file): New function.
(SPEC_FILE): New define.
-Tue May 11 11:46:36 1999 Dave Brolley <brolley@cygnus.com>
+1999-05-11 Dave Brolley <brolley@cygnus.com>
* lang-options.h: -MD, -MMD, -M and -MM not needed here for
cpplib-enabled build.
@@ -8959,7 +9056,7 @@ Tue May 11 11:46:36 1999 Dave Brolley <brolley@cygnus.com>
* Makefile.in: Remove -v from bison command lines.
-Fri Apr 30 17:54:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* check-init.c (check_init): Exclude a case of error when doing
xrefs.
@@ -9008,7 +9105,7 @@ Fri Apr 30 17:54:40 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
create internal labels.
(lookup_label): Ditto.
-Sat Apr 24 16:50:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class_method): Generate <clinit>'s rtl for
interfaces.
@@ -9041,7 +9138,7 @@ Sat Apr 24 16:50:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Make-lang.in (JAVA_SRCS): Added check-init.c.
-Wed Apr 21 11:13:36 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (predef_filenames, predef_filenames_size): New globals
(init_decl_processing): predef_filenames and predef_filenames_size
@@ -9058,7 +9155,7 @@ Wed Apr 21 11:13:36 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_complete_lhs): If the cross reference flag is set, wrap
field DECL node around a WFL when resolving expression name.
-Mon Apr 19 14:44:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang.c (lang_decode_option): Fixed returned value when parsing
`-fxref=...' and `-Wall'.
@@ -9087,22 +9184,22 @@ Mon Apr 19 14:44:48 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (resolve_qualified_expression_name): Added missing
`break'.
-Thu Apr 15 13:08:03 1999 Anthony Green <green@cygnus.com>
+1999-04-15 Anthony Green <green@cygnus.com>
* gjavah.c: New prototypes for java_float_finite and
java_double_finite.
-Mon Apr 12 18:27:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_unaryop): Fixed ++/-- operator check on array
references.
-Tue Apr 6 23:15:52 1999 Jeffrey A Law (law@cygnus.com)
+1999-04-06 Jeffrey A Law (law@cygnus.com)
* Makefile.in (TREE_H): Add tree-check.h.
(RTL_H): Add genrtl.h.
-Tue Apr 6 15:15:51 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-06 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_assignment): Added ArrayStoreException runtime
check.
@@ -9117,7 +9214,7 @@ Tue Apr 6 15:15:51 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_binop): Don't fold if non-constant and emiting
class files.
-Mon Apr 5 16:06:09 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-04-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (gjavah.o): Depend on $(JAVA_TREE_H).
@@ -9131,7 +9228,7 @@ Mon Apr 5 16:06:09 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* lang.c (main_jcf): Don't define.
-Mon Apr 5 15:43:51 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-04-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* class.c (add_method_1): Cast the argument of `bzero' to PTR.
@@ -9154,7 +9251,7 @@ Mon Apr 5 15:43:51 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* xref.c: Don't include <stdio.h>.
-Mon Apr 5 11:24:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-04-05 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (struct parser_ctxt *ctxp): Now global.
(declare_local_variables): Use WFL compound value for the
@@ -9172,24 +9269,24 @@ Mon Apr 5 11:24:19 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(get_field_name): New function.
(print_field_info): Use get_field_name and print_field_name.
-Wed Mar 31 11:00:32 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-31 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (keyword.h): Generate using gperf language 'C', not
'KR-C', so gperf uses the `const' keyword on strings.
* keyword.gperf (java_keyword): Const-ify a char*.
-Tue Mar 30 11:31:53 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_bc_statement): Fixed identation and a bogus
`printf' format.
-Tue Mar 30 11:29:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-30 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (patch_assignment): Allow static variables in other
classes to be assigned.
-Sun Mar 28 22:12:10 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* class.c (maybe_add_interface): Remove unused variable
`interface_binfo'.
@@ -9201,7 +9298,7 @@ Sun Mar 28 22:12:10 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* verify.c (verify_jvm_instructions): Remove unused variable
`self_type'.
-Sat Mar 27 15:49:18 1999 Per Bothner <bothner@cygnus.com>
+1999-03-27 Per Bothner <bothner@cygnus.com>
* parse.y (complete_loop_body): Rename to finish_loop_body.
(complete_labeled_statement): Rename to finish_labeled_statement.
@@ -9218,7 +9315,7 @@ Sat Mar 27 15:49:18 1999 Per Bothner <bothner@cygnus.com>
(patch_loop_statement): Re-organize.
(patch_bc_statement): Re-write.
-Sat Mar 27 15:13:21 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (EXPR_WFL_GET_LINECOL): Set a line and column count
using a WFL compound value.
@@ -9232,7 +9329,7 @@ Sat Mar 27 15:13:21 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* xref.c (system.h, jcf.h, parse.h, obstack.h): Include.
* xref.h (expand_xref): Prototype renamed from xref_generate.
-Sat Mar 27 14:16:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h (BLOCK_CHAIN_DECL): New use GET_CURRENT_BLOCK.
(GET_CURRENT_BLOCK): New macro.
@@ -9259,13 +9356,13 @@ Sat Mar 27 14:16:32 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java/Make-lang.in: Remove all references to gcj.o/gcj.c.
Link gcj from gcc.o.
-Tue Mar 23 10:48:24 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-23 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (find_applicable_accessible_methods_list): When dealing
with interface: ensure that a given interface or java.lang.Object
are searched only once.
-Tue Mar 23 10:05:27 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gjavah.c (print_c_decl): Remove unused argument `flags'.
@@ -9283,7 +9380,7 @@ Tue Mar 23 10:05:27 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
(create_class): Remove unused variable `super_decl'.
(get_printable_method_name): Initialize variable `name'.
-Mon Mar 22 20:14:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-03-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Changelog: Fixed 1999-03-22 typos.
* lang.c (lang_decode_option): Fixed typo in error string in the
@@ -9305,7 +9402,7 @@ Mon Mar 22 20:14:26 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Make-lang.in ($(GCJ)$(exeext)): Add intl.o to list of files to be
linked with.
-Sun Mar 21 08:30:30 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (jcf-dump.o): Depend on $(CONFIG_H)
$(srcdir)/../system.h and $(JAVA_TREE_H).
@@ -9425,7 +9522,7 @@ Sun Mar 21 08:30:30 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* class.c (unmangle_classname): Implemented stricter testing
before setting the QUALIFIED_P flag on an identifier.
-Tue Mar 16 15:15:41 1999 Per Bothner <bothner@cygnus.com>
+1999-03-16 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_lhs): Call force_evaluation_order
after patch_newarray.
@@ -9439,7 +9536,7 @@ Tue Mar 16 15:15:41 1999 Per Bothner <bothner@cygnus.com>
operator (if necessary) and complete the RHS after having built
the cast.
-Mon Mar 15 12:18:29 1999 Per Bothner <bothner@cygnus.com>
+1999-03-15 Per Bothner <bothner@cygnus.com>
* class.c (make_class): Don't set CLASS_P here (because
this function is also called by build_java_array_type).
@@ -9456,7 +9553,7 @@ Mon Mar 15 12:18:29 1999 Per Bothner <bothner@cygnus.com>
* parse.y (method_header): For interfaces, set ACC_ABSTRACT (to
match what JDK 1.2 does), but don't set ACC_PUBLIC.
-Sat Mar 13 18:16:34 1999 Per Bothner <bothner@cygnus.com>
+1999-03-13 Per Bothner <bothner@cygnus.com>
* lex.c (java_read_char): UNGET invalid non-initial utf8 character.
* lex.h (UNGETC): Change misleading macro.
@@ -9488,7 +9585,7 @@ Sat Mar 13 18:16:34 1999 Per Bothner <bothner@cygnus.com>
cast. If not processing `+' fix string constants before processing
binop.
-Fri Mar 12 19:42:55 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* constants.c (find_class_or_string_constant): Cast variable `j'
to a `jword' when comparing against one.
@@ -9523,7 +9620,7 @@ Fri Mar 12 19:42:55 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* jcf-path.c (add_entry): alloca len+2 rather than len+1 bytes;
we'll need a directory separator and a null character.
-Wed Mar 10 23:20:11 1999 Per Bothner <bothner@cygnus.com>
+1999-03-10 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_bytecode_insns): Handle __builtin_fmod, for %.
@@ -9532,7 +9629,7 @@ Wed Mar 10 23:20:11 1999 Per Bothner <bothner@cygnus.com>
* parse.y (method_header): Don't set ACC_ABSTRACT flags on
interfaces.
-Fri Mar 5 15:17:29 1999 Per Bothner <bothner@cygnus.com>
+1999-03-05 Per Bothner <bothner@cygnus.com>
* lex.c (java_parse_end_comment): Take extra parameter (next char).
@@ -9552,7 +9649,7 @@ Fri Mar 5 15:17:29 1999 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_lhs): Don't call patch_assignment if rhs is
error_mark (it might catch more errors, but it is more likely to lose).
-Sat Mar 6 11:17:16 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-03-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (jcf-parse.o): Depend on $(PARSE_H).
(parse-scan.o): Depend on toplev.h.
@@ -9602,16 +9699,16 @@ Sat Mar 6 11:17:16 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* typeck.c (convert_ieee_real_to_integer): Remove unused variable
`node'.
-Wed Feb 24 16:13:59 1999 Per Bothner <bothner@deneb.cygnus.com>
+1999-02-24 Per Bothner <bothner@deneb.cygnus.com>
* check-init.c (check_init): COPYN takes word count, not bit count.
-Fri Feb 26 14:06:21 1999 Per Bothner <bothner@cygnus.com>
+1999-02-26 Per Bothner <bothner@cygnus.com>
* typeck.c (convert_ieee_real_to_integer): Use save_expr instead of
explicit build_decl. (Avoids crash in reload when optimizing.)
-Thu Feb 25 21:05:04 1999 Per Bothner <bothner@cygnus.com>
+1999-02-25 Per Bothner <bothner@cygnus.com>
* decl.c (complete_start_java_method): Handle synchronized method
even when compiling from bytecode.
@@ -9675,7 +9772,7 @@ Thu Feb 25 21:05:04 1999 Per Bothner <bothner@cygnus.com>
* jcf.h (UTF8_GET): Mask first byte of 3-byte encoding with 0x0f,
not 0x1f.
-Sun Feb 21 14:56:11 1999 Per Bothner <bothner@cygnus.com>
+1999-02-21 Per Bothner <bothner@cygnus.com>
* decl.c (build_result_decl), java-tree.h: New method.
(complete_start_java_method): Handle synchronized methods.
@@ -9694,7 +9791,7 @@ Sun Feb 21 14:56:11 1999 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_classfile): Emit "Exceptions" attribute.
-Fri Feb 19 15:35:01 1999 Per Bothner <bothner@cygnus.com>
+1999-02-19 Per Bothner <bothner@cygnus.com>
Force left-to-right evaluation of binary operations etc.
* expr.c (force_evaluation_order), java-tree.h: New function.
@@ -9712,7 +9809,7 @@ Fri Feb 19 15:35:01 1999 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_lhs): Ignore an empty statement in a
COMPOUND_EXPR. Don't complain about empty statement after return.
-Fri Feb 19 13:00:56 1999 Per Bothner <bothner@cygnus.com>
+1999-02-19 Per Bothner <bothner@cygnus.com>
* parse.y (obtain_incomplete_type): Don't wrap unknown types
in TREE_LIST - just chain the POINTER_TYPEs together.
@@ -9726,7 +9823,7 @@ Fri Feb 19 13:00:56 1999 Per Bothner <bothner@cygnus.com>
JDEP_RESOLVED_P): Redefined for new TREE_LIST-less convention.
* typeck.c (build_java_array_type): Don't call layout_class.
-Wed Feb 17 15:47:20 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-02-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (check_pkg_class_access): Allow private class access
within the same package.
@@ -9734,7 +9831,7 @@ Wed Feb 17 15:47:20 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_unaryop): Call strip_out_static_field_access_decl on ++/--
operator argument before testing its nature.
-Wed Feb 3 12:38:43 1999 Per Bothner <bothner@cygnus.com>
+1999-02-03 Per Bothner <bothner@cygnus.com>
* java-tree.def (FINALLY_EXPR): Removed. (Now uses TRY_FINALLY_EXPR.)
(TRY_EXPR): Simplify - it no longer has a finally clause.
@@ -9769,12 +9866,12 @@ Wed Feb 3 12:38:43 1999 Per Bothner <bothner@cygnus.com>
* constants.c (alloc_class_constant): Likewise.
* expr.c (build_invokeinterface): Likewise.
-Thu Feb 11 21:25:51 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-02-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (valid_builtin_assignconv_identity_widening_p): Got rid
of an ancient workaround.
-Wed Feb 10 23:27:33 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-10 Jeffrey A Law (law@cygnus.com)
* jvspec.c (xmalloc): Kill the prototype. It does not belong
here anymore.
@@ -9795,7 +9892,7 @@ Wed Feb 10 23:27:33 1999 Jeffrey A Law (law@cygnus.com)
* jvspec.c (THREAD_NAME): Renamed -lqthreads to -lgcjcoop.
(GC_NAME): Renamed -lgc to -lgcjgc.
-Tue Feb 9 19:31:09 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-02-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_lang_cloneable): Initialize.
* parse.y (java_lang_cloneable): New static variable.
@@ -9806,7 +9903,7 @@ Tue Feb 9 19:31:09 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_cast): Swapped two first arguments to first call to
valid_ref_assignconv_cast_p.
-Mon Feb 8 11:50:50 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-02-08 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h: DECL_P renamed JDECL_P.
* parse.y: DECL_P replaced by JDECL_P.
@@ -9828,21 +9925,21 @@ Mon Feb 8 11:50:50 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
separator, rather than '/'.
(make_class_data): Likewise.
-Wed Feb 3 22:50:17 1999 Marc Espie <Marc.Espie@liafa.jussieu.fr>
+1999-02-03 Marc Espie <Marc.Espie@liafa.jussieu.fr>
* Make-lang.in ($(GCJ)(exeext)): Remove choose-temp.o, pexecute.o and
mkstemp.o. Get them from libiberty now.
-Tue Feb 2 19:49:12 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-02 Jeffrey A Law (law@cygnus.com)
* jcf-io.c: Do not include sys/stat.h or sys/wait.h
-Tue Feb 2 20:04:50 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-02-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* jvspec.c (xmalloc): Fix the prototype to match the one obtained
from libiberty.h
-Tue Feb 2 10:39:47 1999 Per Bothner <bothner@cygnus.com>
+1999-02-02 Per Bothner <bothner@cygnus.com>
Optimize: `return (a ? b : c)' as: `if (a) return b; else return c;'.
* jcf-write.c (generate_bytecode_return): New function.
@@ -9856,7 +9953,7 @@ Tue Feb 2 10:39:47 1999 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions): Do INVALIDATE_PC after
handling OPCODE_lookupswitch or OPCODE_tableswitch.
-Mon Feb 1 20:44:47 1999 Per Bothner <bothner@cygnus.com>
+1999-02-01 Per Bothner <bothner@cygnus.com>
* parse.y (patch_method_invocation): Handle calling static methods,
even in the form EXPR.METHOD(ARGS), not just TYPE.METHOD(ARGS).
@@ -9864,7 +9961,7 @@ Mon Feb 1 20:44:47 1999 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_lhs): Don't complain about unreachable
exit condition in a do-while statement.
-Fri Jan 29 18:19:02 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-01-29 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_read_char): Fixed utf8 decoding.
(java_unicode_2_utf8): Fixed utf8 encoding in the 0x800-0xffff
@@ -9878,7 +9975,7 @@ Fri Jan 29 18:19:02 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(build_string_concatenation): Optimize out left or right empty
string constants.
-Thu Jan 28 18:51:26 1999 Per Bothner <bothner@cygnus.com>
+1999-01-28 Per Bothner <bothner@cygnus.com>
* jcf-write.c (localvar_alloc): Only emit entry for
LocalVariableTable if debug_info_level > DINFO_LEVEL_TERSE.
@@ -9887,12 +9984,12 @@ Thu Jan 28 18:51:26 1999 Per Bothner <bothner@cygnus.com>
* jvspec.c (lang_specific_driver): If no -O* or -g* option
is specified, add -g1 (for compatibility wih javac).
-Thu Jan 28 09:17:51 1999 Hans-Peter Nilsson <hp@axis.se>
+1999-01-28 Hans-Peter Nilsson <hp@axis.se>
* java/Makefile.in: Add missing dependencies for jcf-dump.o,
gjavah.o, check-init.o, jv-scan.o
-Mon Feb 1 09:50:48 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-02-01 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (gjavah.o): Depend on $(CONFIG_H) and system.h.
@@ -9906,11 +10003,11 @@ Mon Feb 1 09:50:48 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* lex.c (inline): Likewise.
-Sun Jan 31 20:34:29 1999 Zack Weinberg <zack@rabi.columbia.edu>
+1999-01-31 Zack Weinberg <zack@rabi.columbia.edu>
* lang-specs.h: Map -Qn to -fno-ident.
-Fri Jan 29 16:51:56 1999 Richard Henderson <rth@cygnus.com>
+1999-01-29 Richard Henderson <rth@cygnus.com>
* check-init.c (check_init): Fix CLEANUP_POINT_EXPR typo.
@@ -9919,19 +10016,19 @@ Fri Jan 29 16:51:56 1999 Richard Henderson <rth@cygnus.com>
* parse.h (BUILD_APPEND): If ARG is a non-String object reference,
then cast it to Object before calling `append' method.
-Thu Jan 28 14:45:39 1999 Per Bothner <bothner@cygnus.com>
+1999-01-28 Per Bothner <bothner@cygnus.com>
* check-init.c (check_bool2_init, check_bool_init, check_init):
Handle TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR.
* jcf-write.c (generate_bytecode_insns): Likewise.
-Thu Jan 28 11:50:11 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-01-28 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (jcf_parse): Don't parse the same class file twice.
* parse.y (patch_cast): Allow a boolean to be cast into a
boolean.
-Wed Jan 27 10:19:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-01-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y: (class_declaration:): Fixed indentation.
(class_member_declaration:): Extra `;' after field declaration now
@@ -9941,14 +10038,14 @@ Wed Jan 27 10:19:29 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
node's COMPOUND_ASSIGN_P flag value.
(patch_cast): Fix cast from char to floating point.
-Mon Jan 25 17:39:19 1999 Andrew Haley <aph@cygnus.com>
+1999-01-25 Andrew Haley <aph@cygnus.com>
* except.c, java-except.h (expand_resume_after_catch): new
function.
* expr.c (java_lang_expand_expr): call expand_resume_after_catch
to branch back to main flow of control after a catch block.
-Sat Jan 23 23:02:43 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-01-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (parse.o): Depend on $(CONFIG_H) and
$(srcdir)/../system.h.
@@ -10056,12 +10153,12 @@ Sat Jan 23 23:02:43 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* zipfile.h: Prototype `read_zip_archive'.
-Thu Jan 21 16:00:06 1999 Andrew Haley <aph@cygnus.com>
+1999-01-21 Andrew Haley <aph@cygnus.com>
* typeck.c (convert): Allow conversions to void type: some
optimizations in gcc do this.
-Thu Jan 21 15:21:49 1999 Andrew Haley <aph@cygnus.com>
+1999-01-21 Andrew Haley <aph@cygnus.com>
* typeck.c (convert_ieee_real_to_integer): New function.
(convert): When not using fast-math and using hardware fp, convert
@@ -10072,7 +10169,7 @@ Thu Jan 21 15:21:49 1999 Andrew Haley <aph@cygnus.com>
* parse.y (patch_binop): Do a type conversion from signed to
unsigned and then back to signed when a ">>>" is found.
-Sun Jan 17 22:34:22 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-01-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h: (check_for_initialization): Added prototype.
* lex.c (java_parse_doc_section): `\n' breaks the `*/' string.
@@ -10083,13 +10180,13 @@ Sun Jan 17 22:34:22 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(qualify_ambiguous_name): Likewise.
(patch_synchronized_statement): Removed unused local.
-Sun Jan 17 21:55:42 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-17 Jeffrey A Law (law@cygnus.com)
* Makefile.in (zextract.o): Add dependencies.
* Makefile.in: Do not put ^Ls at the start of a line.
-Fri Jan 15 20:16:20 1999 Per Bothner <bothner@cygnus.com>
+1999-01-15 Per Bothner <bothner@cygnus.com>
* expr.c (process_jvm_instruction): Coerce to correct Throwable
sub-type the result of the call that gets the exception value.
@@ -10116,7 +10213,7 @@ Fri Jan 15 20:16:20 1999 Per Bothner <bothner@cygnus.com>
generated at all and the synchronized statement will read an
uninitialized variable.
-Wed Jan 13 01:24:54 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1999-01-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (maybe_layout_super_class): Fixed returned value.
* lex.c: Added 1999 to the copyright.
@@ -10138,12 +10235,12 @@ Wed Jan 13 01:24:54 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_check_regular_methods): Set saved found wfl to NULL after
having reinstalled it in the previously found DECL_NAME.
-Sun Jan 10 13:36:14 1999 Richard Henderson <rth@cygnus.com>
+1999-01-10 Richard Henderson <rth@cygnus.com>
* gjavah.c (java_float_finite): Use a union to do type punning.
(java_double_finite): Likewise.
-Sat Jan 9 11:25:00 1999 Per Bothner <bothner@cygnus.com>
+1999-01-09 Per Bothner <bothner@cygnus.com>
* parse.y (build_new_array_init): Don't set EXPR_WFL_LINECOL
on CONSTRUCTOR (since that trashes TREE_CST_RTL).
@@ -10152,7 +10249,7 @@ Sat Jan 9 11:25:00 1999 Per Bothner <bothner@cygnus.com>
CONSTRUCTOR (which causes expand_expr to call output_constant_def).
* expr.c (java_lang_expand_expr): Check TREE_STATIC of NEW_ARRAY_INIT.
-Fri Jan 8 15:48:03 1999 Per Bothner <bothner@cygnus.com>
+1999-01-08 Per Bothner <bothner@cygnus.com>
* check-init.c (check_init): If compiling to native, we don't
see THROW_EXPR. Instead, look for a call to throw_node (_Jv_Throw).
@@ -10170,7 +10267,7 @@ Fri Jan 8 15:48:03 1999 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (yyparse): variable len changed from a char to an
int to prevent overflow.
-Wed Jan 6 17:19:46 1999 Per Bothner <bothner@cygnus.com>
+1999-01-06 Per Bothner <bothner@cygnus.com>
* java-tree.h: Declare read_class.
* jcf-parse.c (read_class): New function.
@@ -10193,23 +10290,23 @@ Wed Jan 6 17:19:46 1999 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_expand_method): Call check_for_initialization.
* parse.h (BLOCK_EXPR_DECLS, BLOCK_EXPR_BODY): Moved to java-tree.h.
-Wed Jan 6 14:53:10 1999 Graham <grahams@rcp.co.uk>
+1999-01-06 Graham <grahams@rcp.co.uk>
* parse.y : include system.h instead of including
standard headers directly with the exception of <dirent.h>.
-Wed Jan 6 16:20:06 1999 Per Bothner <bothner@cygnus.com>
+1999-01-06 Per Bothner <bothner@cygnus.com>
* lex.h: Moved static function declarations to lex.c,
to shut up some -Wall warnings.
* lex.c: Static function declarations moved here.
* jcf-dump.c: Small fixes to shut up -Wall warnings.
-Tue Jan 5 22:15:40 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1999-01-05 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Make-lang.in ($(GCJ).o): Depend on prefix.h.
-Tue Dec 22 11:25:19 1998 Per Bothner <bothner@cygnus.com>
+1998-12-22 Per Bothner <bothner@cygnus.com>
* expr.c (process_jvm_instruction): Do load_type_state after JSR.
* verify.c (verify_jvm_instructions): Fix off-by-one error.
@@ -10231,7 +10328,7 @@ Tue Dec 22 11:25:19 1998 Per Bothner <bothner@cygnus.com>
(patch_synchronized_statement): Re-write suing CLEANUP_POINT_EXPR and
WITH_CLEANUP_EXPR instead of TRY_EXPR.
-Sun Dec 20 16:15:44 1998 John F. Carr <jfc@mit.edu>
+1998-12-20 John F. Carr <jfc@mit.edu>
* Make-lang.in: Comment out control-Ls; they upset some makes.
@@ -10248,11 +10345,11 @@ Sun Dec 20 16:15:44 1998 John F. Carr <jfc@mit.edu>
* parse-scan.y (report_main_declaration): Recognize
`java.lang.String' in argument to main.
-Wed Dec 16 16:18:59 1998 Per Bothner <bothner@cygnus.com>
+1998-12-16 Per Bothner <bothner@cygnus.com>
* parse.y (create_interface): Remove bogus test.
-Wed Dec 16 14:42:19 1998 Per Bothner <bothner@cygnus.com>
+1998-12-16 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (get_constant): Set TREE_TYPE for string constants.
(HANDLE_CONSTANTVALUE): If flag_emit_class_files, call get_constant.
@@ -10266,7 +10363,7 @@ Wed Dec 16 14:42:19 1998 Per Bothner <bothner@cygnus.com>
* gjavah.c (print_field_info): Changed how most negative number is
printed.
-Mon Dec 14 18:49:29 1998 Per Bothner <bothner@cygnus.com>
+1998-12-14 Per Bothner <bothner@cygnus.com>
* parse.y (fold_constant_for_init): New function.
(resolve_expression_name): Don't replace static final
@@ -10301,7 +10398,7 @@ Mon Dec 14 18:49:29 1998 Per Bothner <bothner@cygnus.com>
(HANDLE_CODE_ATTRIBUTE): Only print it method_declared set.
(print_method_info): Handle abstract methods.
-Sun Dec 13 17:31:40 1998 Per Bothner <bothner@cygnus.com>
+1998-12-13 Per Bothner <bothner@cygnus.com>
* parse.y (patch_method_invocation): If class_decl is null
(e.g. an array type), use original type.
@@ -10328,7 +10425,7 @@ Sun Dec 13 17:31:40 1998 Per Bothner <bothner@cygnus.com>
Include java-opcodes.h.
(decompiled): New global.
-Sat Dec 12 20:13:19 1998 Per Bothner <bothner@cygnus.com>
+1998-12-12 Per Bothner <bothner@cygnus.com>
* class.c (build_class_ref): Handle PRIMTYPE.class if
flag_emit_class_files.
@@ -10375,7 +10472,7 @@ Sat Dec 12 20:13:19 1998 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_expand_methods): Call write_classfile
here, and not in java_expand_classes (which only gets first class).
-Sat Dec 12 19:46:04 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (<type_declaration>): Do maybe_generate_clinit last.
(register_fields): If a static fields has an initializer, just
@@ -10386,7 +10483,7 @@ Sat Dec 12 19:46:04 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_initialized_static_field): New function.
(java_complete_field): Call it.
-Sat Dec 12 19:21:11 1998 Per Bothner <bothner@cygnus.com>
+1998-12-12 Per Bothner <bothner@cygnus.com>
* expr.c (encode_newarray_type, build_new_array): New functions.
* java-tree.h: Declare build_new_array.
@@ -10412,7 +10509,7 @@ Sat Dec 12 19:21:11 1998 Per Bothner <bothner@cygnus.com>
* class.c (make_class_data): Renamed dtable -> vtable, and
dtable_method_count -> vtable_method_count.
-Thu Dec 10 20:00:54 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (long_zero_node, float_zero_node, double_zero_node): New
global variables, initialized.
@@ -10431,7 +10528,7 @@ Thu Dec 10 20:00:54 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
increment/decrement node into its original type after binary
numeric promotion on its operands.
-Thu Dec 10 11:02:49 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (array_initializer:): Array init operand is NULL_TREE
instead of a TREE_LIST of NULL_TREEs when parsing `{}'. `{,}' is
@@ -10441,7 +10538,7 @@ Thu Dec 10 11:02:49 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(array_constructor_check_entry): Removed check on null wfl_value.
Return an error if wfl_value's walk returns an error.
-Wed Dec 9 15:37:05 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.def (NEW_ARRAY_INIT): New Java tree code.
* lex.c (java_lex): Remember column position before advancing one
@@ -10465,7 +10562,7 @@ Wed Dec 9 15:37:05 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
patch_new_array_init, patch_array_constructor,
array_constructor_check_entry): New functions.
-Mon Dec 7 15:13:52 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (array_initializer): Tagged <node>.
(variable_initializer:): Use default rule.
@@ -10480,7 +10577,7 @@ Mon Dec 7 15:13:52 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_conditional_expr): Patch results of string concatenation
operations.
-Sun Dec 6 13:45:00 1998 Per Bothner <bothner@cygnus.com>
+1998-12-06 Per Bothner <bothner@cygnus.com>
* constants.c (find_methodref_index): When the class is an interface,
generate CONSTANT_InterfaceMethodref instead of a CONSTANT_MethodRef.
@@ -10514,11 +10611,11 @@ Sun Dec 6 13:45:00 1998 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_classfile): Emit ConstantValue attributes.
-Sun Dec 6 13:21:18 1998 Per Bothner <bothner@cygnus.com>
+1998-12-06 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (INVOKE): If invokeinterface, print number of args.
-Thu Dec 3 17:11:12 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (java_layout_seen_class_methods): New function
prototype.
@@ -10538,16 +10635,16 @@ Thu Dec 3 17:11:12 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_layout_seen_class_methods): New function.
(java_layout_classes): Call java_layout_seen_class_methods.
-Thu Dec 3 15:56:50 1998 Per Bothner <bothner@cygnus.com>
+1998-12-03 Per Bothner <bothner@cygnus.com>
* parse,y (patch_synchronized_statement): Set CAN_COMPLETE_NORMALLY.
-Thu Dec 3 15:08:30 1998 Per Bothner <bothner@cygnus.com>
+1998-12-03 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (main): Fix error message.
* jcf-path.c (add_entry): Style fix.
-Wed Dec 2 15:52:25 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class_method): Call build_java_argument_signature
on constructors too.
@@ -10556,7 +10653,7 @@ Wed Dec 2 15:52:25 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
expression name. Augmented comment on code checking illegal `this'
usage. Loosened it test by accepting NEW_CLASS_EXPR.
-Tue Dec 1 13:53:24 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-12-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class_method): Don't report error on non-static
overriding static if the method is private.
@@ -10580,7 +10677,7 @@ Tue Dec 1 13:53:24 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(+tmake_file): Likewise.
(.NOEXPORT): Removed duplicate.
-Fri Nov 27 13:20:51 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1998-11-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (jc1, jv-scan): Link with $(SUBDIR_OBSTACK).
@@ -10595,12 +10692,12 @@ Fri Nov 27 13:20:51 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
OS headers or gansidecl.h. Don't prototype xmalloc/xstrdup.
Provide an xstrdup definition.
-Thu Nov 26 22:03:58 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+1998-11-26 Alexandre Oliva <oliva@dcc.unicamp.br>
* jcf-path.c (add_entry): Recognize ".jar" too.
* lang-specs.h: Likewise.
-Thu Nov 26 12:44:07 1998 Per Bothner <bothner@cygnus.com>
+1998-11-26 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_bytecode_insns): In Call_EXPR, handle
soft_monitorenter_node, soft_monitorexit_node, throw_node.
@@ -10611,7 +10708,7 @@ Thu Nov 26 12:44:07 1998 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_bytecode_insns):
Handle missing exception handler (finally for synchronized).
-Wed Nov 25 09:47:15 1998 Per Bothner <bothner@cygnus.com>
+1998-11-25 Per Bothner <bothner@cygnus.com>
* java-tree.h (end_params_node): Declare global.
* decl.c (end_params_node): New global.
@@ -10643,16 +10740,16 @@ Wed Nov 25 09:47:15 1998 Per Bothner <bothner@cygnus.com>
* expr.c (CHECK_PC_IN_RANGE): Add void cast to kill warnings.
-Wed Nov 25 00:50:58 1998 Marc Espie <espie@quatramaran.ens.fr>
+1998-11-25 Marc Espie <espie@quatramaran.ens.fr>
* jcf-write.c (generate_bytecode_conditional): Fix typo.
-Tue Nov 24 17:06:38 1998 Per Bothner <bothner@cygnus.com>
+1998-11-24 Per Bothner <bothner@cygnus.com>
* (generate_classfile): Always write class access flag with
ACC_SUPER set.
-Tue Nov 24 16:34:33 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-11-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (maybe_layout_super_class): New function.
(layout_class): Reorganized. Loop on class methods dispatched into
@@ -10716,7 +10813,7 @@ Tue Nov 24 16:34:33 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_method_invocation): Class to search is resolved and laid
out.
-Tue Nov 24 12:57:13 1998 Per Bothner <bothner@cygnus.com>
+1998-11-24 Per Bothner <bothner@cygnus.com>
* expr.c (java_lang_expand_expr): Add missing emit_queue.
@@ -10732,7 +10829,7 @@ Tue Nov 24 12:57:13 1998 Per Bothner <bothner@cygnus.com>
* parse.y (java_complete_tree): For CASE_EXPR and DEFAULT_EXPR,
set TREE_SIDE_EFFECTS (otherwise expand_expr may skip them).
-Thu Nov 19 11:16:55 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-11-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (jcf_parse_source): Function returned type is
void. Added prototype.
@@ -10741,7 +10838,7 @@ Thu Nov 19 11:16:55 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (jcf_parse): Changed jcf_parse prototype.
-Wed Nov 18 23:54:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-11-18 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (unmangle_classname): Set QUALIFIED_P when appropriate.
(layout_class): Cope with methods featuring WFL in decl names.
@@ -10858,23 +10955,23 @@ Wed Nov 18 23:54:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(purge_unchecked_exceptions): Use IS_UNCHECKED_EXCEPTION_P instead
of IS_UNCHECKED_EXPRESSION_P.
-Wed Nov 18 14:21:48 1998 Anthony Green <green@cygnus.com>
+1998-11-18 Anthony Green <green@cygnus.com>
* jcf-parse.c (yyparse): Open class file in binary mode.
-Sun Nov 15 17:14:17 1998 Per Bothner <bothner@cygnus.com>
+1998-11-15 Per Bothner <bothner@cygnus.com>
* jvgenmain.c: Need to #include "gansidecl.h" (to get PROTO).
* jcf-write.c (perform_relocations): Move check out one loop.
-Sun Nov 15 15:09:56 1998 Anthony Green <green@hoser.cygnus.com>
+1998-11-15 Anthony Green <green@hoser.cygnus.com>
* Make-lang.in: Fix reference to srcdir.
* jv-scan.c: Add missing xmalloc prototype.
* jvgenmain.c: Ditto.
-Sun Nov 15 14:36:29 1998 Per Bothner <bothner@cygnus.com>
+1998-11-15 Per Bothner <bothner@cygnus.com>
* decl.c (error_mark_node), java-tree.h: New global.
* parse.y: Use empty_stmt_node instead of size_zero_node.
@@ -10898,7 +10995,7 @@ Sun Nov 15 14:36:29 1998 Per Bothner <bothner@cygnus.com>
(- case PREDECREMENT_EXPR etc): Remove redundant NOTE_PUSH.
(generate_classfile): More robust for abstract methods.
-Sun Nov 15 13:52:39 1998 Anthony Green <green@cygnus.com>
+1998-11-15 Anthony Green <green@cygnus.com>
* Makefile.in: jv-scan and jvgenmain all require libiberty.
* Make-lang.in: Ditto.
@@ -10906,13 +11003,13 @@ Sun Nov 15 13:52:39 1998 Anthony Green <green@cygnus.com>
* jv-scan.c: Remove xmalloc and xstrdup definitions.
* jvgenmain: Ditto.
-Sun Nov 15 14:10:56 1998 Per Bothner <bothner@cygnus.com>
+1998-11-15 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (HANDLE_EXCEPTIONS_ATTRIBUTE): New macro.
* jcf-io.c (find_class): Simpler/cleaner structure fixes a bug.
-Sat Nov 14 17:19:18 1998 Per Bothner <bothner@cygnus.com>
+1998-11-14 Per Bothner <bothner@cygnus.com>
Allow uses of interface types to verify. This is not really
type-safe, but it matches what Sun does, and is OK as long as
@@ -10940,7 +11037,7 @@ Sat Nov 14 17:19:18 1998 Per Bothner <bothner@cygnus.com>
* Makefile.in (prefix): New macro.
-Thu Nov 12 14:15:07 1998 Per Bothner <bothner@cygnus.com>
+1998-11-12 Per Bothner <bothner@cygnus.com>
* parse.y (patch_invoke): Do less if flag_emit_class_files.
* expr.c (build_known_method_ref): Don't check flag_emit_class_files
@@ -11012,7 +11109,7 @@ Thu Nov 12 14:15:07 1998 Per Bothner <bothner@cygnus.com>
if required.
* Make-lang.in (jvspec.o): Define WITH_GC_<name>.
-Wed Nov 11 19:08:52 1998 Per Bothner <bothner@cygnus.com>
+1998-11-11 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (TABLE_SWITCH): Fix typos.
@@ -11020,7 +11117,7 @@ Wed Nov 11 19:08:52 1998 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (main): Correctly recognize `--'-style long options.
-Tue Nov 10 12:34:03 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-11-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (is_compiled_class): Call safe_layout_class for class
compiled from source.
@@ -11202,7 +11299,7 @@ Tue Nov 10 12:34:03 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
`state' field to 0.
* decl.c (init_decl_processing): Likewise.
-Wed Oct 28 08:03:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-28 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class): Don't mangle <finit>, produce
__finit<class> instead. Don't verify artificial methods.
@@ -11345,7 +11442,7 @@ Wed Oct 28 08:03:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_conditional_expr): New function.
* typeck.c (build_java_signature): Removed unnecessary empty line.
-Wed Oct 28 00:46:15 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-28 Jeffrey A Law (law@cygnus.com)
* Makefile.in (jcf-dump, gcjh): Link in $(LIBS) too.
@@ -11360,17 +11457,17 @@ Wed Oct 28 00:46:15 1998 Jeffrey A Law (law@cygnus.com)
* decl.c (init_decl_processing): Removed subclass_head and
subclass_next fields.
-Wed Oct 28 00:46:15 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-28 Jeffrey A Law (law@cygnus.com)
* jcf-write.c (emit_load_or_store): Avoid implicit int arguments.
* mangle.c (emit_unicode_mangled_name): Similarly.
-Mon Oct 26 12:17:23 1998 Nick Clifton <nickc@cygnus.com>
+1998-10-26 Nick Clifton <nickc@cygnus.com>
* jcf-parse.c (get_constant): Place braces around code to compute
'd' when REAL_ARITHMETIC is not defined.
-Sun Oct 25 14:58:05 1998 H.J. Lu (hjl@gnu.org)
+1998-10-25 H.J. Lu (hjl@gnu.org)
* Make-lang.in (jv-scan$(exeext)): Add stamp-objlist to
dependency.
@@ -11379,7 +11476,7 @@ Sun Oct 25 14:58:05 1998 H.J. Lu (hjl@gnu.org)
* lang-specs.h: `.zip' files are input to jc1.
-Thu Oct 22 23:01:54 1998 Per Bothner <bothner@cygnus.com>
+1998-10-22 Per Bothner <bothner@cygnus.com>
* jvspecs.c: Add (but don't enable) support for combining multiple
.class and .java input filenames to a single jc1 invocation.
@@ -11405,7 +11502,7 @@ Thu Oct 22 23:01:54 1998 Per Bothner <bothner@cygnus.com>
* config-lang.in (stagestuff): Added jcf-dump and jv-scan.
-Sun Oct 11 10:31:52 1998 Anthony Green <green@cygnus.com>
+1998-10-11 Anthony Green <green@cygnus.com>
* Make-lang.in (java): Depend on jcf-dump and jv-scan.
(JV_SCAN_SOURCES): New macro.
@@ -11475,7 +11572,7 @@ Sun Oct 11 10:31:52 1998 Anthony Green <green@cygnus.com>
* lang.c (OBJECT_SUFFIX): Define if not already defined.
(init_parse): Use OBJECT_SUFFIX, not ".o".
-Wed Oct 21 07:54:11 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (emit_register_classes): Renamed from
emit_register_class.
@@ -11485,7 +11582,7 @@ Wed Oct 21 07:54:11 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
returning.
* parse.y (java_expand_classes): No longer register classes.
-Tue Oct 20 09:15:38 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (is_compiled_class): New local variable
seen_in_zip. Identify classes found in currently compiled source
@@ -11513,11 +11610,11 @@ Tue Oct 20 09:15:38 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_complete_expand_methods): Fixed indentation.
(java_expand_classes): New function.
-Sat Oct 17 11:25:21 1998 Per Bothner <bothner@cygnus.com>
+1998-10-17 Per Bothner <bothner@cygnus.com>
* Makefile.in: Link with libiberty.a instead of memmove.o.
-Fri Oct 16 10:59:01 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (setjmp.h): No longer included.
* lex.h (setjmp.h): Included.
@@ -11546,7 +11643,7 @@ Fri Oct 16 10:59:01 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(qualify_ambiguous_name): Sweep through all successive array
dimensions.
-Wed Oct 14 18:21:29 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (pop_labeled_block, lang_printable_name,
maybe_add_interface, set_super_info, get_access_flags_from_decl,
@@ -11693,7 +11790,7 @@ Wed Oct 14 18:21:29 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(HANDLE_METHOD): Likewise.
* jcf-depend.c: New file.
-Tue Oct 13 23:34:12 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-13 Jeffrey A Law (law@cygnus.com)
* java-tree.def: Add missing newline at EOF.
@@ -11706,7 +11803,7 @@ Tue Oct 13 23:34:12 1998 Jeffrey A Law (law@cygnus.com)
(disassemble_method): Undefine RET to avoid clash with
config/i386/i386.h.
-Tue Oct 13 03:50:28 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (runtime_exception_type_node, error_exception_type_node):
New global variables.
@@ -11800,16 +11897,16 @@ Tue Oct 13 03:50:28 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(field_pass): New global.
(HANDLE_END_FIELD): Take field_pass into account.
-Wed Oct 7 12:10:48 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+1998-10-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (keyword.h): Add -L KR-C -F ', 0' flags to gperf.
(keyword.h): Regenerate using gperf 2.7.1 (19981006 egcs).
-Sat Oct 3 13:29:46 1998 Anthony Green <green@cygnus.com>
+1998-10-03 Anthony Green <green@cygnus.com>
* jvspec.c: Fix bug in jvgenmain_spec patch.
-Fri Oct 2 17:22:52 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-10-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (lang.o:): Install dependency on java-tree.def.
* decl.c (soft_exceptioninfo_call_node): New global variable.
@@ -11906,16 +12003,16 @@ Fri Oct 2 17:22:52 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
patch_try_statement): New functions.
* typeck.c (match_java_method): Function deleted.
-Fri Oct 2 13:48:36 1998 Anthony Green <green@cygnus.com>
+1998-10-02 Anthony Green <green@cygnus.com>
* jvspec.c: jvgenmain_spec uses different temporary file names.
-Fri Oct 2 12:50:19 1998 Anthony Green <green@cygnus.com>
+1998-10-02 Anthony Green <green@cygnus.com>
* jvspec.c (lang_specific_driver): Fail if user specifies
--main= when not linking.
-Mon Sep 28 13:48:33 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-28 Tom Tromey <tromey@cygnus.com>
* class.c (make_class_data): Push value for `thread' field.
* decl.c (init_decl_processing): Added `thread' field to class.
@@ -11923,20 +12020,20 @@ Mon Sep 28 13:48:33 1998 Tom Tromey <tromey@cygnus.com>
* class.c (add_field): Always make static fields externally
visible.
-Sat Sep 26 08:22:47 1998 Anthony Green <green@cygnus.com>
+1998-09-26 Anthony Green <green@cygnus.com>
* expr.c (build_java_athrow,
build_java_throw_out_of_bounds_exception, expand_invoke,
build_newarray, expand_java_multianewarray, build_java_monitor):
Update comments to reflect _Jv_* function names.
-Fri Sep 25 16:03:02 1998 Per Bothner <bothner@cygnus.com>
+1998-09-25 Per Bothner <bothner@cygnus.com>
* decl.c (complete_start_java_method): DECL_RESULT is always promoted.
* decl.c (start_java_method): Handle PROMOTE_PROTOTYPES target macro.
* parse.y (expand_start_java_method): Likewise.
-Thu Sep 24 12:20:35 1998 Per Bothner <bothner@cygnus.com>
+1998-09-24 Per Bothner <bothner@cygnus.com>
* expr.c (pop_arguments): Handle PROMOTE_PROTOTYPES target macro.
@@ -11952,12 +12049,12 @@ Thu Sep 24 12:20:35 1998 Per Bothner <bothner@cygnus.com>
* lex.c (java_lex): Fix (from Alex) for JC1_LITE problem.
-Wed Sep 23 14:49:35 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-23 Tom Tromey <tromey@cygnus.com>
* class.c (init_class_processing): libjava function renamed to
_Jv_RegisterClass.
-Tue Sep 22 12:00:02 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-09-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (java_lang_expand_expr): New case for SWITCH_EXPR.
* java-tree.def: Fixed DEFTREECODE third argument.
@@ -12039,7 +12136,7 @@ Tue Sep 22 12:00:02 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_switch_statement, case_identity, java_expand_switch): New
functions.
-Mon Sep 21 13:21:35 1998 Per Bothner <bothner@cygnus.com>
+1998-09-21 Per Bothner <bothner@cygnus.com>
* buffer.h (BUFFER_INIT): New macro.
* jcf-write.c (struct jcf_partial): New type. Put global stuff here.
@@ -12047,11 +12144,11 @@ Mon Sep 21 13:21:35 1998 Per Bothner <bothner@cygnus.com>
(jcf_block, jcf_relocation): New types.
Support labels, branches, conditionals, loops.
-Mon Sep 21 15:08:48 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-21 Tom Tromey <tromey@cygnus.com>
* decl.c (INT_TYPE_SIZE): Define as BITS_PER_WORD if not defined.
-Mon Sep 21 13:21:35 1998 Per Bothner <bothner@cygnus.com>
+1998-09-21 Per Bothner <bothner@cygnus.com>
* decl.c (integer_type_node): Make it have INT_TYPE_SIZE.
* verify.c (verify_jvm_instructions): Use int_type_not (32 bits),
@@ -12064,30 +12161,30 @@ Mon Sep 21 13:21:35 1998 Per Bothner <bothner@cygnus.com>
(disassemble_method): Better handling of wide instructions.
Make more robust for bad input.
-Wed Sep 30 20:53:51 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-30 Jeffrey A Law (law@cygnus.com)
* jcf-write.c (OP2, OP4): Use "_i", not "_I" to avoid problems on
FreeBSD.
-Thu Sep 17 19:45:01 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-17 Jeffrey A Law (law@cygnus.com)
* Makefile.in (jcf-dump, jvgenmain): Link in memmove.o too.
-Thu Sep 17 16:21:52 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-17 Tom Tromey <tromey@cygnus.com>
* Makefile.in ($(PARSE_H)): Removed target.
-Thu Sep 17 01:57:07 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-17 Jeffrey A Law (law@cygnus.com)
* Makefile.in (JAVA_OBJS): Add memmove.o
(memmove.o): New target & rules.
-Tue Sep 15 23:21:55 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-15 Tom Tromey <tromey@cygnus.com>
* expr.c (expand_invoke): Don't generate a call to the class init
code.
-Mon Sep 14 10:14:47 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-14 Jeffrey A Law (law@cygnus.com)
* Makefile.in: Add many missing dependencies.
* buffer.c, class.c, constants.c, decl.c: Use system.h and toplev.h
@@ -12095,7 +12192,7 @@ Mon Sep 14 10:14:47 1998 Jeffrey A Law (law@cygnus.com)
* except.c, expr.c, jcf-io.c jcf-parse.c, jcf-write.c: Likewise.
* jvgenmain.c lang.c mangle.c typeck.c verify.c: Likewise.
-Fri Sep 11 14:05:21 1998 Per Bothner <bothner@cygnus.com>
+1998-09-11 Per Bothner <bothner@cygnus.com>
* decl.c (complete_start_java_method): If method is static (and
not private) call _Jv_InitClass.
@@ -12103,31 +12200,31 @@ Fri Sep 11 14:05:21 1998 Per Bothner <bothner@cygnus.com>
* jvspec.c (jvgenmain_spec): Fix spec for generated .o file.
-Thu Sep 10 10:33:31 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-10 Jeffrey A Law (law@cygnus.com)
* Make-lang.in (GCJ): Define before using.
-Wed Sep 9 21:23:10 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-09 Jeffrey A Law (law@cygnus.com)
* gjavah.c (java_no_argument): Renamed from no_argument to avoid
losing due to namespace pollution in GNU getopt.h
-Wed Sep 9 13:33:39 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-09 Tom Tromey <tromey@cygnus.com>
* Make-lang.in (java.all.build): Don't mention jvgenmain or gcjh.
(java.all.cross): Likewise.
(java.rest.encap): Likewise.
-Tue Sep 8 10:34:05 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-08 Jeffrey A Law (law@cygnus.com)
* gjavah.c (print_class_decls): Fix thinko in arglist
* jcv-io.c (find_classfile): Similarly.
-Mon Sep 7 13:59:49 1998 Jeffrey A Law (law@cygnus.com)
+1998-09-07 Jeffrey A Law (law@cygnus.com)
* Makefile.in (INCLUDES): Update for recent toplevel gcc changes.
-Sat Sep 5 16:08:01 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-05 Tom Tromey <tromey@cygnus.com>
* Make-lang.in (java.maintainer-clean): Don't remove parse.h.
(java.mostlyclean): Remove parse.c and parse-scan.c, not parse.h.
@@ -12139,7 +12236,7 @@ Sat Sep 5 16:08:01 1998 Tom Tromey <tromey@cygnus.com>
(clean): Remove parse-scan.c as well.
(parse.o): Depend on $(PARSE_C).
-Sat Sep 5 08:48:40 1998 Anthony Green <green@cygnus.com>
+1998-09-05 Anthony Green <green@cygnus.com>
* README, license.terms: Removed.
@@ -12152,18 +12249,18 @@ Sat Sep 5 08:48:40 1998 Anthony Green <green@cygnus.com>
verify.c, zextract.c, zipfile.h: Fixed copyright assignment,
and Java trademark attribution.
-Fri Sep 4 10:42:05 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-04 Tom Tromey <tromey@cygnus.com>
* Makefile.in: Use gcjh, not gjavah.
* config-lang.in (stagestuff): Use gcjh, not gjavah.
* Make-lang.in: Changed gjavah to gcjh everywhere.
-Thu Sep 3 18:04:09 1998 Per Bothner <bothner@cygnus.com>
+1998-09-03 Per Bothner <bothner@cygnus.com>
* gjavah.c: Support new -prepend -add -append flags.
(print_method_info): Method is not virtual if class is final.
-Thu Sep 3 12:03:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-09-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jv-scan.c: Fixed copyright assignment.
* keyword.gperf: Likewise.
@@ -12188,7 +12285,7 @@ Thu Sep 3 12:03:53 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(complete_loop_body): New function.
(patch_exit_expr): Fixed condition inversion.
-Wed Sep 2 11:53:58 1998 Tom Tromey <tromey@cygnus.com>
+1998-09-02 Tom Tromey <tromey@cygnus.com>
* Make-lang.in (jvspec.o): Use GCC_THREAD_FILE to compute correct
name of thread define.
@@ -12199,17 +12296,17 @@ Wed Sep 2 11:53:58 1998 Tom Tromey <tromey@cygnus.com>
library or gc library. Recognize -ljava on command line so it
isn't linked against more than once.
-Wed Sep 2 11:28:35 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-09-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse-scan.y (report_main_declaration): Name of the class
containing `main' can be a qualified name.
-Mon Aug 31 13:25:58 1998 Tom Tromey <tromey@cygnus.com>
+1998-08-31 Tom Tromey <tromey@cygnus.com>
* config-lang.in: Changed gjavac to gjc everywhere.
* Make-lang.in: Changed gjavac to gjc everywhere.
-Thu Aug 27 02:28:27 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-08-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Make-lang.in (JAVA_TARGET_INDEPENDENT_BIN_TOOLS): New variable.
(java.install-common:): Loop over JAVA_TARGET_INDEPENDENT_BIN_TOOLS
@@ -12263,7 +12360,7 @@ Thu Aug 27 02:28:27 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse-scan.y: New file.
* jv-scan.c: New file.
-Tue Aug 25 10:17:54 1998 Tom Tromey <tromey@cygnus.com>
+1998-08-25 Tom Tromey <tromey@cygnus.com>
* gjavah.c (main): Handle -friend option.
(friend_specs): New global.
@@ -12274,18 +12371,18 @@ Tue Aug 25 10:17:54 1998 Tom Tromey <tromey@cygnus.com>
(print_cxx_classname): Added `prefix' argument. Ignore arrays.
Changed all callers.
-Mon Aug 24 20:19:27 1998 Per Bothner <bothner@cygnus.com>
+1998-08-24 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (process_class): Move JCF_FINISH use to main,
(main): Handle processing all the entries of a named .zip archive.
* jcf-io.c (jcf_trim_old_input): New function.
* jcf.h (GET_u2_le,GET_u4_le,JCF_readu2_le,JCF_readu4_le): New macros.
-Mon Aug 24 07:35:13 1998 Per Bothner <bothner@cygnus.com>
+1998-08-24 Per Bothner <bothner@cygnus.com>
* lang.c (flag_assume_compiled): Make default be on.
-Fri Aug 21 17:29:04 1998 Per Bothner <bothner@cygnus.com>
+1998-08-21 Per Bothner <bothner@cygnus.com>
* jcf-dump.c: Add bunches of flags to control output more.
(process_class): New function; support printing more than one class.
@@ -12293,21 +12390,21 @@ Fri Aug 21 17:29:04 1998 Per Bothner <bothner@cygnus.com>
* jcf-reader.c (IGNORE_ATTRIBUTE): New hook.
* jcf.h (CPOOL_INDEX_IN_RANGE): New macro.
-Thu Aug 20 14:24:47 1998 Per Bothner <bothner@cygnus.com>
+1998-08-20 Per Bothner <bothner@cygnus.com>
Change mangling of dispatch table to match C++ vtable (w/thunks).
* class.c (build_dtable_decl), java-tree.h: New function.
(make_class_data): Call it.
* decl.c (init_decl_processing): Likewise.
-Wed Aug 19 17:57:07 1998 Warren Levy <warrenl@cygnus.com>
+1998-08-19 Warren Levy <warrenl@cygnus.com>
* decl.c (init_decl_processing): Use _Jv_NewObjectArray, not
soft_anewarray; adjust args passed.
* expr.c (build_anewarray): Adjust args for soft_anewarray_node to
match _Jv_NewObjectArray.
-Wed Aug 19 09:33:23 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-08-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (push_labeled_block, pop_labeled_block): New functions.
* expr.c (loopup_label): Call create_label_decl.
@@ -12384,17 +12481,17 @@ Wed Aug 19 09:33:23 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* typeck.c (build_java_signature): Build argument signature before
enclosing it in between parenthesis.
-Mon Aug 17 17:44:24 1998 Warren Levy <warrenl@cygnus.com>
+1998-08-17 Warren Levy <warrenl@cygnus.com>
* Make-lang.in (JAVA_SRCS): Created for dependencies * Makefile.in
(JAVA_OBJS): Added reminder comment
-Thu Aug 13 10:01:45 1998 Nick Clifton <nickc@cygnus.com>
+1998-08-13 Nick Clifton <nickc@cygnus.com>
* gjavah.c (D_NAN_MASK): Append LL to the constant to force it to
be interpreted as a long long.
-Thu Aug 13 14:34:07 1998 Warren Levy <warrenl@cygnus.com>
+1998-08-13 Warren Levy <warrenl@cygnus.com>
* decl.c (init_decl_processing): Use _Jv_InitClass, not
soft_initialise_class. Use _Jv_NewMultiArray, not
@@ -12403,7 +12500,7 @@ Thu Aug 13 14:34:07 1998 Warren Levy <warrenl@cygnus.com>
_Jv_CheckArrayStore, not soft_checkarraystore. Use
_Jv_LookupInterfaceMethod, not soft_lookupinterfacemethod.
-Wed Aug 12 14:23:13 1998 Per Bothner <bothner@cygnus.com>
+1998-08-12 Per Bothner <bothner@cygnus.com>
* decl.c, java-tree.h (this_identifier_node, super_identifier_node,
length_identifier_node): New global tree node constants.
@@ -12417,7 +12514,7 @@ Wed Aug 12 14:23:13 1998 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_bytecode_insns): Handle ARRAY_REF opcode
and ARRAY.length.
-Tue Aug 11 11:31:55 1998 Per Bothner <bothner@cygnus.com>
+1998-08-11 Per Bothner <bothner@cygnus.com>
* decl.c (init_decl_processing): Remove unused method_type_node fields.
* class.c (make_method_value): Remove init for removed fields.
@@ -12438,7 +12535,7 @@ Tue Aug 11 11:31:55 1998 Per Bothner <bothner@cygnus.com>
* jcf-write.c (generate_bytecode_insns): Handle RETURN_EXPR,
MINUS_EXPR, MULT_EXPR, TRUNC_DIV_EXPR, and RDIV_EXPR.
-Mon Aug 10 09:57:15 1998 Tom Tromey <tromey@cygnus.com>
+1998-08-10 Tom Tromey <tromey@cygnus.com>
* Make-lang.in (jc1$(exeext)): Don't depend on c-common.o or
c-pragma.o.
@@ -12449,7 +12546,7 @@ Mon Aug 10 09:57:15 1998 Tom Tromey <tromey@cygnus.com>
(last_access_generated): Removed.
(process_file): Only make a single pass over the .class file.
-Wed Jul 29 17:50:23 1998 Per Bothner <bothner@cygnus.com>
+1998-07-29 Per Bothner <bothner@cygnus.com>
* class.c (get_dispatch_table): Add extra dummy vtable entry,
for compatibility for G++ (with -fvtable-thunks).
@@ -12457,7 +12554,7 @@ Wed Jul 29 17:50:23 1998 Per Bothner <bothner@cygnus.com>
* gjavah.c (process_file): Use public inheritance for super-class.
-Wed Jul 29 13:19:03 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-29 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_init_lex): Initialize ctxp->package.
* parse.h (struct parser_ctxt): package and package_len replaced
@@ -12505,11 +12602,11 @@ Wed Jul 29 13:19:03 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_complete_class): Sanity check on stabilize_ref gone.
* zextract.c (read_zip_archive): Cast lseek second argument to long.
-Tue Jul 28 21:39:22 1998 Per Bothner <bothner@cygnus.com>
+1998-07-28 Per Bothner <bothner@cygnus.com>
* class.c (hashUtf8String): Fix - use new JavaSoft specification.
-Fri Jul 24 10:43:25 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-24 Tom Tromey <tromey@cygnus.com>
* gjavah.c (F_NAN): Removed.
(F_NAN_MASK): New macro.
@@ -12524,7 +12621,7 @@ Fri Jul 24 10:43:25 1998 Tom Tromey <tromey@cygnus.com>
* jcf-dump.c (print_constant): [CONSTANT_Double, CONSTANT_Float]
If verbose, print underlying representation of value in hex.
-Fri Jul 24 14:14:32 1998 Per Bothner <bothner@cygnus.com>
+1998-07-24 Per Bothner <bothner@cygnus.com>
* buffer.h, buffer.c: New files.
* Makefile.in (JAVA_OBJS): Add buffer.o.
@@ -12538,12 +12635,12 @@ Fri Jul 24 14:14:32 1998 Per Bothner <bothner@cygnus.com>
(generate_bytecode_insns): Handle local variables.
(generate_classfile): Write LocalVariableTable attribute.
-Fri Jul 24 13:46:59 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-24 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-io.c (open_in_zip): Check the zipfile magic number.
* zipfile.h (ZIPMAGIC): New macro.
-Fri Jul 24 10:43:25 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-24 Tom Tromey <tromey@cygnus.com>
* Makefile.in (gjavah.o): Updated dependencies.
(jcf-dump.o): Likewise.
@@ -12559,7 +12656,7 @@ Fri Jul 24 10:43:25 1998 Tom Tromey <tromey@cygnus.com>
(java.rest.encap): Likewise.
* config-lang.in (compilers, stagestuff): Added gjavah.
-Thu Jul 23 18:33:56 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-23 Tom Tromey <tromey@cygnus.com>
* gjavah.c (java_float_finite): New function.
(java_double_finite): Likewise.
@@ -12571,18 +12668,18 @@ Thu Jul 23 18:33:56 1998 Tom Tromey <tromey@cygnus.com>
(D_NAN): Likewise.
(print_field_info): Use java_float_finite and java_double_finite.
-Thu Jul 23 15:28:24 1998 Per Bothner <bothner@cygnus.com>
+1998-07-23 Per Bothner <bothner@cygnus.com>
* parse.y (method_header): Name "this" implicit argument.
-Wed Jul 22 15:47:30 1998 Per Bothner <bothner@cygnus.com>
+1998-07-22 Per Bothner <bothner@cygnus.com>
* jcf-write.c: Write out LineNumberTable attribute in .class file.
(linenumber_buffer, linenumber_ptr, linenumber_limit): New statics.
(put_linenumber): New function.
(generate_bytecode_insns, generate_classfile): Write line numbers.
-Wed Jul 22 14:39:00 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (CALL_EXPR_FROM_PRIMARY_P): Changed in PRIMARY_P.
(lookup_name, build_known_method_ref, build_class_init,
@@ -12671,7 +12768,7 @@ Wed Jul 22 14:39:00 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(build_return, patch_return): New functions.
* typeck.c (lookup_java_constructor): Fixed typo in comment.
-Tue Jul 21 12:10:04 1998 Per Bothner <bothner@cygnus.com>
+1998-07-21 Per Bothner <bothner@cygnus.com>
* constants.c (find_name_and_type_constant, find_fieldref_index,
find_methodref_index): New methods.
@@ -12696,7 +12793,7 @@ Tue Jul 21 12:10:04 1998 Per Bothner <bothner@cygnus.com>
* parse.y: Use build_java_argument_signature instead of fiddling
with signature_include_return.
-Fri Jul 17 09:48:51 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-17 Tom Tromey <tromey@cygnus.com>
* gjavah.c (print_c_decl): Always generate JArray<>* for array
types.
@@ -12705,7 +12802,7 @@ Fri Jul 17 09:48:51 1998 Tom Tromey <tromey@cygnus.com>
(gjavah$(exeext)): Added $(exeext).
(clean): Likewise.
-Thu Jul 16 15:29:20 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (layout_class): Call to java_layout_parsed_class replace
by safe_layout_class.
@@ -12824,7 +12921,7 @@ Thu Jul 16 15:29:20 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
builtin types.
(build_newarray_node, patch_newarray, build_this): New functions.
-Thu Jul 16 10:46:47 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-16 Tom Tromey <tromey@cygnus.com>
* gjavah.c (print_c_decl): UTF8_GET increments pointer; don't
increment it in `for' statement.
@@ -12843,7 +12940,7 @@ Thu Jul 16 10:46:47 1998 Tom Tromey <tromey@cygnus.com>
(generate_access): Set found_error.
(print_c_decl): Likewise.
-Wed Jul 15 10:36:27 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-15 Tom Tromey <tromey@cygnus.com>
* gjavah.c (print_c_decl): Don't print "," when examining field.
Skip type name when looking at "[L" types.
@@ -12864,7 +12961,7 @@ Wed Jul 15 10:36:27 1998 Tom Tromey <tromey@cygnus.com>
(process_file): Use it.
(utf8_cmp): New function.
-Mon Jul 13 14:21:47 1998 Nick Clifton <nickc@cygnus.com>
+1998-07-13 Nick Clifton <nickc@cygnus.com>
* lang-options.h: Format changed to match changes in gcc/toplev.c
to implement a --help option.
@@ -12873,7 +12970,7 @@ Mon Jul 13 14:21:47 1998 Nick Clifton <nickc@cygnus.com>
* decl.c (init_decl_processing): Revert change to dtable_type.
-Thu Jul 9 18:22:12 1998 Per Bothner <bothner@cygnus.com>
+1998-07-09 Per Bothner <bothner@cygnus.com>
* java-tree.h (CLASS_P): Changed DECL_LANG_FLAG_7 -> TYPE_LANG_FLAG_4.
@@ -12884,14 +12981,14 @@ Thu Jul 9 18:22:12 1998 Per Bothner <bothner@cygnus.com>
* lang.c (lang_init): Default flag_exceptions to 1, without
checking to see if it's 2 first.
-Wed Jul 8 03:01:32 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-08 Jeffrey A Law (law@cygnus.com)
* constants.c: Include "system.h".
* decl.c: Likewise.
* lang.c (flag_new_exceptions): Get via extern now.
(lang_init_options): New functions. Turn on flag_new_exceptions.
-Tue Jul 7 12:56:48 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c (java_lex): Return 0 when we see an invalid character in
the input.
@@ -12913,7 +13010,7 @@ Tue Jul 7 12:56:48 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-io.c (find_class): Zero out BUFFER before we use it, since
we don't explicitly put a null pointer when we're copying it.
-Tue Jul 7 09:38:38 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-07 Tom Tromey <tromey@cygnus.com>
* gjavah.c (print_cxx_classname): New function.
(super_class_name): Likewise.
@@ -12938,7 +13035,7 @@ Tue Jul 7 09:38:38 1998 Tom Tromey <tromey@cygnus.com>
(print_c_decl): Return void.
(print_field_info): Return void.
-Thu Jul 2 16:53:16 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-07-02 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (JAVABISONFLAGS): Specific flag for bison when
processing the jc1 grammar file. Prefix bison functions and
@@ -13073,26 +13170,26 @@ Thu Jul 2 16:53:16 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(patch_unary_op): Extract location information from the node.
(build_array_ref, patch_array_ref): New functions.
-Wed Jul 1 13:11:36 1998 Tom Tromey <tromey@cygnus.com>
+1998-07-01 Tom Tromey <tromey@cygnus.com>
* expr.c (expand_java_INSTANCEOF): Changed calling convention to
match _Jv_IsInstanceOf.
* decl.c (init_decl_processing): Use _Jv_NewArray, not
soft_newarray. Use _Jv_IsInstanceOf, not soft_instanceof.
-Tue Jun 30 14:12:54 1998 Tom Tromey <tromey@cygnus.com>
+1998-06-30 Tom Tromey <tromey@cygnus.com>
* decl.c (init_decl_processing): Functions are now named
_Jv_MonitorEnter and _Jv_MonitorExit, and return jint.
-Mon Jun 29 14:47:10 1998 Per Bothner <bothner@cygnus.com>
+1998-06-29 Per Bothner <bothner@cygnus.com>
* java-tree.h (load_class): Add prototype.
* class.c (is_compiled_class): Add missing arg to load_class.
* expr.c (expand_java_NEW): Call load_class.
* parse.y (process_import): Removed bogus use of void return value.
-Thu Jun 25 11:50:48 1998 Per Bothner <bothner@cygnus.com>
+1998-06-25 Per Bothner <bothner@cygnus.com>
* decl.c, java-tree.h (soft_athrow_node): Renamed to soft_node.
Function name is "_Jv_Throw" instead of "soft_athrow".
@@ -13101,18 +13198,18 @@ Thu Jun 25 11:50:48 1998 Per Bothner <bothner@cygnus.com>
Takes an extra parameter (object size).
* expr.c: Update calls.
-Wed Jun 24 13:59:02 1998 Per Bothner <bothner@cygnus.com>
+1998-06-24 Per Bothner <bothner@cygnus.com>
* lex.c (java_get_line_col): Handle end-of-file.
* except.c (expand_end_java_handler): Handle null type (i.e. finally).
-Wed Jun 24 09:22:34 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
+1998-06-24 Andrew MacLeod <amacleod@cygnus.com>
* lang.c (lang_init): Make -fexceptions the default.
* except.c (maybe_start_try, maybe_end_try): Don't do anything if
exception handling is not turned on.
-Tue Jun 23 10:17:09 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
+1998-06-23 Andrew MacLeod <amacleod@cygnus.com>
* lang.c (flag_new_exceptions): Make this this default.
* decl.c (end_java_method): Call emit_handlers.
@@ -13123,7 +13220,7 @@ Tue Jun 23 10:17:09 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
(emit_handlers): New routine to generate the saved handlers.
* java-except.h (emit_handlers): Add prototype.
-Fri Jun 12 11:31:24 1998 Per Bothner <bothner@cygnus.com>
+1998-06-12 Per Bothner <bothner@cygnus.com>
We used to have three different representations of the constant pool:
the CPool structure, the tree_constant_pool, and the constructures
@@ -13182,7 +13279,7 @@ Fri Jun 12 11:31:24 1998 Per Bothner <bothner@cygnus.com>
* expr.c (expand_invoke): Re-arrange error checks to make more robust.
-Wed Jun 10 17:34:42 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-06-10 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.h: New comment on the handling of unresolved type
identifiers. JDEPs are now part of the jdep_code enum.
@@ -13190,7 +13287,7 @@ Wed Jun 10 17:34:42 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
availability. Both are narrowed down to an 8 bits bitfield.
(CALL_EXPR_PRIMARY): Fixed comment.
-Wed Jun 10 10:54:39 1998 Tom Tromey <tromey@cygnus.com>
+1998-06-10 Tom Tromey <tromey@cygnus.com>
* Make-lang.in (java): Added gjavac and jvgenmain.
(java.start.encap): Depend on gjavac.
@@ -13205,11 +13302,11 @@ Wed Jun 10 10:54:39 1998 Tom Tromey <tromey@cygnus.com>
* config-lang.in (compilers, stagestuff): Added gjavac and
jvgenmain.
-Wed Jun 10 12:19:04 1998 Dave Brolley <brolley@cygnus.com>
+1998-06-10 Dave Brolley <brolley@cygnus.com>
* lang.c (lang_decode_option): New argc/argv interface.
-Tue Jun 9 18:12:46 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-06-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* ChangeLog: Fixed entries not compliant with the Gnu Coding Standard.
* decl.c (build_decl_no_layout): New function.
@@ -13282,34 +13379,34 @@ Tue Jun 9 18:12:46 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(build_unaryop, build_incdec, build_cast, patch_unaryop,
patch_cast): New functions.
-Fri Jun 5 18:03:07 1998 Per Bothner <bothner@cygnus.com>
+1998-06-05 Per Bothner <bothner@cygnus.com>
* jvspec.c: New file.
* Make-lang.in: New rules to build gjavac from jvspec.c and ../gcc.c.
* java-tree.h (identifier_subst): Add declaration.
-Thu Jun 4 13:44:23 1998 Tom Tromey <tromey@cygnus.com>
+1998-06-04 Tom Tromey <tromey@cygnus.com>
* jvgenmain.c (main): Generate call to JvRunMain.
* class.c (make_class_data): Push value for "sync_info" field.
* decl.c (init_decl_processing): Push "sync_info" field.
-Wed Jun 3 20:39:14 1998 Per Bothner <bothner@cygnus.com>
+1998-06-03 Per Bothner <bothner@cygnus.com>
* typeck.c (build_java_array_type): Set TYPE_NAME to actual
Java (source) name, not signature.
Set TYPE_ALIGN to (at least) that of element_type.
-Tue Jun 2 15:19:19 1998 Per Bothner <bothner@cygnus.com>
+1998-06-02 Per Bothner <bothner@cygnus.com>
* class.c: Moved classname-mangling-rekated code to ...
* mangle.c: ... this new file.
* jvgenmain.c: New program (needs mangle.c) to generate main program.
* Makefile.in: Update for above changes.
-Mon Jun 1 09:58:36 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-06-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (truthvalue_conversion): Convert integer and floating
point value to their truth value.
@@ -13340,7 +13437,7 @@ Mon Jun 1 09:58:36 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
different. Force fixed type into node. Handle all binary
operators.
-Wed May 27 10:30:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-05-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* java-tree.h (COMPOUND_ASSIGN_P, INITIALIZED_P): New macros.
* lex.c (java_lex): Use BUILD_OPERATOR and BUILD_OPERATOR2 to
@@ -13398,7 +13495,7 @@ Wed May 27 10:30:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
build_binop, operator_string, patch_binop): New functions.
* typeck.c (binary_numeric_promotion): New function.
-Thu May 21 12:01:04 1998 Per Bothner <bothner@cygnus.com>
+1998-05-21 Per Bothner <bothner@cygnus.com>
* class.c (identifier_subst): New convenience wrapper for ident_subst.
Replace most uses of ident_subst by identifier_subst.
@@ -13412,14 +13509,14 @@ Thu May 21 12:01:04 1998 Per Bothner <bothner@cygnus.com>
Do nreverse 0 times (instead of twice) for Object and Class.
* parse.y (java_layout_parsed_class): No push_class_static_dummy_field.
-Wed May 20 16:35:04 1998 Per Bothner <bothner@cygnus.com>
+1998-05-20 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (parse_class-file): Set lino to smallest line number,
while initializing linenumber_count and linenumber_table.
Do it before init_function_start (which calls emit_line_note).
* expr.c (expand_byte_code): Don't need to clear lineno here.
-Mon May 18 16:23:32 1998 Tom Tromey <tromey@cygnus.com>
+1998-05-18 Tom Tromey <tromey@cygnus.com>
* class.c (append_gpp_mangled_type): If `qualifications' is >=9,
then mangle number as _N_.
@@ -13429,13 +13526,13 @@ Mon May 18 16:23:32 1998 Tom Tromey <tromey@cygnus.com>
mangle_class_field.
(push_class_static_dummy_field): Likewise.
-Sun May 17 12:52:35 1998 Michael Tiemann <tiemann@cygnus.com>
+1998-05-17 Michael Tiemann <tiemann@cygnus.com>
* parse.y (source_start_java_method): Use TREE_SET_CODE instead
of assigning to TREE_CODE. The latter method exploits a feature
of GCC that is not ANSI compliant.
-Thu May 12 13:44:27 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-05-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (pushdecl_force_head): New function.
(pushlevel): Removed conditional printf.
@@ -13548,7 +13645,7 @@ Thu May 12 13:44:27 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(build_expr_block, enter_block, exit_block, lookup_name_in_blocks,
maybe_absorb_scoping_blocks): New functions.
-Mon Apr 27 10:50:05 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-04-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-io.c (find_class): Reset jcf->java_source after JCF_ZERO, if
previously set.
@@ -13685,7 +13782,7 @@ Mon Apr 27 10:50:05 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
tree argument.
(patch_argument, java_complete_tree): New functions.
-Mon Apr 20 18:26:57 1998 Per Bothner <bothner@cygnus.com>
+1998-04-20 Per Bothner <bothner@cygnus.com>
Recover from missing fields and methods (i.e. error instead of fatal).
* decl.c, java-tree.h (TYPE_identifier_node): New global constant.
@@ -13705,7 +13802,7 @@ Mon Apr 20 18:26:57 1998 Per Bothner <bothner@cygnus.com>
* jcf-parse.c (set_source_filename): Use TYPE_NAME, not DECL_NAME.
-Tue Apr 14 15:59:54 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-04-14 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c (load_class): Don't change input_filename before
calling jcf_parse_source (but still do it before calling
@@ -13815,11 +13912,11 @@ Tue Apr 14 15:59:54 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(lookup_method_invoke): cl is now a WFL node. Added missing
IDENTIFIER_POINTER to class type decl name.
-Tue Apr 14 15:23:29 1998 Dave Brolley <brolley@cygnus.com>
+1998-04-14 Dave Brolley <brolley@cygnus.com>
* lang.c (init_parse): Now returns char* containing the filename.
-Fri Apr 10 11:36:04 1998 Per Bothner <bothner@cygnus.com>
+1998-04-10 Per Bothner <bothner@cygnus.com>
* class.c (layout_class): Mangle repeated arg types to match cc1plus.
@@ -13828,7 +13925,7 @@ Fri Apr 10 11:36:04 1998 Per Bothner <bothner@cygnus.com>
state is CSTATE_PREPARED; make superclass and interfaces direct
references, rather than constant pool indexes.
-Thu Apr 9 16:10:56 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-04-09 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parser.y: Include flags.h. Removed debug variable pl.
(method_declaration:): Uses ctxp->parser_ccb_indent instead of pl.
@@ -13861,11 +13958,11 @@ Thu Apr 9 16:10:56 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang.c (init_parse): Expose for non USE_CPPLIB builds.
(finish_parse): Expose for non USE_CPPLIB builds.
-Wed Apr 8 13:06:23 1998 Jeffrey A Law (law@cygnus.com)
+1998-04-08 Jeffrey A Law (law@cygnus.com)
* lang.c (lang_print_xnode): New function.
-Fri Apr 3 13:22:41 1998 Per Bothner <bothner@cygnus.com>
+1998-04-03 Per Bothner <bothner@cygnus.com>
* decl.c (class_dtable_decl), java-tree.h: New tree node.
* class.c (get_dispatch_vector, get_dispatch_table): New functions
@@ -13886,12 +13983,12 @@ Fri Apr 3 13:22:41 1998 Per Bothner <bothner@cygnus.com>
* Makefile.in, Make-lang.in: Add missing $(exeext)s.
-Thu Mar 19 16:59:16 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-03-19 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (build_method_invocation_stmt): Removed extra argument
to build_invoke.
-Mon Mar 16 17:25:19 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-03-16 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (dtable_indent): Now static global.
(expand_invoke): Now call invoke_build_dtable and
@@ -13966,11 +14063,11 @@ Mon Mar 16 17:25:19 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
if return type skipped.
(match_java_method): New function.
-Mon Mar 16 10:40:47 1998 Per Bothner <bothner@cygnus.com>
+1998-03-16 Per Bothner <bothner@cygnus.com>
* jcf-io.c (find_classfile): If USE_JCF_STDIO, fopen in binary mode.
-Wed Feb 25 08:55:49 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-02-25 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (build_invoke_non_interface): New function.
(methods_ident, ncode_ident): Now static globals.
@@ -14018,7 +14115,7 @@ Wed Feb 25 08:55:49 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
(java_layout_parsed_class, java_register_parsed_class): New functions.
(resolve_expression_name): New function.
-Thu Feb 12 11:54:28 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-02-12 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-parse.c: (parse_source_file): Check on errors after init lex.
* lex.c: (java_init_lex): Defer ctxp->java_pass initialization
@@ -14045,7 +14142,7 @@ Thu Feb 12 11:54:28 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lang.c (lang_f_options): Add the flag.
(flag_assume_compiled): Add decl, default to 0.
-Wed Feb 11 11:27:59 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1998-02-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (class_depth): Call to load_class uses extra VERBOSE arg.
(is_compiled_class): Likewise.
@@ -14174,7 +14271,7 @@ Wed Feb 11 11:27:59 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-io.c (open_in_zip): Use strncmp and LEN.
-Thu Jan 29 16:12:13 1998 Dave Brolley <brolley@cygnus.com>
+1998-01-29 Dave Brolley <brolley@cygnus.com>
* Make-lang.in (java.info): Added.
(java.install-info): Added
@@ -14195,12 +14292,12 @@ Thu Jan 29 16:12:13 1998 Dave Brolley <brolley@cygnus.com>
of a static macro value.
(JAVA_ARRAY_EXCEPTION): Delete macro.
-Fri Jan 23 14:19:47 1998 Per Bothner <bothner@cygnus.com>
+1998-01-23 Per Bothner <bothner@cygnus.com>
* typeck.c (build_java_array_type): Fix two bugs in previous change.
* expr.c (build_anewarray): Add missing promote_type.
-Thu Jan 22 17:43:45 1998 Per Bothner <bothner@cygnus.com>
+1998-01-22 Per Bothner <bothner@cygnus.com>
Add array types with known length to optimize bounds checking.
* typeck.c (build_java_array_type): Take length parameter.
@@ -14220,12 +14317,12 @@ Thu Jan 22 17:43:45 1998 Per Bothner <bothner@cygnus.com>
(ARRAY_NEW_NUM, ARRAY_NEW_PTR): Use build_{a,}newarray.
* verify.c (merge_types): Handle known-lengh array types.
-Mon Jan 19 13:09:25 1998 Per Bothner <bothner@cygnus.com>
+1998-01-19 Per Bothner <bothner@cygnus.com>
* expr.c (expand_byte_code): Fix performace bug, which caused
searching linenumber_table to be linear rather than constant.
-Fri Dec 12 19:18:42 1997 Per Bothner <bothner@cygnus.com>
+1997-12-12 Per Bothner <bothner@cygnus.com>
* Makefile.in (BISON, BISONFLAGS): Add missing macros.
@@ -14234,7 +14331,7 @@ Fri Dec 12 19:18:42 1997 Per Bothner <bothner@cygnus.com>
* expr.c (build_java_binop): Implement TRUNC_MOD_EXPR for REAL_TYPE
using __builtin_fmod.
-Thu Dec 4 13:22:59 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-12-04 Alexandre Petit-Bianco <apbianco@cygnus.com>
* keyword.h: New file, output of keyword.gperf as processed by
gperf.
@@ -14249,7 +14346,7 @@ Thu Dec 4 13:22:59 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in (parse.c): Use $(srcdir) for parse.y.
-Wed Dec 3 18:37:42 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-12-03 Alexandre Petit-Bianco <apbianco@cygnus.com>
* Makefile.in: (JAVA_OBJS): New object jcf-parse.o.
(parse.c, lex.c, keyword.h): New rules for Java source code
@@ -14262,7 +14359,7 @@ Wed Dec 3 18:37:42 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
* lex.c: New file, Java language lexer.
* lex.h: New file, Java language lexer definitions.
-Wed Dec 3 17:00:17 1997 Per Bothner <bothner@cygnus.com>
+1997-12-03 Per Bothner <bothner@cygnus.com>
* decl.c (clinit_identifier_node), java-tree.h: New global.
* java-tree.h (IS_METHOD_INIT_P, IS_METHOD_CLINIT_P): Removed.
@@ -14272,13 +14369,13 @@ Wed Dec 3 17:00:17 1997 Per Bothner <bothner@cygnus.com>
* jcf-reader.c (get_attribute): Test for wrong attribute length.
-Mon Oct 27 17:46:36 1997 Per Bothner <bothner@cygnus.com>
+1997-10-27 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions): When processing a handler,
attempt to set the current_subr to the right value.
(More complicated code combines Sep 17 and Oct 22 versions.)
-Fri Oct 24 11:36:54 1997 Per Bothner <bothner@cygnus.com>
+1997-10-24 Per Bothner <bothner@cygnus.com>
* class.c (push_class): Figure out (guess) name of source file.
* parse.c (set_source_filename): Set DECL_SOURCE_FILE of class decl.
@@ -14289,19 +14386,19 @@ Fri Oct 24 11:36:54 1997 Per Bothner <bothner@cygnus.com>
* expr.c (build_java_binop): Fix masking 2nd operand.
* decl.c (init_decl_processing): Set sizetype first.
-Wed Oct 22 19:39:05 1997 Per Bothner <bothner@cygnus.com>
+1997-10-22 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions): Don't set current_subr to NULL.
(Revert Sep 17 change.)
-Tue Oct 21 15:09:02 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-10-21 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.c (process_zip_dir): Skip ZIP entries not bearing the
.class extension in their name and fix thing so we don't process
them parse_zip_file_entries().
(parse_zip_file_entries): Cleaned unused local variables.
-Mon Oct 20 14:52:42 1997 Per Bothner <bothner@cygnus.com>
+1997-10-20 Per Bothner <bothner@cygnus.com>
* expr.c (can_widen_reference_to): Allows equal array element types.
(expand_byte_code): PRE_RET must expand OPERAND_VALUE (to get index).
@@ -14310,7 +14407,7 @@ Mon Oct 20 14:52:42 1997 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions case OPCODE_anewarray):
Promote element type to POINTER_TYPE.
-Mon Oct 20 13:40:41 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-10-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* jcf-reader.c, parse.c: (parse_zip_file, process_zip_dir,
find_in_current_zip, jcf_figure_file_type): Moved from
@@ -14318,13 +14415,13 @@ Mon Oct 20 13:40:41 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
* zextract.c: (read_zip_archive): takes file_comment_length possible
field into account.
-Mon Oct 20 11:45:06 1997 Per Bothner <bothner@cygnus.com>
+1997-10-20 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions): Var can also be promoted to int.
* verify.c (merge_types): Handle array types even better ...
-Fri Oct 17 15:56:37 1997 Per Bothner <bothner@cygnus.com>
+1997-10-17 Per Bothner <bothner@cygnus.com>
* expr.c (java_stack_pop): Fix use of NULL_TREE for TYPE_SECOND.
@@ -14335,7 +14432,7 @@ Fri Oct 17 15:56:37 1997 Per Bothner <bothner@cygnus.com>
* expr.c (java_stack_swap): Update stack_type_map.
* verify.c (merge_types): Handle array types better.
-Wed Oct 15 18:09:45 1997 Per Bothner <bothner@cygnus.com>
+1997-10-15 Per Bothner <bothner@cygnus.com>
* class.c (add_field): Don't promote short integral fields to
int any more (unless JAVA_PROMOTE_TO_INT), since Kaffe doesn't.
@@ -14344,12 +14441,12 @@ Wed Oct 15 18:09:45 1997 Per Bothner <bothner@cygnus.com>
* decl.c, java-tree.h (integer_two_node): New constant node.
* verify.c (merge_types): Check for TYPE_RETURN_ADDR.
-Wed Oct 15 17:04:50 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-10-15 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (append_gpp_mangled_type): Use function argument
unpromoted type to generate mangled name.
-Mon Oct 13 16:52:55 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-10-13 Alexandre Petit-Bianco <apbianco@cygnus.com>
* constants.c (build_constant_data_ref): Now uses current_class
instead of main_class.
@@ -14417,7 +14514,7 @@ Mon Oct 13 16:52:55 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
main_class
(is_compiled_class): Now take into account class seen in the archive.
-Mon Oct 6 12:03:23 1997 Per Bothner <bothner@cygnus.com>
+1997-10-06 Per Bothner <bothner@cygnus.com>
* except.h: Renamed to: java-except.h.
* parse.c, except.c, expr.c, verify.c: Update #include accordingly.
@@ -14429,20 +14526,20 @@ Mon Oct 6 12:03:23 1997 Per Bothner <bothner@cygnus.com>
* jcf-io.c (find_class): Don't look first in ".".
-Wed Oct 1 11:26:10 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-10-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* zextract.c (read_zip_archive): Now takes into account the
extra_field field.
* expr.c (can_widen_reference_to): Modified to handle sub-interfaces.
-Sat Sep 20 12:44:28 1997 Per Bothner <bothner@cygnus.com>
+1997-09-20 Per Bothner <bothner@cygnus.com>
* constants.c, java-tree.h (build_internal_class_name): New function.
(alloc_class_constant): Re-implement using build_internal_class_name.
* class.c (make_class_data): Likewise.
* class.c (hashUtf8String): Make hash algorithm match String.hashCode.
-Wed Sep 17 13:15:23 1997 Per Bothner <bothner@cygnus.com>
+1997-09-17 Per Bothner <bothner@cygnus.com>
* verify.c (verify_jvm_instructions): Temporarily set current_subr
to NULL before pushing an exception handler target.
@@ -14452,7 +14549,7 @@ Wed Sep 17 13:15:23 1997 Per Bothner <bothner@cygnus.com>
clobbering registers.
(build_class_init): New function.
-Wed Sep 17 11:02:41 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-09-17 Alexandre Petit-Bianco <apbianco@cygnus.com>
* typeck.c (build_java_array_type): Temporary use
permanent_obstack to create the array 'length' field.
@@ -14460,7 +14557,7 @@ Wed Sep 17 11:02:41 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
label if not found.
* class.c (push_super_field): Tempory use permanent_obstack.
-Mon Sep 15 11:33:31 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-09-15 Alexandre Petit-Bianco <apbianco@cygnus.com>
* typeck.c (type_for_mode): Now handles double_type_node and
float_type_node.
@@ -14468,7 +14565,7 @@ Mon Sep 15 11:33:31 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
the wide bytecode is checked. OPCODE_ret added to the list of
wide.
-Thu Sep 11 19:45:18 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-09-11 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (make_class): Temporary use permanent_obstack. Set the
class CLASS_P field to 1.
@@ -14513,7 +14610,7 @@ Thu Sep 11 19:45:18 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
(FIELD_VOLATILE, FIELD_TRANSIENT): Defined.
(CLASS_P): Defined
-Thu Sep 11 11:57:32 1997 Per Bothner <bothner@cygnus.com>
+1997-09-11 Per Bothner <bothner@cygnus.com>
* class.c (append_gpp_mangled_type): Fix typo.
(emit_register_class): Use main_class to get class object, rather
@@ -14521,7 +14618,7 @@ Thu Sep 11 11:57:32 1997 Per Bothner <bothner@cygnus.com>
* typeck.c (parse_signature_type): Promote array element type
if it is a RECORD_TYPE.
-Wed Sep 10 16:09:23 1997 Per Bothner <bothner@cygnus.com>
+1997-09-10 Per Bothner <bothner@cygnus.com>
* class.c (push_class_static_dummy_field): New function.
(mangle_static_field): New. Do G++-style mangling of static fields.
@@ -14545,7 +14642,7 @@ Wed Sep 10 16:09:23 1997 Per Bothner <bothner@cygnus.com>
* class.c: Include stdio.h.
-Thu Sep 4 21:30:55 1997 Per Bothner <bothner@cygnus.com>
+1997-09-04 Per Bothner <bothner@cygnus.com>
* expr.c (expand_invoke): Use COMPOUND_EXPR (and TREE_SIDE_EFFECTS)
to make sure class is initialized before static/special invoke.
@@ -14554,7 +14651,7 @@ Thu Sep 4 21:30:55 1997 Per Bothner <bothner@cygnus.com>
call find_local_variable to force pre-allocation of decl and rtx.
* decl.c (push_jvm_slot): Set DECL_REGISTER on stack slots.
-Wed Sep 3 16:13:23 1997 Per Bothner <bothner@cygnus.com>
+1997-09-03 Per Bothner <bothner@cygnus.com>
* class.c (build_class_ref): Strip off "promoted_" if need be.
(make_field_value): Call build_java_signature when needed.
@@ -14571,11 +14668,11 @@ Wed Sep 3 16:13:23 1997 Per Bothner <bothner@cygnus.com>
* javaop.def (lload): Fix typo.
* jcf-dump.c (main): Clear filename to prevent possibly-bad free.
-Tue Sep 2 17:37:25 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+1997-09-02 Brendan Kehoe <brendan@lisa.cygnus.com>
* parse.c: Don't include function.h.
-Wed Aug 27 18:33:04 1997 Per Bothner <bothner@cygnus.com>
+1997-08-27 Per Bothner <bothner@cygnus.com>
* except.[ch]: New files.
* Makefile.in (JAVA_OBJS): Add except.o
@@ -14584,7 +14681,7 @@ Wed Aug 27 18:33:04 1997 Per Bothner <bothner@cygnus.com>
* jcf-dump.c (disassemble_method): Print exception table.
-Wed Aug 27 13:26:58 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-08-27 Alexandre Petit-Bianco <apbianco@cygnus.com>
* expr.c (verify_jvm_instructions): Started a thorough
verification of invoke* bytecodes.
@@ -14606,7 +14703,7 @@ Wed Aug 27 13:26:58 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
access_flags.
(get_access_flags_from_decl): Handles all class flags.
-Tue Aug 26 18:54:34 1997 Per Bothner <bothner@cygnus.com>
+1997-08-26 Per Bothner <bothner@cygnus.com>
* class.c (add_method): Zero out newly-allocated DECL_LANG_SPECIFIC.
* parse.c (yyparse): Check for abstract method, and missing code.
@@ -14616,7 +14713,7 @@ Tue Aug 26 18:54:34 1997 Per Bothner <bothner@cygnus.com>
Partial support for scanning exception table.
For load instructions, handle promoted integral types.
-Thu Aug 21 13:48:01 1997 Per Bothner <bothner@cygnus.com>
+1997-08-21 Per Bothner <bothner@cygnus.com>
* verify.c: New file, with contents moved from expr.c.
* expr.c: Bunch of stuff (mostly verification) moved to verify.c.
@@ -14624,7 +14721,7 @@ Thu Aug 21 13:48:01 1997 Per Bothner <bothner@cygnus.com>
* java-tree.h: Add some now-needed function declarations.
* Makefile.in (JAVA_OBJS): Added verify.o.
-Wed Aug 20 14:34:34 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-08-20 Alexandre Petit-Bianco <apbianco@cygnus.com>
* class.c (add_method): Sets the METHOD_SYNCHRONIZED flag, sets the
METHOD_ABSTRACT flag.
@@ -14648,7 +14745,7 @@ Wed Aug 20 14:34:34 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
(verify_jvm_instructions): Started a thorough verification of
invoke* bytecodes.
-Tue Aug 19 13:35:49 1997 Per Bothner <bothner@cygnus.com>
+1997-08-19 Per Bothner <bothner@cygnus.com>
Support verification of jsr/ret subroutines (used for try/finally).
* decl.c (return_address_type_node): New type node.
@@ -14671,16 +14768,16 @@ Tue Aug 19 13:35:49 1997 Per Bothner <bothner@cygnus.com>
(verify_jvm_instructions): Handle errors from push_poending_block.
Support jsr and ret instructions.
-Tue Aug 19 13:33:36 1997 Per Bothner <bothner@cygnus.com>
+1997-08-19 Per Bothner <bothner@cygnus.com>
* jcf-io.c (find_classfile): Fix thinko.
* jcf-dump.c: Add CONVERT2 (to match changed javaop.def).
-Tue Aug 12 20:14:45 1997 Jason Merrill <jason@yorick.cygnus.com>
+1997-08-12 Jason Merrill <jason@yorick.cygnus.com>
* Makefile.in (BISON): Remove.
-Thu Aug 7 23:08:24 1997 Per Bothner <bothner@cygnus.com>
+1997-08-07 Per Bothner <bothner@cygnus.com>
* Makefile.in: Convert to autoconf.
* config-lang.in (outputs): Added java/Makefile.
@@ -14718,7 +14815,7 @@ Thu Aug 7 23:08:24 1997 Per Bothner <bothner@cygnus.com>
Improve newarray, anewarray, ?aload, athrow,
* java-tree.h (LABEL_CHANGED): New macro.
-Tue Aug 5 12:21:27 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-08-05 Alexandre Petit-Bianco <apbianco@cygnus.com>
* decl.c (soft_athrow_node): New global variable initialized.
* javaop.def (i2b, i2c, i2s): Invoke CONVERT2
@@ -14741,7 +14838,7 @@ Tue Aug 5 12:21:27 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
OPCODE_ifnonnull): Now supported.
(build_java_athrow): New function.
-Mon Aug 4 15:46:45 1997 Per Bothner <bothner@cygnus.com>
+1997-08-04 Per Bothner <bothner@cygnus.com>
Rename method name <init> to match G++ (and fix mangling).
* class.c (layout_class): Replace method name of <init> by class name.
@@ -14753,7 +14850,7 @@ Mon Aug 4 15:46:45 1997 Per Bothner <bothner@cygnus.com>
* parse.c (get_constant): Handle CONSTANT_Float and CONSTANT_Double.
-Fri Aug 1 11:37:09 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
+1997-08-01 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.c (get_class_constant): Modified to handle array "classes"
* typeck.c (set_local_type): Bug fixed when filling type_map[] with
@@ -14781,14 +14878,14 @@ Fri Aug 1 11:37:09 1997 Alexandre Petit-Bianco <apbianco@cygnus.com>
(CONVERT): Modified to invoke convert().
(case OPCODE_aload2): Fixed index typo from 2 to 1.
-Thu Jul 31 12:48:18 1997 Per Bothner <bothner@cygnus.com>
+1997-07-31 Per Bothner <bothner@cygnus.com>
* class.c (push_class): Set DECL_ARTIFICIAL (for dbxout.c).
(build_class_ref, is_compiled_class): Handle pointer-to-record types.
(make_class_data): Field name needs '/' as package prefix.
* expr.c (type_stack_dup, java_stack_dup): Fix fencepost errors.
-Fri Jul 25 11:44:21 1997 Per Bothner <bothner@cygnus.com>
+1997-07-25 Per Bothner <bothner@cygnus.com>
Implement debug information for local variables.
* java-tree.h (DECL_CODE_LENGTH, DECL_ARG_SLOT_COUNT,
@@ -14810,7 +14907,7 @@ Fri Jul 25 11:44:21 1997 Per Bothner <bothner@cygnus.com>
* class.c (make_method_value, make_class_data): Update
initializations to match.
-Wed Jul 16 17:17:50 1997 Per Bothner <bothner@cygnus.com>
+1997-07-16 Per Bothner <bothner@cygnus.com>
* class.c (unicode_mangling_length, emit_unicode_mangled_name,
append_gpp_mangled_name, append_gpp_mangled_type): New functions.
@@ -14827,7 +14924,7 @@ Wed Jul 16 17:17:50 1997 Per Bothner <bothner@cygnus.com>
* parse.c (yyparse): Don't call layout_class here.
* typeck.c (build_java_array_type): Set TYPE_ARRAY_ELEMENT.
-Sat Jun 14 12:06:57 1997 Per Bothner <bothner@cygnus.com>
+1997-06-14 Per Bothner <bothner@cygnus.com>
* decl.c, class.c: Update method type to match latest Kaffe snapshot.
* constants.c (lookup_name_constant): Renamed to alloc_name_constant.
@@ -14836,7 +14933,7 @@ Sat Jun 14 12:06:57 1997 Per Bothner <bothner@cygnus.com>
* class.c (interits_from_p, emit_register_class): New functions.
* parse.c (yyparse): Call emit_register_class.
-Mon Jun 9 18:08:06 1997 Per Bothner <bothner@cygnus.com>
+1997-06-09 Per Bothner <bothner@cygnus.com>
* constants.c: New file, to handle constant pool.
* Makefile.in (JAVA_OBJS): Add constants.o.
@@ -14847,7 +14944,7 @@ Mon Jun 9 18:08:06 1997 Per Bothner <bothner@cygnus.com>
* class.c (build_class_ref): Make work fully
(make_class_data): Emit super-class, constant pool, interface vector.
-Tue Jun 3 10:14:31 1997 Per Bothner <bothner@cygnus.com>
+1997-06-03 Per Bothner <bothner@cygnus.com>
java-tree.h (DECL_SIGNATURE, BCODE_EMITTED): Remove.
(LABEL_VERIFIED, BCODE_EXCEPTION_TARGET, TYPE_ARRAY_P): New.
@@ -14870,7 +14967,7 @@ Tue Jun 3 10:14:31 1997 Per Bothner <bothner@cygnus.com>
(set_java_signature): New function - cache signature with type.
(lookup_java_method): New function.
-Tue May 6 22:08:24 1997 Per Bothner <bothner@deneb.cygnus.com>
+1997-05-06 Per Bothner <bothner@deneb.cygnus.com>
* class.c (ident_subst): Take extra SUFFIX parameter.
(add_field): Set DECL_ASSEMBLER_NAME of static fields; more.
@@ -14891,18 +14988,18 @@ Tue May 6 22:08:24 1997 Per Bothner <bothner@deneb.cygnus.com>
* parse.c: Add support for ConstantValue attribute.
Handle nested loading of a class. (JPOOL_UTF): New.
-Tue Mar 11 20:11:05 1997 Per Bothner <bothner@deneb.cygnus.com>
+1997-03-11 Per Bothner <bothner@deneb.cygnus.com>
* expr.c (expand_java_pushc): Support #ifndef REAL_ARITHMETIC case.
-Thu Feb 27 14:24:29 1997 Per Bothner <bothner@deneb.cygnus.com>
+1997-02-27 Per Bothner <bothner@deneb.cygnus.com>
* Make-lang.in (java.install-man): New empty rule.
* typeck.c (set_local_type): New function.
* expr.c (STORE_INTERNAL): Call find_local_variable,
not find_stack_slot. Call set_local_type.
-Wed Feb 12 16:11:05 1997 Per Bothner <bothner@kalessin.cygnus.com>
+1997-02-12 Per Bothner <bothner@kalessin.cygnus.com>
* java-tree.h: Various new macros for constructing RECORD_TYPEs,
and building RECORD_TYPE CONSTRUCTORs.
@@ -14920,7 +15017,7 @@ Wed Feb 12 16:11:05 1997 Per Bothner <bothner@kalessin.cygnus.com>
* jcf-dump.c: Support reading classfile from explicitly-named
class file (without CLASSPATH searching).
-Thu Oct 24 14:10:16 1996 Per Bothner <bothner@deneb.cygnus.com>
+1996-10-24 Per Bothner <bothner@deneb.cygnus.com>
* jcf-reader.c: Add parameter list to HANDLE_CONSTANT_Utf8.
* parse.c (JPOOL_UTF_LENGTH, JPOOL_UTF_DATA, HANDLE_CONSTANT_Utf8):
@@ -14930,6 +15027,6 @@ Thu Oct 24 14:10:16 1996 Per Bothner <bothner@deneb.cygnus.com>
* jcf.h: Make NEW_CPOOL the default.
* jcf.h, jcf-reader.c, parse.c: Remove support for !NEW_CPOOL.
-Thu Oct 24 13:52:45 1996 Per Bothner <bothner@deneb.cygnus.com>
+1996-10-24 Per Bothner <bothner@deneb.cygnus.com>
New directory.
diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in
index 5946542a010..3fb4dd8257e 100644
--- a/gcc/java/Make-lang.in
+++ b/gcc/java/Make-lang.in
@@ -123,9 +123,10 @@ JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o
# Use loose warnings for this front end.
-java-warn =
+java-warn = $(WERROR)
# String length warnings
jvspec.o-warn = -Wno-error
+java/parse.o-warn = -Wno-error
jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS)
rm -f $@
@@ -142,7 +143,8 @@ jv-scan$(exeext): $(JVSCAN_OBJS) $(LIBDEPS)
jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
rm -f $@
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) $(ZLIB) $(LIBS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) \
+ $(ZLIB) $(LDEXP_LIB) $(LIBS)
jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS)
rm -f $@
@@ -156,6 +158,10 @@ java.all.cross: $(GCJ)-cross$(exeext)
java.start.encap: $(GCJ)$(exeext)
java.rest.encap:
+
+java.tags: force
+ cd $(srcdir)/java; etags *.y *.c *.h --language=none --regex='/DEFTREECODE [(]\([A-Z_]+\)/\1/' java-tree.def
+
java.info: $(srcdir)/java/gcj.info
java.dvi: java/gcj.dvi
java.generated-manpages: $(srcdir)/java/gcj.1 $(srcdir)/java/gcjh.1 \
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 6f9d4b244a4..6af639a8b7e 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -1672,7 +1672,14 @@ tree
build_class_init (tree clas, tree expr)
{
tree init;
- if (inherits_from_p (current_class, clas))
+
+ /* An optimization: if CLAS is a superclass of the class we're
+ compiling, we don't need to initialize it. However, if CLAS is
+ an interface, it won't necessarily be initialized, even if we
+ implement it. */
+ if ((! CLASS_INTERFACE (TYPE_NAME (clas))
+ && inherits_from_p (current_class, clas))
+ || current_class == clas)
return expr;
if (always_initialize_class_p)
diff --git a/gcc/java/gcj.texi b/gcc/java/gcj.texi
index 849602441ea..944dbb68a2a 100644
--- a/gcc/java/gcj.texi
+++ b/gcc/java/gcj.texi
@@ -1,4 +1,4 @@
-@\input texinfo @c -*-texinfo-*-
+\input texinfo @c -*-texinfo-*-
@setfilename gcj.info
@settitle Guide to GNU gcj
diff --git a/gcc/java/gjavah.c b/gcc/java/gjavah.c
index 42f33276edc..51cfe7cffbc 100644
--- a/gcc/java/gjavah.c
+++ b/gcc/java/gjavah.c
@@ -134,8 +134,6 @@ static void print_full_cxx_name (FILE*, JCF*, int, int, int, const char *, int);
static void decompile_method (FILE*, JCF*, int);
static void add_class_decl (FILE*, JCF*, JCF_u2);
-static int java_float_finite (jfloat);
-static int java_double_finite (jdouble);
static void print_name (FILE *, JCF *, int);
static void print_base_classname (FILE *, JCF *, int);
static int utf8_cmp (const unsigned char *, int, const char *);
@@ -158,6 +156,8 @@ static void version (void) ATTRIBUTE_NORETURN;
static int overloaded_jni_method_exists_p (const unsigned char *, int,
const char *, int);
static void jni_print_char (FILE *, int);
+static void jni_print_float (FILE *, jfloat);
+static void jni_print_double (FILE *, jdouble);
static void decompile_return_statement (FILE *, JCF *, int, int, int);
JCF_u2 current_field_name;
@@ -197,6 +197,9 @@ static int method_printed = 0;
static int method_synthetic = 0;
static int method_signature = 0;
+/* Set to 1 while the very first data member of a class is being handled. */
+static int is_first_data_member = 0;
+
#define HANDLE_METHOD(ACCESS_FLAGS, NAME, SIGNATURE, ATTRIBUTE_COUNT) \
{ \
method_synthetic = 0; \
@@ -244,36 +247,54 @@ static int decompiled = 0;
#include "jcf-reader.c"
-/* Some useful constants. */
-#define F_NAN_MASK 0x7f800000
-#if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN) && ! defined (HOST_WORDS_BIG_ENDIAN)
-#define D_NAN_MASK 0x000000007ff00000LL
-#else
-#define D_NAN_MASK 0x7ff0000000000000LL
-#endif
-
-/* Return 1 if F is not Inf or NaN. */
-static int
-java_float_finite (jfloat f)
+/* Print a single-precision float, suitable for parsing by g++. */
+static void
+jni_print_float (FILE *stream, jfloat f)
{
- union Word u;
- u.f = f;
-
- /* We happen to know that F_NAN_MASK will match all NaN values, and
- also positive and negative infinity. That's why we only need one
- test here. See The Java Language Specification, section 20.9. */
- return (u.i & F_NAN_MASK) != F_NAN_MASK;
+ /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't
+ work in data initializers. FIXME. */
+ if (JFLOAT_FINITE (f))
+ {
+ fputs (" = ", stream);
+ if (f.negative)
+ putc ('-', stream);
+ if (f.exponent)
+ fprintf (stream, "0x1.%.6xp%+df",
+ ((unsigned int)f.mantissa) << 1,
+ f.exponent - JFLOAT_EXP_BIAS);
+ else
+ /* Exponent of 0x01 is -125; exponent of 0x00 is *also* -125,
+ because the implicit leading 1 bit is no longer present. */
+ fprintf (stream, "0x0.%.6xp%+df",
+ ((unsigned int)f.mantissa) << 1,
+ f.exponent + 1 - JFLOAT_EXP_BIAS);
+ }
+ fputs (";\n", stream);
}
-/* Return 1 if D is not Inf or NaN. */
-static int
-java_double_finite (jdouble d)
+/* Print a double-precision float, suitable for parsing by g++. */
+static void
+jni_print_double (FILE *stream, jdouble f)
{
- union DWord u;
- u.d = d;
-
- /* Now check for all NaNs. */
- return (u.l & D_NAN_MASK) != D_NAN_MASK;
+ /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't
+ work in data initializers. FIXME. */
+ if (JDOUBLE_FINITE (f))
+ {
+ fputs (" = ", stream);
+ if (f.negative)
+ putc ('-', stream);
+ if (f.exponent)
+ fprintf (stream, "0x1.%.5x%.8xp%+d",
+ f.mantissa0, f.mantissa1,
+ f.exponent - JDOUBLE_EXP_BIAS);
+ else
+ /* Exponent of 0x001 is -1022; exponent of 0x000 is *also* -1022,
+ because the implicit leading 1 bit is no longer present. */
+ fprintf (stream, "0x0.%.5x%.8xp%+d",
+ f.mantissa0, f.mantissa1,
+ f.exponent + 1 - JDOUBLE_EXP_BIAS);
+ }
+ fputs (";\n", stream);
}
/* Print a character, appropriately mangled for JNI. */
@@ -729,10 +750,7 @@ print_field_info (FILE *stream, JCF* jcf, int name_index, int sig_index,
jfloat fnum = JPOOL_FLOAT (jcf, current_field_value);
fputs ("const jfloat ", out);
print_field_name (out, jcf, name_index, 0);
- if (! java_float_finite (fnum))
- fputs (";\n", out);
- else
- fprintf (out, " = %.10g;\n", fnum);
+ jni_print_float (out, fnum);
}
break;
case CONSTANT_Double:
@@ -740,10 +758,7 @@ print_field_info (FILE *stream, JCF* jcf, int name_index, int sig_index,
jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value);
fputs ("const jdouble ", out);
print_field_name (out, jcf, name_index, 0);
- if (! java_double_finite (dnum))
- fputs (";\n", out);
- else
- fprintf (out, " = %.17g;\n", dnum);
+ jni_print_double (out, dnum);
}
break;
default:
@@ -1383,6 +1398,17 @@ print_c_decl (FILE* stream, JCF* jcf, int name_index, int signature_index,
}
}
+ /* Force the alignment of the first data member. This is
+ because the "new" C++ ABI changed the alignemnt of non-POD
+ classes. gcj, however, still uses the "old" alignment. */
+ if (is_first_data_member && ! (flags & ACC_STATIC) && ! is_method)
+ {
+ is_first_data_member = 0;
+ print_cxx_classname (out, " __attribute__((aligned(__alignof__( ",
+ jcf, jcf->super_class, 1);
+ fputs (" )))) ", stream);
+ }
+
/* Now print the name of the thing. */
if (need_space)
fputs (" ", stream);
@@ -2088,6 +2114,8 @@ process_file (JCF *jcf, FILE *out)
}
/* Now go back for second pass over methods and fields. */
+ is_first_data_member = 1;
+
JCF_SEEK (jcf, method_start);
method_pass = 1;
jcf_parse_methods (jcf);
diff --git a/gcc/java/javaop.h b/gcc/java/javaop.h
index da09254ad10..bdf3fa6e41f 100644
--- a/gcc/java/javaop.h
+++ b/gcc/java/javaop.h
@@ -55,21 +55,26 @@ typedef int32 jint;
typedef int64 jlong;
typedef void* jref;
-/* A 32-bit IEEE single-precision float. */
-#ifndef jfloat
-#define jfloat float
-#endif
-
-/* A 32-bit IEEE double-precision float. */
-#ifndef jdouble
-#define jdouble double
-#endif
-
-union Word {
- jint i;
- jfloat f;
- void *p;
-};
+/* A 32-bit big-endian IEEE single-precision float. */
+typedef struct _jfloat {
+ unsigned int negative : 1;
+ unsigned int exponent : 8;
+ unsigned int mantissa : 23;
+} jfloat;
+#define JFLOAT_FINITE(f) ((f).exponent != 0xFF)
+#define JFLOAT_QNAN_MASK 0x400000
+#define JFLOAT_EXP_BIAS 0x7f
+
+/* A 32-bit big-endian IEEE double-precision float. */
+typedef struct _jdouble {
+ unsigned int negative : 1;
+ unsigned int exponent : 11;
+ unsigned int mantissa0: 20;
+ unsigned int mantissa1: 32;
+} jdouble;
+#define JDOUBLE_FINITE(f) ((f).exponent != 0x7FF)
+#define JDOUBLE_QNAN_MASK 0x80000 /* apply to mantissa0 */
+#define JDOUBLE_EXP_BIAS 0x3ff
/* A jword is an unsigned integral type big enough for a 32-bit jint
or jfloat *or* a pointer. It is the type appropriate for stack
@@ -102,9 +107,14 @@ union Word {
static inline jfloat
WORD_TO_FLOAT(jword w)
-{ union Word wu;
- wu.i = w;
- return wu.f;
+{
+ jfloat f;
+
+ f.negative = (w & 0x80000000) >> 31;
+ f.exponent = (w & 0x7f800000) >> 23;
+ f.mantissa = (w & 0x007fffff);
+
+ return f;
}
/* Sign extend w. If the host on which this cross-compiler runs uses
@@ -126,21 +136,17 @@ WORDS_TO_LONG(jword hi, jword lo)
return ((jlong) hi << 32) | ((jlong)lo & (((jlong)1 << 32) -1));
}
-union DWord {
- jdouble d;
- jlong l;
- jword w[2];
-};
-
static inline jdouble
WORDS_TO_DOUBLE(jword hi, jword lo)
-{ union DWord wu;
-#if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN)
- wu.l = WORDS_TO_LONG(lo, hi);
-#else
- wu.l = WORDS_TO_LONG(hi, lo);
-#endif
- return wu.d;
+{
+ jdouble d;
+
+ d.negative = (hi & 0x80000000) >> 31;
+ d.exponent = (hi & 0x7ff00000) >> 20;
+ d.mantissa0 = (hi & 0x000fffff);
+ d.mantissa1 = lo;
+
+ return d;
}
/* If PREFIX_CHAR is the first character of the Utf8 encoding of a character,
diff --git a/gcc/java/jcf-dump.c b/gcc/java/jcf-dump.c
index 6d976e53450..a87dd401e0f 100644
--- a/gcc/java/jcf-dump.c
+++ b/gcc/java/jcf-dump.c
@@ -62,6 +62,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#include "version.h"
#include <getopt.h>
+#include <math.h>
/* Outout file. */
FILE *out;
@@ -504,24 +505,86 @@ print_constant (FILE *out, JCF *jcf, int index, int verbosity)
break;
case CONSTANT_Float:
{
- union
- {
- jfloat f;
- int32 i;
- } pun;
-
- pun.f = JPOOL_FLOAT (jcf, index);
- fprintf (out, "%s%.10g",
- verbosity > 0 ? "Float " : "", (double) pun.f);
+ jfloat fnum = JPOOL_FLOAT (jcf, index);
+
+ if (verbosity > 0)
+ fputs ("Float ", out);
+
+ if (fnum.negative)
+ putc ('-', out);
+
+ if (JFLOAT_FINITE (fnum))
+ {
+ int dummy;
+ int exponent = fnum.exponent - JFLOAT_EXP_BIAS;
+ double f;
+ uint32 mantissa = fnum.mantissa;
+ if (fnum.exponent == 0)
+ /* Denormal. */
+ exponent++;
+ else
+ /* Normal; add the implicit bit. */
+ mantissa |= ((uint32)1 << 23);
+
+ f = frexp (mantissa, &dummy);
+ f = ldexp (f, exponent + 1);
+ fprintf (out, "%.10g", f);
+ }
+ else
+ {
+ if (fnum.mantissa == 0)
+ fputs ("Inf", out);
+ else if (fnum.mantissa & JFLOAT_QNAN_MASK)
+ fprintf (out, "QNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK));
+ else
+ fprintf (out, "SNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK));
+ }
+
if (verbosity > 1)
- fprintf (out, ", bits = 0x%08lx", (long) pun.i);
+ fprintf (out, ", bits = 0x%08lx", JPOOL_UINT (jcf, index));
break;
}
case CONSTANT_Double:
{
jdouble dnum = JPOOL_DOUBLE (jcf, index);
- fprintf (out, "%s%.20g", verbosity > 0 ? "Double " : "", dnum);
+
+ if (verbosity > 0)
+ fputs ("Double ", out);
+
+ if (dnum.negative)
+ putc ('-', out);
+
+ if (JDOUBLE_FINITE (dnum))
+ {
+ int dummy;
+ int exponent = dnum.exponent - JDOUBLE_EXP_BIAS;
+ double d;
+ uint64 mantissa = ((((uint64) dnum.mantissa0) << 32)
+ + dnum.mantissa1);
+ if (dnum.exponent == 0)
+ /* Denormal. */
+ exponent++;
+ else
+ /* Normal; add the implicit bit. */
+ mantissa |= ((uint64)1 << 52);
+
+ d = frexp (mantissa, &dummy);
+ d = ldexp (d, exponent + 1);
+ fprintf (out, "%.20g", d);
+ }
+ else
+ {
+ uint64 mantissa = dnum.mantissa0 & ~JDOUBLE_QNAN_MASK;
+ mantissa = (mantissa << 32) + dnum.mantissa1;
+
+ if (dnum.mantissa0 == 0 && dnum.mantissa1 == 0)
+ fputs ("Inf", out);
+ else if (dnum.mantissa0 & JDOUBLE_QNAN_MASK)
+ fprintf (out, "QNaN(%llu)", (unsigned long long)mantissa);
+ else
+ fprintf (out, "SNaN(%llu)", (unsigned long long)mantissa);
+ }
if (verbosity > 1)
{
int32 hi, lo;
diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c
index 3b10f399b2c..c280f1f5546 100644
--- a/gcc/java/jcf-io.c
+++ b/gcc/java/jcf-io.c
@@ -336,6 +336,7 @@ caching_stat (char *filename, struct stat *buf)
{
#if JCF_USE_SCANDIR
char *sep;
+ char origsep = 0;
char *base;
memoized_dirlist_entry *dent;
void **slot;
@@ -349,15 +350,20 @@ caching_stat (char *filename, struct stat *buf)
/* Get the name of the directory. */
sep = strrchr (filename, DIR_SEPARATOR);
+#ifdef DIR_SEPARATOR_2
+ if (! sep)
+ sep = strrchr (filename, DIR_SEPARATOR_2);
+#endif
if (sep)
{
+ origsep = *sep;
*sep = '\0';
base = sep + 1;
}
else
base = filename;
- /* Obtain the entry for this directory form the hash table. */
+ /* Obtain the entry for this directory from the hash table. */
slot = htab_find_slot (memoized_dirlists, filename, INSERT);
if (!*slot)
{
@@ -380,7 +386,7 @@ caching_stat (char *filename, struct stat *buf)
/* Put the separator back. */
if (sep)
- *sep = DIR_SEPARATOR;
+ *sep = origsep;
/* If the file is not in the list, there is no need to stat it; it
does not exist. */
diff --git a/gcc/java/jcf-path.c b/gcc/java/jcf-path.c
index 33f4f80f3c4..8771e6fd879 100644
--- a/gcc/java/jcf-path.c
+++ b/gcc/java/jcf-path.c
@@ -146,22 +146,23 @@ add_entry (struct entry **entp, const char *filename, int is_system)
n->next = NULL;
len = strlen (filename);
- if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0
- || strcmp (filename + len - 4, ".jar") == 0))
+
+ if (len > 4 && (COMPARE_FILENAMES (filename + len - 4, ".zip") == 0
+ || COMPARE_FILENAMES (filename + len - 4, ".jar") == 0))
{
n->flags |= FLAG_ZIP;
/* If the user uses -classpath then he'll have to include
libgcj.jar in the value. We check for this in a simplistic
way. Symlinks will fool this test. This is only used for
-MM and -MMD, so it probably isn't terribly important. */
- if (! strcmp (filename, LIBGCJ_ZIP_FILE))
+ if (! COMPARE_FILENAMES (filename, LIBGCJ_ZIP_FILE))
n->flags |= FLAG_SYSTEM;
}
/* Note that we add a trailing separator to `.zip' names as well.
This is a little hack that lets the searching code in jcf-io.c
work more easily. Eww. */
- if (filename[len - 1] != '/' && filename[len - 1] != DIR_SEPARATOR)
+ if (! IS_DIR_SEPARATOR (filename[len - 1]))
{
char *f2 = alloca (len + 2);
strcpy (f2, filename);
@@ -370,7 +371,7 @@ jcf_path_extdirs_arg (const char *cp)
char *name = alloca (dirname_length
+ strlen (direntp->d_name) + 2);
strcpy (name, buf);
- if (name[dirname_length-1] != DIR_SEPARATOR)
+ if (! IS_DIR_SEPARATOR (name[dirname_length-1]))
{
name[dirname_length] = DIR_SEPARATOR;
name[dirname_length+1] = 0;
diff --git a/gcc/java/jcf-write.c b/gcc/java/jcf-write.c
index a97d1fdfd37..6acf41d5f8d 100644
--- a/gcc/java/jcf-write.c
+++ b/gcc/java/jcf-write.c
@@ -3263,6 +3263,7 @@ make_class_file_name (tree clas)
const char *dname, *cname, *slash;
char *r;
struct stat sb;
+ char sep;
cname = IDENTIFIER_POINTER (identifier_subst (DECL_NAME (TYPE_NAME (clas)),
"", '.', DIR_SEPARATOR,
@@ -3274,24 +3275,45 @@ make_class_file_name (tree clas)
char *t;
dname = TREE_FILENAME (TYPE_NAME (clas));
slash = strrchr (dname, DIR_SEPARATOR);
+#ifdef DIR_SEPARATOR_2
if (! slash)
- {
- dname = ".";
- slash = dname + 1;
- }
+ slash = strrchr (dname, DIR_SEPARATOR_2);
+#endif
+ if (! slash)
+ {
+ dname = ".";
+ slash = dname + 1;
+ sep = DIR_SEPARATOR;
+ }
+ else
+ sep = *slash;
+
t = strrchr (cname, DIR_SEPARATOR);
if (t)
cname = t + 1;
}
else
{
+ char *s;
+
dname = jcf_write_base_directory;
+
+ s = strrchr (dname, DIR_SEPARATOR);
+#ifdef DIR_SEPARATOR_2
+ if (! s)
+ s = strrchr (dname, DIR_SEPARATOR_2);
+#endif
+ if (s)
+ sep = *s;
+ else
+ sep = DIR_SEPARATOR;
+
slash = dname + strlen (dname);
}
r = xmalloc (slash - dname + strlen (cname) + 2);
strncpy (r, dname, slash - dname);
- r[slash - dname] = DIR_SEPARATOR;
+ r[slash - dname] = sep;
strcpy (&r[slash - dname + 1], cname);
/* We try to make new directories when we need them. We only do
@@ -3303,7 +3325,7 @@ make_class_file_name (tree clas)
dname = r + (slash - dname) + 1;
while (1)
{
- char *s = strchr (dname, DIR_SEPARATOR);
+ char *s = strchr (dname, sep);
if (s == NULL)
break;
*s = '\0';
@@ -3312,9 +3334,9 @@ make_class_file_name (tree clas)
&& mkdir (r, 0755) == -1)
fatal_io_error ("can't create directory %s", r);
- *s = DIR_SEPARATOR;
+ *s = sep;
/* Skip consecutive separators. */
- for (dname = s + 1; *dname && *dname == DIR_SEPARATOR; ++dname)
+ for (dname = s + 1; *dname && *dname == sep; ++dname)
;
}
diff --git a/gcc/java/jcf.h b/gcc/java/jcf.h
index c8e6aa7a602..96809748692 100644
--- a/gcc/java/jcf.h
+++ b/gcc/java/jcf.h
@@ -54,6 +54,15 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#define JCF_USE_SCANDIR 0
#endif
+/* On case-insensitive file systems, file name components must be
+ compared using "strcasecmp", if available, instead of "strcmp".
+ Assumes "config.h" has already been included. */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP)
+#define COMPARE_FILENAMES(X, Y) strcasecmp ((X), (Y))
+#else
+#define COMPARE_FILENAMES(X, Y) strcmp ((X), (Y))
+#endif
+
struct JCF;
typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed));
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index daa2e4957b8..031ddcc38b8 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -53,10 +53,10 @@ struct string_option
const int on_value;
};
-static const char *java_init (const char *);
+static bool java_init (void);
static void java_finish (void);
static void java_init_options (void);
-static bool java_post_options (void);
+static bool java_post_options (const char **);
static int java_decode_option (int, char **);
static void put_decl_string (const char *, int);
@@ -69,7 +69,7 @@ static int java_unsafe_for_reeval (tree);
static int merge_init_test_initialization (void * *, void *);
static int inline_init_test_initialization (void * *, void *);
static bool java_can_use_bit_fields_p (void);
-static int java_dump_tree (void *, tree);
+static bool java_dump_tree (void *, tree);
static void dump_compound_expr (dump_info_p, tree);
#ifndef TARGET_OBJECT_SUFFIX
@@ -508,8 +508,8 @@ java_decode_option (int argc __attribute__ ((__unused__)), char **argv)
/* Global open file. */
FILE *finput;
-static const char *
-java_init (const char *filename)
+static bool
+java_init (void)
{
#if 0
extern int flag_minimal_debug;
@@ -526,67 +526,6 @@ java_init (const char *filename)
&& force_align_functions_log < 1)
force_align_functions_log = 1;
- /* Open input file. */
-
- if (filename == 0 || !strcmp (filename, "-"))
- {
- finput = stdin;
- filename = "stdin";
-
- if (dependency_tracking)
- error ("can't do dependency tracking with input from stdin");
- }
- else
- {
- if (dependency_tracking)
- {
- char *dot;
-
- /* If the target is set and the output filename is set, then
- there's no processing to do here. Otherwise we must
- compute one or the other. */
- if (! ((dependency_tracking & DEPEND_TARGET_SET)
- && (dependency_tracking & DEPEND_FILE_ALREADY_SET)))
- {
- dot = strrchr (filename, '.');
- if (dot == NULL)
- error ("couldn't determine target name for dependency tracking");
- else
- {
- char *buf = xmalloc (dot - filename +
- 3 + sizeof (TARGET_OBJECT_SUFFIX));
- strncpy (buf, filename, dot - filename);
-
- /* If emitting class files, we might have multiple
- targets. The class generation code takes care of
- registering them. Otherwise we compute the
- target name here. */
- if ((dependency_tracking & DEPEND_TARGET_SET))
- ; /* Nothing. */
- else if (flag_emit_class_files)
- jcf_dependency_set_target (NULL);
- else
- {
- strcpy (buf + (dot - filename), TARGET_OBJECT_SUFFIX);
- jcf_dependency_set_target (buf);
- }
-
- if ((dependency_tracking & DEPEND_FILE_ALREADY_SET))
- ; /* Nothing. */
- else if ((dependency_tracking & DEPEND_SET_FILE))
- {
- strcpy (buf + (dot - filename), ".d");
- jcf_dependency_set_dep_file (buf);
- }
- else
- jcf_dependency_set_dep_file ("-");
-
- free (buf);
- }
- }
- }
- }
-
jcf_path_init ();
jcf_path_seal (version_flag);
@@ -594,7 +533,7 @@ java_init (const char *filename)
using_eh_for_cleanups ();
- return filename;
+ return true;
}
static void
@@ -813,8 +752,10 @@ java_can_use_bit_fields_p (void)
/* Post-switch processing. */
static bool
-java_post_options (void)
+java_post_options (const char **pfilename)
{
+ const char *filename = *pfilename;
+
/* Use tree inlining if possible. Function instrumentation is only
done in the RTL level, so we disable tree inlining. */
if (! flag_instrument_function_entry_exit)
@@ -828,6 +769,67 @@ java_post_options (void)
}
}
+ /* Open input file. */
+
+ if (filename == 0 || !strcmp (filename, "-"))
+ {
+ finput = stdin;
+ filename = "stdin";
+
+ if (dependency_tracking)
+ error ("can't do dependency tracking with input from stdin");
+ }
+ else
+ {
+ if (dependency_tracking)
+ {
+ char *dot;
+
+ /* If the target is set and the output filename is set, then
+ there's no processing to do here. Otherwise we must
+ compute one or the other. */
+ if (! ((dependency_tracking & DEPEND_TARGET_SET)
+ && (dependency_tracking & DEPEND_FILE_ALREADY_SET)))
+ {
+ dot = strrchr (filename, '.');
+ if (dot == NULL)
+ error ("couldn't determine target name for dependency tracking");
+ else
+ {
+ char *buf = xmalloc (dot - filename +
+ 3 + sizeof (TARGET_OBJECT_SUFFIX));
+ strncpy (buf, filename, dot - filename);
+
+ /* If emitting class files, we might have multiple
+ targets. The class generation code takes care of
+ registering them. Otherwise we compute the
+ target name here. */
+ if ((dependency_tracking & DEPEND_TARGET_SET))
+ ; /* Nothing. */
+ else if (flag_emit_class_files)
+ jcf_dependency_set_target (NULL);
+ else
+ {
+ strcpy (buf + (dot - filename), TARGET_OBJECT_SUFFIX);
+ jcf_dependency_set_target (buf);
+ }
+
+ if ((dependency_tracking & DEPEND_FILE_ALREADY_SET))
+ ; /* Nothing. */
+ else if ((dependency_tracking & DEPEND_SET_FILE))
+ {
+ strcpy (buf + (dot - filename), ".d");
+ jcf_dependency_set_dep_file (buf);
+ }
+ else
+ jcf_dependency_set_dep_file ("-");
+
+ free (buf);
+ }
+ }
+ }
+ }
+
/* Initialize the compiler back end. */
return false;
}
@@ -1048,7 +1050,7 @@ dump_compound_expr (dump_info_p di, tree t)
}
}
-static int
+static bool
java_dump_tree (void *dump_info, tree t)
{
enum tree_code code;
@@ -1071,29 +1073,29 @@ java_dump_tree (void *dump_info, tree t)
dump_child ("body", DECL_FUNCTION_BODY (t));
if (DECL_LANG_SPECIFIC (t) && !dump_flag (di, TDF_SLIM, t))
dump_child ("inline body", DECL_SAVED_TREE (t));
- return 1;
+ return true;
case RETURN_EXPR:
dump_child ("expr", TREE_OPERAND (t, 0));
- return 1;
+ return true;
case GOTO_EXPR:
dump_child ("goto", TREE_OPERAND (t, 0));
- return 1;
+ return true;
case LABEL_EXPR:
dump_child ("label", TREE_OPERAND (t, 0));
- return 1;
+ return true;
case LABELED_BLOCK_EXPR:
dump_child ("label", TREE_OPERAND (t, 0));
dump_child ("block", TREE_OPERAND (t, 1));
- return 1;
+ return true;
case EXIT_BLOCK_EXPR:
dump_child ("block", TREE_OPERAND (t, 0));
dump_child ("val", TREE_OPERAND (t, 1));
- return 1;
+ return true;
case BLOCK:
if (BLOCK_EXPR_BODY (t))
@@ -1112,17 +1114,17 @@ java_dump_tree (void *dump_info, tree t)
block = TREE_CHAIN (block);
}
}
- return 1;
+ return true;
case COMPOUND_EXPR:
if (!dump_flag (di, TDF_SLIM, t))
- return 0;
+ return false;
dump_compound_expr (di, t);
- return 1;
+ return true;
default:
break;
}
- return 0;
+ return false;
}
#include "gt-java-lang.h"
diff --git a/gcc/java/lex.c b/gcc/java/lex.c
index bf263ba3567..d18aa1b9954 100644
--- a/gcc/java/lex.c
+++ b/gcc/java/lex.c
@@ -38,12 +38,17 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#include "keyword.h"
#include "flags.h"
#include "chartables.h"
+#ifndef JC1_LITE
+#include "timevar.h"
+#endif
/* Function declarations. */
static char *java_sprint_unicode (struct java_line *, int);
static void java_unicode_2_utf8 (unicode_t);
static void java_lex_error (const char *, int);
#ifndef JC1_LITE
+static int do_java_lex (YYSTYPE *);
+static int java_lex (YYSTYPE *);
static int java_is_eol (FILE *, int);
static tree build_wfl_node (tree);
#endif
@@ -937,7 +942,7 @@ static int
#ifdef JC1_LITE
yylex (YYSTYPE *java_lval)
#else
-java_lex (YYSTYPE *java_lval)
+do_java_lex (YYSTYPE *java_lval)
#endif
{
int c;
@@ -1699,6 +1704,19 @@ java_lex (YYSTYPE *java_lval)
}
#ifndef JC1_LITE
+
+/* The exported interface to the lexer. */
+static int
+java_lex (YYSTYPE *java_lval)
+{
+ int r;
+
+ timevar_push (TV_LEX);
+ r = do_java_lex (java_lval);
+ timevar_pop (TV_LEX);
+ return r;
+}
+
/* This is called by the parser to see if an error should be generated
due to numeric overflow. This function only handles the particular
case of the largest negative value, and is only called in the case
@@ -1716,6 +1734,7 @@ error_if_numeric_overflow (tree value)
java_lex_error ("Numeric overflow for `int' literal", 0);
}
}
+
#endif /* JC1_LITE */
static void
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 391b567f726..08ba9235c77 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -3527,9 +3527,16 @@ resolve_inner_class (htab_t circularity_hash, tree cl, tree *enclosing,
return decl;
}
- /* Now go to the upper classes, bail out if necessary. We will
+ /* Now go to the upper classes, bail out if necessary. We will
analyze the returned SUPER and act accordingly (see
- do_resolve_class.) */
+ do_resolve_class). */
+ if (JPRIMITIVE_TYPE_P (TREE_TYPE (local_enclosing))
+ || TREE_TYPE (local_enclosing) == void_type_node)
+ {
+ parse_error_context (cl, "Qualifier must be a reference");
+ local_enclosing = NULL_TREE;
+ break;
+ }
local_super = CLASSTYPE_SUPER (TREE_TYPE (local_enclosing));
if (!local_super || local_super == object_type_node)
break;
@@ -3827,6 +3834,9 @@ create_interface (int flags, tree id, tree super)
CLASS_COMPLETE_P (decl) = 1;
add_superinterfaces (decl, super);
+ /* Eventually sets the @deprecated tag flag */
+ CHECK_DEPRECATED (decl);
+
return decl;
}
@@ -9310,6 +9320,19 @@ resolve_field_access (tree qual_wfl, tree *field_decl, tree *field_type)
return error_mark_node;
if (is_static)
field_ref = maybe_build_class_init_for_field (decl, field_ref);
+
+ /* If we're looking at a static field, we may need to generate a
+ class initialization for it. This can happen when the access
+ looks like `field.ref', where `field' is a static field in an
+ interface we implement. */
+ if (!flag_emit_class_files
+ && !flag_emit_xref
+ && TREE_CODE (where_found) == VAR_DECL
+ && FIELD_STATIC (where_found))
+ {
+ build_static_field_ref (where_found);
+ field_ref = build_class_init (DECL_CONTEXT (where_found), field_ref);
+ }
}
else
field_ref = decl;
@@ -11137,8 +11160,6 @@ qualify_ambiguous_name (tree id)
int again, super_found = 0, this_found = 0, new_array_found = 0;
int code;
- decl = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* We first qualify the first element, then derive qualification of
others based on the first one. If the first element is qualified
by a resolution (field or type), this resolution is stored in the
diff --git a/gcc/jump.c b/gcc/jump.c
index 15c9d36618f..b48bc6b0347 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -1757,10 +1757,7 @@ delete_related_insns (insn)
next = NEXT_INSN (next);
return next;
}
- else if ((lab_next = next_nonnote_insn (lab)) != NULL
- && GET_CODE (lab_next) == JUMP_INSN
- && (GET_CODE (PATTERN (lab_next)) == ADDR_VEC
- || GET_CODE (PATTERN (lab_next)) == ADDR_DIFF_VEC))
+ else if (tablejump_p (insn, NULL, &lab_next))
{
/* If we're deleting the tablejump, delete the dispatch table.
We may not be able to kill the label immediately preceding
@@ -1912,10 +1909,20 @@ never_reached_warning (avoided_insn, finish)
if (!warn_notreached)
return;
+ /* Back up to the first of any NOTEs preceding avoided_insn; flow passes
+ us the head of a block, a NOTE_INSN_BASIC_BLOCK, which often follows
+ the line note. */
+ for (insn = PREV_INSN (avoided_insn); ; insn = PREV_INSN (insn))
+ if (GET_CODE (insn) != NOTE)
+ {
+ insn = NEXT_INSN (insn);
+ break;
+ }
+
/* Scan forwards, looking at LINE_NUMBER notes, until we hit a LABEL
in case FINISH is NULL, otherwise until we run out of insns. */
- for (insn = avoided_insn; insn != NULL; insn = NEXT_INSN (insn))
+ for (; insn != NULL; insn = NEXT_INSN (insn))
{
if ((finish == NULL && GET_CODE (insn) == CODE_LABEL)
|| GET_CODE (insn) == BARRIER)
@@ -1932,7 +1939,7 @@ never_reached_warning (avoided_insn, finish)
}
else if (INSN_P (insn))
{
- if (reached_end || a_line_note == NULL)
+ if (reached_end)
break;
contains_insn = 1;
}
diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h
index 984bb80ddc3..8eaa28f24d8 100644
--- a/gcc/langhooks-def.h
+++ b/gcc/langhooks-def.h
@@ -2,20 +2,20 @@
Copyright 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -46,6 +46,7 @@ extern void lhd_do_nothing_t PARAMS ((tree));
extern void lhd_do_nothing_i PARAMS ((int));
extern void lhd_do_nothing_f PARAMS ((struct function *));
extern int lhd_decode_option PARAMS ((int, char **));
+extern bool lhd_post_options PARAMS ((const char **));
extern HOST_WIDE_INT lhd_get_alias_set PARAMS ((tree));
extern tree lhd_return_tree PARAMS ((tree));
extern tree lhd_return_null_tree PARAMS ((tree));
@@ -90,13 +91,13 @@ void write_global_declarations PARAMS ((void));
#define LANG_HOOKS_NAME "GNU unknown"
#define LANG_HOOKS_IDENTIFIER_SIZE sizeof (struct lang_identifier)
-#define LANG_HOOKS_INIT lhd_do_nothing
+#define LANG_HOOKS_INIT hook_bool_void_false
#define LANG_HOOKS_FINISH lhd_do_nothing
#define LANG_HOOKS_PARSE_FILE lhd_do_nothing_i
#define LANG_HOOKS_CLEAR_BINDING_STACK lhd_clear_binding_stack
#define LANG_HOOKS_INIT_OPTIONS lhd_do_nothing
#define LANG_HOOKS_DECODE_OPTION lhd_decode_option
-#define LANG_HOOKS_POST_OPTIONS hook_bool_void_false
+#define LANG_HOOKS_POST_OPTIONS lhd_post_options
#define LANG_HOOKS_GET_ALIAS_SET lhd_get_alias_set
#define LANG_HOOKS_EXPAND_CONSTANT lhd_return_tree
#define LANG_HOOKS_EXPAND_EXPR lhd_expand_expr
@@ -190,7 +191,7 @@ void write_global_declarations PARAMS ((void));
#define LANG_HOOKS_SIMPLIFY_EXPR lhd_simplify_expr
/* Tree dump hooks. */
-int lhd_tree_dump_dump_tree PARAMS ((void *, tree));
+bool lhd_tree_dump_dump_tree PARAMS ((void *, tree));
int lhd_tree_dump_type_quals PARAMS ((tree));
#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree
diff --git a/gcc/langhooks.c b/gcc/langhooks.c
index e816bdc921c..859c0536780 100644
--- a/gcc/langhooks.c
+++ b/gcc/langhooks.c
@@ -2,20 +2,20 @@
Copyright 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -93,6 +93,15 @@ lhd_decode_option (argc, argv)
return 0;
}
+/* The default post options hook. */
+
+bool
+lhd_post_options (pfilename)
+ const char **pfilename ATTRIBUTE_UNUSED;
+{
+ return false;
+}
+
/* Called from by print-tree.c. */
void
@@ -431,12 +440,12 @@ lhd_tree_inlining_convert_parm_for_inlining (parm, value, fndecl)
nodes. Returns nonzero if it does not want the usual dumping of the
second argument. */
-int
+bool
lhd_tree_dump_dump_tree (di, t)
void *di ATTRIBUTE_UNUSED;
tree t ATTRIBUTE_UNUSED;
{
- return 0;
+ return false;
}
/* lang_hooks.tree_dump.type_qual: Determine type qualifiers in a
@@ -475,7 +484,7 @@ lhd_simplify_expr (expr_p, pre_p, post_p)
}
/* lang_hooks.decls.final_write_globals: perform final processing on
- global variables. */
+ global variables. */
void
write_global_declarations ()
{
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 126a13421f8..f203867eadd 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -1,20 +1,20 @@
/* The lang_hooks data structure.
Copyright 2001, 2002 Free Software Foundation, Inc.
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -90,7 +90,7 @@ struct lang_hooks_for_tree_dump
{
/* Dump language-specific parts of tree nodes. Returns nonzero if it
does not want the usual dumping of the second argument. */
- int (*dump_tree) PARAMS ((void *, tree));
+ bool (*dump_tree) PARAMS ((void *, tree));
/* Determine type qualifiers in a language-specific way. */
int (*type_quals) PARAMS ((tree));
@@ -207,25 +207,20 @@ struct lang_hooks
done for this option. */
int (*decode_option) PARAMS ((int, char **));
- /* Called when all command line options have been parsed. Should do
- any required consistency checks, modifications etc. Complex
- initialization should be left to the "init" callback, since GC
- and the identifier hashes are set up between now and then.
+ /* Called when all command line options have been parsed to allow
+ further processing and initialization
- Should return zero unless the compiler back-end does not need to
- be initialized, such as with the -E option.
+ Should return true to indicate that a compiler back-end is
+ not required, such as with the -E option.
If errorcount is nonzero after this call the compiler exits
immediately and the finish hook is not called. */
- bool (*post_options) PARAMS ((void));
-
- /* Called after post_options, to initialize the front end. The main
- input filename is passed, which may be NULL; the front end should
- return the original filename (e.g. foo.i -> foo.c). Return NULL
- to indicate a serious error of some sort; in that case no
- compilation is performed, and the finish hook is called
- immediately. */
- const char * (*init) PARAMS ((const char *));
+ bool (*post_options) PARAMS ((const char **));
+
+ /* Called after post_options to initialize the front end. Return
+ false to indicate that no further compilation be performed, in
+ which case the finish hook is called immediately. */
+ bool (*init) PARAMS ((void));
/* Called at the end of compilation, as a finalizer. */
void (*finish) PARAMS ((void));
diff --git a/gcc/lcm.c b/gcc/lcm.c
index c403485a448..8774fbd65db 100644
--- a/gcc/lcm.c
+++ b/gcc/lcm.c
@@ -129,7 +129,7 @@ compute_antinout_edge (antloc, transp, antin, antout)
optimistic initialization of ANTIN above. */
FOR_EACH_BB_REVERSE (bb)
{
- *qin++ =bb;
+ *qin++ = bb;
bb->aux = bb;
}
diff --git a/gcc/libgcc-std.ver b/gcc/libgcc-std.ver
index 21847be6b92..00c72c0c4af 100644
--- a/gcc/libgcc-std.ver
+++ b/gcc/libgcc-std.ver
@@ -179,6 +179,7 @@ GCC_3.0 {
%inherit GCC_3.3 GCC_3.0
GCC_3.3 {
_Unwind_FindEnclosingFunction
+ _Unwind_GetCFA
}
%inherit GCC_3.4 GCC_3.3
diff --git a/gcc/libgcov.c b/gcc/libgcov.c
index 657de36d300..73b2379847d 100644
--- a/gcc/libgcov.c
+++ b/gcc/libgcov.c
@@ -29,6 +29,17 @@ 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. */
+#if defined(inhibit_libc)
+/* If libc and its header files are not available, provide dummy functions. */
+
+void __gcov_init (void *p);
+void __gcov_flush (void);
+
+void __gcov_init (void *p) { }
+void __gcov_flush (void) { }
+
+#else
+
/* 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. */
@@ -41,12 +52,12 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#undef NULL /* Avoid errors if stdio.h and our stddef.h mismatch. */
#include <stdio.h>
-#include "gcov-io.h"
#include <string.h>
#if defined (TARGET_HAS_F_SETLKW)
#include <fcntl.h>
#include <errno.h>
#endif
+#include "gcov-io.h"
/* Chain of per-object gcov structures. */
static struct gcov_info *gcov_list;
@@ -106,7 +117,6 @@ gcov_exit (void)
for (ptr = gcov_list; ptr; ptr = ptr->next)
{
- FILE *da_file;
struct gcov_summary object;
struct gcov_summary local_prg;
int merging = 0;
@@ -154,39 +164,27 @@ gcov_exit (void)
memset (&object, 0, sizeof (object));
/* Open for modification */
- if ((da_file = fopen (ptr->filename, "r+b")))
- merging = 1;
- else if ((da_file = fopen (ptr->filename, "w+b")))
- ;
- else
+ if (!da_file_open (ptr->filename, &merging))
{
fprintf (stderr, "profiling:%s:Cannot open\n", ptr->filename);
ptr->filename = 0;
continue;
}
-#if defined (TARGET_HAS_F_SETLKW)
- /* After a fork, another process might try to read and/or write
- the same file simultaneously. So if we can, lock the file to
- avoid race conditions. */
- while (fcntl (fileno (da_file), F_SETLKW, &s_flock)
- && errno == EINTR)
- continue;
-#endif
if (merging)
{
/* Merge data from file. */
- if (gcov_read_unsigned (da_file, &tag) || tag != GCOV_DATA_MAGIC)
+ if (gcov_read_unsigned (0, &tag) || tag != GCOV_DATA_MAGIC)
{
fprintf (stderr, "profiling:%s:Not a gcov data file\n",
ptr->filename);
read_fatal:;
- fclose (da_file);
+ da_file_close ();
ptr->filename = 0;
continue;
}
- if (gcov_read_unsigned (da_file, &length) || length != GCOV_VERSION)
+ if (gcov_read_unsigned (0, &length) || length != GCOV_VERSION)
{
gcov_version_mismatch (ptr, length);
goto read_fatal;
@@ -196,8 +194,8 @@ gcov_exit (void)
for (ix = ptr->n_functions, fn_info = ptr->functions;
ix--; fn_info++)
{
- if (gcov_read_unsigned (da_file, &tag)
- || gcov_read_unsigned (da_file, &length))
+ if (gcov_read_unsigned (0, &tag)
+ || gcov_read_unsigned (0, &length))
{
read_error:;
fprintf (stderr, "profiling:%s:Error merging\n",
@@ -214,9 +212,9 @@ gcov_exit (void)
goto read_fatal;
}
- if (gcov_read_unsigned (da_file, &flength)
- || gcov_skip_string (da_file, flength)
- || gcov_read_unsigned (da_file, &checksum))
+ if (gcov_read_unsigned (0, &flength)
+ || gcov_skip_string (0, flength)
+ || gcov_read_unsigned (0, &checksum))
goto read_error;
if (flength != strlen (fn_info->name)
|| checksum != fn_info->checksum)
@@ -227,46 +225,51 @@ gcov_exit (void)
f_sect_index < fn_info->n_counter_sections;
f_sect_index++)
{
- if (gcov_read_unsigned (da_file, &tag)
- || gcov_read_unsigned (da_file, &length))
+ unsigned n_counters;
+
+ if (gcov_read_unsigned (0, &tag)
+ || gcov_read_unsigned (0, &length))
goto read_error;
for (sect_index = 0;
sect_index < ptr->n_counter_sections;
sect_index++)
if (ptr->counter_sections[sect_index].tag == tag)
break;
- if (fn_info->counter_sections[f_sect_index].tag != tag
- || sect_index == ptr->n_counter_sections
- || length / 8 != fn_info->counter_sections[f_sect_index].n_counters)
+ if (sect_index == ptr->n_counter_sections
+ || fn_info->counter_sections[f_sect_index].tag != tag)
goto read_mismatch;
-
- for (jx = fn_info->counter_sections[f_sect_index].n_counters;
- jx--; counters[sect_index]++)
- if (gcov_read_counter (da_file, &count))
- goto read_error;
+
+ n_counters = fn_info->counter_sections[f_sect_index].n_counters;
+ if (n_counters != length / 8)
+ goto read_mismatch;
+
+ for (jx = 0; jx < n_counters; jx++)
+ if (gcov_read_counter (0, &count))
+ goto read_error;
else
- *counters[sect_index] += count;
+ counters[sect_index][jx] += count;
+ counters[sect_index] += n_counters;
}
}
/* Check object summary */
- if (gcov_read_unsigned (da_file, &tag)
- || gcov_read_unsigned (da_file, &length))
+ if (gcov_read_unsigned (0, &tag)
+ || gcov_read_unsigned (0, &length))
goto read_error;
if (tag != GCOV_TAG_OBJECT_SUMMARY)
goto read_mismatch;
- if (gcov_read_summary (da_file, &object))
+ if (gcov_read_summary (0, &object))
goto read_error;
/* Check program summary */
while (1)
{
- long base = ftell (da_file);
+ long base = da_file_position (0);
- if (gcov_read_unsigned (da_file, &tag)
- || gcov_read_unsigned (da_file, &length))
+ if (gcov_read_unsigned (0, &tag)
+ || gcov_read_unsigned (0, &length))
{
- if (feof (da_file))
+ if (da_file_eof ())
break;
goto read_error;
}
@@ -274,7 +277,7 @@ gcov_exit (void)
&& tag != GCOV_TAG_PLACEHOLDER_SUMMARY
&& tag != GCOV_TAG_INCORRECT_SUMMARY)
goto read_mismatch;
- if (gcov_read_summary (da_file, &local_prg))
+ if (gcov_read_summary (0, &local_prg))
goto read_error;
if (local_prg.checksum != program.checksum)
continue;
@@ -301,7 +304,7 @@ gcov_exit (void)
ptr->wkspc = base;
break;
}
- fseek (da_file, 0, SEEK_SET);
+ da_file_seek (0, 0, SEEK_SET);
}
object.runs++;
@@ -313,12 +316,12 @@ gcov_exit (void)
/* Write out the data. */
if (/* magic */
- gcov_write_unsigned (da_file, GCOV_DATA_MAGIC)
+ gcov_write_unsigned (0, GCOV_DATA_MAGIC)
/* version number */
- || gcov_write_unsigned (da_file, GCOV_VERSION))
+ || gcov_write_unsigned (0, GCOV_VERSION))
{
write_error:;
- fclose (da_file);
+ da_file_close ();
fprintf (stderr, "profiling:%s:Error writing\n", ptr->filename);
ptr->filename = 0;
continue;
@@ -330,14 +333,14 @@ gcov_exit (void)
for (ix = ptr->n_functions, fn_info = ptr->functions; ix--; fn_info++)
{
/* Announce function. */
- if (gcov_write_unsigned (da_file, GCOV_TAG_FUNCTION)
- || !(base = gcov_reserve_length (da_file))
+ if (gcov_write_unsigned (0, GCOV_TAG_FUNCTION)
+ || !(base = gcov_reserve_length (0))
/* function name */
- || gcov_write_string (da_file, fn_info->name,
+ || gcov_write_string (0, fn_info->name,
strlen (fn_info->name))
/* function checksum */
- || gcov_write_unsigned (da_file, fn_info->checksum)
- || gcov_write_length (da_file, base))
+ || gcov_write_unsigned (0, fn_info->checksum)
+ || gcov_write_length (0, base))
goto write_error;
/* counters. */
@@ -354,8 +357,8 @@ gcov_exit (void)
if (sect_index == ptr->n_counter_sections)
abort ();
- if (gcov_write_unsigned (da_file, tag)
- || !(base = gcov_reserve_length (da_file)))
+ if (gcov_write_unsigned (0, tag)
+ || !(base = gcov_reserve_length (0)))
goto write_error;
for (jx = fn_info->counter_sections[f_sect_index].n_counters; jx--;)
@@ -368,43 +371,41 @@ gcov_exit (void)
if (object.arc_max_sum < count)
object.arc_max_sum = count;
}
- if (gcov_write_counter (da_file, count))
+ if (gcov_write_counter (0, count))
goto write_error; /* RIP Edsger Dijkstra */
}
- if (gcov_write_length (da_file, base))
+ if (gcov_write_length (0, base))
goto write_error;
}
}
/* Object file summary. */
- if (gcov_write_summary (da_file, GCOV_TAG_OBJECT_SUMMARY, &object))
+ if (gcov_write_summary (0, GCOV_TAG_OBJECT_SUMMARY, &object))
goto write_error;
if (merging >= 0)
{
- if (fseek (da_file, 0, SEEK_END))
+ if (da_file_seek (0, 0, SEEK_END))
goto write_error;
- ptr->wkspc = ftell (da_file);
- if (gcov_write_summary (da_file, GCOV_TAG_PLACEHOLDER_SUMMARY,
+ ptr->wkspc = da_file_position (0);
+ if (gcov_write_summary (0, GCOV_TAG_PLACEHOLDER_SUMMARY,
&program))
goto write_error;
}
else if (ptr->wkspc)
{
/* Zap trailing program summary */
- if (fseek (da_file, ptr->wkspc, SEEK_SET))
+ if (da_file_seek (0, ptr->wkspc, SEEK_SET))
goto write_error;
if (!local_prg.runs)
ptr->wkspc = 0;
- if (gcov_write_unsigned (da_file,
- local_prg.runs ? GCOV_TAG_PLACEHOLDER_SUMMARY
- : GCOV_TAG_INCORRECT_SUMMARY))
+ if (gcov_write_unsigned (0, local_prg.runs
+ ? GCOV_TAG_PLACEHOLDER_SUMMARY
+ : GCOV_TAG_INCORRECT_SUMMARY))
goto write_error;
}
- if (fflush (da_file))
- goto write_error;
- if (fclose (da_file))
+ if (da_file_close ())
{
fprintf (stderr, "profiling:%s:Error closing\n", ptr->filename);
ptr->filename = 0;
@@ -517,3 +518,5 @@ __gcov_flush (void)
ptr->counter_sections[j].counters[i] = 0;
}
}
+
+#endif /* inhibit_libc */
diff --git a/gcc/line-map.c b/gcc/line-map.c
index ae26e76a1ef..442e314d030 100644
--- a/gcc/line-map.c
+++ b/gcc/line-map.c
@@ -106,9 +106,9 @@ add_line_map (set, reason, sysp, from_line, to_file, to_line)
if (MAIN_FILE_P (map - 1))
{
- error = true;
- reason = LC_RENAME;
- from = map - 1;
+ set->depth--;
+ set->used--;
+ return NULL;
}
else
{
@@ -139,8 +139,8 @@ add_line_map (set, reason, sysp, from_line, to_file, to_line)
if (reason == LC_ENTER)
{
+ map->included_from = set->depth == 0 ? -1 : (int) (set->used - 2);
set->depth++;
- map->included_from = set->used - 2;
if (set->trace_includes)
trace_include (set, map);
}
diff --git a/gcc/longlong.h b/gcc/longlong.h
index ecca2deef2d..318df96be54 100644
--- a/gcc/longlong.h
+++ b/gcc/longlong.h
@@ -111,10 +111,7 @@
#define umul_ppmm(ph, pl, m0, m1) \
do { \
UDItype __m0 = (m0), __m1 = (m1); \
- __asm__ ("umulh %r1,%2,%0" \
- : "=r" ((UDItype) ph) \
- : "%rJ" (__m0), \
- "rI" (__m1)); \
+ (ph) = __builtin_alpha_umulh (__m0, __m1); \
(pl) = __m0 * __m1; \
} while (0)
#define UMUL_TIME 46
diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c
index 67eb8da45b0..efecd4d27d4 100644
--- a/gcc/loop-unroll.c
+++ b/gcc/loop-unroll.c
@@ -180,25 +180,6 @@ peel_loops_completely (loops, flags)
fprintf (rtl_dump_file, ";; Considering loop %d for complete peeling\n",
loop->num);
- /* Do not peel cold areas. */
- if (!maybe_hot_bb_p (loop->header))
- {
- if (rtl_dump_file)
- fprintf (rtl_dump_file, ";; Not considering loop, cold area\n");
- loop = next;
- continue;
- }
-
- /* Can the loop be manipulated? */
- if (!can_duplicate_loop_p (loop))
- {
- if (rtl_dump_file)
- fprintf (rtl_dump_file,
- ";; Not considering loop, cannot duplicate\n");
- loop = next;
- continue;
- }
-
loop->ninsns = num_loop_insns (loop);
decide_peel_once_rolling (loops, loop, flags);
@@ -315,7 +296,7 @@ decide_peel_once_rolling (loops, loop, flags)
loop->has_desc = 1;
/* Check number of iterations. */
- if (!loop->simple || !loop->desc.const_iter || loop->desc.niter !=0)
+ if (!loop->simple || !loop->desc.const_iter || loop->desc.niter != 0)
{
if (rtl_dump_file)
fprintf (rtl_dump_file, ";; Unable to prove that the loop rolls exactly once\n");
@@ -348,7 +329,24 @@ decide_peel_completely (loops, loop, flags)
return;
}
- /* npeel = number of iterations to peel. */
+ /* Do not peel cold areas. */
+ if (!maybe_hot_bb_p (loop->header))
+ {
+ if (rtl_dump_file)
+ fprintf (rtl_dump_file, ";; Not considering loop, cold area\n");
+ return;
+ }
+
+ /* Can the loop be manipulated? */
+ if (!can_duplicate_loop_p (loop))
+ {
+ if (rtl_dump_file)
+ fprintf (rtl_dump_file,
+ ";; Not considering loop, cannot duplicate\n");
+ return;
+ }
+
+ /* npeel = number of iterations to peel. */
npeel = PARAM_VALUE (PARAM_MAX_COMPLETELY_PEELED_INSNS) / loop->ninsns;
if (npeel > (unsigned) PARAM_VALUE (PARAM_MAX_COMPLETELY_PEEL_TIMES))
npeel = PARAM_VALUE (PARAM_MAX_COMPLETELY_PEEL_TIMES);
@@ -363,7 +361,10 @@ decide_peel_completely (loops, loop, flags)
/* Check for simple loops. */
if (!loop->has_desc)
- loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ {
+ loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ loop->has_desc = 1;
+ }
/* Check number of iterations. */
if (!loop->simple || !loop->desc.const_iter)
@@ -379,7 +380,7 @@ decide_peel_completely (loops, loop, flags)
{
fprintf (rtl_dump_file, ";; Not peeling loop completely, rolls too much (");
fprintf (rtl_dump_file, HOST_WIDEST_INT_PRINT_DEC,(HOST_WIDEST_INT) loop->desc.niter);
- fprintf (rtl_dump_file, "iterations > %d [maximum peelings])\n", npeel);
+ fprintf (rtl_dump_file, " iterations > %d [maximum peelings])\n", npeel);
}
return;
}
@@ -411,45 +412,40 @@ peel_loop_completely (loops, loop)
{
sbitmap wont_exit;
unsigned HOST_WIDE_INT npeel;
- edge e;
unsigned n_remove_edges, i;
edge *remove_edges;
struct loop_desc *desc = &loop->desc;
npeel = desc->niter;
- wont_exit = sbitmap_alloc (npeel + 2);
- sbitmap_ones (wont_exit);
- RESET_BIT (wont_exit, 0);
- RESET_BIT (wont_exit, npeel + 1);
- if (desc->may_be_zero)
- RESET_BIT (wont_exit, 1);
-
- remove_edges = xcalloc (npeel, sizeof (edge));
- n_remove_edges = 0;
-
- if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
- loops, npeel + 1,
- wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
- DLTHE_FLAG_UPDATE_FREQ))
- abort ();
+ if (npeel)
+ {
+ wont_exit = sbitmap_alloc (npeel + 1);
+ sbitmap_ones (wont_exit);
+ RESET_BIT (wont_exit, 0);
+ if (desc->may_be_zero)
+ RESET_BIT (wont_exit, 1);
- free (wont_exit);
+ remove_edges = xcalloc (npeel, sizeof (edge));
+ n_remove_edges = 0;
- /* Remove the exit edges. */
- for (i = 0; i < n_remove_edges; i++)
- remove_path (loops, remove_edges[i]);
- free (remove_edges);
+ if (!duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
+ loops, npeel,
+ wont_exit, desc->out_edge, remove_edges, &n_remove_edges,
+ DLTHE_FLAG_UPDATE_FREQ))
+ abort ();
- /* Now remove the loop. */
- for (e = RBI (desc->in_edge->src)->copy->succ;
- e && e->dest != RBI (desc->in_edge->dest)->copy;
- e = e->succ_next);
+ free (wont_exit);
- if (!e)
- abort ();
+ /* Remove the exit edges. */
+ for (i = 0; i < n_remove_edges; i++)
+ remove_path (loops, remove_edges[i]);
+ free (remove_edges);
+ }
- remove_path (loops, e);
+ /* Now remove the unreachable part of the last iteration and cancel
+ the loop. */
+ remove_path (loops, desc->in_edge);
if (rtl_dump_file)
fprintf (rtl_dump_file, ";; Peeled loop completely, %d times\n", (int) npeel);
@@ -492,7 +488,10 @@ decide_unroll_constant_iterations (loops, loop, flags)
/* Check for simple loops. */
if (!loop->has_desc)
- loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ {
+ loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ loop->has_desc = 1;
+ }
/* Check number of iterations. */
if (!loop->simple || !loop->desc.const_iter)
@@ -701,7 +700,10 @@ decide_unroll_runtime_iterations (loops, loop, flags)
/* Check for simple loops. */
if (!loop->has_desc)
- loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ {
+ loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ loop->has_desc = 1;
+ }
/* Check simpleness. */
if (!loop->simple)
@@ -902,7 +904,8 @@ unroll_loop_runtime_iterations (loops, loop)
swtch = loop_split_edge_with (swtch->pred, branch_code, loops);
set_immediate_dominator (loops->cfg.dom, preheader, swtch);
swtch->succ->probability = REG_BR_PROB_BASE - p;
- e = make_edge (swtch, preheader, 0);
+ e = make_edge (swtch, preheader,
+ swtch->succ->flags & EDGE_IRREDUCIBLE_LOOP);
e->probability = p;
}
}
@@ -932,7 +935,8 @@ unroll_loop_runtime_iterations (loops, loop)
swtch = loop_split_edge_with (swtch->succ, branch_code, loops);
set_immediate_dominator (loops->cfg.dom, preheader, swtch);
swtch->succ->probability = REG_BR_PROB_BASE - p;
- e = make_edge (swtch, preheader, 0);
+ e = make_edge (swtch, preheader,
+ swtch->succ->flags & EDGE_IRREDUCIBLE_LOOP);
e->probability = p;
}
@@ -981,7 +985,7 @@ decide_peel_simple (loops, loop, flags)
if (rtl_dump_file)
fprintf (rtl_dump_file, ";; Considering simply peeling loop\n");
- /* npeel = number of iterations to peel. */
+ /* npeel = number of iterations to peel. */
npeel = PARAM_VALUE (PARAM_MAX_PEELED_INSNS) / loop->ninsns;
if (npeel > (unsigned) PARAM_VALUE (PARAM_MAX_PEEL_TIMES))
npeel = PARAM_VALUE (PARAM_MAX_PEEL_TIMES);
@@ -996,7 +1000,10 @@ decide_peel_simple (loops, loop, flags)
/* Check for simple loops. */
if (!loop->has_desc)
- loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ {
+ loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ loop->has_desc = 1;
+ }
/* Check number of iterations. */
if (loop->simple && loop->desc.const_iter)
@@ -1118,7 +1125,10 @@ decide_unroll_stupid (loops, loop, flags)
/* Check for simple loops. */
if (!loop->has_desc)
- loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ {
+ loop->simple = simple_loop_p (loops, loop, &loop->desc);
+ loop->has_desc = 1;
+ }
/* Check simpleness. */
if (loop->simple)
diff --git a/gcc/loop-unswitch.c b/gcc/loop-unswitch.c
index 8d6654c520e..fdce1ebff51 100644
--- a/gcc/loop-unswitch.c
+++ b/gcc/loop-unswitch.c
@@ -335,7 +335,7 @@ unswitch_loop (loops, loop, unswitch_on)
struct loop *loop;
basic_block unswitch_on;
{
- edge entry, e, latch_edge;
+ edge entry, latch_edge;
basic_block switch_bb, unswitch_on_alt, src;
struct loop *nloop;
sbitmap zero_bitmap;
@@ -366,15 +366,15 @@ unswitch_loop (loops, loop, unswitch_on)
/* Make a copy. */
src = entry->src;
- irred_flag = src->flags & BB_IRREDUCIBLE_LOOP;
- src->flags &= ~BB_IRREDUCIBLE_LOOP;
+ irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;
+ entry->flags &= ~EDGE_IRREDUCIBLE_LOOP;
zero_bitmap = sbitmap_alloc (2);
sbitmap_zero (zero_bitmap);
if (!duplicate_loop_to_header_edge (loop, entry, loops, 1,
zero_bitmap, NULL, NULL, NULL, 0))
return NULL;
free (zero_bitmap);
- src->flags |= irred_flag;
+ entry->flags |= irred_flag;
/* Record the block with condition we unswitch on. */
unswitch_on_alt = RBI (unswitch_on)->copy;
@@ -382,8 +382,18 @@ unswitch_loop (loops, loop, unswitch_on)
/* Make a copy of the block containing the condition; we will use
it as switch to decide which loop we want to use. */
switch_bb = cfg_layout_duplicate_bb (unswitch_on, NULL);
- switch_bb->flags &= ~BB_IRREDUCIBLE_LOOP;
- switch_bb->flags |= irred_flag;
+ if (irred_flag)
+ {
+ switch_bb->flags |= BB_IRREDUCIBLE_LOOP;
+ switch_bb->succ->flags |= EDGE_IRREDUCIBLE_LOOP;
+ switch_bb->succ->succ_next->flags |= EDGE_IRREDUCIBLE_LOOP;
+ }
+ else
+ {
+ switch_bb->flags &= ~BB_IRREDUCIBLE_LOOP;
+ switch_bb->succ->flags &= ~EDGE_IRREDUCIBLE_LOOP;
+ switch_bb->succ->succ_next->flags &= ~EDGE_IRREDUCIBLE_LOOP;
+ }
add_to_dominance_info (loops->cfg.dom, switch_bb);
RBI (unswitch_on)->copy = unswitch_on_alt;
@@ -396,10 +406,6 @@ unswitch_loop (loops, loop, unswitch_on)
/* Remove branches that are now unreachable in new loops. We rely on the
fact that cfg_layout_duplicate_bb reverses list of edges. */
- for (e = unswitch_on->succ->succ_next->dest->pred; e; e = e->pred_next)
- if (e->src != unswitch_on &&
- !dominated_by_p (loops->cfg.dom, e->src, e->dest))
- break;
remove_path (loops, unswitch_on->succ);
remove_path (loops, unswitch_on_alt->succ);
diff --git a/gcc/loop.c b/gcc/loop.c
index 222d492b63f..d7ae3ea5823 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -225,7 +225,7 @@ struct movable
unsigned int is_equiv : 1; /* 1 means a REG_EQUIV is present on INSN. */
unsigned int insert_temp : 1; /* 1 means we copy to a new pseudo and replace
the original insn with a copy from that
- pseudo, rather than deleting it. */
+ pseudo, rather than deleting it. */
struct movable *match; /* First entry for same value */
struct movable *forces; /* An insn that must be moved if this is */
struct movable *next;
@@ -328,17 +328,18 @@ static void update_reg_last_use PARAMS ((rtx, rtx));
static rtx next_insn_in_loop PARAMS ((const struct loop *, rtx));
static void loop_regs_scan PARAMS ((const struct loop *, int));
static int count_insns_in_loop PARAMS ((const struct loop *));
+static int find_mem_in_note_1 PARAMS ((rtx *, void *));
+static rtx find_mem_in_note PARAMS ((rtx));
static void load_mems PARAMS ((const struct loop *));
static int insert_loop_mem PARAMS ((rtx *, void *));
static int replace_loop_mem PARAMS ((rtx *, void *));
-static void replace_loop_mems PARAMS ((rtx, rtx, rtx));
+static void replace_loop_mems PARAMS ((rtx, rtx, rtx, int));
static int replace_loop_reg PARAMS ((rtx *, void *));
static void replace_loop_regs PARAMS ((rtx insn, rtx, rtx));
static void note_reg_stored PARAMS ((rtx, rtx, void *));
static void try_copy_prop PARAMS ((const struct loop *, rtx, unsigned int));
static void try_swap_copy_prop PARAMS ((const struct loop *, rtx,
unsigned int));
-static int replace_label PARAMS ((rtx *, void *));
static rtx check_insn_for_givs PARAMS((struct loop *, rtx, int, int));
static rtx check_insn_for_bivs PARAMS((struct loop *, rtx, int, int));
static rtx gen_add_mult PARAMS ((rtx, rtx, rtx, rtx));
@@ -363,12 +364,6 @@ void debug_giv PARAMS ((const struct induction *));
void debug_loop PARAMS ((const struct loop *));
void debug_loops PARAMS ((const struct loops *));
-typedef struct rtx_pair
-{
- rtx r1;
- rtx r2;
-} rtx_pair;
-
typedef struct loop_replace_args
{
rtx match;
@@ -829,7 +824,7 @@ scan_loop (loop, flags)
&& (maybe_never
|| loop_reg_used_before_p (loop, set, p)))
/* It is unsafe to move the set. However, it may be OK to
- move the source into a new psuedo, and subsitute a
+ move the source into a new pseudo, and substitute a
reg-to-reg copy for the original insn.
This code used to consider it OK to move a set of a variable
@@ -844,11 +839,15 @@ scan_loop (loop, flags)
the benefit. */
if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
;
- /* Don't move the source and add a reg-to-reg copy with -Os
- (this certainly increases size) or if the source is
- already a reg (the motion will gain nothing). */
+ /* Don't move the source and add a reg-to-reg copy:
+ - with -Os (this certainly increases size),
+ - if the mode doesn't support copy operations (obviously),
+ - if the source is already a reg (the motion will gain nothing),
+ - if the source is a legitimate constant (likewise). */
else if (insert_temp
- && (optimize_size || GET_CODE (SET_SRC (set)) == REG
+ && (optimize_size
+ || ! can_copy_p (GET_MODE (SET_SRC (set)))
+ || GET_CODE (SET_SRC (set)) == REG
|| (CONSTANT_P (SET_SRC (set))
&& LEGITIMATE_CONSTANT_P (SET_SRC (set)))))
;
@@ -1977,7 +1976,7 @@ move_movables (loop, movables, threshold, insn_count)
if (m->insert_temp)
{
/* Replace the original insn with a move from
- our newly created temp. */
+ our newly created temp. */
start_sequence ();
emit_move_insn (m->set_dest, newreg);
seq = get_insns ();
@@ -2221,7 +2220,7 @@ move_movables (loop, movables, threshold, insn_count)
{
rtx seq;
/* Replace the original insn with a move from
- our newly created temp. */
+ our newly created temp. */
start_sequence ();
emit_move_insn (m->set_dest, newreg);
seq = get_insns ();
@@ -4824,6 +4823,9 @@ loop_givs_reduce (loop, bl)
{
rtx insert_before;
+ /* Skip if location is the same as a previous one. */
+ if (tv->same)
+ continue;
if (! auto_inc_opt)
insert_before = NEXT_INSN (tv->insn);
else if (auto_inc_opt == 1)
@@ -5731,6 +5733,7 @@ record_biv (loop, v, insn, dest_reg, inc_val, mult_val, location,
v->always_computable = ! not_every_iteration;
v->always_executed = ! not_every_iteration;
v->maybe_multiple = maybe_multiple;
+ v->same = 0;
/* Add this to the reg's iv_class, creating a class
if this is the first incrementation of the reg. */
@@ -5768,6 +5771,17 @@ record_biv (loop, v, insn, dest_reg, inc_val, mult_val, location,
/* Put it in the array of biv register classes. */
REG_IV_CLASS (ivs, REGNO (dest_reg)) = bl;
}
+ else
+ {
+ /* Check if location is the same as a previous one. */
+ struct induction *induction;
+ for (induction = bl->biv; induction; induction = induction->next_iv)
+ if (location == induction->location)
+ {
+ v->same = induction;
+ break;
+ }
+ }
/* Update IV_CLASS entry for this biv. */
v->next_iv = bl->biv;
@@ -10025,7 +10039,7 @@ load_mems (loop)
else
/* Replace the memory reference with the shadow register. */
replace_loop_mems (p, loop_info->mems[i].mem,
- loop_info->mems[i].reg);
+ loop_info->mems[i].reg, written);
}
if (GET_CODE (p) == CODE_LABEL
@@ -10144,22 +10158,14 @@ load_mems (loop)
{
/* Now, we need to replace all references to the previous exit
label with the new one. */
- rtx_pair rr;
+ replace_label_data rr;
rr.r1 = end_label;
rr.r2 = label;
+ rr.update_label_nuses = true;
for (p = loop->start; p != loop->end; p = NEXT_INSN (p))
{
for_each_rtx (&p, replace_label, &rr);
-
- /* If this is a JUMP_INSN, then we also need to fix the JUMP_LABEL
- field. This is not handled by for_each_rtx because it doesn't
- handle unprinted ('0') fields. We need to update JUMP_LABEL
- because the immediately following unroll pass will use it.
- replace_label would not work anyways, because that only handles
- LABEL_REFs. */
- if (GET_CODE (p) == JUMP_INSN && JUMP_LABEL (p) == end_label)
- JUMP_LABEL (p) = label;
}
}
@@ -10398,6 +10404,33 @@ try_swap_copy_prop (loop, replacement, regno)
}
}
+/* Worker function for find_mem_in_note, called via for_each_rtx. */
+
+static int
+find_mem_in_note_1 (x, data)
+ rtx *x;
+ void *data;
+{
+ if (*x != NULL_RTX && GET_CODE (*x) == MEM)
+ {
+ rtx *res = (rtx *) data;
+ *res = *x;
+ return 1;
+ }
+ return 0;
+}
+
+/* Returns the first MEM found in NOTE by depth-first search. */
+
+static rtx
+find_mem_in_note (note)
+ rtx note;
+{
+ if (note && for_each_rtx (&note, find_mem_in_note_1, &note))
+ return note;
+ return NULL_RTX;
+}
+
/* Replace MEM with its associated pseudo register. This function is
called from load_mems via for_each_rtx. DATA is actually a pointer
to a structure describing the instruction currently being scanned
@@ -10440,10 +10473,11 @@ replace_loop_mem (mem, data)
}
static void
-replace_loop_mems (insn, mem, reg)
+replace_loop_mems (insn, mem, reg, written)
rtx insn;
rtx mem;
rtx reg;
+ int written;
{
loop_replace_args args;
@@ -10452,6 +10486,26 @@ replace_loop_mems (insn, mem, reg)
args.replacement = reg;
for_each_rtx (&insn, replace_loop_mem, &args);
+
+ /* If we hoist a mem write out of the loop, then REG_EQUAL
+ notes referring to the mem are no longer valid. */
+ if (written)
+ {
+ rtx note, sub;
+ rtx *link;
+
+ for (link = &REG_NOTES (insn); (note = *link); link = &XEXP (note, 1))
+ {
+ if (REG_NOTE_KIND (note) == REG_EQUAL
+ && (sub = find_mem_in_note (note))
+ && true_dependence (mem, VOIDmode, sub, rtx_varies_p))
+ {
+ /* Remove the note. */
+ validate_change (NULL_RTX, link, XEXP (note, 1), 1);
+ break;
+ }
+ }
+ }
}
/* Replace one register with another. Called through for_each_rtx; PX points
@@ -10489,35 +10543,6 @@ replace_loop_regs (insn, reg, replacement)
for_each_rtx (&insn, replace_loop_reg, &args);
}
-
-/* Replace occurrences of the old exit label for the loop with the new
- one. DATA is an rtx_pair containing the old and new labels,
- respectively. */
-
-static int
-replace_label (x, data)
- rtx *x;
- void *data;
-{
- rtx l = *x;
- rtx old_label = ((rtx_pair *) data)->r1;
- rtx new_label = ((rtx_pair *) data)->r2;
-
- if (l == NULL_RTX)
- return 0;
-
- if (GET_CODE (l) != LABEL_REF)
- return 0;
-
- if (XEXP (l, 0) != old_label)
- return 0;
-
- XEXP (l, 0) = new_label;
- ++LABEL_NUSES (new_label);
- --LABEL_NUSES (old_label);
-
- return 0;
-}
/* Emit insn for PATTERN after WHERE_INSN in basic block WHERE_BB
(ignored in the interim). */
diff --git a/gcc/mips-tfile.c b/gcc/mips-tfile.c
index 2d364fd9365..b29a7da2234 100644
--- a/gcc/mips-tfile.c
+++ b/gcc/mips-tfile.c
@@ -950,6 +950,13 @@ typedef struct varray {
OBJECTS_PER_PAGE (type), /* objects_last_page */ \
}
+#define INITIALIZE_VARRAY(x,type) \
+do { \
+ (x)->object_size = sizeof (type); \
+ (x)->objects_per_page = OBJECTS_PER_PAGE (type); \
+ (x)->objects_last_page = OBJECTS_PER_PAGE (type); \
+} while (0)
+
/* Master type for indexes within the symbol table. */
typedef unsigned long symint_t;
@@ -1066,92 +1073,8 @@ typedef struct efdr {
} efdr_t;
/* Pre-initialized extended file structure. */
-static efdr_t init_file =
-{
- { /* FDR structure */
-#ifdef __alpha
- 0, /* adr: memory address of beginning of file */
- 0, /* cbLineOffset: byte offset from header for this file ln's */
- 0, /* cbLine: size of lines for this file */
- 0, /* cbSs: number of bytes in the ss */
- 0, /* rss: file name (of source, if known) */
- 0, /* issBase: file's string space */
- 0, /* isymBase: beginning of symbols */
- 0, /* csym: count file's of symbols */
- 0, /* ilineBase: file's line symbols */
- 0, /* cline: count of file's line symbols */
- 0, /* ioptBase: file's optimization entries */
- 0, /* copt: count of file's optimization entries */
- 0, /* ipdFirst: start of procedures for this file */
- 0, /* cpd: count of procedures for this file */
- 0, /* iauxBase: file's auxiliary entries */
- 0, /* caux: count of file's auxiliary entries */
- 0, /* rfdBase: index into the file indirect table */
- 0, /* crfd: count file indirect entries */
- langC, /* lang: language for this file */
- 1, /* fMerge: whether this file can be merged */
- 0, /* fReadin: true if read in (not just created) */
-#ifdef HOST_WORDS_BIG_ENDIAN
- 1, /* fBigendian: if 1, compiled on big endian machine */
-#else
- 0, /* fBigendian: if 1, compiled on big endian machine */
-#endif
- 0, /* fTrim: whether the symbol table was trimmed */
- GLEVEL_2, /* glevel: level this file was compiled with */
- 0, /* reserved: reserved for future use */
- 0, /* cbLineOffset: byte offset from header for this file ln's */
- 0, /* cbLine: size of lines for this file */
-#else
- 0, /* adr: memory address of beginning of file */
- 0, /* rss: file name (of source, if known) */
- 0, /* issBase: file's string space */
- 0, /* cbSs: number of bytes in the ss */
- 0, /* isymBase: beginning of symbols */
- 0, /* csym: count file's of symbols */
- 0, /* ilineBase: file's line symbols */
- 0, /* cline: count of file's line symbols */
- 0, /* ioptBase: file's optimization entries */
- 0, /* copt: count of file's optimization entries */
- 0, /* ipdFirst: start of procedures for this file */
- 0, /* cpd: count of procedures for this file */
- 0, /* iauxBase: file's auxiliary entries */
- 0, /* caux: count of file's auxiliary entries */
- 0, /* rfdBase: index into the file indirect table */
- 0, /* crfd: count file indirect entries */
- langC, /* lang: language for this file */
- 1, /* fMerge: whether this file can be merged */
- 0, /* fReadin: true if read in (not just created) */
-#ifdef HOST_WORDS_BIG_ENDIAN
- 1, /* fBigendian: if 1, compiled on big endian machine */
-#else
- 0, /* fBigendian: if 1, compiled on big endian machine */
-#endif
- GLEVEL_2, /* glevel: level this file was compiled with */
- 0, /* reserved: reserved for future use */
- 0, /* cbLineOffset: byte offset from header for this file ln's */
- 0, /* cbLine: size of lines for this file */
-#endif
- },
-
- (FDR *) 0, /* orig_fdr: original file header pointer */
- (char *) 0, /* name: pointer to filename */
- 0, /* name_len: length of filename */
- 0, /* void_type: ptr to aux node for void type */
- 0, /* int_type: ptr to aux node for int type */
- (scope_t *) 0, /* cur_scope: current scope being processed */
- 0, /* file_index: current file # */
- 0, /* nested_scopes: # nested scopes */
- INIT_VARRAY (char), /* strings: local string varray */
- INIT_VARRAY (SYMR), /* symbols: local symbols varray */
- INIT_VARRAY (PDR), /* procs: procedure varray */
- INIT_VARRAY (AUXU), /* aux_syms: auxiliary symbols varray */
-
- (struct efdr *) 0, /* next_file: next file structure */
-
- (shash_t **) 0, /* shash_head: string hash table */
- { 0 }, /* thash_head: type hash table */
-};
-
+static int init_file_initialized = 0;
+static efdr_t init_file;
static efdr_t *first_file; /* first file descriptor */
static efdr_t **last_file_ptr = &first_file; /* file descriptor tail */
@@ -1651,6 +1574,8 @@ STATIC void add_unknown_tag PARAMS ((tag_t *));
STATIC void add_procedure PARAMS ((const char *,
const char *));
+STATIC void initialize_init_file PARAMS ((void));
+
STATIC void add_file PARAMS ((const char *,
const char *));
@@ -2475,6 +2400,29 @@ add_procedure (func_start, func_end_p1)
}
+/* Initialize the init_file structure. */
+
+STATIC void
+initialize_init_file ()
+{
+ memset ((void*) &init_file, 0, sizeof (init_file));
+
+ init_file.fdr.lang = langC;
+ init_file.fdr.fMerge = 1;
+ init_file.fdr.glevel = GLEVEL_2;
+
+#ifdef HOST_WORDS_BIG_ENDIAN
+ init_file.fdr.fBigendian = 1;
+#endif
+
+ INITIALIZE_VARRAY (&init_file.strings, char);
+ INITIALIZE_VARRAY (&init_file.symbols, SYMR);
+ INITIALIZE_VARRAY (&init_file.procs, PDR);
+ INITIALIZE_VARRAY (&init_file.aux_syms, AUXU);
+
+ init_file_initialized = 1;
+}
+
/* Add a new filename, and set up all of the file relative
virtual arrays (strings, symbols, aux syms, etc.). Record
where the current file structure lives. */
@@ -2513,6 +2461,9 @@ add_file (file_start, file_end_p1)
if (file_desc.objects_last_page == file_desc.objects_per_page)
add_varray_page (&file_desc);
+ if (! init_file_initialized)
+ initialize_init_file ();
+
file_ptr = cur_file_ptr
= &file_desc.last->datum->file[ file_desc.objects_last_page++ ];
*file_ptr = init_file;
diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in
index 1b06b38f460..1904e3d1f0c 100644
--- a/gcc/objc/Make-lang.in
+++ b/gcc/objc/Make-lang.in
@@ -71,7 +71,7 @@ objc/objc-act.o : objc/objc-act.c \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) $(EXPR_H) \
$(TARGET_H) $(C_TREE_H) diagnostic.h toplev.h flags.h objc/objc-act.h \
input.h function.h output.h debug.h langhooks.h $(LANGHOOKS_DEF_H) \
- gtype-objc.h
+ gt-objc-objc-act.h gtype-objc.h
po-generated: $(parsedir)/objc/objc-parse.c
$(parsedir)/objc/objc-parse.c : $(parsedir)/objc/objc-parse.y
@@ -92,6 +92,7 @@ $(parsedir)/objc/objc-parse.y: $(srcdir)/c-parse.in
$(SHELL) $(srcdir)/move-if-change tmp-objc-prs.y $(parsedir)/objc/objc-parse.y
gtype-objc.h : s-gtype ; @true
+gt-objc-objc-act.h : s-gtype ; @true
#
# Build hooks:
@@ -101,6 +102,9 @@ objc.all.cross:
objc.start.encap:
objc.rest.encap:
+objc.tags: force
+ cd $(srcdir)/objc; etags *.y *.c *.h
+
objc.info:
objc.dvi:
objc.generated-manpages:
diff --git a/gcc/objc/config-lang.in b/gcc/objc/config-lang.in
index f18783c38e0..705a76a6f69 100644
--- a/gcc/objc/config-lang.in
+++ b/gcc/objc/config-lang.in
@@ -34,4 +34,4 @@ stagestuff=""
target_libs=target-libobjc
-gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/c-parse.in \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c \$(srcdir)/c-parse.in"
+gtfiles="\$(srcdir)/objc/objc-act.h \$(srcdir)/c-parse.in \$(srcdir)/c-tree.h \$(srcdir)/c-decl.c \$(srcdir)/c-objc-common.c \$(srcdir)/c-common.c \$(srcdir)/c-common.h \$(srcdir)/c-pragma.c \$(srcdir)/objc/objc-act.c"
diff --git a/gcc/objc/lang-specs.h b/gcc/objc/lang-specs.h
index 3017ab361c0..0e7a46f5dae 100644
--- a/gcc/objc/lang-specs.h
+++ b/gcc/objc/lang-specs.h
@@ -24,19 +24,31 @@ Boston, MA 02111-1307, USA. */
{".m", "@objective-c", 0},
{"@objective-c",
- /* cc1obj has an integrated ISO C preprocessor. We should invoke the
- external preprocessor if -save-temps or -traditional is given. */
"%{E|M|MM:%(trad_capable_cpp)\
-lang-objc %(cpp_options) %(cpp_debug_options)}\
%{!E:%{!M:%{!MM:\
%{traditional|ftraditional|traditional-cpp:\
%eGNU Objective C no longer supports traditional compilation}\
- %{save-temps:cc1obj -E %(cpp_options) %b.mi \n\
- cc1obj -fpreprocessed %b.mi %(cc1_options) %{gen-decls}}\
- %{!save-temps:\
- cc1obj %(cpp_unique_options) %(cc1_options) %{gen-decls}}\
+ %{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) %{save-temps:%b.mi} %{!save-temps:%g.mi} \n\
+ cc1obj -fpreprocessed %{save-temps:%b.mi} %{!save-temps:%g.mi} %(cc1_options) %{gen-decls}}\
+ %{!save-temps:%{!no-integrated-cpp:\
+ cc1obj %(cpp_unique_options) %(cc1_options) %{gen-decls}}}\
%{!fsyntax-only:%(invoke_as)}}}}", 0},
{".mi", "@objc-cpp-output", 0},
{"@objc-cpp-output",
"%{!M:%{!MM:%{!E:cc1obj -fpreprocessed %i %(cc1_options) %{gen-decls}\
%{!fsyntax-only:%(invoke_as)}}}}", 0},
+ {"@objective-c-header",
+ "%{E|M|MM:%(trad_capable_cpp)\
+ -lang-objc %(cpp_options) %(cpp_debug_options)}\
+ %{!E:%{!M:%{!MM:\
+ %{traditional|ftraditional|traditional-cpp:\
+%eGNU Objective C no longer supports traditional compilation}\
+ %{save-temps|no-integrated-cpp:cc1obj -E %(cpp_options) %b.mi \n\
+ cc1obj -fpreprocessed %b.mi %(cc1_options) %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}\
+ %{!save-temps:%{!no-integrated-cpp:\
+ cc1obj %(cpp_unique_options) %(cc1_options) %{gen-decls}\
+ -o %g.s %{!o*:--output-pch=%i.gch}\
+ %W{o*:--output-pch=%*}%V}}}}}", 0},
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 5107556dfa2..59cf33ea717 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -432,13 +432,11 @@ generate_struct_by_value_array ()
exit (0);
}
-const char *
-objc_init (filename)
- const char *filename;
+bool
+objc_init ()
{
- filename = c_objc_common_init (filename);
- if (filename == NULL)
- return filename;
+ if (c_objc_common_init () == false)
+ return false;
/* Force the line number back to 0; check_newline will have
raised it to 1, which will make the builtin functions appear
@@ -482,7 +480,7 @@ objc_init (filename)
if (print_struct_values)
generate_struct_by_value_array ();
- return filename;
+ return true;
}
void
@@ -1361,11 +1359,11 @@ build_objc_string_object (strings)
/* Declare a static instance of CLASS_DECL initialized by CONSTRUCTOR. */
+static GTY(()) int num_static_inst;
static tree
objc_add_static_instance (constructor, class_decl)
tree constructor, class_decl;
{
- static int num_static_inst;
tree *chain, decl;
char buf[256];
@@ -1983,14 +1981,14 @@ generate_strings ()
}
}
+static GTY(()) int selector_reference_idx;
static tree
build_selector_reference_decl ()
{
tree decl, ident;
char buf[256];
- static int idx = 0;
- sprintf (buf, "_OBJC_SELECTOR_REFERENCES_%d", idx++);
+ sprintf (buf, "_OBJC_SELECTOR_REFERENCES_%d", selector_reference_idx++);
ident = get_identifier (buf);
@@ -2198,14 +2196,14 @@ build_selector_reference (ident)
build_int_2 (index, 0)));
}
+static GTY(()) int class_reference_idx;
static tree
build_class_reference_decl ()
{
tree decl, ident;
char buf[256];
- static int idx = 0;
- sprintf (buf, "_OBJC_CLASS_REFERENCES_%d", idx++);
+ sprintf (buf, "_OBJC_CLASS_REFERENCES_%d", class_reference_idx++);
ident = get_identifier (buf);
@@ -2326,15 +2324,16 @@ add_objc_string (ident, section)
return build_unary_op (ADDR_EXPR, decl, 1);
}
+static GTY(()) int class_names_idx;
+static GTY(()) int meth_var_names_idx;
+static GTY(()) int meth_var_types_idx;
+
static tree
build_objc_string_decl (section)
enum string_section section;
{
tree decl, ident;
char buf[256];
- static int class_names_idx = 0;
- static int meth_var_names_idx = 0;
- static int meth_var_types_idx = 0;
if (section == class_names)
sprintf (buf, "_OBJC_CLASS_NAME_%d", class_names_idx++);
@@ -2927,11 +2926,11 @@ generate_method_descriptors (protocol)
/* Generate a temporary FUNCTION_DECL node to be used in
hack_method_prototype below. */
+static GTY(()) int build_tmp_function_decl_xxx;
static tree
build_tmp_function_decl ()
{
tree decl_specs, expr_decl, parms;
- static int xxx = 0;
char buffer[80];
/* struct objc_object *objc_xxx (id, SEL, ...); */
@@ -2953,7 +2952,7 @@ build_tmp_function_decl ()
poplevel (0, 0, 0);
decl_specs = build_tree_list (NULL_TREE, objc_object_reference);
- sprintf (buffer, "__objc_tmp_%x", xxx++);
+ sprintf (buffer, "__objc_tmp_%x", build_tmp_function_decl_xxx++);
expr_decl = build_nt (CALL_EXPR, get_identifier (buffer), parms, NULL_TREE);
expr_decl = build1 (INDIRECT_REF, NULL_TREE, expr_decl);
@@ -8561,4 +8560,5 @@ lookup_objc_ivar (id)
return 0;
}
+#include "gt-objc-objc-act.h"
#include "gtype-objc.h"
diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h
index c03e55a64ab..c06c2b8c271 100644
--- a/gcc/objc/objc-act.h
+++ b/gcc/objc/objc-act.h
@@ -24,7 +24,7 @@ Boston, MA 02111-1307, USA. */
/*** Public Interface (procedures) ***/
-const char *objc_init PARAMS ((const char *));
+bool objc_init PARAMS ((void));
const char *objc_printable_name PARAMS ((tree, int));
/* used by yyparse */
diff --git a/gcc/objc/objc-lang.c b/gcc/objc/objc-lang.c
index f485f246730..5a9c86f9c59 100644
--- a/gcc/objc/objc-lang.c
+++ b/gcc/objc/objc-lang.c
@@ -100,6 +100,9 @@ static void objc_init_options PARAMS ((void));
#undef LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING
#define LANG_HOOKS_TREE_INLINING_CONVERT_PARM_FOR_INLINING \
c_convert_parm_for_inlining
+#undef LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P
+#define LANG_HOOKS_TREE_INLINING_TREE_CHAIN_MATTERS_P \
+ c_tree_chain_matters_p
#undef LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION
#define LANG_HOOKS_CALLGRAPH_EXPAND_FUNCTION c_expand_body
diff --git a/gcc/optabs.c b/gcc/optabs.c
index e30e47720ca..bd5c385cec5 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -171,11 +171,9 @@ add_equal_note (insns, target, code, op0, op1)
return 1;
if (! rtx_equal_p (SET_DEST (set), target)
- /* For a STRICT_LOW_PART, the REG_NOTE applies to what is inside the
- SUBREG. */
+ /* For a STRICT_LOW_PART, the REG_NOTE applies to what is inside it. */
&& (GET_CODE (SET_DEST (set)) != STRICT_LOW_PART
- || ! rtx_equal_p (SUBREG_REG (XEXP (SET_DEST (set), 0)),
- target)))
+ || ! rtx_equal_p (XEXP (SET_DEST (set), 0), target)))
return 1;
/* If TARGET is in OP0 or OP1, check if anything in SEQ sets TARGET
@@ -4656,69 +4654,8 @@ rtx
gen_move_insn (x, y)
rtx x, y;
{
- enum machine_mode mode = GET_MODE (x);
- enum insn_code insn_code;
rtx seq;
- if (mode == VOIDmode)
- mode = GET_MODE (y);
-
- insn_code = mov_optab->handlers[(int) mode].insn_code;
-
- /* Handle MODE_CC modes: If we don't have a special move insn for this mode,
- find a mode to do it in. If we have a movcc, use it. Otherwise,
- find the MODE_INT mode of the same width. */
-
- if (GET_MODE_CLASS (mode) == MODE_CC && insn_code == CODE_FOR_nothing)
- {
- enum machine_mode tmode = VOIDmode;
- rtx x1 = x, y1 = y;
-
- if (mode != CCmode
- && mov_optab->handlers[(int) CCmode].insn_code != CODE_FOR_nothing)
- tmode = CCmode;
- else
- for (tmode = QImode; tmode != VOIDmode;
- tmode = GET_MODE_WIDER_MODE (tmode))
- if (GET_MODE_SIZE (tmode) == GET_MODE_SIZE (mode))
- break;
-
- if (tmode == VOIDmode)
- abort ();
-
- /* Get X and Y in TMODE. We can't use gen_lowpart here because it
- may call change_address which is not appropriate if we were
- called when a reload was in progress. We don't have to worry
- about changing the address since the size in bytes is supposed to
- be the same. Copy the MEM to change the mode and move any
- substitutions from the old MEM to the new one. */
-
- if (reload_in_progress)
- {
- x = gen_lowpart_common (tmode, x1);
- if (x == 0 && GET_CODE (x1) == MEM)
- {
- x = adjust_address_nv (x1, tmode, 0);
- copy_replacements (x1, x);
- }
-
- y = gen_lowpart_common (tmode, y1);
- if (y == 0 && GET_CODE (y1) == MEM)
- {
- y = adjust_address_nv (y1, tmode, 0);
- copy_replacements (y1, y);
- }
- }
- else
- {
- x = gen_lowpart (tmode, x);
- y = gen_lowpart (tmode, y);
- }
-
- insn_code = mov_optab->handlers[(int) tmode].insn_code;
- return (GEN_FCN (insn_code) (x, y));
- }
-
start_sequence ();
emit_move_insn_1 (x, y);
seq = get_insns ();
@@ -5407,8 +5344,11 @@ init_integral_libfuncs (optable, opname, suffix)
const char *opname;
int suffix;
{
+ int maxsize = 2*BITS_PER_WORD;
+ if (maxsize < LONG_LONG_TYPE_SIZE)
+ maxsize = LONG_LONG_TYPE_SIZE;
init_libfuncs (optable, word_mode,
- mode_for_size (2*BITS_PER_WORD, MODE_INT, 0),
+ mode_for_size (maxsize, MODE_INT, 0),
opname, suffix);
}
diff --git a/gcc/params.def b/gcc/params.def
index a0744f9b3ad..451c1a8d729 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -50,10 +50,22 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
gets decreased. */
DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE,
"max-inline-insns-single",
- "The maximum number of instructions in a single function eliglible for inlining",
+ "The maximum number of instructions in a single function eligible for inlining",
300)
-/* The repeated inlining limit. After this number of instructions
+/* The single function inlining limit for functions that are
+ inlined by virtue of -finline-functions (-O3).
+ This limit should be chosen to be below or equal to the limit
+ that is applied to functions marked inlined (or defined in the
+ class declaration in C++) given by the "max-inline-insns-single"
+ parameter.
+ The default value is 300. */
+DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO,
+ "max-inline-insns-auto",
+ "The maximum number of instructions when automatically inlining",
+ 300)
+
+/* The repeated inlining limit. After this number of instructions
(in the internal gcc representation, not real machine instructions)
got inlined by repeated inlining, gcc starts to decrease the maximum
number of inlinable instructions in the tree inliner.
@@ -62,16 +74,14 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE,
could otherwise become very high.
It is recommended to set this value to twice the value of the single
function limit (set by the "max-inline-insns-single" parameter) or
- higher. The default value is 600.
+ higher. The default value is 600.
Higher values mean that more inlining is done, resulting in
better performance of the code, at the expense of higher
compile-time resource (time, memory) requirements and larger
- binaries.
- This parameters also controls the maximum size of functions considered
- for inlining in the RTL inliner. */
+ binaries. */
DEFPARAM (PARAM_MAX_INLINE_INSNS,
"max-inline-insns",
- "The maximuem number of instructions by repeated inlining before gcc starts to throttle inlining",
+ "The maximum number of instructions by repeated inlining before gcc starts to throttle inlining",
600)
/* After the repeated inline limit has been exceeded (see
@@ -79,7 +89,7 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS,
decrease the size of single functions eligible for inlining.
The slope of this linear function is given the negative
reciprocal value (-1/x) of this parameter.
- The default vlue is 32.
+ The default value is 32.
This linear function is used until it falls below a minimum
value specified by the "min-inline-insns" parameter. */
DEFPARAM (PARAM_MAX_INLINE_SLOPE,
@@ -90,9 +100,9 @@ DEFPARAM (PARAM_MAX_INLINE_SLOPE,
/* When gcc has inlined so many instructions (by repeated
inlining) that the throttling limits the inlining very much,
inlining for very small functions is still desirable to
- achieve good runtime performance. The size of single functions
+ achieve good runtime performance. The size of single functions
(measured in gcc instructions) which will still be eligible for
- inlining then is given by this parameter. It defaults to 130.
+ inlining then is given by this parameter. It defaults to 130.
Only much later (after exceeding 128 times the recursive limit)
inlining is cut down completely. */
DEFPARAM (PARAM_MIN_INLINE_INSNS,
@@ -100,6 +110,16 @@ DEFPARAM (PARAM_MIN_INLINE_INSNS,
"The number of instructions in a single functions still eligible to inlining after a lot recursive inlining",
130)
+/* For languages that (still) use the RTL inliner, we can specify
+ limits for the RTL inliner separately.
+ The parameter here defines the maximum number of RTL instructions
+ a function may have to be eligible for inlining in the RTL inliner.
+ The default value is 600. */
+DEFPARAM (PARAM_MAX_INLINE_INSNS_RTL,
+ "max-inline-insns-rtl",
+ "The maximum number of instructions for the RTL inliner",
+ 600)
+
/* The maximum number of instructions to consider when looking for an
instruction to fill a delay slot. If more than this arbitrary
number of instructions is searched, the time savings from filling
diff --git a/gcc/params.h b/gcc/params.h
index 27021aa7c7d..caddf853da5 100644
--- a/gcc/params.h
+++ b/gcc/params.h
@@ -92,6 +92,10 @@ typedef enum compiler_param
PARAM_VALUE (PARAM_MAX_INLINE_SLOPE)
#define MIN_INLINE_INSNS \
PARAM_VALUE (PARAM_MIN_INLINE_INSNS)
+#define MAX_INLINE_INSNS_AUTO \
+ PARAM_VALUE (PARAM_MAX_INLINE_INSNS_AUTO)
+#define MAX_INLINE_INSNS_RTL \
+ PARAM_VALUE (PARAM_MAX_INLINE_INSNS_RTL)
#define MAX_DELAY_SLOT_INSN_SEARCH \
PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH)
#define MAX_DELAY_SLOT_LIVE_SEARCH \
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 91506f4b910..18f879f097b 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-21 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc.pot: Regenerate.
+
2003-02-04 Joseph S. Myers <jsm@polyomino.org.uk>
* be.po, de.po: New files.
@@ -15,7 +19,7 @@
* tr.po, es.po, fr.po: Update to version for 20020415
snapshot.
-
+
2002-04-23 Philipp Thomas <pthomas@suse.de>
* gcc.pot: Regenerate.
diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot
index 789f8896ead..b14c3b09ba8 100644
--- a/gcc/po/gcc.pot
+++ b/gcc/po/gcc.pot
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2002-12-30 18:47+0000\n"
+"POT-Creation-Date: 2003-03-21 16:03-0800\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"
@@ -35,35 +35,36 @@ msgstr ""
msgid "`%s' attribute only applies to function types"
msgstr ""
-#: attribs.c:406 c-common.c:5255 c-common.c:5277 c-common.c:5299
-#: c-common.c:5330 c-common.c:5352 c-common.c:5377 c-common.c:5400
-#: c-common.c:5430 c-common.c:5468 c-common.c:5515 c-common.c:5545
-#: c-common.c:5575 c-common.c:5598 c-common.c:5873 c-common.c:5895
-#: c-common.c:5938 c-common.c:6015 c-common.c:6071 c-common.c:6132
-#: c-common.c:6166 c-common.c:6520 config/arm/arm.c:2108 config/arm/arm.c:2135
-#: config/avr/avr.c:4776 config/h8300/h8300.c:3916 config/h8300/h8300.c:3941
-#: config/i386/i386.c:1559 config/i386/winnt.c:79
+#: attribs.c:406 c-common.c:4867 c-common.c:4889 c-common.c:4911
+#: c-common.c:4942 c-common.c:4964 c-common.c:4989 c-common.c:5015
+#: c-common.c:5045 c-common.c:5083 c-common.c:5130 c-common.c:5160
+#: c-common.c:5190 c-common.c:5213 c-common.c:5488 c-common.c:5510
+#: c-common.c:5553 c-common.c:5630 c-common.c:5686 c-common.c:5747
+#: c-common.c:5781 c-common.c:6135 config/arm/arm.c:2151 config/arm/arm.c:2178
+#: config/avr/avr.c:4783 config/h8300/h8300.c:4016 config/h8300/h8300.c:4041
+#: config/i386/i386.c:1594 config/i386/i386.c:15318 config/i386/winnt.c:88
+#: config/ip2k/ip2k.c:3214
#, c-format
msgid "`%s' attribute ignored"
msgstr ""
-#: builtins.c:286
+#: builtins.c:294
msgid "offset outside bounds of constant string"
msgstr ""
-#: builtins.c:766
+#: builtins.c:774
msgid "second arg to `__builtin_prefetch' must be a constant"
msgstr ""
-#: builtins.c:773
+#: builtins.c:781
msgid "invalid second arg to __builtin_prefetch; using zero"
msgstr ""
-#: builtins.c:780
+#: builtins.c:788
msgid "third arg to `__builtin_prefetch' must be a constant"
msgstr ""
-#: builtins.c:787
+#: builtins.c:795
msgid "invalid third arg to __builtin_prefetch; using zero"
msgstr ""
@@ -74,996 +75,986 @@ msgstr ""
#. port (i860) that used this code, and I'm unconvinced it could actually
#. handle the general case. So we no longer try to handle anything
#. weird and make the backend absorb the evil.
-#: builtins.c:2886
+#: builtins.c:3185
msgid "__builtin_saveregs not supported by this target"
msgstr ""
-#: builtins.c:2928
+#: builtins.c:3227
msgid "argument of `__builtin_args_info' must be constant"
msgstr ""
-#: builtins.c:2934
+#: builtins.c:3233
msgid "argument of `__builtin_args_info' out of range"
msgstr ""
-#: builtins.c:2940
+#: builtins.c:3239
msgid "missing argument in `__builtin_args_info'"
msgstr ""
-#: builtins.c:2971
+#: builtins.c:3270
msgid "`va_start' used in function with fixed args"
msgstr ""
-#: builtins.c:2990
+#: builtins.c:3289
msgid "second parameter of `va_start' not last named argument"
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:2995
+#: builtins.c:3294
msgid "`__builtin_next_arg' called without an argument"
msgstr ""
-#: builtins.c:3081
+#: builtins.c:3380
msgid "too many arguments to function `va_start'"
msgstr ""
-#: builtins.c:3183
+#: builtins.c:3482
msgid "first argument to `va_arg' not of type `va_list'"
msgstr ""
#. Unfortunately, this is merely undefined, rather than a constraint
#. violation, so we cannot make this an error. If this call is never
#. executed, the program is still strictly conforming.
-#: builtins.c:3215
+#: builtins.c:3514
#, c-format
msgid "`%s' is promoted to `%s' when passed through `...'"
msgstr ""
-#: builtins.c:3220
+#: builtins.c:3519
#, c-format
msgid "(so you should pass `%s' not `%s' to `va_arg')"
msgstr ""
-#: builtins.c:3351
+#: builtins.c:3650
msgid "invalid arg to `__builtin_frame_address'"
msgstr ""
-#: builtins.c:3353
+#: builtins.c:3652
msgid "invalid arg to `__builtin_return_address'"
msgstr ""
-#: builtins.c:3367
+#: builtins.c:3666
msgid "unsupported arg to `__builtin_frame_address'"
msgstr ""
-#: builtins.c:3369
+#: builtins.c:3668
msgid "unsupported arg to `__builtin_return_address'"
msgstr ""
-#: builtins.c:3537
+#: builtins.c:3839
msgid "second arg to `__builtin_expect' must be a constant"
msgstr ""
-#: builtins.c:4062
+#: builtins.c:4429
msgid "__builtin_longjmp second argument must be 1"
msgstr ""
#. just do library call, if unknown builtin
-#: builtins.c:4126 c-common.c:4439
+#: builtins.c:4493 c-common.c:4476
#, c-format
msgid "built-in function `%s' not currently supported"
msgstr ""
-#: builtins.c:4230
+#: builtins.c:4617
msgid "target format does not support infinity"
msgstr ""
-#: c-common.c:1165
+#: c-common.c:1182
#, c-format
msgid "`%s' is not defined outside of function scope"
msgstr ""
-#: c-common.c:1186
+#: c-common.c:1203
#, c-format
msgid ""
"string length `%d' is greater than the length `%d' ISO C%d compilers are "
"required to support"
msgstr ""
-#: c-common.c:1244
+#: c-common.c:1261
msgid "concatenation of string literals with __FUNCTION__ is deprecated"
msgstr ""
-#: c-common.c:1340
+#: c-common.c:1357
msgid "overflow in constant expression"
msgstr ""
-#: c-common.c:1361
+#: c-common.c:1378
msgid "integer overflow in expression"
msgstr ""
-#: c-common.c:1370
+#: c-common.c:1387
msgid "floating point overflow in expression"
msgstr ""
-#: c-common.c:1376
+#: c-common.c:1393
msgid "vector overflow in expression"
msgstr ""
#. This detects cases like converting -129 or 256 to unsigned char.
-#: c-common.c:1399
+#: c-common.c:1416
msgid "large integer implicitly truncated to unsigned type"
msgstr ""
-#: c-common.c:1401
+#: c-common.c:1418
msgid "negative integer implicitly converted to unsigned type"
msgstr ""
-#: c-common.c:1449
+#: c-common.c:1466
msgid "overflow in implicit constant conversion"
msgstr ""
-#: c-common.c:1597
+#: c-common.c:1614
#, c-format
msgid "operation on `%s' may be undefined"
msgstr ""
-#: c-common.c:1888
+#: c-common.c:1905
msgid "expression statement has incomplete type"
msgstr ""
-#: c-common.c:1921
+#: c-common.c:1938
msgid "case label does not reduce to an integer constant"
msgstr ""
-#: c-common.c:2225
+#: c-common.c:2242
msgid "invalid truth-value expression"
msgstr ""
-#: c-common.c:2276
+#: c-common.c:2293
#, c-format
msgid "invalid operands to binary %s"
msgstr ""
-#: c-common.c:2510
+#: c-common.c:2527
msgid "comparison is always false due to limited range of data type"
msgstr ""
-#: c-common.c:2512
+#: c-common.c:2529
msgid "comparison is always true due to limited range of data type"
msgstr ""
-#: c-common.c:2582
+#: c-common.c:2599
msgid "comparison of unsigned expression >= 0 is always true"
msgstr ""
-#: c-common.c:2591
+#: c-common.c:2608
msgid "comparison of unsigned expression < 0 is always false"
msgstr ""
-#: c-common.c:2638
+#: c-common.c:2655
msgid "pointer of type `void *' used in arithmetic"
msgstr ""
-#: c-common.c:2644
+#: c-common.c:2661
msgid "pointer to a function used in arithmetic"
msgstr ""
-#: c-common.c:2650
+#: c-common.c:2667
msgid "pointer to member function used in arithmetic"
msgstr ""
-#: c-common.c:2656
+#: c-common.c:2673
msgid "pointer to a member used in arithmetic"
msgstr ""
-#: c-common.c:2743 f/com.c:14690
+#: c-common.c:2760 f/com.c:14676
msgid "struct type value used where scalar is required"
msgstr ""
-#: c-common.c:2747 f/com.c:14694
+#: c-common.c:2764 f/com.c:14680
msgid "union type value used where scalar is required"
msgstr ""
-#: c-common.c:2751 f/com.c:14698
+#: c-common.c:2768 f/com.c:14684
msgid "array type value used where scalar is required"
msgstr ""
-#: c-common.c:2871 f/com.c:14831
+#: c-common.c:2889 f/com.c:14817
msgid "suggest parentheses around assignment used as truth value"
msgstr ""
-#: c-common.c:2915 c-common.c:2947
+#: c-common.c:2933 c-common.c:2965
msgid "invalid use of `restrict'"
msgstr ""
-#: c-common.c:3061
+#: c-common.c:3079
msgid "invalid application of `sizeof' to a function type"
msgstr ""
-#: c-common.c:3071
+#: c-common.c:3089
#, c-format
msgid "invalid application of `%s' to a void type"
msgstr ""
-#: c-common.c:3077
+#: c-common.c:3095
#, c-format
msgid "invalid application of `%s' to an incomplete type"
msgstr ""
-#: c-common.c:3118
+#: c-common.c:3136
msgid "`__alignof' applied to a bit-field"
msgstr ""
-#: c-common.c:3598
+#: c-common.c:3635
#, c-format
msgid "cannot disable built-in function `%s'"
msgstr ""
-#: c-common.c:3767 c-typeck.c:1735
+#: c-common.c:3804 c-typeck.c:1749
#, c-format
msgid "too few arguments to function `%s'"
msgstr ""
-#: c-common.c:3773 c-typeck.c:1588
+#: c-common.c:3810 c-typeck.c:1602
#, c-format
msgid "too many arguments to function `%s'"
msgstr ""
-#: c-common.c:3792
+#: c-common.c:3829
#, c-format
msgid "non-floating-point argument to function `%s'"
msgstr ""
-#: c-common.c:4061
+#: c-common.c:4098
msgid "pointers are not permitted as case values"
msgstr ""
-#: c-common.c:4067
+#: c-common.c:4104
msgid "ISO C++ forbids range expressions in switch statements"
msgstr ""
-#: c-common.c:4069
+#: c-common.c:4106
msgid "ISO C forbids range expressions in switch statements"
msgstr ""
-#: c-common.c:4099
+#: c-common.c:4136
msgid "empty range specified"
msgstr ""
-#: c-common.c:4150
+#: c-common.c:4187
msgid "duplicate (or overlapping) case value"
msgstr ""
-#: c-common.c:4152
+#: c-common.c:4189
msgid "this is the first entry overlapping that value"
msgstr ""
-#: c-common.c:4156
+#: c-common.c:4193
msgid "duplicate case value"
msgstr ""
-#: c-common.c:4157
+#: c-common.c:4194
msgid "previously used here"
msgstr ""
-#: c-common.c:4161
+#: c-common.c:4198
msgid "multiple default labels in one switch"
msgstr ""
-#: c-common.c:4162
+#: c-common.c:4199
msgid "this is the first default label"
msgstr ""
-#: c-common.c:4190
+#: c-common.c:4227
msgid "ISO C++ forbids taking the address of a label"
msgstr ""
-#: c-common.c:4192
+#: c-common.c:4229
msgid "ISO C forbids taking the address of a label"
msgstr ""
-#: c-common.c:5215
+#. SW_PARAM
+#: c-common.c:4822
#, c-format
-msgid "declaration of `%s' shadows %s"
+msgid "declaration of \"%s\" shadows a parameter"
msgstr ""
-#: c-common.c:5632
+#. SW_LOCAL
+#: c-common.c:4823
+#, c-format
+msgid "declaration of \"%s\" shadows a previous local"
+msgstr ""
+
+#. SW_GLOBAL
+#: c-common.c:4824
+#, c-format
+msgid "declaration of \"%s\" shadows a global declaration"
+msgstr ""
+
+#: c-common.c:5247
#, c-format
msgid "unknown machine mode `%s'"
msgstr ""
-#: c-common.c:5635
+#: c-common.c:5250
#, c-format
msgid "no data type for mode `%s'"
msgstr ""
-#: c-common.c:5639
+#: c-common.c:5254
#, c-format
msgid "invalid pointer mode `%s'"
msgstr ""
-#: c-common.c:5648 c-common.c:6262
+#: c-common.c:5263 c-common.c:5877
#, c-format
msgid "unable to emulate '%s'"
msgstr ""
-#: c-common.c:5697
+#: c-common.c:5312
msgid "section attribute cannot be specified for local variables"
msgstr ""
-#: c-common.c:5708
+#: c-common.c:5323
#, c-format
msgid "section of `%s' conflicts with previous declaration"
msgstr ""
-#: c-common.c:5717
+#: c-common.c:5332
#, c-format
msgid "section attribute not allowed for `%s'"
msgstr ""
-#: c-common.c:5724
+#: c-common.c:5339
msgid "section attributes are not supported for this target"
msgstr ""
-#: c-common.c:5766
+#: c-common.c:5381
msgid "requested alignment is not a constant"
msgstr ""
-#: c-common.c:5771
+#: c-common.c:5386
msgid "requested alignment is not a power of 2"
msgstr ""
-#: c-common.c:5776
+#: c-common.c:5391
msgid "requested alignment is too large"
msgstr ""
-#: c-common.c:5803
+#: c-common.c:5418
#, c-format
msgid "alignment may not be specified for `%s'"
msgstr ""
-#: c-common.c:5848
+#: c-common.c:5463
#, c-format
msgid "`%s' defined both normally and as an alias"
msgstr ""
-#: c-common.c:5858
+#: c-common.c:5473
msgid "alias arg not a string"
msgstr ""
-#: c-common.c:5905
+#: c-common.c:5520
msgid "visibility arg not a string"
msgstr ""
-#: c-common.c:5914
+#: c-common.c:5529
msgid ""
"visibility arg must be one of \"default\", \"hidden\", \"protected\" or "
"\"internal\""
msgstr ""
-#: c-common.c:5948
+#: c-common.c:5563
msgid "tls_model arg not a string"
msgstr ""
-#: c-common.c:5957
+#: c-common.c:5572
msgid ""
"tls_model arg must be one of \"local-exec\", \"initial-exec\", \"local-"
"dynamic\" or \"global-dynamic\""
msgstr ""
-#: c-common.c:5982 c-common.c:6038
+#: c-common.c:5597 c-common.c:5653
#, c-format
msgid "`%s' attribute applies only to functions"
msgstr ""
-#: c-common.c:5989 c-common.c:6045
+#: c-common.c:5604 c-common.c:5660
#, c-format
msgid "can't set `%s' attribute after definition"
msgstr ""
-#: c-common.c:6129
+#: c-common.c:5744
#, c-format
msgid "`%s' attribute ignored for `%s'"
msgstr ""
-#: c-common.c:6194
+#: c-common.c:5809
#, c-format
msgid "invalid vector type for attribute `%s'"
msgstr ""
-#: c-common.c:6218 c-common.c:6250
+#: c-common.c:5833 c-common.c:5865
msgid "no vector mode with the size and type specified could be found"
msgstr ""
-#: c-common.c:6349
+#: c-common.c:5964
msgid "nonnull attribute without arguments on a non-prototype"
msgstr ""
-#: c-common.c:6364
+#: c-common.c:5979
#, c-format
msgid "nonnull argument has invalid operand number (arg %lu)"
msgstr ""
-#: c-common.c:6383
+#: c-common.c:5998
#, c-format
msgid ""
"nonnull argument with out-of-range operand number (arg %lu, operand %lu)"
msgstr ""
-#: c-common.c:6391
+#: c-common.c:6006
#, c-format
msgid "nonnull argument references non-pointer operand (arg %lu, operand %lu)"
msgstr ""
-#: c-common.c:6477
+#: c-common.c:6092
#, c-format
msgid "null argument where non-null required (arg %lu)"
msgstr ""
-#: c-convert.c:82 c-typeck.c:990 c-typeck.c:4036 cp/typeck.c:1620
-#: cp/typeck.c:5890
+#: c-convert.c:82 c-typeck.c:996 c-typeck.c:4053 cp/typeck.c:1627
+#: cp/typeck.c:6073
msgid "void value not ignored as it ought to be"
msgstr ""
-#: c-convert.c:114 java/typeck.c:152
+#: c-convert.c:114 java/typeck.c:148
msgid "conversion to non-scalar type requested"
msgstr ""
-#: c-decl.c:338
+#: c-decl.c:339
#, c-format
msgid "array `%s' assumed to have one element"
msgstr ""
-#: c-decl.c:524
+#: c-decl.c:536
#, c-format
msgid "`struct %s' incomplete in scope ending here"
msgstr ""
-#: c-decl.c:527
+#: c-decl.c:539
#, c-format
msgid "`union %s' incomplete in scope ending here"
msgstr ""
-#: c-decl.c:530
+#: c-decl.c:542
#, c-format
msgid "`enum %s' incomplete in scope ending here"
msgstr ""
-#: c-decl.c:644 c-decl.c:769 java/decl.c:1401
+#: c-decl.c:656 c-decl.c:781 java/decl.c:1367
#, c-format
msgid "label `%s' used but not defined"
msgstr ""
-#: c-decl.c:650 c-decl.c:776 java/decl.c:1407
+#: c-decl.c:662 c-decl.c:788 java/decl.c:1373
#, c-format
msgid "label `%s' defined but not used"
msgstr ""
-#: c-decl.c:891 cp/decl.c:3054
+#: c-decl.c:903
#, c-format
msgid "function `%s' redeclared as inline"
msgstr ""
-#: c-decl.c:893 cp/decl.c:3056
+#: c-decl.c:905
#, c-format
msgid "previous declaration of function `%s' with attribute noinline"
msgstr ""
-#: c-decl.c:900 cp/decl.c:3063
+#: c-decl.c:912
#, c-format
msgid "function `%s' redeclared with attribute noinline"
msgstr ""
-#: c-decl.c:902 cp/decl.c:3065
+#: c-decl.c:914
#, c-format
msgid "previous declaration of function `%s' was inline"
msgstr ""
-#: c-decl.c:931 c-decl.c:977
+#: c-decl.c:943 c-decl.c:989
#, c-format
msgid "shadowing built-in function `%s'"
msgstr ""
-#: c-decl.c:933
+#: c-decl.c:945
#, c-format
msgid "shadowing library function `%s'"
msgstr ""
-#: c-decl.c:939
+#: c-decl.c:951
#, c-format
msgid "library function `%s' declared as non-function"
msgstr ""
-#: c-decl.c:943 c-decl.c:946
+#: c-decl.c:955 c-decl.c:958
#, c-format
msgid "built-in function `%s' declared as non-function"
msgstr ""
-#: c-decl.c:950 objc/objc-act.c:2386 objc/objc-act.c:6156
+#: c-decl.c:962 objc/objc-act.c:2389 objc/objc-act.c:6182
#, c-format
msgid "`%s' redeclared as different kind of symbol"
msgstr ""
-#: c-decl.c:951 c-decl.c:1142 c-decl.c:1149 c-decl.c:1156 c-decl.c:1301
-#: objc/objc-act.c:2388 objc/objc-act.c:6158 objc/objc-act.c:6213
+#: c-decl.c:963 c-decl.c:1154 c-decl.c:1168 c-decl.c:1175 c-decl.c:1320
+#: objc/objc-act.c:2391 objc/objc-act.c:6184 objc/objc-act.c:6239
#, c-format
msgid "previous declaration of `%s'"
msgstr ""
#. If types don't match for a built-in, throw away the built-in.
-#: c-decl.c:1046
+#: c-decl.c:1058
#, c-format
msgid "conflicting types for built-in function `%s'"
msgstr ""
-#: c-decl.c:1089 c-decl.c:1108
+#: c-decl.c:1101 c-decl.c:1120
#, c-format
msgid "conflicting types for `%s'"
msgstr ""
-#: c-decl.c:1131
+#: c-decl.c:1143
msgid ""
"a parameter list with an ellipsis can't match an empty parameter name list "
"declaration"
msgstr ""
-#: c-decl.c:1137
+#: c-decl.c:1149
msgid ""
"an argument type that has a default promotion can't match an empty parameter "
"name list declaration"
msgstr ""
-#: c-decl.c:1148
+#: c-decl.c:1167
#, c-format
msgid "thread-local declaration of `%s' follows non thread-local declaration"
msgstr ""
-#: c-decl.c:1155
+#: c-decl.c:1174
#, c-format
msgid "non thread-local declaration of `%s' follows thread-local declaration"
msgstr ""
-#: c-decl.c:1166 c-decl.c:1189
+#: c-decl.c:1185 c-decl.c:1208
#, c-format
msgid "redefinition of `%s'"
msgstr ""
-#: c-decl.c:1169
+#: c-decl.c:1188
#, c-format
msgid "redeclaration of `%s'"
msgstr ""
-#: c-decl.c:1172
+#: c-decl.c:1191
#, c-format
msgid "conflicting declarations of `%s'"
msgstr ""
-#: c-decl.c:1216
+#: c-decl.c:1235
#, c-format
msgid "prototype for `%s' follows"
msgstr ""
-#: c-decl.c:1217 c-decl.c:1225 c-decl.c:1236
+#: c-decl.c:1236 c-decl.c:1244 c-decl.c:1255
msgid "non-prototype definition here"
msgstr ""
-#: c-decl.c:1224
+#: c-decl.c:1243
#, c-format
msgid "prototype for `%s' follows and number of arguments doesn't match"
msgstr ""
-#: c-decl.c:1234
+#: c-decl.c:1253
#, c-format
msgid "prototype for `%s' follows and argument %d doesn't match"
msgstr ""
-#: c-decl.c:1252
+#: c-decl.c:1271
#, c-format
msgid "`%s' declared inline after being called"
msgstr ""
-#: c-decl.c:1258
+#: c-decl.c:1277
#, c-format
msgid "`%s' declared inline after its definition"
msgstr ""
-#: c-decl.c:1265
+#: c-decl.c:1284
#, c-format
msgid "static declaration for `%s' follows non-static"
msgstr ""
-#: c-decl.c:1273
+#: c-decl.c:1292
#, c-format
msgid "non-static declaration for `%s' follows static"
msgstr ""
-#: c-decl.c:1280
+#: c-decl.c:1299
#, c-format
msgid "const declaration for `%s' follows non-const"
msgstr ""
-#: c-decl.c:1287
+#: c-decl.c:1306
#, c-format
msgid "type qualifiers for `%s' conflict with previous decl"
msgstr ""
-#: c-decl.c:1300
+#: c-decl.c:1319
#, c-format
msgid "redundant redeclaration of `%s' in same scope"
msgstr ""
-#: c-decl.c:1601 java/decl.c:1100
-#, c-format
-msgid "declaration of `%s' shadows a parameter"
-msgstr ""
-
-#: c-decl.c:1604 java/decl.c:1103
-#, c-format
-msgid "declaration of `%s' shadows a symbol from the parameter list"
-msgstr ""
-
-#: c-decl.c:1625 cp/decl.c:4176
-msgid "a parameter"
-msgstr ""
-
-#: c-decl.c:1627 cp/decl.c:4193
-msgid "a previous local"
-msgstr ""
-
-#. XXX shadow warnings in outer-more namespaces
-#: c-decl.c:1631 cp/decl.c:4197
-msgid "a global declaration"
-msgstr ""
-
-#: c-decl.c:1675
+#: c-decl.c:1689
#, c-format
msgid "nested extern declaration of `%s'"
msgstr ""
-#: c-decl.c:1694 java/decl.c:1053
+#: c-decl.c:1708 java/decl.c:1025
#, c-format
msgid "`%s' used prior to declaration"
msgstr ""
-#: c-decl.c:1708 c-decl.c:1883
+#: c-decl.c:1722 c-decl.c:1897
#, c-format
msgid "`%s' was declared implicitly `extern' and later `static'"
msgstr ""
-#: c-decl.c:1811 cp/decl.c:4031
+#: c-decl.c:1825 cp/decl.c:3979
msgid "type mismatch with previous external decl"
msgstr ""
-#: c-decl.c:1812
+#: c-decl.c:1826
#, c-format
msgid "previous external decl of `%s'"
msgstr ""
-#: c-decl.c:1825
+#: c-decl.c:1839
msgid "type mismatch with previous implicit declaration"
msgstr ""
-#: c-decl.c:1827
+#: c-decl.c:1841
#, c-format
msgid "previous implicit declaration of `%s'"
msgstr ""
-#: c-decl.c:1862
+#: c-decl.c:1876
#, c-format
msgid "`%s' was previously implicitly declared to return `int'"
msgstr ""
-#: c-decl.c:1887
+#: c-decl.c:1901
#, c-format
msgid "`%s' was declared `extern' and later `static'"
msgstr ""
-#: c-decl.c:1911
+#: c-decl.c:1925
#, c-format
msgid "extern declaration of `%s' doesn't match global one"
msgstr ""
-#: c-decl.c:1953
+#: c-decl.c:1967
#, c-format
msgid "`%s' locally external but globally static"
msgstr ""
-#: c-decl.c:2075
+#: c-decl.c:2100
#, c-format
msgid "function `%s' was previously declared within a block"
msgstr ""
-#: c-decl.c:2095 c-decl.c:2097
+#: c-decl.c:2120 c-decl.c:2122
#, c-format
msgid "implicit declaration of function `%s'"
msgstr ""
-#: c-decl.c:2176
+#: c-decl.c:2201
#, c-format
msgid "label %s referenced outside of any function"
msgstr ""
-#: c-decl.c:2233
+#: c-decl.c:2258
#, c-format
msgid "duplicate label declaration `%s'"
msgstr ""
-#: c-decl.c:2236
+#: c-decl.c:2261
msgid "this is a previous declaration"
msgstr ""
-#: c-decl.c:2659
+#: c-decl.c:2693
msgid "unnamed struct/union that defines no instances"
msgstr ""
-#: c-decl.c:2678
+#: c-decl.c:2712
msgid "useless keyword or type name in empty declaration"
msgstr ""
-#: c-decl.c:2685
+#: c-decl.c:2719
msgid "two types specified in one empty declaration"
msgstr ""
-#: c-decl.c:2690 c-parse.y:755 c-parse.y:757 objc-parse.y:802 objc-parse.y:804
+#: c-decl.c:2724 c-parse.y:756 c-parse.y:758 objc-parse.y:802 objc-parse.y:804
#: objc-parse.y:3045
msgid "empty declaration"
msgstr ""
-#: c-decl.c:2720
+#: c-decl.c:2754
msgid ""
"ISO C90 does not support `static' or type qualifiers in parameter array "
"declarators"
msgstr ""
-#: c-decl.c:2722
+#: c-decl.c:2756
msgid "ISO C90 does not support `[*]' array declarators"
msgstr ""
-#: c-decl.c:2725
+#: c-decl.c:2759
msgid "GCC does not yet properly implement `[*]' array declarators"
msgstr ""
-#: c-decl.c:2744
+#: c-decl.c:2778
msgid "static or type qualifiers in abstract declarator"
msgstr ""
-#: c-decl.c:2818
+#: c-decl.c:2852
#, c-format
msgid "`%s' is usually a function"
msgstr ""
-#: c-decl.c:2827
+#: c-decl.c:2861
#, c-format
msgid "typedef `%s' is initialized (use __typeof__ instead)"
msgstr ""
-#: c-decl.c:2833
+#: c-decl.c:2867
#, c-format
msgid "function `%s' is initialized like a variable"
msgstr ""
#. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE.
-#: c-decl.c:2840
+#: c-decl.c:2874
#, c-format
msgid "parameter `%s' is initialized"
msgstr ""
-#: c-decl.c:2860 c-typeck.c:4845
+#: c-decl.c:2894 c-typeck.c:4867
msgid "variable-sized object may not be initialized"
msgstr ""
-#: c-decl.c:2866
+#: c-decl.c:2900
#, c-format
msgid "variable `%s' has initializer but incomplete type"
msgstr ""
-#: c-decl.c:2872
+#: c-decl.c:2906
#, c-format
msgid "elements of array `%s' have incomplete type"
msgstr ""
-#: c-decl.c:2885
+#: c-decl.c:2919
#, c-format
msgid "declaration of `%s' has `extern' and is initialized"
msgstr ""
-#: c-decl.c:2934 c-decl.c:5696 cp/decl.c:7312 cp/decl.c:13831
+#: c-decl.c:2968 c-decl.c:5734
#, c-format
msgid "inline function `%s' given attribute noinline"
msgstr ""
-#: c-decl.c:3008
+#: c-decl.c:3042
#, c-format
msgid "initializer fails to determine size of `%s'"
msgstr ""
-#: c-decl.c:3013
+#: c-decl.c:3047
#, c-format
msgid "array size missing in `%s'"
msgstr ""
-#: c-decl.c:3029
+#: c-decl.c:3063
#, c-format
msgid "zero or negative size array `%s'"
msgstr ""
-#: c-decl.c:3057
+#: c-decl.c:3091
#, c-format
msgid "storage size of `%s' isn't known"
msgstr ""
-#: c-decl.c:3067
+#: c-decl.c:3101
#, c-format
msgid "storage size of `%s' isn't constant"
msgstr ""
-#: c-decl.c:3127
+#: c-decl.c:3161
#, c-format
msgid "ignoring asm-specifier for non-static local variable `%s'"
msgstr ""
-#: c-decl.c:3192
+#: c-decl.c:3226
#, c-format
msgid "ISO C forbids parameter `%s' shadowing typedef"
msgstr ""
-#: c-decl.c:3537 cp/decl.c:10426
+#: c-decl.c:3573 cp/decl.c:10168
msgid "`long long long' is too long for GCC"
msgstr ""
-#: c-decl.c:3542
+#: c-decl.c:3578
msgid "ISO C90 does not support `long long'"
msgstr ""
-#: c-decl.c:3551 c-decl.c:3554 cp/decl.c:10431
+#: c-decl.c:3587 c-decl.c:3590 cp/decl.c:10173
#, c-format
msgid "duplicate `%s'"
msgstr ""
-#: c-decl.c:3564 cp/decl.c:10437
+#: c-decl.c:3600 cp/decl.c:10179
msgid "`__thread' before `extern'"
msgstr ""
-#: c-decl.c:3566 cp/decl.c:10439
+#: c-decl.c:3602 cp/decl.c:10181
msgid "`__thread' before `static'"
msgstr ""
-#: c-decl.c:3574 cp/decl.c:10466
+#: c-decl.c:3610 cp/decl.c:10208
#, c-format
msgid "two or more data types in declaration of `%s'"
msgstr ""
-#: c-decl.c:3594 cp/decl.c:10471
+#: c-decl.c:3630 cp/decl.c:10213
#, c-format
msgid "`%s' fails to be a typedef or built in type"
msgstr ""
-#: c-decl.c:3633
+#: c-decl.c:3669
#, c-format
msgid "type defaults to `int' in declaration of `%s'"
msgstr ""
-#: c-decl.c:3662
+#: c-decl.c:3698
#, c-format
msgid "both long and short specified for `%s'"
msgstr ""
-#: c-decl.c:3666 cp/decl.c:10586
+#: c-decl.c:3702 cp/decl.c:10313
#, c-format
msgid "long or short specified with char for `%s'"
msgstr ""
-#: c-decl.c:3673 cp/decl.c:10590
+#: c-decl.c:3709 cp/decl.c:10317
#, c-format
msgid "long or short specified with floating type for `%s'"
msgstr ""
-#: c-decl.c:3676
+#: c-decl.c:3712
msgid "the only valid combination is `long double'"
msgstr ""
-#: c-decl.c:3682
+#: c-decl.c:3718
#, c-format
msgid "both signed and unsigned specified for `%s'"
msgstr ""
-#: c-decl.c:3684 cp/decl.c:10579
+#: c-decl.c:3720 cp/decl.c:10306
#, c-format
msgid "long, short, signed or unsigned invalid for `%s'"
msgstr ""
-#: c-decl.c:3690 cp/decl.c:10599
+#: c-decl.c:3726 cp/decl.c:10326
#, c-format
msgid "long, short, signed or unsigned used invalidly for `%s'"
msgstr ""
-#: c-decl.c:3708 cp/decl.c:10620
+#: c-decl.c:3744 cp/decl.c:10347
#, c-format
msgid "complex invalid for `%s'"
msgstr ""
-#: c-decl.c:3750
+#: c-decl.c:3786
msgid "ISO C90 does not support complex types"
msgstr ""
-#: c-decl.c:3762
+#: c-decl.c:3798
msgid "ISO C does not support plain `complex' meaning `double complex'"
msgstr ""
-#: c-decl.c:3768 c-decl.c:3780
+#: c-decl.c:3804 c-decl.c:3816
msgid "ISO C does not support complex integer types"
msgstr ""
-#: c-decl.c:3795 c-decl.c:4248 cp/decl.c:11223
+#: c-decl.c:3831 c-decl.c:4284 cp/decl.c:10950
msgid "duplicate `const'"
msgstr ""
-#: c-decl.c:3797 c-decl.c:4252 cp/decl.c:11227
+#: c-decl.c:3833 c-decl.c:4288 cp/decl.c:10954
msgid "duplicate `restrict'"
msgstr ""
-#: c-decl.c:3799 c-decl.c:4250 cp/decl.c:11225
+#: c-decl.c:3835 c-decl.c:4286 cp/decl.c:10952
msgid "duplicate `volatile'"
msgstr ""
-#: c-decl.c:3827 cp/decl.c:10783
+#: c-decl.c:3863 cp/decl.c:10510
#, c-format
msgid "multiple storage classes in declaration of `%s'"
msgstr ""
-#: c-decl.c:3837
+#: c-decl.c:3873
msgid "function definition declared `auto'"
msgstr ""
-#: c-decl.c:3839
+#: c-decl.c:3875
msgid "function definition declared `register'"
msgstr ""
-#: c-decl.c:3841
+#: c-decl.c:3877
msgid "function definition declared `typedef'"
msgstr ""
-#: c-decl.c:3843
+#: c-decl.c:3879
msgid "function definition declared `__thread'"
msgstr ""
-#: c-decl.c:3856
+#: c-decl.c:3892
#, c-format
msgid "storage class specified for structure field `%s'"
msgstr ""
-#: c-decl.c:3860 cp/decl.c:10830
+#: c-decl.c:3896 cp/decl.c:10557
#, c-format
msgid "storage class specified for parameter `%s'"
msgstr ""
-#: c-decl.c:3863 cp/decl.c:10832
+#: c-decl.c:3899 cp/decl.c:10559
msgid "storage class specified for typename"
msgstr ""
-#: c-decl.c:3875 cp/decl.c:10847
+#: c-decl.c:3911 cp/decl.c:10574
#, c-format
msgid "`%s' initialized and declared `extern'"
msgstr ""
-#: c-decl.c:3877 cp/decl.c:10850
+#: c-decl.c:3913 cp/decl.c:10577
#, c-format
msgid "`%s' has both `extern' and initializer"
msgstr ""
-#: c-decl.c:3882 cp/decl.c:10858
+#: c-decl.c:3918 cp/decl.c:10585
#, c-format
msgid "top-level declaration of `%s' specifies `auto'"
msgstr ""
-#: c-decl.c:3887 cp/decl.c:10854
+#: c-decl.c:3923 cp/decl.c:10581
#, c-format
msgid "nested function `%s' declared `extern'"
msgstr ""
-#: c-decl.c:3893 cp/decl.c:10864
+#: c-decl.c:3929 cp/decl.c:10591
#, c-format
msgid "function-scope `%s' implicitly auto and declared `__thread'"
msgstr ""
@@ -1071,457 +1062,457 @@ 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:3932 c-decl.c:4120
+#: c-decl.c:3968 c-decl.c:4156
msgid "static or type qualifiers in non-parameter array declarator"
msgstr ""
-#: c-decl.c:3976
+#: c-decl.c:4012
#, c-format
msgid "declaration of `%s' as array of voids"
msgstr ""
-#: c-decl.c:3982
+#: c-decl.c:4018
#, c-format
msgid "declaration of `%s' as array of functions"
msgstr ""
-#: c-decl.c:3987 c-decl.c:5252
+#: c-decl.c:4023 c-decl.c:5290
msgid "invalid use of structure with flexible array member"
msgstr ""
-#: c-decl.c:4006
+#: c-decl.c:4042
#, c-format
msgid "size of array `%s' has non-integer type"
msgstr ""
-#: c-decl.c:4011
+#: c-decl.c:4047
#, c-format
msgid "ISO C forbids zero-size array `%s'"
msgstr ""
-#: c-decl.c:4018
+#: c-decl.c:4054
#, c-format
msgid "size of array `%s' is negative"
msgstr ""
-#: c-decl.c:4031
+#: c-decl.c:4067
#, c-format
msgid "ISO C90 forbids array `%s' whose size can't be evaluated"
msgstr ""
-#: c-decl.c:4034
+#: c-decl.c:4070
#, c-format
msgid "ISO C90 forbids variable-size array `%s'"
msgstr ""
-#: c-decl.c:4064 c-decl.c:4274 cp/decl.c:11423
+#: c-decl.c:4100 c-decl.c:4310 cp/decl.c:11121
#, c-format
msgid "size of array `%s' is too large"
msgstr ""
-#: c-decl.c:4077
+#: c-decl.c:4113
msgid "ISO C90 does not support flexible array members"
msgstr ""
-#: c-decl.c:4087
+#: c-decl.c:4123
msgid "array type has incomplete element type"
msgstr ""
-#: c-decl.c:4094 c-decl.c:4324
+#: c-decl.c:4130 c-decl.c:4360
msgid "ISO C forbids const or volatile function types"
msgstr ""
-#: c-decl.c:4140 cp/decl.c:10991
+#: c-decl.c:4176 cp/decl.c:10718
#, c-format
msgid "`%s' declared as function returning a function"
msgstr ""
-#: c-decl.c:4145 cp/decl.c:10996
+#: c-decl.c:4181 cp/decl.c:10723
#, c-format
msgid "`%s' declared as function returning an array"
msgstr ""
-#: c-decl.c:4173
+#: c-decl.c:4209
msgid "ISO C forbids qualified void function return type"
msgstr ""
-#: c-decl.c:4177
+#: c-decl.c:4213
msgid "type qualifiers ignored on function return type"
msgstr ""
-#: c-decl.c:4206 c-decl.c:4289 c-decl.c:4413 c-decl.c:4505
+#: c-decl.c:4242 c-decl.c:4325 c-decl.c:4449 c-decl.c:4541
msgid "ISO C forbids qualified function types"
msgstr ""
-#: c-decl.c:4246 cp/decl.c:11219
+#: c-decl.c:4282 cp/decl.c:10946
msgid "invalid type modifier within pointer declarator"
msgstr ""
-#: c-decl.c:4344 cp/decl.c:11703
+#: c-decl.c:4380 cp/decl.c:11402
#, c-format
msgid "variable or field `%s' declared void"
msgstr ""
-#: c-decl.c:4377
+#: c-decl.c:4413
msgid "attributes in parameter array declarator ignored"
msgstr ""
-#: c-decl.c:4402
+#: c-decl.c:4438
msgid "invalid type modifier within array declarator"
msgstr ""
-#: c-decl.c:4447
+#: c-decl.c:4483
#, c-format
msgid "field `%s' declared as a function"
msgstr ""
-#: c-decl.c:4453
+#: c-decl.c:4489
#, c-format
msgid "field `%s' has incomplete type"
msgstr ""
-#: c-decl.c:4485 c-decl.c:4487 c-decl.c:4489 c-decl.c:4496
+#: c-decl.c:4521 c-decl.c:4523 c-decl.c:4525 c-decl.c:4532
#, c-format
msgid "invalid storage class for function `%s'"
msgstr ""
-#: c-decl.c:4511
+#: c-decl.c:4547
msgid "`noreturn' function returns non-void value"
msgstr ""
-#: c-decl.c:4526
+#: c-decl.c:4562
msgid "cannot inline function `main'"
msgstr ""
-#: c-decl.c:4579
+#: c-decl.c:4617
#, c-format
msgid "variable `%s' declared `inline'"
msgstr ""
#. A mere warning is sure to result in improper semantics
#. at runtime. Don't bother to allow this to compile.
-#: c-decl.c:4607 cp/decl.c:9464
+#: c-decl.c:4645 cp/decl.c:9261
msgid "thread-local storage not supported for this target"
msgstr ""
-#: c-decl.c:4662 c-decl.c:5748
+#: c-decl.c:4700 c-decl.c:5786
msgid "function declaration isn't a prototype"
msgstr ""
-#: c-decl.c:4668
+#: c-decl.c:4706
msgid "parameter names (without types) in function declaration"
msgstr ""
-#: c-decl.c:4700 c-decl.c:6118
+#: c-decl.c:4738 c-decl.c:6156
#, c-format
msgid "parameter `%s' has incomplete type"
msgstr ""
-#: c-decl.c:4703
+#: c-decl.c:4741
msgid "parameter has incomplete type"
msgstr ""
-#: c-decl.c:4724
+#: c-decl.c:4762
#, c-format
msgid "parameter `%s' points to incomplete type"
msgstr ""
-#: c-decl.c:4727
+#: c-decl.c:4765
msgid "parameter points to incomplete type"
msgstr ""
-#: c-decl.c:4792
+#: c-decl.c:4830
#, c-format
msgid "parameter `%s' has just a forward declaration"
msgstr ""
-#: c-decl.c:4833
+#: c-decl.c:4871
msgid "`void' in parameter list must be the entire list"
msgstr ""
-#: c-decl.c:4864
+#: c-decl.c:4902
#, c-format
msgid "`struct %s' declared inside parameter list"
msgstr ""
-#: c-decl.c:4867
+#: c-decl.c:4905
#, c-format
msgid "`union %s' declared inside parameter list"
msgstr ""
-#: c-decl.c:4870
+#: c-decl.c:4908
#, c-format
msgid "`enum %s' declared inside parameter list"
msgstr ""
-#: c-decl.c:4877
+#: c-decl.c:4915
msgid "anonymous struct declared inside parameter list"
msgstr ""
-#: c-decl.c:4879
+#: c-decl.c:4917
msgid "anonymous union declared inside parameter list"
msgstr ""
-#: c-decl.c:4881
+#: c-decl.c:4919
msgid "anonymous enum declared inside parameter list"
msgstr ""
-#: c-decl.c:4885
+#: c-decl.c:4923
msgid ""
"its scope is only this definition or declaration, which is probably not what "
"you want"
msgstr ""
-#: c-decl.c:4962
+#: c-decl.c:5000
#, c-format
msgid "redefinition of `union %s'"
msgstr ""
-#: c-decl.c:4964
+#: c-decl.c:5002
#, c-format
msgid "redefinition of `struct %s'"
msgstr ""
-#: c-decl.c:5035 cp/decl.c:7078
+#: c-decl.c:5073 cp/decl.c:6892
msgid "declaration does not declare anything"
msgstr ""
-#: c-decl.c:5077 c-decl.c:5080
+#: c-decl.c:5115 c-decl.c:5118
#, c-format
msgid "%s defined inside parms"
msgstr ""
-#: c-decl.c:5078 c-decl.c:5081 c-decl.c:5092
+#: c-decl.c:5116 c-decl.c:5119 c-decl.c:5130
msgid "union"
msgstr ""
-#: c-decl.c:5078 c-decl.c:5081
+#: c-decl.c:5116 c-decl.c:5119
msgid "structure"
msgstr ""
-#: c-decl.c:5091
+#: c-decl.c:5129
#, c-format
msgid "%s has no %s"
msgstr ""
-#: c-decl.c:5092
+#: c-decl.c:5130
msgid "struct"
msgstr ""
-#: c-decl.c:5093
+#: c-decl.c:5131
msgid "named members"
msgstr ""
-#: c-decl.c:5093
+#: c-decl.c:5131
msgid "members"
msgstr ""
-#: c-decl.c:5132
+#: c-decl.c:5170
#, c-format
msgid "nested redefinition of `%s'"
msgstr ""
-#: c-decl.c:5145
+#: c-decl.c:5183
#, c-format
msgid "bit-field `%s' width not an integer constant"
msgstr ""
-#: c-decl.c:5156
+#: c-decl.c:5194
#, c-format
msgid "bit-field `%s' has invalid type"
msgstr ""
-#: c-decl.c:5168
+#: c-decl.c:5206
#, c-format
msgid "bit-field `%s' type invalid in ISO C"
msgstr ""
-#: c-decl.c:5179
+#: c-decl.c:5217
#, c-format
msgid "negative width in bit-field `%s'"
msgstr ""
-#: c-decl.c:5181
+#: c-decl.c:5219
#, c-format
msgid "width of `%s' exceeds its type"
msgstr ""
-#: c-decl.c:5183
+#: c-decl.c:5221
#, c-format
msgid "zero width for bit-field `%s'"
msgstr ""
-#: c-decl.c:5197
+#: c-decl.c:5235
#, c-format
msgid "`%s' is narrower than values of its type"
msgstr ""
-#: c-decl.c:5243
+#: c-decl.c:5281
msgid "flexible array member in union"
msgstr ""
-#: c-decl.c:5245
+#: c-decl.c:5283
msgid "flexible array member not at end of struct"
msgstr ""
-#: c-decl.c:5247
+#: c-decl.c:5285
msgid "flexible array member in otherwise empty struct"
msgstr ""
-#: c-decl.c:5277
+#: c-decl.c:5315
#, c-format
msgid "duplicate member `%s'"
msgstr ""
-#: c-decl.c:5321
+#: c-decl.c:5359
msgid "union cannot be made transparent"
msgstr ""
#. This enum is a named one that has been declared already.
-#: c-decl.c:5426
+#: c-decl.c:5464
#, c-format
msgid "redeclaration of `enum %s'"
msgstr ""
-#: c-decl.c:5460
+#: c-decl.c:5498
msgid "enum defined inside parms"
msgstr ""
-#: c-decl.c:5493
+#: c-decl.c:5531
msgid "enumeration values exceed range of largest integer"
msgstr ""
-#: c-decl.c:5602
+#: c-decl.c:5640
#, c-format
msgid "enumerator value for `%s' not integer constant"
msgstr ""
-#: c-decl.c:5615
+#: c-decl.c:5653
msgid "overflow in enumeration values"
msgstr ""
-#: c-decl.c:5620
+#: c-decl.c:5658
msgid "ISO C restricts enumerator values to range of `int'"
msgstr ""
-#: c-decl.c:5702
+#: c-decl.c:5740
msgid "return type is an incomplete type"
msgstr ""
-#: c-decl.c:5710
+#: c-decl.c:5748
msgid "return type defaults to `int'"
msgstr ""
-#: c-decl.c:5757
+#: c-decl.c:5795
#, c-format
msgid "no previous prototype for `%s'"
msgstr ""
-#: c-decl.c:5764
+#: c-decl.c:5802
#, c-format
msgid "`%s' was used with no prototype before its definition"
msgstr ""
-#: c-decl.c:5770
+#: c-decl.c:5808
#, c-format
msgid "no previous declaration for `%s'"
msgstr ""
-#: c-decl.c:5777
+#: c-decl.c:5815
#, c-format
msgid "`%s' was used with no declaration before its definition"
msgstr ""
-#: c-decl.c:5801 c-decl.c:6354
+#: c-decl.c:5839 c-decl.c:6392
#, c-format
msgid "return type of `%s' is not `int'"
msgstr ""
-#: c-decl.c:5817
+#: c-decl.c:5855
#, c-format
msgid "first argument of `%s' should be `int'"
msgstr ""
-#: c-decl.c:5826
+#: c-decl.c:5864
#, c-format
msgid "second argument of `%s' should be `char **'"
msgstr ""
-#: c-decl.c:5835
+#: c-decl.c:5873
#, c-format
msgid "third argument of `%s' should probably be `char **'"
msgstr ""
-#: c-decl.c:5844
+#: c-decl.c:5882
#, c-format
msgid "`%s' takes only zero or two arguments"
msgstr ""
-#: c-decl.c:5847
+#: c-decl.c:5885
#, c-format
msgid "`%s' is normally a non-static function"
msgstr ""
-#: c-decl.c:5945
+#: c-decl.c:5983
msgid "parm types given both in parmlist and separately"
msgstr ""
-#: c-decl.c:5966
+#: c-decl.c:6004
msgid "parameter name omitted"
msgstr ""
-#: c-decl.c:5970 c-decl.c:6072
+#: c-decl.c:6008 c-decl.c:6110
#, c-format
msgid "parameter `%s' declared void"
msgstr ""
-#: c-decl.c:6046
+#: c-decl.c:6084
msgid "parameter name missing from parameter list"
msgstr ""
-#: c-decl.c:6065
+#: c-decl.c:6103
#, c-format
msgid "multiple parameters named `%s'"
msgstr ""
-#: c-decl.c:6087 c-decl.c:6089
+#: c-decl.c:6125 c-decl.c:6127
#, c-format
msgid "type of `%s' defaults to `int'"
msgstr ""
-#: c-decl.c:6125
+#: c-decl.c:6163
#, c-format
msgid "declaration for parameter `%s' but no such parameter"
msgstr ""
-#: c-decl.c:6173
+#: c-decl.c:6211
msgid "number of arguments doesn't match prototype"
msgstr ""
-#: c-decl.c:6203
+#: c-decl.c:6241
#, c-format
msgid "promoted argument `%s' doesn't match prototype"
msgstr ""
-#: c-decl.c:6213
+#: c-decl.c:6251
#, c-format
msgid "argument `%s' doesn't match prototype"
msgstr ""
-#: c-decl.c:6386 cp/decl.c:14517
+#: c-decl.c:6424 cp/decl.c:14164
msgid "no return statement in function returning non-void"
msgstr ""
-#: c-decl.c:6538
+#: c-decl.c:6598
msgid "this function may return with or without a value"
msgstr ""
-#: c-decl.c:6558
+#: c-decl.c:6618
#, c-format
msgid "size of return value of `%s' is %u bytes"
msgstr ""
-#: c-decl.c:6562
+#: c-decl.c:6622
#, c-format
msgid "size of return value of `%s' is larger than %d bytes"
msgstr ""
@@ -1529,36 +1520,36 @@ 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:6617
+#: c-decl.c:6686
msgid "`for' loop initial declaration used outside C99 mode"
msgstr ""
-#: c-decl.c:6641
+#: c-decl.c:6710
#, c-format
msgid "`struct %s' declared in `for' loop initial declaration"
msgstr ""
-#: c-decl.c:6644
+#: c-decl.c:6713
#, c-format
msgid "`union %s' declared in `for' loop initial declaration"
msgstr ""
-#: c-decl.c:6647
+#: c-decl.c:6716
#, c-format
msgid "`enum %s' declared in `for' loop initial declaration"
msgstr ""
-#: c-decl.c:6655
+#: c-decl.c:6724
#, c-format
msgid "declaration of non-variable `%s' in `for' loop initial declaration"
msgstr ""
-#: c-decl.c:6657
+#: c-decl.c:6726
#, c-format
msgid "declaration of static variable `%s' in `for' loop initial declaration"
msgstr ""
-#: c-decl.c:6659
+#: c-decl.c:6728
#, c-format
msgid "declaration of `extern' variable `%s' in `for' loop initial declaration"
msgstr ""
@@ -2063,171 +2054,229 @@ msgstr ""
msgid "%s format, %s arg (arg %d)"
msgstr ""
-#: c-lex.c:155
-msgid "YYDEBUG not defined"
+#: c-incpath.c:70
+#, c-format
+msgid "ignoring duplicate directory \"%s\"\n"
+msgstr ""
+
+#: c-incpath.c:73
+msgid " as it is a non-system directory that duplicates a system directory\n"
+msgstr ""
+
+#: c-incpath.c:77
+#, c-format
+msgid "ignoring nonexistent directory \"%s\"\n"
+msgstr ""
+
+#: c-incpath.c:191
+#, c-format
+msgid "%s: not a directory"
+msgstr ""
+
+#: c-incpath.c:270
+msgid "#include \"...\" search starts here:\n"
msgstr ""
-#: c-lex.c:292
+#: c-incpath.c:274
+msgid "#include <...> search starts here:\n"
+msgstr ""
+
+#: c-incpath.c:279
+msgid "End of search list.\n"
+msgstr ""
+
+#: c-lex.c:257
msgid "badly nested C headers from preprocessor"
msgstr ""
-#: c-lex.c:335
+#: c-lex.c:300
#, c-format
msgid "ignoring #pragma %s %s"
msgstr ""
-#: c-lex.c:385
+#: c-lex.c:350
#, c-format
msgid "universal-character-name '\\U%08x' not valid in identifier"
msgstr ""
-#: c-lex.c:631
+#: c-lex.c:596
#, c-format
msgid "universal-character-name '\\u%04x' not valid in identifier"
msgstr ""
-#: c-lex.c:694
+#: c-lex.c:659
#, c-format
msgid "stray '%c' in program"
msgstr ""
-#: c-lex.c:696
+#: c-lex.c:661
#, c-format
msgid "stray '\\%o' in program"
msgstr ""
-#: c-lex.c:852
+#: c-lex.c:818
msgid "this decimal constant is unsigned only in ISO C90"
msgstr ""
-#: c-lex.c:855
+#: c-lex.c:821
msgid "this decimal constant would be unsigned in ISO C90"
msgstr ""
-#: c-lex.c:871
+#: c-lex.c:837
#, c-format
msgid "integer constant is too large for \"%s\" type"
msgstr ""
-#: c-lex.c:939
+#: c-lex.c:905
#, c-format
msgid "floating constant exceeds range of \"%s\""
msgstr ""
-#: c-lex.c:975 cpplex.c:332 cpplex.c:670 cpplex.c:1944
+#: c-lex.c:941 cpplex.c:342 cpplex.c:680 cpplex.c:1963
msgid "ignoring invalid multibyte character"
msgstr ""
-#: c-opts.c:355
+#: c-opts.c:416
#, c-format
msgid "missing argument to \"-%s\""
msgstr ""
-#: c-opts.c:359
+#: c-opts.c:420
#, c-format
msgid "no class name specified with \"-%s\""
msgstr ""
-#: c-opts.c:366
+#: c-opts.c:424
+#, c-format
+msgid "assertion missing after \"-%s\""
+msgstr ""
+
+#: c-opts.c:429
+#, c-format
+msgid "macro name missing after \"-%s\""
+msgstr ""
+
+#: c-opts.c:436
+#, c-format
+msgid "missing path after \"-%s\""
+msgstr ""
+
+#: c-opts.c:445
#, c-format
msgid "missing filename after \"-%s\""
msgstr ""
-#: c-opts.c:371
+#: c-opts.c:450
#, c-format
msgid "missing target after \"-%s\""
msgstr ""
-#: c-opts.c:505
+#: c-opts.c:584
#, c-format
msgid "options array incorrectly sorted: %s is before %s"
msgstr ""
-#: c-opts.c:550
+#: c-opts.c:630
#, c-format
msgid "too many filenames given. Type %s --help for usage"
msgstr ""
-#: c-opts.c:936
+#: c-opts.c:743
+msgid "-I- specified twice"
+msgstr ""
+
+#: c-opts.c:1047
msgid "-Wno-strict-prototypes is not supported in C++"
msgstr ""
-#: c-opts.c:1016
+#: c-opts.c:1127
#, c-format
msgid "switch \"%s\" is no longer supported"
msgstr ""
-#: c-opts.c:1032
+#: c-opts.c:1143
#, c-format
msgid "switch \"%s\" is deprecated, please see documentation for details"
msgstr ""
-#: c-opts.c:1145
+#: c-opts.c:1263
msgid ""
"-fhandle-exceptions has been renamed to -fexceptions (and is now on by "
"default)"
msgstr ""
-#: c-opts.c:1265
+#: c-opts.c:1413
msgid "output filename specified twice"
msgstr ""
-#: c-opts.c:1379
+#: c-opts.c:1532
msgid "-Wformat-y2k ignored without -Wformat"
msgstr ""
-#: c-opts.c:1381
+#: c-opts.c:1534
msgid "-Wformat-extra-args ignored without -Wformat"
msgstr ""
-#: c-opts.c:1383
+#: c-opts.c:1536
msgid "-Wformat-zero-length ignored without -Wformat"
msgstr ""
-#: c-opts.c:1385
+#: c-opts.c:1538
msgid "-Wformat-nonliteral ignored without -Wformat"
msgstr ""
-#: c-opts.c:1387
+#: c-opts.c:1540
msgid "-Wformat-security ignored without -Wformat"
msgstr ""
-#: c-opts.c:1389
+#: c-opts.c:1542
msgid "-Wmissing-format-attribute ignored without -Wformat"
msgstr ""
-#: c-opts.c:1411
+#: c-opts.c:1556
#, c-format
msgid "opening output file %s"
msgstr ""
-#: c-opts.c:1466
+#: c-opts.c:1624
+msgid "YYDEBUG not defined"
+msgstr ""
+
+#: c-opts.c:1650
#, c-format
msgid "opening dependency file %s"
msgstr ""
-#: c-opts.c:1476
+#: c-opts.c:1660
#, c-format
msgid "closing dependency file %s"
msgstr ""
-#: c-opts.c:1479
+#: c-opts.c:1663
#, c-format
msgid "when writing output to %s"
msgstr ""
-#: c-opts.c:1559
+#: c-opts.c:1733
msgid "to generate dependencies you must specify either -M or -MM"
msgstr ""
-#: c-opts.c:1706
+#: c-opts.c:1788
+msgid "<built-in>"
+msgstr ""
+
+#: c-opts.c:1791
+msgid "<command line>"
+msgstr ""
+
+#: c-opts.c:1979
#, c-format
msgid "\"-%s\" is valid for %s but not for %s"
msgstr ""
#. To keep the lines from getting too long for some compilers, limit
#. to about 500 characters (6 lines) per chunk.
-#: c-opts.c:1716
+#: c-opts.c:1989
msgid ""
"Switches:\n"
" -include <file> Include the contents of <file> before other "
@@ -2240,7 +2289,7 @@ msgid ""
"path\n"
msgstr ""
-#: c-opts.c:1725
+#: c-opts.c:1998
msgid ""
" -idirafter <dir> Add <dir> to the end of the system include path\n"
" -I <dir> Add <dir> to the end of the main include path\n"
@@ -2254,7 +2303,7 @@ msgid ""
" -o <file> Put output into <file>\n"
msgstr ""
-#: c-opts.c:1734
+#: c-opts.c:2007
msgid ""
" -trigraphs Support ISO C trigraphs\n"
" -std=<std name> Specify the conformance standard; one of:\n"
@@ -2265,7 +2314,7 @@ msgid ""
" -W[no-]comment{s} Warn if one comment starts inside another\n"
msgstr ""
-#: c-opts.c:1743
+#: c-opts.c:2016
msgid ""
" -W[no-]traditional Warn about features not present in traditional "
"C\n"
@@ -2273,14 +2322,14 @@ msgid ""
" -W[no-]import Warn about the use of the #import directive\n"
msgstr ""
-#: c-opts.c:1748
+#: c-opts.c:2021
msgid ""
" -W[no-]error Treat all warnings as errors\n"
" -W[no-]system-headers Do not suppress warnings from system headers\n"
" -W[no-]all Enable most preprocessor warnings\n"
msgstr ""
-#: c-opts.c:1753
+#: c-opts.c:2026
msgid ""
" -M Generate make dependencies\n"
" -MM As -M, but ignore system header files\n"
@@ -2290,14 +2339,14 @@ msgid ""
" -MG Treat missing header file as generated files\n"
msgstr ""
-#: c-opts.c:1761
+#: c-opts.c:2034
msgid ""
" -MP\t\t\t Generate phony targets for all headers\n"
" -MQ <target> Add a MAKE-quoted target\n"
" -MT <target> Add an unquoted target\n"
msgstr ""
-#: c-opts.c:1766
+#: c-opts.c:2039
msgid ""
" -D<macro> Define a <macro> with string '1' as its value\n"
" -D<macro>=<val> Define a <macro> with <val> as its value\n"
@@ -2307,7 +2356,7 @@ msgid ""
" -v Display the version number\n"
msgstr ""
-#: c-opts.c:1774
+#: c-opts.c:2047
msgid ""
" -H Print the name of header files as they are used\n"
" -C Do not discard comments\n"
@@ -2318,76 +2367,79 @@ msgid ""
" -dI Include #include directives in the output\n"
msgstr ""
-#: c-opts.c:1782
+#: c-opts.c:2055
msgid ""
" -f[no-]preprocessed Treat the input file as already preprocessed\n"
" -ftabstop=<number> Distance between tab stops for column reporting\n"
+" -isysroot <dir> Set <dir> to be the system root directory\n"
" -P Do not generate #line directives\n"
" -remap Remap file names when including files\n"
" --help Display this information\n"
msgstr ""
#. Like YYERROR but do call yyerror.
-#: c-parse.y:57 objc-parse.y:58
+#: c-parse.y:58 c-p21614.c:5337 ps27181.c:3065 p25538.c:6094 objc-parse.y:58
+#: op13529.c:6665 /home/zack/src/gcc/vanilla/gcc/treelang/parse.c:2118
msgid "syntax error"
msgstr ""
-#: /usr/share/bison/bison.simple:179
+#: c-p21614.c:2078 gengtype-yacc.c:551 ps27181.c:1934 p25538.c:2905
+#: op13529.c:2708 /home/zack/src/gcc/vanilla/gcc/treelang/parse.c:661
msgid "syntax error: cannot back up"
msgstr ""
-#: c-parse.y:327 objc-parse.y:349
+#: c-parse.y:328 objc-parse.y:349
msgid "ISO C forbids an empty source file"
msgstr ""
-#: c-parse.y:368 c-typeck.c:6858 objc-parse.y:391
+#: c-parse.y:369 c-typeck.c:6889 objc-parse.y:391
msgid "argument of `asm' is not a constant string"
msgstr ""
-#: c-parse.y:376 objc-parse.y:399
+#: c-parse.y:377 objc-parse.y:399
msgid "ISO C forbids data definition with no type or storage class"
msgstr ""
-#: c-parse.y:378 objc-parse.y:401
+#: c-parse.y:379 objc-parse.y:401
msgid "data definition has no type or storage class"
msgstr ""
-#: c-parse.y:391 objc-parse.y:414
+#: c-parse.y:392 objc-parse.y:414
msgid "ISO C does not allow extra `;' outside of a function"
msgstr ""
-#: c-parse.y:451 cppexp.c:1314
+#: c-parse.y:452 cppexp.c:1314
msgid "traditional C rejects the unary plus operator"
msgstr ""
-#: c-parse.y:498 objc-parse.y:521
+#: c-parse.y:499 objc-parse.y:521
msgid "`sizeof' applied to a bit-field"
msgstr ""
-#: c-parse.y:585 objc-parse.y:608
+#: c-parse.y:586 objc-parse.y:608
msgid "ISO C forbids omitting the middle term of a ?: expression"
msgstr ""
-#: c-parse.y:634 objc-parse.y:657
+#: c-parse.y:635 objc-parse.y:657
msgid "ISO C89 forbids compound literals"
msgstr ""
-#: c-parse.y:648 objc-parse.y:671
+#: c-parse.y:649 objc-parse.y:671
msgid "ISO C forbids braced-groups within expressions"
msgstr ""
-#: c-parse.y:679 objc-parse.y:702
+#: c-parse.y:680 objc-parse.y:702
msgid "first argument to __builtin_choose_expr not a constant"
msgstr ""
-#: c-parse.y:723 objc-parse.y:770
+#: c-parse.y:724 objc-parse.y:770
msgid "traditional C rejects ISO C style function definitions"
msgstr ""
-#: c-parse.y:987 c-parse.y:993 c-parse.y:999 c-parse.y:1005 c-parse.y:1026
-#: c-parse.y:1032 c-parse.y:1038 c-parse.y:1044 c-parse.y:1077 c-parse.y:1083
-#: c-parse.y:1089 c-parse.y:1095 c-parse.y:1140 c-parse.y:1146 c-parse.y:1152
-#: c-parse.y:1158 objc-parse.y:1034 objc-parse.y:1040 objc-parse.y:1046
+#: c-parse.y:988 c-parse.y:994 c-parse.y:1000 c-parse.y:1006 c-parse.y:1027
+#: c-parse.y:1033 c-parse.y:1039 c-parse.y:1045 c-parse.y:1078 c-parse.y:1084
+#: c-parse.y:1090 c-parse.y:1096 c-parse.y:1141 c-parse.y:1147 c-parse.y:1153
+#: c-parse.y:1159 objc-parse.y:1034 objc-parse.y:1040 objc-parse.y:1046
#: objc-parse.y:1052 objc-parse.y:1073 objc-parse.y:1079 objc-parse.y:1085
#: objc-parse.y:1091 objc-parse.y:1124 objc-parse.y:1130 objc-parse.y:1136
#: objc-parse.y:1142 objc-parse.y:1187 objc-parse.y:1193 objc-parse.y:1199
@@ -2396,79 +2448,79 @@ msgstr ""
msgid "`%s' is not at beginning of declaration"
msgstr ""
-#: c-parse.y:1443 objc-parse.y:1499
+#: c-parse.y:1444 objc-parse.y:1499
msgid "ISO C forbids empty initializer braces"
msgstr ""
-#: c-parse.y:1457 objc-parse.y:1513
+#: c-parse.y:1458 objc-parse.y:1513
msgid "ISO C89 forbids specifying subobject to initialize"
msgstr ""
-#: c-parse.y:1460 objc-parse.y:1516
+#: c-parse.y:1461 objc-parse.y:1516
msgid "obsolete use of designated initializer without `='"
msgstr ""
-#: c-parse.y:1464 objc-parse.y:1520
+#: c-parse.y:1465 objc-parse.y:1520
msgid "obsolete use of designated initializer with `:'"
msgstr ""
-#: c-parse.y:1491 objc-parse.y:1547
+#: c-parse.y:1492 objc-parse.y:1547
msgid "ISO C forbids specifying range of elements to initialize"
msgstr ""
-#: c-parse.y:1499 c-parse.y:1530 objc-parse.y:1555 objc-parse.y:1586
+#: c-parse.y:1500 c-parse.y:1531 objc-parse.y:1555 objc-parse.y:1586
msgid "ISO C forbids nested functions"
msgstr ""
-#: c-parse.y:1705 objc-parse.y:1763
+#: c-parse.y:1706 objc-parse.y:1763
msgid "ISO C forbids forward references to `enum' types"
msgstr ""
-#: c-parse.y:1717 cp/parser.c:9093 objc-parse.y:1775
+#: c-parse.y:1718 cp/parser.c:9033 objc-parse.y:1775
msgid "comma at end of enumerator list"
msgstr ""
-#: c-parse.y:1725 objc-parse.y:1783
+#: c-parse.y:1726 objc-parse.y:1783
msgid "no semicolon at end of struct or union"
msgstr ""
-#: c-parse.y:1734 objc-parse.y:1792 objc-parse.y:2867
+#: c-parse.y:1735 objc-parse.y:1792 objc-parse.y:2867
msgid "extra semicolon in struct or union specified"
msgstr ""
-#: c-parse.y:1747 objc-parse.y:1819
+#: c-parse.y:1748 objc-parse.y:1819
msgid "ISO C doesn't support unnamed structs/unions"
msgstr ""
-#: c-parse.y:1756 objc-parse.y:1828
+#: c-parse.y:1757 objc-parse.y:1828
msgid "ISO C forbids member declarations with no members"
msgstr ""
-#: c-parse.y:1915 objc-parse.y:1987
+#: c-parse.y:1916 objc-parse.y:1987
msgid "deprecated use of label at end of compound statement"
msgstr ""
-#: c-parse.y:1932 objc-parse.y:2004
+#: c-parse.y:1933 objc-parse.y:2004
msgid "ISO C89 forbids mixed declarations and code"
msgstr ""
-#: c-parse.y:2007 objc-parse.y:2083
+#: c-parse.y:2008 objc-parse.y:2083
msgid "ISO C forbids label declarations"
msgstr ""
-#: c-parse.y:2057 objc-parse.y:2133
+#: c-parse.y:2058 objc-parse.y:2133
msgid "braced-group within expression allowed only inside a function"
msgstr ""
-#: c-parse.y:2184 objc-parse.y:2260
+#: c-parse.y:2185 objc-parse.y:2260
msgid "empty body in an else-statement"
msgstr ""
-#: c-parse.y:2305 objc-parse.y:2381
+#: c-parse.y:2306 objc-parse.y:2381
msgid "ISO C forbids `goto *expr;'"
msgstr ""
-#: c-parse.y:2405 objc-parse.y:2481
+#: c-parse.y:2406 objc-parse.y:2481
msgid "ISO C forbids forward parameter declarations"
msgstr ""
@@ -2478,70 +2530,125 @@ msgstr ""
#. it caused problems with the code in expand_builtin which
#. tries to verify that BUILT_IN_NEXT_ARG is being used
#. correctly.
-#: c-parse.y:2431 objc-parse.y:2507
+#: c-parse.y:2432 objc-parse.y:2507
msgid "ISO C requires a named argument before `...'"
msgstr ""
-#: c-parse.y:2528 objc-parse.y:2604
+#: c-parse.y:2529 objc-parse.y:2604
msgid "`...' in old-style identifier list"
msgstr ""
-#: /usr/share/bison/bison.simple:795
-msgid "parse error; also virtual memory exhausted"
-msgstr ""
-
-#: /usr/share/bison/bison.simple:799 cp/spew.c:365
-msgid "parse error"
+#: c-p21614.c:5333 ps27181.c:3061 p25538.c:6090 op13529.c:6661
+#: /home/zack/src/gcc/vanilla/gcc/treelang/parse.c:2114
+msgid "syntax error; also virtual memory exhausted"
msgstr ""
-#: /usr/share/bison/bison.simple:924
+#: c-p21614.c:5451 gengtype-yacc.c:1585 ps27181.c:3179 p25538.c:6193
+#: op13529.c:6779 /home/zack/src/gcc/vanilla/gcc/treelang/parse.c:2217
msgid "parser stack overflow"
msgstr ""
-#: c-parse.y:2840 cp/spew.c:1523 objc-parse.y:3540
+#: c-parse.y:2838 objc-parse.y:3537
#, c-format
msgid "%s at end of input"
msgstr ""
-#: c-parse.y:2846 cp/spew.c:1529 objc-parse.y:3546
+#: c-parse.y:2844 objc-parse.y:3543
#, c-format
msgid "%s before %s'%c'"
msgstr ""
-#: c-parse.y:2848 cp/spew.c:1531 objc-parse.y:3548
+#: c-parse.y:2846 objc-parse.y:3545
#, c-format
msgid "%s before %s'\\x%x'"
msgstr ""
-#: c-parse.y:2852 cp/spew.c:1535 objc-parse.y:3552
+#: c-parse.y:2850 objc-parse.y:3549
#, c-format
msgid "%s before string constant"
msgstr ""
-#: c-parse.y:2854 cp/spew.c:1537 objc-parse.y:3554
+#: c-parse.y:2852 objc-parse.y:3551
#, c-format
msgid "%s before numeric constant"
msgstr ""
-#: c-parse.y:2856 objc-parse.y:3556
+#: c-parse.y:2854 objc-parse.y:3553
#, c-format
msgid "%s before \"%s\""
msgstr ""
-#: c-parse.y:2858 objc-parse.y:3558
+#: c-parse.y:2856 objc-parse.y:3555
#, c-format
msgid "%s before '%s' token"
msgstr ""
-#: c-parse.y:2923
+#: c-parse.y:2921
msgid "traditional C rejects string concatenation"
msgstr ""
-#: c-parse.y:3049 objc-parse.y:3782
+#: c-parse.y:3047 objc-parse.y:3779
#, c-format
msgid "syntax error at '%s' token"
msgstr ""
+#: c-pch.c:77 graph.c:422 toplev.c:1901 toplev.c:5341 f/com.c:14134
+#: java/jcf-parse.c:894 java/jcf-parse.c:1040 java/lex.c:1828
+#: objc/objc-act.c:452
+#, c-format
+msgid "can't open %s"
+msgstr ""
+
+#: c-pch.c:81
+#, c-format
+msgid "can't write to %s"
+msgstr ""
+
+#: c-pch.c:87
+#, c-format
+msgid "`%s' is not a valid output file"
+msgstr ""
+
+#: c-pch.c:109 c-pch.c:125
+#, c-format
+msgid "can't write %s"
+msgstr ""
+
+#: c-pch.c:115
+#, c-format
+msgid "can't seek in %s"
+msgstr ""
+
+#: c-pch.c:123 c-pch.c:156
+#, c-format
+msgid "can't read %s"
+msgstr ""
+
+#: c-pch.c:171
+#, c-format
+msgid "%s: not compatible with this GCC version"
+msgstr ""
+
+#. It's a PCH for the wrong language.
+#: c-pch.c:174
+#, c-format
+msgid "%s: not for %s"
+msgstr ""
+
+#. Not any kind of PCH.
+#: c-pch.c:178
+#, c-format
+msgid "%s: not a PCH file"
+msgstr ""
+
+#: c-pch.c:213
+msgid "calling fdopen"
+msgstr ""
+
+#: c-pch.c:221 c-pch.c:233
+msgid "reading"
+msgstr ""
+
#: c-pragma.c:109
msgid ""
"#pragma pack (pop) encountered without matching #pragma pack (push, <n>)"
@@ -2630,29 +2737,29 @@ msgstr ""
msgid "asm declaration conficts with previous rename"
msgstr ""
-#: c-semantics.c:585
+#: c-semantics.c:591
msgid "break statement not within loop or switch"
msgstr ""
-#: c-semantics.c:603
+#: c-semantics.c:609
msgid "continue statement not within a loop"
msgstr ""
-#: c-semantics.c:698
+#: c-semantics.c:704
msgid "destructor needed for `%#D'"
msgstr ""
-#: c-semantics.c:699
+#: c-semantics.c:705
msgid "where case label appears here"
msgstr ""
-#: c-semantics.c:702
+#: c-semantics.c:708
msgid ""
"(enclose actions of previous case statements requiring destructors in their "
"own scope.)"
msgstr ""
-#: c-semantics.c:745 c-typeck.c:6884 cp/semantics.c:901
+#: c-semantics.c:751 c-typeck.c:6915 cp/semantics.c:1030
#, c-format
msgid "%s qualifier ignored on asm"
msgstr ""
@@ -2662,7 +2769,7 @@ msgstr ""
msgid "`%s' has an incomplete type"
msgstr ""
-#: c-typeck.c:147 cp/call.c:2654
+#: c-typeck.c:147 cp/call.c:2803
msgid "invalid use of void expression"
msgstr ""
@@ -2689,1012 +2796,1033 @@ msgstr ""
msgid "function types not truly compatible in ISO C"
msgstr ""
-#: c-typeck.c:605
+#: c-typeck.c:611
msgid "types are not quite compatible"
msgstr ""
-#: c-typeck.c:759 c-typeck.c:2674
+#: c-typeck.c:765 c-typeck.c:2688
msgid "arithmetic on pointer to an incomplete type"
msgstr ""
-#: c-typeck.c:1138
+#: c-typeck.c:1144
#, c-format
msgid "%s has no member named `%s'"
msgstr ""
-#: c-typeck.c:1171
+#: c-typeck.c:1180
#, c-format
msgid "request for member `%s' in something not a structure or union"
msgstr ""
-#: c-typeck.c:1203
+#: c-typeck.c:1211
msgid "dereferencing pointer to incomplete type"
msgstr ""
-#: c-typeck.c:1207
+#: c-typeck.c:1215
msgid "dereferencing `void *' pointer"
msgstr ""
-#: c-typeck.c:1224 cp/typeck.c:2387
+#: c-typeck.c:1232 cp/typeck.c:2381
#, c-format
msgid "invalid type argument of `%s'"
msgstr ""
-#: c-typeck.c:1243 cp/typeck.c:2413
+#: c-typeck.c:1251 cp/typeck.c:2407
msgid "subscript missing in array reference"
msgstr ""
-#: c-typeck.c:1264 cp/typeck.c:2455
+#: c-typeck.c:1272 cp/typeck.c:2449
msgid "array subscript has type `char'"
msgstr ""
-#: c-typeck.c:1272 c-typeck.c:1361 cp/typeck.c:2462 cp/typeck.c:2541
+#: c-typeck.c:1280 c-typeck.c:1369 cp/typeck.c:2456 cp/typeck.c:2535
msgid "array subscript is not an integer"
msgstr ""
-#: c-typeck.c:1305
+#: c-typeck.c:1313
msgid "ISO C forbids subscripting `register' array"
msgstr ""
-#: c-typeck.c:1307
+#: c-typeck.c:1315
msgid "ISO C90 forbids subscripting non-lvalue array"
msgstr ""
-#: c-typeck.c:1340
+#: c-typeck.c:1348
msgid "subscript has type `char'"
msgstr ""
-#: c-typeck.c:1356 cp/typeck.c:2536
+#: c-typeck.c:1364 cp/typeck.c:2530
msgid "subscripted value is neither array nor pointer"
msgstr ""
-#: c-typeck.c:1410
+#: c-typeck.c:1423
#, c-format
msgid "`%s' undeclared here (not in a function)"
msgstr ""
-#: c-typeck.c:1417
+#: c-typeck.c:1427
#, c-format
msgid "`%s' undeclared (first use in this function)"
msgstr ""
-#: c-typeck.c:1422
+#: c-typeck.c:1432
msgid "(Each undeclared identifier is reported only once"
msgstr ""
-#: c-typeck.c:1423
+#: c-typeck.c:1433
msgid "for each function it appears in.)"
msgstr ""
-#: c-typeck.c:1440
+#: c-typeck.c:1454
#, c-format
msgid "local declaration of `%s' hides instance variable"
msgstr ""
-#: c-typeck.c:1505
+#: c-typeck.c:1519
msgid "called object is not a function"
msgstr ""
-#: c-typeck.c:1591 cp/typeck.c:2861
+#: c-typeck.c:1605 cp/typeck.c:2834
msgid "too many arguments to function"
msgstr ""
-#: c-typeck.c:1612
+#: c-typeck.c:1626
#, c-format
msgid "type of formal parameter %d is incomplete"
msgstr ""
-#: c-typeck.c:1625
+#: c-typeck.c:1639
#, c-format
msgid "%s as integer rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:1628
+#: c-typeck.c:1642
#, c-format
msgid "%s as integer rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:1631
+#: c-typeck.c:1645
#, c-format
msgid "%s as complex rather than floating due to prototype"
msgstr ""
-#: c-typeck.c:1634
+#: c-typeck.c:1648
#, c-format
msgid "%s as floating rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:1637
+#: c-typeck.c:1651
#, c-format
msgid "%s as complex rather than integer due to prototype"
msgstr ""
-#: c-typeck.c:1640
+#: c-typeck.c:1654
#, c-format
msgid "%s as floating rather than complex due to prototype"
msgstr ""
-#: c-typeck.c:1650
+#: c-typeck.c:1664
#, c-format
msgid "%s as `float' rather than `double' due to prototype"
msgstr ""
-#: c-typeck.c:1668
+#: c-typeck.c:1682
#, c-format
msgid "%s with different width due to prototype"
msgstr ""
-#: c-typeck.c:1702
+#: c-typeck.c:1716
#, c-format
msgid "%s as unsigned due to prototype"
msgstr ""
-#: c-typeck.c:1704
+#: c-typeck.c:1718
#, c-format
msgid "%s as signed due to prototype"
msgstr ""
-#: c-typeck.c:1738 cp/typeck.c:2966
+#: c-typeck.c:1752 cp/typeck.c:2939
msgid "too few arguments to function"
msgstr ""
-#: c-typeck.c:1780
+#: c-typeck.c:1794
msgid "suggest parentheses around + or - inside shift"
msgstr ""
-#: c-typeck.c:1787
+#: c-typeck.c:1801
msgid "suggest parentheses around && within ||"
msgstr ""
-#: c-typeck.c:1796
+#: c-typeck.c:1810
msgid "suggest parentheses around arithmetic in operand of |"
msgstr ""
-#: c-typeck.c:1799
+#: c-typeck.c:1813
msgid "suggest parentheses around comparison in operand of |"
msgstr ""
-#: c-typeck.c:1808
+#: c-typeck.c:1822
msgid "suggest parentheses around arithmetic in operand of ^"
msgstr ""
-#: c-typeck.c:1811
+#: c-typeck.c:1825
msgid "suggest parentheses around comparison in operand of ^"
msgstr ""
-#: c-typeck.c:1818
+#: c-typeck.c:1832
msgid "suggest parentheses around + or - in operand of &"
msgstr ""
-#: c-typeck.c:1821
+#: c-typeck.c:1835
msgid "suggest parentheses around comparison in operand of &"
msgstr ""
-#: c-typeck.c:1828
+#: c-typeck.c:1842
msgid "comparisons like X<=Y<=Z do not have their mathematical meaning"
msgstr ""
-#: c-typeck.c:1988 c-typeck.c:2023
+#: c-typeck.c:2002 c-typeck.c:2037
msgid "division by zero"
msgstr ""
-#: c-typeck.c:2068 cp/typeck.c:3227
+#: c-typeck.c:2082 cp/typeck.c:3377
msgid "right shift count is negative"
msgstr ""
-#: c-typeck.c:2075 cp/typeck.c:3233
+#: c-typeck.c:2089 cp/typeck.c:3383
msgid "right shift count >= width of type"
msgstr ""
-#: c-typeck.c:2096 cp/typeck.c:3252
+#: c-typeck.c:2110 cp/typeck.c:3402
msgid "left shift count is negative"
msgstr ""
-#: c-typeck.c:2099 cp/typeck.c:3254
+#: c-typeck.c:2113 cp/typeck.c:3404
msgid "left shift count >= width of type"
msgstr ""
-#: c-typeck.c:2120
+#: c-typeck.c:2134
msgid "shift count is negative"
msgstr ""
-#: c-typeck.c:2122
+#: c-typeck.c:2136
msgid "shift count >= width of type"
msgstr ""
-#: c-typeck.c:2139 cp/typeck.c:3289
+#: c-typeck.c:2153 cp/typeck.c:3439
msgid "comparing floating point with == or != is unsafe"
msgstr ""
-#: c-typeck.c:2165 c-typeck.c:2171
+#: c-typeck.c:2179 c-typeck.c:2185
msgid "ISO C forbids comparison of `void *' with function pointer"
msgstr ""
-#: c-typeck.c:2174 c-typeck.c:2214 c-typeck.c:2242
+#: c-typeck.c:2188 c-typeck.c:2228 c-typeck.c:2256
msgid "comparison of distinct pointer types lacks a cast"
msgstr ""
-#: c-typeck.c:2188 c-typeck.c:2193 c-typeck.c:2262 c-typeck.c:2267
+#: c-typeck.c:2202 c-typeck.c:2207 c-typeck.c:2276 c-typeck.c:2281
msgid "comparison between pointer and integer"
msgstr ""
-#: c-typeck.c:2209 c-typeck.c:2237
+#: c-typeck.c:2223 c-typeck.c:2251
msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr ""
-#: c-typeck.c:2234
+#: c-typeck.c:2248
msgid "comparison of complete and incomplete pointers"
msgstr ""
-#: c-typeck.c:2250 c-typeck.c:2257
+#: c-typeck.c:2264 c-typeck.c:2271
msgid "ordered comparison of pointer with integer zero"
msgstr ""
-#: c-typeck.c:2281 cp/typeck.c:3422
+#: c-typeck.c:2295 cp/typeck.c:3572
msgid "unordered comparison on non-floating point argument"
msgstr ""
-#: c-typeck.c:2492
+#: c-typeck.c:2506
msgid "comparison between signed and unsigned"
msgstr ""
-#: c-typeck.c:2538 cp/typeck.c:3666
+#: c-typeck.c:2552 cp/typeck.c:3816
msgid "comparison of promoted ~unsigned with constant"
msgstr ""
-#: c-typeck.c:2546 cp/typeck.c:3674
+#: c-typeck.c:2560 cp/typeck.c:3824
msgid "comparison of promoted ~unsigned with unsigned"
msgstr ""
-#: c-typeck.c:2626
+#: c-typeck.c:2640
msgid "pointer of type `void *' used in subtraction"
msgstr ""
-#: c-typeck.c:2628
+#: c-typeck.c:2642
msgid "pointer to a function used in subtraction"
msgstr ""
-#: c-typeck.c:2725
+#: c-typeck.c:2739
msgid "wrong type argument to unary plus"
msgstr ""
-#: c-typeck.c:2738
+#: c-typeck.c:2752
msgid "wrong type argument to unary minus"
msgstr ""
-#: c-typeck.c:2755
+#: c-typeck.c:2769
msgid "ISO C does not support `~' for complex conjugation"
msgstr ""
-#: c-typeck.c:2761
+#: c-typeck.c:2775
msgid "wrong type argument to bit-complement"
msgstr ""
-#: c-typeck.c:2770
+#: c-typeck.c:2784
msgid "wrong type argument to abs"
msgstr ""
-#: c-typeck.c:2782
+#: c-typeck.c:2796
msgid "wrong type argument to conjugation"
msgstr ""
-#: c-typeck.c:2796
+#: c-typeck.c:2810
msgid "wrong type argument to unary exclamation mark"
msgstr ""
-#: c-typeck.c:2839
+#: c-typeck.c:2853
msgid "ISO C does not support `++' and `--' on complex types"
msgstr ""
-#: c-typeck.c:2854 c-typeck.c:2886
+#: c-typeck.c:2868 c-typeck.c:2900
msgid "wrong type argument to increment"
msgstr ""
-#: c-typeck.c:2856 c-typeck.c:2888
+#: c-typeck.c:2870 c-typeck.c:2902
msgid "wrong type argument to decrement"
msgstr ""
-#: c-typeck.c:2877
+#: c-typeck.c:2891
msgid "increment of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:2879
+#: c-typeck.c:2893
msgid "decrement of pointer to unknown structure"
msgstr ""
-#: c-typeck.c:3016
+#: c-typeck.c:3030
msgid "ISO C forbids the address of a cast expression"
msgstr ""
-#: c-typeck.c:3026
+#: c-typeck.c:3040
msgid "invalid lvalue in unary `&'"
msgstr ""
-#: c-typeck.c:3058
+#: c-typeck.c:3072
#, c-format
msgid "attempt to take address of bit-field structure member `%s'"
msgstr ""
#. Use `%s' to print the string in case there are any escape
#. characters in the message.
-#: c-typeck.c:3167 c-typeck.c:4623 c-typeck.c:4639 c-typeck.c:4655
-#: final.c:2847 final.c:2849 gcc.c:4526 rtl-error.c:124 toplev.c:1696
-#: config/cris/cris.c:531 cp/parser.c:2248 cp/typeck.c:4376 java/expr.c:366
-#: java/verify.c:1469 java/verify.c:1470 java/verify.c:1485
+#: c-typeck.c:3181 c-typeck.c:4645 c-typeck.c:4661 c-typeck.c:4677
+#: final.c:2842 final.c:2844 gcc.c:4548 rtl-error.c:124 toplev.c:1736
+#: config/cris/cris.c:554 cp/parser.c:1886 cp/typeck.c:4556 java/expr.c:358
+#: java/verify.c:1459 java/verify.c:1460 java/verify.c:1475
#, c-format
msgid "%s"
msgstr ""
-#: c-typeck.c:3228
+#: c-typeck.c:3242
msgid "ISO C forbids use of conditional expressions as lvalues"
msgstr ""
-#: c-typeck.c:3231
+#: c-typeck.c:3245
msgid "ISO C forbids use of compound expressions as lvalues"
msgstr ""
-#: c-typeck.c:3234
+#: c-typeck.c:3248
msgid "ISO C forbids use of cast expressions as lvalues"
msgstr ""
-#: c-typeck.c:3251
+#: c-typeck.c:3265
#, c-format
msgid "%s of read-only member `%s'"
msgstr ""
-#: c-typeck.c:3255
+#: c-typeck.c:3269
#, c-format
msgid "%s of read-only variable `%s'"
msgstr ""
-#: c-typeck.c:3258
+#: c-typeck.c:3272
#, c-format
msgid "%s of read-only location"
msgstr ""
-#: c-typeck.c:3277
+#: c-typeck.c:3291
#, c-format
msgid "cannot take address of bit-field `%s'"
msgstr ""
-#: c-typeck.c:3305
+#: c-typeck.c:3319
#, c-format
msgid "global register variable `%s' used in nested function"
msgstr ""
-#: c-typeck.c:3309
+#: c-typeck.c:3323
#, c-format
msgid "register variable `%s' used in nested function"
msgstr ""
-#: c-typeck.c:3316
+#: c-typeck.c:3330
#, c-format
msgid "address of global register variable `%s' requested"
msgstr ""
-#: c-typeck.c:3328
+#: c-typeck.c:3342
msgid "cannot put object with volatile field into register"
msgstr ""
-#: c-typeck.c:3332
+#: c-typeck.c:3346
#, c-format
msgid "address of register variable `%s' requested"
msgstr ""
-#: c-typeck.c:3440
+#: c-typeck.c:3454
msgid "signed and unsigned type in conditional expression"
msgstr ""
-#: c-typeck.c:3447
+#: c-typeck.c:3461
msgid "ISO C forbids conditional expr with only one void side"
msgstr ""
-#: c-typeck.c:3463 c-typeck.c:3470
+#: c-typeck.c:3477 c-typeck.c:3484
msgid "ISO C forbids conditional expr between `void *' and function pointer"
msgstr ""
-#: c-typeck.c:3476
+#: c-typeck.c:3490
msgid "pointer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3483 c-typeck.c:3493
+#: c-typeck.c:3497 c-typeck.c:3507
msgid "pointer/integer type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3507
+#: c-typeck.c:3521
msgid "type mismatch in conditional expression"
msgstr ""
-#: c-typeck.c:3578 cp/typeck.c:4632
+#: c-typeck.c:3592 cp/typeck.c:4812
msgid "left-hand operand of comma expression has no effect"
msgstr ""
-#: c-typeck.c:3622
+#: c-typeck.c:3636
msgid "cast specifies array type"
msgstr ""
-#: c-typeck.c:3628
+#: c-typeck.c:3642
msgid "cast specifies function type"
msgstr ""
-#: c-typeck.c:3638
+#: c-typeck.c:3652
msgid "ISO C forbids casting nonscalar to the same type"
msgstr ""
-#: c-typeck.c:3656
+#: c-typeck.c:3670
msgid "ISO C forbids casts to union type"
msgstr ""
-#: c-typeck.c:3662
+#: c-typeck.c:3676
msgid "cast to union type from type not present in union"
msgstr ""
-#: c-typeck.c:3713
+#: c-typeck.c:3727
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:3718
+#: c-typeck.c:3732
msgid "cast discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:3733
+#: c-typeck.c:3747
msgid "cast increases required alignment of target type"
msgstr ""
-#: c-typeck.c:3739 cp/typeck.c:5062
+#: c-typeck.c:3753 cp/typeck.c:5242
msgid "cast from pointer to integer of different size"
msgstr ""
-#: c-typeck.c:3744
+#: c-typeck.c:3758
msgid "cast does not match function type"
msgstr ""
-#: c-typeck.c:3751 cp/typeck.c:5069
+#: c-typeck.c:3765 cp/typeck.c:5249
msgid "cast to pointer from integer of different size"
msgstr ""
-#: c-typeck.c:3763
+#: c-typeck.c:3777
msgid "type-punning to incomplete type might break strict-aliasing rules"
msgstr ""
-#: c-typeck.c:3767
+#: c-typeck.c:3781
msgid "dereferencing type-punned pointer will break strict-aliasing rules"
msgstr ""
#. Now we have handled acceptable kinds of LHS that are not truly lvalues.
#. Reject anything strange now.
-#: c-typeck.c:3926
+#: c-typeck.c:3943
msgid "invalid lvalue in assignment"
msgstr ""
#. Convert new value to destination type.
-#: c-typeck.c:3935 c-typeck.c:3960 c-typeck.c:3977 cp/typeck.c:5180
-#: cp/typeck.c:5329
+#: c-typeck.c:3952 c-typeck.c:3977 c-typeck.c:3994 cp/typeck.c:5360
+#: cp/typeck.c:5509
msgid "assignment"
msgstr ""
-#: c-typeck.c:4047
+#: c-typeck.c:4064
msgid "cannot pass rvalue to reference parameter"
msgstr ""
-#: c-typeck.c:4151 c-typeck.c:4218
+#: c-typeck.c:4173 c-typeck.c:4240
#, c-format
msgid "%s makes qualified function pointer from unqualified"
msgstr ""
-#: c-typeck.c:4155 c-typeck.c:4198
+#: c-typeck.c:4177 c-typeck.c:4220
#, c-format
msgid "%s discards qualifiers from pointer target type"
msgstr ""
-#: c-typeck.c:4161
+#: c-typeck.c:4183
msgid "ISO C prohibits argument conversion to union type"
msgstr ""
-#: c-typeck.c:4190
+#: c-typeck.c:4212
#, c-format
msgid "ISO C forbids %s between function pointer and `void *'"
msgstr ""
-#: c-typeck.c:4207
+#: c-typeck.c:4229
#, c-format
msgid "pointer targets in %s differ in signedness"
msgstr ""
-#: c-typeck.c:4223
+#: c-typeck.c:4245
#, c-format
msgid "%s from incompatible pointer type"
msgstr ""
-#: c-typeck.c:4239
+#: c-typeck.c:4261
#, c-format
msgid "%s makes pointer from integer without a cast"
msgstr ""
-#: c-typeck.c:4247
+#: c-typeck.c:4269
#, c-format
msgid "%s makes integer from pointer without a cast"
msgstr ""
-#: c-typeck.c:4261 c-typeck.c:4264
+#: c-typeck.c:4283 c-typeck.c:4286
#, c-format
msgid "incompatible type for argument %d of `%s'"
msgstr ""
-#: c-typeck.c:4268
+#: c-typeck.c:4290
#, c-format
msgid "incompatible type for argument %d of indirect function call"
msgstr ""
-#: c-typeck.c:4272
+#: c-typeck.c:4294
#, c-format
msgid "incompatible types in %s"
msgstr ""
#. Function name is known; supply it.
-#: c-typeck.c:4330
+#: c-typeck.c:4352
#, c-format
msgid "passing arg of `%s'"
msgstr ""
#. Function name unknown (call through ptr).
-#: c-typeck.c:4340
+#: c-typeck.c:4362
msgid "passing arg of pointer to function"
msgstr ""
#. Function name is known; supply it.
-#: c-typeck.c:4348
+#: c-typeck.c:4370
#, c-format
msgid "passing arg %d of `%s'"
msgstr ""
#. Function name unknown (call through ptr); just give arg number.
-#: c-typeck.c:4358
+#: c-typeck.c:4380
#, c-format
msgid "passing arg %d of pointer to function"
msgstr ""
-#: c-typeck.c:4424
+#: c-typeck.c:4446
msgid "initializer for static variable is not constant"
msgstr ""
-#: c-typeck.c:4430
+#: c-typeck.c:4452
msgid "initializer for static variable uses complicated arithmetic"
msgstr ""
-#: c-typeck.c:4438
+#: c-typeck.c:4460
msgid "aggregate initializer is not constant"
msgstr ""
-#: c-typeck.c:4440
+#: c-typeck.c:4462
msgid "aggregate initializer uses complicated arithmetic"
msgstr ""
-#: c-typeck.c:4447
+#: c-typeck.c:4469
msgid "traditional C rejects automatic aggregate initialization"
msgstr ""
-#: c-typeck.c:4626 c-typeck.c:4642 c-typeck.c:4658
+#: c-typeck.c:4648 c-typeck.c:4664 c-typeck.c:4680
#, c-format
msgid "(near initialization for `%s')"
msgstr ""
-#: c-typeck.c:4709 cp/typeck2.c:507
+#: c-typeck.c:4731 cp/typeck2.c:488
msgid "char-array initialized from wide string"
msgstr ""
-#: c-typeck.c:4716 cp/typeck2.c:514
+#: c-typeck.c:4738 cp/typeck2.c:495
msgid "int-array initialized from non-wide string"
msgstr ""
-#: c-typeck.c:4734 cp/typeck2.c:530
+#: c-typeck.c:4756 cp/typeck2.c:511
msgid "initializer-string for array of chars is too long"
msgstr ""
-#: c-typeck.c:4772
+#: c-typeck.c:4794
msgid "array initialized from non-constant array expression"
msgstr ""
-#: c-typeck.c:4789 c-typeck.c:4791 c-typeck.c:4807 c-typeck.c:4828
-#: c-typeck.c:6228
+#: c-typeck.c:4811 c-typeck.c:4813 c-typeck.c:4829 c-typeck.c:4850
+#: c-typeck.c:6254
msgid "initializer element is not constant"
msgstr ""
-#: c-typeck.c:4823
+#: c-typeck.c:4845
msgid "initialization"
msgstr ""
-#: c-typeck.c:4834 c-typeck.c:6233
+#: c-typeck.c:4856 c-typeck.c:6259
msgid "initializer element is not computable at load time"
msgstr ""
-#: c-typeck.c:4849 cp/typeck2.c:607
+#: c-typeck.c:4871 cp/typeck2.c:588
msgid "invalid initializer"
msgstr ""
-#: c-typeck.c:5342
+#: c-typeck.c:5173 cp/decl.c:7801
+msgid "opaque vector types cannot be initialized"
+msgstr ""
+
+#: c-typeck.c:5368
msgid "extra brace group at end of initializer"
msgstr ""
-#: c-typeck.c:5362
+#: c-typeck.c:5388
msgid "missing braces around initializer"
msgstr ""
-#: c-typeck.c:5422
+#: c-typeck.c:5448
msgid "braces around scalar initializer"
msgstr ""
-#: c-typeck.c:5470
+#: c-typeck.c:5496
msgid "initialization of flexible array member in a nested context"
msgstr ""
-#: c-typeck.c:5472
+#: c-typeck.c:5498
msgid "initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:5503
+#: c-typeck.c:5529
msgid "missing initializer"
msgstr ""
-#: c-typeck.c:5529
+#: c-typeck.c:5555
msgid "empty scalar initializer"
msgstr ""
-#: c-typeck.c:5534
+#: c-typeck.c:5560
msgid "extra elements in scalar initializer"
msgstr ""
-#: c-typeck.c:5620
+#: c-typeck.c:5646
msgid "initialization designators may not nest"
msgstr ""
-#: c-typeck.c:5641 c-typeck.c:5712
+#: c-typeck.c:5667 c-typeck.c:5738
msgid "array index in non-array initializer"
msgstr ""
-#: c-typeck.c:5646 c-typeck.c:5764
+#: c-typeck.c:5672 c-typeck.c:5790
msgid "field name not in record or union initializer"
msgstr ""
-#: c-typeck.c:5708 c-typeck.c:5710
+#: c-typeck.c:5734 c-typeck.c:5736
msgid "nonconstant array index in initializer"
msgstr ""
-#: c-typeck.c:5715
+#: c-typeck.c:5741
msgid "array index in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5726
+#: c-typeck.c:5752
msgid "empty index range in initializer"
msgstr ""
-#: c-typeck.c:5735
+#: c-typeck.c:5761
msgid "array index range in initializer exceeds array bounds"
msgstr ""
-#: c-typeck.c:5776
+#: c-typeck.c:5802
#, c-format
msgid "unknown field `%s' specified in initializer"
msgstr ""
-#: c-typeck.c:5813 c-typeck.c:5834 c-typeck.c:6295
+#: c-typeck.c:5839 c-typeck.c:5860 c-typeck.c:6321
msgid "initialized field with side-effects overwritten"
msgstr ""
-#: c-typeck.c:6505
+#: c-typeck.c:6531
msgid "excess elements in char array initializer"
msgstr ""
-#: c-typeck.c:6512 c-typeck.c:6558
+#: c-typeck.c:6538 c-typeck.c:6584
msgid "excess elements in struct initializer"
msgstr ""
-#: c-typeck.c:6573
+#: c-typeck.c:6599
msgid "non-static initialization of a flexible array member"
msgstr ""
-#: c-typeck.c:6635
+#: c-typeck.c:6666
msgid "excess elements in union initializer"
msgstr ""
-#: c-typeck.c:6656
+#: c-typeck.c:6687
msgid "traditional C rejects initialization of unions"
msgstr ""
-#: c-typeck.c:6719
+#: c-typeck.c:6750
msgid "excess elements in array initializer"
msgstr ""
-#: c-typeck.c:6748
+#: c-typeck.c:6779
msgid "excess elements in vector initializer"
msgstr ""
-#: c-typeck.c:6770
+#: c-typeck.c:6801
msgid "excess elements in scalar initializer"
msgstr ""
-#: c-typeck.c:6877
+#: c-typeck.c:6908
msgid "asm template is not a string constant"
msgstr ""
-#: c-typeck.c:6909
+#: c-typeck.c:6940
msgid "invalid lvalue in asm statement"
msgstr ""
-#: c-typeck.c:6984
+#: c-typeck.c:7015
msgid "modification by `asm'"
msgstr ""
-#: c-typeck.c:7003 cp/typeck.c:6187
+#: c-typeck.c:7034 cp/typeck.c:6369
msgid "function declared `noreturn' has a `return' statement"
msgstr ""
-#: c-typeck.c:7010
+#: c-typeck.c:7041
msgid "`return' with no value, in function returning non-void"
msgstr ""
-#: c-typeck.c:7016
+#: c-typeck.c:7047
msgid "`return' with a value, in function returning void"
msgstr ""
-#: c-typeck.c:7020
+#: c-typeck.c:7051
msgid "return"
msgstr ""
-#: c-typeck.c:7072
+#: c-typeck.c:7103
msgid "function returns address of local variable"
msgstr ""
-#: c-typeck.c:7128 cp/semantics.c:559
+#: c-typeck.c:7159 cp/semantics.c:693
msgid "switch quantity not an integer"
msgstr ""
-#: c-typeck.c:7138
+#: c-typeck.c:7169
msgid "`long' switch expression not converted to `int' in ISO C"
msgstr ""
-#: c-typeck.c:7173 cp/decl.c:5173
+#: c-typeck.c:7212 cp/decl.c:5109
msgid "case label not within a switch statement"
msgstr ""
-#: c-typeck.c:7175 cp/decl.c:5178
+#: c-typeck.c:7214 cp/decl.c:5114
msgid "`default' label not within a switch statement"
msgstr ""
-#: calls.c:1887
+#: calls.c:1919
#, c-format
msgid "inlining failed in call to `%s'"
msgstr ""
-#: calls.c:1888 calls.c:2194
+#: calls.c:1920 calls.c:2261
msgid "called from here"
msgstr ""
-#: calls.c:2193
+#: calls.c:2260
#, c-format
msgid "can't inline call to `%s'"
msgstr ""
-#: calls.c:2223
+#: calls.c:2290
msgid "function call has aggregate value"
msgstr ""
-#: calls.c:4587
-msgid "variable offset is passed partially in stack and in reg"
-msgstr ""
-
-#: calls.c:4589
-msgid "variable size is passed partially in stack and in reg"
-msgstr ""
-
-#: cfgloop.c:1106
+#: cfgloop.c:1201
#, c-format
msgid "Size of loop %d should be %d, not %d."
msgstr ""
-#: cfgloop.c:1125
+#: cfgloop.c:1220
#, c-format
msgid "Bb %d do not belong to loop %d."
msgstr ""
-#: cfgloop.c:1143
+#: cfgloop.c:1238
#, c-format
msgid "Loop %d's header does not have exactly 2 entries."
msgstr ""
-#: cfgloop.c:1151
+#: cfgloop.c:1246
#, c-format
msgid "Loop %d's latch does not have exactly 1 successor."
msgstr ""
-#: cfgloop.c:1156
+#: cfgloop.c:1251
#, c-format
msgid "Loop %d's latch does not have header as successor."
msgstr ""
-#: cfgloop.c:1161
+#: cfgloop.c:1256
#, c-format
msgid "Loop %d's latch does not belong directly to it."
msgstr ""
-#: cfgloop.c:1167
+#: cfgloop.c:1262
#, c-format
msgid "Loop %d's header does not belong directly to it."
msgstr ""
-#: cfgrtl.c:1705
+#: cfgloop.c:1268
+#, c-format
+msgid "Loop %d's latch is marked as part of irreducible region."
+msgstr ""
+
+#: cfgloop.c:1298
+#, c-format
+msgid "Basic block %d should be marked irreducible."
+msgstr ""
+
+#: cfgloop.c:1304
+#, c-format
+msgid "Basic block %d should not be marked irreducible."
+msgstr ""
+
+#: cfgloop.c:1312
+#, c-format
+msgid "Edge from %d to %d should be marked irreducible."
+msgstr ""
+
+#: cfgloop.c:1319
+#, c-format
+msgid "Edge from %d to %d should not be marked irreducible."
+msgstr ""
+
+#: cfgrtl.c:1754
#, c-format
msgid "bb %d on wrong place"
msgstr ""
-#: cfgrtl.c:1711
+#: cfgrtl.c:1760
#, c-format
msgid "prev_bb of %d should be %d, not %d"
msgstr ""
-#: cfgrtl.c:1731
+#: cfgrtl.c:1780
#, c-format
msgid "end insn %d for block %d not found in the insn stream"
msgstr ""
-#: cfgrtl.c:1745
+#: cfgrtl.c:1794
#, c-format
msgid "insn %d is in multiple basic blocks (%d and %d)"
msgstr ""
-#: cfgrtl.c:1757
+#: cfgrtl.c:1806
#, c-format
msgid "head insn %d for block %d not found in the insn stream"
msgstr ""
-#: cfgrtl.c:1779
+#: cfgrtl.c:1828
#, c-format
msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
msgstr ""
-#: cfgrtl.c:1786
+#: cfgrtl.c:1835
#, c-format
msgid "verify_flow_info: Wrong count of block %i %i"
msgstr ""
-#: cfgrtl.c:1792
+#: cfgrtl.c:1841
#, c-format
msgid "verify_flow_info: Wrong frequency of block %i %i"
msgstr ""
-#: cfgrtl.c:1800
+#: cfgrtl.c:1849
#, c-format
msgid "verify_flow_info: Duplicate edge %i->%i"
msgstr ""
-#: cfgrtl.c:1806
+#: cfgrtl.c:1855
#, c-format
msgid "verify_flow_info: Wrong probability of edge %i->%i %i"
msgstr ""
-#: cfgrtl.c:1812
+#: cfgrtl.c:1861
#, c-format
msgid "verify_flow_info: Wrong count of edge %i->%i %i"
msgstr ""
-#: cfgrtl.c:1842
+#: cfgrtl.c:1891
#, c-format
msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:1857
+#: cfgrtl.c:1906
#, c-format
msgid "verify_flow_info: Incorrect fallthru %i->%i"
msgstr ""
-#: cfgrtl.c:1859
+#: cfgrtl.c:1908
msgid "wrong insn in the fallthru edge"
msgstr ""
-#: cfgrtl.c:1866
+#: cfgrtl.c:1915
#, c-format
msgid "verify_flow_info: Basic block %d succ edge is corrupted"
msgstr ""
-#: cfgrtl.c:1882
+#: cfgrtl.c:1931
#, c-format
msgid "Missing REG_EH_REGION note in the end of bb %i"
msgstr ""
-#: cfgrtl.c:1890
+#: cfgrtl.c:1939
#, c-format
msgid "Too many outgoing branch edges from bb %i"
msgstr ""
-#: cfgrtl.c:1895
+#: cfgrtl.c:1944
#, c-format
msgid "Fallthru edge after unconditional jump %i"
msgstr ""
-#: cfgrtl.c:1900
+#: cfgrtl.c:1949
#, c-format
msgid "Wrong amount of branch edges after unconditional jump %i"
msgstr ""
-#: cfgrtl.c:1906
+#: cfgrtl.c:1955
#, c-format
msgid "Wrong amount of branch edges after conditional jump %i"
msgstr ""
-#: cfgrtl.c:1911
+#: cfgrtl.c:1960
#, c-format
msgid "Call edges for non-call insn in bb %i"
msgstr ""
-#: cfgrtl.c:1920
+#: cfgrtl.c:1969
#, c-format
msgid "Abnormal edges for no purpose in bb %i"
msgstr ""
-#: cfgrtl.c:1935
+#: cfgrtl.c:1984
#, c-format
msgid "missing barrier after block %i"
msgstr ""
-#: cfgrtl.c:1945
+#: cfgrtl.c:1994
#, c-format
msgid "basic block %d pred edge is corrupted"
msgstr ""
-#: cfgrtl.c:1962
+#: cfgrtl.c:2011
#, c-format
msgid "insn %d inside basic block %d but block_for_insn is NULL"
msgstr ""
-#: cfgrtl.c:1966
+#: cfgrtl.c:2015
#, c-format
msgid "insn %d inside basic block %d but block_for_insn is %i"
msgstr ""
-#: cfgrtl.c:1980 cfgrtl.c:1990
+#: cfgrtl.c:2029 cfgrtl.c:2039
#, c-format
msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d"
msgstr ""
-#: cfgrtl.c:2003
+#: cfgrtl.c:2052
#, c-format
msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d"
msgstr ""
-#: cfgrtl.c:2015
+#: cfgrtl.c:2062
#, c-format
msgid "in basic block %d:"
msgstr ""
-#: cfgrtl.c:2016
+#: cfgrtl.c:2063
msgid "flow control insn inside a basic block"
msgstr ""
-#: cfgrtl.c:2035
+#: cfgrtl.c:2082
#, c-format
msgid "basic block %i edge lists are corrupted"
msgstr ""
-#: cfgrtl.c:2050
+#: cfgrtl.c:2097
msgid "basic blocks not numbered consecutively"
msgstr ""
-#: cfgrtl.c:2075
+#: cfgrtl.c:2122
msgid "insn outside basic block"
msgstr ""
-#: cfgrtl.c:2083
+#: cfgrtl.c:2130
msgid "return not followed by barrier"
msgstr ""
-#: cfgrtl.c:2088
+#: cfgrtl.c:2135
#, c-format
msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)"
msgstr ""
-#: cfgrtl.c:2092
+#: cfgrtl.c:2139
msgid "verify_flow_info failed"
msgstr ""
@@ -3761,257 +3889,257 @@ msgstr ""
msgid "redirecting stdout: %s"
msgstr ""
-#: collect2.c:1628
+#: collect2.c:1627
#, c-format
msgid "[Leaving %s]\n"
msgstr ""
-#: collect2.c:1871
+#: collect2.c:1870
#, c-format
msgid ""
"\n"
"write_c_file - output name is %s, prefix is %s\n"
msgstr ""
-#: collect2.c:2084
+#: collect2.c:2082
msgid "cannot find `nm'"
msgstr ""
-#: collect2.c:2094 collect2.c:2536
+#: collect2.c:2092 collect2.c:2533
msgid "pipe"
msgstr ""
-#: collect2.c:2098 collect2.c:2540
+#: collect2.c:2096 collect2.c:2537
msgid "fdopen"
msgstr ""
-#: collect2.c:2124 collect2.c:2566
+#: collect2.c:2122 collect2.c:2563
#, c-format
msgid "dup2 %d 1"
msgstr ""
-#: collect2.c:2127 collect2.c:2130 collect2.c:2143 collect2.c:2569
-#: collect2.c:2572 collect2.c:2585
+#: collect2.c:2125 collect2.c:2128 collect2.c:2141 collect2.c:2566
+#: collect2.c:2569 collect2.c:2582
#, c-format
msgid "close %d"
msgstr ""
-#: collect2.c:2133 collect2.c:2575
+#: collect2.c:2131 collect2.c:2572
#, c-format
msgid "execv %s"
msgstr ""
-#: collect2.c:2187
+#: collect2.c:2185
#, c-format
msgid "init function found in object %s"
msgstr ""
-#: collect2.c:2195
+#: collect2.c:2193
#, c-format
msgid "fini function found in object %s"
msgstr ""
-#: collect2.c:2218 collect2.c:2624
+#: collect2.c:2216 collect2.c:2621
msgid "fclose"
msgstr ""
-#: collect2.c:2263
+#: collect2.c:2261
#, c-format
msgid "unable to open file '%s'"
msgstr ""
-#: collect2.c:2265
+#: collect2.c:2263
#, c-format
msgid "unable to stat file '%s'"
msgstr ""
-#: collect2.c:2271
+#: collect2.c:2269
#, c-format
msgid "unable to mmap file '%s'"
msgstr ""
-#: collect2.c:2424
+#: collect2.c:2422
msgid "not found\n"
msgstr ""
-#: collect2.c:2426 collect2.c:2603
+#: collect2.c:2424 collect2.c:2600
#, c-format
msgid "dynamic dependency %s not found"
msgstr ""
-#: collect2.c:2446
+#: collect2.c:2444
#, c-format
msgid "bad magic number in file '%s'"
msgstr ""
-#: collect2.c:2468
+#: collect2.c:2466
msgid "dynamic dependencies.\n"
msgstr ""
-#: collect2.c:2527
+#: collect2.c:2524
msgid "cannot find `ldd'"
msgstr ""
-#: collect2.c:2588
+#: collect2.c:2585
msgid ""
"\n"
"ldd output with constructors/destructors.\n"
msgstr ""
-#: collect2.c:2615
+#: collect2.c:2612
#, c-format
msgid "unable to open dynamic dependency '%s'"
msgstr ""
-#: collect2.c:2764
+#: collect2.c:2763
#, c-format
msgid "%s: not a COFF file"
msgstr ""
-#: collect2.c:2883
+#: collect2.c:2882
#, c-format
msgid "%s: cannot open as COFF file"
msgstr ""
-#: collect2.c:2939
+#: collect2.c:2938
#, c-format
msgid "library lib%s not found"
msgstr ""
-#: collect2.c:3034
+#: collect2.c:3033
#, c-format
msgid "open %s"
msgstr ""
-#: collect2.c:3057
+#: collect2.c:3056
msgid "incompatibilities between object file & expected values"
msgstr ""
-#: collect2.c:3130
+#: collect2.c:3129
#, c-format
msgid ""
"\n"
"Processing symbol table #%d, offset = 0x%.8lx, kind = %s\n"
msgstr ""
-#: collect2.c:3139
+#: collect2.c:3138
msgid "string section missing"
msgstr ""
-#: collect2.c:3142
+#: collect2.c:3141
msgid "section pointer missing"
msgstr ""
-#: collect2.c:3190
+#: collect2.c:3189
msgid "no symbol table found"
msgstr ""
-#: collect2.c:3203
+#: collect2.c:3202
msgid "no cmd_strings found"
msgstr ""
-#: collect2.c:3215
+#: collect2.c:3214
msgid ""
"\n"
"Updating header and load commands.\n"
"\n"
msgstr ""
-#: collect2.c:3222
+#: collect2.c:3221
#, c-format
msgid "load command map, %d cmds, new size %ld.\n"
msgstr ""
-#: collect2.c:3253
+#: collect2.c:3252
msgid ""
"writing load commands.\n"
"\n"
msgstr ""
-#: collect2.c:3273
+#: collect2.c:3272
#, c-format
msgid "close %s"
msgstr ""
-#: collect2.c:3347
+#: collect2.c:3346
msgid "could not convert 0x%l.8x into a region"
msgstr ""
-#: collect2.c:3351
+#: collect2.c:3350
#, c-format
msgid "%s function, region %d, offset = %ld (0x%.8lx)\n"
msgstr ""
-#: collect2.c:3478
+#: collect2.c:3477
msgid "bad magic number"
msgstr ""
-#: collect2.c:3479
+#: collect2.c:3478
msgid "bad header version"
msgstr ""
-#: collect2.c:3480
+#: collect2.c:3479
msgid "bad raw header version"
msgstr ""
-#: collect2.c:3481
+#: collect2.c:3480
msgid "raw header buffer too small"
msgstr ""
-#: collect2.c:3482
+#: collect2.c:3481
msgid "old raw header file"
msgstr ""
-#: collect2.c:3483
+#: collect2.c:3482
msgid "unsupported version"
msgstr ""
-#: collect2.c:3485
+#: collect2.c:3484
#, c-format
msgid "unknown {de,en}code_mach_o_hdr return value %d"
msgstr ""
-#: collect2.c:3505
+#: collect2.c:3504
#, c-format
msgid "fstat %s"
msgstr ""
-#: collect2.c:3542 collect2.c:3590
+#: collect2.c:3541 collect2.c:3589
#, c-format
msgid "lseek %s 0"
msgstr ""
-#: collect2.c:3546
+#: collect2.c:3545
#, c-format
msgid "read %s"
msgstr ""
-#: collect2.c:3549
+#: collect2.c:3548
#, c-format
msgid "read %ld bytes, expected %ld, from %s"
msgstr ""
-#: collect2.c:3570
+#: collect2.c:3569
#, c-format
msgid "msync %s"
msgstr ""
-#: collect2.c:3577
+#: collect2.c:3576
#, c-format
msgid "munmap %s"
msgstr ""
-#: collect2.c:3594
+#: collect2.c:3593
#, c-format
msgid "write %s"
msgstr ""
-#: collect2.c:3597
+#: collect2.c:3596
#, c-format
msgid "wrote %ld bytes, expected %ld, to %s"
msgstr ""
-#: combine.c:12941
+#: combine.c:13254
#, c-format
msgid ""
";; Combiner statistics: %d attempts, %d substitutions (%d requiring new "
@@ -4020,7 +4148,7 @@ msgid ""
"\n"
msgstr ""
-#: combine.c:12951
+#: combine.c:13264
#, c-format
msgid ""
"\n"
@@ -4028,39 +4156,39 @@ msgid ""
";; %d successes.\n"
msgstr ""
-#: convert.c:72
+#: convert.c:71
msgid "cannot convert to a pointer type"
msgstr ""
-#: convert.c:267
+#: convert.c:270
msgid "pointer value used where a floating point value was expected"
msgstr ""
-#: convert.c:271
+#: convert.c:274
msgid "aggregate value used where a float was expected"
msgstr ""
-#: convert.c:297
+#: convert.c:300
msgid "conversion to incomplete type"
msgstr ""
-#: convert.c:579 convert.c:659
+#: convert.c:582 convert.c:662
msgid "can't convert between vector values of different size"
msgstr ""
-#: convert.c:585
+#: convert.c:588
msgid "aggregate value used where an integer was expected"
msgstr ""
-#: convert.c:637 f/com.c:1100
+#: convert.c:640 f/com.c:1100
msgid "pointer value used where a complex was expected"
msgstr ""
-#: convert.c:641 f/com.c:1102
+#: convert.c:644 f/com.c:1102
msgid "aggregate value used where a complex was expected"
msgstr ""
-#: convert.c:665
+#: convert.c:668
msgid "can't convert value to a vector"
msgstr ""
@@ -4076,7 +4204,7 @@ msgstr ""
msgid "stdout"
msgstr ""
-#: cpperror.c:193 gcc.c:6667
+#: cpperror.c:193 gcc.c:6652
#, c-format
msgid "%s: %s"
msgstr ""
@@ -4248,631 +4376,583 @@ msgstr ""
msgid "division by zero in #if"
msgstr ""
-#: cppfiles.c:413
+#: cppfiles.c:526
#, c-format
msgid "%s is too large"
msgstr ""
-#: cppfiles.c:449
+#: cppfiles.c:562
#, c-format
msgid "%s is shorter than expected"
msgstr ""
-#: cppfiles.c:463
+#: cppfiles.c:576
#, c-format
msgid "%s is a block device"
msgstr ""
-#: cppfiles.c:596
+#: cppfiles.c:709
#, c-format
msgid "no include path in which to find %s"
msgstr ""
-#: cppfiles.c:670
+#: cppfiles.c:795
msgid "Multiple include guards may be useful for:\n"
msgstr ""
-#: cppfiles.c:1016
+#: cppfiles.c:1162
msgid "absolute file name in remap_filename"
msgstr ""
-#: cppinit.c:222
-#, c-format
-msgid "ignoring nonexistent directory \"%s\"\n"
-msgstr ""
-
-#: cppinit.c:229
-#, c-format
-msgid "%s: Not a directory"
-msgstr ""
-
-#: cppinit.c:285
-#, c-format
-msgid "ignoring duplicate directory \"%s\"\n"
-msgstr ""
-
-#: cppinit.c:323
-msgid " as it is a non-system directory that duplicates a system directory\n"
-msgstr ""
-
-#: cppinit.c:861
+#: cppinit.c:378
msgid "cppchar_t must be an unsigned type"
msgstr ""
-#: cppinit.c:865
+#: cppinit.c:382
#, c-format
msgid ""
"preprocessor arithmetic has maximum precision of %lu bits; target requires %"
"lu bits"
msgstr ""
-#: cppinit.c:871
+#: cppinit.c:388
msgid "CPP arithmetic must be at least as precise as a target int"
msgstr ""
-#: cppinit.c:874
+#: cppinit.c:391
msgid "target char is less than 8 bits wide"
msgstr ""
-#: cppinit.c:878
+#: cppinit.c:395
msgid "target wchar_t is narrower than target char"
msgstr ""
-#: cppinit.c:882
+#: cppinit.c:399
msgid "target int is narrower than target char"
msgstr ""
-#: cppinit.c:886
+#: cppinit.c:403
msgid "CPP half-integer narrower than CPP character"
msgstr ""
-#: cppinit.c:890
+#: cppinit.c:407
#, c-format
msgid ""
"CPP on this host cannot handle wide character constants over %lu bits, but "
"the target requires %lu bits"
msgstr ""
-#: cppinit.c:956
-msgid "#include \"...\" search starts here:\n"
-msgstr ""
-
-#: cppinit.c:960
-msgid "#include <...> search starts here:\n"
-msgstr ""
-
-#: cppinit.c:963
-msgid "End of search list.\n"
-msgstr ""
-
-#: cppinit.c:1039
-msgid "<built-in>"
-msgstr ""
-
-#: cppinit.c:1041
-msgid "<command line>"
-msgstr ""
-
-#. Irix6 "cc -n32" and OSF4 cc have problems with char foo[] = ("string");
-#. I.e. a const string initializer with parens around it. That is
-#. what N_("string") resolves to, so we make no_* be macros instead.
-#: cppinit.c:1146
-#, c-format
-msgid "assertion missing after %s"
-msgstr ""
-
-#: cppinit.c:1147
-#, c-format
-msgid "directory name missing after %s"
-msgstr ""
-
-#: cppinit.c:1148
-#, c-format
-msgid "file name missing after %s"
-msgstr ""
-
-#: cppinit.c:1149
-#, c-format
-msgid "macro name missing after %s"
-msgstr ""
-
-#: cppinit.c:1150
-#, c-format
-msgid "path name missing after %s"
-msgstr ""
-
-#: cppinit.c:1352
-msgid "-I- specified twice"
-msgstr ""
-
-#: cpplex.c:151
+#: cpplex.c:161
#, c-format
msgid "trigraph ??%c converted to %c"
msgstr ""
-#: cpplex.c:159
+#: cpplex.c:169
#, c-format
msgid "trigraph ??%c ignored"
msgstr ""
-#: cpplex.c:216
+#: cpplex.c:226
msgid "backslash and newline separated by space"
msgstr ""
-#: cpplex.c:223 cpptrad.c:160
+#: cpplex.c:233 cpptrad.c:160
msgid "backslash-newline at end of file"
msgstr ""
-#: cpplex.c:289 cpptrad.c:201
+#: cpplex.c:299 cpptrad.c:201
msgid "\"/*\" within comment"
msgstr ""
-#: cpplex.c:397
+#: cpplex.c:407
msgid "null character(s) ignored"
msgstr ""
-#: cpplex.c:404
+#: cpplex.c:414
#, c-format
msgid "%s in preprocessing directive"
msgstr ""
-#: cpplex.c:477
+#: cpplex.c:487
#, c-format
msgid "attempt to use poisoned \"%s\""
msgstr ""
-#: cpplex.c:485
+#: cpplex.c:495
msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
msgstr ""
-#: cpplex.c:557
+#: cpplex.c:567
msgid "'$' character(s) in identifier or number"
msgstr ""
-#: cpplex.c:700
+#: cpplex.c:710
#, c-format
msgid "missing terminating %c character"
msgstr ""
-#: cpplex.c:713
+#: cpplex.c:723
msgid "null character(s) preserved in literal"
msgstr ""
-#: cpplex.c:917 cpptrad.c:489
+#: cpplex.c:927 cpptrad.c:489
msgid "no newline at end of file"
msgstr ""
-#: cpplex.c:1094 cpptrad.c:215
+#: cpplex.c:1104 cpptrad.c:215
msgid "unterminated comment"
msgstr ""
-#: cpplex.c:1105
+#: cpplex.c:1115
msgid "C++ style comments are not allowed in ISO C90"
msgstr ""
-#: cpplex.c:1107
+#: cpplex.c:1117
msgid "(this will be reported only once per input file)"
msgstr ""
-#: cpplex.c:1112
+#: cpplex.c:1122
msgid "multi-line comment"
msgstr ""
-#: cpplex.c:1427
+#: cpplex.c:1437
#, c-format
msgid "unknown string token %s\n"
msgstr ""
-#: cpplex.c:1440
+#: cpplex.c:1450
#, c-format
msgid "unspellable token %s"
msgstr ""
-#: cpplex.c:1697
+#: cpplex.c:1707
#, c-format
msgid "the meaning of '\\%c' is different in traditional C"
msgstr ""
-#: cpplex.c:1703
+#: cpplex.c:1713
msgid "incomplete universal-character-name"
msgstr ""
-#: cpplex.c:1717
+#: cpplex.c:1727
#, c-format
msgid "non-hex digit '%c' in universal-character-name"
msgstr ""
-#: cpplex.c:1725
+#: cpplex.c:1736
msgid "universal-character-name on EBCDIC target"
msgstr ""
-#: cpplex.c:1739
+#: cpplex.c:1750
msgid "universal-character-name out of range"
msgstr ""
-#: cpplex.c:1793
+#: cpplex.c:1812
msgid "the meaning of '\\a' is different in traditional C"
msgstr ""
-#: cpplex.c:1800
+#: cpplex.c:1819
#, c-format
msgid "non-ISO-standard escape sequence, '\\%c'"
msgstr ""
-#: cpplex.c:1811
+#: cpplex.c:1830
msgid "the meaning of '\\x' is different in traditional C"
msgstr ""
-#: cpplex.c:1830 f/lex.c:585
+#: cpplex.c:1849 f/lex.c:585
msgid "\\x used with no following hex digits"
msgstr ""
-#: cpplex.c:1835
+#: cpplex.c:1854
msgid "hex escape sequence out of range"
msgstr ""
-#: cpplex.c:1860
+#: cpplex.c:1879
msgid "octal escape sequence out of range"
msgstr ""
-#: cpplex.c:1876
+#: cpplex.c:1895
#, c-format
msgid "unknown escape sequence '\\%c'"
msgstr ""
-#: cpplex.c:1879
+#: cpplex.c:1898
#, c-format
msgid "unknown escape sequence: '\\%03o'"
msgstr ""
-#: cpplex.c:1884
+#: cpplex.c:1903
msgid "escape sequence out of range for its type"
msgstr ""
-#: cpplex.c:1975
+#: cpplex.c:1994
msgid "empty character constant"
msgstr ""
-#: cpplex.c:1985
+#: cpplex.c:2004
msgid "character constant too long for its type"
msgstr ""
-#: cpplex.c:1988
+#: cpplex.c:2007
msgid "multi-character character constant"
msgstr ""
-#: cpplib.c:227
+#: cpplib.c:232
#, c-format
msgid "extra tokens at end of #%s directive"
msgstr ""
-#: cpplib.c:317
+#: cpplib.c:322
#, c-format
msgid "#%s is a GCC extension"
msgstr ""
-#: cpplib.c:329
+#: cpplib.c:334
msgid "suggest not using #elif in traditional C"
msgstr ""
-#: cpplib.c:332
+#: cpplib.c:337
#, c-format
msgid "traditional C ignores #%s with the # indented"
msgstr ""
-#: cpplib.c:336
+#: cpplib.c:341
#, c-format
msgid "suggest hiding #%s from traditional C with an indented #"
msgstr ""
-#: cpplib.c:360
+#: cpplib.c:365
msgid "embedding a directive within macro arguments is not portable"
msgstr ""
-#: cpplib.c:380
+#: cpplib.c:385
msgid "style of line directive is a GCC extension"
msgstr ""
-#: cpplib.c:429
+#: cpplib.c:435
#, c-format
msgid "invalid preprocessing directive #%s"
msgstr ""
-#: cpplib.c:501
+#: cpplib.c:507
msgid "\"defined\" cannot be used as a macro name"
msgstr ""
-#: cpplib.c:507
+#: cpplib.c:513
#, c-format
msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
msgstr ""
-#: cpplib.c:510
+#: cpplib.c:516
#, c-format
msgid "no macro name given in #%s directive"
msgstr ""
-#: cpplib.c:513
+#: cpplib.c:519
msgid "macro names must be identifiers"
msgstr ""
-#: cpplib.c:553
+#: cpplib.c:559
#, c-format
msgid "undefining \"%s\""
msgstr ""
-#: cpplib.c:599
+#: cpplib.c:605
msgid "missing terminating > character"
msgstr ""
-#: cpplib.c:638
+#: cpplib.c:644
#, c-format
msgid "#%s expects \"FILENAME\" or <FILENAME>"
msgstr ""
-#: cpplib.c:649
+#: cpplib.c:655
#, c-format
msgid "empty file name in #%s"
msgstr ""
-#: cpplib.c:668
-msgid "#include_next in primary source file"
+#: cpplib.c:676
+msgid "#include nested too deeply"
msgstr ""
-#: cpplib.c:675
+#: cpplib.c:705
msgid "#import is obsolete, use an #ifndef wrapper in the header file"
msgstr ""
-#: cpplib.c:683
-msgid "#include nested too deeply"
+#: cpplib.c:722
+msgid "#include_next in primary source file"
msgstr ""
-#: cpplib.c:740
+#: cpplib.c:750
#, c-format
msgid "invalid flag \"%s\" in line directive"
msgstr ""
-#: cpplib.c:815
+#: cpplib.c:825
#, c-format
msgid "\"%s\" after #line is not a positive integer"
msgstr ""
-#: cpplib.c:821
+#: cpplib.c:831
msgid "line number out of range"
msgstr ""
-#: cpplib.c:832 cpplib.c:903
+#: cpplib.c:842 cpplib.c:913
#, c-format
msgid "\"%s\" is not a valid filename"
msgstr ""
-#: cpplib.c:867
+#: cpplib.c:877
#, c-format
msgid "\"%s\" after # is not a positive integer"
msgstr ""
-#: cpplib.c:974
+#: cpplib.c:984
msgid "invalid #ident directive"
msgstr ""
-#: cpplib.c:1062
+#: cpplib.c:1072
#, c-format
msgid "registering \"%s\" as both a pragma and a pragma namespace"
msgstr ""
-#: cpplib.c:1065
+#: cpplib.c:1075
#, c-format
msgid "#pragma %s %s is already registered"
msgstr ""
-#: cpplib.c:1068
+#: cpplib.c:1078
#, c-format
msgid "#pragma %s is already registered"
msgstr ""
-#: cpplib.c:1142
+#: cpplib.c:1232
msgid "#pragma once is obsolete"
msgstr ""
-#: cpplib.c:1145
+#: cpplib.c:1235
msgid "#pragma once in main file"
msgstr ""
-#: cpplib.c:1169
+#: cpplib.c:1259
msgid "invalid #pragma GCC poison directive"
msgstr ""
-#: cpplib.c:1178
+#: cpplib.c:1268
#, c-format
msgid "poisoning existing macro \"%s\""
msgstr ""
-#: cpplib.c:1200
+#: cpplib.c:1290
msgid "#pragma system_header ignored outside include file"
msgstr ""
-#: cpplib.c:1225
+#: cpplib.c:1315
#, c-format
msgid "cannot find source %s"
msgstr ""
-#: cpplib.c:1229
+#: cpplib.c:1319
#, c-format
msgid "current file is older than %s"
msgstr ""
-#: cpplib.c:1345
+#: cpplib.c:1435
msgid "_Pragma takes a parenthesized string literal"
msgstr ""
-#: cpplib.c:1428
+#: cpplib.c:1518
msgid "#else without #if"
msgstr ""
-#: cpplib.c:1433
+#: cpplib.c:1523
msgid "#else after #else"
msgstr ""
-#: cpplib.c:1435 cpplib.c:1469
+#: cpplib.c:1525 cpplib.c:1559
msgid "the conditional began here"
msgstr ""
-#: cpplib.c:1462
+#: cpplib.c:1552
msgid "#elif without #if"
msgstr ""
-#: cpplib.c:1467
+#: cpplib.c:1557
msgid "#elif after #else"
msgstr ""
-#: cpplib.c:1498
+#: cpplib.c:1588
msgid "#endif without #if"
msgstr ""
-#: cpplib.c:1581
+#: cpplib.c:1671
msgid "missing '(' after predicate"
msgstr ""
-#: cpplib.c:1596
+#: cpplib.c:1686
msgid "missing ')' to complete answer"
msgstr ""
-#: cpplib.c:1616
+#: cpplib.c:1706
msgid "predicate's answer is empty"
msgstr ""
-#: cpplib.c:1646
+#: cpplib.c:1736
msgid "assertion without predicate"
msgstr ""
-#: cpplib.c:1648
+#: cpplib.c:1738
msgid "predicate must be an identifier"
msgstr ""
-#: cpplib.c:1737
+#: cpplib.c:1827
#, c-format
msgid "\"%s\" re-asserted"
msgstr ""
-#: cpplib.c:1967
+#: cpplib.c:2057
#, c-format
msgid "unterminated #%s"
msgstr ""
-#: cppmacro.c:96
+#: cppmacro.c:94
#, c-format
msgid "macro \"%s\" is not used"
msgstr ""
-#: cppmacro.c:141 cppmacro.c:296
+#: cppmacro.c:139 cppmacro.c:294
#, c-format
msgid "invalid built-in macro \"%s\""
msgstr ""
-#: cppmacro.c:236
+#: cppmacro.c:234
msgid "could not determine date and time"
msgstr ""
-#: cppmacro.c:409
+#: cppmacro.c:407
msgid "invalid string literal, ignoring final '\\'"
msgstr ""
-#: cppmacro.c:506
+#: cppmacro.c:504
#, c-format
msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
msgstr ""
-#: cppmacro.c:548
+#: cppmacro.c:546
msgid "ISO C99 requires rest arguments to be used"
msgstr ""
-#: cppmacro.c:553
+#: cppmacro.c:551
#, c-format
msgid "macro \"%s\" requires %u arguments, but only %u given"
msgstr ""
-#: cppmacro.c:558
+#: cppmacro.c:556
#, c-format
msgid "macro \"%s\" passed %u arguments, but takes just %u"
msgstr ""
-#: cppmacro.c:671 cpptrad.c:776
+#: cppmacro.c:669 cpptrad.c:776
#, c-format
msgid "unterminated argument list invoking macro \"%s\""
msgstr ""
-#: cppmacro.c:778
+#: cppmacro.c:776
#, c-format
msgid "function-like macro \"%s\" must be used with arguments in traditional C"
msgstr ""
-#: cppmacro.c:1315
+#: cppmacro.c:1313
#, c-format
msgid "duplicate macro parameter \"%s\""
msgstr ""
-#: cppmacro.c:1362
+#: cppmacro.c:1360
#, c-format
msgid "\"%s\" may not appear in macro parameter list"
msgstr ""
-#: cppmacro.c:1370
+#: cppmacro.c:1368
msgid "macro parameters must be comma-separated"
msgstr ""
-#: cppmacro.c:1387
+#: cppmacro.c:1385
msgid "parameter name missing"
msgstr ""
-#: cppmacro.c:1402
+#: cppmacro.c:1400
msgid "anonymous variadic macros were introduced in C99"
msgstr ""
-#: cppmacro.c:1406
+#: cppmacro.c:1404
msgid "ISO C does not permit named variadic macros"
msgstr ""
-#: cppmacro.c:1415
+#: cppmacro.c:1413
msgid "missing ')' in macro parameter list"
msgstr ""
-#: cppmacro.c:1484
+#: cppmacro.c:1482
msgid "ISO C requires whitespace after the macro name"
msgstr ""
-#: cppmacro.c:1512
+#: cppmacro.c:1510
msgid "'#' is not followed by a macro parameter"
msgstr ""
-#: cppmacro.c:1531
+#: cppmacro.c:1529
msgid "'##' cannot appear at either end of a macro expansion"
msgstr ""
-#: cppmacro.c:1617
+#: cppmacro.c:1615
#, c-format
msgid "\"%s\" redefined"
msgstr ""
-#: cppmacro.c:1622
+#: cppmacro.c:1620
msgid "this is the location of the previous definition"
msgstr ""
-#: cppmacro.c:1673
+#: cppmacro.c:1671
#, c-format
msgid "macro argument \"%s\" would be stringified in traditional C"
msgstr ""
-#: cppmacro.c:1698
+#: cppmacro.c:1696
#, c-format
msgid "invalid hash type %d in cpp_macro_definition"
msgstr ""
-#: cppspec.c:133
+#: cpppch.c:86 cpppch.c:323 cpppch.c:349 cpppch.c:358
+msgid "while writing precompiled header"
+msgstr ""
+
+#: cpppch.c:421
+#, c-format
+msgid "%s: not used because `%.*s' not defined"
+msgstr ""
+
+#: cpppch.c:433
+#, c-format
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
+msgstr ""
+
+#: cpppch.c:458
+#, c-format
+msgid "%s: not used because `%s' is defined"
+msgstr ""
+
+#: cpppch.c:470 cpppch.c:683
+msgid "while reading precompiled header"
+msgstr ""
+
+#: cppspec.c:108
#, c-format
msgid "\"%s\" is not a valid option to the preprocessor"
msgstr ""
-#: cppspec.c:157
+#: cppspec.c:130
msgid "too many input files"
msgstr ""
@@ -4881,59 +4961,59 @@ msgstr ""
msgid "detected recursion whilst expanding macro \"%s\""
msgstr ""
-#: cse.c:7165
+#: cse.c:7153
#, c-format
msgid ";; Processing block from %d to %d, %d sets.\n"
msgstr ""
-#: diagnostic.c:702
+#: diagnostic.c:703
msgid "((anonymous))"
msgstr ""
-#: diagnostic.c:916
+#: diagnostic.c:917
#, c-format
msgid "%s: warnings being treated as errors\n"
msgstr ""
-#: diagnostic.c:951
+#: diagnostic.c:952
#, c-format
msgid "%s: %s: "
msgstr ""
-#: diagnostic.c:1042
+#: diagnostic.c:1043
#, c-format
msgid "%s "
msgstr ""
-#: diagnostic.c:1044
+#: diagnostic.c:1045
#, c-format
msgid " %s"
msgstr ""
-#: diagnostic.c:1066
+#: diagnostic.c:1067
msgid "At top level:"
msgstr ""
-#: diagnostic.c:1071
+#: diagnostic.c:1072
#, c-format
msgid "In member function `%s':"
msgstr ""
-#: diagnostic.c:1075
+#: diagnostic.c:1076
#, c-format
msgid "In function `%s':"
msgstr ""
-#: diagnostic.c:1163
+#: diagnostic.c:1164
msgid "compilation terminated.\n"
msgstr ""
-#: diagnostic.c:1181
+#: diagnostic.c:1182
#, c-format
msgid "%s:%d: confused by earlier errors, bailing out\n"
msgstr ""
-#: diagnostic.c:1196 diagnostic.c:1304
+#: diagnostic.c:1197 diagnostic.c:1307
#, c-format
msgid ""
"Please submit a full bug report,\n"
@@ -4941,47 +5021,47 @@ msgid ""
"See %s for instructions.\n"
msgstr ""
-#: diagnostic.c:1302
+#: diagnostic.c:1305
msgid "Internal compiler error: Error reporting routines re-entered.\n"
msgstr ""
-#: diagnostic.c:1364
+#: diagnostic.c:1367
#, c-format
msgid "in %s, at %s:%d"
msgstr ""
-#: diagnostic.c:1385
+#: diagnostic.c:1388
#, c-format
msgid "In file included from %s:%d"
msgstr ""
-#: diagnostic.c:1388
+#: diagnostic.c:1391
#, c-format
msgid ""
",\n"
" from %s:%d"
msgstr ""
-#: diagnostic.c:1389
+#: diagnostic.c:1392
msgid ":\n"
msgstr ""
-#: diagnostic.c:1433 diagnostic.c:1450
+#: diagnostic.c:1436 diagnostic.c:1453
#, c-format
msgid "`%s' is deprecated (declared at %s:%d)"
msgstr ""
-#: diagnostic.c:1453
+#: diagnostic.c:1456
#, c-format
msgid "`%s' is deprecated"
msgstr ""
-#: diagnostic.c:1456
+#: diagnostic.c:1459
#, c-format
msgid "type is deprecated (declared at %s:%d)"
msgstr ""
-#: diagnostic.c:1459
+#: diagnostic.c:1462
msgid "type is deprecated"
msgstr ""
@@ -4990,33 +5070,33 @@ msgstr ""
msgid "dominator of %d should be %d, not %d"
msgstr ""
-#: dwarf2out.c:3126
+#: dwarf2out.c:3232
#, c-format
msgid "DW_LOC_OP %s not implemented\n"
msgstr ""
-#: dwarfout.c:2068
+#: dwarfout.c:2069
#, c-format
msgid "internal regno botch: `%s' has regno = %d\n"
msgstr ""
-#: dwarfout.c:6183
+#: dwarfout.c:6190
msgid "support for the DWARF1 debugging format is deprecated"
msgstr ""
-#: dwarfout.c:6280
+#: dwarfout.c:6287
msgid "can't get current directory"
msgstr ""
-#: emit-rtl.c:1153
+#: emit-rtl.c:1303
msgid "can't access real part of complex value in hard register"
msgstr ""
-#: emit-rtl.c:1175
+#: emit-rtl.c:1325
msgid "can't access imaginary part of complex value in hard register"
msgstr ""
-#: emit-rtl.c:3420
+#: emit-rtl.c:3567
msgid "ICE: emit_insn used where emit_jump_insn needed:\n"
msgstr ""
@@ -5025,39 +5105,44 @@ msgstr ""
msgid "abort in %s, at %s:%d"
msgstr ""
-#: except.c:373
+#: except.c:374
msgid "exception handling disabled, use -fexceptions to enable"
msgstr ""
-#: except.c:2971
+#: except.c:2983
msgid "argument of `__builtin_eh_return_regno' must be constant"
msgstr ""
-#: except.c:3092 except.c:3114
+#: except.c:3104 except.c:3126
msgid "__builtin_eh_return not supported on this target"
msgstr ""
-#: explow.c:1399
+#: explow.c:1400
msgid "stack limits not supported on this target"
msgstr ""
-#: expr.c:3332
+#: expr.c:3339
msgid "function using short complex types cannot be inline"
msgstr ""
-#: expr.c:6201 expr.c:6210 expr.c:6219 expr.c:6224 expr.c:6526 expr.c:6542
+#: expr.c:6296 expr.c:6305 expr.c:6314 expr.c:6319 expr.c:6628 expr.c:6644
msgid "unsupported wide integer operation"
msgstr ""
-#: expr.c:6593
+#: expr.c:6695
#, c-format
msgid "prior parameter's size depends on `%s'"
msgstr ""
-#: expr.c:6938
+#: expr.c:7041
msgid "returned value in block_exit_expr"
msgstr ""
+#. We can't make a bitwise copy of this object, so fail.
+#: expr.c:9254
+msgid "cannot take the address of an unaligned member"
+msgstr ""
+
#: final.c:1064
msgid "negative insn length"
msgstr ""
@@ -5066,46 +5151,46 @@ msgstr ""
msgid "could not split insn"
msgstr ""
-#: final.c:2842
+#: final.c:2837
msgid "invalid `asm': "
msgstr ""
-#: final.c:3029
+#: final.c:3027
msgid "nested assembly dialect alternatives"
msgstr ""
-#: final.c:3046 final.c:3058
+#: final.c:3044 final.c:3056
msgid "unterminated assembly dialect alternative"
msgstr ""
-#: final.c:3102
+#: final.c:3100
#, c-format
msgid "operand number missing after %%-letter"
msgstr ""
-#: final.c:3105 final.c:3144
+#: final.c:3103 final.c:3142
msgid "operand number out of range"
msgstr ""
-#: final.c:3163
+#: final.c:3161
#, c-format
msgid "invalid %%-code"
msgstr ""
-#: final.c:3194
+#: final.c:3192
#, c-format
msgid "`%%l' operand isn't a label"
msgstr ""
#. We can't handle floating point constants;
#. PRINT_OPERAND must handle them.
-#: final.c:3301 vmsdbgout.c:469 config/i386/i386.c:6388
-#: config/pdp11/pdp11.c:1575
+#: final.c:3299 vmsdbgout.c:469 config/i386/i386.c:6738
+#: config/pdp11/pdp11.c:1689
msgid "floating constant misused"
msgstr ""
-#: final.c:3357 vmsdbgout.c:526 config/i386/i386.c:6466
-#: config/pdp11/pdp11.c:1622
+#: final.c:3355 vmsdbgout.c:526 config/i386/i386.c:6816
+#: config/pdp11/pdp11.c:1736
msgid "invalid expression as operand"
msgstr ""
@@ -5121,155 +5206,159 @@ msgstr ""
msgid "control reaches end of non-void function"
msgstr ""
-#: flow.c:1644
+#: flow.c:1653
msgid "Attempt to delete prologue/epilogue insn:"
msgstr ""
-#: fold-const.c:2547 fold-const.c:2560
+#: fold-const.c:2599 fold-const.c:2612
#, c-format
msgid "comparison is always %d due to width of bit-field"
msgstr ""
-#: fold-const.c:3754 fold-const.c:3771
+#: fold-const.c:3806 fold-const.c:3823
#, c-format
msgid "comparison is always %d"
msgstr ""
-#: fold-const.c:3902
+#: fold-const.c:3954
msgid "`or' of unmatched not-equal tests is always 1"
msgstr ""
-#: fold-const.c:3907
+#: fold-const.c:3959
msgid "`and' of mutually exclusive equal-tests is always 0"
msgstr ""
-#: function.c:883 varasm.c:1475
+#: function.c:904 varasm.c:1468
#, c-format
msgid "size of variable `%s' is too large"
msgstr ""
-#: function.c:5408
+#: function.c:3728
+msgid "impossible constraint in `asm'"
+msgstr ""
+
+#: function.c:5458
#, c-format
msgid "`%s' might be used uninitialized in this function"
msgstr ""
-#: function.c:5415
+#: function.c:5465
#, c-format
msgid "variable `%s' might be clobbered by `longjmp' or `vfork'"
msgstr ""
-#: function.c:5434
+#: function.c:5484
#, c-format
msgid "argument `%s' might be clobbered by `longjmp' or `vfork'"
msgstr ""
-#: function.c:6299
+#: function.c:6351
msgid "function returns an aggregate"
msgstr ""
-#: function.c:6804
+#: function.c:6857
#, c-format
msgid "unused parameter `%s'"
msgstr ""
-#: gcc.c:1181
+#: gcc.c:1176
#, c-format
msgid "ambiguous abbreviation %s"
msgstr ""
-#: gcc.c:1208
+#: gcc.c:1203
#, c-format
msgid "incomplete `%s' option"
msgstr ""
-#: gcc.c:1219
+#: gcc.c:1214
#, c-format
msgid "missing argument to `%s' option"
msgstr ""
-#: gcc.c:1232
+#: gcc.c:1227
#, c-format
msgid "extraneous argument to `%s' option"
msgstr ""
-#: gcc.c:1564
+#: gcc.c:1559
msgid "Using built-in specs.\n"
msgstr ""
-#: gcc.c:1745
+#: gcc.c:1740
#, c-format
msgid ""
"Setting spec %s to '%s'\n"
"\n"
msgstr ""
-#: gcc.c:1852
+#: gcc.c:1847
#, c-format
msgid "Reading specs from %s\n"
msgstr ""
-#: gcc.c:1950 gcc.c:1969
+#: gcc.c:1945 gcc.c:1964
#, c-format
msgid "specs %%include syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:1977
+#: gcc.c:1972
#, c-format
msgid "could not find specs file %s\n"
msgstr ""
-#: gcc.c:1994 gcc.c:2002 gcc.c:2011 gcc.c:2020
+#: gcc.c:1989 gcc.c:1997 gcc.c:2006 gcc.c:2015
#, c-format
msgid "specs %%rename syntax malformed after %ld characters"
msgstr ""
-#: gcc.c:2029
+#: gcc.c:2024
#, c-format
msgid "specs %s spec was not found to be renamed"
msgstr ""
-#: gcc.c:2036
+#: gcc.c:2031
#, c-format
msgid "%s: attempt to rename spec '%s' to already defined spec '%s'"
msgstr ""
-#: gcc.c:2041
+#: gcc.c:2036
#, c-format
msgid "rename spec %s to %s\n"
msgstr ""
-#: gcc.c:2043
+#: gcc.c:2038
#, c-format
msgid ""
"spec is '%s'\n"
"\n"
msgstr ""
-#: gcc.c:2056
+#: gcc.c:2051
#, c-format
msgid "specs unknown %% command after %ld characters"
msgstr ""
-#: gcc.c:2067 gcc.c:2080
+#: gcc.c:2062 gcc.c:2075
#, c-format
msgid "specs file malformed after %ld characters"
msgstr ""
-#: gcc.c:2134
+#: gcc.c:2129
msgid "spec file has no spec for linking"
msgstr ""
-#: gcc.c:2659
+#: gcc.c:2654
msgid "-pipe not supported"
msgstr ""
-#: gcc.c:2714
+#: gcc.c:2709
msgid ""
"\n"
"Go ahead? (y or n) "
msgstr ""
-#: gcc.c:2840
+#: gcc.c:2835
#, c-format
msgid ""
"Internal error: %s (program %s)\n"
@@ -5277,184 +5366,184 @@ msgid ""
"See %s for instructions."
msgstr ""
-#: gcc.c:2858
+#: gcc.c:2853
#, c-format
msgid "# %s %.2f %.2f\n"
msgstr ""
-#: gcc.c:2988
+#: gcc.c:2983
#, c-format
msgid "Usage: %s [options] file...\n"
msgstr ""
-#: gcc.c:2989
+#: gcc.c:2984
msgid "Options:\n"
msgstr ""
-#: gcc.c:2991
+#: gcc.c:2986
msgid " -pass-exit-codes Exit with highest error code from a phase\n"
msgstr ""
-#: gcc.c:2992
+#: gcc.c:2987
msgid " --help Display this information\n"
msgstr ""
-#: gcc.c:2993
+#: gcc.c:2988
msgid ""
" --target-help Display target specific command line options\n"
msgstr ""
-#: gcc.c:2995
+#: gcc.c:2990
msgid " (Use '-v --help' to display command line options of sub-processes)\n"
msgstr ""
-#: gcc.c:2996
+#: gcc.c:2991
msgid " -dumpspecs Display all of the built in spec strings\n"
msgstr ""
-#: gcc.c:2997
+#: gcc.c:2992
msgid " -dumpversion Display the version of the compiler\n"
msgstr ""
-#: gcc.c:2998
+#: gcc.c:2993
msgid " -dumpmachine Display the compiler's target processor\n"
msgstr ""
-#: gcc.c:2999
+#: gcc.c:2994
msgid ""
" -print-search-dirs Display the directories in the compiler's search "
"path\n"
msgstr ""
-#: gcc.c:3000
+#: gcc.c:2995
msgid ""
" -print-libgcc-file-name Display the name of the compiler's companion "
"library\n"
msgstr ""
-#: gcc.c:3001
+#: gcc.c:2996
msgid " -print-file-name=<lib> Display the full path to library <lib>\n"
msgstr ""
-#: gcc.c:3002
+#: gcc.c:2997
msgid ""
" -print-prog-name=<prog> Display the full path to compiler component "
"<prog>\n"
msgstr ""
-#: gcc.c:3003
+#: gcc.c:2998
msgid ""
" -print-multi-directory Display the root directory for versions of "
"libgcc\n"
msgstr ""
-#: gcc.c:3004
+#: gcc.c:2999
msgid ""
" -print-multi-lib Display the mapping between command line options "
"and\n"
" multiple library search directories\n"
msgstr ""
-#: gcc.c:3007
+#: gcc.c:3002
msgid " -print-multi-os-directory Display the relative path to OS libraries\n"
msgstr ""
-#: gcc.c:3008
+#: gcc.c:3003
msgid ""
" -Wa,<options> Pass comma-separated <options> on to the "
"assembler\n"
msgstr ""
-#: gcc.c:3009
+#: gcc.c:3004
msgid ""
" -Wp,<options> Pass comma-separated <options> on to the "
"preprocessor\n"
msgstr ""
-#: gcc.c:3010
+#: gcc.c:3005
msgid ""
" -Wl,<options> Pass comma-separated <options> on to the linker\n"
msgstr ""
-#: gcc.c:3011
+#: gcc.c:3006
msgid " -Xassembler <arg> Pass <arg> on to the assembler\n"
msgstr ""
-#: gcc.c:3012
+#: gcc.c:3007
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n"
msgstr ""
-#: gcc.c:3013
+#: gcc.c:3008
msgid " -Xlinker <arg> Pass <arg> on to the linker\n"
msgstr ""
-#: gcc.c:3014
+#: gcc.c:3009
msgid " -save-temps Do not delete intermediate files\n"
msgstr ""
-#: gcc.c:3015
+#: gcc.c:3010
msgid " -pipe Use pipes rather than intermediate files\n"
msgstr ""
-#: gcc.c:3016
+#: gcc.c:3011
msgid " -time Time the execution of each subprocess\n"
msgstr ""
-#: gcc.c:3017
+#: gcc.c:3012
msgid ""
" -specs=<file> Override built-in specs with the contents of "
"<file>\n"
msgstr ""
-#: gcc.c:3018
+#: gcc.c:3013
msgid ""
" -std=<standard> Assume that the input sources are for <standard>\n"
msgstr ""
-#: gcc.c:3019
+#: gcc.c:3014
msgid ""
" -B <directory> Add <directory> to the compiler's search paths\n"
msgstr ""
-#: gcc.c:3020
+#: gcc.c:3015
msgid " -b <machine> Run gcc for target <machine>, if installed\n"
msgstr ""
-#: gcc.c:3021
+#: gcc.c:3016
msgid ""
" -V <version> Run gcc version number <version>, if installed\n"
msgstr ""
-#: gcc.c:3022
+#: gcc.c:3017
msgid ""
" -v Display the programs invoked by the compiler\n"
msgstr ""
-#: gcc.c:3023
+#: gcc.c:3018
msgid ""
" -### Like -v but options quoted and commands not "
"executed\n"
msgstr ""
-#: gcc.c:3024
+#: gcc.c:3019
msgid ""
" -E Preprocess only; do not compile, assemble or "
"link\n"
msgstr ""
-#: gcc.c:3025
+#: gcc.c:3020
msgid " -S Compile only; do not assemble or link\n"
msgstr ""
-#: gcc.c:3026
+#: gcc.c:3021
msgid " -c Compile and assemble, but do not link\n"
msgstr ""
-#: gcc.c:3027
+#: gcc.c:3022
msgid " -o <file> Place the output into <file>\n"
msgstr ""
-#: gcc.c:3028
+#: gcc.c:3023
msgid ""
" -x <language> Specify the language of the following input "
"files\n"
@@ -5465,7 +5554,7 @@ msgid ""
"extension\n"
msgstr ""
-#: gcc.c:3035
+#: gcc.c:3030
#, c-format
msgid ""
"\n"
@@ -5474,97 +5563,97 @@ msgid ""
" other options on to these processes the -W<letter> options must be used.\n"
msgstr ""
-#: gcc.c:3170
+#: gcc.c:3165
#, c-format
msgid "`-%c' option must have argument"
msgstr ""
-#: gcc.c:3192
+#: gcc.c:3187
#, c-format
msgid "couldn't run `%s': %s"
msgstr ""
#. translate_options () has turned --version into -fversion.
-#: gcc.c:3369
+#: gcc.c:3364
#, c-format
msgid "%s (GCC) %s\n"
msgstr ""
-#: gcc.c:3370 gcov.c:357
+#: gcc.c:3365 gcov.c:357
msgid "Copyright (C) 2002 Free Software Foundation, Inc.\n"
msgstr ""
-#: gcc.c:3372 gcov.c:359
+#: gcc.c:3367 gcov.c:359
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 ""
-#: gcc.c:3473
+#: gcc.c:3468
msgid "argument to `-Xlinker' is missing"
msgstr ""
-#: gcc.c:3481
+#: gcc.c:3476
msgid "argument to `-Xpreprocessor' is missing"
msgstr ""
-#: gcc.c:3488
+#: gcc.c:3483
msgid "argument to `-Xassembler' is missing"
msgstr ""
-#: gcc.c:3495
+#: gcc.c:3490
msgid "argument to `-l' is missing"
msgstr ""
-#: gcc.c:3512
+#: gcc.c:3507
msgid "argument to `-specs' is missing"
msgstr ""
-#: gcc.c:3527
+#: gcc.c:3522
msgid "argument to `-specs=' is missing"
msgstr ""
-#: gcc.c:3564
+#: gcc.c:3559
#, c-format
msgid "`-%c' must come at the start of the command line"
msgstr ""
-#: gcc.c:3573
+#: gcc.c:3568
msgid "argument to `-B' is missing"
msgstr ""
-#: gcc.c:3746
+#: gcc.c:3741
msgid "cannot specify -o with -c or -S and multiple compilations"
msgstr ""
-#: gcc.c:3752
+#: gcc.c:3747
msgid "warning: -pipe ignored because -save-temps specified"
msgstr ""
-#: gcc.c:3756
+#: gcc.c:3751
msgid "warning: -pipe ignored because -time specified"
msgstr ""
-#: gcc.c:3956
+#: gcc.c:3960
msgid "argument to `-x' is missing"
msgstr ""
-#: gcc.c:3984
+#: gcc.c:3988
#, c-format
msgid "argument to `-%s' is missing"
msgstr ""
-#: gcc.c:4046
+#: gcc.c:4050
#, c-format
msgid "warning: `-x %s' after last input file has no effect"
msgstr ""
-#: gcc.c:4386
+#: gcc.c:4408
msgid "invalid specification! Bug in cc"
msgstr ""
-#: gcc.c:4540
+#: gcc.c:4562
#, c-format
msgid "%s\n"
msgstr ""
@@ -5572,115 +5661,115 @@ msgstr ""
#. Catch the case where a spec string contains something like
#. '%{foo:%*}'. ie there is no * in the pattern on the left
#. hand side of the :.
-#: gcc.c:5176
+#: gcc.c:5211
#, c-format
msgid "spec failure: '%%*' has not been initialized by pattern match"
msgstr ""
-#: gcc.c:5185
+#: gcc.c:5220
#, c-format
msgid "warning: use of obsolete %%[ operator in specs"
msgstr ""
-#: gcc.c:5203
+#: gcc.c:5238
#, c-format
msgid "Processing spec %c%s%c, which is '%s'\n"
msgstr ""
-#: gcc.c:5323
+#: gcc.c:5301
#, c-format
msgid "spec failure: unrecognized spec option '%c'"
msgstr ""
-#: gcc.c:5404
+#: gcc.c:5382
#, c-format
msgid "unknown spec function `%s'"
msgstr ""
-#: gcc.c:5423
+#: gcc.c:5401
#, c-format
msgid "error in args to spec function `%s'"
msgstr ""
-#: gcc.c:5472
+#: gcc.c:5450
msgid "malformed spec function name"
msgstr ""
#. )
-#: gcc.c:5475
+#: gcc.c:5453
msgid "no arguments for spec function"
msgstr ""
-#: gcc.c:5494
+#: gcc.c:5472
msgid "malformed spec function arguments"
msgstr ""
-#: gcc.c:6320
+#: gcc.c:6299
#, c-format
msgid "unrecognized option `-%s'"
msgstr ""
-#: gcc.c:6326
+#: gcc.c:6305
#, c-format
msgid "install: %s%s\n"
msgstr ""
-#: gcc.c:6327
+#: gcc.c:6306
#, c-format
msgid "programs: %s\n"
msgstr ""
-#: gcc.c:6328
+#: gcc.c:6307
#, c-format
msgid "libraries: %s\n"
msgstr ""
-#: gcc.c:6385
+#: gcc.c:6364
msgid ""
"\n"
"For bug reporting instructions, please see:\n"
msgstr ""
-#: gcc.c:6401
+#: gcc.c:6380
#, c-format
msgid "Configured with: %s\n"
msgstr ""
-#: gcc.c:6415
+#: gcc.c:6394
#, c-format
msgid "Thread model: %s\n"
msgstr ""
-#: gcc.c:6426
+#: gcc.c:6405
#, c-format
msgid "gcc version %s\n"
msgstr ""
-#: gcc.c:6428
+#: gcc.c:6407
#, c-format
msgid "gcc driver version %s executing gcc version %s\n"
msgstr ""
-#: gcc.c:6436
+#: gcc.c:6415
msgid "no input files"
msgstr ""
-#: gcc.c:6474
+#: gcc.c:6453
#, c-format
msgid "%s: %s compiler not installed on this system"
msgstr ""
-#: gcc.c:6549
+#: gcc.c:6534
#, c-format
msgid "%s: linker input file unused because linking not done"
msgstr ""
-#: gcc.c:6592
+#: gcc.c:6577
#, c-format
msgid "language %s not recognized"
msgstr ""
-#: gcc.c:6695
+#: gcc.c:6680
msgid "internal gcc abort"
msgstr ""
@@ -5927,239 +6016,237 @@ msgstr ""
msgid "branch %2d never executed\n"
msgstr ""
-#: gcse.c:758
+#: gcse.c:764
#, c-format
msgid "GCSE disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
msgstr ""
-#: gcse.c:770
+#: gcse.c:776 gcse.c:7629
#, c-format
msgid "GCSE disabled: %d basic blocks and %d registers"
msgstr ""
-#: genautomata.c:1492
+#: gcse.c:7617
+#, c-format
+msgid "BYPASS disabled: %d > 1000 basic blocks and %d >= 20 edges/basic block"
+msgstr ""
+
+#: genautomata.c:1548
#, c-format
msgid "Name `%s' contains quotes"
msgstr ""
-#: genautomata.c:1623
+#: genautomata.c:1682
#, c-format
msgid "invalid string `%s' in define_cpu_unit"
msgstr ""
-#: genautomata.c:1652
+#: genautomata.c:1714
#, c-format
msgid "invalid string `%s' in define_query_cpu_unit"
msgstr ""
-#: genautomata.c:1684 genautomata.c:1687
+#: genautomata.c:1746 genautomata.c:1749
#, c-format
msgid "invalid string `%s' in define_bypass"
msgstr ""
-#: genautomata.c:1722
+#: genautomata.c:1784
#, c-format
msgid "invalid first string `%s' in exclusion_set"
msgstr ""
-#: genautomata.c:1726
+#: genautomata.c:1788
#, c-format
msgid "invalid second string `%s' in exclusion_set"
msgstr ""
-#: genautomata.c:1762
-#, c-format
-msgid "invalid first string `%s' in presence_set"
-msgstr ""
-
-#: genautomata.c:1766
-#, c-format
-msgid "invalid second string `%s' in presence_set"
-msgstr ""
-
-#: genautomata.c:1802
-#, c-format
-msgid "invalid first string `%s' in absence_set"
-msgstr ""
-
-#: genautomata.c:1806
-#, c-format
-msgid "invalid second string `%s' in absence_set"
-msgstr ""
-
-#: genautomata.c:1839
+#: genautomata.c:1942
#, c-format
msgid "invalid string `%s' in define_automaton"
msgstr ""
-#: genautomata.c:1870
+#: genautomata.c:1973
#, c-format
msgid "invalid option `%s' in automata_option"
msgstr ""
-#: genautomata.c:1892
+#: genautomata.c:1995
#, c-format
msgid "garbage after ) in reservation `%s'"
msgstr ""
-#: genautomata.c:1923 genautomata.c:1956 genautomata.c:1983
+#: genautomata.c:2026 genautomata.c:2059 genautomata.c:2086
#, c-format
msgid "invalid `%s' in reservation `%s'"
msgstr ""
-#: genautomata.c:1934
+#: genautomata.c:2037
#, c-format
msgid "repetition `%s' <= 1 in reservation `%s'"
msgstr ""
-#: genautomata.c:2427
+#: genautomata.c:2530
#, c-format
msgid "unit `%s' in exclusion is not declared"
msgstr ""
-#: genautomata.c:2429
+#: genautomata.c:2532
#, c-format
msgid "`%s' in exclusion is not unit"
msgstr ""
-#: genautomata.c:2467
+#: genautomata.c:2570
#, c-format
msgid "unit `%s' excludes itself"
msgstr ""
-#: genautomata.c:2475
+#: genautomata.c:2578
#, c-format
msgid "units `%s' and `%s' in exclusion set belong to different automata"
msgstr ""
-#: genautomata.c:2605 genautomata.c:2611
+#: genautomata.c:2758
+#, c-format
+msgid "unit `%s' requires own absence"
+msgstr ""
+
+#: genautomata.c:2786 genautomata.c:2792
#, c-format
msgid "unit `%s' excludes and requires presence of `%s'"
msgstr ""
-#: genautomata.c:2625 genautomata.c:2631
+#: genautomata.c:2806 genautomata.c:2812
#, c-format
msgid "unit `%s' requires absence and presence of `%s'"
msgstr ""
-#: genautomata.c:2694 genautomata.c:2697
+#: genautomata.c:2892 genautomata.c:2895
#, c-format
msgid "repeated declaration of automaton `%s'"
msgstr ""
-#: genautomata.c:2713
+#: genautomata.c:2911
#, c-format
msgid "define_insn_reservation `%s' has negative latency time"
msgstr ""
-#: genautomata.c:2719
+#: genautomata.c:2917
#, c-format
msgid "`%s' is already used as insn reservation name"
msgstr ""
-#: genautomata.c:2725
+#: genautomata.c:2923
#, c-format
msgid "define_bypass `%s - %s' has negative latency time"
msgstr ""
-#: genautomata.c:2739
+#: genautomata.c:2937
#, c-format
msgid "automaton `%s' is not declared"
msgstr ""
-#: genautomata.c:2749
+#: genautomata.c:2947
#, c-format
msgid "define_unit `%s' without automaton when one defined"
msgstr ""
-#: genautomata.c:2755
+#: genautomata.c:2953
#, c-format
msgid "`%s' is declared as cpu unit"
msgstr ""
-#: genautomata.c:2764
+#: genautomata.c:2962
#, c-format
msgid "`%s' is declared as cpu reservation"
msgstr ""
-#: genautomata.c:2774
+#: genautomata.c:2972
#, c-format
msgid "repeated declaration of unit `%s'"
msgstr ""
-#: genautomata.c:2777
+#: genautomata.c:2975
#, c-format
msgid "repeated declaration of reservation `%s'"
msgstr ""
-#: genautomata.c:2792 genautomata.c:2795
+#: genautomata.c:2990 genautomata.c:2993
#, c-format
msgid "there is no insn reservation `%s'"
msgstr ""
-#: genautomata.c:2812 genautomata.c:2817
+#: genautomata.c:3010 genautomata.c:3015
#, c-format
msgid "the same bypass `%s - %s' is already defined"
msgstr ""
-#: genautomata.c:2822
+#: genautomata.c:3020
#, c-format
msgid "bypass `%s - %s' is already defined"
msgstr ""
-#: genautomata.c:2927 genautomata.c:2929
+#: genautomata.c:3123 genautomata.c:3125
#, c-format
msgid "automaton `%s' is not used"
msgstr ""
-#: genautomata.c:2952
+#: genautomata.c:3148
#, c-format
msgid "undeclared unit or reservation `%s'"
msgstr ""
-#: genautomata.c:3030 genautomata.c:3032
+#: genautomata.c:3226 genautomata.c:3228
#, c-format
msgid "unit `%s' is not used"
msgstr ""
-#: genautomata.c:3037 genautomata.c:3039
+#: genautomata.c:3233 genautomata.c:3235
#, c-format
msgid "reservation `%s' is not used"
msgstr ""
-#: genautomata.c:3136
+#: genautomata.c:3332
#, c-format
msgid "cycle in definition of reservation `%s'"
msgstr ""
-#: genautomata.c:5332
+#: genautomata.c:5586
+msgid "The following units do not satisfy units-automata distribution rule"
+msgstr ""
+
+#: genautomata.c:5587
+msgid " (A unit of given unit automaton should be on each reserv. altern.)"
+msgstr ""
+
+#: genautomata.c:5590
#, c-format
-msgid "Units `%s' and `%s' should be in the same automaton"
+msgid "Unit %s, reserv. %s, cycle %d"
msgstr ""
-#: genautomata.c:9440
+#: genautomata.c:9960
msgid "-split has no argument."
msgstr ""
-#: genautomata.c:9441
+#: genautomata.c:9961
msgid "option `-split' has not been implemented yet\n"
msgstr ""
-#: genautomata.c:9485 genautomata.c:9490
+#: genautomata.c:10005 genautomata.c:10010
#, c-format
msgid "Automaton `%s': Insn `%s' will never be issued"
msgstr ""
-#: genautomata.c:9497 genautomata.c:9500
+#: genautomata.c:10017 genautomata.c:10020
#, c-format
msgid "Insn `%s' will never be issued"
msgstr ""
-#: genautomata.c:9648
+#: genautomata.c:10168
msgid "Errors in DFA description"
msgstr ""
-#: genautomata.c:9731
+#: genautomata.c:10250
#, c-format
msgid "Error in writing DFA description file %s"
msgstr ""
@@ -6168,10 +6255,38 @@ msgstr ""
msgid "No input file name."
msgstr ""
-#: graph.c:422 toplev.c:1838 toplev.c:5118 f/com.c:14138 java/jcf-parse.c:914
-#: java/jcf-parse.c:1060 java/lex.c:1767 objc/objc-act.c:451
-#, c-format
-msgid "can't open %s"
+#: gengtype-yacc.c:1466
+msgid "parse error; also virtual memory exhausted"
+msgstr ""
+
+#: gengtype-yacc.c:1470
+msgid "parse error"
+msgstr ""
+
+#: ggc-common.c:414 ggc-common.c:422 ggc-common.c:499 ggc-common.c:519
+#: ggc-page.c:1953 ggc-page.c:1959 ggc-page.c:1966 ggc-page.c:1975
+msgid "can't write PCH file"
+msgstr ""
+
+#: ggc-common.c:512
+msgid "can't get position in PCH file"
+msgstr ""
+
+#: ggc-common.c:522
+msgid "can't write padding to PCH file"
+msgstr ""
+
+#: ggc-common.c:574 ggc-common.c:582 ggc-common.c:589 ggc-common.c:592
+#: ggc-common.c:606 ggc-common.c:609 ggc-page.c:2067
+msgid "can't read PCH file"
+msgstr ""
+
+#: ggc-common.c:633
+msgid "had to relocate PCH"
+msgstr ""
+
+#: ggc-simple.c:511
+msgid "Generating PCH files is not supported when using ggc-simple.c"
msgstr ""
#: haifa-sched.c:198
@@ -6179,67 +6294,67 @@ msgstr ""
msgid "fix_sched_param: unknown param: %s"
msgstr ""
-#: integrate.c:174
+#: integrate.c:176
msgid "function cannot be inline"
msgstr ""
-#: integrate.c:178
+#: integrate.c:180
msgid "varargs function cannot be inline"
msgstr ""
-#: integrate.c:181
+#: integrate.c:183
msgid "function using alloca cannot be inline"
msgstr ""
-#: integrate.c:184
+#: integrate.c:186
msgid "function using setjmp cannot be inline"
msgstr ""
-#: integrate.c:187
+#: integrate.c:189
msgid "function uses __builtin_eh_return"
msgstr ""
-#: integrate.c:190
+#: integrate.c:192
msgid "function with nested functions cannot be inline"
msgstr ""
-#: integrate.c:194
+#: integrate.c:196
msgid "function with label addresses used in initializers cannot inline"
msgstr ""
-#: integrate.c:201 integrate.c:245
+#: integrate.c:203 integrate.c:247
msgid "function too large to be inline"
msgstr ""
-#: integrate.c:211
+#: integrate.c:213
msgid "no prototype, and parameter address used; cannot be inline"
msgstr ""
-#: integrate.c:218 integrate.c:263
+#: integrate.c:220 integrate.c:265
msgid "inline functions not supported for this return value type"
msgstr ""
-#: integrate.c:223
+#: integrate.c:225
msgid "function with varying-size return value cannot be inline"
msgstr ""
-#: integrate.c:230
+#: integrate.c:232
msgid "function with varying-size parameter cannot be inline"
msgstr ""
-#: integrate.c:233
+#: integrate.c:235
msgid "function with transparent unit parameter cannot be inline"
msgstr ""
-#: integrate.c:252
+#: integrate.c:254
msgid "function with computed jump cannot inline"
msgstr ""
-#: integrate.c:256
+#: integrate.c:258
msgid "function with nonlocal goto cannot be inline"
msgstr ""
-#: integrate.c:270
+#: integrate.c:272
msgid "function with target specific attribute(s) cannot be inlined"
msgstr ""
@@ -6273,52 +6388,52 @@ msgstr ""
msgid "invalid parameter `%s'"
msgstr ""
-#: profile.c:308
+#: profile.c:316
#, c-format
msgid "`%s' is not a gcov data file"
msgstr ""
-#: profile.c:321
+#: profile.c:329
#, c-format
msgid "`%s' is version `%.4s', expected version `%.4s'"
msgstr ""
-#: profile.c:338
+#: profile.c:346
#, c-format
msgid "`%s' is corrupted"
msgstr ""
-#: profile.c:371 profile.c:468 profile.c:492
+#: profile.c:379 profile.c:476 profile.c:500
#, c-format
msgid "profile mismatch for `%s'"
msgstr ""
-#: profile.c:462
+#: profile.c:470
#, c-format
msgid "No profile for function '%s' found."
msgstr ""
-#: profile.c:761
+#: profile.c:769
#, c-format
msgid "corrupted profile info: prob for %d-%d thought to be %d"
msgstr ""
-#: profile.c:1198
+#: profile.c:1214
#, c-format
msgid "error writing `%s'"
msgstr ""
-#: profile.c:1373
+#: profile.c:1401
#, c-format
msgid "cannot open %s"
msgstr ""
-#: profile.c:1379
+#: profile.c:1407
#, c-format
msgid "cannot write `%s'"
msgstr ""
-#: profile.c:1391
+#: profile.c:1419
#, c-format
msgid "file %s not found, execution counts assumed to be zero"
msgstr ""
@@ -6631,136 +6746,136 @@ msgstr ""
msgid "%s: input file names must have .c suffixes: %s\n"
msgstr ""
-#: ra.c:752
+#: ra.c:770
msgid "Didn't find a coloring.\n"
msgstr ""
-#: reg-stack.c:675
+#: reg-stack.c:677
#, c-format
msgid "output constraint %d must specify a single register"
msgstr ""
-#: reg-stack.c:685
+#: reg-stack.c:687
#, c-format
msgid "output constraint %d cannot be specified together with \"%s\" clobber"
msgstr ""
-#: reg-stack.c:708
+#: reg-stack.c:710
msgid "output regs must be grouped at top of stack"
msgstr ""
-#: reg-stack.c:745
+#: reg-stack.c:747
msgid "implicitly popped regs must be grouped at top of stack"
msgstr ""
-#: reg-stack.c:764
+#: reg-stack.c:766
#, c-format
msgid "output operand %d must use `&' constraint"
msgstr ""
-#: regclass.c:755
+#: regclass.c:759
#, c-format
msgid "can't use '%s' as a %s register"
msgstr ""
-#: regclass.c:770 config/ia64/ia64.c:4171 config/ia64/ia64.c:4178
+#: regclass.c:774 config/ia64/ia64.c:4421 config/ia64/ia64.c:4428
#, c-format
msgid "unknown register name: %s"
msgstr ""
-#: regclass.c:781
+#: regclass.c:785
msgid "global register variable follows a function definition"
msgstr ""
-#: regclass.c:785
+#: regclass.c:789
msgid "register used for two global register variables"
msgstr ""
-#: regclass.c:790
+#: regclass.c:794
msgid "call-clobbered register used for global register variable"
msgstr ""
-#: regrename.c:1901
+#: regrename.c:1906
#, c-format
msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)"
msgstr ""
-#: regrename.c:1913
+#: regrename.c:1918
#, c-format
msgid "validate_value_data: Loop in regno chain (%u)"
msgstr ""
-#: regrename.c:1916
+#: regrename.c:1921
#, c-format
msgid "validate_value_data: [%u] Bad oldest_regno (%u)"
msgstr ""
-#: regrename.c:1928
+#: regrename.c:1933
#, c-format
msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)"
msgstr ""
-#: reload.c:1227
+#: reload.c:1229
msgid "cannot reload integer constant operand in `asm'"
msgstr ""
-#: reload.c:1249
+#: reload.c:1251
msgid "impossible register constraint in `asm'"
msgstr ""
-#: reload.c:3469
+#: reload.c:3493
msgid "`&' constraint used with no register class"
msgstr ""
-#: reload.c:3637
+#: reload.c:3661
msgid "unable to generate reloads for:"
msgstr ""
-#: reload.c:3638 reload.c:3852
+#: reload.c:3662 reload.c:3876
msgid "inconsistent operand constraints in an `asm'"
msgstr ""
-#: reload1.c:1257
+#: reload1.c:1250
msgid "frame size too large for reliable stack checking"
msgstr ""
-#: reload1.c:1260
+#: reload1.c:1253
msgid "try reducing the number of local variables"
msgstr ""
-#: reload1.c:1916
+#: reload1.c:1911
#, c-format
msgid "can't find a register in class `%s' while reloading `asm'"
msgstr ""
-#: reload1.c:1920
+#: reload1.c:1915
#, c-format
msgid "unable to find a register to spill in class `%s'"
msgstr ""
-#: reload1.c:1922
+#: reload1.c:1917
msgid "this is the insn:"
msgstr ""
-#: reload1.c:3942
+#: reload1.c:3947
msgid "`asm' operand requires impossible reload"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:5056
+#: reload1.c:5061
msgid "could not find a spill register"
msgstr ""
-#: reload1.c:5061
+#: reload1.c:5066
msgid "`asm' operand constraint incompatible with operand size"
msgstr ""
#. It's the compiler's fault.
-#: reload1.c:6681
+#: reload1.c:6686
msgid "VOIDmode on an output"
msgstr ""
-#: reload1.c:6682
+#: reload1.c:6687
msgid "output operand is constant in `asm'"
msgstr ""
@@ -6772,111 +6887,111 @@ msgstr ""
msgid "insn does not satisfy its constraints:"
msgstr ""
-#: rtl.c:560
+#: rtl.c:537
#, c-format
msgid "RTL check: access of elt %d of `%s' with last elt %d in %s, at %s:%d"
msgstr ""
-#: rtl.c:575
+#: rtl.c:552
#, c-format
msgid ""
"RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d"
msgstr ""
-#: rtl.c:591
+#: rtl.c:568
#, c-format
msgid ""
"RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %"
"s:%d"
msgstr ""
-#: rtl.c:604
+#: rtl.c:581
#, c-format
msgid "RTL check: expected code `%s', have `%s' in %s, at %s:%d"
msgstr ""
-#: rtl.c:618
+#: rtl.c:595
#, c-format
msgid "RTL check: expected code `%s' or `%s', have `%s' in %s, at %s:%d"
msgstr ""
-#: rtl.c:633
+#: rtl.c:610
#, c-format
msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d"
msgstr ""
-#: rtl.c:648
+#: rtl.c:625
#, c-format
msgid "RTL flag check: %s used with unexpected rtx code `%s' in %s, at %s:%d"
msgstr ""
-#: stmt.c:744
+#: stmt.c:764
#, c-format
msgid "jump to `%s' invalidly jumps into binding contour"
msgstr ""
-#: stmt.c:980 stmt.c:3719
+#: stmt.c:1001 stmt.c:3771
#, c-format
msgid "label `%s' used before containing binding contour"
msgstr ""
-#: stmt.c:1160
+#: stmt.c:1189
msgid "output operand constraint lacks `='"
msgstr ""
-#: stmt.c:1175
+#: stmt.c:1204
#, c-format
msgid "output constraint `%c' for operand %d is not at the beginning"
msgstr ""
-#: stmt.c:1197
+#: stmt.c:1226
msgid "operand constraint contains incorrectly positioned '+' or '='"
msgstr ""
-#: stmt.c:1203 stmt.c:1307
+#: stmt.c:1232 stmt.c:1336
#, c-format
msgid "`%%' constraint used with last operand"
msgstr ""
-#: stmt.c:1222
+#: stmt.c:1251
msgid "matching constraint not valid in output operand"
msgstr ""
-#: stmt.c:1298
+#: stmt.c:1327
#, c-format
msgid "input operand constraint contains `%c'"
msgstr ""
-#: stmt.c:1338
+#: stmt.c:1367
msgid "matching constraint references invalid operand number"
msgstr ""
-#: stmt.c:1370
+#: stmt.c:1405
#, c-format
msgid "invalid punctuation `%c' in constraint"
msgstr ""
-#: stmt.c:1420
+#: stmt.c:1456
#, c-format
msgid "asm-specifier for variable `%s' conflicts with asm clobber list"
msgstr ""
-#: stmt.c:1508
+#: stmt.c:1544
#, c-format
msgid "unknown register name `%s' in `asm'"
msgstr ""
-#: stmt.c:1516
+#: stmt.c:1552
#, c-format
msgid "PIC register `%s' clobbered in `asm'"
msgstr ""
-#: stmt.c:1565
+#: stmt.c:1601
#, c-format
msgid "more than %d operands in `asm'"
msgstr ""
-#: stmt.c:1624
+#: stmt.c:1663
#, c-format
msgid "output number %d not directly addressable"
msgstr ""
@@ -6884,122 +6999,127 @@ msgstr ""
#. ??? Leave this only until we have experience with what
#. happens in combine and elsewhere when constraints are
#. not satisfied.
-#: stmt.c:1696 stmt.c:1725
+#: stmt.c:1739 stmt.c:1771
#, c-format
msgid "asm operand %d probably doesn't match constraints"
msgstr ""
-#: stmt.c:1856
+#: stmt.c:1902
msgid "asm clobber conflict with output operand"
msgstr ""
-#: stmt.c:1861
+#: stmt.c:1907
msgid "asm clobber conflict with input operand"
msgstr ""
-#: stmt.c:1896
+#: stmt.c:1942
msgid "too many alternatives in `asm'"
msgstr ""
-#: stmt.c:1908
+#: stmt.c:1954
msgid "operand constraints for `asm' differ in number of alternatives"
msgstr ""
-#: stmt.c:1961
+#: stmt.c:2007
#, c-format
msgid "duplicate asm operand name '%s'"
msgstr ""
-#: stmt.c:2048
+#: stmt.c:2094
msgid "missing close brace for named operand"
msgstr ""
-#: stmt.c:2076
+#: stmt.c:2122
#, c-format
msgid "undefined named operand '%s'"
msgstr ""
-#: stmt.c:3656
+#: stmt.c:3706
#, c-format
msgid "unused variable `%s'"
msgstr ""
-#: stmt.c:5096
+#: stmt.c:5144
#, c-format
msgid "enumeration value `%s' not handled in switch"
msgstr ""
-#: stmt.c:5121 stmt.c:5141
+#: stmt.c:5169 stmt.c:5189
#, c-format
msgid "case value `%ld' not in enumerated type"
msgstr ""
-#: stmt.c:5124 stmt.c:5144
+#: stmt.c:5172 stmt.c:5192
#, c-format
msgid "case value `%ld' not in enumerated type `%s'"
msgstr ""
-#: stmt.c:5217
+#: stmt.c:5413
msgid "switch missing default case"
msgstr ""
-#: stor-layout.c:183
+#: stor-layout.c:192
msgid "type size can't be explicitly evaluated"
msgstr ""
-#: stor-layout.c:185
+#: stor-layout.c:194
msgid "variable-size type declared outside of any function"
msgstr ""
-#: stor-layout.c:466
+#: stor-layout.c:495
#, c-format
msgid "size of `%s' is %d bytes"
msgstr ""
-#: stor-layout.c:468
+#: stor-layout.c:497
#, c-format
msgid "size of `%s' is larger than %d bytes"
msgstr ""
-#: stor-layout.c:881 stor-layout.c:1289
+#: stor-layout.c:912 stor-layout.c:1312
#, c-format
msgid "packed attribute causes inefficient alignment for `%s'"
msgstr ""
-#: stor-layout.c:883 stor-layout.c:1291
+#: stor-layout.c:914 stor-layout.c:1314
#, c-format
msgid "packed attribute is unnecessary for `%s'"
msgstr ""
-#: stor-layout.c:898
+#: stor-layout.c:929
#, c-format
msgid "padding struct to align `%s'"
msgstr ""
-#: stor-layout.c:1253
+#: stor-layout.c:1276
msgid "padding struct size to alignment boundary"
msgstr ""
-#: stor-layout.c:1296
+#: stor-layout.c:1319
msgid "packed attribute causes inefficient alignment"
msgstr ""
-#: stor-layout.c:1298
+#: stor-layout.c:1321
msgid "packed attribute is unnecessary"
msgstr ""
-#: timevar.c:450
+#: timevar.c:322
+#, c-format
+msgid "cannot timevar_pop '%s' when top of timevars stack is '%s'"
+msgstr ""
+
+#: timevar.c:453
msgid ""
"\n"
"Execution times (seconds)\n"
msgstr ""
#. Print total time.
-#: timevar.c:500
+#: timevar.c:503
msgid " TOTAL :"
msgstr ""
-#: timevar.c:536
+#: timevar.c:539
#, c-format
msgid "time in %s: %ld.%06ld (%ld%%)\n"
msgstr ""
@@ -7014,1028 +7134,1052 @@ msgstr ""
msgid "collect: recompiling %s\n"
msgstr ""
-#: tlink.c:670
+#: tlink.c:676
#, c-format
msgid "collect: tweaking %s in %s\n"
msgstr ""
-#: tlink.c:717
+#: tlink.c:723
msgid "collect: relinking\n"
msgstr ""
-#: tlink.c:726
+#: tlink.c:732
#, c-format
msgid "ld returned %d exit status"
msgstr ""
-#: toplev.c:922
+#: toplev.c:948
msgid "Generate debugging info in default format"
msgstr ""
-#: toplev.c:923
+#: toplev.c:949
msgid "Generate debugging info in default extended format"
msgstr ""
-#: toplev.c:925
+#: toplev.c:951
msgid "Generate STABS format debug info"
msgstr ""
-#: toplev.c:926
+#: toplev.c:952
msgid "Generate extended STABS format debug info"
msgstr ""
-#: toplev.c:929
+#: toplev.c:955
msgid "Generate DWARF-1 format debug info"
msgstr ""
-#: toplev.c:931
+#: toplev.c:957
msgid "Generate extended DWARF-1 format debug info"
msgstr ""
-#: toplev.c:934
+#: toplev.c:960
msgid "Generate DWARF-2 debug info"
msgstr ""
-#: toplev.c:937
+#: toplev.c:963
msgid "Generate XCOFF format debug info"
msgstr ""
-#: toplev.c:938
+#: toplev.c:964
msgid "Generate extended XCOFF format debug info"
msgstr ""
-#: toplev.c:941
+#: toplev.c:967
msgid "Generate COFF format debug info"
msgstr ""
-#: toplev.c:944
+#: toplev.c:970
msgid "Generate VMS format debug info"
msgstr ""
-#: toplev.c:983
+#: toplev.c:1009
msgid "Perform DWARF2 duplicate elimination"
msgstr ""
-#: toplev.c:985
-msgid "Do not store floats in registers"
-msgstr ""
-
-#: toplev.c:987
-msgid "Consider all mem refs through pointers as volatile"
-msgstr ""
-
-#: toplev.c:989
-msgid "Consider all mem refs to global data to be volatile"
+#: toplev.c:1011
+msgid "Perform unused type elimination in debug info"
msgstr ""
-#: toplev.c:991
-msgid "Consider all mem refs to static data to be volatile"
+#: toplev.c:1013
+msgid "Do not store floats in registers"
msgstr ""
-#: toplev.c:993
+#: toplev.c:1015
msgid "Defer popping functions args from stack until later"
msgstr ""
-#: toplev.c:995
+#: toplev.c:1017
msgid "When possible do not generate stack frames"
msgstr ""
-#: toplev.c:997
+#: toplev.c:1019
msgid "Optimize sibling and tail recursive calls"
msgstr ""
-#: toplev.c:999
+#: toplev.c:1021
msgid "Perform superblock formation via tail duplication"
msgstr ""
-#: toplev.c:1001
+#: toplev.c:1023
+msgid "Compile whole compilation unit at a time"
+msgstr ""
+
+#: toplev.c:1025
msgid "When running CSE, follow jumps to their targets"
msgstr ""
-#: toplev.c:1003
+#: toplev.c:1027
msgid "When running CSE, follow conditional jumps"
msgstr ""
-#: toplev.c:1005
+#: toplev.c:1029
msgid "Perform a number of minor, expensive optimizations"
msgstr ""
-#: toplev.c:1007
+#: toplev.c:1031
msgid "Perform jump threading optimizations"
msgstr ""
-#: toplev.c:1009
+#: toplev.c:1033
msgid "Perform strength reduction optimizations"
msgstr ""
-#: toplev.c:1011
+#: toplev.c:1035 toplev.c:1039
msgid "Perform loop unrolling when iteration count is known"
msgstr ""
-#: toplev.c:1013
+#: toplev.c:1037 toplev.c:1041
msgid "Perform loop unrolling for all loops"
msgstr ""
-#: toplev.c:1015
+#: toplev.c:1043
+msgid "Perform loop peeling"
+msgstr ""
+
+#: toplev.c:1045
+msgid "Perform loop unswitching"
+msgstr ""
+
+#: toplev.c:1047
msgid "Generate prefetch instructions, if available, for arrays in loops"
msgstr ""
-#: toplev.c:1017
+#: toplev.c:1049
msgid "Force all loop invariant computations out of loops"
msgstr ""
-#: toplev.c:1019
+#: toplev.c:1051
msgid "Strength reduce all loop general induction variables"
msgstr ""
-#: toplev.c:1021
+#: toplev.c:1053
msgid "Store strings in writable data section"
msgstr ""
-#: toplev.c:1023
+#: toplev.c:1055
msgid "Enable machine specific peephole optimizations"
msgstr ""
-#: toplev.c:1025
+#: toplev.c:1057
msgid "Copy memory operands into registers before using"
msgstr ""
-#: toplev.c:1027
+#: toplev.c:1059
msgid "Copy memory address constants into regs before using"
msgstr ""
-#: toplev.c:1029
+#: toplev.c:1061
msgid "Allow function addresses to be held in registers"
msgstr ""
-#: toplev.c:1031
+#: toplev.c:1063
msgid "Integrate simple functions into their callers"
msgstr ""
-#: toplev.c:1033
+#: toplev.c:1065
msgid "Generate code for funcs even if they are fully inlined"
msgstr ""
-#: toplev.c:1035
+#: toplev.c:1067
msgid "Pay attention to the 'inline' keyword"
msgstr ""
-#: toplev.c:1037
+#: toplev.c:1069
msgid "Emit static const variables even if they are not used"
msgstr ""
-#: toplev.c:1039
+#: toplev.c:1071
msgid "Check for syntax errors, then stop"
msgstr ""
-#: toplev.c:1041
+#: toplev.c:1073
msgid "Mark data as shared rather than private"
msgstr ""
-#: toplev.c:1043
+#: toplev.c:1075
msgid "Enable saving registers around function calls"
msgstr ""
-#: toplev.c:1045
+#: toplev.c:1077
msgid "Return 'short' aggregates in memory, not registers"
msgstr ""
-#: toplev.c:1047
+#: toplev.c:1079
msgid "Return 'short' aggregates in registers"
msgstr ""
-#: toplev.c:1049
+#: toplev.c:1081
msgid "Attempt to fill delay slots of branch instructions"
msgstr ""
-#: toplev.c:1051
+#: toplev.c:1083
msgid "Perform the global common subexpression elimination"
msgstr ""
-#: toplev.c:1053
+#: toplev.c:1085
msgid "Perform enhanced load motion during global subexpression elimination"
msgstr ""
-#: toplev.c:1055
+#: toplev.c:1087
msgid "Perform store motion after global subexpression elimination"
msgstr ""
-#: toplev.c:1057
+#: toplev.c:1089
msgid "Perform the loop optimizations"
msgstr ""
-#: toplev.c:1059
+#: toplev.c:1091
msgid "Perform cross-jumping optimization"
msgstr ""
-#: toplev.c:1061
+#: toplev.c:1093
msgid "Perform conversion of conditional jumps to branchless equivalents"
msgstr ""
-#: toplev.c:1063
+#: toplev.c:1095
msgid "Perform conversion of conditional jumps to conditional execution"
msgstr ""
-#: toplev.c:1065
+#: toplev.c:1097
msgid "Run CSE pass after loop optimizations"
msgstr ""
-#: toplev.c:1067
+#: toplev.c:1099
msgid "Run the loop optimizer twice"
msgstr ""
-#: toplev.c:1069
+#: toplev.c:1101
msgid "Delete useless null pointer checks"
msgstr ""
-#: toplev.c:1071
+#: toplev.c:1103
msgid "Reschedule instructions before register allocation"
msgstr ""
-#: toplev.c:1073
+#: toplev.c:1105
msgid "Reschedule instructions after register allocation"
msgstr ""
-#: toplev.c:1075
+#: toplev.c:1107
msgid "Enable scheduling across basic blocks"
msgstr ""
-#: toplev.c:1077
+#: toplev.c:1109
msgid "Allow speculative motion of non-loads"
msgstr ""
-#: toplev.c:1079
+#: toplev.c:1111
msgid "Allow speculative motion of some loads"
msgstr ""
-#: toplev.c:1081
+#: toplev.c:1113
msgid "Allow speculative motion of more loads"
msgstr ""
-#: toplev.c:1083
+#: toplev.c:1115
+msgid "If scheduling post reload, do superblock sheduling"
+msgstr ""
+
+#: toplev.c:1117
+msgid "If scheduling post reload, do trace sheduling"
+msgstr ""
+
+#: toplev.c:1119
msgid "Replace add,compare,branch with branch on count reg"
msgstr ""
-#: toplev.c:1085
+#: toplev.c:1121
msgid "Generate position independent code, if possible"
msgstr ""
-#: toplev.c:1088
+#: toplev.c:1124
msgid "Enable exception handling"
msgstr ""
-#: toplev.c:1090
+#: toplev.c:1126
msgid "Just generate unwind tables for exception handling"
msgstr ""
-#: toplev.c:1092
+#: toplev.c:1128
msgid "Generate unwind tables exact at each instruction boundary"
msgstr ""
-#: toplev.c:1094
+#: toplev.c:1130
msgid "Support synchronous non-call exceptions"
msgstr ""
-#: toplev.c:1096
+#: toplev.c:1132
msgid "Insert arc based program profiling code"
msgstr ""
-#: toplev.c:1098
+#: toplev.c:1134
msgid "Create data files needed by gcov"
msgstr ""
-#: toplev.c:1100
+#: toplev.c:1136
msgid "Use profiling information for branch probabilities"
msgstr ""
-#: toplev.c:1102
+#: toplev.c:1138
msgid "Enable basic program profiling code"
msgstr ""
-#: toplev.c:1104
+#: toplev.c:1140
msgid "Reorder basic blocks to improve code placement"
msgstr ""
-#: toplev.c:1106
+#: toplev.c:1142
msgid "Reorder functions to improve code placement"
msgstr ""
-#: toplev.c:1108
+#: toplev.c:1144
msgid "Do the register renaming optimization pass"
msgstr ""
-#: toplev.c:1110
+#: toplev.c:1146
msgid "Do the register copy-propagation optimization pass"
msgstr ""
-#: toplev.c:1112
+#: toplev.c:1148
msgid "Do not put uninitialized globals in the common section"
msgstr ""
-#: toplev.c:1114
+#: toplev.c:1150
msgid "Do not generate .size directives"
msgstr ""
-#: toplev.c:1116
+#: toplev.c:1152
msgid "place each function into its own section"
msgstr ""
-#: toplev.c:1118
+#: toplev.c:1154
msgid "place data items into their own section"
msgstr ""
-#: toplev.c:1120
+#: toplev.c:1156
msgid "Add extra commentry to assembler output"
msgstr ""
-#: toplev.c:1122
+#: toplev.c:1158
msgid "Output GNU ld formatted global initializers"
msgstr ""
-#: toplev.c:1124
+#: toplev.c:1160
msgid "Enables a register move optimization"
msgstr ""
-#: toplev.c:1126
+#: toplev.c:1162
msgid "Do the full regmove optimization pass"
msgstr ""
-#: toplev.c:1128
+#: toplev.c:1164
msgid "Pack structure members together without holes"
msgstr ""
-#: toplev.c:1130
+#: toplev.c:1166
msgid "Insert stack checking code into the program"
msgstr ""
-#: toplev.c:1132
+#: toplev.c:1168
msgid "Specify that arguments may alias each other & globals"
msgstr ""
-#: toplev.c:1134
+#: toplev.c:1170
msgid "Assume arguments may alias globals but not each other"
msgstr ""
-#: toplev.c:1136
+#: toplev.c:1172
msgid "Assume arguments do not alias each other or globals"
msgstr ""
-#: toplev.c:1138
+#: toplev.c:1174
msgid "Assume strict aliasing rules apply"
msgstr ""
-#: toplev.c:1140
+#: toplev.c:1176
msgid "Align the start of loops"
msgstr ""
-#: toplev.c:1142
+#: toplev.c:1178
msgid "Align labels which are only reached by jumping"
msgstr ""
-#: toplev.c:1144
+#: toplev.c:1180
msgid "Align all labels"
msgstr ""
-#: toplev.c:1146
+#: toplev.c:1182
msgid "Align the start of functions"
msgstr ""
-#: toplev.c:1148
+#: toplev.c:1184
msgid "Attempt to merge identical constants accross compilation units"
msgstr ""
-#: toplev.c:1150
+#: toplev.c:1186
msgid "Attempt to merge identical constants and constant variables"
msgstr ""
-#: toplev.c:1152
+#: toplev.c:1188
msgid ""
"Suppress output of instruction numbers and line number notes in debugging "
"dumps"
msgstr ""
-#: toplev.c:1154
+#: toplev.c:1190
msgid "Instrument function entry/exit with profiling calls"
msgstr ""
-#: toplev.c:1156
+#: toplev.c:1192
msgid "Put zero initialized data in the bss section"
msgstr ""
-#: toplev.c:1158
+#: toplev.c:1194
msgid "Enable SSA optimizations"
msgstr ""
-#: toplev.c:1160
+#: toplev.c:1196
msgid "Enable SSA conditional constant propagation"
msgstr ""
-#: toplev.c:1162
+#: toplev.c:1198
msgid "Enable aggressive SSA dead code elimination"
msgstr ""
-#: toplev.c:1164
+#: toplev.c:1200
msgid "External symbols have a leading underscore"
msgstr ""
-#: toplev.c:1166
+#: toplev.c:1202
msgid "Process #ident directives"
msgstr ""
-#: toplev.c:1168
+#: toplev.c:1204
msgid "Enables an rtl peephole pass run before sched2"
msgstr ""
-#: toplev.c:1170
+#: toplev.c:1206
msgid "Assume no NaNs or +-Infs are generated"
msgstr ""
-#: toplev.c:1172
+#: toplev.c:1208
msgid "Enables guessing of branch probabilities"
msgstr ""
-#: toplev.c:1174
+#: toplev.c:1210
msgid "Set errno after built-in math functions"
msgstr ""
-#: toplev.c:1176
+#: toplev.c:1212
msgid "Floating-point operations can trap"
msgstr ""
-#: toplev.c:1178
+#: toplev.c:1214
msgid "Allow math optimizations that may violate IEEE or ANSI standards"
msgstr ""
-#: toplev.c:1180
+#: toplev.c:1216
msgid "Disable optimizations observable by IEEE signaling NaNs"
msgstr ""
-#: toplev.c:1182
+#: toplev.c:1218
msgid "Generate code to check bounds before indexing arrays"
msgstr ""
-#: toplev.c:1184
+#: toplev.c:1220
msgid "Convert floating point constant to single precision constant"
msgstr ""
-#: toplev.c:1186
+#: toplev.c:1222
msgid "Report time taken by each compiler pass at end of run"
msgstr ""
-#: toplev.c:1188
+#: toplev.c:1224
msgid "Report on permanent memory allocation at end of run"
msgstr ""
-#: toplev.c:1190
+#: toplev.c:1226
msgid "Trap for signed overflow in addition / subtraction / multiplication"
msgstr ""
-#: toplev.c:1192
+#: toplev.c:1228
msgid "Use graph coloring register allocation."
msgstr ""
-#: toplev.c:1209
+#: toplev.c:1245
msgid "Compile just for ISO C90"
msgstr ""
-#: toplev.c:1211
+#: toplev.c:1247
msgid "Determine language standard"
msgstr ""
-#: toplev.c:1215
+#: toplev.c:1251
msgid "Make bit-fields by unsigned by default"
msgstr ""
-#: toplev.c:1219
+#: toplev.c:1255
msgid "Make 'char' be signed by default"
msgstr ""
-#: toplev.c:1221
+#: toplev.c:1257
msgid "Make 'char' be unsigned by default"
msgstr ""
-#: toplev.c:1227
+#: toplev.c:1263
msgid "Do not recognize the 'asm' keyword"
msgstr ""
-#: toplev.c:1230
+#: toplev.c:1266
msgid "Do not recognize any built in functions"
msgstr ""
-#: toplev.c:1232
+#: toplev.c:1268
msgid "Assume normal C execution environment"
msgstr ""
-#: toplev.c:1235
+#: toplev.c:1271
msgid "Assume that standard libraries & main might not exist"
msgstr ""
-#: toplev.c:1238
+#: toplev.c:1274
msgid "Allow different types as args of ? operator"
msgstr ""
-#: toplev.c:1241
+#: toplev.c:1277
msgid "Allow the use of $ inside identifiers"
msgstr ""
-#: toplev.c:1246
+#: toplev.c:1282
msgid "Use the same size for double as for float"
msgstr ""
-#: toplev.c:1249
+#: toplev.c:1285
msgid "Use the smallest fitting integer to hold enums"
msgstr ""
-#: toplev.c:1252
+#: toplev.c:1288
msgid "Override the underlying type for wchar_t to `unsigned short'"
msgstr ""
-#: toplev.c:1256
+#: toplev.c:1292
msgid "Enable most warning messages"
msgstr ""
-#: toplev.c:1258
+#: toplev.c:1294
msgid "Warn about casting functions to incompatible types"
msgstr ""
-#: toplev.c:1261
+#: toplev.c:1297
msgid "Warn about functions which might be candidates for format attributes"
msgstr ""
-#: toplev.c:1264
+#: toplev.c:1300
msgid "Warn about casts which discard qualifiers"
msgstr ""
-#: toplev.c:1267
+#: toplev.c:1303
msgid "Warn about subscripts whose type is 'char'"
msgstr ""
-#: toplev.c:1270 toplev.c:1273
+#: toplev.c:1306 toplev.c:1309
msgid "Warn if nested comments are detected"
msgstr ""
-#: toplev.c:1276
+#: toplev.c:1312
msgid "Warn about possibly confusing type conversions"
msgstr ""
-#: toplev.c:1280
+#: toplev.c:1316
msgid "Do not warn about compile-time integer division by zero"
msgstr ""
-#: toplev.c:1282
+#: toplev.c:1318
msgid "Warn about testing equality of floating point numbers"
msgstr ""
-#: toplev.c:1285
+#: toplev.c:1321
msgid "Warn about printf/scanf/strftime/strfmon format anomalies"
msgstr ""
-#: toplev.c:1289
+#: toplev.c:1325
msgid "Don't warn about too many arguments to format functions"
msgstr ""
-#: toplev.c:1291
+#: toplev.c:1327
msgid "Warn about non-string-literal format strings"
msgstr ""
-#: toplev.c:1294
+#: toplev.c:1330
msgid "Warn about possible security problems with format functions"
msgstr ""
-#: toplev.c:1298
+#: toplev.c:1334
msgid "Don't warn about strftime formats yielding 2 digit years"
msgstr ""
-#: toplev.c:1300
+#: toplev.c:1336
msgid "Warn about implicit function declarations"
msgstr ""
-#: toplev.c:1304
+#: toplev.c:1340
msgid "Warn when a declaration does not specify a type"
msgstr ""
-#: toplev.c:1309
+#: toplev.c:1345
msgid "Warn about the use of the #import directive"
msgstr ""
-#: toplev.c:1313
+#: toplev.c:1348
+msgid "Warn about PCH files that are found but not used"
+msgstr ""
+
+#: toplev.c:1351
msgid "Do not warn about using 'long long' when -pedantic"
msgstr ""
-#: toplev.c:1315
+#: toplev.c:1353
msgid "Warn about suspicious declarations of main"
msgstr ""
-#: toplev.c:1318
+#: toplev.c:1356
msgid "Warn about possibly missing braces around initializers"
msgstr ""
-#: toplev.c:1321
+#: toplev.c:1359
msgid "Warn about global funcs without previous declarations"
msgstr ""
-#: toplev.c:1324
+#: toplev.c:1362
msgid "Warn about global funcs without prototypes"
msgstr ""
-#: toplev.c:1327
+#: toplev.c:1365
msgid "Warn about use of multicharacter literals"
msgstr ""
-#: toplev.c:1330
+#: toplev.c:1368
msgid "Warn about externs not at file scope level"
msgstr ""
-#: toplev.c:1333
+#: toplev.c:1371
msgid "Warn about possible missing parentheses"
msgstr ""
-#: toplev.c:1336
+#: toplev.c:1374
msgid "Warn about function pointer arithmetic"
msgstr ""
-#: toplev.c:1339
+#: toplev.c:1377
msgid "Warn about multiple declarations of the same object"
msgstr ""
-#: toplev.c:1342
+#: toplev.c:1380
msgid "Warn whenever a function's return-type defaults to int"
msgstr ""
-#: toplev.c:1345
+#: toplev.c:1383
msgid "Warn about possible violations of sequence point rules"
msgstr ""
-#: toplev.c:1348
+#: toplev.c:1386
msgid "Warn about signed/unsigned comparisons"
msgstr ""
-#: toplev.c:1351
+#: toplev.c:1389
msgid "Warn about non-prototyped function decls"
msgstr ""
-#: toplev.c:1354
+#: toplev.c:1392
msgid "Warn about constructs whose meanings change in ISO C"
msgstr ""
-#: toplev.c:1357
+#: toplev.c:1395
msgid "Warn when trigraphs are encountered"
msgstr ""
-#: toplev.c:1362
+#: toplev.c:1400
msgid "Warn about unrecognized pragmas"
msgstr ""
-#: toplev.c:1365
+#: toplev.c:1403
msgid "Mark strings as 'const char *'"
msgstr ""
-#: toplev.c:1510
+#: toplev.c:1548
msgid "Warn when a function is unused"
msgstr ""
-#: toplev.c:1512
+#: toplev.c:1550
msgid "Warn when a label is unused"
msgstr ""
-#: toplev.c:1514
+#: toplev.c:1552
msgid "Warn when a function parameter is unused"
msgstr ""
-#: toplev.c:1516
+#: toplev.c:1554
msgid "Warn when a variable is unused"
msgstr ""
-#: toplev.c:1518
+#: toplev.c:1556
msgid "Warn when an expression value is unused"
msgstr ""
-#: toplev.c:1520
+#: toplev.c:1558
msgid "Do not suppress warnings from system headers"
msgstr ""
-#: toplev.c:1522
+#: toplev.c:1560
msgid "Treat all warnings as errors"
msgstr ""
-#: toplev.c:1524
+#: toplev.c:1562
msgid "Warn when one local variable shadows another"
msgstr ""
-#: toplev.c:1526
+#: toplev.c:1564
msgid "Warn about enumerated switches, with no default, missing a case"
msgstr ""
-#: toplev.c:1528
+#: toplev.c:1566
msgid "Warn about enumerated switches missing a default case"
msgstr ""
-#: toplev.c:1530
+#: toplev.c:1568
msgid "Warn about all enumerated switches missing a specific case"
msgstr ""
-#: toplev.c:1532
+#: toplev.c:1570
msgid "Warn about returning structures, unions or arrays"
msgstr ""
-#: toplev.c:1534
+#: toplev.c:1572
msgid "Warn about pointer casts which increase alignment"
msgstr ""
-#: toplev.c:1536
+#: toplev.c:1574
msgid "Warn about code that will never be executed"
msgstr ""
-#: toplev.c:1538
+#: toplev.c:1576
msgid "Warn about uninitialized automatic variables"
msgstr ""
-#: toplev.c:1540
+#: toplev.c:1578
msgid "Warn when an inlined function cannot be inlined"
msgstr ""
-#: toplev.c:1542
+#: toplev.c:1580
msgid "Warn when the packed attribute has no effect on struct layout"
msgstr ""
-#: toplev.c:1544
+#: toplev.c:1582
msgid "Warn when padding is required to align struct members"
msgstr ""
-#: toplev.c:1546
+#: toplev.c:1584
msgid "Warn when an optimization pass is disabled"
msgstr ""
-#: toplev.c:1548
+#: toplev.c:1586
msgid "Warn about uses of __attribute__((deprecated)) declarations"
msgstr ""
-#: toplev.c:1550
+#: toplev.c:1588
+msgid "Print extra (possibly unwanted) warnings"
+msgstr ""
+
+#: toplev.c:1590
msgid "Warn about functions which might be candidates for attribute noreturn"
msgstr ""
-#: toplev.c:1552
+#: toplev.c:1592
msgid "Warn about code which might break the strict aliasing rules"
msgstr ""
-#: toplev.c:1629 toplev.c:4510 config/rs6000/rs6000.c:685
+#: toplev.c:1669 toplev.c:4685 config/rs6000/rs6000.c:716
#, c-format
msgid "invalid option `%s'"
msgstr ""
-#: toplev.c:2031
+#: toplev.c:1752
+msgid "getting core file size maximum limit"
+msgstr ""
+
+#: toplev.c:1755
+msgid "setting core file size limit to maximum"
+msgstr ""
+
+#: toplev.c:2096
#, c-format
msgid "`%s' used but never defined"
msgstr ""
-#: toplev.c:2034
+#: toplev.c:2099
#, c-format
msgid "`%s' declared `static' but never defined"
msgstr ""
-#: toplev.c:2053
+#: toplev.c:2118
#, c-format
msgid "`%s' defined but not used"
msgstr ""
-#: toplev.c:2297
+#: toplev.c:2337
#, c-format
msgid "invalid register name `%s' for register variable"
msgstr ""
-#: toplev.c:3680
+#: toplev.c:3832
msgid ""
" -ffixed-<register> Mark <register> as being unavailable to the "
"compiler\n"
msgstr ""
-#: toplev.c:3681
+#: toplev.c:3833
msgid ""
" -fcall-used-<register> Mark <register> as being corrupted by function "
"calls\n"
msgstr ""
-#: toplev.c:3682
+#: toplev.c:3834
msgid ""
" -fcall-saved-<register> Mark <register> as being preserved across "
"functions\n"
msgstr ""
-#: toplev.c:3683
+#: toplev.c:3835
msgid ""
" -finline-limit=<number> Limits the size of inlined functions to <number>\n"
msgstr ""
-#: toplev.c:3684
+#: toplev.c:3836
msgid ""
" -fmessage-length=<number> Limits diagnostics messages lengths to <number> "
"characters per line. 0 suppresses line-wrapping\n"
msgstr ""
-#: toplev.c:3685
+#: toplev.c:3837
msgid ""
" -fdiagnostics-show-location=[once | every-line] Indicates how often source "
"location information should be emitted, as prefix, at the beginning of "
"diagnostics when line-wrapping\n"
msgstr ""
-#: toplev.c:3686
+#: toplev.c:3838
msgid ""
" -ftls-model=[global-dynamic | local-dynamic | initial-exec | local-exec] "
"Indicates the default thread-local storage code generation model\n"
msgstr ""
-#: toplev.c:3697
+#: toplev.c:3849
msgid " -O[number] Set optimization level to [number]\n"
msgstr ""
-#: toplev.c:3698
+#: toplev.c:3850
msgid " -Os Optimize for space rather than speed\n"
msgstr ""
-#: toplev.c:3710
+#: toplev.c:3862
msgid ""
" -pedantic Issue warnings needed by strict compliance to ISO "
"C\n"
msgstr ""
-#: toplev.c:3711
+#: toplev.c:3863
msgid ""
" -pedantic-errors Like -pedantic except that errors are produced\n"
msgstr ""
-#: toplev.c:3712
+#: toplev.c:3864
msgid " -w Suppress warnings\n"
msgstr ""
-#: toplev.c:3713
-msgid " -W Enable extra warnings\n"
-msgstr ""
-
-#: toplev.c:3724
+#: toplev.c:3875
msgid " -Wunused Enable unused warnings\n"
msgstr ""
-#: toplev.c:3725
+#: toplev.c:3876
msgid ""
" -Wlarger-than-<number> Warn if an object is larger than <number> bytes\n"
msgstr ""
-#: toplev.c:3726
+#: toplev.c:3877
msgid " -p Enable function profiling\n"
msgstr ""
-#: toplev.c:3727
+#: toplev.c:3878
msgid " -o <file> Place output into <file> \n"
msgstr ""
-#: toplev.c:3728
+#: toplev.c:3879
msgid ""
" -G <number> Put global and static data smaller than <number>\n"
" bytes into a special section (on some targets)\n"
msgstr ""
-#: toplev.c:3739
+#: toplev.c:3890
msgid " -aux-info <file> Emit declaration info into <file>\n"
msgstr ""
-#: toplev.c:3740
+#: toplev.c:3891
msgid ""
" -quiet Do not display functions compiled or elapsed time\n"
msgstr ""
-#: toplev.c:3741
+#: toplev.c:3892
msgid " -version Display the compiler's version\n"
msgstr ""
-#: toplev.c:3742
+#: toplev.c:3893
msgid ""
" -d[letters] Enable dumps from specific passes of the compiler\n"
msgstr ""
-#: toplev.c:3743
+#: toplev.c:3894
msgid ""
" -dumpbase <file> Base name to be used for dumps from specific "
"passes\n"
msgstr ""
-#: toplev.c:3745
+#: toplev.c:3896
msgid " -fsched-verbose=<number> Set the verbosity level of the scheduler\n"
msgstr ""
-#: toplev.c:3747
+#: toplev.c:3898
msgid " --help Display this information\n"
msgstr ""
-#: toplev.c:3762
+#: toplev.c:3913
msgid ""
"\n"
"Language specific options:\n"
msgstr ""
-#: toplev.c:3774
+#: toplev.c:3925
#, c-format
msgid " %-23.23s [undocumented]\n"
msgstr ""
-#: toplev.c:3782 toplev.c:3796
+#: toplev.c:3933 toplev.c:3947
#, c-format
msgid ""
"\n"
"There are undocumented %s specific options as well.\n"
msgstr ""
-#: toplev.c:3786
+#: toplev.c:3937
#, c-format
msgid ""
"\n"
" Options for %s:\n"
msgstr ""
-#: toplev.c:3823
+#: toplev.c:3974
msgid ""
"\n"
"Target specific options:\n"
msgstr ""
-#: toplev.c:3837 toplev.c:3856
+#: toplev.c:3988 toplev.c:4007
#, c-format
msgid " -m%-23.23s [undocumented]\n"
msgstr ""
-#: toplev.c:3865
+#: toplev.c:4016
msgid ""
"\n"
"There are undocumented target specific options as well.\n"
msgstr ""
-#: toplev.c:3867
+#: toplev.c:4018
msgid " They exist, but they are not documented.\n"
msgstr ""
-#: toplev.c:3920
+#: toplev.c:4074
#, c-format
msgid "unrecognized gcc debugging option: %c"
msgstr ""
-#: toplev.c:3976
+#: toplev.c:4140
#, c-format
msgid "`%s': unknown tls-model option"
msgstr ""
-#: toplev.c:4003
+#: toplev.c:4167
#, c-format
msgid "unrecognized register name `%s'"
msgstr ""
-#: toplev.c:4028 toplev.c:4962
+#: toplev.c:4192 toplev.c:5148
#, c-format
msgid "unrecognized option `%s'"
msgstr ""
-#: toplev.c:4072
+#: toplev.c:4236
msgid "-Wid-clash-LEN is no longer supported"
msgstr ""
-#: toplev.c:4149
+#: toplev.c:4321
#, c-format
msgid "use -gdwarf -g%d for DWARF v1, level %d"
msgstr ""
-#: toplev.c:4152
+#: toplev.c:4324
msgid "use -gdwarf-2 for DWARF v2"
msgstr ""
-#: toplev.c:4157
+#: toplev.c:4329
#, c-format
msgid "ignoring option `%s' due to invalid debug level specification"
msgstr ""
-#: toplev.c:4180 toplev.c:4960
+#: toplev.c:4352 toplev.c:5146
#, c-format
msgid "`%s': unknown or unsupported -g option"
msgstr ""
-#: toplev.c:4187
+#: toplev.c:4359
#, c-format
msgid "`%s' ignored, conflicts with `-g%s'"
msgstr ""
-#: toplev.c:4266
+#: toplev.c:4441
msgid "-param option missing argument"
msgstr ""
-#: toplev.c:4275
+#: toplev.c:4450
#, c-format
msgid "invalid --param option: %s"
msgstr ""
-#: toplev.c:4287
+#: toplev.c:4462
#, c-format
msgid "invalid parameter value `%s'"
msgstr ""
-#: toplev.c:4527
+#: toplev.c:4702
#, c-format
msgid ""
"%s%s%s version %s (%s)\n"
@@ -8043,226 +8187,232 @@ msgid ""
"%s%s%s version %s (%s) compiled by CC.\n"
msgstr ""
-#: toplev.c:4583
+#: toplev.c:4709
+#, c-format
+msgid ""
+"%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n"
+msgstr ""
+
+#: toplev.c:4761
msgid "options passed: "
msgstr ""
-#: toplev.c:4612
+#: toplev.c:4790
msgid "options enabled: "
msgstr ""
-#: toplev.c:4671 java/jcf-write.c:3423
+#: toplev.c:4849 java/jcf-write.c:3368
#, c-format
msgid "can't open %s for writing"
msgstr ""
-#: toplev.c:4952
+#: toplev.c:5138
#, c-format
msgid "ignoring command line option '%s'"
msgstr ""
-#: toplev.c:4955
+#: toplev.c:5141
#, c-format
msgid "(it is valid for %s but not the selected language)"
msgstr ""
-#: toplev.c:4989
+#: toplev.c:5175
msgid "-Wuninitialized is not supported without -O"
msgstr ""
-#: toplev.c:5044
+#: toplev.c:5267
msgid "instruction scheduling not supported on this target machine"
msgstr ""
-#: toplev.c:5048
+#: toplev.c:5271
msgid "this target machine does not have delayed branches"
msgstr ""
-#: toplev.c:5062
+#: toplev.c:5285
#, c-format
msgid "-f%sleading-underscore not supported on this target machine"
msgstr ""
-#: toplev.c:5125
+#: toplev.c:5348
msgid "-ffunction-sections not supported for this target"
msgstr ""
-#: toplev.c:5130
+#: toplev.c:5353
msgid "-fdata-sections not supported for this target"
msgstr ""
-#: toplev.c:5137
+#: toplev.c:5360
msgid "-ffunction-sections disabled; it makes profiling impossible"
msgstr ""
-#: toplev.c:5144
+#: toplev.c:5367
msgid "-fprefetch-loop-arrays not supported for this target"
msgstr ""
-#: toplev.c:5150
+#: toplev.c:5373
msgid ""
"-fprefetch-loop-arrays not supported for this target (try -march switches)"
msgstr ""
-#: toplev.c:5159
+#: toplev.c:5382
msgid "-fprefetch-loop-arrays is not supported with -Os"
msgstr ""
-#: toplev.c:5165
+#: toplev.c:5388
msgid "-ffunction-sections may affect debugging on some targets"
msgstr ""
-#: toplev.c:5277
+#: toplev.c:5493
#, c-format
msgid "error writing to %s"
msgstr ""
-#: toplev.c:5279 java/jcf-parse.c:933 java/jcf-write.c:3430
+#: toplev.c:5495 java/jcf-parse.c:913 java/jcf-write.c:3375
#, c-format
msgid "error closing %s"
msgstr ""
-#: tree-dump.c:704
+#: tree-dump.c:723
#, c-format
msgid "could not open dump file `%s'"
msgstr ""
-#: tree-dump.c:780
+#: tree-dump.c:799
#, c-format
msgid "ignoring unknown option `%.*s' in `-f%s'"
msgstr ""
-#: tree.c:3599
+#: tree.c:3612
msgid "arrays of functions are not meaningful"
msgstr ""
-#: tree.c:3656
+#: tree.c:3669
msgid "function return type cannot be function"
msgstr ""
-#: tree.c:4498
+#: tree.c:4512
msgid "invalid initializer for bit string"
msgstr ""
-#: tree.c:4557
+#: tree.c:4571
#, c-format
msgid "tree check: expected %s, have %s in %s, at %s:%d"
msgstr ""
-#: tree.c:4574
+#: tree.c:4588
#, c-format
msgid "tree check: expected class '%c', have '%c' (%s) in %s, at %s:%d"
msgstr ""
-#: tree.c:4591
+#: tree.c:4605
#, c-format
msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
msgstr ""
-#: varasm.c:447 config/i386/winnt.c:631
+#: varasm.c:448 config/i386/winnt.c:652
#, c-format
msgid "%s causes a section type conflict"
msgstr ""
-#: varasm.c:833
+#: varasm.c:834
#, c-format
msgid "register name not specified for `%s'"
msgstr ""
-#: varasm.c:835
+#: varasm.c:836
#, c-format
msgid "invalid register name for `%s'"
msgstr ""
-#: varasm.c:838
+#: varasm.c:839
#, c-format
msgid "data type of `%s' isn't suitable for a register"
msgstr ""
-#: varasm.c:841
+#: varasm.c:842
#, c-format
msgid "register specified for `%s' isn't suitable for data type"
msgstr ""
-#: varasm.c:850
+#: varasm.c:851
msgid "global register variable has initial value"
msgstr ""
-#: varasm.c:853
+#: varasm.c:854
msgid "volatile register variables don't work as you might wish"
msgstr ""
-#: varasm.c:886
+#: varasm.c:887
#, c-format
msgid "register name given for non-register variable `%s'"
msgstr ""
-#: varasm.c:1514
+#: varasm.c:1507
#, c-format
msgid ""
"alignment of `%s' is greater than maximum object file alignment. Using %d"
msgstr ""
-#: varasm.c:1556
+#: varasm.c:1549
msgid "thread-local COMMON data not implemented"
msgstr ""
-#: varasm.c:1580
+#: varasm.c:1575
#, c-format
msgid "requested alignment for %s is greater than implemented alignment of %d"
msgstr ""
-#: varasm.c:3992
+#: varasm.c:3988
msgid "initializer for integer value is too complicated"
msgstr ""
-#: varasm.c:3997
+#: varasm.c:3993
msgid "initializer for floating value is not a floating constant"
msgstr ""
-#: varasm.c:4047
+#: varasm.c:4043
msgid "unknown set constructor type"
msgstr ""
-#: varasm.c:4261
+#: varasm.c:4257
#, c-format
msgid "invalid initial value for member `%s'"
msgstr ""
-#: varasm.c:4452 varasm.c:4495
+#: varasm.c:4448 varasm.c:4491
#, c-format
msgid "weak declaration of `%s' must precede definition"
msgstr ""
-#: varasm.c:4459
+#: varasm.c:4455
#, c-format
msgid ""
"weak declaration of `%s' after first use results in unspecified behavior"
msgstr ""
-#: varasm.c:4493
+#: varasm.c:4489
#, c-format
msgid "weak declaration of `%s' must be public"
msgstr ""
-#: varasm.c:4502
+#: varasm.c:4498
#, c-format
msgid "weak declaration of `%s' not supported"
msgstr ""
-#: varasm.c:4531 varasm.c:4606
+#: varasm.c:4527 varasm.c:4602
msgid "only weak aliases are supported in this configuration"
msgstr ""
-#: varasm.c:4614
+#: varasm.c:4610
msgid "alias definitions not supported in this configuration; ignored"
msgstr ""
-#: varasm.c:4644
+#: varasm.c:4640
msgid "visibility attribute not supported in this configuration; ignored"
msgstr ""
-#: varray.c:136
+#: varray.c:135
#, c-format
msgid "virtual array %s[%lu]: element %lu out of bounds in %s, at %s:%d"
msgstr ""
@@ -8280,108 +8430,157 @@ msgstr ""
#: params.def:53
msgid ""
-"The maximum number of instructions in a single function eliglible for "
-"inlining"
+"The maximum number of instructions in a single function eligible for inlining"
+msgstr ""
+
+#: params.def:65
+msgid "The maximum number of instructions when automatically inlining"
msgstr ""
-#: params.def:74
+#: params.def:84
msgid ""
-"The maximuem number of instructions by repeated inlining before gcc starts "
-"to throttle inlining"
+"The maximum number of instructions by repeated inlining before gcc starts to "
+"throttle inlining"
msgstr ""
-#: params.def:87
+#: params.def:97
msgid ""
"The slope of the linear funtion throttling inlining after the recursive "
"inlining limit has been reached is given by the negative reciprocal value of "
"this parameter"
msgstr ""
-#: params.def:100
+#: params.def:110
msgid ""
"The number of instructions in a single functions still eligible to inlining "
"after a lot recursive inlining"
msgstr ""
-#: params.def:111
+#: params.def:120
+msgid "The maximum number of instructions for the RTL inliner"
+msgstr ""
+
+#: params.def:131
msgid "The maximum number of instructions to consider to fill a delay slot"
msgstr ""
-#: params.def:122
+#: params.def:142
msgid ""
"The maximum number of instructions to consider to find accurate live "
"register information"
msgstr ""
-#: params.def:132
+#: params.def:152
msgid "The maximum length of scheduling's pending operations list"
msgstr ""
-#: params.def:139
+#: params.def:159
msgid "The maximum amount of memory to be allocated by GCSE"
msgstr ""
-#: params.def:144
+#: params.def:164
msgid "The maximum number of passes to make when doing GCSE"
msgstr ""
-#: params.def:151
+#: params.def:171
msgid "The maximum number of instructions to consider to unroll in a loop"
msgstr ""
-#: params.def:156
+#: params.def:177
+msgid ""
+"The maximum number of instructions to consider to unroll in a loop on average"
+msgstr ""
+
+#: params.def:182
+msgid "The maximum number of unrollings of a single loop"
+msgstr ""
+
+#: params.def:187
+msgid "The maximum number of insns of a peeled loop"
+msgstr ""
+
+#: params.def:192
+msgid "The maximum number of peelings of a single loop"
+msgstr ""
+
+#: params.def:197
+msgid "The maximum number of insns of a completely peeled loop"
+msgstr ""
+
+#: params.def:202
+msgid ""
+"The maximum number of peelings of a single loop that is peeled completely"
+msgstr ""
+
+#: params.def:207
+msgid "The maximum number of insns of a peeled loop that rolls only once"
+msgstr ""
+
+#: params.def:213
+msgid "The maximum number of insns of an unswitched loop"
+msgstr ""
+
+#: params.def:218
+msgid "The maximum number of unswitchings in a single loop"
+msgstr ""
+
+#: params.def:223
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:161
+#: params.def:228
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:166
+#: params.def:233
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:171
+#: params.def:238
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:176
+#: params.def:243
msgid "Maximal code growth caused by tail duplication (in percents)"
msgstr ""
-#: params.def:180
+#: params.def:247
msgid ""
"Stop reverse growth if the reverse probability of best edge is less than "
"this threshold (in percents)"
msgstr ""
-#: params.def:185
+#: params.def:252
msgid ""
"Stop forward growth if the probability of best edge is less than this "
"threshold (in percents). Used when profile feedback is available"
msgstr ""
-#: params.def:190
+#: params.def:257
msgid ""
"Stop forward growth if the probability of best edge is less than this "
"threshold (in percents). Used when profile feedback is not available"
msgstr ""
-#: params.def:204
+#: params.def:264
+msgid "The maximum number of incoming edges to consider for crossjumping"
+msgstr ""
+
+#: params.def:277
msgid ""
"Minimum heap expansion to trigger garbage collection, as a percentage of the "
"total size of the heap."
msgstr ""
-#: params.def:210
+#: params.def:283
msgid "Minimum heap size before we start collecting garbage, in kilobytes."
msgstr ""
@@ -8422,155 +8621,156 @@ msgstr ""
msgid "-msystem-v and -mthreads are incompatible"
msgstr ""
-#: config/alpha/alpha.c:351
+#: config/alpha/alpha.c:416
#, c-format
msgid "-f%s ignored for Unicos/Mk (not supported)"
msgstr ""
-#: config/alpha/alpha.c:375
+#: config/alpha/alpha.c:440
msgid "-mieee not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:386
+#: config/alpha/alpha.c:451
msgid "-mieee-with-inexact not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:403
+#: config/alpha/alpha.c:468
#, c-format
msgid "bad value `%s' for -mtrap-precision switch"
msgstr ""
-#: config/alpha/alpha.c:417
+#: config/alpha/alpha.c:482
#, c-format
msgid "bad value `%s' for -mfp-rounding-mode switch"
msgstr ""
-#: config/alpha/alpha.c:432
+#: config/alpha/alpha.c:497
#, c-format
msgid "bad value `%s' for -mfp-trap-mode switch"
msgstr ""
-#: config/alpha/alpha.c:444
+#: config/alpha/alpha.c:509
#, c-format
msgid "bad value `%s' for -mtls-size switch"
msgstr ""
-#: config/alpha/alpha.c:463 config/alpha/alpha.c:475
+#: config/alpha/alpha.c:528 config/alpha/alpha.c:540
#, c-format
msgid "bad value `%s' for -mcpu switch"
msgstr ""
-#: config/alpha/alpha.c:482
+#: config/alpha/alpha.c:547
msgid "trap mode not supported on Unicos/Mk"
msgstr ""
-#: config/alpha/alpha.c:489
+#: config/alpha/alpha.c:554
msgid "fp software completion requires -mtrap-precision=i"
msgstr ""
-#: config/alpha/alpha.c:505
+#: config/alpha/alpha.c:570
msgid "rounding mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:510
+#: config/alpha/alpha.c:575
msgid "trap mode not supported for VAX floats"
msgstr ""
-#: config/alpha/alpha.c:539
+#: config/alpha/alpha.c:604
#, c-format
msgid "L%d cache latency unknown for %s"
msgstr ""
-#: config/alpha/alpha.c:554
+#: config/alpha/alpha.c:619
#, c-format
msgid "bad value `%s' for -mmemory-latency"
msgstr ""
-#: config/alpha/alpha.c:5677 config/m88k/m88k.c:2900 config/romp/romp.c:756
-#: config/romp/romp.c:763
+#: config/alpha/alpha.c:5942 config/m88k/m88k.c:2907 config/romp/romp.c:762
+#: config/romp/romp.c:769
#, c-format
msgid "invalid %%H value"
msgstr ""
-#: config/alpha/alpha.c:5698
+#: config/alpha/alpha.c:5963
#, c-format
msgid "invalid %%J value"
msgstr ""
-#: config/alpha/alpha.c:5714 config/ia64/ia64.c:3836 config/m88k/m88k.c:3045
+#: config/alpha/alpha.c:5979 config/ia64/ia64.c:4007 config/m88k/m88k.c:3052
#, c-format
msgid "invalid %%r value"
msgstr ""
-#: config/alpha/alpha.c:5724 config/rs6000/rs6000.c:7709
+#: config/alpha/alpha.c:5989 config/rs6000/rs6000.c:7815
#, c-format
msgid "invalid %%R value"
msgstr ""
-#: config/alpha/alpha.c:5730 config/rs6000/rs6000.c:7635
+#: config/alpha/alpha.c:5995 config/rs6000/rs6000.c:7741
#, c-format
msgid "invalid %%N value"
msgstr ""
-#: config/alpha/alpha.c:5738 config/rs6000/rs6000.c:7663
+#: config/alpha/alpha.c:6003 config/rs6000/rs6000.c:7769
#, c-format
msgid "invalid %%P value"
msgstr ""
-#: config/alpha/alpha.c:5746 config/m88k/m88k.c:2906 config/romp/romp.c:742
-#: config/romp/romp.c:749
+#: config/alpha/alpha.c:6011 config/m88k/m88k.c:2913 config/romp/romp.c:748
+#: config/romp/romp.c:755
#, c-format
msgid "invalid %%h value"
msgstr ""
-#: config/alpha/alpha.c:5754 config/romp/romp.c:700
+#: config/alpha/alpha.c:6019 config/romp/romp.c:706
#, c-format
msgid "invalid %%L value"
msgstr ""
-#: config/alpha/alpha.c:5793 config/rs6000/rs6000.c:7617
+#: config/alpha/alpha.c:6058 config/rs6000/rs6000.c:7723
#, c-format
msgid "invalid %%m value"
msgstr ""
-#: config/alpha/alpha.c:5801 config/rs6000/rs6000.c:7625
+#: config/alpha/alpha.c:6066 config/rs6000/rs6000.c:7731
#, c-format
msgid "invalid %%M value"
msgstr ""
-#: config/alpha/alpha.c:5845
+#: config/alpha/alpha.c:6110
#, c-format
msgid "invalid %%U value"
msgstr ""
-#: config/alpha/alpha.c:5857 config/alpha/alpha.c:5871 config/romp/romp.c:708
-#: config/rs6000/rs6000.c:7717
+#: config/alpha/alpha.c:6122 config/alpha/alpha.c:6136 config/romp/romp.c:714
+#: config/rs6000/rs6000.c:7823
#, c-format
msgid "invalid %%s value"
msgstr ""
-#: config/alpha/alpha.c:5894 config/m88k/m88k.c:3008
+#: config/alpha/alpha.c:6159 config/m88k/m88k.c:3015
#, c-format
msgid "invalid %%C value"
msgstr ""
-#: config/alpha/alpha.c:5931 config/m88k/m88k.c:3029
-#: config/rs6000/rs6000.c:7474
+#: config/alpha/alpha.c:6196 config/m88k/m88k.c:3036
+#: config/rs6000/rs6000.c:7580
#, c-format
msgid "invalid %%E value"
msgstr ""
-#: config/alpha/alpha.c:5956 config/alpha/alpha.c:6006
+#: config/alpha/alpha.c:6221 config/alpha/alpha.c:6271
msgid "unknown relocation unspec"
msgstr ""
-#: config/alpha/alpha.c:5965 config/romp/romp.c:983
-#: config/rs6000/rs6000.c:8024
+#: config/alpha/alpha.c:6230 config/romp/romp.c:989
+#: config/rs6000/rs6000.c:8134
#, c-format
msgid "invalid %%xn code"
msgstr ""
-#: config/alpha/alpha.c:6688 config/alpha/alpha.c:6691
+#: config/alpha/alpha.c:7003 config/alpha/alpha.c:7006 config/s390/s390.c:6167
+#: config/s390/s390.c:6170
msgid "bad builtin fcode"
msgstr ""
@@ -8579,91 +8779,91 @@ msgstr ""
#. each pair being { "NAME", VALUE }
#. where VALUE is the bits to set or minus the bits to clear.
#. An empty string NAME is used to identify the default VALUE.
-#: config/alpha/alpha.h:283 config/i386/i386.h:315 config/i386/i386.h:317
-#: config/i386/i386.h:319 config/ns32k/ns32k.h:140 config/rs6000/rs6000.h:288
+#: config/alpha/alpha.h:286 config/i386/i386.h:317 config/i386/i386.h:319
+#: config/i386/i386.h:321 config/ns32k/ns32k.h:140 config/rs6000/rs6000.h:288
#: config/s390/s390.h:99 config/sparc/sparc.h:524 config/sparc/sparc.h:529
msgid "Use hardware fp"
msgstr ""
-#: config/alpha/alpha.h:284 config/i386/i386.h:316 config/i386/i386.h:318
+#: config/alpha/alpha.h:287 config/i386/i386.h:318 config/i386/i386.h:320
#: config/rs6000/rs6000.h:290 config/sparc/sparc.h:526
#: config/sparc/sparc.h:531
msgid "Do not use hardware fp"
msgstr ""
-#: config/alpha/alpha.h:285
+#: config/alpha/alpha.h:288
msgid "Use fp registers"
msgstr ""
-#: config/alpha/alpha.h:287
+#: config/alpha/alpha.h:290
msgid "Do not use fp registers"
msgstr ""
-#: config/alpha/alpha.h:288
+#: config/alpha/alpha.h:291
msgid "Do not assume GAS"
msgstr ""
-#: config/alpha/alpha.h:289
+#: config/alpha/alpha.h:292
msgid "Assume GAS"
msgstr ""
-#: config/alpha/alpha.h:291
+#: config/alpha/alpha.h:294
msgid "Request IEEE-conformant math library routines (OSF/1)"
msgstr ""
-#: config/alpha/alpha.h:293
+#: config/alpha/alpha.h:296
msgid "Emit IEEE-conformant code, without inexact exceptions"
msgstr ""
-#: config/alpha/alpha.h:295
+#: config/alpha/alpha.h:298
msgid "Emit IEEE-conformant code, with inexact exceptions"
msgstr ""
-#: config/alpha/alpha.h:297
+#: config/alpha/alpha.h:300
msgid "Do not emit complex integer constants to read-only memory"
msgstr ""
-#: config/alpha/alpha.h:298
+#: config/alpha/alpha.h:301
msgid "Use VAX fp"
msgstr ""
-#: config/alpha/alpha.h:299
+#: config/alpha/alpha.h:302
msgid "Do not use VAX fp"
msgstr ""
-#: config/alpha/alpha.h:300
+#: config/alpha/alpha.h:303
msgid "Emit code for the byte/word ISA extension"
msgstr ""
-#: config/alpha/alpha.h:303
+#: config/alpha/alpha.h:306
msgid "Emit code for the motion video ISA extension"
msgstr ""
-#: config/alpha/alpha.h:306
+#: config/alpha/alpha.h:309
msgid "Emit code for the fp move and sqrt ISA extension"
msgstr ""
-#: config/alpha/alpha.h:308
+#: config/alpha/alpha.h:311
msgid "Emit code for the counting ISA extension"
msgstr ""
-#: config/alpha/alpha.h:311
+#: config/alpha/alpha.h:314
msgid "Emit code using explicit relocation directives"
msgstr ""
-#: config/alpha/alpha.h:314
+#: config/alpha/alpha.h:317
msgid "Emit 16-bit relocations to the small data areas"
msgstr ""
-#: config/alpha/alpha.h:316
+#: config/alpha/alpha.h:319
msgid "Emit 32-bit relocations to the small data areas"
msgstr ""
-#: config/alpha/alpha.h:318
+#: config/alpha/alpha.h:321
msgid "Emit direct branches to local functions"
msgstr ""
-#: config/alpha/alpha.h:321
+#: config/alpha/alpha.h:324
msgid "Emit rdval instead of rduniq for thread pointer"
msgstr ""
@@ -8674,296 +8874,309 @@ msgstr ""
#. For -mtrap-precision=[p|f|i]
#. For -mmemory-latency=
#. For -mtls-size=
-#: config/alpha/alpha.h:350
+#: config/alpha/alpha.h:353
msgid "Use features of and schedule given CPU"
msgstr ""
-#: config/alpha/alpha.h:352
+#: config/alpha/alpha.h:355
msgid "Schedule given CPU"
msgstr ""
-#: config/alpha/alpha.h:354
+#: config/alpha/alpha.h:357
msgid "Control the generated fp rounding mode"
msgstr ""
-#: config/alpha/alpha.h:356
+#: config/alpha/alpha.h:359
msgid "Control the IEEE trap mode"
msgstr ""
-#: config/alpha/alpha.h:358
+#: config/alpha/alpha.h:361
msgid "Control the precision given to fp exceptions"
msgstr ""
-#: config/alpha/alpha.h:360
+#: config/alpha/alpha.h:363
msgid "Tune expected memory latency"
msgstr ""
-#: config/alpha/alpha.h:362 config/ia64/ia64.h:221
+#: config/alpha/alpha.h:365 config/ia64/ia64.h:243
msgid "Specify bit size of immediate TLS offsets"
msgstr ""
-#: config/arc/arc.c:140
+#: config/arc/arc.c:147
#, c-format
msgid "bad value (%s) for -mcpu switch"
msgstr ""
-#: config/arc/arc.c:367
+#: config/arc/arc.c:374
#, c-format
msgid "argument of `%s' attribute is not a string constant"
msgstr ""
-#: config/arc/arc.c:374
+#: config/arc/arc.c:381
#, c-format
msgid "argument of `%s' attribute is not \"ilink1\" or \"ilink2\""
msgstr ""
-#: config/arc/arc.c:1713 config/m32r/m32r.c:2288
+#: config/arc/arc.c:1777 config/m32r/m32r.c:2331
#, c-format
msgid "invalid operand to %%R code"
msgstr ""
-#: config/arc/arc.c:1745 config/m32r/m32r.c:2311
+#: config/arc/arc.c:1809 config/m32r/m32r.c:2354
#, c-format
msgid "invalid operand to %%H/%%L code"
msgstr ""
-#: config/arc/arc.c:1768 config/m32r/m32r.c:2387
+#: config/arc/arc.c:1832 config/m32r/m32r.c:2430
#, c-format
msgid "invalid operand to %%U code"
msgstr ""
-#: config/arc/arc.c:1779
+#: config/arc/arc.c:1843
#, c-format
msgid "invalid operand to %%V code"
msgstr ""
#. Unknown flag.
-#: config/arc/arc.c:1786 config/m32r/m32r.c:2426 config/sparc/sparc.c:6479
+#: config/arc/arc.c:1850 config/m32r/m32r.c:2469 config/sparc/sparc.c:6485
msgid "invalid operand output code"
msgstr ""
-#: config/arm/arm.c:469
+#: config/arm/arm.c:488
#, c-format
msgid "switch -mcpu=%s conflicts with -march= switch"
msgstr ""
-#: config/arm/arm.c:479 config/rs6000/rs6000.c:563 config/sparc/sparc.c:399
+#: config/arm/arm.c:498 config/rs6000/rs6000.c:599 config/sparc/sparc.c:405
#, c-format
msgid "bad value (%s) for %s switch"
msgstr ""
-#: config/arm/arm.c:615
+#: config/arm/arm.c:635
msgid "target CPU does not support APCS-32"
msgstr ""
-#: config/arm/arm.c:620
+#: config/arm/arm.c:640
msgid "target CPU does not support APCS-26"
msgstr ""
-#: config/arm/arm.c:626
+#: config/arm/arm.c:646
msgid "target CPU does not support interworking"
msgstr ""
-#: config/arm/arm.c:632
+#: config/arm/arm.c:652
msgid "target CPU does not support THUMB instructions"
msgstr ""
-#: config/arm/arm.c:646
+#: config/arm/arm.c:666
msgid ""
"enabling backtrace support is only meaningful when compiling for the Thumb"
msgstr ""
-#: config/arm/arm.c:649
+#: config/arm/arm.c:669
msgid ""
"enabling callee interworking support is only meaningful when compiling for "
"the Thumb"
msgstr ""
-#: config/arm/arm.c:652
+#: config/arm/arm.c:672
msgid ""
"enabling caller interworking support is only meaningful when compiling for "
"the Thumb"
msgstr ""
-#: config/arm/arm.c:658
+#: config/arm/arm.c:678
msgid "interworking forces APCS-32 to be used"
msgstr ""
-#: config/arm/arm.c:664
+#: config/arm/arm.c:684
msgid "-mapcs-stack-check incompatible with -mno-apcs-frame"
msgstr ""
-#: config/arm/arm.c:672
+#: config/arm/arm.c:692
msgid "-fpic and -mapcs-reent are incompatible"
msgstr ""
-#: config/arm/arm.c:675
+#: config/arm/arm.c:695
msgid "APCS reentrant code not supported. Ignored"
msgstr ""
-#: config/arm/arm.c:683
+#: config/arm/arm.c:703
msgid "-g with -mno-apcs-frame may not give sensible debugging"
msgstr ""
-#: config/arm/arm.c:691
+#: config/arm/arm.c:711
msgid "passing floating point arguments in fp regs not yet supported"
msgstr ""
-#: config/arm/arm.c:720
+#: config/arm/arm.c:750
#, c-format
msgid "invalid floating point emulation option: -mfpe-%s"
msgstr ""
-#: config/arm/arm.c:744
+#: config/arm/arm.c:761
+msgid "-mfpe switch not supported by ep9312 target cpu - ignored."
+msgstr ""
+
+#: config/arm/arm.c:781
msgid "structure size boundary can only be set to 8 or 32"
msgstr ""
-#: config/arm/arm.c:752
+#: config/arm/arm.c:789
msgid "-mpic-register= is useless without -fpic"
msgstr ""
-#: config/arm/arm.c:759
+#: config/arm/arm.c:796
#, c-format
msgid "unable to use '%s' for PIC register"
msgstr ""
-#: config/arm/arm.c:2071 config/arm/arm.c:2094 config/avr/avr.c:4796
-#: config/c4x/c4x.c:4646 config/h8300/h8300.c:3890 config/i386/i386.c:1531
-#: config/i386/i386.c:1581 config/m68hc11/m68hc11.c:1219
-#: config/mcore/mcore.c:3512 config/ns32k/ns32k.c:1049
-#: config/rs6000/rs6000.c:12486 config/sh/sh.c:5795 config/sh/sh.c:5820
-#: config/sh/sh.c:5859 config/stormy16/stormy16.c:2028 config/v850/v850.c:2182
+#: config/arm/arm.c:2114 config/arm/arm.c:2137 config/avr/avr.c:4803
+#: config/c4x/c4x.c:4652 config/h8300/h8300.c:3990 config/i386/i386.c:1566
+#: config/i386/i386.c:1616 config/ip2k/ip2k.c:3234
+#: config/m68hc11/m68hc11.c:1261 config/mcore/mcore.c:3563
+#: config/ns32k/ns32k.c:1091 config/rs6000/rs6000.c:12677 config/sh/sh.c:6090
+#: config/sh/sh.c:6115 config/sh/sh.c:6154 config/stormy16/stormy16.c:2155
+#: config/v850/v850.c:2238
#, c-format
msgid "`%s' attribute only applies to functions"
msgstr ""
-#: config/arm/arm.c:9485
+#: config/arm/arm.c:10378
msgid "unable to compute real location of stacked parameter"
msgstr ""
-#: config/arm/arm.c:10164
+#: config/arm/arm.c:10981
msgid "no low registers available for popping high registers"
msgstr ""
-#: config/arm/arm.c:10415
+#: config/arm/arm.c:11232
msgid "interrupt Service Routines cannot be coded in Thumb mode"
msgstr ""
-#: config/arm/pe.c:170 config/i386/winnt.c:306 config/mcore/mcore.c:3360
+#: config/arm/pe.c:170 config/i386/winnt.c:316 config/mcore/mcore.c:3411
#, c-format
msgid "initialized variable `%s' is marked dllimport"
msgstr ""
-#: config/arm/pe.c:179 config/i386/winnt.c:315
+#: config/arm/pe.c:179 config/i386/winnt.c:325
#, c-format
msgid "static variable `%s' is marked dllimport"
msgstr ""
-#: config/arm/arm.h:416
+#: config/arm/arm.h:436
msgid "Generate APCS conformant stack frames"
msgstr ""
-#: config/arm/arm.h:419
+#: config/arm/arm.h:439
msgid "Store function names in object code"
msgstr ""
-#: config/arm/arm.h:423
+#: config/arm/arm.h:443
msgid "Use the 32-bit version of the APCS"
msgstr ""
-#: config/arm/arm.h:425
+#: config/arm/arm.h:445
msgid "Use the 26-bit version of the APCS"
msgstr ""
-#: config/arm/arm.h:429
+#: config/arm/arm.h:449
msgid "Pass FP arguments in FP registers"
msgstr ""
-#: config/arm/arm.h:432
+#: config/arm/arm.h:452
msgid "Generate re-entrant, PIC code"
msgstr ""
-#: config/arm/arm.h:435
+#: config/arm/arm.h:455
msgid "The MMU will trap on unaligned accesses"
msgstr ""
-#: config/arm/arm.h:442
+#: config/arm/arm.h:462
msgid "Use library calls to perform FP operations"
msgstr ""
-#: config/arm/arm.h:444 config/i960/i960.h:281
+#: config/arm/arm.h:464 config/i960/i960.h:281
msgid "Use hardware floating point instructions"
msgstr ""
-#: config/arm/arm.h:446
+#: config/arm/arm.h:466
msgid "Assume target CPU is configured as big endian"
msgstr ""
-#: config/arm/arm.h:448
+#: config/arm/arm.h:468
msgid "Assume target CPU is configured as little endian"
msgstr ""
-#: config/arm/arm.h:450
+#: config/arm/arm.h:470
msgid "Assume big endian bytes, little endian words"
msgstr ""
-#: config/arm/arm.h:452
+#: config/arm/arm.h:472
msgid "Support calls between Thumb and ARM instruction sets"
msgstr ""
-#: config/arm/arm.h:455
+#: config/arm/arm.h:475
msgid "Generate a call to abort if a noreturn function returns"
msgstr ""
-#: config/arm/arm.h:458
+#: config/arm/arm.h:478
msgid "Do not move instructions into a function's prologue"
msgstr ""
-#: config/arm/arm.h:461
+#: config/arm/arm.h:481
msgid "Do not load the PIC register in function prologues"
msgstr ""
-#: config/arm/arm.h:464
+#: config/arm/arm.h:484
msgid "Generate call insns as indirect calls, if necessary"
msgstr ""
-#: config/arm/arm.h:467
+#: config/arm/arm.h:487
msgid "Compile for the Thumb not the ARM"
msgstr ""
-#: config/arm/arm.h:471
+#: config/arm/arm.h:491
msgid "Thumb: Generate (non-leaf) stack frames even if not needed"
msgstr ""
-#: config/arm/arm.h:474
+#: config/arm/arm.h:494
msgid "Thumb: Generate (leaf) stack frames even if not needed"
msgstr ""
-#: config/arm/arm.h:477
+#: config/arm/arm.h:497
msgid "Thumb: Assume non-static functions may be called from ARM code"
msgstr ""
-#: config/arm/arm.h:481
+#: config/arm/arm.h:501
msgid "Thumb: Assume function pointers may go to non-Thumb aware code"
msgstr ""
-#: config/arm/arm.h:491
+#: config/arm/arm.h:505
+msgid "Cirrus: Place NOPs to avoid invalid instruction combinations"
+msgstr ""
+
+#: config/arm/arm.h:507
+msgid "Cirrus: Do not break up invalid instruction combinations with NOPs"
+msgstr ""
+
+#: config/arm/arm.h:515
msgid "Specify the name of the target CPU"
msgstr ""
-#: config/arm/arm.h:493
+#: config/arm/arm.h:517
msgid "Specify the name of the target architecture"
msgstr ""
-#: config/arm/arm.h:497
+#: config/arm/arm.h:521
msgid "Specify the version of the floating point emulator"
msgstr ""
-#: config/arm/arm.h:499
+#: config/arm/arm.h:523
msgid "Specify the minimum bit alignment of structures"
msgstr ""
-#: config/arm/arm.h:501
+#: config/arm/arm.h:525
msgid "Specify the register to be used for PIC addressing"
msgstr ""
@@ -8971,55 +9184,55 @@ msgstr ""
msgid "Ignore dllimport attribute for functions"
msgstr ""
-#: config/avr/avr.c:530
+#: config/avr/avr.c:537
#, c-format
msgid "large frame pointer change (%d) with -mtiny-stack"
msgstr ""
-#: config/avr/avr.c:1137
+#: config/avr/avr.c:1144
msgid "bad address, not (reg+disp):"
msgstr ""
-#: config/avr/avr.c:1145
+#: config/avr/avr.c:1152
msgid "internal compiler error. Bad address:"
msgstr ""
-#: config/avr/avr.c:1158
+#: config/avr/avr.c:1165
msgid "internal compiler error. Unknown mode:"
msgstr ""
-#: config/avr/avr.c:1866 config/avr/avr.c:2578
+#: config/avr/avr.c:1873 config/avr/avr.c:2585
msgid "invalid insn:"
msgstr ""
-#: config/avr/avr.c:1903 config/avr/avr.c:1989 config/avr/avr.c:2038
-#: config/avr/avr.c:2047 config/avr/avr.c:2145 config/avr/avr.c:2317
-#: config/avr/avr.c:2615 config/avr/avr.c:2726
+#: config/avr/avr.c:1910 config/avr/avr.c:1996 config/avr/avr.c:2045
+#: config/avr/avr.c:2054 config/avr/avr.c:2152 config/avr/avr.c:2324
+#: config/avr/avr.c:2622 config/avr/avr.c:2733
msgid "incorrect insn:"
msgstr ""
-#: config/avr/avr.c:2066 config/avr/avr.c:2230 config/avr/avr.c:2388
-#: config/avr/avr.c:2770
+#: config/avr/avr.c:2073 config/avr/avr.c:2237 config/avr/avr.c:2395
+#: config/avr/avr.c:2777
msgid "unknown move insn:"
msgstr ""
-#: config/avr/avr.c:3005
+#: config/avr/avr.c:3012
msgid "bad shift insn:"
msgstr ""
-#: config/avr/avr.c:3121 config/avr/avr.c:3551 config/avr/avr.c:3931
+#: config/avr/avr.c:3128 config/avr/avr.c:3558 config/avr/avr.c:3938
msgid "internal compiler error. Incorrect shift:"
msgstr ""
-#: config/avr/avr.c:4769
+#: config/avr/avr.c:4776 config/ip2k/ip2k.c:3207
msgid "only initialized variables can be placed into program memory area"
msgstr ""
-#: config/avr/avr.c:4868
+#: config/avr/avr.c:4875
msgid "only uninitialized variables can be placed in the .noinit section"
msgstr ""
-#: config/avr/avr.c:4883
+#: config/avr/avr.c:4890
#, c-format
msgid "MCU `%s' supported for assembler only"
msgstr ""
@@ -9068,7 +9281,7 @@ msgstr ""
#. For instance, the SH target has only positive offsets in
#. addresses. Thus sorting to put the smallest address first allows
#. the most combinations to be found.
-#: config/avr/avr.h:2408
+#: config/avr/avr.h:2313
msgid "trampolines not supported"
msgstr ""
@@ -9102,98 +9315,98 @@ msgstr ""
msgid "junk at end of '#pragma %s'"
msgstr ""
-#: config/c4x/c4x.c:282
+#: config/c4x/c4x.c:290
#, c-format
msgid "unknown CPU version %d, using 40.\n"
msgstr ""
-#: config/c4x/c4x.c:855
+#: config/c4x/c4x.c:862
#, c-format
msgid "ISR %s requires %d words of local vars, max is 32767"
msgstr ""
-#: config/c4x/c4x.c:1604
+#: config/c4x/c4x.c:1611
msgid "using CONST_DOUBLE for address"
msgstr ""
-#: config/c4x/c4x.c:1744
+#: config/c4x/c4x.c:1751
msgid "c4x_address_cost: Invalid addressing mode"
msgstr ""
-#: config/c4x/c4x.c:1886
+#: config/c4x/c4x.c:1893
#, c-format
msgid "c4x_print_operand: %%L inconsistency"
msgstr ""
-#: config/c4x/c4x.c:1892
+#: config/c4x/c4x.c:1899
#, c-format
msgid "c4x_print_operand: %%N inconsistency"
msgstr ""
-#: config/c4x/c4x.c:1933
+#: config/c4x/c4x.c:1940
#, c-format
msgid "c4x_print_operand: %%O inconsistency"
msgstr ""
-#: config/c4x/c4x.c:2028
+#: config/c4x/c4x.c:2035
msgid "c4x_print_operand: Bad operand case"
msgstr ""
-#: config/c4x/c4x.c:2071
+#: config/c4x/c4x.c:2078
msgid "c4x_print_operand_address: Bad post_modify"
msgstr ""
-#: config/c4x/c4x.c:2093
+#: config/c4x/c4x.c:2100
msgid "c4x_print_operand_address: Bad pre_modify"
msgstr ""
-#: config/c4x/c4x.c:2141 config/c4x/c4x.c:2153 config/c4x/c4x.c:2168
+#: config/c4x/c4x.c:2148 config/c4x/c4x.c:2160 config/c4x/c4x.c:2175
msgid "c4x_print_operand_address: Bad operand case"
msgstr ""
-#: config/c4x/c4x.c:2424
+#: config/c4x/c4x.c:2431
msgid "c4x_rptb_insert: Cannot find start label"
msgstr ""
-#: config/c4x/c4x.c:3411 config/c4x/c4x.c:3431
+#: config/c4x/c4x.c:3418 config/c4x/c4x.c:3438
msgid "mode not QImode"
msgstr ""
-#: config/c4x/c4x.c:3516
+#: config/c4x/c4x.c:3523
msgid "invalid indirect memory address"
msgstr ""
-#: config/c4x/c4x.c:3605
+#: config/c4x/c4x.c:3612
msgid "invalid indirect (S) memory address"
msgstr ""
-#: config/c4x/c4x.c:3946
+#: config/c4x/c4x.c:3953
msgid "c4x_valid_operands: Internal error"
msgstr ""
-#: config/c4x/c4x.c:4426
+#: config/c4x/c4x.c:4433
msgid "c4x_operand_subword: invalid mode"
msgstr ""
-#: config/c4x/c4x.c:4429
+#: config/c4x/c4x.c:4436
msgid "c4x_operand_subword: invalid operand"
msgstr ""
#. We could handle these with some difficulty.
#. e.g., *p-- => *(p-=2); *(p+1).
-#: config/c4x/c4x.c:4455
+#: config/c4x/c4x.c:4462
msgid "c4x_operand_subword: invalid autoincrement"
msgstr ""
-#: config/c4x/c4x.c:4461
+#: config/c4x/c4x.c:4468
msgid "c4x_operand_subword: invalid address"
msgstr ""
-#: config/c4x/c4x.c:4472
+#: config/c4x/c4x.c:4479
msgid "c4x_operand_subword: address not offsettable"
msgstr ""
-#: config/c4x/c4x.c:4672
+#: config/c4x/c4x.c:4678
msgid "c4x_rptb_rpts_p: Repeat block top label moved\n"
msgstr ""
@@ -9236,485 +9449,485 @@ msgstr ""
#. each pair being { "NAME", VALUE, "DESCRIPTION" }
#. where VALUE is the bits to set or minus the bits to clear.
#. An empty string NAME is used to identify the default VALUE.
-#: config/c4x/c4x.h:170
+#: config/c4x/c4x.h:166
msgid "Small memory model"
msgstr ""
-#: config/c4x/c4x.h:172
+#: config/c4x/c4x.h:168
msgid "Big memory model"
msgstr ""
-#: config/c4x/c4x.h:174
+#: config/c4x/c4x.h:170
msgid "Use MPYI instruction for C3x"
msgstr ""
-#: config/c4x/c4x.h:176
+#: config/c4x/c4x.h:172
msgid "Do not use MPYI instruction for C3x"
msgstr ""
-#: config/c4x/c4x.h:178
+#: config/c4x/c4x.h:174
msgid "Use fast but approximate float to integer conversion"
msgstr ""
-#: config/c4x/c4x.h:180
+#: config/c4x/c4x.h:176
msgid "Use slow but accurate float to integer conversion"
msgstr ""
-#: config/c4x/c4x.h:182
+#: config/c4x/c4x.h:178
msgid "Enable use of RTPS instruction"
msgstr ""
-#: config/c4x/c4x.h:184
+#: config/c4x/c4x.h:180
msgid "Disable use of RTPS instruction"
msgstr ""
-#: config/c4x/c4x.h:186
+#: config/c4x/c4x.h:182
msgid "Enable use of RTPB instruction"
msgstr ""
-#: config/c4x/c4x.h:188
+#: config/c4x/c4x.h:184
msgid "Disable use of RTPB instruction"
msgstr ""
-#: config/c4x/c4x.h:190
+#: config/c4x/c4x.h:186
msgid "Generate code for C30 CPU"
msgstr ""
-#: config/c4x/c4x.h:192
+#: config/c4x/c4x.h:188
msgid "Generate code for C31 CPU"
msgstr ""
-#: config/c4x/c4x.h:194
+#: config/c4x/c4x.h:190
msgid "Generate code for C32 CPU"
msgstr ""
-#: config/c4x/c4x.h:196
+#: config/c4x/c4x.h:192
msgid "Generate code for C33 CPU"
msgstr ""
-#: config/c4x/c4x.h:198
+#: config/c4x/c4x.h:194
msgid "Generate code for C40 CPU"
msgstr ""
-#: config/c4x/c4x.h:200
+#: config/c4x/c4x.h:196
msgid "Generate code for C44 CPU"
msgstr ""
-#: config/c4x/c4x.h:202
+#: config/c4x/c4x.h:198
msgid "Emit code compatible with TI tools"
msgstr ""
-#: config/c4x/c4x.h:204
+#: config/c4x/c4x.h:200
msgid "Emit code to use GAS extensions"
msgstr ""
-#: config/c4x/c4x.h:206 config/c4x/c4x.h:210
+#: config/c4x/c4x.h:202 config/c4x/c4x.h:206
msgid "Save DP across ISR in small memory model"
msgstr ""
-#: config/c4x/c4x.h:208 config/c4x/c4x.h:212
+#: config/c4x/c4x.h:204 config/c4x/c4x.h:208
msgid "Don't save DP across ISR in small memory model"
msgstr ""
-#: config/c4x/c4x.h:214
+#: config/c4x/c4x.h:210
msgid "Pass arguments on the stack"
msgstr ""
-#: config/c4x/c4x.h:216
+#: config/c4x/c4x.h:212
msgid "Pass arguments in registers"
msgstr ""
-#: config/c4x/c4x.h:218
+#: config/c4x/c4x.h:214
msgid "Enable new features under development"
msgstr ""
-#: config/c4x/c4x.h:220
+#: config/c4x/c4x.h:216
msgid "Disable new features under development"
msgstr ""
-#: config/c4x/c4x.h:222
+#: config/c4x/c4x.h:218
msgid "Use the BK register as a general purpose register"
msgstr ""
-#: config/c4x/c4x.h:224
+#: config/c4x/c4x.h:220
msgid "Do not allocate BK register"
msgstr ""
-#: config/c4x/c4x.h:226
+#: config/c4x/c4x.h:222
msgid "Enable use of DB instruction"
msgstr ""
-#: config/c4x/c4x.h:228
+#: config/c4x/c4x.h:224
msgid "Disable use of DB instruction"
msgstr ""
-#: config/c4x/c4x.h:230
+#: config/c4x/c4x.h:226
msgid "Enable debugging"
msgstr ""
-#: config/c4x/c4x.h:232
+#: config/c4x/c4x.h:228
msgid "Disable debugging"
msgstr ""
-#: config/c4x/c4x.h:234
+#: config/c4x/c4x.h:230
msgid "Force constants into registers to improve hoisting"
msgstr ""
-#: config/c4x/c4x.h:236
+#: config/c4x/c4x.h:232
msgid "Don't force constants into registers"
msgstr ""
-#: config/c4x/c4x.h:238
+#: config/c4x/c4x.h:234
msgid "Force RTL generation to emit valid 3 operand insns"
msgstr ""
-#: config/c4x/c4x.h:240
+#: config/c4x/c4x.h:236
msgid "Allow RTL generation to emit invalid 3 operand insns"
msgstr ""
-#: config/c4x/c4x.h:242
+#: config/c4x/c4x.h:238
msgid "Allow unsigned interation counts for RPTB/DB"
msgstr ""
-#: config/c4x/c4x.h:244
+#: config/c4x/c4x.h:240
msgid "Disallow unsigned iteration counts for RPTB/DB"
msgstr ""
-#: config/c4x/c4x.h:246
+#: config/c4x/c4x.h:242
msgid "Preserve all 40 bits of FP reg across call"
msgstr ""
-#: config/c4x/c4x.h:248
+#: config/c4x/c4x.h:244
msgid "Only preserve 32 bits of FP reg across call"
msgstr ""
-#: config/c4x/c4x.h:250
+#: config/c4x/c4x.h:246
msgid "Enable parallel instructions"
msgstr ""
-#: config/c4x/c4x.h:252
+#: config/c4x/c4x.h:248
msgid "Disable parallel instructions"
msgstr ""
-#: config/c4x/c4x.h:254
+#: config/c4x/c4x.h:250
msgid "Enable MPY||ADD and MPY||SUB instructions"
msgstr ""
-#: config/c4x/c4x.h:256
+#: config/c4x/c4x.h:252
msgid "Disable MPY||ADD and MPY||SUB instructions"
msgstr ""
-#: config/c4x/c4x.h:258
+#: config/c4x/c4x.h:254
msgid "Assume that pointers may be aliased"
msgstr ""
-#: config/c4x/c4x.h:260
+#: config/c4x/c4x.h:256
msgid "Assume that pointers not aliased"
msgstr ""
-#: config/c4x/c4x.h:333
+#: config/c4x/c4x.h:329
msgid "Specify maximum number of iterations for RPTS"
msgstr ""
-#: config/c4x/c4x.h:335
+#: config/c4x/c4x.h:331
msgid "Select CPU to generate code for"
msgstr ""
-#: config/cris/cris.c:585
+#: config/cris/cris.c:608
msgid "unexpected index-type in cris_print_index"
msgstr ""
-#: config/cris/cris.c:601
+#: config/cris/cris.c:624
msgid "unexpected base-type in cris_print_base"
msgstr ""
-#: config/cris/cris.c:894
+#: config/cris/cris.c:917
#, c-format
msgid "stackframe too big: %d bytes"
msgstr ""
-#: config/cris/cris.c:1209
+#: config/cris/cris.c:1232
msgid "allocated but unused delay list in epilogue"
msgstr ""
-#: config/cris/cris.c:1219
+#: config/cris/cris.c:1242
msgid ""
"unexpected function type needing stack adjustment for __builtin_eh_return"
msgstr ""
-#: config/cris/cris.c:1298
+#: config/cris/cris.c:1321
msgid "invalid operand for 'b' modifier"
msgstr ""
-#: config/cris/cris.c:1310
+#: config/cris/cris.c:1333
msgid "invalid operand for 'v' modifier"
msgstr ""
-#: config/cris/cris.c:1320
+#: config/cris/cris.c:1343
msgid "invalid operand for 'P' modifier"
msgstr ""
-#: config/cris/cris.c:1327
+#: config/cris/cris.c:1350
msgid "invalid operand for 'p' modifier"
msgstr ""
-#: config/cris/cris.c:1366
+#: config/cris/cris.c:1389
msgid "invalid operand for 'z' modifier"
msgstr ""
-#: config/cris/cris.c:1397 config/cris/cris.c:1427
+#: config/cris/cris.c:1420 config/cris/cris.c:1450
msgid "invalid operand for 'H' modifier"
msgstr ""
-#: config/cris/cris.c:1403
+#: config/cris/cris.c:1426
msgid "bad register"
msgstr ""
-#: config/cris/cris.c:1441
+#: config/cris/cris.c:1464
msgid "invalid operand for 'e' modifier"
msgstr ""
-#: config/cris/cris.c:1458
+#: config/cris/cris.c:1481
msgid "invalid operand for 'm' modifier"
msgstr ""
-#: config/cris/cris.c:1483
+#: config/cris/cris.c:1506
msgid "invalid operand for 'A' modifier"
msgstr ""
-#: config/cris/cris.c:1491
+#: config/cris/cris.c:1514
msgid "invalid operand for 'D' modifier"
msgstr ""
-#: config/cris/cris.c:1505
+#: config/cris/cris.c:1528
msgid "invalid operand for 'T' modifier"
msgstr ""
-#: config/cris/cris.c:1514
+#: config/cris/cris.c:1537
msgid "invalid operand modifier letter"
msgstr ""
-#: config/cris/cris.c:1522
+#: config/cris/cris.c:1545
#, c-format
msgid "internal error: bad register: %d"
msgstr ""
-#: config/cris/cris.c:1570
+#: config/cris/cris.c:1593
msgid "unexpected multiplicative operand"
msgstr ""
-#: config/cris/cris.c:1590
+#: config/cris/cris.c:1613
msgid "unexpected operand"
msgstr ""
-#: config/cris/cris.c:1625 config/cris/cris.c:1635
+#: config/cris/cris.c:1648 config/cris/cris.c:1658
msgid "unrecognized address"
msgstr ""
-#: config/cris/cris.c:1991
+#: config/cris/cris.c:2014
msgid "internal error: sideeffect-insn affecting main effect"
msgstr ""
#. If we get here, the caller got its initial tests wrong.
-#: config/cris/cris.c:2278
+#: config/cris/cris.c:2412
msgid "internal error: cris_side_effect_mode_ok with bad operands"
msgstr ""
-#: config/cris/cris.c:2360 config/cris/cris.c:2418
+#: config/cris/cris.c:2494 config/cris/cris.c:2552
msgid "unrecognized supposed constant"
msgstr ""
-#: config/cris/cris.c:2459
+#: config/cris/cris.c:2593
msgid "unrecognized supposed constant in cris_global_pic_symbol"
msgstr ""
-#: config/cris/cris.c:2478
+#: config/cris/cris.c:2612
#, c-format
msgid "-max-stackframe=%d is not usable, not between 0 and %d"
msgstr ""
-#: config/cris/cris.c:2506
+#: config/cris/cris.c:2640
#, c-format
msgid "unknown CRIS version specification in -march= or -mcpu= : %s"
msgstr ""
-#: config/cris/cris.c:2542
+#: config/cris/cris.c:2676
#, c-format
msgid "unknown CRIS cpu version specification in -mtune= : %s"
msgstr ""
-#: config/cris/cris.c:2560
+#: config/cris/cris.c:2694
msgid "-fPIC and -fpic are not supported in this configuration"
msgstr ""
-#: config/cris/cris.c:2576
+#: config/cris/cris.c:2710
msgid "that particular -g option is invalid with -maout and -melinux"
msgstr ""
-#: config/cris/cris.c:2810 config/cris/cris.c:2855
+#: config/cris/cris.c:2944 config/cris/cris.c:2989
msgid "unexpected side-effects in address"
msgstr ""
#. Labels are never marked as global symbols.
-#: config/cris/cris.c:2952 config/cris/cris.c:2983
+#: config/cris/cris.c:3086 config/cris/cris.c:3117
msgid "unexpected PIC symbol"
msgstr ""
-#: config/cris/cris.c:2956
+#: config/cris/cris.c:3090
msgid "PIC register isn't set up"
msgstr ""
-#: config/cris/cris.c:2969 config/cris/cris.c:3052
+#: config/cris/cris.c:3103 config/cris/cris.c:3186
msgid "unexpected address expression"
msgstr ""
-#: config/cris/cris.c:2987
+#: config/cris/cris.c:3121
msgid "emitting PIC operand, but PIC register isn't set up"
msgstr ""
-#: config/cris/cris.c:2996
+#: config/cris/cris.c:3130
msgid "unexpected NOTE as addr_const:"
msgstr ""
-#: config/cris/aout.h:106
+#: config/cris/aout.h:108
msgid "Compile for the MMU-less Etrax 100-based elinux system"
msgstr ""
-#: config/cris/aout.h:113
+#: config/cris/aout.h:115
msgid "For elinux, request a specified stack-size for this program"
msgstr ""
#. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models.
-#: config/cris/cris.h:336
+#: config/cris/cris.h:340
msgid "Compile for ETRAX 4 (CRIS v3)"
msgstr ""
-#: config/cris/cris.h:341
+#: config/cris/cris.h:345
msgid "Compile for ETRAX 100 (CRIS v8)"
msgstr ""
-#: config/cris/cris.h:345
+#: config/cris/cris.h:349
msgid "Emit verbose debug information in assembly code"
msgstr ""
-#: config/cris/cris.h:348
+#: config/cris/cris.h:352
msgid "Do not use condition codes from normal instructions"
msgstr ""
-#: config/cris/cris.h:352
+#: config/cris/cris.h:356
msgid "Do not emit addressing modes with side-effect assignment"
msgstr ""
-#: config/cris/cris.h:355
+#: config/cris/cris.h:359
msgid "Do not tune stack alignment"
msgstr ""
-#: config/cris/cris.h:358
+#: config/cris/cris.h:362
msgid "Do not tune writable data alignment"
msgstr ""
-#: config/cris/cris.h:361
+#: config/cris/cris.h:365
msgid "Do not tune code and read-only data alignment"
msgstr ""
-#: config/cris/cris.h:370
+#: config/cris/cris.h:374
msgid "Align code and data to 32 bits"
msgstr ""
-#: config/cris/cris.h:383
+#: config/cris/cris.h:387
msgid "Don't align items in code or data"
msgstr ""
-#: config/cris/cris.h:386
+#: config/cris/cris.h:390
msgid "Do not emit function prologue or epilogue"
msgstr ""
#. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC.
-#: config/cris/cris.h:390
+#: config/cris/cris.h:394
msgid "Use the most feature-enabling options allowed by other options"
msgstr ""
#. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files.
-#: config/cris/cris.h:396
+#: config/cris/cris.h:400
msgid "Override -mbest-lib-options"
msgstr ""
-#: config/cris/cris.h:428
+#: config/cris/cris.h:432
msgid "Generate code for the specified chip or CPU version"
msgstr ""
-#: config/cris/cris.h:430
+#: config/cris/cris.h:434
msgid "Tune alignment for the specified chip or CPU version"
msgstr ""
-#: config/cris/cris.h:432
+#: config/cris/cris.h:436
msgid "Warn when a stackframe is larger than the specified size"
msgstr ""
#. Node: Profiling
-#: config/cris/cris.h:1019
+#: config/cris/cris.h:1022
msgid "no FUNCTION_PROFILER for CRIS"
msgstr ""
-#: config/cris/linux.h:74
+#: config/cris/linux.h:71
msgid "Together with -fpic and -fPIC, do not use GOTPLT references"
msgstr ""
-#: config/d30v/d30v.c:209
+#: config/d30v/d30v.c:215
#, c-format
msgid "bad modes_tieable_p for register %s, mode1 %s, mode2 %s"
msgstr ""
-#: config/d30v/d30v.c:2668
+#: config/d30v/d30v.c:2675
msgid "bad insn to d30v_print_operand_address:"
msgstr ""
-#: config/d30v/d30v.c:2685 config/d30v/d30v.c:2746 config/d30v/d30v.c:2767
-#: config/d30v/d30v.c:2785
+#: config/d30v/d30v.c:2692 config/d30v/d30v.c:2753 config/d30v/d30v.c:2774
+#: config/d30v/d30v.c:2792
msgid "bad insn to d30v_print_operand_memory_reference:"
msgstr ""
-#: config/d30v/d30v.c:2853
+#: config/d30v/d30v.c:2860
msgid "bad insn to d30v_print_operand, 'f' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2862
+#: config/d30v/d30v.c:2869
msgid "bad insn to d30v_print_operand, 'A' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2869
+#: config/d30v/d30v.c:2876
msgid "bad insn to d30v_print_operand, 'M' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2923
+#: config/d30v/d30v.c:2930
msgid "bad insn to print_operand, 'F' or 'T' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2934
+#: config/d30v/d30v.c:2941
msgid "bad insn to print_operand, 'B' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2941
+#: config/d30v/d30v.c:2948
msgid "bad insn to print_operand, 'E' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2959
+#: config/d30v/d30v.c:2966
msgid "bad insn to print_operand, 'R' modifier:"
msgstr ""
-#: config/d30v/d30v.c:2968 config/d30v/d30v.c:2976
+#: config/d30v/d30v.c:2975 config/d30v/d30v.c:2983
msgid "bad insn to print_operand, 's' modifier:"
msgstr ""
-#: config/d30v/d30v.c:3005
+#: config/d30v/d30v.c:3012
msgid "bad insn in d30v_print_operand, 0 case"
msgstr ""
-#: config/d30v/d30v.c:3303
+#: config/d30v/d30v.c:3310
msgid "d30v_emit_comparison"
msgstr ""
-#: config/d30v/d30v.c:3347
+#: config/d30v/d30v.c:3354
msgid "bad call to d30v_move_2words"
msgstr ""
@@ -9762,35 +9975,35 @@ msgstr ""
msgid "Change the threshold for conversion to conditional execution"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:1448 config/dsp16xx/dsp16xx.c:1471
+#: config/dsp16xx/dsp16xx.c:1456 config/dsp16xx/dsp16xx.c:1479
msgid "stack size > 32k"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:1680
+#: config/dsp16xx/dsp16xx.c:1688
msgid "invalid addressing mode"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:1823
+#: config/dsp16xx/dsp16xx.c:1831
msgid "bad register extension code"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:1923
+#: config/dsp16xx/dsp16xx.c:1931
msgid "invalid offset in ybase addressing"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:1926
+#: config/dsp16xx/dsp16xx.c:1934
msgid "invalid register in ybase addressing"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:2101
+#: config/dsp16xx/dsp16xx.c:2109
msgid "invalid shift operator in emit_1600_core_shift"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:2430
+#: config/dsp16xx/dsp16xx.c:2438
msgid "invalid mode for gen_tst_reg"
msgstr ""
-#: config/dsp16xx/dsp16xx.c:2502
+#: config/dsp16xx/dsp16xx.c:2510
msgid "invalid mode for integer comparison in gen_compare_reg"
msgstr ""
@@ -9885,8 +10098,8 @@ msgstr ""
#. Output assembler code to FILE to increment profiler label # LABELNO
#. for profiling a function entry.
-#: config/dsp16xx/dsp16xx.h:1218 config/dsp16xx/dsp16xx.h:1749
-#: config/dsp16xx/dsp16xx.h:1754
+#: config/dsp16xx/dsp16xx.h:1218 config/dsp16xx/dsp16xx.h:1675
+#: config/dsp16xx/dsp16xx.h:1680
msgid "profiling not implemented yet"
msgstr ""
@@ -9944,136 +10157,136 @@ msgstr ""
msgid "Assume small address space"
msgstr ""
-#: config/frv/frv.c:412 config/frv/frv.c:430
+#: config/frv/frv.c:415 config/frv/frv.c:433
#, c-format
msgid "Unknown cpu: -mcpu=%s"
msgstr ""
-#: config/frv/frv.c:453
+#: config/frv/frv.c:456
msgid "-fpic and -gdwarf are incompatible (-fpic and -g/-gdwarf-2 are fine)"
msgstr ""
-#: config/frv/frv.c:2522
+#: config/frv/frv.c:2525
msgid "Bad insn to frv_print_operand_address:"
msgstr ""
-#: config/frv/frv.c:2535
+#: config/frv/frv.c:2538
msgid "Bad register to frv_print_operand_memory_reference_reg:"
msgstr ""
-#: config/frv/frv.c:2576 config/frv/frv.c:2586 config/frv/frv.c:2595
-#: config/frv/frv.c:2623 config/frv/frv.c:2635 config/frv/frv.c:2639
+#: config/frv/frv.c:2579 config/frv/frv.c:2589 config/frv/frv.c:2598
+#: config/frv/frv.c:2626 config/frv/frv.c:2638 config/frv/frv.c:2642
msgid "Bad insn to frv_print_operand_memory_reference:"
msgstr ""
-#: config/frv/frv.c:2781
+#: config/frv/frv.c:2784
msgid "Bad insn in frv_print_operand, bad const_double"
msgstr ""
-#: config/frv/frv.c:2826
+#: config/frv/frv.c:2829
msgid "Bad insn to frv_print_operand, 'C' modifier:"
msgstr ""
-#: config/frv/frv.c:2849
+#: config/frv/frv.c:2852
msgid "Bad insn to frv_print_operand, 'c' modifier:"
msgstr ""
-#: config/frv/frv.c:2874
+#: config/frv/frv.c:2877
msgid "Bad insn to frv_print_operand, 'e' modifier:"
msgstr ""
-#: config/frv/frv.c:2882
+#: config/frv/frv.c:2885
msgid "Bad insn to frv_print_operand, 'F' modifier:"
msgstr ""
-#: config/frv/frv.c:2898
+#: config/frv/frv.c:2901
msgid "Bad insn to frv_print_operand, 'f' modifier:"
msgstr ""
-#: config/frv/frv.c:2951
+#: config/frv/frv.c:2954
msgid "Bad insn to frv_print_operand, 'L' modifier:"
msgstr ""
-#: config/frv/frv.c:2964
+#: config/frv/frv.c:2967
msgid "Bad insn to frv_print_operand, 'M/N' modifier:"
msgstr ""
-#: config/frv/frv.c:2985
+#: config/frv/frv.c:2988
msgid "Bad insn to frv_print_operand, 'O' modifier:"
msgstr ""
-#: config/frv/frv.c:3003
+#: config/frv/frv.c:3006
msgid "Bad insn to frv_print_operand, P modifier:"
msgstr ""
-#: config/frv/frv.c:3023
+#: config/frv/frv.c:3026
msgid "Bad insn in frv_print_operand, z case"
msgstr ""
-#: config/frv/frv.c:3051
+#: config/frv/frv.c:3054
msgid "Bad insn in frv_print_operand, 0 case"
msgstr ""
-#: config/frv/frv.c:3056
+#: config/frv/frv.c:3059
msgid "frv_print_operand: unknown code"
msgstr ""
-#: config/frv/frv.c:5739
+#: config/frv/frv.c:5742
msgid "Bad output_move_single operand"
msgstr ""
-#: config/frv/frv.c:5868
+#: config/frv/frv.c:5871
msgid "Bad output_move_double operand"
msgstr ""
-#: config/frv/frv.c:6012
+#: config/frv/frv.c:6015
msgid "Bad output_condmove_single operand"
msgstr ""
-#: config/frv/frv.c:8317
+#: config/frv/frv.c:8320
msgid "frv_registers_update"
msgstr ""
-#: config/frv/frv.c:8477
+#: config/frv/frv.c:8480
msgid "frv_registers_used_p"
msgstr ""
-#: config/frv/frv.c:8606
+#: config/frv/frv.c:8609
msgid "frv_registers_set_p"
msgstr ""
-#: config/frv/frv.c:9173
+#: config/frv/frv.c:9176
msgid "accumulator is not a constant integer"
msgstr ""
-#: config/frv/frv.c:9178
+#: config/frv/frv.c:9181
msgid "accumulator number is out of bounds"
msgstr ""
-#: config/frv/frv.c:9189
+#: config/frv/frv.c:9192
#, c-format
msgid "inappropriate accumulator for `%s'"
msgstr ""
-#: config/frv/frv.c:9255
+#: config/frv/frv.c:9258
#, c-format
msgid "`%s' expects a constant argument"
msgstr ""
-#: config/frv/frv.c:9260
+#: config/frv/frv.c:9263
#, c-format
msgid "constant argument out of range for `%s'"
msgstr ""
-#: config/frv/frv.c:9640
+#: config/frv/frv.c:9643
msgid "media functions are not available unless -mmedia is used"
msgstr ""
-#: config/frv/frv.c:9652
+#: config/frv/frv.c:9655
msgid "this media function is only available on the fr500"
msgstr ""
-#: config/frv/frv.c:9680
+#: config/frv/frv.c:9683
msgid "this media function is only available on the fr400"
msgstr ""
@@ -10086,15 +10299,15 @@ msgstr ""
#. #else
#. #define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)");
#. #endif
-#: config/frv/frv.h:512
+#: config/frv/frv.h:509
msgid " (frv)"
msgstr ""
-#: config/h8300/h8300.c:316
+#: config/h8300/h8300.c:311
msgid "-ms2600 is used without -ms"
msgstr ""
-#: config/h8300/h8300.c:322
+#: config/h8300/h8300.c:317
msgid "-mn is used without -mh or -ms"
msgstr ""
@@ -10163,15 +10376,15 @@ msgstr ""
msgid "malformed #pragma map, ignored"
msgstr ""
-#: config/i370/i370.c:920
+#: config/i370/i370.c:923
msgid "real name is too long - alias ignored"
msgstr ""
-#: config/i370/i370.c:925
+#: config/i370/i370.c:928
msgid "alias name is too long - alias ignored"
msgstr ""
-#: config/i370/i370.c:1196
+#: config/i370/i370.c:1199
msgid "internal error--no jump follows compare:"
msgstr ""
@@ -10187,216 +10400,221 @@ msgstr ""
msgid "Do not generate char instructions"
msgstr ""
-#: config/i386/i386.c:1124
+#: config/i386/i386.c:1158
#, c-format
msgid "code model %s not supported in PIC mode"
msgstr ""
-#: config/i386/i386.c:1134 config/sparc/sparc.c:362
+#: config/i386/i386.c:1168 config/sparc/sparc.c:368
#, c-format
msgid "bad value (%s) for -mcmodel= switch"
msgstr ""
-#: config/i386/i386.c:1149
+#: config/i386/i386.c:1183
#, c-format
msgid "bad value (%s) for -masm= switch"
msgstr ""
-#: config/i386/i386.c:1152
+#: config/i386/i386.c:1186
#, c-format
msgid "code model `%s' not supported in the %s bit mode"
msgstr ""
-#: config/i386/i386.c:1155
+#: config/i386/i386.c:1189
msgid "code model `large' not supported yet"
msgstr ""
-#: config/i386/i386.c:1157
+#: config/i386/i386.c:1191
#, c-format
msgid "%i-bit mode not compiled in"
msgstr ""
-#: config/i386/i386.c:1184 config/i386/i386.c:1196
+#: config/i386/i386.c:1218 config/i386/i386.c:1230
msgid "CPU you selected does not support x86-64 instruction set"
msgstr ""
-#: config/i386/i386.c:1189 config/s390/s390.c:903
+#: config/i386/i386.c:1223 config/s390/s390.c:948
#, c-format
msgid "bad value (%s) for -march= switch"
msgstr ""
-#: config/i386/i386.c:1202 config/s390/s390.c:922
+#: config/i386/i386.c:1236 config/s390/s390.c:967
#, c-format
-msgid "bad value (%s) for -mcpu= switch"
+msgid "bad value (%s) for -mtune= switch"
msgstr ""
-#: config/i386/i386.c:1219
+#: config/i386/i386.c:1253
#, c-format
msgid "-mregparm=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:1232
+#: config/i386/i386.c:1266
msgid "-malign-loops is obsolete, use -falign-loops"
msgstr ""
-#: config/i386/i386.c:1237 config/i386/i386.c:1250 config/i386/i386.c:1263
+#: config/i386/i386.c:1271 config/i386/i386.c:1284 config/i386/i386.c:1297
#, c-format
msgid "-malign-loops=%d is not between 0 and %d"
msgstr ""
-#: config/i386/i386.c:1245
+#: config/i386/i386.c:1279
msgid "-malign-jumps is obsolete, use -falign-jumps"
msgstr ""
-#: config/i386/i386.c:1258
+#: config/i386/i386.c:1292
msgid "-malign-functions is obsolete, use -falign-functions"
msgstr ""
-#: config/i386/i386.c:1296
+#: config/i386/i386.c:1330
#, c-format
msgid "-mpreferred-stack-boundary=%d is not between %d and 12"
msgstr ""
-#: config/i386/i386.c:1308
+#: config/i386/i386.c:1342
#, c-format
msgid "-mbranch-cost=%d is not between 0 and 5"
msgstr ""
-#: config/i386/i386.c:1320
+#: config/i386/i386.c:1354
#, c-format
msgid "bad value (%s) for -mtls-dialect= switch"
msgstr ""
-#: config/i386/i386.c:1341
+#: config/i386/i386.c:1375
msgid "-malign-double makes no sense in the 64bit mode"
msgstr ""
-#: config/i386/i386.c:1343
+#: config/i386/i386.c:1377
msgid "-mrtd calling convention not supported in the 64bit mode"
msgstr ""
-#: config/i386/i386.c:1359 config/i386/i386.c:1370
+#: config/i386/i386.c:1393 config/i386/i386.c:1404
msgid "SSE instruction set disabled, using 387 arithmetics"
msgstr ""
-#: config/i386/i386.c:1375
+#: config/i386/i386.c:1409
msgid "387 instruction set disabled, using SSE arithmetics"
msgstr ""
-#: config/i386/i386.c:1382
+#: config/i386/i386.c:1416
#, c-format
msgid "bad value (%s) for -mfpmath= switch"
msgstr ""
-#: config/i386/i386.c:1541 config/i386/i386.c:1552
+#: config/i386/i386.c:1576 config/i386/i386.c:1587
msgid "fastcall and stdcall attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:1545 config/i386/i386.c:1605
+#: config/i386/i386.c:1580 config/i386/i386.c:1640
msgid "fastcall and regparm attributes are not compatible"
msgstr ""
-#: config/i386/i386.c:1592
+#: config/i386/i386.c:1627
#, c-format
msgid "`%s' attribute requires an integer constant argument"
msgstr ""
-#: config/i386/i386.c:1598
+#: config/i386/i386.c:1633
#, c-format
msgid "argument to `%s' attribute larger than %d"
msgstr ""
-#: config/i386/i386.c:6460
+#: config/i386/i386.c:6810
msgid "invalid UNSPEC as operand"
msgstr ""
-#: config/i386/i386.c:6722
+#: config/i386/i386.c:7072
msgid "extended registers have no high halves"
msgstr ""
-#: config/i386/i386.c:6737
+#: config/i386/i386.c:7087
msgid "unsupported operand size for extended register"
msgstr ""
-#: config/i386/i386.c:7052
+#: config/i386/i386.c:7402
msgid ""
"operand is neither a constant nor a condition code, invalid operand code 'c'"
msgstr ""
-#: config/i386/i386.c:7098
+#: config/i386/i386.c:7448
#, c-format
msgid "invalid operand code `%c'"
msgstr ""
-#: config/i386/i386.c:7145
+#: config/i386/i386.c:7495
msgid "invalid constraints for operand"
msgstr ""
-#: config/i386/i386.c:11425
+#: config/i386/i386.c:11946
msgid "unknown insn mode"
msgstr ""
#. @@@ better error message
-#: config/i386/i386.c:13477 config/i386/i386.c:13513
+#: config/i386/i386.c:14062 config/i386/i386.c:14098
msgid "selector must be an immediate"
msgstr ""
#. @@@ better error message
-#: config/i386/i386.c:13674 config/i386/i386.c:13708
+#: config/i386/i386.c:14259 config/i386/i386.c:14293
msgid "mask must be an immediate"
msgstr ""
-#: config/i386/i386.c:13740
+#: config/i386/i386.c:14325
msgid "shift must be an immediate"
msgstr ""
-#: config/i386/winnt.c:108
+#: config/i386/i386.c:15327
+#, c-format
+msgid "`%s' incompatible attribute ignored"
+msgstr ""
+
+#: config/i386/winnt.c:117
#, c-format
msgid "`%s' attribute only applies to variables"
msgstr ""
-#: config/i386/winnt.c:278
+#: config/i386/winnt.c:288
#, c-format
msgid "`%s' declared as both exported to and imported from a DLL"
msgstr ""
-#: config/i386/cygwin.h:45
+#: config/i386/cygming.h:40
msgid "Use the Cygwin interface"
msgstr ""
-#: config/i386/cygwin.h:46
+#: config/i386/cygming.h:41
msgid "Use the Mingw32 interface"
msgstr ""
-#: config/i386/cygwin.h:47
+#: config/i386/cygming.h:42
msgid "Create GUI application"
msgstr ""
-#: config/i386/cygwin.h:48
+#: config/i386/cygming.h:43
msgid "Don't set Windows defines"
msgstr ""
-#: config/i386/cygwin.h:49
+#: config/i386/cygming.h:44
msgid "Set Windows defines"
msgstr ""
-#: config/i386/cygwin.h:50
+#: config/i386/cygming.h:45
msgid "Create console application"
msgstr ""
-#: config/i386/cygwin.h:51 config/i386/win32.h:59
+#: config/i386/cygming.h:46 config/i386/win32.h:59
msgid "Generate code for a DLL"
msgstr ""
-#: config/i386/cygwin.h:53 config/i386/win32.h:61
+#: config/i386/cygming.h:48 config/i386/win32.h:61
msgid "Ignore dllimport for functions"
msgstr ""
-#: config/i386/cygwin.h:55
+#: config/i386/cygming.h:50
msgid "Use Mingw-specific thread support"
msgstr ""
-#: config/i386/cygwin.h:246
+#: config/i386/cygming.h:166
#, c-format
msgid "-f%s ignored for target (all code is position independent)"
msgstr ""
@@ -10415,150 +10633,150 @@ msgstr ""
#. Deprecated.
#. Deprecated.
#. Deprecated.
-#: config/i386/i386.h:327
+#: config/i386/i386.h:329
msgid "Alternate calling convention"
msgstr ""
-#: config/i386/i386.h:329 config/m68k/m68k.h:180 config/ns32k/ns32k.h:144
+#: config/i386/i386.h:331 config/m68k/m68k.h:180 config/ns32k/ns32k.h:144
msgid "Use normal calling convention"
msgstr ""
-#: config/i386/i386.h:331
+#: config/i386/i386.h:333
msgid "Align some doubles on dword boundary"
msgstr ""
-#: config/i386/i386.h:333
+#: config/i386/i386.h:335
msgid "Align doubles on word boundary"
msgstr ""
-#: config/i386/i386.h:335
+#: config/i386/i386.h:337
msgid "Uninitialized locals in .bss"
msgstr ""
-#: config/i386/i386.h:337
+#: config/i386/i386.h:339
msgid "Uninitialized locals in .data"
msgstr ""
-#: config/i386/i386.h:339 config/m68k/linux-aout.h:45 config/m68k/linux.h:50
+#: config/i386/i386.h:341 config/m68k/linux-aout.h:45 config/m68k/linux.h:50
#: config/ns32k/ns32k.h:167
msgid "Use IEEE math for fp comparisons"
msgstr ""
-#: config/i386/i386.h:341 config/ns32k/ns32k.h:169
+#: config/i386/i386.h:343 config/ns32k/ns32k.h:169
msgid "Do not use IEEE math for fp comparisons"
msgstr ""
-#: config/i386/i386.h:343
+#: config/i386/i386.h:345
msgid "Return values of functions in FPU registers"
msgstr ""
-#: config/i386/i386.h:345
+#: config/i386/i386.h:347
msgid "Do not return values of functions in FPU registers"
msgstr ""
-#: config/i386/i386.h:347
+#: config/i386/i386.h:349
msgid "Do not generate sin, cos, sqrt for FPU"
msgstr ""
-#: config/i386/i386.h:349
+#: config/i386/i386.h:351
msgid "Generate sin, cos, sqrt for FPU"
msgstr ""
-#: config/i386/i386.h:351
+#: config/i386/i386.h:353
msgid "Omit the frame pointer in leaf functions"
msgstr ""
-#: config/i386/i386.h:354
+#: config/i386/i386.h:356
msgid "Enable stack probing"
msgstr ""
#. undocumented
#. undocumented
-#: config/i386/i386.h:359
+#: config/i386/i386.h:361
msgid "Align destination of the string operations"
msgstr ""
-#: config/i386/i386.h:361
+#: config/i386/i386.h:363
msgid "Do not align destination of the string operations"
msgstr ""
-#: config/i386/i386.h:363
+#: config/i386/i386.h:365
msgid "Inline all known string operations"
msgstr ""
-#: config/i386/i386.h:365
+#: config/i386/i386.h:367
msgid "Do not inline all known string operations"
msgstr ""
-#: config/i386/i386.h:367 config/i386/i386.h:371
+#: config/i386/i386.h:369 config/i386/i386.h:373
msgid "Use push instructions to save outgoing arguments"
msgstr ""
-#: config/i386/i386.h:369 config/i386/i386.h:373
+#: config/i386/i386.h:371 config/i386/i386.h:375
msgid "Do not use push instructions to save outgoing arguments"
msgstr ""
-#: config/i386/i386.h:375
+#: config/i386/i386.h:377
msgid "Support MMX built-in functions"
msgstr ""
-#: config/i386/i386.h:377
+#: config/i386/i386.h:379
msgid "Do not support MMX built-in functions"
msgstr ""
-#: config/i386/i386.h:379
+#: config/i386/i386.h:381
msgid "Support 3DNow! built-in functions"
msgstr ""
-#: config/i386/i386.h:381
+#: config/i386/i386.h:383
msgid "Do not support 3DNow! built-in functions"
msgstr ""
-#: config/i386/i386.h:383
+#: config/i386/i386.h:385
msgid "Support MMX and SSE built-in functions and code generation"
msgstr ""
-#: config/i386/i386.h:385
+#: config/i386/i386.h:387
msgid "Do not support MMX and SSE built-in functions and code generation"
msgstr ""
-#: config/i386/i386.h:387
+#: config/i386/i386.h:389
msgid "Support MMX, SSE and SSE2 built-in functions and code generation"
msgstr ""
-#: config/i386/i386.h:389
+#: config/i386/i386.h:391
msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation"
msgstr ""
-#: config/i386/i386.h:391
+#: config/i386/i386.h:393
msgid "sizeof(long double) is 16"
msgstr ""
-#: config/i386/i386.h:393
+#: config/i386/i386.h:395
msgid "sizeof(long double) is 12"
msgstr ""
-#: config/i386/i386.h:395
+#: config/i386/i386.h:397
msgid "Generate 64bit x86-64 code"
msgstr ""
-#: config/i386/i386.h:397
+#: config/i386/i386.h:399
msgid "Generate 32bit i386 code"
msgstr ""
-#: config/i386/i386.h:399
+#: config/i386/i386.h:401
msgid "Use native (MS) bitfield layout"
msgstr ""
-#: config/i386/i386.h:401
+#: config/i386/i386.h:403
msgid "Use gcc default bitfield layout"
msgstr ""
-#: config/i386/i386.h:403
+#: config/i386/i386.h:405
msgid "Use red-zone in the x86-64 code"
msgstr ""
-#: config/i386/i386.h:405
+#: config/i386/i386.h:407
msgid "Do not use red-zone in the x86-64 code"
msgstr ""
@@ -10571,20 +10789,20 @@ msgstr ""
#. variable, type `char *', is set to the variable part of the given
#. option if the fixed part matches. The actual option name is made
#. by appending `-m' to the specified name.
-#: config/i386/i386.h:434 config/rs6000/rs6000.h:381 config/s390/s390.h:117
-#: config/sparc/sparc.h:637
+#: config/i386/i386.h:436 config/ia64/ia64.h:245 config/rs6000/rs6000.h:382
+#: config/s390/s390.h:117 config/sparc/sparc.h:637
msgid "Schedule code for given CPU"
msgstr ""
-#: config/i386/i386.h:436
+#: config/i386/i386.h:438
msgid "Generate floating point mathematics using given instruction set"
msgstr ""
-#: config/i386/i386.h:438 config/s390/s390.h:119
+#: config/i386/i386.h:440 config/s390/s390.h:119
msgid "Generate code for given CPU"
msgstr ""
-#: config/i386/i386.h:440
+#: config/i386/i386.h:442
msgid "Number of registers used to pass integer arguments"
msgstr ""
@@ -10598,37 +10816,37 @@ msgstr ""
#. variable, type `char *', is set to the variable part of the given
#. option if the fixed part matches. The actual option name is made
#. by appending `-m' to the specified name.
-#: config/i386/i386.h:442 config/m68k/m68k.h:263
+#: config/i386/i386.h:444 config/m68k/m68k.h:263
msgid "Loop code aligned to this power of 2"
msgstr ""
-#: config/i386/i386.h:444 config/m68k/m68k.h:265
+#: config/i386/i386.h:446 config/m68k/m68k.h:265
msgid "Jump targets are aligned to this power of 2"
msgstr ""
-#: config/i386/i386.h:446 config/m68k/m68k.h:267
+#: config/i386/i386.h:448 config/m68k/m68k.h:267
msgid "Function starts are aligned to this power of 2"
msgstr ""
-#: config/i386/i386.h:449
+#: config/i386/i386.h:451
msgid "Attempt to keep stack aligned to this power of 2"
msgstr ""
-#: config/i386/i386.h:451
+#: config/i386/i386.h:453
msgid "Branches are this expensive (1-5, arbitrary units)"
msgstr ""
-#: config/i386/i386.h:453
+#: config/i386/i386.h:455
msgid "Use given x86-64 code model"
msgstr ""
#. Undocumented.
#. Undocumented.
-#: config/i386/i386.h:459
+#: config/i386/i386.h:461
msgid "Use given assembler dialect"
msgstr ""
-#: config/i386/i386.h:461
+#: config/i386/i386.h:463
msgid "Use given thread-local storage dialect"
msgstr ""
@@ -10676,19 +10894,19 @@ msgstr ""
msgid "sorry, not implemented: #pragma noalign NAME"
msgstr ""
-#: config/i960/i960.c:123 config/i960/i960.c:133
+#: config/i960/i960.c:130 config/i960/i960.c:140
msgid "conflicting architectures defined - using C series"
msgstr ""
-#: config/i960/i960.c:128
+#: config/i960/i960.c:135
msgid "conflicting architectures defined - using K series"
msgstr ""
-#: config/i960/i960.c:143
+#: config/i960/i960.c:150
msgid "iC2.0 and iC3.0 are incompatible - using iC3.0"
msgstr ""
-#: config/i960/i960.c:1450 config/m68k/m68k.c:568 config/rs6000/rs6000.c:9941
+#: config/i960/i960.c:1455 config/m68k/m68k.c:573 config/rs6000/rs6000.c:10113
msgid "stack limit expression is not supported"
msgstr ""
@@ -10746,7 +10964,7 @@ msgstr ""
msgid "Generate CF code"
msgstr ""
-#: config/i960/i960.h:283 config/mips/mips.h:568 config/pa/pa.h:252
+#: config/i960/i960.h:283 config/mips/mips.h:579 config/pa/pa.h:266
msgid "Use software floating point"
msgstr ""
@@ -10812,7 +11030,7 @@ msgid "Do not layout types like Intel's v1.3 gcc"
msgstr ""
#: config/i960/i960.h:323 config/sparc/freebsd.h:79 config/sparc/linux.h:86
-#: config/sparc/linux64.h:88 config/sparc/netbsd-elf.h:231
+#: config/sparc/linux64.h:88 config/sparc/netbsd-elf.h:230
msgid "Use 64 bit long doubles"
msgstr ""
@@ -10824,264 +11042,281 @@ msgstr ""
msgid "Do not enable linker relaxation"
msgstr ""
-#: config/ia64/ia64-c.c:52
+#: config/ia64/ia64-c.c:53
msgid "malformed #pragma builtin"
msgstr ""
-#: config/ia64/ia64.c:3881
+#: config/ia64/ia64.c:4052
msgid "ia64_print_operand: unknown code"
msgstr ""
-#: config/ia64/ia64.c:4159
+#: config/ia64/ia64.c:4409
msgid "value of -mfixed-range must have form REG1-REG2"
msgstr ""
-#: config/ia64/ia64.c:4186
+#: config/ia64/ia64.c:4436
#, c-format
msgid "%s-%s is an empty range"
msgstr ""
-#: config/ia64/ia64.c:4217
+#: config/ia64/ia64.c:4484
msgid "cannot optimize floating point division for both latency and throughput"
msgstr ""
-#: config/ia64/ia64.c:4223
+#: config/ia64/ia64.c:4490
msgid "cannot optimize integer division for both latency and throughput"
msgstr ""
-#: config/ia64/ia64.c:4235
+#: config/ia64/ia64.c:4502
#, c-format
msgid "bad value (%s) for -mtls-size= switch"
msgstr ""
+#: config/ia64/ia64.c:4518
+#, c-format
+msgid "bad value (%s) for -tune= switch"
+msgstr ""
+
#. This macro defines names of command options to set and clear bits in
#. `target_flags'. Its definition is an initializer with a subgrouping for
#. each command option.
-#: config/ia64/ia64.h:150
+#: config/ia64/ia64.h:152
msgid "Generate big endian code"
msgstr ""
-#: config/ia64/ia64.h:152 config/mcore/mcore.h:159
+#: config/ia64/ia64.h:154 config/mcore/mcore.h:160
msgid "Generate little endian code"
msgstr ""
-#: config/ia64/ia64.h:154
+#: config/ia64/ia64.h:156
msgid "Generate code for GNU as"
msgstr ""
-#: config/ia64/ia64.h:156
+#: config/ia64/ia64.h:158
msgid "Generate code for Intel as"
msgstr ""
-#: config/ia64/ia64.h:158
+#: config/ia64/ia64.h:160
msgid "Generate code for GNU ld"
msgstr ""
-#: config/ia64/ia64.h:160
+#: config/ia64/ia64.h:162
msgid "Generate code for Intel ld"
msgstr ""
-#: config/ia64/ia64.h:162
+#: config/ia64/ia64.h:164
msgid "Generate code without GP reg"
msgstr ""
-#: config/ia64/ia64.h:164
+#: config/ia64/ia64.h:166
msgid "Emit stop bits before and after volatile extended asms"
msgstr ""
-#: config/ia64/ia64.h:166
+#: config/ia64/ia64.h:168
msgid "Don't emit stop bits before and after volatile extended asms"
msgstr ""
-#: config/ia64/ia64.h:168
+#: config/ia64/ia64.h:170
msgid "Emit code for Itanium (TM) processor B step"
msgstr ""
-#: config/ia64/ia64.h:170
+#: config/ia64/ia64.h:172
msgid "Use in/loc/out register names"
msgstr ""
-#: config/ia64/ia64.h:172
+#: config/ia64/ia64.h:174
msgid "Disable use of sdata/scommon/sbss"
msgstr ""
-#: config/ia64/ia64.h:174
+#: config/ia64/ia64.h:176
msgid "Enable use of sdata/scommon/sbss"
msgstr ""
-#: config/ia64/ia64.h:176
+#: config/ia64/ia64.h:178
msgid "gp is constant (but save/restore gp on indirect calls)"
msgstr ""
-#: config/ia64/ia64.h:178
+#: config/ia64/ia64.h:180
msgid "Generate self-relocatable code"
msgstr ""
-#: config/ia64/ia64.h:180
+#: config/ia64/ia64.h:182
msgid "Generate inline floating point division, optimize for latency"
msgstr ""
-#: config/ia64/ia64.h:182
+#: config/ia64/ia64.h:184
msgid "Generate inline floating point division, optimize for throughput"
msgstr ""
-#: config/ia64/ia64.h:184
+#: config/ia64/ia64.h:186
msgid "Generate inline integer division, optimize for latency"
msgstr ""
-#: config/ia64/ia64.h:186
+#: config/ia64/ia64.h:188
msgid "Generate inline integer division, optimize for throughput"
msgstr ""
-#: config/ia64/ia64.h:188
+#: config/ia64/ia64.h:190
msgid "Enable Dwarf 2 line debug info via GNU as"
msgstr ""
-#: config/ia64/ia64.h:190
+#: config/ia64/ia64.h:192
msgid "Disable Dwarf 2 line debug info via GNU as"
msgstr ""
-#: config/ia64/ia64.h:219
-msgid "Specify range of registers to make fixed"
+#: config/ia64/ia64.h:194
+msgid "Enable earlier placing stop bits for better scheduling"
msgstr ""
-#: config/ip2k/ip2k.c:1084
-msgid "bad operand"
+#: config/ia64/ia64.h:196
+msgid "Disable earlier placing stop bits"
msgstr ""
-#: config/ip2k/ip2k.c:3186
-msgid "Only initialized variables can be placed into program memory area."
+#: config/ia64/ia64.h:241
+msgid "Specify range of registers to make fixed"
+msgstr ""
+
+#: config/ip2k/ip2k.c:1100
+msgid "bad operand"
msgstr ""
-#: config/m32r/m32r.c:141
+#: config/m32r/m32r.c:147
#, c-format
msgid "bad value (%s) for -mmodel switch"
msgstr ""
-#: config/m32r/m32r.c:150
+#: config/m32r/m32r.c:156
#, c-format
msgid "bad value (%s) for -msdata switch"
msgstr ""
-#: config/m32r/m32r.c:321
+#: config/m32r/m32r.c:327
#, c-format
msgid "invalid argument of `%s' attribute"
msgstr ""
-#: config/m32r/m32r.c:424
+#: config/m32r/m32r.c:430
msgid "const objects cannot go in .sdata/.sbss"
msgstr ""
-#: config/m32r/m32r.c:2258
+#: config/m32r/m32r.c:2301
#, c-format
msgid "invalid operand to %%s code"
msgstr ""
-#: config/m32r/m32r.c:2265
+#: config/m32r/m32r.c:2308
#, c-format
msgid "invalid operand to %%p code"
msgstr ""
-#: config/m32r/m32r.c:2320
+#: config/m32r/m32r.c:2363
msgid "bad insn for 'A'"
msgstr ""
-#: config/m32r/m32r.c:2372
+#: config/m32r/m32r.c:2415
#, c-format
msgid "invalid operand to %%T/%%B code"
msgstr ""
-#: config/m32r/m32r.c:2395
+#: config/m32r/m32r.c:2438
#, c-format
msgid "invalid operand to %%N code"
msgstr ""
-#: config/m32r/m32r.c:2440
+#: config/m32r/m32r.c:2483
msgid "pre-increment address is not a register"
msgstr ""
-#: config/m32r/m32r.c:2447
+#: config/m32r/m32r.c:2490
msgid "pre-decrement address is not a register"
msgstr ""
-#: config/m32r/m32r.c:2454
+#: config/m32r/m32r.c:2497
msgid "post-increment address is not a register"
msgstr ""
-#: config/m32r/m32r.c:2532 config/m32r/m32r.c:2548
-#: config/rs6000/rs6000.c:12747
+#: config/m32r/m32r.c:2575 config/m32r/m32r.c:2591
+#: config/rs6000/rs6000.c:12946
msgid "bad address"
msgstr ""
-#: config/m32r/m32r.c:2553
+#: config/m32r/m32r.c:2596
msgid "lo_sum not of register"
msgstr ""
#. { "relax", TARGET_RELAX_MASK, "" }, { "no-relax", -TARGET_RELAX_MASK, "" },
-#: config/m32r/m32r.h:241
+#: config/m32r/m32r.h:248
msgid "Display compile time statistics"
msgstr ""
-#: config/m32r/m32r.h:243
+#: config/m32r/m32r.h:250
msgid "Align all loops to 32 byte boundary"
msgstr ""
-#: config/m32r/m32r.h:246
+#: config/m32r/m32r.h:253
msgid "Only issue one instruction per cycle"
msgstr ""
-#: config/m32r/m32r.h:249
+#: config/m32r/m32r.h:256
msgid "Prefer branches over conditional execution"
msgstr ""
-#: config/m32r/m32r.h:265
+#: config/m32r/m32r.h:272
msgid "Code size: small, medium or large"
msgstr ""
-#: config/m32r/m32r.h:267
+#: config/m32r/m32r.h:274
msgid "Small data area: none, sdata, use"
msgstr ""
-#: config/m68hc11/m68hc11.c:245
+#: config/m68hc11/m68hc11.c:252
#, c-format
msgid "-f%s ignored for 68HC11/68HC12 (not supported)"
msgstr ""
+#: config/m68hc11/m68hc11.c:1299
+msgid "`trap' and `far' attributes are not compatible, ignoring `far'"
+msgstr ""
+
+#: config/m68hc11/m68hc11.c:1305
+msgid "`trap' attribute is already used"
+msgstr ""
+
#. !!!! SCz wrong here.
-#: config/m68hc11/m68hc11.c:3255 config/m68hc11/m68hc11.c:3629
+#: config/m68hc11/m68hc11.c:3320 config/m68hc11/m68hc11.c:3724
msgid "move insn not handled"
msgstr ""
-#: config/m68hc11/m68hc11.c:3475 config/m68hc11/m68hc11.c:3559
-#: config/m68hc11/m68hc11.c:3832
+#: config/m68hc11/m68hc11.c:3570 config/m68hc11/m68hc11.c:3654
+#: config/m68hc11/m68hc11.c:3936
msgid "invalid register in the move instruction"
msgstr ""
-#: config/m68hc11/m68hc11.c:3509
+#: config/m68hc11/m68hc11.c:3604
msgid "invalid operand in the instruction"
msgstr ""
-#: config/m68hc11/m68hc11.c:3806
+#: config/m68hc11/m68hc11.c:3910
msgid "invalid register in the instruction"
msgstr ""
-#: config/m68hc11/m68hc11.c:3839
+#: config/m68hc11/m68hc11.c:3943
msgid "operand 1 must be a hard register"
msgstr ""
-#: config/m68hc11/m68hc11.c:3856
+#: config/m68hc11/m68hc11.c:3960
msgid "invalid rotate insn"
msgstr ""
-#: config/m68hc11/m68hc11.c:4281
+#: config/m68hc11/m68hc11.c:4381
msgid "registers IX, IY and Z used in the same INSN"
msgstr ""
-#: config/m68hc11/m68hc11.c:4606 config/m68hc11/m68hc11.c:4909
+#: config/m68hc11/m68hc11.c:4718 config/m68hc11/m68hc11.c:5021
msgid "cannot do z-register replacement"
msgstr ""
-#: config/m68hc11/m68hc11.c:4972
+#: config/m68hc11/m68hc11.c:5084
msgid "invalid Z register replacement for insn"
msgstr ""
@@ -11089,50 +11324,54 @@ msgstr ""
#. pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits
#. to set or minus the bits to clear. An empty string NAME is used to
#. identify the default VALUE.
-#: config/m68hc11/m68hc11.h:160
+#: config/m68hc11/m68hc11.h:177
msgid "Compile with 16-bit integer mode"
msgstr ""
-#: config/m68hc11/m68hc11.h:162
+#: config/m68hc11/m68hc11.h:179
msgid "Compile with 32-bit integer mode"
msgstr ""
-#: config/m68hc11/m68hc11.h:164
+#: config/m68hc11/m68hc11.h:181
msgid "Auto pre/post decrement increment allowed"
msgstr ""
-#: config/m68hc11/m68hc11.h:166
+#: config/m68hc11/m68hc11.h:183
msgid "Auto pre/post decrement increment not allowed"
msgstr ""
-#: config/m68hc11/m68hc11.h:168
+#: config/m68hc11/m68hc11.h:185
msgid "Min/max instructions allowed"
msgstr ""
-#: config/m68hc11/m68hc11.h:170
+#: config/m68hc11/m68hc11.h:187
msgid "Min/max instructions not allowed"
msgstr ""
-#: config/m68hc11/m68hc11.h:172
+#: config/m68hc11/m68hc11.h:189
msgid "Use call and rtc for function calls and returns"
msgstr ""
-#: config/m68hc11/m68hc11.h:174
+#: config/m68hc11/m68hc11.h:191
msgid "Use jsr and rts for function calls and returns"
msgstr ""
-#: config/m68hc11/m68hc11.h:176
+#: config/m68hc11/m68hc11.h:193
msgid "Do not use direct addressing mode for soft registers"
msgstr ""
-#: config/m68hc11/m68hc11.h:178 config/m68hc11/m68hc11.h:182
+#: config/m68hc11/m68hc11.h:195 config/m68hc11/m68hc11.h:201
msgid "Compile for a 68HC11"
msgstr ""
-#: config/m68hc11/m68hc11.h:180 config/m68hc11/m68hc11.h:184
+#: config/m68hc11/m68hc11.h:197 config/m68hc11/m68hc11.h:203
msgid "Compile for a 68HC12"
msgstr ""
+#: config/m68hc11/m68hc11.h:199 config/m68hc11/m68hc11.h:205
+msgid "Compile for a 68HCS12"
+msgstr ""
+
#. This macro is similar to `TARGET_SWITCHES' but defines names of
#. command options that have values. Its definition is an
#. initializer with a subgrouping for each command option.
@@ -11142,30 +11381,30 @@ msgstr ""
#. variable, type `char *', is set to the variable part of the given
#. option if the fixed part matches. The actual option name is made
#. by appending `-m' to the specified name.
-#: config/m68hc11/m68hc11.h:198
+#: config/m68hc11/m68hc11.h:219
msgid "Specify the register allocation order"
msgstr ""
-#: config/m68hc11/m68hc11.h:200
+#: config/m68hc11/m68hc11.h:221
msgid "Indicate the number of soft registers available"
msgstr ""
-#: config/m68k/m68k.c:167
+#: config/m68k/m68k.c:172
#, c-format
msgid "-malign-loops=%d is not between 1 and %d"
msgstr ""
-#: config/m68k/m68k.c:178
+#: config/m68k/m68k.c:183
#, c-format
msgid "-malign-jumps=%d is not between 1 and %d"
msgstr ""
-#: config/m68k/m68k.c:189
+#: config/m68k/m68k.c:194
#, c-format
msgid "-malign-functions=%d is not between 1 and %d"
msgstr ""
-#: config/m68k/m68k.c:198
+#: config/m68k/m68k.c:203
msgid "-fPIC is not currently supported on the 68000 or 68010\n"
msgstr ""
@@ -11290,84 +11529,84 @@ msgstr ""
msgid "Use unaligned memory references"
msgstr ""
-#: config/m88k/m88k.c:914
+#: config/m88k/m88k.c:921
#, c-format
msgid "internal gcc monitor: short-branch(%x)"
msgstr ""
-#: config/m88k/m88k.c:2313
+#: config/m88k/m88k.c:2320
msgid "internal gcc error: Can't express symbolic location"
msgstr ""
-#: config/m88k/m88k.c:2528
+#: config/m88k/m88k.c:2535
#, c-format
msgid "argument #%d is a structure"
msgstr ""
-#: config/m88k/m88k.c:2827
+#: config/m88k/m88k.c:2834
#, c-format
msgid "%%R not followed by %%B/C/D/E"
msgstr ""
-#: config/m88k/m88k.c:2895
+#: config/m88k/m88k.c:2902
#, c-format
msgid "invalid %%x/X value"
msgstr ""
-#: config/m88k/m88k.c:2912
+#: config/m88k/m88k.c:2919
#, c-format
msgid "invalid %%Q value"
msgstr ""
-#: config/m88k/m88k.c:2918 config/rs6000/rs6000.c:7690
+#: config/m88k/m88k.c:2925 config/rs6000/rs6000.c:7796
#, c-format
msgid "invalid %%q value"
msgstr ""
-#: config/m88k/m88k.c:2924
+#: config/m88k/m88k.c:2931
#, c-format
msgid "invalid %%o value"
msgstr ""
-#: config/m88k/m88k.c:2931 config/rs6000/rs6000.c:7653
+#: config/m88k/m88k.c:2938 config/rs6000/rs6000.c:7759
#, c-format
msgid "invalid %%p value"
msgstr ""
-#: config/m88k/m88k.c:2944 config/m88k/m88k.c:2949
+#: config/m88k/m88k.c:2951 config/m88k/m88k.c:2956
#, c-format
msgid "invalid %%s/S value"
msgstr ""
-#: config/m88k/m88k.c:2960
+#: config/m88k/m88k.c:2967
#, c-format
msgid "invalid %%P operand"
msgstr ""
-#: config/m88k/m88k.c:2991 config/romp/romp.c:692
+#: config/m88k/m88k.c:2998 config/romp/romp.c:698
#, c-format
msgid "invalid %%B value"
msgstr ""
-#: config/m88k/m88k.c:3021
+#: config/m88k/m88k.c:3028
#, c-format
msgid "invalid %%D value"
msgstr ""
-#: config/m88k/m88k.c:3034
+#: config/m88k/m88k.c:3041
#, c-format
msgid "`%%d' operand isn't a register"
msgstr ""
-#: config/m88k/m88k.c:3052
+#: config/m88k/m88k.c:3059
msgid "operand is r0"
msgstr ""
-#: config/m88k/m88k.c:3066
+#: config/m88k/m88k.c:3073
msgid "operand is const_double"
msgstr ""
-#: config/m88k/m88k.c:3085
+#: config/m88k/m88k.c:3092
msgid "invalid code"
msgstr ""
@@ -11391,213 +11630,212 @@ msgstr ""
msgid "-mshort-data-%s and PIC are incompatible"
msgstr ""
-#: config/mcore/mcore.c:3080
+#: config/mcore/mcore.c:3131
#, c-format
msgid "invalid option `-mstack-increment=%s'"
msgstr ""
-#: config/mcore/mcore.h:126
+#: config/mcore/mcore.h:127
msgid "Inline constants if it can be done in 2 insns or less"
msgstr ""
-#: config/mcore/mcore.h:128
+#: config/mcore/mcore.h:129
msgid "Inline constants if it only takes 1 instruction"
msgstr ""
-#: config/mcore/mcore.h:130
+#: config/mcore/mcore.h:131
msgid "Set maximum alignment to 4"
msgstr ""
-#: config/mcore/mcore.h:132
+#: config/mcore/mcore.h:133
msgid "Set maximum alignment to 8"
msgstr ""
-#: config/mcore/mcore.h:136
+#: config/mcore/mcore.h:137
msgid "Do not use the divide instruction"
msgstr ""
-#: config/mcore/mcore.h:140
+#: config/mcore/mcore.h:141
msgid "Do not arbitary sized immediates in bit operations"
msgstr ""
-#: config/mcore/mcore.h:142
+#: config/mcore/mcore.h:143
msgid "Always treat bit-field as int-sized"
msgstr ""
-#: config/mcore/mcore.h:146
+#: config/mcore/mcore.h:147
msgid "Force functions to be aligned to a 4 byte boundary"
msgstr ""
-#: config/mcore/mcore.h:148
+#: config/mcore/mcore.h:149
msgid "Force functions to be aligned to a 2 byte boundary"
msgstr ""
-#: config/mcore/mcore.h:150
+#: config/mcore/mcore.h:151
msgid "Emit call graph information"
msgstr ""
-#: config/mcore/mcore.h:154
+#: config/mcore/mcore.h:155
msgid "Prefer word accesses over byte accesses"
msgstr ""
-#: config/mcore/mcore.h:165
+#: config/mcore/mcore.h:166
msgid "Generate code for the M*Core M340"
msgstr ""
-#: config/mcore/mcore.h:178
+#: config/mcore/mcore.h:179
msgid "Maximum amount for a single stack increment operation"
msgstr ""
-#: config/mips/mips.c:5117
+#: config/mips/mips.c:5458
#, c-format
msgid "bad value (%s) for -mabi= switch"
msgstr ""
-#: config/mips/mips.c:5147
+#: config/mips/mips.c:5494
#, c-format
msgid ""
-"-mips%d conflicts with the other architecture options, which specify a MIPS%"
+"-mips%s conflicts with the other architecture options, which specify a MIPS%"
"d processor"
msgstr ""
-#: config/mips/mips.c:5154
-#, c-format
-msgid "bad value (%s) for -mips switch"
-msgstr ""
-
-#: config/mips/mips.c:5169
+#: config/mips/mips.c:5513
#, c-format
msgid "-march=%s is not compatible with the selected ABI"
msgstr ""
-#: config/mips/mips.c:5181
+#: config/mips/mips.c:5525
msgid "-mgp64 used with a 32-bit processor"
msgstr ""
-#: config/mips/mips.c:5183
+#: config/mips/mips.c:5527
msgid "-mgp32 used with a 64-bit ABI"
msgstr ""
-#: config/mips/mips.c:5185
+#: config/mips/mips.c:5529
msgid "-mgp64 used with a 32-bit ABI"
msgstr ""
-#: config/mips/mips.c:5203 config/mips/mips.c:5205 config/mips/mips.c:5207
+#: config/mips/mips.c:5547 config/mips/mips.c:5549 config/mips/mips.c:5551
#, c-format
msgid "unsupported combination: %s"
msgstr ""
-#: config/mips/mips.c:5277
+#: config/mips/mips.c:5621
msgid ""
"generation of Branch Likely instructions enabled, but not supported by "
"architecture"
msgstr ""
-#: config/mips/mips.c:5288
+#: config/mips/mips.c:5632
msgid "-G is incompatible with PIC code which is the default"
msgstr ""
-#: config/mips/mips.c:5304
+#: config/mips/mips.c:5648
msgid "-membedded-pic and -mabicalls are incompatible"
msgstr ""
-#: config/mips/mips.c:5307
+#: config/mips/mips.c:5651
msgid "-G and -membedded-pic are incompatible"
msgstr ""
-#: config/mips/mips.c:5358
+#: config/mips/mips.c:5702
#, c-format
msgid "invalid option `entry%s'"
msgstr ""
-#: config/mips/mips.c:5361
+#: config/mips/mips.c:5705
msgid "-mentry is only meaningful with -mips-16"
msgstr ""
-#: config/mips/mips.c:5766
+#: config/mips/mips.c:6114
#, c-format
msgid "internal error: %%) found without a %%( in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5780
+#: config/mips/mips.c:6128
#, c-format
msgid "internal error: %%] found without a %%[ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5793
+#: config/mips/mips.c:6141
#, c-format
msgid "internal error: %%> found without a %%< in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5806
+#: config/mips/mips.c:6154
#, c-format
msgid "internal error: %%} found without a %%{ in assembler pattern"
msgstr ""
-#: config/mips/mips.c:5820
+#: config/mips/mips.c:6168
#, c-format
msgid "PRINT_OPERAND: unknown punctuation '%c'"
msgstr ""
-#: config/mips/mips.c:5829 config/xtensa/xtensa.c:1941
+#: config/mips/mips.c:6177 config/xtensa/xtensa.c:1946
msgid "PRINT_OPERAND null pointer"
msgstr ""
-#: config/mips/mips.c:5960
+#: config/mips/mips.c:6308
#, c-format
msgid "invalid use of %%d, %%x, or %%X"
msgstr ""
-#: config/mips/mips.c:5998 config/xtensa/xtensa.c:2035
+#: config/mips/mips.c:6346 config/xtensa/xtensa.c:2040
msgid "PRINT_OPERAND_ADDRESS, null pointer"
msgstr ""
-#: config/mips/mips.c:6227
+#: config/mips/mips.c:6575
msgid ""
"MIPS ECOFF format does not allow changing filenames within functions with "
"#line"
msgstr ""
-#: config/mips/mips.c:6537
+#: config/mips/mips.c:6885
msgid "can't rewind temp file"
msgstr ""
-#: config/mips/mips.c:6541
+#: config/mips/mips.c:6889
msgid "can't write to output file"
msgstr ""
-#: config/mips/mips.c:6544
+#: config/mips/mips.c:6892
msgid "can't read from temp file"
msgstr ""
-#: config/mips/mips.c:6547
+#: config/mips/mips.c:6895
msgid "can't close temp file"
msgstr ""
-#: config/mips/mips.c:6987
+#: config/mips/mips.c:7335
#, c-format
msgid "gp_offset (%ld) or end_offset (%ld) is less than zero"
msgstr ""
-#: config/mips/mips.c:7094
+#: config/mips/mips.c:7442
#, c-format
msgid "fp_offset (%ld) or end_offset (%ld) is less than zero"
msgstr ""
-#: config/mips/mips.c:9320
+#: config/mips/mips.c:9684
#, c-format
msgid "can not handle inconsistent calls to `%s'"
msgstr ""
-#: config/mips/mips.c:10452
+#: config/mips/mips.c:10816
msgid "the cpu name must be lower case"
msgstr ""
-#: config/mips/mips.c:10474
+#: config/mips/mips.c:10838
#, c-format
msgid "bad value (%s) for %s"
msgstr ""
+#: config/mips/linux64.h:39
+msgid "Same as -mabi=32, just trickier"
+msgstr ""
+
#. Target CPU builtins.
#. We do this here because __mips is defined below and so we can't use builtin_define_std.
#. Treat _R3000 and _R4000 like register-size defines, which is how they've historically been used.
@@ -11608,75 +11846,75 @@ msgstr ""
#. each pair being { "NAME", VALUE }
#. where VALUE is the bits to set or minus the bits to clear.
#. An empty string NAME is used to identify the default VALUE.
-#: config/mips/mips.h:528 config/mn10300/mn10300.h:64
+#: config/mips/mips.h:539 config/mn10300/mn10300.h:70
msgid "No default crt0.o"
msgstr ""
-#: config/mips/mips.h:530
+#: config/mips/mips.h:541
msgid "Use 64-bit int type"
msgstr ""
-#: config/mips/mips.h:532
+#: config/mips/mips.h:543
msgid "Use 64-bit long type"
msgstr ""
-#: config/mips/mips.h:534
+#: config/mips/mips.h:545
msgid "Use 32-bit long type"
msgstr ""
-#: config/mips/mips.h:536
+#: config/mips/mips.h:547
msgid "Optimize lui/addiu address loads"
msgstr ""
-#: config/mips/mips.h:538
+#: config/mips/mips.h:549
msgid "Don't optimize lui/addiu address loads"
msgstr ""
-#: config/mips/mips.h:540
+#: config/mips/mips.h:551
msgid "Use MIPS as"
msgstr ""
-#: config/mips/mips.h:542
+#: config/mips/mips.h:553
msgid "Use GNU as"
msgstr ""
-#: config/mips/mips.h:544
+#: config/mips/mips.h:555
msgid "Use symbolic register names"
msgstr ""
-#: config/mips/mips.h:546
+#: config/mips/mips.h:557
msgid "Don't use symbolic register names"
msgstr ""
-#: config/mips/mips.h:548 config/mips/mips.h:550
+#: config/mips/mips.h:559 config/mips/mips.h:561
msgid "Use GP relative sdata/sbss sections"
msgstr ""
-#: config/mips/mips.h:552 config/mips/mips.h:554
+#: config/mips/mips.h:563 config/mips/mips.h:565
msgid "Don't use GP relative sdata/sbss sections"
msgstr ""
-#: config/mips/mips.h:556
+#: config/mips/mips.h:567
msgid "Output compiler statistics"
msgstr ""
-#: config/mips/mips.h:558
+#: config/mips/mips.h:569
msgid "Don't output compiler statistics"
msgstr ""
-#: config/mips/mips.h:560
+#: config/mips/mips.h:571
msgid "Don't optimize block moves"
msgstr ""
-#: config/mips/mips.h:562
+#: config/mips/mips.h:573
msgid "Optimize block moves"
msgstr ""
-#: config/mips/mips.h:564
+#: config/mips/mips.h:575
msgid "Use mips-tfile asm postpass"
msgstr ""
-#: config/mips/mips.h:566
+#: config/mips/mips.h:577
msgid "Don't use mips-tfile asm postpass"
msgstr ""
@@ -11686,253 +11924,253 @@ msgstr ""
#. where VALUE is the bits to set or minus the bits to clear and DOC
#. is the documentation for --help (NULL if intentionally undocumented).
#. An empty string NAME is used to identify the default VALUE.
-#: config/mips/mips.h:570 config/pdp11/pdp11.h:56
+#: config/mips/mips.h:581 config/pdp11/pdp11.h:61
msgid "Use hardware floating point"
msgstr ""
-#: config/mips/mips.h:572
+#: config/mips/mips.h:583
msgid "Use 64-bit FP registers"
msgstr ""
-#: config/mips/mips.h:574
+#: config/mips/mips.h:585
msgid "Use 32-bit FP registers"
msgstr ""
-#: config/mips/mips.h:576
+#: config/mips/mips.h:587
msgid "Use 64-bit general registers"
msgstr ""
-#: config/mips/mips.h:578
+#: config/mips/mips.h:589
msgid "Use 32-bit general registers"
msgstr ""
-#: config/mips/mips.h:580
+#: config/mips/mips.h:591
msgid "Use Irix PIC"
msgstr ""
-#: config/mips/mips.h:582
+#: config/mips/mips.h:593
msgid "Don't use Irix PIC"
msgstr ""
-#: config/mips/mips.h:584
+#: config/mips/mips.h:595
msgid "Use indirect calls"
msgstr ""
-#: config/mips/mips.h:586
+#: config/mips/mips.h:597
msgid "Don't use indirect calls"
msgstr ""
-#: config/mips/mips.h:588
+#: config/mips/mips.h:599
msgid "Use embedded PIC"
msgstr ""
-#: config/mips/mips.h:590
+#: config/mips/mips.h:601
msgid "Don't use embedded PIC"
msgstr ""
-#: config/mips/mips.h:592
+#: config/mips/mips.h:603
msgid "Use ROM instead of RAM"
msgstr ""
-#: config/mips/mips.h:594
+#: config/mips/mips.h:605
msgid "Don't use ROM instead of RAM"
msgstr ""
-#: config/mips/mips.h:596
+#: config/mips/mips.h:607
msgid "Put uninitialized constants in ROM (needs -membedded-data)"
msgstr ""
-#: config/mips/mips.h:598
+#: config/mips/mips.h:609
msgid "Don't put uninitialized constants in ROM"
msgstr ""
#. Macro to define tables used to set the flags.
-#: config/mips/mips.h:600 config/xtensa/xtensa.h:110
+#: config/mips/mips.h:611 config/xtensa/xtensa.h:110
msgid "Use big-endian byte order"
msgstr ""
-#: config/mips/mips.h:602 config/xtensa/xtensa.h:112
+#: config/mips/mips.h:613 config/xtensa/xtensa.h:112
msgid "Use little-endian byte order"
msgstr ""
-#: config/mips/mips.h:604
+#: config/mips/mips.h:615
msgid "Use single (32-bit) FP only"
msgstr ""
-#: config/mips/mips.h:606
+#: config/mips/mips.h:617
msgid "Don't use single (32-bit) FP only"
msgstr ""
-#: config/mips/mips.h:608
+#: config/mips/mips.h:619
msgid "Use multiply accumulate"
msgstr ""
-#: config/mips/mips.h:610
+#: config/mips/mips.h:621
msgid "Don't use multiply accumulate"
msgstr ""
-#: config/mips/mips.h:612 config/rs6000/rs6000.h:306
+#: config/mips/mips.h:623 config/rs6000/rs6000.h:306
msgid "Don't generate fused multiply/add instructions"
msgstr ""
-#: config/mips/mips.h:614 config/rs6000/rs6000.h:304
+#: config/mips/mips.h:625 config/rs6000/rs6000.h:304
msgid "Generate fused multiply/add instructions"
msgstr ""
-#: config/mips/mips.h:616
+#: config/mips/mips.h:627
msgid "Work around early 4300 hardware bug"
msgstr ""
-#: config/mips/mips.h:618
+#: config/mips/mips.h:629
msgid "Don't work around early 4300 hardware bug"
msgstr ""
-#: config/mips/mips.h:620
+#: config/mips/mips.h:631
msgid "Trap on integer divide by zero"
msgstr ""
-#: config/mips/mips.h:622
+#: config/mips/mips.h:633
msgid "Don't trap on integer divide by zero"
msgstr ""
-#: config/mips/mips.h:624
+#: config/mips/mips.h:635
msgid "Trap on integer divide overflow"
msgstr ""
-#: config/mips/mips.h:626
+#: config/mips/mips.h:637
msgid "Don't trap on integer divide overflow"
msgstr ""
-#: config/mips/mips.h:628
+#: config/mips/mips.h:639
msgid "Use Branch Likely instructions, overriding default for arch"
msgstr ""
-#: config/mips/mips.h:630
+#: config/mips/mips.h:641
msgid "Don't use Branch Likely instructions, overriding default for arch"
msgstr ""
-#: config/mips/mips.h:744 config/pa/pa.h:296
+#: config/mips/mips.h:759 config/pa/pa.h:310
msgid "Specify CPU for scheduling purposes"
msgstr ""
-#: config/mips/mips.h:746
+#: config/mips/mips.h:761
msgid "Specify CPU for code generation purposes"
msgstr ""
-#: config/mips/mips.h:748
+#: config/mips/mips.h:763
msgid "Specify an ABI"
msgstr ""
-#: config/mips/mips.h:750
+#: config/mips/mips.h:765
msgid "Specify a Standard MIPS ISA"
msgstr ""
-#: config/mips/mips.h:752
+#: config/mips/mips.h:767
msgid "Use mips16 entry/exit psuedo ops"
msgstr ""
-#: config/mips/mips.h:754
+#: config/mips/mips.h:769
msgid "Don't use MIPS16 instructions"
msgstr ""
-#: config/mips/mips.h:756
+#: config/mips/mips.h:771
msgid "Don't call any cache flush functions"
msgstr ""
-#: config/mips/mips.h:758
+#: config/mips/mips.h:773
msgid "Specify cache flush function"
msgstr ""
#. Output assembler code to FILE to increment profiler label # LABELNO
#. for profiling a function entry.
-#: config/mips/mips.h:2868
+#: config/mips/mips.h:2920
msgid "mips16 function profiling"
msgstr ""
-#: config/mmix/mmix.c:191
+#: config/mmix/mmix.c:198
#, c-format
msgid "-f%s not supported: ignored"
msgstr ""
-#: config/mmix/mmix.c:646
+#: config/mmix/mmix.c:653
#, c-format
msgid ""
"too large function value type, needs %d registers, have only %d registers "
"for this"
msgstr ""
-#: config/mmix/mmix.c:828
+#: config/mmix/mmix.c:835
msgid "function_profiler support for MMIX"
msgstr ""
-#: config/mmix/mmix.c:850
+#: config/mmix/mmix.c:857
msgid "MMIX Internal: Last named vararg would not fit in a register"
msgstr ""
-#: config/mmix/mmix.c:1630 config/mmix/mmix.c:1760
+#: config/mmix/mmix.c:1625 config/mmix/mmix.c:1755
msgid "MMIX Internal: Expected a CONST_INT, not this"
msgstr ""
-#: config/mmix/mmix.c:1638 config/mmix/mmix.c:1662 config/mmix/mmix.c:1778
+#: config/mmix/mmix.c:1633 config/mmix/mmix.c:1657 config/mmix/mmix.c:1773
#, c-format
msgid "MMIX Internal: Bad register: %d"
msgstr ""
-#: config/mmix/mmix.c:1709
+#: config/mmix/mmix.c:1704
msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
msgstr ""
-#: config/mmix/mmix.c:1728
+#: config/mmix/mmix.c:1723
msgid "MMIX Internal: Expected a register, not this"
msgstr ""
-#: config/mmix/mmix.c:1738
+#: config/mmix/mmix.c:1733
msgid "MMIX Internal: Expected a constant, not this"
msgstr ""
#. Presumably there's a missing case above if we get here.
-#: config/mmix/mmix.c:1770
+#: config/mmix/mmix.c:1765
#, c-format
msgid "MMIX Internal: Missing `%c' case in mmix_print_operand"
msgstr ""
#. We need the original here.
-#: config/mmix/mmix.c:1822
+#: config/mmix/mmix.c:1817
msgid "MMIX Internal: Cannot decode this operand"
msgstr ""
-#: config/mmix/mmix.c:1882
+#: config/mmix/mmix.c:1877
msgid "MMIX Internal: This is not a recognized address"
msgstr ""
-#: config/mmix/mmix.c:2073
+#: config/mmix/mmix.c:2068
#, c-format
msgid "stack frame not a multiple of 8 bytes: %d"
msgstr ""
-#: config/mmix/mmix.c:2312
+#: config/mmix/mmix.c:2307
#, c-format
msgid "stack frame not a multiple of octabyte: %d"
msgstr ""
-#: config/mmix/mmix.c:2809 config/mmix/mmix.c:2878
+#: config/mmix/mmix.c:2804 config/mmix/mmix.c:2873
#, c-format
msgid "MMIX Internal: %s is not a shiftable int"
msgstr ""
-#: config/mmix/mmix.c:2997
+#: config/mmix/mmix.c:2992
msgid "MMIX Internal: Trying to output invalidly reversed condition:"
msgstr ""
-#: config/mmix/mmix.c:3004
+#: config/mmix/mmix.c:2999
msgid "MMIX Internal: What's the CC of this?"
msgstr ""
-#: config/mmix/mmix.c:3008
+#: config/mmix/mmix.c:3003
msgid "MMIX Internal: What is the CC of this?"
msgstr ""
-#: config/mmix/mmix.c:3079
+#: config/mmix/mmix.c:3074
msgid "MMIX Internal: This is not a constant:"
msgstr ""
@@ -12024,19 +12262,19 @@ msgstr ""
msgid "Do not generate a single exit point for each function"
msgstr ""
-#: config/mn10300/mn10300.h:59
+#: config/mn10300/mn10300.h:65
msgid "Work around hardware multiply bug"
msgstr ""
-#: config/mn10300/mn10300.h:60
+#: config/mn10300/mn10300.h:66
msgid "Do not work around hardware multiply bug"
msgstr ""
-#: config/mn10300/mn10300.h:61
+#: config/mn10300/mn10300.h:67
msgid "Target the AM33 processor"
msgstr ""
-#: config/mn10300/mn10300.h:65
+#: config/mn10300/mn10300.h:71
msgid "Enable linker relaxations"
msgstr ""
@@ -12112,33 +12350,33 @@ msgstr ""
msgid "No \"Small register classes\" kludge"
msgstr ""
-#: config/pa/pa.c:252
+#: config/pa/pa.c:274
#, c-format
msgid ""
"unknown -mschedule= option (%s).\n"
"Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n"
msgstr ""
-#: config/pa/pa.c:277
+#: config/pa/pa.c:299
#, c-format
msgid ""
"unknown -march= option (%s).\n"
"Valid options are 1.0, 1.1, and 2.0\n"
msgstr ""
-#: config/pa/pa.c:290
+#: config/pa/pa.c:312
msgid "PIC code generation is not supported in the portable runtime model\n"
msgstr ""
-#: config/pa/pa.c:295
+#: config/pa/pa.c:317
msgid "PIC code generation is not compatible with fast indirect calls\n"
msgstr ""
-#: config/pa/pa.c:300
+#: config/pa/pa.c:322
msgid "-g is only supported when using GAS on this processor,"
msgstr ""
-#: config/pa/pa.c:301
+#: config/pa/pa.c:323
msgid "-g option disabled"
msgstr ""
@@ -12158,107 +12396,107 @@ msgstr ""
#. or minus the bits to clear. An empty string NAME is used to
#. identify the default VALUE. Do not mark empty strings for
#. translation.
-#: config/pa/pa.h:218 config/pa/pa.h:224
+#: config/pa/pa.h:232 config/pa/pa.h:238
msgid "Generate PA1.1 code"
msgstr ""
-#: config/pa/pa.h:220 config/pa/pa.h:222
+#: config/pa/pa.h:234 config/pa/pa.h:236
msgid "Generate PA1.0 code"
msgstr ""
-#: config/pa/pa.h:226
+#: config/pa/pa.h:240
msgid "Generate PA2.0 code (requires binutils 2.10 or later)"
msgstr ""
-#: config/pa/pa.h:228
+#: config/pa/pa.h:242
msgid "Disable FP regs"
msgstr ""
-#: config/pa/pa.h:230
+#: config/pa/pa.h:244
msgid "Do not disable FP regs"
msgstr ""
-#: config/pa/pa.h:232
+#: config/pa/pa.h:246
msgid "Disable space regs"
msgstr ""
-#: config/pa/pa.h:234
+#: config/pa/pa.h:248
msgid "Do not disable space regs"
msgstr ""
-#: config/pa/pa.h:236
+#: config/pa/pa.h:250
msgid "Put jumps in call delay slots"
msgstr ""
-#: config/pa/pa.h:238
+#: config/pa/pa.h:252
msgid "Do not put jumps in call delay slots"
msgstr ""
-#: config/pa/pa.h:240
+#: config/pa/pa.h:254
msgid "Disable indexed addressing"
msgstr ""
-#: config/pa/pa.h:242
+#: config/pa/pa.h:256
msgid "Do not disable indexed addressing"
msgstr ""
-#: config/pa/pa.h:244
+#: config/pa/pa.h:258
msgid "Use portable calling conventions"
msgstr ""
-#: config/pa/pa.h:246
+#: config/pa/pa.h:260
msgid "Do not use portable calling conventions"
msgstr ""
-#: config/pa/pa.h:248
+#: config/pa/pa.h:262
msgid "Assume code will be assembled by GAS"
msgstr ""
-#: config/pa/pa.h:250
+#: config/pa/pa.h:264
msgid "Do not assume code will be assembled by GAS"
msgstr ""
-#: config/pa/pa.h:254
+#: config/pa/pa.h:268
msgid "Do not use software floating point"
msgstr ""
-#: config/pa/pa.h:256
+#: config/pa/pa.h:270
msgid "Emit long load/store sequences"
msgstr ""
-#: config/pa/pa.h:258
+#: config/pa/pa.h:272
msgid "Do not emit long load/store sequences"
msgstr ""
-#: config/pa/pa.h:260
+#: config/pa/pa.h:274
msgid "Generate fast indirect calls"
msgstr ""
-#: config/pa/pa.h:262
+#: config/pa/pa.h:276
msgid "Do not generate fast indirect calls"
msgstr ""
-#: config/pa/pa.h:264
+#: config/pa/pa.h:278
msgid "Generate code for huge switch statements"
msgstr ""
-#: config/pa/pa.h:266
+#: config/pa/pa.h:280
msgid "Do not generate code for huge switch statements"
msgstr ""
-#: config/pa/pa.h:268
+#: config/pa/pa.h:282
msgid "Always generate long calls"
msgstr ""
-#: config/pa/pa.h:270
+#: config/pa/pa.h:284
msgid "Generate long calls only when needed"
msgstr ""
-#: config/pa/pa.h:272
+#: config/pa/pa.h:286
msgid "Enable linker optimizations"
msgstr ""
-#: config/pa/pa.h:298
+#: config/pa/pa.h:312
msgid ""
"Specify architecture for code generation. Values are 1.0, 1.1, and 2.0. "
"2.0 requires gas snapshot 19990413 or later."
@@ -12272,50 +12510,50 @@ msgstr ""
msgid "Assume code will be linked by HP ld"
msgstr ""
-#: config/pdp11/pdp11.h:57
+#: config/pdp11/pdp11.h:62
msgid "Do not use hardware floating point"
msgstr ""
#. return float result in ac0
-#: config/pdp11/pdp11.h:59
+#: config/pdp11/pdp11.h:64
msgid "Return floating point results in ac0"
msgstr ""
-#: config/pdp11/pdp11.h:60
+#: config/pdp11/pdp11.h:65
msgid "Return floating point results in memory"
msgstr ""
#. is 11/40
-#: config/pdp11/pdp11.h:62
+#: config/pdp11/pdp11.h:67
msgid "Generate code for an 11/40"
msgstr ""
#. is 11/45
-#: config/pdp11/pdp11.h:65
+#: config/pdp11/pdp11.h:70
msgid "Generate code for an 11/45"
msgstr ""
#. is 11/10
-#: config/pdp11/pdp11.h:68
+#: config/pdp11/pdp11.h:73
msgid "Generate code for an 11/10"
msgstr ""
#. use movstrhi for bcopy
#. use 32 bit for int
-#: config/pdp11/pdp11.h:73 config/pdp11/pdp11.h:74
+#: config/pdp11/pdp11.h:78 config/pdp11/pdp11.h:79
msgid "Use 32 bit int"
msgstr ""
-#: config/pdp11/pdp11.h:75 config/pdp11/pdp11.h:76
+#: config/pdp11/pdp11.h:80 config/pdp11/pdp11.h:81
msgid "Use 16 bit int"
msgstr ""
#. use 32 bit for float
-#: config/pdp11/pdp11.h:78 config/pdp11/pdp11.h:79
+#: config/pdp11/pdp11.h:83 config/pdp11/pdp11.h:84
msgid "Use 32 bit float"
msgstr ""
-#: config/pdp11/pdp11.h:80 config/pdp11/pdp11.h:81
+#: config/pdp11/pdp11.h:85 config/pdp11/pdp11.h:86
msgid "Use 64 bit float"
msgstr ""
@@ -12323,50 +12561,50 @@ msgstr ""
#. is branching expensive - on a PDP, it's actually really cheap
#. this is just to play around and check what code gcc generates
#. split instruction and data memory?
-#: config/pdp11/pdp11.h:90
+#: config/pdp11/pdp11.h:95
msgid "Target has split I&D"
msgstr ""
-#: config/pdp11/pdp11.h:91
+#: config/pdp11/pdp11.h:96
msgid "Target does not have split I&D"
msgstr ""
#. UNIX assembler syntax?
-#: config/pdp11/pdp11.h:93
+#: config/pdp11/pdp11.h:98
msgid "Use UNIX assembler syntax"
msgstr ""
-#: config/pdp11/pdp11.h:94
+#: config/pdp11/pdp11.h:99
msgid "Use DEC assembler syntax"
msgstr ""
-#: config/romp/romp.c:719 config/rs6000/rs6000.c:7727
+#: config/romp/romp.c:725 config/rs6000/rs6000.c:7833
#, c-format
msgid "invalid %%S value"
msgstr ""
-#: config/romp/romp.c:728 config/romp/romp.c:735
+#: config/romp/romp.c:734 config/romp/romp.c:741
#, c-format
msgid "invalid %%b value"
msgstr ""
-#: config/romp/romp.c:775 config/romp/romp.c:786
+#: config/romp/romp.c:781 config/romp/romp.c:792
#, c-format
msgid "invalid %%z value"
msgstr ""
-#: config/romp/romp.c:794 config/romp/romp.c:802
+#: config/romp/romp.c:800 config/romp/romp.c:808
#, c-format
msgid "invalid %%Z value"
msgstr ""
-#: config/romp/romp.c:809 config/romp/romp.c:818 config/romp/romp.c:825
-#: config/rs6000/rs6000.c:7556
+#: config/romp/romp.c:815 config/romp/romp.c:824 config/romp/romp.c:831
+#: config/rs6000/rs6000.c:7662
#, c-format
msgid "invalid %%k value"
msgstr ""
-#: config/romp/romp.c:910 config/romp/romp.c:953
+#: config/romp/romp.c:916 config/romp/romp.c:959
#, c-format
msgid "invalid %%j value"
msgstr ""
@@ -12388,6 +12626,31 @@ msgstr ""
msgid "can't have varargs with -mfp-arg-in-fp-regs"
msgstr ""
+#: config/rs6000/host-darwin.c:51
+msgid "Segmentation Fault (code)"
+msgstr ""
+
+#: config/rs6000/host-darwin.c:83
+msgid "Out of stack space.\n"
+msgstr ""
+
+#: config/rs6000/host-darwin.c:104
+#, c-format
+msgid "Try running `%s' in the shell to raise its limit.\n"
+msgstr ""
+
+#: config/rs6000/host-darwin.c:114
+msgid "Segmentation Fault"
+msgstr ""
+
+#: config/rs6000/host-darwin.c:128
+msgid "While setting up signal stack"
+msgstr ""
+
+#: config/rs6000/host-darwin.c:134
+msgid "While setting up signal handler"
+msgstr ""
+
#. Handle the machine specific pragma longcall. Its syntax is
#.
#. # pragma longcall ( TOGGLE )
@@ -12421,132 +12684,137 @@ msgstr ""
msgid "junk at end of #pragma longcall"
msgstr ""
-#: config/rs6000/rs6000.c:597
+#: config/rs6000/rs6000.c:633
msgid "-mmultiple is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:604
+#: config/rs6000/rs6000.c:640
msgid "-mstring is not supported on little endian systems"
msgstr ""
-#: config/rs6000/rs6000.c:628
+#: config/rs6000/rs6000.c:654
#, c-format
msgid "unknown -mdebug-%s switch"
msgstr ""
-#: config/rs6000/rs6000.c:640
+#: config/rs6000/rs6000.c:666
#, c-format
msgid "unknown -mtraceback arg `%s'; expecting `full', `partial' or `none'"
msgstr ""
-#: config/rs6000/rs6000.c:651
+#: config/rs6000/rs6000.c:677
#, c-format
msgid "Unknown switch -mlong-double-%s"
msgstr ""
-#: config/rs6000/rs6000.c:743
+#: config/rs6000/rs6000.c:775
#, c-format
msgid "unknown -misel= option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:758
+#: config/rs6000/rs6000.c:790
#, c-format
msgid "unknown -mvrsave= option specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:777
+#: config/rs6000/rs6000.c:808
+#, c-format
+msgid "not configured for ABI: '%s'"
+msgstr ""
+
+#: config/rs6000/rs6000.c:814
#, c-format
msgid "unknown ABI specified: '%s'"
msgstr ""
-#: config/rs6000/rs6000.c:4178
+#: config/rs6000/rs6000.c:4280
msgid "argument 1 must be a 5-bit signed literal"
msgstr ""
-#: config/rs6000/rs6000.c:4285 config/rs6000/rs6000.c:4875
+#: config/rs6000/rs6000.c:4387 config/rs6000/rs6000.c:4977
msgid "argument 2 must be a 5-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:4328
+#: config/rs6000/rs6000.c:4430
msgid "argument 1 of __builtin_altivec_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:4382
+#: config/rs6000/rs6000.c:4484
msgid "argument 1 of __builtin_altivec_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:4461
+#: config/rs6000/rs6000.c:4563
msgid "argument 3 must be a 4-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:4638
+#: config/rs6000/rs6000.c:4740
#, c-format
msgid "argument to `%s' must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:4754
+#: config/rs6000/rs6000.c:4856
msgid "argument to dss must be a 2-bit unsigned literal"
msgstr ""
-#: config/rs6000/rs6000.c:4985
+#: config/rs6000/rs6000.c:5087
msgid "argument 1 of __builtin_spe_predicate must be a constant"
msgstr ""
-#: config/rs6000/rs6000.c:5058
+#: config/rs6000/rs6000.c:5160
msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr ""
-#: config/rs6000/rs6000.c:7483
+#: config/rs6000/rs6000.c:7589
#, c-format
msgid "invalid %%f value"
msgstr ""
-#: config/rs6000/rs6000.c:7492
+#: config/rs6000/rs6000.c:7598
#, c-format
msgid "invalid %%F value"
msgstr ""
-#: config/rs6000/rs6000.c:7501
+#: config/rs6000/rs6000.c:7607
#, c-format
msgid "invalid %%G value"
msgstr ""
-#: config/rs6000/rs6000.c:7536
+#: config/rs6000/rs6000.c:7642
#, c-format
msgid "invalid %%j code"
msgstr ""
-#: config/rs6000/rs6000.c:7546
+#: config/rs6000/rs6000.c:7652
#, c-format
msgid "invalid %%J code"
msgstr ""
-#: config/rs6000/rs6000.c:7576
+#: config/rs6000/rs6000.c:7682
#, c-format
msgid "invalid %%K value"
msgstr ""
-#: config/rs6000/rs6000.c:7643
+#: config/rs6000/rs6000.c:7749
#, c-format
msgid "invalid %%O value"
msgstr ""
-#: config/rs6000/rs6000.c:7765
+#: config/rs6000/rs6000.c:7875
#, c-format
msgid "invalid %%T value"
msgstr ""
-#: config/rs6000/rs6000.c:7775
+#: config/rs6000/rs6000.c:7885
#, c-format
msgid "invalid %%u value"
msgstr ""
-#: config/rs6000/rs6000.c:7784
+#: config/rs6000/rs6000.c:7894
#, c-format
msgid "invalid %%v value"
msgstr ""
-#: config/rs6000/rs6000.c:12190
+#: config/rs6000/rs6000.c:12311
msgid "no profiling of 64-bit code for this ABI"
msgstr ""
@@ -12584,6 +12852,71 @@ msgid ""
"-maix64 required: 64-bit computation with 32-bit addressing not yet supported"
msgstr ""
+#: config/rs6000/darwin.h:64
+msgid "Generate code suitable for executables (NOT shared libs)"
+msgstr ""
+
+#. The Darwin ABI always includes AltiVec, can't be (validly) turned
+#. off.
+#: config/rs6000/darwin.h:79
+msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
+msgstr ""
+
+#. Darwin doesn't support -fpic.
+#: config/rs6000/darwin.h:85
+msgid "-fpic is not supported; -fPIC assumed"
+msgstr ""
+
+#: config/rs6000/linux64.h:79 config/rs6000/sysv4.h:103
+msgid "Align to the base type of the bit-field"
+msgstr ""
+
+#: config/rs6000/linux64.h:81 config/rs6000/sysv4.h:105
+msgid "Don't align to the base type of the bit-field"
+msgstr ""
+
+#: config/rs6000/linux64.h:83 config/rs6000/sysv4.h:107
+msgid "Don't assume that unaligned accesses are handled by the system"
+msgstr ""
+
+#: config/rs6000/linux64.h:85 config/rs6000/sysv4.h:109
+msgid "Assume that unaligned accesses are handled by the system"
+msgstr ""
+
+#: config/rs6000/linux64.h:87 config/rs6000/linux64.h:89
+#: config/rs6000/sysv4.h:119 config/rs6000/sysv4.h:121
+msgid "Produce little endian code"
+msgstr ""
+
+#: config/rs6000/linux64.h:91 config/rs6000/linux64.h:93
+#: config/rs6000/sysv4.h:123 config/rs6000/sysv4.h:125
+msgid "Produce big endian code"
+msgstr ""
+
+#: config/rs6000/linux64.h:95
+msgid "Allow bit-fields to cross word boundaries"
+msgstr ""
+
+#: config/rs6000/linux64.h:97 config/rs6000/sysv4.h:136
+msgid "Do not allow bit-fields to cross word boundaries"
+msgstr ""
+
+#: config/rs6000/linux64.h:99 config/rs6000/sysv4.h:138
+msgid "Use alternate register names"
+msgstr ""
+
+#: config/rs6000/linux64.h:101 config/rs6000/sysv4.h:140
+msgid "Don't use alternate register names"
+msgstr ""
+
+#: config/rs6000/linux64.h:103
+msgid "Call mcount for profiling before a function prologue"
+msgstr ""
+
+#: config/rs6000/linux64.h:105
+msgid "Call mcount for profiling after a function prologue"
+msgstr ""
+
#. Run-time compilation parameters selecting different hardware subsets.
#.
#. Macro to define tables used to set the flags.
@@ -12715,35 +13048,35 @@ msgstr ""
msgid "Return small structures in registers (SVR4 default)"
msgstr ""
-#: config/rs6000/rs6000.h:379 config/sparc/sparc.h:635
+#: config/rs6000/rs6000.h:380 config/sparc/sparc.h:635
msgid "Use features of and schedule code for given CPU"
msgstr ""
-#: config/rs6000/rs6000.h:382
+#: config/rs6000/rs6000.h:383
msgid "Enable debug output"
msgstr ""
-#: config/rs6000/rs6000.h:384
+#: config/rs6000/rs6000.h:385
msgid "Select full, part, or no traceback table"
msgstr ""
-#: config/rs6000/rs6000.h:385
+#: config/rs6000/rs6000.h:386
msgid "Specify ABI to use"
msgstr ""
-#: config/rs6000/rs6000.h:387
+#: config/rs6000/rs6000.h:388
msgid "Specify size of long double (64 or 128 bits)"
msgstr ""
-#: config/rs6000/rs6000.h:389
+#: config/rs6000/rs6000.h:390
msgid "Specify yes/no if isel instructions should be generated"
msgstr ""
-#: config/rs6000/rs6000.h:391
+#: config/rs6000/rs6000.h:392
msgid "Specify yes/no if VRSAVE instructions should be generated for AltiVec"
msgstr ""
-#: config/rs6000/rs6000.h:393
+#: config/rs6000/rs6000.h:394
msgid "Avoid all range limits on call instructions"
msgstr ""
@@ -12759,7 +13092,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:1853
+#: config/rs6000/rs6000.h:1890
msgid "RETURN_ADDRESS_OFFSET not supported"
msgstr ""
@@ -12771,22 +13104,6 @@ msgstr ""
msgid "Select method for sdata handling"
msgstr ""
-#: config/rs6000/sysv4.h:103
-msgid "Align to the base type of the bit-field"
-msgstr ""
-
-#: config/rs6000/sysv4.h:105
-msgid "Don't align to the base type of the bit-field"
-msgstr ""
-
-#: config/rs6000/sysv4.h:107
-msgid "Don't assume that unaligned accesses are handled by the system"
-msgstr ""
-
-#: config/rs6000/sysv4.h:109
-msgid "Assume that unaligned accesses are handled by the system"
-msgstr ""
-
#: config/rs6000/sysv4.h:111 config/rs6000/sysv4.h:115
msgid "Produce code relocatable at runtime"
msgstr ""
@@ -12795,14 +13112,6 @@ msgstr ""
msgid "Don't produce code relocatable at runtime"
msgstr ""
-#: config/rs6000/sysv4.h:119 config/rs6000/sysv4.h:121
-msgid "Produce little endian code"
-msgstr ""
-
-#: config/rs6000/sysv4.h:123 config/rs6000/sysv4.h:125
-msgid "Produce big endian code"
-msgstr ""
-
#: config/rs6000/sysv4.h:126 config/rs6000/sysv4.h:127
#: config/rs6000/sysv4.h:128 config/rs6000/sysv4.h:129
#: config/rs6000/sysv4.h:130 config/rs6000/sysv4.h:131
@@ -12819,18 +13128,6 @@ msgstr ""
msgid "Don't use EABI"
msgstr ""
-#: config/rs6000/sysv4.h:136
-msgid "Do not allow bit-fields to cross word boundaries"
-msgstr ""
-
-#: config/rs6000/sysv4.h:138
-msgid "Use alternate register names"
-msgstr ""
-
-#: config/rs6000/sysv4.h:140
-msgid "Don't use alternate register names"
-msgstr ""
-
#: config/rs6000/sysv4.h:144
msgid "Link with libsim.a, libc.a and sim-crt0.o"
msgstr ""
@@ -12878,69 +13175,69 @@ msgstr ""
msgid "-mrelocatable and -msdata=%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:254
+#: config/rs6000/sysv4.h:255
#, c-format
msgid "-f%s and -msdata=%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:262
+#: config/rs6000/sysv4.h:263
#, c-format
msgid "-msdata=%s and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:271
+#: config/rs6000/sysv4.h:272
msgid "-mrelocatable and -mno-minimal-toc are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:277
+#: config/rs6000/sysv4.h:278
#, c-format
msgid "-mrelocatable and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:284
+#: config/rs6000/sysv4.h:285
#, c-format
msgid "-fPIC and -mcall-%s are incompatible"
msgstr ""
-#: config/rs6000/sysv4.h:291
+#: config/rs6000/sysv4.h:292
msgid "-mcall-aixdesc must be big endian"
msgstr ""
-#: config/s390/s390.c:893
+#: config/s390/s390.c:938
#, c-format
msgid "64-bit ABI not supported on %s"
msgstr ""
-#: config/s390/s390.c:897
+#: config/s390/s390.c:942
#, c-format
msgid "z/Architecture not supported on %s"
msgstr ""
-#: config/s390/s390.c:909
+#: config/s390/s390.c:954
msgid "64-bit ABI not possible in ESA/390 mode"
msgstr ""
-#: config/s390/s390.c:2669
+#: config/s390/s390.c:3207
msgid "invalid UNSPEC as operand (1)"
msgstr ""
-#: config/s390/s390.c:2705
+#: config/s390/s390.c:3267
msgid "invalid UNSPEC as operand (2)"
msgstr ""
-#: config/s390/s390.c:2711
+#: config/s390/s390.c:3273
msgid "UNKNOWN in s390_output_symbolic_const !?"
msgstr ""
-#: config/s390/s390.c:2729
+#: config/s390/s390.c:3291
msgid "Cannot decompose address."
msgstr ""
-#: config/s390/s390.c:2869
+#: config/s390/s390.c:3452
msgid "UNKNOWN in print_operand !?"
msgstr ""
-#: config/s390/s390.c:4507
+#: config/s390/s390.c:5074
msgid "Total size of local variables exceeds architecture limit."
msgstr ""
@@ -12992,101 +13289,101 @@ msgstr ""
msgid "mvc&ex"
msgstr ""
-#: config/sh/sh.c:5251
+#: config/sh/sh.c:5546
msgid "__builtin_saveregs not supported by this subtarget"
msgstr ""
-#: config/sh/sh.c:5801
+#: config/sh/sh.c:6096
msgid "attribute interrupt_handler is not compatible with -m5-compact"
msgstr ""
#. The sp_switch attribute only has meaning for interrupt functions.
-#: config/sh/sh.c:5827 config/sh/sh.c:5866
+#: config/sh/sh.c:6122 config/sh/sh.c:6161
#, c-format
msgid "`%s' attribute only applies to interrupt functions"
msgstr ""
#. The argument must be a constant string.
-#: config/sh/sh.c:5834
+#: config/sh/sh.c:6129
#, c-format
msgid "`%s' attribute argument not a string constant"
msgstr ""
#. The argument must be a constant integer.
-#: config/sh/sh.c:5873
+#: config/sh/sh.c:6168
#, c-format
msgid "`%s' attribute argument not an integer constant"
msgstr ""
#. There are no delay slots on SHmedia.
#. Relaxation isn't yet supported for SHmedia
-#: config/sh/sh.h:437
+#: config/sh/sh.h:462
msgid "Profiling is not supported on this target."
msgstr ""
-#: config/sparc/sparc.c:335
+#: config/sparc/sparc.c:341
#, c-format
msgid "%s is not supported by this configuration"
msgstr ""
-#: config/sparc/sparc.c:342
+#: config/sparc/sparc.c:348
msgid "-mlong-double-64 not allowed with -m64"
msgstr ""
-#: config/sparc/sparc.c:367
+#: config/sparc/sparc.c:373
msgid "-mcmodel= is not supported on 32 bit systems"
msgstr ""
-#: config/sparc/sparc.c:6305 config/sparc/sparc.c:6311
+#: config/sparc/sparc.c:6311 config/sparc/sparc.c:6317
#, c-format
msgid "invalid %%Y operand"
msgstr ""
-#: config/sparc/sparc.c:6381
+#: config/sparc/sparc.c:6387
#, c-format
msgid "invalid %%A operand"
msgstr ""
-#: config/sparc/sparc.c:6391
+#: config/sparc/sparc.c:6397
#, c-format
msgid "invalid %%B operand"
msgstr ""
-#: config/sparc/sparc.c:6430
+#: config/sparc/sparc.c:6436
#, c-format
msgid "invalid %%c operand"
msgstr ""
-#: config/sparc/sparc.c:6431
+#: config/sparc/sparc.c:6437
#, c-format
msgid "invalid %%C operand"
msgstr ""
-#: config/sparc/sparc.c:6452
+#: config/sparc/sparc.c:6458
#, c-format
msgid "invalid %%d operand"
msgstr ""
-#: config/sparc/sparc.c:6453
+#: config/sparc/sparc.c:6459
#, c-format
msgid "invalid %%D operand"
msgstr ""
-#: config/sparc/sparc.c:6469
+#: config/sparc/sparc.c:6475
#, c-format
msgid "invalid %%f operand"
msgstr ""
-#: config/sparc/sparc.c:6519
+#: config/sparc/sparc.c:6525
msgid "long long constant not a valid immediate operand"
msgstr ""
-#: config/sparc/sparc.c:6522
+#: config/sparc/sparc.c:6528
msgid "floating point constant not a valid immediate operand"
msgstr ""
#: config/sparc/freebsd.h:80 config/sparc/linux.h:87 config/sparc/linux64.h:89
-#: config/sparc/netbsd-elf.h:232
+#: config/sparc/netbsd-elf.h:231
msgid "Use 128 bit long doubles"
msgstr ""
@@ -13228,27 +13525,39 @@ msgstr ""
msgid "Use given SPARC code model"
msgstr ""
-#: config/stormy16/stormy16.c:1194
+#: config/stormy16/stormy16.c:556
+msgid "Constant halfword load operand out of range."
+msgstr ""
+
+#: config/stormy16/stormy16.c:568
+msgid "Constant arithmetic operand out of range."
+msgstr ""
+
+#: config/stormy16/stormy16.c:1074
+msgid "Local variable memory requirements exceed capacity."
+msgstr ""
+
+#: config/stormy16/stormy16.c:1316
msgid "cannot use va_start in interrupt function"
msgstr ""
-#: config/stormy16/stormy16.c:1554
+#: config/stormy16/stormy16.c:1676
msgid "`B' operand is not constant"
msgstr ""
-#: config/stormy16/stormy16.c:1560
+#: config/stormy16/stormy16.c:1682
msgid "`B' operand has multiple bits set"
msgstr ""
-#: config/stormy16/stormy16.c:1587
+#: config/stormy16/stormy16.c:1709
msgid "`o' operand is not constant"
msgstr ""
-#: config/stormy16/stormy16.c:1602
+#: config/stormy16/stormy16.c:1724
msgid "xstormy16_print_operand: unknown code"
msgstr ""
-#: config/stormy16/stormy16.c:1652
+#: config/stormy16/stormy16.c:1774
#, c-format
msgid "switch statement of size %lu entries too large"
msgstr ""
@@ -13310,64 +13619,64 @@ msgstr ""
msgid "junk at end of #pragma ghs endzda"
msgstr ""
-#: config/v850/v850.c:131
+#: config/v850/v850.c:138
#, c-format
msgid "%s=%s is not numeric"
msgstr ""
-#: config/v850/v850.c:138
+#: config/v850/v850.c:145
#, c-format
msgid "%s=%s is too large"
msgstr ""
-#: config/v850/v850.c:304
+#: config/v850/v850.c:311
msgid "const_double_split got a bad insn:"
msgstr ""
-#: config/v850/v850.c:839
+#: config/v850/v850.c:895
msgid "output_move_single:"
msgstr ""
-#: config/v850/v850.c:2219
+#: config/v850/v850.c:2275
msgid "a data area attribute cannot be specified for local variables"
msgstr ""
-#: config/v850/v850.c:2230
+#: config/v850/v850.c:2286
#, c-format
msgid "data area of '%s' conflicts with previous declaration"
msgstr ""
-#: config/v850/v850.c:2449
+#: config/v850/v850.c:2505
#, c-format
msgid "bogus JR construction: %d\n"
msgstr ""
-#: config/v850/v850.c:2470 config/v850/v850.c:2672
+#: config/v850/v850.c:2526 config/v850/v850.c:2728
#, c-format
msgid "bad amount of stack space removal: %d"
msgstr ""
-#: config/v850/v850.c:2648
+#: config/v850/v850.c:2704
#, c-format
msgid "bogus JARL construction: %d\n"
msgstr ""
-#: config/v850/v850.c:3028
+#: config/v850/v850.c:3084
#, c-format
msgid "Bogus DISPOSE construction: %d\n"
msgstr ""
-#: config/v850/v850.c:3050
+#: config/v850/v850.c:3106
#, c-format
msgid "Too much stack space to dispose of: %d"
msgstr ""
-#: config/v850/v850.c:3226
+#: config/v850/v850.c:3282
#, c-format
msgid "Bogus PREPEARE construction: %d\n"
msgstr ""
-#: config/v850/v850.c:3248
+#: config/v850/v850.c:3304
#, c-format
msgid "Too much stack space to prepare: %d"
msgstr ""
@@ -13377,97 +13686,97 @@ msgstr ""
#. each pair being { "NAME", VALUE }
#. where VALUE is the bits to set or minus the bits to clear.
#. An empty string NAME is used to identify the default VALUE.
-#: config/v850/v850.h:158
+#: config/v850/v850.h:163
msgid "Support Green Hills ABI"
msgstr ""
-#: config/v850/v850.h:161
+#: config/v850/v850.h:166
msgid "Prohibit PC relative function calls"
msgstr ""
-#: config/v850/v850.h:164
+#: config/v850/v850.h:169
msgid "Reuse r30 on a per function basis"
msgstr ""
-#: config/v850/v850.h:167
+#: config/v850/v850.h:172
msgid "Use stubs for function prologues"
msgstr ""
-#: config/v850/v850.h:170
+#: config/v850/v850.h:175
msgid "Same as: -mep -mprolog-function"
msgstr ""
-#: config/v850/v850.h:171
+#: config/v850/v850.h:176
msgid "Enable backend debugging"
msgstr ""
-#: config/v850/v850.h:173
+#: config/v850/v850.h:178
msgid "Compile for the v850 processor"
msgstr ""
-#: config/v850/v850.h:175
+#: config/v850/v850.h:180
msgid "Compile for v850e processor"
msgstr ""
#. Make sure that the other bits are cleared.
-#: config/v850/v850.h:177
+#: config/v850/v850.h:182
msgid "Enable the use of the short load instructions"
msgstr ""
-#: config/v850/v850.h:180
+#: config/v850/v850.h:185
msgid "Do not use the callt instruction"
msgstr ""
-#: config/v850/v850.h:187
+#: config/v850/v850.h:192
msgid "Do not use registers r2 and r5"
msgstr ""
-#: config/v850/v850.h:189
+#: config/v850/v850.h:194
msgid "Enfore strict alignment"
msgstr ""
-#: config/v850/v850.h:192
+#: config/v850/v850.h:197
msgid "Use 4 byte entries in switch tables"
msgstr ""
-#: config/v850/v850.h:218
+#: config/v850/v850.h:223
msgid "Set the max size of data eligible for the TDA area"
msgstr ""
-#: config/v850/v850.h:221
+#: config/v850/v850.h:226
msgid "Set the max size of data eligible for the SDA area"
msgstr ""
-#: config/v850/v850.h:224
+#: config/v850/v850.h:229
msgid "Set the max size of data eligible for the ZDA area"
msgstr ""
-#: config/xtensa/xtensa.c:1064 config/xtensa/xtensa.c:1098
-#: config/xtensa/xtensa.c:1107
+#: config/xtensa/xtensa.c:1069 config/xtensa/xtensa.c:1103
+#: config/xtensa/xtensa.c:1112
msgid "bad test"
msgstr ""
-#: config/xtensa/xtensa.c:1826
+#: config/xtensa/xtensa.c:1831
msgid "boolean registers required for the floating-point option"
msgstr ""
-#: config/xtensa/xtensa.c:1993
+#: config/xtensa/xtensa.c:1998
msgid "invalid mask"
msgstr ""
-#: config/xtensa/xtensa.c:2040
+#: config/xtensa/xtensa.c:2045
msgid "invalid address"
msgstr ""
-#: config/xtensa/xtensa.c:2065
+#: config/xtensa/xtensa.c:2070
msgid "no register in address"
msgstr ""
-#: config/xtensa/xtensa.c:2073
+#: config/xtensa/xtensa.c:2078
msgid "address offset not a constant"
msgstr ""
-#: config/xtensa/xtensa.c:2811
+#: config/xtensa/xtensa.c:2817
msgid "only uninitialized variables can be placed in a .bss section"
msgstr ""
@@ -13597,574 +13906,559 @@ msgstr ""
msgid "`-gnat' misspelled as `-gant'"
msgstr ""
-#: cp/call.c:250 cp/init.c:1602 cp/typeck.c:2095
+#: cp/call.c:252 cp/init.c:1604 cp/typeck.c:2091
msgid "qualified type `%T' does not match destructor name `~%T'"
msgstr ""
-#: cp/call.c:259
+#: cp/call.c:261
msgid "type of `%E' does not match destructor type `%T' (type was `%T')"
msgstr ""
-#: cp/call.c:268
+#: cp/call.c:270
msgid "`%D' is a namespace"
msgstr ""
-#: cp/call.c:276
+#: cp/call.c:278
msgid "base object `%E' of scoped method call is of non-aggregate type `%T'"
msgstr ""
-#: cp/call.c:356
+#: cp/call.c:358
msgid "unable to call pointer to member function here"
msgstr ""
-#: cp/call.c:487
+#: cp/call.c:489
msgid "destructors take no parameters"
msgstr ""
-#: cp/call.c:491
+#: cp/call.c:493
msgid "destructor name `~%T' does not match type `%T' of expression"
msgstr ""
-#: cp/call.c:507 cp/call.c:4765
+#: cp/call.c:509 cp/call.c:4996
msgid "request for member `%D' in `%E', which is of non-aggregate type `%T'"
msgstr ""
-#: cp/call.c:529
+#: cp/call.c:531
msgid "request for member `%D' is ambiguous"
msgstr ""
-#: cp/call.c:2365
-msgid "%s %D(%T, %T, %T) <built-in>"
-msgstr ""
-
-#: cp/call.c:2370
-msgid "%s %D(%T, %T) <built-in>"
-msgstr ""
-
-#: cp/call.c:2374
-msgid "%s %D(%T) <built-in>"
-msgstr ""
-
-#: cp/call.c:2378
-msgid "%s %T <conversion>"
-msgstr ""
-
-#: cp/call.c:2380
-msgid "%s %+#D%s"
-msgstr ""
-
-#: cp/call.c:2532
+#: cp/call.c:2672
msgid "conversion from `%T' to `%T' is ambiguous"
msgstr ""
-#: cp/call.c:2605
+#: cp/call.c:2750
msgid "incomplete type '%T' cannot be used to name a scope"
msgstr ""
-#: cp/call.c:2621 cp/typeck.c:2216 cp/typeck.c:2232
+#: cp/call.c:2770 cp/typeck.c:2212 cp/typeck.c:2228
msgid "'%D' has no member named '%E'"
msgstr ""
-#: cp/call.c:2728
+#: cp/call.c:2892 cp/call.c:2936
msgid "no matching function for call to `%D(%A)'"
msgstr ""
-#: cp/call.c:2739 cp/call.c:4864
+#: cp/call.c:2895
msgid "call of overloaded `%D(%A)' is ambiguous"
msgstr ""
+#: cp/call.c:2939
+msgid "call of overlopaded `%D(%A)' is ambiguous"
+msgstr ""
+
#. It's no good looking for an overloaded operator() on a
#. pointer-to-member-function.
-#: cp/call.c:2765
+#: cp/call.c:3005
#, c-format
msgid ""
"pointer-to-member function %E cannot be called without an object; consider "
"using .* or ->*"
msgstr ""
-#: cp/call.c:2835
+#: cp/call.c:3071
msgid "no match for call to `(%T) (%A)'"
msgstr ""
-#: cp/call.c:2845
+#: cp/call.c:3079
msgid "call of `(%T) (%A)' is ambiguous"
msgstr ""
-#: cp/call.c:2878
+#: cp/call.c:3112
msgid "%s for `%T ? %T : %T' operator"
msgstr ""
-#: cp/call.c:2883
+#: cp/call.c:3117
msgid "%s for `%T %s' operator"
msgstr ""
-#: cp/call.c:2886
+#: cp/call.c:3120
msgid "%s for `%T [%T]' operator"
msgstr ""
-#: cp/call.c:2891
+#: cp/call.c:3125
msgid "%s for `%T %s %T' operator"
msgstr ""
-#: cp/call.c:2894
+#: cp/call.c:3128
msgid "%s for `%s %T' operator"
msgstr ""
-#: cp/call.c:2979
+#: cp/call.c:3213
msgid "ISO C++ forbids omitting the middle term of a ?: expression"
msgstr ""
-#: cp/call.c:3038
+#: cp/call.c:3277
#, c-format
msgid "`%E' has type `void' and is not a throw-expression"
msgstr ""
-#: cp/call.c:3071 cp/call.c:3271
+#: cp/call.c:3310 cp/call.c:3507
msgid "operands to ?: have different types"
msgstr ""
-#: cp/call.c:3224
+#: cp/call.c:3460
msgid "enumeral mismatch in conditional expression: `%T' vs `%T'"
msgstr ""
-#: cp/call.c:3231
+#: cp/call.c:3467
msgid "enumeral and non-enumeral type in conditional expression"
msgstr ""
-#: cp/call.c:3310
-msgid "`%D' must be declared before use"
-msgstr ""
-
-#: cp/call.c:3509
+#: cp/call.c:3751
msgid "no `%D(int)' declared for postfix `%s', trying prefix operator instead"
msgstr ""
-#: cp/call.c:3556
+#: cp/call.c:3796
msgid "using synthesized `%#D' for copy assignment"
msgstr ""
-#: cp/call.c:3558
+#: cp/call.c:3798
msgid " where cfront would use `%#D'"
msgstr ""
-#: cp/call.c:3585
+#: cp/call.c:3821
msgid "comparison between `%#T' and `%#T'"
msgstr ""
-#: cp/call.c:3822
+#: cp/call.c:4058
msgid "no suitable `operator delete' for `%T'"
msgstr ""
-#: cp/call.c:3836
+#: cp/call.c:4072
msgid "`%+#D' is private"
msgstr ""
-#: cp/call.c:3838
+#: cp/call.c:4074
msgid "`%+#D' is protected"
msgstr ""
-#: cp/call.c:3840
+#: cp/call.c:4076
msgid "`%+#D' is inaccessible"
msgstr ""
-#: cp/call.c:3841
+#: cp/call.c:4077
msgid "within this context"
msgstr ""
-#: cp/call.c:3879
+#: cp/call.c:4115
msgid "invalid conversion from `%T' to `%T'"
msgstr ""
-#: cp/call.c:3881 cp/call.c:4020 cp/call.c:4022
+#: cp/call.c:4117 cp/call.c:4254 cp/call.c:4256
msgid " initializing argument %P of `%D'"
msgstr ""
-#: cp/call.c:3944 cp/call.c:3948
+#: cp/call.c:4179 cp/call.c:4183
msgid " initializing argument %P of `%D' from result of `%D'"
msgstr ""
-#: cp/call.c:3954 cp/call.c:3957
+#: cp/call.c:4189 cp/call.c:4192
msgid " initializing temporary from result of `%D'"
msgstr ""
#. Undefined behavior [expr.call] 5.2.2/7. We used to just warn
#. here and do a bitwise copy, but now cp_expr_size will abort if we
#. try to do that.
-#: cp/call.c:4108
+#: cp/call.c:4340
msgid ""
"cannot pass objects of non-POD type `%#T' through `...'; call will abort at "
"runtime"
msgstr ""
#. Undefined behavior [expr.call] 5.2.2/7.
-#: cp/call.c:4133
+#: cp/call.c:4365
msgid "cannot receive objects of non-POD type `%#T' through `...'"
msgstr ""
-#: cp/call.c:4173
+#: cp/call.c:4405
msgid "the default argument for parameter %d of `%D' has not yet been parsed"
msgstr ""
-#: cp/call.c:4293
+#: cp/call.c:4526
msgid "passing `%T' as `this' argument of `%#D' discards qualifiers"
msgstr ""
-#: cp/call.c:4526
+#: cp/call.c:4759
msgid "could not find class$ field in java interface type `%T'"
msgstr ""
-#: cp/call.c:4739
+#: cp/call.c:4970
msgid "call to non-function `%D'"
msgstr ""
-#: cp/call.c:4846
+#: cp/call.c:5074
msgid "no matching function for call to `%T::%s(%A)%#V'"
msgstr ""
-#: cp/call.c:4885
+#: cp/call.c:5091
+#, c-format
+msgid "call of overloaded `%s(%A)' is ambiguous"
+msgstr ""
+
+#: cp/call.c:5112
msgid "cannot call member function `%D' without object"
msgstr ""
-#: cp/call.c:5486
+#: cp/call.c:5700
msgid "passing `%T' chooses `%T' over `%T'"
msgstr ""
-#: cp/call.c:5488 cp/decl2.c:3945
+#: cp/call.c:5702 cp/decl2.c:3860
msgid " in call to `%D'"
msgstr ""
-#: cp/call.c:5537 cp/call.c:5662
+#: cp/call.c:5751
msgid "choosing `%D' over `%D'"
msgstr ""
-#: cp/call.c:5538
+#: cp/call.c:5752
msgid " for conversion from `%T' to `%T'"
msgstr ""
-#: cp/call.c:5540
+#: cp/call.c:5754
msgid " because conversion sequence for the argument is better"
msgstr ""
-#: cp/call.c:5664
+#: cp/call.c:5877
msgid ""
-" because worst conversion for the former is better than worst conversion "
-"for the latter"
+"are ambiguous even though the worst conversion for the former is better than "
+"the worst conversion for the latter"
msgstr ""
-#: cp/call.c:5773 cp/call.c:5792
+#: cp/call.c:5987 cp/call.c:6050
msgid "could not convert `%E' to `%T'"
msgstr ""
-#: cp/class.c:288
+#: cp/class.c:282
msgid ""
"cannot convert from base `%T' to derived type `%T' via virtual base `%T'"
msgstr ""
-#: cp/class.c:945
+#: cp/class.c:928
msgid "`%#D' and `%#D' cannot be overloaded"
msgstr ""
-#: cp/class.c:1029
+#: cp/class.c:1011
msgid "duplicate enum value `%D'"
msgstr ""
-#: cp/class.c:1032
+#: cp/class.c:1014
msgid "duplicate field `%D' (as enum and non-enum)"
msgstr ""
-#: cp/class.c:1039
+#: cp/class.c:1021
msgid "duplicate nested type `%D'"
msgstr ""
-#: cp/class.c:1050
+#: cp/class.c:1032
msgid "duplicate field `%D' (as type and non-type)"
msgstr ""
-#: cp/class.c:1054
+#: cp/class.c:1036
msgid "duplicate member `%D'"
msgstr ""
-#: cp/class.c:1097
+#: cp/class.c:1075
msgid "conflicting access specifications for method `%D', ignored"
msgstr ""
-#: cp/class.c:1099
+#: cp/class.c:1077
#, c-format
msgid "conflicting access specifications for field `%s', ignored"
msgstr ""
-#: cp/class.c:1144
+#: cp/class.c:1120
msgid "`%D' names constructor"
msgstr ""
-#: cp/class.c:1149
+#: cp/class.c:1125
msgid "`%D' invalid in `%T'"
msgstr ""
-#: cp/class.c:1157
+#: cp/class.c:1133
msgid "no members matching `%D' in `%#T'"
msgstr ""
-#: cp/class.c:1189 cp/class.c:1197
+#: cp/class.c:1165 cp/class.c:1173
msgid "`%D' invalid in `%#T'"
msgstr ""
-#: cp/class.c:1190
+#: cp/class.c:1166
msgid " because of local method `%#D' with same name"
msgstr ""
-#: cp/class.c:1198
+#: cp/class.c:1174
msgid " because of local member `%#D' with same name"
msgstr ""
-#: cp/class.c:1270
+#: cp/class.c:1244
msgid "base class `%#T' has a non-virtual destructor"
msgstr ""
-#: cp/class.c:1290
+#: cp/class.c:1264
msgid ""
"base `%T' with only non-default constructor in class without a constructor"
msgstr ""
-#: cp/class.c:1862
+#: cp/class.c:1651
msgid "all member functions in class `%T' are private"
msgstr ""
-#: cp/class.c:1876
+#: cp/class.c:1665
msgid "`%#T' only defines a private destructor and has no friends"
msgstr ""
-#: cp/class.c:1919
+#: cp/class.c:1708
msgid "`%#T' only defines private constructors and has no friends"
msgstr ""
-#: cp/class.c:2040 cp/class.c:5227
+#: cp/class.c:1932 cp/class.c:5133
msgid "redefinition of `%#T'"
msgstr ""
-#: cp/class.c:2041
+#: cp/class.c:1933
msgid "previous definition of `%#T'"
msgstr ""
-#: cp/class.c:2318
+#: cp/class.c:2227
msgid "no unique final overrider for `%D' in `%T'"
msgstr ""
#. Here we know it is a hider, and no overrider exists.
-#: cp/class.c:2708
+#: cp/class.c:2662
msgid "`%D' was hidden"
msgstr ""
-#: cp/class.c:2709
+#: cp/class.c:2663
msgid " by `%D'"
msgstr ""
-#: cp/class.c:2751
+#: cp/class.c:2704
msgid "ISO C++ forbids member `%D' with same name as enclosing class"
msgstr ""
-#: cp/class.c:2756 cp/decl2.c:1274
+#: cp/class.c:2709 cp/decl2.c:1232
msgid "`%#D' invalid; an anonymous union can only have non-static data members"
msgstr ""
-#: cp/class.c:2762 cp/decl2.c:1281
+#: cp/class.c:2715 cp/decl2.c:1239
msgid "private member `%#D' in anonymous union"
msgstr ""
-#: cp/class.c:2765 cp/decl2.c:1283
+#: cp/class.c:2718 cp/decl2.c:1241
msgid "protected member `%#D' in anonymous union"
msgstr ""
-#: cp/class.c:2890
+#: cp/class.c:2837
msgid ""
"vtable layout for class `%T' may not be ABI-compliant and may change in a "
"future version of GCC due to implicit virtual destructor"
msgstr ""
-#: cp/class.c:2954
+#: cp/class.c:2897
msgid "bit-field `%#D' with non-integral type"
msgstr ""
-#: cp/class.c:2974
+#: cp/class.c:2917
msgid "bit-field `%D' width not an integer constant"
msgstr ""
-#: cp/class.c:2980
+#: cp/class.c:2923
msgid "negative width in bit-field `%D'"
msgstr ""
-#: cp/class.c:2985
+#: cp/class.c:2928
msgid "zero width for bit-field `%D'"
msgstr ""
-#: cp/class.c:2991
+#: cp/class.c:2934
msgid "width of `%D' exceeds its type"
msgstr ""
-#: cp/class.c:3000
+#: cp/class.c:2943
msgid "`%D' is too small to hold all values of `%#T'"
msgstr ""
-#: cp/class.c:3084
+#: cp/class.c:3024
msgid "member `%#D' with constructor not allowed in union"
msgstr ""
-#: cp/class.c:3087
+#: cp/class.c:3027
msgid "member `%#D' with destructor not allowed in union"
msgstr ""
-#: cp/class.c:3090
+#: cp/class.c:3030
msgid "member `%#D' with copy assignment operator not allowed in union"
msgstr ""
-#: cp/class.c:3117
+#: cp/class.c:3057
msgid "multiple fields in union `%T' initialized"
msgstr ""
-#: cp/class.c:3239
+#: cp/class.c:3179
msgid "field `%D' in local class cannot be static"
msgstr ""
-#: cp/class.c:3245
+#: cp/class.c:3185
msgid "field `%D' invalidly declared function type"
msgstr ""
-#: cp/class.c:3252
+#: cp/class.c:3192
msgid "field `%D' invalidly declared method type"
msgstr ""
-#: cp/class.c:3258
+#: cp/class.c:3198
msgid "field `%D' invalidly declared offset type"
msgstr ""
#. Unions cannot have static members.
-#: cp/class.c:3276
+#: cp/class.c:3216
msgid "field `%D' declared static in union"
msgstr ""
-#: cp/class.c:3303
+#: cp/class.c:3243
msgid "non-static reference `%#D' in class without a constructor"
msgstr ""
-#: cp/class.c:3338
+#: cp/class.c:3278
msgid "non-static const member `%#D' in class without a constructor"
msgstr ""
-#: cp/class.c:3353
+#: cp/class.c:3293
msgid "field `%#D' with same name as class"
msgstr ""
-#: cp/class.c:3371
+#: cp/class.c:3311
msgid "`%#T' has pointer data members"
msgstr ""
-#: cp/class.c:3375
+#: cp/class.c:3315
msgid " but does not override `%T(const %T&)'"
msgstr ""
-#: cp/class.c:3377
+#: cp/class.c:3317
msgid " or `operator=(const %T&)'"
msgstr ""
-#: cp/class.c:3380
+#: cp/class.c:3320
msgid " but does not override `operator=(const %T&)'"
msgstr ""
-#: cp/class.c:3830
+#: cp/class.c:3747
msgid ""
"offset of empty base `%T' may not be ABI-compliant and maychange in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:3938
+#: cp/class.c:3856
msgid "class `%T' will be considered nearly empty in a future version of GCC"
msgstr ""
-#: cp/class.c:4028
+#: cp/class.c:3943
msgid "initializer specified for non-virtual method `%D'"
msgstr ""
-#: cp/class.c:4764
+#: cp/class.c:4630
msgid ""
"offset of virtual base `%T' is not ABI-compliant and may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:4864
+#: cp/class.c:4720
msgid "direct base `%T' inaccessible in `%T' due to ambiguity"
msgstr ""
-#: cp/class.c:4877
+#: cp/class.c:4733
msgid "virtual base `%T' inaccessible in `%T' due to ambiguity"
msgstr ""
-#: cp/class.c:5033
+#: cp/class.c:4887
msgid ""
"size assigned to `%T' may not be ABI-compliant and may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:5066
+#: cp/class.c:4937
msgid ""
"offset of `%D' is not ABI-compliant and may change in a future version of GCC"
msgstr ""
-#: cp/class.c:5075
+#: cp/class.c:4946
msgid ""
"`%D' contains empty classes which may cause base classes to be placed at "
"different locations in a future version of GCC"
msgstr ""
-#: cp/class.c:5134
+#: cp/class.c:5005
msgid ""
"layout of classes derived from empty class `%T' may change in a future "
"version of GCC"
msgstr ""
-#: cp/class.c:5384
+#: cp/class.c:5298
msgid "`%#T' has virtual functions but non-virtual destructor"
msgstr ""
-#: cp/class.c:5469
+#: cp/class.c:5381
msgid "trying to finish struct, but kicked out due to previous parse errors"
msgstr ""
-#: cp/class.c:5918
+#: cp/class.c:5813
#, c-format
msgid "language string `\"%s\"' not recognized"
msgstr ""
-#: cp/class.c:6014
+#: cp/class.c:5903
msgid ""
"cannot resolve overloaded function `%D' based on conversion to type `%T'"
msgstr ""
-#: cp/class.c:6135
+#: cp/class.c:6024
msgid "no matches converting function `%D' to type `%#T'"
msgstr ""
-#: cp/class.c:6158
+#: cp/class.c:6047
msgid "converting overloaded function `%D' to type `%#T' is ambiguous"
msgstr ""
-#: cp/class.c:6184
+#: cp/class.c:6073
msgid "assuming pointer to member `%D'"
msgstr ""
-#: cp/class.c:6187
+#: cp/class.c:6076
#, c-format
msgid "(a pointer to member can only be formed with `&%E')"
msgstr ""
-#: cp/class.c:6231 cp/class.c:6412 cp/class.c:6419
+#: cp/class.c:6118 cp/class.c:6299 cp/class.c:6306
msgid "not enough type information"
msgstr ""
-#: cp/class.c:6248
+#: cp/class.c:6135
msgid "argument of type `%T' does not match `%T'"
msgstr ""
-#: cp/class.c:6396
+#: cp/class.c:6283
msgid "invalid operation on uninstantiated type"
msgstr ""
@@ -14173,11 +14467,11 @@ 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:6679 cp/decl.c:1007 cp/decl.c:3098 cp/pt.c:1863
+#: cp/class.c:6558 cp/decl.c:989 cp/decl.c:3039 cp/pt.c:2032
msgid "declaration of `%#D'"
msgstr ""
-#: cp/class.c:6680
+#: cp/class.c:6559
msgid "changes meaning of `%D' from `%+#D'"
msgstr ""
@@ -14193,11 +14487,11 @@ msgstr ""
msgid "converting from `%T' to `%T'"
msgstr ""
-#: cp/cvt.c:201 cp/cvt.c:205
+#: cp/cvt.c:203 cp/cvt.c:207
msgid "pointer to member cast from `%T' to `%T' is via virtual base"
msgstr ""
-#: cp/cvt.c:223 cp/cvt.c:236 cp/cvt.c:283
+#: cp/cvt.c:225 cp/cvt.c:236 cp/cvt.c:283
msgid "cannot convert `%E' from type `%T' to type `%T'"
msgstr ""
@@ -14205,72 +14499,72 @@ msgstr ""
msgid "invalid conversion from '%T' to '%T'"
msgstr ""
-#: cp/cvt.c:527
+#: cp/cvt.c:494
msgid "conversion from `%T' to `%T' discards qualifiers"
msgstr ""
-#: cp/cvt.c:545
+#: cp/cvt.c:512
msgid "casting `%T' to `%T' does not dereference pointer"
msgstr ""
-#: cp/cvt.c:574
+#: cp/cvt.c:541
msgid "cannot convert type `%T' to type `%T'"
msgstr ""
-#: cp/cvt.c:686
+#: cp/cvt.c:666
msgid "conversion from `%#T' to `%#T'"
msgstr ""
-#: cp/cvt.c:698
+#: cp/cvt.c:678
msgid "`%#T' used where a `%T' was expected"
msgstr ""
-#: cp/cvt.c:715
+#: cp/cvt.c:695
msgid "the address of `%D', will always be `true'"
msgstr ""
-#: cp/cvt.c:735
+#: cp/cvt.c:715
msgid "`%#T' used where a floating point value was expected"
msgstr ""
-#: cp/cvt.c:782
+#: cp/cvt.c:762
msgid "conversion from `%T' to non-scalar type `%T' requested"
msgstr ""
-#: cp/cvt.c:866
+#: cp/cvt.c:846
msgid "object of incomplete type `%T' will not be accessed in %s"
msgstr ""
-#: cp/cvt.c:869
+#: cp/cvt.c:849
msgid "object of type `%T' will not be accessed in %s"
msgstr ""
-#: cp/cvt.c:885
+#: cp/cvt.c:865
msgid "object `%E' of incomplete type `%T' will not be accessed in %s"
msgstr ""
#. [over.over] enumerates the places where we can take the address
#. of an overloaded function, and this is not one of them.
-#: cp/cvt.c:905
+#: cp/cvt.c:885
#, c-format
msgid "%s cannot resolve address of overloaded function"
msgstr ""
#. Only warn when there is no &.
-#: cp/cvt.c:910
+#: cp/cvt.c:890
#, c-format
msgid "%s is a reference, not call, to function `%E'"
msgstr ""
-#: cp/cvt.c:1039
+#: cp/cvt.c:1012
msgid "converting NULL to non-pointer type"
msgstr ""
-#: cp/cvt.c:1115
+#: cp/cvt.c:1088
msgid "ambiguous default type conversion from `%T'"
msgstr ""
-#: cp/cvt.c:1117
+#: cp/cvt.c:1090
msgid " candidate conversions include `%D' and `%D'"
msgstr ""
@@ -14281,129 +14575,145 @@ msgstr ""
msgid "Internal error: no symbol alphabet for current style"
msgstr ""
-#: cp/decl.c:1008 cp/decl.c:3201
+#: cp/decl.c:990 cp/decl.c:3146
msgid "conflicts with previous declaration `%#D'"
msgstr ""
-#: cp/decl.c:1212
+#: cp/decl.c:1183
msgid "label `%D' used but not defined"
msgstr ""
-#: cp/decl.c:1217
+#: cp/decl.c:1188
msgid "label `%D' defined but not used"
msgstr ""
-#: cp/decl.c:2244
+#: cp/decl.c:2167
msgid "namespace alias `%D' not allowed here, assuming `%D'"
msgstr ""
-#: cp/decl.c:3004 cp/decl.c:3409
+#: cp/decl.c:2946 cp/decl.c:3354
msgid "previous declaration of `%D'"
msgstr ""
-#: cp/decl.c:3085 cp/decl.c:3123
+#: cp/decl.c:2994
+msgid "%Hfunction '%D' redeclared as inline"
+msgstr ""
+
+#: cp/decl.c:2996
+msgid "%Hprevious declaration of '%D' with attribute noinline"
+msgstr ""
+
+#: cp/decl.c:3003
+msgid "%Hfunction '%D' redeclared with attribute noinline"
+msgstr ""
+
+#: cp/decl.c:3005
+msgid "%Hprevious declaration of '%D' was inline"
+msgstr ""
+
+#: cp/decl.c:3026 cp/decl.c:3064
msgid "shadowing %s function `%#D'"
msgstr ""
-#: cp/decl.c:3094
+#: cp/decl.c:3035
msgid "library function `%#D' redeclared as non-function `%#D'"
msgstr ""
-#: cp/decl.c:3099
+#: cp/decl.c:3040
msgid "conflicts with built-in declaration `%#D'"
msgstr ""
-#: cp/decl.c:3118 cp/decl.c:3215 cp/decl.c:3231
+#: cp/decl.c:3059 cp/decl.c:3160 cp/decl.c:3176
msgid "new declaration `%#D'"
msgstr ""
-#: cp/decl.c:3119
+#: cp/decl.c:3060
msgid "ambiguates built-in declaration `%#D'"
msgstr ""
-#: cp/decl.c:3175
+#: cp/decl.c:3120
msgid "`%#D' redeclared as different kind of symbol"
msgstr ""
-#: cp/decl.c:3178
+#: cp/decl.c:3123
msgid "previous declaration of `%#D'"
msgstr ""
-#: cp/decl.c:3200
+#: cp/decl.c:3145
msgid "declaration of template `%#D'"
msgstr ""
-#: cp/decl.c:3216 cp/decl.c:3232
+#: cp/decl.c:3161 cp/decl.c:3177
msgid "ambiguates old declaration `%#D'"
msgstr ""
-#: cp/decl.c:3224
+#: cp/decl.c:3169
msgid "declaration of C function `%#D' conflicts with"
msgstr ""
-#: cp/decl.c:3226
+#: cp/decl.c:3171
msgid "previous declaration `%#D' here"
msgstr ""
-#: cp/decl.c:3242
+#: cp/decl.c:3187
msgid "conflicting types for `%#D'"
msgstr ""
-#: cp/decl.c:3243
+#: cp/decl.c:3188
msgid "previous declaration as `%#D'"
msgstr ""
-#: cp/decl.c:3286
+#: cp/decl.c:3231
msgid "`%#D' previously defined here"
msgstr ""
-#: cp/decl.c:3287
+#: cp/decl.c:3232
msgid "`%#D' previously declared here"
msgstr ""
#. Prototype decl follows defn w/o prototype.
-#: cp/decl.c:3296
+#: cp/decl.c:3241
msgid "prototype for `%#D'"
msgstr ""
-#: cp/decl.c:3297
+#: cp/decl.c:3242
msgid "follows non-prototype definition here"
msgstr ""
-#: cp/decl.c:3309
+#: cp/decl.c:3254
msgid "previous declaration of `%#D' with %L linkage"
msgstr ""
-#: cp/decl.c:3311
+#: cp/decl.c:3256
msgid "conflicts with new declaration with %L linkage"
msgstr ""
-#: cp/decl.c:3334 cp/decl.c:3341
+#: cp/decl.c:3279 cp/decl.c:3286
msgid "default argument given for parameter %d of `%#D'"
msgstr ""
-#: cp/decl.c:3336 cp/decl.c:3343
+#: cp/decl.c:3281 cp/decl.c:3288
msgid "after previous specification in `%#D'"
msgstr ""
-#: cp/decl.c:3352
+#: cp/decl.c:3297
msgid "`%#D' was used before it was declared inline"
msgstr ""
-#: cp/decl.c:3354
+#: cp/decl.c:3299
msgid "previous non-inline declaration here"
msgstr ""
-#: cp/decl.c:3408
+#: cp/decl.c:3353
msgid "redundant redeclaration of `%D' in same scope"
msgstr ""
-#: cp/decl.c:3489
+#: cp/decl.c:3434
#, c-format
msgid "declaration of `%F' throws different exceptions"
msgstr ""
-#: cp/decl.c:3491
+#: cp/decl.c:3436
#, c-format
msgid "than previous declaration `%F'"
msgstr ""
@@ -14416,15 +14726,15 @@ 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:3628
+#: cp/decl.c:3576
msgid "explicit specialization of %D after first use"
msgstr ""
-#: cp/decl.c:3882
+#: cp/decl.c:3830
msgid "`%#D' used prior to declaration"
msgstr ""
-#: cp/decl.c:3913
+#: cp/decl.c:3861
msgid "redeclaration of `wchar_t' as `%T'"
msgstr ""
@@ -14434,596 +14744,580 @@ msgstr ""
#. [basic.start.main]
#.
#. This function shall not be overloaded.
-#: cp/decl.c:3941
+#: cp/decl.c:3889
msgid "invalid redeclaration of `%D'"
msgstr ""
-#: cp/decl.c:3942
+#: cp/decl.c:3890
msgid "as `%D'"
msgstr ""
-#: cp/decl.c:4032
+#: cp/decl.c:3980
msgid "previous external decl of `%#D'"
msgstr ""
-#: cp/decl.c:4074
+#: cp/decl.c:4022
msgid "`%D' was previously implicitly declared to return `int'"
msgstr ""
-#: cp/decl.c:4134
+#: cp/decl.c:4082
msgid "extern declaration of `%#D' doesn't match"
msgstr ""
-#: cp/decl.c:4135
+#: cp/decl.c:4083
msgid "global declaration `%#D'"
msgstr ""
-#: cp/decl.c:4169
+#: cp/decl.c:4119
msgid "declaration of `%#D' shadows a parameter"
msgstr ""
-#: cp/decl.c:4189
+#: cp/decl.c:4140
#, c-format
msgid "declaration of `%s' shadows a member of `this'"
msgstr ""
-#: cp/decl.c:4541
+#: cp/decl.c:4493
msgid "`%#D' hides constructor for `%#T'"
msgstr ""
-#: cp/decl.c:4556
+#: cp/decl.c:4508
msgid "`%#D' conflicts with previous using declaration `%#D'"
msgstr ""
-#: cp/decl.c:4568
+#: cp/decl.c:4520
msgid "previous non-function declaration `%#D'"
msgstr ""
-#: cp/decl.c:4569
+#: cp/decl.c:4521
msgid "conflicts with function declaration `%#D'"
msgstr ""
-#: cp/decl.c:4659
+#: cp/decl.c:4610
msgid "implicit declaration of function `%#D'"
msgstr ""
-#: cp/decl.c:4817
+#: cp/decl.c:4764
#, c-format
msgid "label `%s' referenced outside of any function"
msgstr ""
-#: cp/decl.c:4920 cp/decl.c:4944 cp/decl.c:5037
+#: cp/decl.c:4864 cp/decl.c:4888 cp/decl.c:4977
msgid "jump to label `%D'"
msgstr ""
-#: cp/decl.c:4922 cp/decl.c:4946
+#: cp/decl.c:4866 cp/decl.c:4890
msgid "jump to case label"
msgstr ""
-#: cp/decl.c:4930
+#: cp/decl.c:4874
msgid " crosses initialization of `%#D'"
msgstr ""
-#: cp/decl.c:4933 cp/decl.c:5053
+#: cp/decl.c:4877 cp/decl.c:4993
msgid " enters scope of non-POD `%#D'"
msgstr ""
-#: cp/decl.c:4953 cp/decl.c:5057
+#: cp/decl.c:4897 cp/decl.c:4997
msgid " enters try block"
msgstr ""
#. Can't skip init of __exception_info.
-#: cp/decl.c:4955 cp/decl.c:5049 cp/decl.c:5059
+#: cp/decl.c:4899 cp/decl.c:4989 cp/decl.c:4999
msgid " enters catch block"
msgstr ""
-#: cp/decl.c:5038
+#: cp/decl.c:4978
msgid " from here"
msgstr ""
-#: cp/decl.c:5051
+#: cp/decl.c:4991
msgid " skips initialization of `%#D'"
msgstr ""
-#: cp/decl.c:5086
+#: cp/decl.c:5024
msgid "label named wchar_t"
msgstr ""
-#: cp/decl.c:5090
+#: cp/decl.c:5028
msgid "duplicate label `%D'"
msgstr ""
-#: cp/decl.c:5175
+#: cp/decl.c:5111
#, c-format
msgid "case label `%E' not within a switch statement"
msgstr ""
#. Definition isn't the kind we were looking for.
-#: cp/decl.c:5354 cp/decl.c:5373
+#: cp/decl.c:5287 cp/decl.c:5306
msgid "`%#D' redeclared as %C"
msgstr ""
#. This happens for A::B where B is a template, and there are no
#. template arguments.
-#: cp/decl.c:5461 cp/typeck.c:2070 cp/typeck.c:2244
+#: cp/decl.c:5385 cp/typeck.c:2066 cp/typeck.c:2240
msgid "invalid use of `%D'"
msgstr ""
-#: cp/decl.c:5502
+#: cp/decl.c:5426
msgid "`%D::%D' is not a template"
msgstr ""
-#: cp/decl.c:5519
+#: cp/decl.c:5443
msgid "`%D' undeclared in namespace `%D'"
msgstr ""
-#: cp/decl.c:5652 cp/parser.c:3520
+#: cp/decl.c:5566 cp/parser.c:3333
msgid "`%D' used without template parameters"
msgstr ""
-#: cp/decl.c:5663 cp/decl.c:5679 cp/decl.c:5783
+#: cp/decl.c:5577 cp/decl.c:5593 cp/decl.c:5691
msgid "no class template named `%#T' in `%#T'"
msgstr ""
-#: cp/decl.c:5702 cp/decl.c:5712 cp/decl.c:5744
+#: cp/decl.c:5619 cp/decl.c:5629 cp/decl.c:5654
msgid "no type named `%#T' in `%#T'"
msgstr ""
-#: cp/decl.c:5968
-msgid "lookup of `%D' finds `%#D'"
-msgstr ""
-
-#: cp/decl.c:5970
-msgid " instead of `%D' from dependent base class"
-msgstr ""
-
-#: cp/decl.c:5972
-msgid " (use `typename %T::%D' if that's what you meant)"
-msgstr ""
-
-#: cp/decl.c:6029
+#: cp/decl.c:5904
msgid "name lookup of `%D' changed"
msgstr ""
-#: cp/decl.c:6031
+#: cp/decl.c:5906
msgid " matches this `%D' under ISO standard rules"
msgstr ""
-#: cp/decl.c:6033
+#: cp/decl.c:5908
msgid " matches this `%D' under old rules"
msgstr ""
-#: cp/decl.c:6047 cp/decl.c:6054
+#: cp/decl.c:5922 cp/decl.c:5929
msgid "name lookup of `%D' changed for new ISO `for' scoping"
msgstr ""
-#: cp/decl.c:6049
+#: cp/decl.c:5924
msgid " cannot use obsolete binding at `%D' because it has a destructor"
msgstr ""
-#: cp/decl.c:6056
+#: cp/decl.c:5931
msgid " using obsolete binding at `%D'"
msgstr ""
-#: cp/decl.c:6971
+#: cp/decl.c:6786
msgid "an anonymous union cannot have function members"
msgstr ""
-#: cp/decl.c:6988
+#: cp/decl.c:6803
msgid "member %#D' with constructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:6991
+#: cp/decl.c:6806
msgid "member %#D' with destructor not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:6994
+#: cp/decl.c:6809
msgid ""
"member %#D' with copy assignment operator not allowed in anonymous aggregate"
msgstr ""
-#: cp/decl.c:7037
+#: cp/decl.c:6851
msgid "redeclaration of C++ built-in type `%T'"
msgstr ""
-#: cp/decl.c:7075
+#: cp/decl.c:6889
msgid "multiple types in one declaration"
msgstr ""
-#: cp/decl.c:7101
+#: cp/decl.c:6915
msgid "missing type-name in typedef-declaration"
msgstr ""
-#: cp/decl.c:7109
+#: cp/decl.c:6923
msgid "ISO C++ prohibits anonymous structs"
msgstr ""
-#: cp/decl.c:7116
+#: cp/decl.c:6930
msgid "`%D' can only be specified for functions"
msgstr ""
-#: cp/decl.c:7118
+#: cp/decl.c:6932
msgid "`%D' can only be specified inside a class"
msgstr ""
-#: cp/decl.c:7120
+#: cp/decl.c:6934
msgid "`%D' can only be specified for constructors"
msgstr ""
-#: cp/decl.c:7123
+#: cp/decl.c:6937
msgid "`%D' can only be specified for objects and functions"
msgstr ""
-#: cp/decl.c:7271 cp/decl2.c:907
+#: cp/decl.c:7079 cp/decl2.c:889
msgid "typedef `%D' is initialized (use __typeof__ instead)"
msgstr ""
-#: cp/decl.c:7276
+#: cp/decl.c:7084
msgid "function `%#D' is initialized like a variable"
msgstr ""
-#: cp/decl.c:7288
+#: cp/decl.c:7096
msgid "declaration of `%#D' has `extern' and is initialized"
msgstr ""
-#: cp/decl.c:7322
+#: cp/decl.c:7119 cp/decl.c:13459
+msgid "%Hinline function '%D' given attribute noinline"
+msgstr ""
+
+#: cp/decl.c:7130
msgid "`%#D' is not a static member of `%#T'"
msgstr ""
-#: cp/decl.c:7328
+#: cp/decl.c:7136
msgid "ISO C++ does not permit `%T::%D' to be defined as `%T::%D'"
msgstr ""
-#: cp/decl.c:7339
+#: cp/decl.c:7147
msgid "duplicate initialization of %D"
msgstr ""
-#: cp/decl.c:7368
+#: cp/decl.c:7176
msgid "declaration of `%#D' outside of class is not definition"
msgstr ""
-#: cp/decl.c:7416
+#: cp/decl.c:7225
msgid "variable `%#D' has initializer but incomplete type"
msgstr ""
-#: cp/decl.c:7424 cp/decl.c:7963
+#: cp/decl.c:7233 cp/decl.c:7762
msgid "elements of array `%#D' have incomplete type"
msgstr ""
-#: cp/decl.c:7440
+#: cp/decl.c:7249
msgid "aggregate `%#D' has incomplete type and cannot be defined"
msgstr ""
-#: cp/decl.c:7479
+#: cp/decl.c:7287
msgid "`%D' declared as reference but not initialized"
msgstr ""
-#: cp/decl.c:7485
+#: cp/decl.c:7293
msgid "ISO C++ forbids use of initializer list to initialize reference `%D'"
msgstr ""
-#: cp/decl.c:7518
+#: cp/decl.c:7323
msgid "cannot initialize `%T' from `%T'"
msgstr ""
-#: cp/decl.c:7552
+#: cp/decl.c:7355
msgid "initializer fails to determine size of `%D'"
msgstr ""
-#: cp/decl.c:7557
+#: cp/decl.c:7360
msgid "array size missing in `%D'"
msgstr ""
-#: cp/decl.c:7569
+#: cp/decl.c:7372
msgid "zero-size array `%D'"
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:7607
+#: cp/decl.c:7409
msgid "storage size of `%D' isn't known"
msgstr ""
-#: cp/decl.c:7629
+#: cp/decl.c:7431
msgid "storage size of `%D' isn't constant"
msgstr ""
-#: cp/decl.c:7680
+#: cp/decl.c:7481
msgid ""
"sorry: semantics of inline function static data `%#D' are wrong (you'll wind "
"up with multiple copies)"
msgstr ""
-#: cp/decl.c:7681
+#: cp/decl.c:7482
msgid " you can work around this by removing the initializer"
msgstr ""
-#: cp/decl.c:7709
+#: cp/decl.c:7509
msgid "uninitialized const `%D'"
msgstr ""
-#: cp/decl.c:7793
+#: cp/decl.c:7593
msgid "brace-enclosed initializer used to initialize `%T'"
msgstr ""
-#: cp/decl.c:7857
+#: cp/decl.c:7657
msgid "initializer for `%T' must be brace-enclosed"
msgstr ""
-#: cp/decl.c:7921
+#: cp/decl.c:7720
msgid "too many initializers for `%T'"
msgstr ""
-#: cp/decl.c:7957
+#: cp/decl.c:7756
msgid "variable-sized object `%D' may not be initialized"
msgstr ""
-#: cp/decl.c:7968
+#: cp/decl.c:7767
msgid "`%D' has incomplete type"
msgstr ""
-#: cp/decl.c:8017
+#: cp/decl.c:7822
msgid "`%D' must be initialized by constructor, not by `{...}'"
msgstr ""
-#: cp/decl.c:8058
+#: cp/decl.c:7863
msgid "structure `%D' with uninitialized const members"
msgstr ""
-#: cp/decl.c:8060
+#: cp/decl.c:7865
msgid "structure `%D' with uninitialized reference members"
msgstr ""
-#: cp/decl.c:8303
+#: cp/decl.c:8098
msgid "assignment (not initialization) in declaration"
msgstr ""
-#: cp/decl.c:8315
+#: cp/decl.c:8110
msgid "cannot initialize `%D' to namespace `%D'"
msgstr ""
-#: cp/decl.c:8366
+#: cp/decl.c:8161
msgid "shadowing previous type declaration of `%#D'"
msgstr ""
-#: cp/decl.c:8412
+#: cp/decl.c:8207
msgid "`%D' cannot be thread-local because it has non-POD type `%T'"
msgstr ""
-#: cp/decl.c:8427
+#: cp/decl.c:8222
msgid "`%D' is thread-local and so cannot be dynamically initialized"
msgstr ""
-#: cp/decl.c:8820 cp/init.c:549
+#: cp/decl.c:8609 cp/init.c:556
msgid "multiple initializations given for `%D'"
msgstr ""
-#: cp/decl.c:8912
+#: cp/decl.c:8699
msgid "invalid catch parameter"
msgstr ""
-#: cp/decl.c:9030
+#: cp/decl.c:8813
msgid "destructor for alien class `%T' cannot be a member"
msgstr ""
-#: cp/decl.c:9033
+#: cp/decl.c:8816
msgid "constructor for alien class `%T' cannot be a member"
msgstr ""
-#: cp/decl.c:9052
+#: cp/decl.c:8838
msgid "`%D' declared as a `virtual' %s"
msgstr ""
-#: cp/decl.c:9054
+#: cp/decl.c:8840
msgid "`%D' declared as an `inline' %s"
msgstr ""
-#: cp/decl.c:9056
+#: cp/decl.c:8842
msgid ""
"`const' and `volatile' function specifiers on `%D' invalid in %s declaration"
msgstr ""
-#: cp/decl.c:9059
+#: cp/decl.c:8845
msgid "`%D' declared as a friend"
msgstr ""
-#: cp/decl.c:9065
+#: cp/decl.c:8851
msgid "`%D' declared with an exception specification"
msgstr ""
-#: cp/decl.c:9140
+#: cp/decl.c:8930
msgid "cannot declare `::main' to be a template"
msgstr ""
-#: cp/decl.c:9142
+#: cp/decl.c:8932
msgid "cannot declare `::main' to be inline"
msgstr ""
-#: cp/decl.c:9144
+#: cp/decl.c:8934
msgid "cannot declare `::main' to be static"
msgstr ""
-#: cp/decl.c:9147
+#: cp/decl.c:8937
msgid "`main' must return `int'"
msgstr ""
-#: cp/decl.c:9175
+#: cp/decl.c:8965
msgid "non-local function `%#D' uses anonymous type"
msgstr ""
-#: cp/decl.c:9178
+#: cp/decl.c:8968
msgid ""
"`%#D' does not refer to the unqualified type, so it is not used for linkage"
msgstr ""
-#: cp/decl.c:9184
+#: cp/decl.c:8974
msgid "non-local function `%#D' uses local type `%T'"
msgstr ""
-#: cp/decl.c:9207
+#: cp/decl.c:9003
msgid "%smember function `%D' cannot have `%T' method qualifier"
msgstr ""
-#: cp/decl.c:9231
+#: cp/decl.c:9027
msgid "defining explicit specialization `%D' in friend declaration"
msgstr ""
#. Something like `template <class T> friend void f<T>()'.
-#: cp/decl.c:9241
+#: cp/decl.c:9037
msgid "invalid use of template-id `%D' in declaration of primary template"
msgstr ""
-#: cp/decl.c:9269
+#: cp/decl.c:9065
msgid ""
"default arguments are not allowed in declaration of friend template "
"specialization `%D'"
msgstr ""
-#: cp/decl.c:9276
+#: cp/decl.c:9072
msgid ""
"`inline' is not allowed in declaration of friend template specialization `%D'"
msgstr ""
-#: cp/decl.c:9335
+#: cp/decl.c:9131
msgid "definition of implicitly-declared `%D'"
msgstr ""
-#: cp/decl.c:9347 cp/decl2.c:759
+#: cp/decl.c:9144 cp/decl2.c:770
msgid "no `%#D' member function declared in class `%T'"
msgstr ""
-#: cp/decl.c:9480
+#: cp/decl.c:9277
msgid "non-local variable `%#D' uses local type `%T'"
msgstr ""
-#: cp/decl.c:9582
+#: cp/decl.c:9376
msgid ""
"invalid in-class initialization of static data member of non-integral type `%"
"T'"
msgstr ""
-#: cp/decl.c:9591
+#: cp/decl.c:9385
msgid "ISO C++ forbids in-class initialization of non-const static member `%D'"
msgstr ""
-#: cp/decl.c:9594
+#: cp/decl.c:9388
msgid ""
"ISO C++ forbids initialization of member constant `%D' of non-integral type `"
"%T'"
msgstr ""
-#: cp/decl.c:9644
+#: cp/decl.c:9436
msgid "size of array `%D' has non-integer type"
msgstr ""
-#: cp/decl.c:9646
+#: cp/decl.c:9438
msgid "size of array has non-integer type"
msgstr ""
-#: cp/decl.c:9666
+#: cp/decl.c:9458
msgid "size of array `%D' is negative"
msgstr ""
-#: cp/decl.c:9668
+#: cp/decl.c:9460
msgid "size of array is negative"
msgstr ""
-#: cp/decl.c:9677
+#: cp/decl.c:9469
msgid "ISO C++ forbids zero-size array `%D'"
msgstr ""
-#: cp/decl.c:9679
+#: cp/decl.c:9471
msgid "ISO C++ forbids zero-size array"
msgstr ""
-#: cp/decl.c:9686
+#: cp/decl.c:9478
msgid "size of array `%D' is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:9689
+#: cp/decl.c:9481
msgid "size of array is not an integral constant-expression"
msgstr ""
-#: cp/decl.c:9707
+#: cp/decl.c:9499
msgid "ISO C++ forbids variable-size array `%D'"
msgstr ""
-#: cp/decl.c:9710
+#: cp/decl.c:9502
msgid "ISO C++ forbids variable-size array"
msgstr ""
-#: cp/decl.c:9721
+#: cp/decl.c:9513
msgid "overflow in array dimension"
msgstr ""
-#: cp/decl.c:9822
+#: cp/decl.c:9610
msgid "declaration of `%D' as %s"
msgstr ""
-#: cp/decl.c:9824
+#: cp/decl.c:9612
#, c-format
msgid "creating %s"
msgstr ""
-#: cp/decl.c:9836
+#: cp/decl.c:9624
msgid ""
"declaration of `%D' as multidimensional array must have bounds for all "
"dimensions except the first"
msgstr ""
-#: cp/decl.c:9839
+#: cp/decl.c:9627
msgid ""
"multidimensional array must have bounds for all dimensions except the first"
msgstr ""
-#: cp/decl.c:9868
+#: cp/decl.c:9655
msgid "return type specification for constructor invalid"
msgstr ""
-#: cp/decl.c:9875
+#: cp/decl.c:9662
msgid "return type specification for destructor invalid"
msgstr ""
-#: cp/decl.c:9881
+#: cp/decl.c:9668
msgid "operator `%T' declared to return `%T'"
msgstr ""
-#: cp/decl.c:9883
+#: cp/decl.c:9670
msgid "return type specified for `operator %T'"
msgstr ""
-#: cp/decl.c:10030
+#: cp/decl.c:9813
msgid "destructors must be member functions"
msgstr ""
-#: cp/decl.c:10049
+#: cp/decl.c:9832
msgid "destructor `%T' must match class name `%T'"
msgstr ""
-#: cp/decl.c:10078
-msgid "variable declaration is not allowed here"
-msgstr ""
-
-#: cp/decl.c:10105
-msgid "invalid declarator"
-msgstr ""
-
-#: cp/decl.c:10156
+#: cp/decl.c:9898
msgid "declarator-id missing; using reserved word `%D'"
msgstr ""
-#: cp/decl.c:10212
+#: cp/decl.c:9954
msgid "type `%T' is not derived from type `%T'"
msgstr ""
#. Parse error puts this typespec where
#. a declarator should go.
-#: cp/decl.c:10272
+#: cp/decl.c:10014
msgid "`%T' specified as declarator-id"
msgstr ""
-#: cp/decl.c:10274
+#: cp/decl.c:10016
msgid " perhaps you want `%T' for a constructor"
msgstr ""
@@ -15031,297 +15325,295 @@ msgstr ""
#. decl-specifier like in
#. std::allocator alloc;
#. Handle that gracefully.
-#: cp/decl.c:10296
+#: cp/decl.c:10038
#, c-format
msgid "invalid use of template-name '%E' in a declarator"
msgstr ""
-#: cp/decl.c:10316
+#: cp/decl.c:10058
msgid "declaration of `%D' as non-function"
msgstr ""
-#: cp/decl.c:10393
+#: cp/decl.c:10135
msgid "`bool' is now a keyword"
msgstr ""
-#: cp/decl.c:10395
+#: cp/decl.c:10137
msgid "extraneous `%T' ignored"
msgstr ""
-#: cp/decl.c:10411 cp/decl.c:10455
+#: cp/decl.c:10153 cp/decl.c:10197
msgid "multiple declarations `%T' and `%T'"
msgstr ""
-#: cp/decl.c:10424
+#: cp/decl.c:10166
msgid "ISO C++ does not support `long long'"
msgstr ""
-#: cp/decl.c:10528 cp/decl.c:10531
+#: cp/decl.c:10270 cp/decl.c:10273
#, c-format
msgid "ISO C++ forbids declaration of `%s' with no type"
msgstr ""
-#. The implicit typename extension is deprecated and will be
-#. removed. Warn about its use now.
-#: cp/decl.c:10541
-msgid "`%T' is implicitly a typename"
-msgstr ""
-
-#: cp/decl.c:10577
+#: cp/decl.c:10304
#, c-format
msgid "short, signed or unsigned invalid for `%s'"
msgstr ""
-#: cp/decl.c:10582
+#: cp/decl.c:10309
#, c-format
msgid "long and short specified together for `%s'"
msgstr ""
-#: cp/decl.c:10593
+#: cp/decl.c:10320
#, c-format
msgid "signed and unsigned given together for `%s'"
msgstr ""
-#: cp/decl.c:10702
+#: cp/decl.c:10429
msgid "qualifiers are not allowed on declaration of `operator %T'"
msgstr ""
-#: cp/decl.c:10724
+#: cp/decl.c:10451
msgid "member `%D' cannot be declared both virtual and static"
msgstr ""
-#: cp/decl.c:10733
+#: cp/decl.c:10460
msgid "`%T::%D' is not a valid declarator"
msgstr ""
-#: cp/decl.c:10745
+#: cp/decl.c:10472
msgid "storage class specifiers invalid in parameter declarations"
msgstr ""
-#: cp/decl.c:10749
+#: cp/decl.c:10476
msgid "typedef declaration invalid in parameter declaration"
msgstr ""
-#: cp/decl.c:10762
+#: cp/decl.c:10489
msgid "virtual outside class declaration"
msgstr ""
-#: cp/decl.c:10823
+#: cp/decl.c:10550
#, c-format
msgid "storage class specified for %s `%s'"
msgstr ""
-#: cp/decl.c:10870
+#: cp/decl.c:10597
msgid "storage class specifiers invalid in friend function declarations"
msgstr ""
-#: cp/decl.c:11041
+#: cp/decl.c:10768
msgid "destructor cannot be static member function"
msgstr ""
-#: cp/decl.c:11044
+#: cp/decl.c:10771
#, c-format
msgid "destructors may not be `%s'"
msgstr ""
-#: cp/decl.c:11065
+#: cp/decl.c:10792
msgid "constructor cannot be static member function"
msgstr ""
-#: cp/decl.c:11068
+#: cp/decl.c:10795
msgid "constructors cannot be declared virtual"
msgstr ""
-#: cp/decl.c:11073
+#: cp/decl.c:10800
#, c-format
msgid "constructors may not be `%s'"
msgstr ""
-#: cp/decl.c:11083
+#: cp/decl.c:10810
msgid "return value type specifier for constructor ignored"
msgstr ""
-#: cp/decl.c:11102
+#: cp/decl.c:10829
#, c-format
msgid "can't initialize friend function `%s'"
msgstr ""
#. Cannot be both friend and virtual.
-#: cp/decl.c:11106
+#: cp/decl.c:10833
msgid "virtual functions cannot be friends"
msgstr ""
-#: cp/decl.c:11111
+#: cp/decl.c:10838
msgid "friend declaration not in class definition"
msgstr ""
-#: cp/decl.c:11113
+#: cp/decl.c:10840
#, c-format
msgid "can't define friend function `%s' in a local class definition"
msgstr ""
-#: cp/decl.c:11137
+#: cp/decl.c:10864
msgid "destructors may not have parameters"
msgstr ""
-#: cp/decl.c:11157 cp/decl.c:11164
+#: cp/decl.c:10884 cp/decl.c:10891
msgid "cannot declare reference to `%#T'"
msgstr ""
-#: cp/decl.c:11158
+#: cp/decl.c:10885
msgid "cannot declare pointer to `%#T'"
msgstr ""
-#: cp/decl.c:11163
+#: cp/decl.c:10890
msgid "cannot declare pointer to `%#T' member"
msgstr ""
-#: cp/decl.c:11301
+#: cp/decl.c:11028
msgid "extra qualification `%T::' on member `%s' ignored"
msgstr ""
-#: cp/decl.c:11311
+#: cp/decl.c:11038
msgid "cannot declare member function `%T::%s' within `%T'"
msgstr ""
-#: cp/decl.c:11326
+#: cp/decl.c:11053
msgid "cannot declare member `%T::%s' within `%T'"
msgstr ""
-#: cp/decl.c:11433
+#: cp/decl.c:11132
msgid "data member may not have variably modified type `%T'"
msgstr ""
+#: cp/decl.c:11134
+msgid "parameter may not have variably modified type `%T'"
+msgstr ""
+
#. [dcl.fct.spec] The explicit specifier shall only be used in
#. declarations of constructors within a class definition.
-#: cp/decl.c:11441
+#: cp/decl.c:11142
msgid "only declarations of constructors can be `explicit'"
msgstr ""
-#: cp/decl.c:11449
+#: cp/decl.c:11150
#, c-format
msgid "non-member `%s' cannot be declared `mutable'"
msgstr ""
-#: cp/decl.c:11454
+#: cp/decl.c:11155
#, c-format
msgid "non-object member `%s' cannot be declared `mutable'"
msgstr ""
-#: cp/decl.c:11460
+#: cp/decl.c:11161
#, c-format
msgid "function `%s' cannot be declared `mutable'"
msgstr ""
-#: cp/decl.c:11465
+#: cp/decl.c:11166
#, c-format
msgid "static `%s' cannot be declared `mutable'"
msgstr ""
-#: cp/decl.c:11470
+#: cp/decl.c:11171
#, c-format
msgid "const `%s' cannot be declared `mutable'"
msgstr ""
-#: cp/decl.c:11483
+#: cp/decl.c:11184
msgid "template-id `%D' used as a declarator"
msgstr ""
-#: cp/decl.c:11504
+#: cp/decl.c:11205
msgid "ISO C++ forbids nested type `%D' with same name as enclosing class"
msgstr ""
-#: cp/decl.c:11512
+#: cp/decl.c:11213
msgid "typedef name may not be a nested-name-specifier"
msgstr ""
-#: cp/decl.c:11559
+#: cp/decl.c:11260
msgid "invalid type qualifier for non-member function type"
msgstr ""
-#: cp/decl.c:11622
+#: cp/decl.c:11323
msgid "type qualifiers specified for friend class declaration"
msgstr ""
-#: cp/decl.c:11627
+#: cp/decl.c:11328
msgid "`inline' specified for friend class declaration"
msgstr ""
-#: cp/decl.c:11635
+#: cp/decl.c:11336
msgid "template parameters cannot be friends"
msgstr ""
-#: cp/decl.c:11637
+#: cp/decl.c:11338
msgid "friend declaration requires class-key, i.e. `friend class %T::%D'"
msgstr ""
-#: cp/decl.c:11641
+#: cp/decl.c:11342
msgid "friend declaration requires class-key, i.e. `friend %#T'"
msgstr ""
-#: cp/decl.c:11655
+#: cp/decl.c:11354
msgid "trying to make class `%T' a friend of global scope"
msgstr ""
-#: cp/decl.c:11666
+#: cp/decl.c:11365
msgid "invalid qualifiers on non-member function type"
msgstr ""
-#: cp/decl.c:11685
+#: cp/decl.c:11384
msgid "abstract declarator `%T' used as declaration"
msgstr ""
-#: cp/decl.c:11697
+#: cp/decl.c:11396
msgid "unnamed variable or field declared void"
msgstr ""
-#: cp/decl.c:11706
+#: cp/decl.c:11405
msgid "variable or field declared void"
msgstr ""
-#: cp/decl.c:11716
+#: cp/decl.c:11415
msgid "cannot use `::' in parameter declaration"
msgstr ""
#. Something like struct S { int N::j; };
-#: cp/decl.c:11755
+#: cp/decl.c:11454
msgid "invalid use of `::'"
msgstr ""
-#: cp/decl.c:11767
+#: cp/decl.c:11466
msgid "function `%D' cannot be declared friend"
msgstr ""
-#: cp/decl.c:11779
+#: cp/decl.c:11478
msgid "can't make `%D' into a method -- not in a class"
msgstr ""
-#: cp/decl.c:11788
+#: cp/decl.c:11487
msgid "function `%D' declared virtual inside a union"
msgstr ""
-#: cp/decl.c:11800
+#: cp/decl.c:11499
msgid "`%D' cannot be declared virtual, since it is always static"
msgstr ""
-#: cp/decl.c:11873
+#: cp/decl.c:11572
msgid "field `%D' has incomplete type"
msgstr ""
-#: cp/decl.c:11875
+#: cp/decl.c:11574
msgid "name `%T' has incomplete type"
msgstr ""
-#: cp/decl.c:11884
+#: cp/decl.c:11583
msgid " in instantiation of template `%T'"
msgstr ""
-#: cp/decl.c:11894
+#: cp/decl.c:11593
#, c-format
msgid "`%s' is neither function nor member function; cannot be declared friend"
msgstr ""
-#: cp/decl.c:11905
+#: cp/decl.c:11604
msgid "member functions are implicitly friends of their class"
msgstr ""
@@ -15337,106 +15629,106 @@ 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:11952
+#: cp/decl.c:11651
msgid "ISO C++ forbids initialization of member `%D'"
msgstr ""
-#: cp/decl.c:11954
+#: cp/decl.c:11653
msgid "making `%D' static"
msgstr ""
-#: cp/decl.c:11978
+#: cp/decl.c:11677
msgid ""
"ISO C++ forbids static data member `%D' with same name as enclosing class"
msgstr ""
-#: cp/decl.c:12019
+#: cp/decl.c:11718
#, c-format
msgid "storage class `auto' invalid for function `%s'"
msgstr ""
-#: cp/decl.c:12021
+#: cp/decl.c:11720
#, c-format
msgid "storage class `register' invalid for function `%s'"
msgstr ""
-#: cp/decl.c:12023
+#: cp/decl.c:11722
#, c-format
msgid "storage class `__thread' invalid for function `%s'"
msgstr ""
-#: cp/decl.c:12034
+#: cp/decl.c:11733
#, c-format
msgid ""
"storage class `static' invalid for function `%s' declared out of global scope"
msgstr ""
-#: cp/decl.c:12036
+#: cp/decl.c:11735
#, c-format
msgid ""
"storage class `inline' invalid for function `%s' declared out of global scope"
msgstr ""
-#: cp/decl.c:12043
+#: cp/decl.c:11742
#, c-format
msgid "virtual non-class function `%s'"
msgstr ""
-#: cp/decl.c:12072
+#: cp/decl.c:11771
msgid "cannot declare member function `%D' to have static linkage"
msgstr ""
#. FIXME need arm citation
-#: cp/decl.c:12078
+#: cp/decl.c:11777
msgid "cannot declare static function inside another function"
msgstr ""
-#: cp/decl.c:12106
+#: cp/decl.c:11805
msgid ""
"`static' may not be used when defining (as opposed to declaring) a static "
"data member"
msgstr ""
-#: cp/decl.c:12112
+#: cp/decl.c:11811
msgid "static member `%D' declared `register'"
msgstr ""
-#: cp/decl.c:12117
+#: cp/decl.c:11816
msgid "cannot explicitly declare member `%#D' to have extern linkage"
msgstr ""
-#: cp/decl.c:12289
+#: cp/decl.c:11958
msgid "default argument for `%#D' has type `%T'"
msgstr ""
-#: cp/decl.c:12292
+#: cp/decl.c:11961
msgid "default argument for parameter of type `%T' has type `%T'"
msgstr ""
-#: cp/decl.c:12309
+#: cp/decl.c:11978
msgid "default argument `%E' uses local variable `%D'"
msgstr ""
-#: cp/decl.c:12354
+#: cp/decl.c:12022
#, c-format
msgid "invalid string constant `%E'"
msgstr ""
-#: cp/decl.c:12356
+#: cp/decl.c:12024
msgid ""
"invalid integer constant in parameter list, did you forget to give parameter "
"name?"
msgstr ""
-#: cp/decl.c:12394
+#: cp/decl.c:12062
msgid "parameter `%D' invalidly declared method type"
msgstr ""
-#: cp/decl.c:12400
+#: cp/decl.c:12068
msgid "parameter `%D' invalidly declared offset type"
msgstr ""
-#: cp/decl.c:12424
+#: cp/decl.c:12092
msgid "parameter `%D' includes %s to array of unknown bound `%T'"
msgstr ""
@@ -15455,465 +15747,451 @@ 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:12586
+#: cp/decl.c:12251
msgid "invalid constructor; you probably meant `%T (const %T&)'"
msgstr ""
-#: cp/decl.c:12737
+#: cp/decl.c:12398
msgid "`%D' must be a nonstatic member function"
msgstr ""
-#: cp/decl.c:12743
+#: cp/decl.c:12404
msgid ""
"`%D' must be either a non-static member function or a non-member function"
msgstr ""
-#: cp/decl.c:12760
+#: cp/decl.c:12421
msgid "`%D' must have an argument of class or enumerated type"
msgstr ""
-#: cp/decl.c:12792
+#: cp/decl.c:12453
#, c-format
msgid "conversion to %s%s will never use a type conversion operator"
msgstr ""
#. 13.4.0.3
-#: cp/decl.c:12799
+#: cp/decl.c:12460
msgid "ISO C++ prohibits overloading operator ?:"
msgstr ""
-#: cp/decl.c:12849
+#: cp/decl.c:12510
msgid "postfix `%D' must take `int' as its argument"
msgstr ""
-#: cp/decl.c:12853
+#: cp/decl.c:12514
msgid "postfix `%D' must take `int' as its second argument"
msgstr ""
-#: cp/decl.c:12860
+#: cp/decl.c:12521
msgid "`%D' must take either zero or one argument"
msgstr ""
-#: cp/decl.c:12862
+#: cp/decl.c:12523
msgid "`%D' must take either one or two arguments"
msgstr ""
-#: cp/decl.c:12883
+#: cp/decl.c:12544
msgid "prefix `%D' should return `%T'"
msgstr ""
-#: cp/decl.c:12889
+#: cp/decl.c:12550
msgid "postfix `%D' should return `%T'"
msgstr ""
-#: cp/decl.c:12898
+#: cp/decl.c:12559
msgid "`%D' must take `void'"
msgstr ""
-#: cp/decl.c:12900 cp/decl.c:12908
+#: cp/decl.c:12561 cp/decl.c:12569
msgid "`%D' must take exactly one argument"
msgstr ""
-#: cp/decl.c:12910
+#: cp/decl.c:12571
msgid "`%D' must take exactly two arguments"
msgstr ""
-#: cp/decl.c:12918
+#: cp/decl.c:12579
msgid "user-defined `%D' always evaluates both arguments"
msgstr ""
-#: cp/decl.c:12932
+#: cp/decl.c:12593
msgid "`%D' should return by value"
msgstr ""
-#: cp/decl.c:12944 cp/decl.c:12947
+#: cp/decl.c:12605 cp/decl.c:12608
msgid "`%D' cannot have default arguments"
msgstr ""
-#: cp/decl.c:13023
+#: cp/decl.c:12684
msgid "`%s %T' declares a new type at namespace scope"
msgstr ""
-#: cp/decl.c:13026
+#: cp/decl.c:12687
msgid ""
" names from dependent base classes are not visible to unqualified name "
"lookup - to refer to the inherited type, say `%s %T::%T'"
msgstr ""
-#: cp/decl.c:13064
+#: cp/decl.c:12725
msgid "using typedef-name `%D' after `%s'"
msgstr ""
-#: cp/decl.c:13069
+#: cp/decl.c:12730
msgid "using template type parameter `%T' after `%s'"
msgstr ""
-#: cp/decl.c:13149
+#: cp/decl.c:12810
msgid "use of enum `%#D' without previous declaration"
msgstr ""
-#: cp/decl.c:13235
+#: cp/decl.c:12892
msgid "derived union `%T' invalid"
msgstr ""
-#: cp/decl.c:13281
+#: cp/decl.c:12945
msgid "base type `%T' fails to be a struct or class type"
msgstr ""
-#: cp/decl.c:13291
-msgid "base class `%T' has incomplete type"
-msgstr ""
-
-#: cp/decl.c:13299
+#: cp/decl.c:12953
msgid "recursive type `%T' undefined"
msgstr ""
-#: cp/decl.c:13301
+#: cp/decl.c:12955
msgid "duplicate base type `%T' invalid"
msgstr ""
-#: cp/decl.c:13412
+#: cp/decl.c:13067
msgid "multiple definition of `%#T'"
msgstr ""
-#: cp/decl.c:13413
+#: cp/decl.c:13068
msgid "previous definition here"
msgstr ""
-#: cp/decl.c:13581
+#: cp/decl.c:13231
msgid "enumerator value for `%D' not integer constant"
msgstr ""
-#: cp/decl.c:13601
+#: cp/decl.c:13251
msgid "overflow in enumeration values at `%D'"
msgstr ""
-#: cp/decl.c:13687
+#: cp/decl.c:13318
msgid "return type `%#T' is incomplete"
msgstr ""
-#: cp/decl.c:13801
+#: cp/decl.c:13430
msgid "semicolon missing after declaration of `%#T'"
msgstr ""
-#: cp/decl.c:13822
+#: cp/decl.c:13451
msgid "return type for `main' changed to `int'"
msgstr ""
-#: cp/decl.c:13853
+#: cp/decl.c:13482
msgid "`%D' implicitly declared before its definition"
msgstr ""
-#: cp/decl.c:13875 cp/typeck.c:6270
+#: cp/decl.c:13504 cp/typeck.c:6452
msgid "`operator=' should return a reference to `*this'"
msgstr ""
-#: cp/decl.c:14135
+#: cp/decl.c:13766
msgid "parameter `%D' declared void"
msgstr ""
-#: cp/decl.c:14582
+#: cp/decl.c:14228
msgid "invalid member function declaration"
msgstr ""
-#: cp/decl.c:14599
+#: cp/decl.c:14245
msgid "`%D' is already defined in class `%T'"
msgstr ""
-#: cp/decl.c:14816
+#: cp/decl.c:14458
msgid "static member function `%#D' declared with type qualifiers"
msgstr ""
-#: cp/decl2.c:154
+#: cp/decl2.c:151
#, c-format
msgid "duplicate type qualifiers in %s declaration"
msgstr ""
-#: cp/decl2.c:192
+#: cp/decl2.c:189
msgid "template `%#D' instantiated in file without #pragma interface"
msgstr ""
-#: cp/decl2.c:198
+#: cp/decl2.c:195
msgid "template `%#D' defined in file without #pragma interface"
msgstr ""
-#: cp/decl2.c:356
+#: cp/decl2.c:353
msgid "name missing for member function"
msgstr ""
#. Something has gone very wrong. Assume we are mistakenly reducing
#. an expression instead of a declaration.
-#: cp/decl2.c:418
+#: cp/decl2.c:415
msgid "parser may be lost: is there a '{' missing somewhere?"
msgstr ""
-#: cp/decl2.c:449 cp/decl2.c:463
+#: cp/decl2.c:446 cp/decl2.c:460
msgid "ambiguous conversion for array subscript"
msgstr ""
-#: cp/decl2.c:457
+#: cp/decl2.c:454
msgid "invalid types `%T[%T]' for array subscript"
msgstr ""
-#: cp/decl2.c:503
+#: cp/decl2.c:500
msgid "type `%#T' argument given to `delete', expected pointer"
msgstr ""
-#: cp/decl2.c:511
+#: cp/decl2.c:508
msgid "anachronistic use of array size in vector delete"
msgstr ""
-#: cp/decl2.c:521
+#: cp/decl2.c:518
msgid ""
"cannot delete a function. Only pointer-to-objects are valid arguments to "
"`delete'"
msgstr ""
-#: cp/decl2.c:528
+#: cp/decl2.c:525
msgid "deleting `%T' is undefined"
msgstr ""
-#: cp/decl2.c:536
+#: cp/decl2.c:533
msgid "deleting array `%#D'"
msgstr ""
#. 14.5.2.2 [temp.mem]
#.
#. A local class shall not have member templates.
-#: cp/decl2.c:569
+#: cp/decl2.c:566
msgid "invalid declaration of member template `%#D' in local class"
msgstr ""
-#: cp/decl2.c:578
+#: cp/decl2.c:575
msgid "invalid use of `virtual' in template declaration of `%#D'"
msgstr ""
-#: cp/decl2.c:588 cp/pt.c:2604
+#: cp/decl2.c:585 cp/pt.c:2773
msgid "template declaration of `%#D'"
msgstr ""
-#: cp/decl2.c:636
+#: cp/decl2.c:633
msgid "Java method '%D' has non-Java return type `%T'"
msgstr ""
-#: cp/decl2.c:645
+#: cp/decl2.c:642
msgid "Java method '%D' has non-Java parameter type `%T'"
msgstr ""
-#: cp/decl2.c:720
+#: cp/decl2.c:731
msgid "prototype for `%#D' does not match any in class `%T'"
msgstr ""
-#: cp/decl2.c:799
+#: cp/decl2.c:810
msgid "local class `%#T' shall not have static data member `%#D'"
msgstr ""
-#: cp/decl2.c:807
+#: cp/decl2.c:818
msgid "initializer invalid for static member with constructor"
msgstr ""
-#: cp/decl2.c:810
+#: cp/decl2.c:821
msgid "(an out of class initialization is required)"
msgstr ""
-#: cp/decl2.c:869
-msgid "invalid data member initialization"
-msgstr ""
-
-#: cp/decl2.c:872
-msgid "(use `=' to initialize static data members)"
-msgstr ""
-
-#: cp/decl2.c:918
+#: cp/decl2.c:900
msgid "member `%D' conflicts with virtual function table field name"
msgstr ""
-#: cp/decl2.c:938
+#: cp/decl2.c:920
msgid "`%D' is already defined in `%T'"
msgstr ""
-#: cp/decl2.c:990
+#: cp/decl2.c:972
msgid "field initializer is not constant"
msgstr ""
-#: cp/decl2.c:1014
+#: cp/decl2.c:996
msgid "`asm' specifiers are not permitted on non-static data members"
msgstr ""
-#: cp/decl2.c:1065
+#: cp/decl2.c:1047
msgid "cannot declare `%D' to be a bit-field type"
msgstr ""
-#: cp/decl2.c:1075
+#: cp/decl2.c:1057
msgid "cannot declare bit-field `%D' with function type"
msgstr ""
-#: cp/decl2.c:1082
+#: cp/decl2.c:1064
msgid "`%D' is already defined in the class %T"
msgstr ""
-#: cp/decl2.c:1089
+#: cp/decl2.c:1071
msgid "static member `%D' cannot be a bit-field"
msgstr ""
-#: cp/decl2.c:1172
+#: cp/decl2.c:1130
msgid "initializer specified for non-member function `%D'"
msgstr ""
-#: cp/decl2.c:1176
+#: cp/decl2.c:1134
msgid "invalid initializer for virtual method `%D'"
msgstr ""
-#: cp/decl2.c:1261
+#: cp/decl2.c:1219
msgid "anonymous struct not inside named type"
msgstr ""
-#: cp/decl2.c:1326
+#: cp/decl2.c:1289
msgid "namespace-scope anonymous aggregates must be static"
msgstr ""
-#: cp/decl2.c:1336
+#: cp/decl2.c:1296
msgid "anonymous union with no members"
msgstr ""
-#: cp/decl2.c:1368
+#: cp/decl2.c:1330
msgid "`operator new' must return type `%T'"
msgstr ""
-#: cp/decl2.c:1376
+#: cp/decl2.c:1338
msgid "`operator new' takes type `size_t' (`%T') as first parameter"
msgstr ""
-#: cp/decl2.c:1402
+#: cp/decl2.c:1364
msgid "`operator delete' must return type `%T'"
msgstr ""
-#: cp/decl2.c:1410
+#: cp/decl2.c:1372
msgid "`operator delete' takes type `%T' as first parameter"
msgstr ""
#. Overflow occurred. That means there are at least 4 billion
#. initialization functions.
-#: cp/decl2.c:2144
+#: cp/decl2.c:2095
msgid "too many initialization functions required"
msgstr ""
-#: cp/decl2.c:2805
+#: cp/decl2.c:2819
msgid "inline function `%D' used but never defined"
msgstr ""
-#: cp/decl2.c:2925 cp/parser.c:5042
-msgid "use of old-style cast"
-msgstr ""
-
-#: cp/decl2.c:3274 cp/typeck.c:1924
+#: cp/decl2.c:3221 cp/pt.c:8318 cp/typeck.c:1910
msgid "`%D' is not a member of `%T'"
msgstr ""
-#: cp/decl2.c:3666
+#: cp/decl2.c:3576
msgid "use of `%D' is ambiguous"
msgstr ""
-#: cp/decl2.c:3667
+#: cp/decl2.c:3577
msgid " first declared as `%#D' here"
msgstr ""
-#: cp/decl2.c:3670
+#: cp/decl2.c:3580
msgid " also declared as `%#D' here"
msgstr ""
-#: cp/decl2.c:3685
+#: cp/decl2.c:3595
msgid "`%D' denotes an ambiguous type"
msgstr ""
-#: cp/decl2.c:3686
+#: cp/decl2.c:3596
msgid " first type here"
msgstr ""
-#: cp/decl2.c:3687
+#: cp/decl2.c:3597
msgid " other type here"
msgstr ""
-#: cp/decl2.c:3776
+#: cp/decl2.c:3690
msgid "declaration of `%D' not in a namespace surrounding `%D'"
msgstr ""
-#: cp/decl2.c:3816
+#: cp/decl2.c:3730
msgid "`%D' should have been declared inside `%D'"
msgstr ""
-#: cp/decl2.c:3943
+#: cp/decl2.c:3858
msgid "`%D' is not a function,"
msgstr ""
-#: cp/decl2.c:3944
+#: cp/decl2.c:3859
msgid " conflict with `%D'"
msgstr ""
#. The parser did not find it, so it's not there.
-#: cp/decl2.c:4244
+#: cp/decl2.c:4159
msgid "unknown namespace `%D'"
msgstr ""
#. 7.3.3/5
#. A using-declaration shall not name a template-id.
-#: cp/decl2.c:4270
+#: cp/decl2.c:4186
msgid "a using-declaration cannot specify a template-id. Try `using %D'"
msgstr ""
-#: cp/decl2.c:4276
+#: cp/decl2.c:4192
msgid "namespace `%D' not allowed in using-declaration"
msgstr ""
-#: cp/decl2.c:4298 cp/decl2.c:4559
+#: cp/decl2.c:4214 cp/decl2.c:4483
msgid "`%T' is not a namespace"
msgstr ""
-#: cp/decl2.c:4322
+#: cp/decl2.c:4238
msgid "`%D' not declared"
msgstr ""
-#: cp/decl2.c:4373
+#. If the OLD_FN was really declared, the
+#. declarations don't match.
+#: cp/decl2.c:4250 cp/decl2.c:4292 cp/decl2.c:4317
msgid "`%D' is already declared in this scope"
msgstr ""
-#: cp/decl2.c:4400
+#: cp/decl2.c:4323
msgid "using declaration `%D' introduced ambiguous type `%T'"
msgstr ""
-#: cp/decl2.c:4488
+#: cp/decl2.c:4412
msgid "using-declaration for non-member at class scope"
msgstr ""
-#: cp/decl2.c:4494
+#: cp/decl2.c:4418
msgid "using-declaration for destructor"
msgstr ""
-#: cp/decl2.c:4500 cp/decl2.c:4524
+#: cp/decl2.c:4424 cp/decl2.c:4448
msgid "a using-declaration cannot specify a template-id. Try `using %T::%D'"
msgstr ""
-#: cp/decl2.c:4509
+#: cp/decl2.c:4433
msgid "a using-declaration cannot specify a template-id."
msgstr ""
-#: cp/decl2.c:4553
+#: cp/decl2.c:4477
msgid "namespace `%T' undeclared"
msgstr ""
-#: cp/decl2.c:4582
+#: cp/decl2.c:4506
msgid "default argument missing for parameter %P of `%+#D'"
msgstr ""
-#: cp/decl2.c:4676
+#: cp/decl2.c:4601
msgid "extra qualification `%T::' on member `%D' ignored"
msgstr ""
-#: cp/decl2.c:4680
+#: cp/decl2.c:4605
msgid "`%T' does not have a class or union named `%D'"
msgstr ""
-#: cp/decl2.c:4693
+#: cp/decl2.c:4618
msgid "`%T' is not a class or union type"
msgstr ""
@@ -15922,224 +16200,224 @@ msgstr ""
msgid "`%s' not supported by %s"
msgstr ""
-#: cp/error.c:573
+#: cp/error.c:551
#, c-format
msgid "<anonymous %s>"
msgstr ""
-#: cp/error.c:810
+#: cp/error.c:785
#, c-format
msgid "(static %s for %s)"
msgstr ""
-#: cp/error.c:1485
+#: cp/error.c:1456
#, c-format
msgid "\\x%x"
msgstr ""
-#: cp/error.c:2427
+#: cp/error.c:2363
#, c-format
msgid "In %s `%s':"
msgstr ""
-#: cp/error.c:2484
+#: cp/error.c:2418
#, c-format
msgid "%s: In instantiation of `%s':\n"
msgstr ""
-#: cp/error.c:2508
+#: cp/error.c:2439
#, c-format
msgid "%s:%d: instantiated from `%s'\n"
msgstr ""
-#: cp/error.c:2513
+#: cp/error.c:2444
#, c-format
msgid "%s:%d: instantiated from here\n"
msgstr ""
#. damn ICE suppression
-#: cp/error.c:2667
+#: cp/error.c:2589
#, c-format
msgid "unexpected letter `%c' in locate_error\n"
msgstr ""
#. Can't throw a reference.
-#: cp/except.c:242
+#: cp/except.c:235
msgid "type `%T' is disallowed in Java `throw' or `catch'"
msgstr ""
-#: cp/except.c:253
+#: cp/except.c:246
msgid "call to Java `catch' or `throw' with `jthrowable' undefined"
msgstr ""
#. Thrown object must be a Throwable.
-#: cp/except.c:260
+#: cp/except.c:253
msgid "type `%T' is not derived from `java::lang::Throwable'"
msgstr ""
-#: cp/except.c:324
+#: cp/except.c:316
msgid "mixing C++ and Java catches in a single translation unit"
msgstr ""
-#: cp/except.c:641
+#: cp/except.c:621
msgid "throwing NULL, which has integral, not pointer type"
msgstr ""
-#: cp/except.c:732
+#: cp/except.c:712
msgid " in thrown expression"
msgstr ""
-#: cp/except.c:858
+#: cp/except.c:835
msgid ""
"expression '%E' of abstract class type '%T' cannot be used in throw-"
"expression"
msgstr ""
-#: cp/except.c:946
+#: cp/except.c:919
msgid "exception of type `%T' will be caught"
msgstr ""
-#: cp/except.c:949
+#: cp/except.c:922
msgid " by earlier handler for `%T'"
msgstr ""
-#: cp/except.c:970
+#: cp/except.c:942
msgid "`...' handler must be the last handler for its try block"
msgstr ""
-#: cp/friend.c:157
+#: cp/friend.c:158
msgid "`%D' is already a friend of class `%T'"
msgstr ""
-#: cp/friend.c:159
+#: cp/friend.c:160
msgid "previous friend declaration of `%D'"
msgstr ""
-#: cp/friend.c:204
+#: cp/friend.c:205
msgid "invalid type `%T' declared `friend'"
msgstr ""
#. [temp.friend]
#. Friend declarations shall not declare partial
#. specializations.
-#: cp/friend.c:220
+#: cp/friend.c:221
msgid "partial specialization `%T' declared `friend'"
msgstr ""
-#: cp/friend.c:229
+#: cp/friend.c:230
msgid "class `%T' is implicitly friends with itself"
msgstr ""
#. template <class T> friend typename S<T>::X;
-#: cp/friend.c:247
+#: cp/friend.c:248
msgid "typename type `%#T' declared `friend'"
msgstr ""
#. template <class T> friend class T;
-#: cp/friend.c:253
+#: cp/friend.c:254
msgid "template parameter type `%T' declared `friend'"
msgstr ""
#. template <class T> friend class A; where A is not a template
-#: cp/friend.c:259
+#: cp/friend.c:260
msgid "`%#T' is not a template"
msgstr ""
-#: cp/friend.c:274
+#: cp/friend.c:275
msgid "`%T' is already a friend of `%T'"
msgstr ""
-#: cp/friend.c:372
+#: cp/friend.c:373
msgid "member `%D' declared as friend before type `%T' defined"
msgstr ""
-#: cp/friend.c:427
+#: cp/friend.c:428
msgid "friend declaration `%#D' declares a non-template function"
msgstr ""
-#: cp/friend.c:430
+#: cp/friend.c:431
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 ""
-#: cp/g++spec.c:211 java/jvspec.c:418
+#: cp/g++spec.c:234 java/jvspec.c:419
#, c-format
msgid "argument to `%s' missing\n"
msgstr ""
-#: cp/init.c:322
+#: cp/init.c:328
msgid "`%D' should be initialized in the member initialization list"
msgstr ""
-#: cp/init.c:371
+#: cp/init.c:378
msgid "default-initialization of `%#D', which has reference type"
msgstr ""
-#: cp/init.c:376
+#: cp/init.c:383
msgid "uninitialized reference member `%D'"
msgstr ""
-#: cp/init.c:384
+#: cp/init.c:391
msgid "initializer list treated as compound expression"
msgstr ""
-#: cp/init.c:525
+#: cp/init.c:532
msgid "`%D' will be initialized after"
msgstr ""
-#: cp/init.c:528
+#: cp/init.c:535
msgid "base `%T' will be initialized after"
msgstr ""
-#: cp/init.c:531
+#: cp/init.c:538
msgid " `%#D'"
msgstr ""
-#: cp/init.c:533
+#: cp/init.c:540
msgid " base `%T'"
msgstr ""
-#: cp/init.c:551
+#: cp/init.c:558
msgid "multiple initializations given for base `%T'"
msgstr ""
-#: cp/init.c:618
+#: cp/init.c:625
msgid "initializations for multiple members of `%T'"
msgstr ""
-#: cp/init.c:673
+#: cp/init.c:682
msgid ""
"base class `%#T' should be explicitly initialized in the copy constructor"
msgstr ""
-#: cp/init.c:918 cp/init.c:937
+#: cp/init.c:928 cp/init.c:947
msgid "class `%T' does not have any field named `%D'"
msgstr ""
-#: cp/init.c:924
+#: cp/init.c:934
msgid ""
"`%#D' is a static data member; it can only be initialized at its definition"
msgstr ""
-#: cp/init.c:931
+#: cp/init.c:941
msgid "`%#D' is not a non-static data member of `%T'"
msgstr ""
-#: cp/init.c:971
+#: cp/init.c:980
msgid "unnamed initializer for `%T', which has no base classes"
msgstr ""
-#: cp/init.c:978
+#: cp/init.c:987
msgid "unnamed initializer for `%T', which uses multiple inheritance"
msgstr ""
-#: cp/init.c:1015
+#: cp/init.c:1016
msgid "type `%D' is not a direct or virtual base of `%T'"
msgstr ""
-#: cp/init.c:1018
+#: cp/init.c:1019
msgid "type `%D' is not a direct base of `%T'"
msgstr ""
@@ -16155,182 +16433,182 @@ msgstr ""
#. COMPLEX zees(1.0, 0.0)[10];
#. }
#.
-#: cp/init.c:1112
+#: cp/init.c:1111
msgid "bad array initializer"
msgstr ""
-#: cp/init.c:1319
+#: cp/init.c:1321
msgid "`%T' is not an aggregate type"
msgstr ""
-#: cp/init.c:1342
+#: cp/init.c:1344
msgid "`%T' fails to be an aggregate typedef"
msgstr ""
-#: cp/init.c:1351
+#: cp/init.c:1353
msgid "type `%T' is of non-aggregate type"
msgstr ""
-#: cp/init.c:1454
+#: cp/init.c:1456
msgid "cannot call destructor `%T::~%T' without object"
msgstr ""
-#: cp/init.c:1498
+#: cp/init.c:1500
msgid "invalid use of non-static field `%D'"
msgstr ""
-#: cp/init.c:1507
+#: cp/init.c:1509
msgid "invalid use of member `%D'"
msgstr ""
-#: cp/init.c:1517
+#: cp/init.c:1519
msgid "no method `%T::%D'"
msgstr ""
-#: cp/init.c:1610
+#: cp/init.c:1612
msgid "incomplete type `%T' does not have member `%D'"
msgstr ""
-#: cp/init.c:1684
+#: cp/init.c:1686
msgid "`%D' is not a member of type `%T'"
msgstr ""
-#: cp/init.c:1703
+#: cp/init.c:1705
msgid "invalid pointer to bit-field `%D'"
msgstr ""
-#: cp/init.c:1742
+#: cp/init.c:1744
msgid "object missing in use of pointer-to-member construct"
msgstr ""
-#: cp/init.c:1782
+#: cp/init.c:1784
msgid "member `%D' is non-static but referenced as a static member"
msgstr ""
-#: cp/init.c:1784 cp/typeck.c:2858 cp/typeck.c:2963
+#: cp/init.c:1786 cp/typeck.c:2831 cp/typeck.c:2936
msgid "at this point in file"
msgstr ""
-#: cp/init.c:1821
+#: cp/init.c:1823
#, c-format
msgid "object missing in `%E'"
msgstr ""
-#: cp/init.c:1952
+#: cp/init.c:1954
msgid "new of array type fails to specify size"
msgstr ""
-#: cp/init.c:1963
+#: cp/init.c:1965
msgid "size in array new must have integral type"
msgstr ""
-#: cp/init.c:1969
+#: cp/init.c:1971
msgid "zero size array reserves no space"
msgstr ""
-#: cp/init.c:2034
+#: cp/init.c:2037
msgid "new cannot be applied to a reference type"
msgstr ""
-#: cp/init.c:2040
+#: cp/init.c:2043
msgid "new cannot be applied to a function type"
msgstr ""
-#: cp/init.c:2087
+#: cp/init.c:2090
msgid "call to Java constructor, while `jclass' undefined"
msgstr ""
-#: cp/init.c:2103
+#: cp/init.c:2106
msgid "can't find class$"
msgstr ""
-#: cp/init.c:2217
+#: cp/init.c:2214
msgid "invalid type `void' for new"
msgstr ""
-#: cp/init.c:2269
+#: cp/init.c:2235
#, c-format
msgid "call to Java constructor with `%s' undefined"
msgstr ""
-#: cp/init.c:2377
+#: cp/init.c:2366
msgid "ISO C++ forbids initialization in array new"
msgstr ""
-#: cp/init.c:2395 cp/typeck2.c:362 cp/typeck2.c:1225
+#: cp/init.c:2388 cp/typeck2.c:367 cp/typeck2.c:1208
msgid "initializer list being treated as compound expression"
msgstr ""
-#: cp/init.c:2401
+#: cp/init.c:2394
msgid "ISO C++ forbids aggregate initializer to new"
msgstr ""
-#: cp/init.c:2492
+#: cp/init.c:2485
msgid "uninitialized const in `new' of `%#T'"
msgstr ""
-#: cp/init.c:2858
+#: cp/init.c:2860
msgid "initializer ends prematurely"
msgstr ""
-#: cp/init.c:2929
+#: cp/init.c:2931
msgid "cannot initialize multi-dimensional array with initializer"
msgstr ""
-#: cp/init.c:3112
+#: cp/init.c:3114
msgid "unknown array size in delete"
msgstr ""
-#: cp/init.c:3377
+#: cp/init.c:3379
msgid "type to vector delete is neither pointer or array type"
msgstr ""
-#: cp/lex.c:133
+#: cp/lex.c:107
msgid "type name expected before `*'"
msgstr ""
-#: cp/lex.c:699
+#: cp/lex.c:562
#, c-format
msgid "junk at end of #pragma %s"
msgstr ""
-#: cp/lex.c:706
+#: cp/lex.c:569
#, c-format
msgid "invalid #pragma %s"
msgstr ""
-#: cp/lex.c:715
+#: cp/lex.c:578
msgid "#pragma vtable no longer supported"
msgstr ""
-#: cp/lex.c:792
+#: cp/lex.c:655
#, c-format
msgid "#pragma implementation for %s appears after file is included"
msgstr ""
-#: cp/lex.c:817
+#: cp/lex.c:680
msgid "junk at end of #pragma GCC java_exceptions"
msgstr ""
-#: cp/lex.c:861
+#: cp/lex.c:715
msgid "`%D' not defined"
msgstr ""
-#: cp/lex.c:864
+#: cp/lex.c:718
msgid "`%D' was not declared in this scope"
msgstr ""
-#: cp/lex.c:872
+#: cp/lex.c:726
msgid "`%D' undeclared (first use this function)"
msgstr ""
-#: cp/lex.c:876
+#: cp/lex.c:730
msgid ""
"(Each undeclared identifier is reported only once for each function it "
"appears in.)"
msgstr ""
-#: cp/lex.c:993
+#: cp/lex.c:837
msgid "`::%D' undeclared (first use here)"
msgstr ""
@@ -16342,166 +16620,212 @@ msgstr ""
msgid "the mangled name of `%D' will change in a future version of GCC"
msgstr ""
-#: cp/method.c:180
+#: cp/mangle.c:2654
+msgid ""
+"due to a defect in the G++ 3.2 ABI, G++ has assigned the same mangled name "
+"to two different types"
+msgstr ""
+
+#: cp/method.c:149
msgid "use of namespace `%D' as expression"
msgstr ""
-#: cp/method.c:185
+#: cp/method.c:154
msgid "use of class template `%T' as expression"
msgstr ""
-#: cp/method.c:198
+#: cp/method.c:167
#, c-format
msgid "use of %s from containing function"
msgstr ""
-#: cp/method.c:201
+#: cp/method.c:170
msgid " `%#D' declared here"
msgstr ""
-#: cp/method.c:219
+#: cp/method.c:188
msgid "request for member `%D' is ambiguous in multiple inheritance lattice"
msgstr ""
-#: cp/method.c:485
+#: cp/method.c:455
msgid "generic thunk code fails for method `%#D' which uses `...'"
msgstr ""
-#: cp/method.c:702
+#: cp/method.c:678
msgid "non-static const member `%#D', can't use default assignment operator"
msgstr ""
-#: cp/method.c:707
+#: cp/method.c:683
msgid ""
"non-static reference member `%#D', can't use default assignment operator"
msgstr ""
-#: cp/parser.c:609
+#: cp/parser.c:644
msgid "invalid token"
msgstr ""
-#: cp/parser.c:2614
+#: cp/parser.c:1895
+#, c-format
+msgid "%s cannot appear in a constant-expression"
+msgstr ""
+
+#: cp/parser.c:1905
+msgid "`%D' cannot appear in a constant-expression"
+msgstr ""
+
+#. Issue an error message.
+#: cp/parser.c:1932
+#, c-format
+msgid "`%s' does not name a type"
+msgstr ""
+
+#: cp/parser.c:1963
+msgid "(perhaps `typename %T::%s' was intended)"
+msgstr ""
+
+#: cp/parser.c:2364
msgid "ISO C++ forbids braced-groups within expressions"
msgstr ""
-#: cp/parser.c:2623
+#: cp/parser.c:2373
msgid "statement-expressions are allowed only inside functions"
msgstr ""
-#: cp/parser.c:2674
+#: cp/parser.c:2424
msgid "`this' may not be used in this context"
msgstr ""
-#: cp/parser.c:2786
+#: cp/parser.c:2555
msgid "local variable `%D' may not appear in this context"
msgstr ""
-#: cp/parser.c:2814
+#. If we're not doing Koenig lookup, issue an error.
+#: cp/parser.c:2574
+msgid "`%D' has not been declared"
+msgstr ""
+
+#: cp/parser.c:2589
msgid "incomplete type `%T' used in nested name specifier"
msgstr ""
-#: cp/parser.c:2817
+#: cp/parser.c:2592
msgid "`%D' is not a member of `%D'"
msgstr ""
-#: cp/parser.c:2820
+#: cp/parser.c:2595 cp/parser.c:9321
msgid "`::%D' has not been declared"
msgstr ""
-#: cp/parser.c:3525
+#: cp/parser.c:3338
msgid "`%T::%D' is not a class-name or namespace-name"
msgstr ""
-#: cp/parser.c:3529
+#: cp/parser.c:3342
msgid "`%D::%D' is not a class-name or namespace-name"
msgstr ""
-#: cp/parser.c:3534
+#: cp/parser.c:3347
msgid "`%D' is not a class-name or namespace-name"
msgstr ""
-#: cp/parser.c:3945
+#: cp/parser.c:3774
msgid "ISO C++ forbids compound-literals"
msgstr ""
-#: cp/parser.c:4869
+#: cp/parser.c:4724
msgid "expression in new-declarator must have integral or enumeration type"
msgstr ""
-#: cp/parser.c:6330
+#: cp/parser.c:4902
+msgid "use of old-style cast"
+msgstr ""
+
+#: cp/parser.c:6202
msgid "ISO C++ forbids computed gotos"
msgstr ""
-#: cp/parser.c:6454
+#: cp/parser.c:6322
msgid "extra `;'"
msgstr ""
-#: cp/parser.c:6689
+#: cp/parser.c:6609
msgid "mixing declarations and function-definitions is forbidden"
msgstr ""
-#: cp/parser.c:7316
+#: cp/parser.c:7193
+msgid "only constructors take base initializers"
+msgstr ""
+
+#: cp/parser.c:7244
msgid "anachronistic old-style base class initializer"
msgstr ""
#. Warn that we do not support `export'.
-#: cp/parser.c:7713
+#: cp/parser.c:7641
msgid "keyword `export' not implemented, and will be ignored"
msgstr ""
-#: cp/parser.c:8853
+#: cp/parser.c:8768
msgid "using `typename' outside of template"
msgstr ""
-#: cp/parser.c:8939
+#: cp/parser.c:8882
msgid "expected type-name"
msgstr ""
-#: cp/parser.c:8944
+#: cp/parser.c:8887
msgid "`%T' referred to as `%s'"
msgstr ""
-#: cp/parser.c:8948
+#: cp/parser.c:8891
msgid "`%T' referred to as enum"
msgstr ""
-#: cp/parser.c:9655
+#: cp/parser.c:9318
+msgid "`%D::%D' has not been declared"
+msgstr ""
+
+#: cp/parser.c:9609
msgid "an asm-specification is not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:9657
+#: cp/parser.c:9611
msgid "attributes are not allowed on a function-definition"
msgstr ""
-#: cp/parser.c:9785
+#: cp/parser.c:9727
msgid "attributes after parenthesized initializer ignored"
msgstr ""
-#: cp/parser.c:10831
+#: cp/parser.c:10835
msgid "file ends in default argument"
msgstr ""
-#: cp/parser.c:10886
+#: cp/parser.c:10890
msgid "default arguments are only permitted on functions"
msgstr ""
-#: cp/parser.c:12004
+#: cp/parser.c:11803
+msgid "declaration of `%D' in `%D' which does not enclose `%D'"
+msgstr ""
+
+#: cp/parser.c:12025
msgid "extra semicolon"
msgstr ""
-#: cp/parser.c:12022
+#: cp/parser.c:12043
msgid "a class-key must be used when declaring a friend"
msgstr ""
-#: cp/parser.c:12054
+#: cp/parser.c:12075
msgid "friend declaration does not name a class or function"
msgstr ""
-#: cp/parser.c:13385
+#: cp/parser.c:13335
msgid "reference to `%D' is ambiguous"
msgstr ""
-#: cp/parser.c:13638
+#: cp/parser.c:13519
msgid "too few template-parameter-lists"
msgstr ""
@@ -16509,116 +16833,125 @@ msgstr ""
#. something like:
#.
#. template <class T> template <class U> void S::f();
-#: cp/parser.c:13653
+#: cp/parser.c:13534
msgid "too many template-parameter-lists"
msgstr ""
#. If begin_function_definition didn't like the definition, skip
#. the entire function.
-#: cp/parser.c:13906
+#: cp/parser.c:13796
msgid "invalid function declaration"
msgstr ""
#. Issue an error message.
-#: cp/parser.c:13945
+#: cp/parser.c:13833
msgid "named return values are no longer supported"
msgstr ""
-#: cp/parser.c:14584
+#: cp/parser.c:14314
+#, c-format
+msgid "expected %s"
+msgstr ""
+
+#: cp/parser.c:14448
msgid "`%s' tag used in naming `%#T'"
msgstr ""
-#: cp/parser.c:14604
+#: cp/parser.c:14468
msgid "`template' (as a disambiguator) is only allowed within templates"
msgstr ""
-#: cp/pt.c:201
+#: cp/pt.c:292
msgid "data member `%D' cannot be a member template"
msgstr ""
-#: cp/pt.c:213
+#: cp/pt.c:304
msgid "invalid member template declaration `%D'"
msgstr ""
-#: cp/pt.c:608
+#: cp/pt.c:699
msgid "explicit specialization in non-namespace scope `%D'"
msgstr ""
-#: cp/pt.c:620
+#: cp/pt.c:711
msgid "enclosing class templates are not explicitly specialized"
msgstr ""
-#: cp/pt.c:696
+#: cp/pt.c:801 cp/pt.c:842
msgid "specializing `%#T' in different namespace"
msgstr ""
-#: cp/pt.c:697
+#: cp/pt.c:802 cp/pt.c:843
msgid " from definition of `%#D'"
msgstr ""
-#: cp/pt.c:705
+#: cp/pt.c:810
msgid "specialization of `%T' after instantiation"
msgstr ""
-#: cp/pt.c:708
+#: cp/pt.c:857
+msgid "specialization `%T' after instantiation `%T'"
+msgstr ""
+
+#: cp/pt.c:869
msgid "explicit specialization of non-template `%T'"
msgstr ""
-#: cp/pt.c:843
+#: cp/pt.c:1004
msgid "specialization of %D after instantiation"
msgstr ""
-#: cp/pt.c:957
+#: cp/pt.c:1126
msgid "%s %+#D"
msgstr ""
-#: cp/pt.c:1008
+#: cp/pt.c:1177
msgid "`%D' is not a function template"
msgstr ""
-#: cp/pt.c:1147
+#: cp/pt.c:1316
msgid "template-id `%D' for `%+D' does not match any template declaration"
msgstr ""
-#: cp/pt.c:1155
+#: cp/pt.c:1324
msgid "ambiguous template specialization `%D' for `%+D'"
msgstr ""
#. This case handles bogus declarations like template <>
#. template <class T> void f<int>();
-#: cp/pt.c:1382 cp/pt.c:1456
+#: cp/pt.c:1551 cp/pt.c:1625
msgid "template-id `%D' in declaration of primary template"
msgstr ""
-#: cp/pt.c:1395
+#: cp/pt.c:1564
msgid "template parameter list used in explicit instantiation"
msgstr ""
-#: cp/pt.c:1401
+#: cp/pt.c:1570
msgid "definition provided for explicit instantiation"
msgstr ""
-#: cp/pt.c:1407
+#: cp/pt.c:1576
msgid "too many template parameter lists in declaration of `%D'"
msgstr ""
-#: cp/pt.c:1423
+#: cp/pt.c:1592
msgid "too few template parameter lists in declaration of `%D'"
msgstr ""
-#: cp/pt.c:1440
+#: cp/pt.c:1609
msgid "explicit specialization not preceded by `template <>'"
msgstr ""
-#: cp/pt.c:1453
+#: cp/pt.c:1622
msgid "partial specialization `%D' of function template"
msgstr ""
-#: cp/pt.c:1485
+#: cp/pt.c:1654
msgid "default argument specified in explicit specialization"
msgstr ""
-#: cp/pt.c:1489
+#: cp/pt.c:1658
msgid "template specialization with C linkage"
msgstr ""
@@ -16630,99 +16963,99 @@ msgstr ""
#. program is ill-formed.
#.
#. Similar language is found in [temp.explicit].
-#: cp/pt.c:1576
+#: cp/pt.c:1745
msgid "specialization of implicitly-declared special member function"
msgstr ""
-#: cp/pt.c:1620
+#: cp/pt.c:1789
msgid "no member function `%D' declared in `%T'"
msgstr ""
#. There are two many template parameter lists.
-#: cp/pt.c:1768
+#: cp/pt.c:1937
msgid "too many template parameter lists in declaration of `%T'"
msgstr ""
-#: cp/pt.c:1864
+#: cp/pt.c:2033
msgid " shadows template parm `%#D'"
msgstr ""
-#: cp/pt.c:2268
+#: cp/pt.c:2437
msgid "template parameters not used in partial specialization:"
msgstr ""
-#: cp/pt.c:2272
+#: cp/pt.c:2441
msgid " `%D'"
msgstr ""
-#: cp/pt.c:2284
+#: cp/pt.c:2453
msgid "partial specialization `%T' does not specialize any template arguments"
msgstr ""
-#: cp/pt.c:2309
+#: cp/pt.c:2478
#, c-format
msgid "template argument `%E' involves template parameter(s)"
msgstr ""
-#: cp/pt.c:2353
+#: cp/pt.c:2522
msgid "type `%T' of template argument `%E' depends on template parameter(s)"
msgstr ""
-#: cp/pt.c:2441
+#: cp/pt.c:2610
msgid "no default argument for `%D'"
msgstr ""
-#: cp/pt.c:2594
+#: cp/pt.c:2763
msgid "template with C linkage"
msgstr ""
-#: cp/pt.c:2597
+#: cp/pt.c:2766
msgid "template class without a name"
msgstr ""
-#: cp/pt.c:2672
+#: cp/pt.c:2841
msgid "`%D' does not declare a template type"
msgstr ""
-#: cp/pt.c:2678
+#: cp/pt.c:2847
msgid "template definition of non-template `%#D'"
msgstr ""
-#: cp/pt.c:2719
+#: cp/pt.c:2888
msgid "expected %d levels of template parms for `%#D', got %d"
msgstr ""
-#: cp/pt.c:2731
+#: cp/pt.c:2900
msgid "got %d template parameters for `%#D'"
msgstr ""
-#: cp/pt.c:2734
+#: cp/pt.c:2903
msgid "got %d template parameters for `%#T'"
msgstr ""
-#: cp/pt.c:2736
+#: cp/pt.c:2905
#, c-format
msgid " but %d required"
msgstr ""
-#: cp/pt.c:2819
+#: cp/pt.c:2988
msgid "`%T' is not a template type"
msgstr ""
-#: cp/pt.c:2835
+#: cp/pt.c:3004
msgid "previous declaration `%D'"
msgstr ""
-#: cp/pt.c:2836
+#: cp/pt.c:3005
#, c-format
msgid "used %d template parameter%s instead of %d"
msgstr ""
-#: cp/pt.c:2852
+#: cp/pt.c:3021
msgid "template parameter `%#D'"
msgstr ""
-#: cp/pt.c:2853
+#: cp/pt.c:3022
msgid "redeclared here as `%#D'"
msgstr ""
@@ -16730,260 +17063,260 @@ msgstr ""
#.
#. A template-parameter may not be given default arguments
#. by two different declarations in the same scope.
-#: cp/pt.c:2863
+#: cp/pt.c:3032
msgid "redefinition of default argument for `%#D'"
msgstr ""
-#: cp/pt.c:2864
+#: cp/pt.c:3033
msgid " original definition appeared here"
msgstr ""
-#: cp/pt.c:2957
+#: cp/pt.c:3126
#, c-format
msgid "`%E' is not a valid template argument"
msgstr ""
-#: cp/pt.c:2961
+#: cp/pt.c:3130
msgid "it must be the address of a function with external linkage"
msgstr ""
-#: cp/pt.c:2963
+#: cp/pt.c:3132
msgid "it must be the address of an object with external linkage"
msgstr ""
-#: cp/pt.c:2967
+#: cp/pt.c:3136
msgid "it must be a pointer-to-member of the form `&X::Y'"
msgstr ""
-#: cp/pt.c:2978
+#: cp/pt.c:3147
#, c-format
msgid ""
"string literal %E is not a valid template argument because it is the address "
"of an object with static linkage"
msgstr ""
-#: cp/pt.c:2990
+#: cp/pt.c:3159
#, c-format
msgid "address of non-extern `%E' cannot be used as template argument"
msgstr ""
-#: cp/pt.c:3001
+#: cp/pt.c:3170
#, c-format
msgid "non-constant `%E' cannot be used as template argument"
msgstr ""
-#: cp/pt.c:3008
+#: cp/pt.c:3177
#, c-format
msgid "object `%E' cannot be used as template argument"
msgstr ""
-#: cp/pt.c:3388
+#: cp/pt.c:3557
#, c-format
msgid "to refer to a type member of a template parameter, use `typename %E'"
msgstr ""
-#: cp/pt.c:3401 cp/pt.c:3417 cp/pt.c:3456
+#: cp/pt.c:3570 cp/pt.c:3586 cp/pt.c:3625
msgid "type/value mismatch at argument %d in template parameter list for `%D'"
msgstr ""
-#: cp/pt.c:3404
+#: cp/pt.c:3573
msgid " expected a constant of type `%T', got `%T'"
msgstr ""
-#: cp/pt.c:3408
+#: cp/pt.c:3577
#, c-format
msgid " expected a type, got `%E'"
msgstr ""
-#: cp/pt.c:3420
+#: cp/pt.c:3589
msgid " expected a type, got `%T'"
msgstr ""
-#: cp/pt.c:3422
+#: cp/pt.c:3591
msgid " expected a class template, got `%T'"
msgstr ""
-#: cp/pt.c:3458
+#: cp/pt.c:3627
msgid " expected a template of type `%D', got `%D'"
msgstr ""
-#: cp/pt.c:3480
+#: cp/pt.c:3649
msgid "template-argument `%T' uses anonymous type"
msgstr ""
-#: cp/pt.c:3483
+#: cp/pt.c:3652
msgid "template-argument `%T' uses local type `%T'"
msgstr ""
-#: cp/pt.c:3493
+#: cp/pt.c:3662
msgid "template-argument `%T' is a variably modified type"
msgstr ""
-#: cp/pt.c:3528
+#: cp/pt.c:3697
msgid "could not convert template argument `%E' to `%T'"
msgstr ""
-#: cp/pt.c:3572
+#: cp/pt.c:3741
#, c-format
msgid "wrong number of template arguments (%d, should be %d)"
msgstr ""
-#: cp/pt.c:3576
+#: cp/pt.c:3745
msgid "provided for `%D'"
msgstr ""
-#: cp/pt.c:3623
+#: cp/pt.c:3792
#, c-format
msgid "template argument %d is invalid"
msgstr ""
-#: cp/pt.c:3858
+#: cp/pt.c:4027
msgid "non-template used as template"
msgstr ""
-#: cp/pt.c:3989
+#: cp/pt.c:4159
msgid "`%T' is not a template"
msgstr ""
-#: cp/pt.c:4002
+#: cp/pt.c:4172
msgid "non-template type `%T' used as a template"
msgstr ""
-#: cp/pt.c:4004
+#: cp/pt.c:4174
msgid "for template declaration `%D'"
msgstr ""
-#: cp/pt.c:4629
+#: cp/pt.c:4800
msgid ""
"template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN "
"to increase the maximum) instantiating `%D'"
msgstr ""
-#: cp/pt.c:5105
+#: cp/pt.c:5243
msgid "ambiguous class template instantiation for `%#T'"
msgstr ""
-#: cp/pt.c:5112
+#: cp/pt.c:5250
msgid "%s %+#T"
msgstr ""
-#: cp/pt.c:6131 cp/pt.c:6241
+#: cp/pt.c:6232 cp/pt.c:6342
msgid "instantiation of `%D' as type `%T'"
msgstr ""
-#: cp/pt.c:6285
+#: cp/pt.c:6386
msgid "invalid parameter type `%T'"
msgstr ""
-#: cp/pt.c:6287
+#: cp/pt.c:6388
msgid "in declaration `%D'"
msgstr ""
-#: cp/pt.c:6362
+#: cp/pt.c:6463
msgid "creating pointer to member function of non-class type `%T'"
msgstr ""
-#: cp/pt.c:6525
+#: cp/pt.c:6626
msgid "creating array with size zero"
msgstr ""
-#: cp/pt.c:6539
+#: cp/pt.c:6640
#, c-format
msgid "creating array with size zero (`%E')"
msgstr ""
-#: cp/pt.c:6778
+#: cp/pt.c:6879
msgid "forming reference to void"
msgstr ""
-#: cp/pt.c:6780
+#: cp/pt.c:6881
msgid "forming %s to reference type `%T'"
msgstr ""
-#: cp/pt.c:6818
+#: cp/pt.c:6919
msgid "creating pointer to member of non-class type `%T'"
msgstr ""
-#: cp/pt.c:6824
+#: cp/pt.c:6925
msgid "creating pointer to member reference type `%T'"
msgstr ""
-#: cp/pt.c:6902
+#: cp/pt.c:7003
msgid "creating array of `%T'"
msgstr ""
-#: cp/pt.c:6945
+#: cp/pt.c:7046
msgid "`%T' is not a class, struct, or union type"
msgstr ""
-#: cp/pt.c:7055
+#: cp/pt.c:7156
#, c-format
msgid "use of `%s' in template"
msgstr ""
-#: cp/pt.c:7864
+#: cp/pt.c:8463
msgid "type `%T' composed from a local class is not a valid template-argument"
msgstr ""
-#: cp/pt.c:7865
+#: cp/pt.c:8464
msgid " trying to instantiate `%D'"
msgstr ""
-#: cp/pt.c:8304
+#: cp/pt.c:8903
msgid "incomplete type unification"
msgstr ""
-#: cp/pt.c:9254
+#: cp/pt.c:9860
#, c-format
msgid "use of `%s' in template type unification"
msgstr ""
-#: cp/pt.c:9672 cp/pt.c:9744
+#: cp/pt.c:10282 cp/pt.c:10354
msgid "explicit instantiation of non-template `%#D'"
msgstr ""
-#: cp/pt.c:9688 cp/pt.c:9739
+#: cp/pt.c:10298 cp/pt.c:10349
msgid "no matching template for `%D' found"
msgstr ""
-#: cp/pt.c:9694
+#: cp/pt.c:10304
msgid "explicit instantiation of `%#D'"
msgstr ""
-#: cp/pt.c:9731
+#: cp/pt.c:10341
msgid "duplicate explicit instantiation of `%#D'"
msgstr ""
-#: cp/pt.c:9756
+#: cp/pt.c:10366
msgid "ISO C++ forbids the use of `extern' on explicit instantiations"
msgstr ""
-#: cp/pt.c:9760 cp/pt.c:9838
+#: cp/pt.c:10370 cp/pt.c:10448
msgid "storage class `%D' applied to template instantiation"
msgstr ""
-#: cp/pt.c:9805
+#: cp/pt.c:10415
msgid "explicit instantiation of non-template type `%T'"
msgstr ""
-#: cp/pt.c:9819
+#: cp/pt.c:10429
msgid "explicit instantiation of `%#T' before definition of template"
msgstr ""
-#: cp/pt.c:9827
+#: cp/pt.c:10437
#, c-format
msgid "ISO C++ forbids the use of `%s' on explicit instantiations"
msgstr ""
-#: cp/pt.c:9871
+#: cp/pt.c:10481
msgid "duplicate explicit instantiation of `%#T'"
msgstr ""
-#: cp/pt.c:10266
+#: cp/pt.c:10876
msgid "explicit instantiation of `%D' but no definition available"
msgstr ""
-#: cp/pt.c:10661
+#: cp/pt.c:11278
msgid "`%#T' is not a valid type for a template constant parameter"
msgstr ""
@@ -17001,262 +17334,198 @@ msgstr ""
msgid "can't create repository information file `%s'"
msgstr ""
-#: cp/rtti.c:243
+#: cp/rtti.c:254
msgid "cannot use typeid with -fno-rtti"
msgstr ""
-#: cp/rtti.c:249
+#: cp/rtti.c:260
msgid "must #include <typeinfo> before using typeid"
msgstr ""
-#: cp/rtti.c:320
+#: cp/rtti.c:332
msgid ""
"cannot create type information for type `%T' because its size is variable"
msgstr ""
-#: cp/rtti.c:581 cp/rtti.c:595
+#: cp/rtti.c:592 cp/rtti.c:606
msgid "dynamic_cast of `%#D' to `%#T' can never succeed"
msgstr ""
-#: cp/rtti.c:671
+#: cp/rtti.c:682
msgid "cannot dynamic_cast `%E' (of type `%#T') to type `%#T' (%s)"
msgstr ""
-#: cp/search.c:349
+#: cp/search.c:327
msgid "`%T' is an inaccessible base of `%T'"
msgstr ""
-#: cp/search.c:359
+#: cp/search.c:337
msgid "`%T' is an ambiguous base of `%T'"
msgstr ""
-#: cp/search.c:1926
+#: cp/search.c:1689
msgid "invalid covariant return type for `%#D'"
msgstr ""
-#: cp/search.c:1927 cp/search.c:1933
+#: cp/search.c:1690 cp/search.c:1696
msgid " overriding `%#D'"
msgstr ""
-#: cp/search.c:1931
+#: cp/search.c:1694
msgid "conflicting return type specified for `%#D'"
msgstr ""
-#: cp/search.c:1945
+#: cp/search.c:1708
#, c-format
msgid "looser throw specifier for `%#F'"
msgstr ""
-#: cp/search.c:1946
+#: cp/search.c:1709
#, c-format
msgid " overriding `%#F'"
msgstr ""
#. A static member function cannot match an inherited
#. virtual member function.
-#: cp/search.c:2039
+#: cp/search.c:1799
msgid "`%#D' cannot be declared"
msgstr ""
-#: cp/search.c:2040
+#: cp/search.c:1800
msgid " since `%#D' declared in base class"
msgstr ""
-#: cp/search.c:2181
+#: cp/search.c:1877
msgid "`%#D' needs a final overrider"
msgstr ""
-#: cp/semantics.c:923
+#: cp/semantics.c:1052
#, c-format
msgid "type of asm operand `%E' could not be determined"
msgstr ""
-#: cp/semantics.c:1055
-msgid "ISO C++ does not permit named return values"
-msgstr ""
-
-#: cp/semantics.c:1064
-msgid "return identifier `%D' already in place"
-msgstr ""
-
-#: cp/semantics.c:1072
-msgid "can't redefine default return value for constructors"
-msgstr ""
-
-#: cp/semantics.c:1104
-msgid "only constructors take base initializers"
-msgstr ""
-
-#: cp/semantics.c:1161
+#: cp/semantics.c:1199
msgid "invalid use of member `%D' in static member function"
msgstr ""
-#: cp/semantics.c:1164
+#: cp/semantics.c:1202
msgid "invalid use of non-static data member `%D'"
msgstr ""
-#: cp/semantics.c:1165
+#: cp/semantics.c:1203
msgid "from this location"
msgstr ""
-#: cp/semantics.c:1376
+#: cp/semantics.c:1415
msgid "arguments to destructor are not allowed"
msgstr ""
-#: cp/semantics.c:1432
+#: cp/semantics.c:1471
msgid "`this' is unavailable for static member functions"
msgstr ""
-#: cp/semantics.c:1438
+#: cp/semantics.c:1477
msgid "invalid use of `this' in non-member function"
msgstr ""
-#: cp/semantics.c:1440
+#: cp/semantics.c:1479
msgid "invalid use of `this' at top level"
msgstr ""
-#: cp/semantics.c:1470
+#: cp/semantics.c:1509
msgid "calling type `%T' like a method"
msgstr ""
-#: cp/semantics.c:1519
+#: cp/semantics.c:1558
msgid "invalid qualifying scope in pseudo-destructor name"
msgstr ""
-#: cp/semantics.c:1525
+#: cp/semantics.c:1564
msgid "`%E' is not of type `%T'"
msgstr ""
-#: cp/semantics.c:1750
+#: cp/semantics.c:1700
msgid "template type parameters must use the keyword `class' or `typename'"
msgstr ""
-#: cp/semantics.c:1789
+#: cp/semantics.c:1739
msgid "invalid default template argument"
msgstr ""
-#: cp/semantics.c:1831
+#: cp/semantics.c:1777
msgid "definition of `%#T' inside template parameter list"
msgstr ""
-#: cp/semantics.c:1847
+#: cp/semantics.c:1788
msgid "invalid definition of qualified type `%T'"
msgstr ""
-#: cp/semantics.c:2175
+#: cp/semantics.c:2039
msgid "invalid base-class specification"
msgstr ""
-#: cp/semantics.c:2184
+#: cp/semantics.c:2048
msgid "base class `%T' has cv qualifiers"
msgstr ""
-#: cp/semantics.c:2215
+#: cp/semantics.c:2080
msgid "multiple declarators in template declaration"
msgstr ""
-#: cp/spew.c:226
-#, c-format
-msgid "identifier name `%s' conflicts with GNU C++ internal naming strategy"
-msgstr ""
-
-#: cp/spew.c:1004 cp/spew.c:1338
-msgid "parse error at end of saved function text"
-msgstr ""
-
-#: cp/spew.c:1092 cp/spew.c:1180
-msgid "%Hend of file read inside definition"
-msgstr ""
-
-#: cp/spew.c:1123
-msgid "parse error in method specification"
-msgstr ""
-
-#: cp/spew.c:1163
-msgid "function body for constructor missing"
-msgstr ""
-
-#: cp/spew.c:1260
-msgid "%Hend of file read inside default argument"
-msgstr ""
-
-#: cp/spew.c:1417
-msgid "circular dependency in default args of `%#D'"
-msgstr ""
-
-#: cp/spew.c:1481
-msgid "invalid type `%T' for default argument to `%T'"
-msgstr ""
-
-#: cp/spew.c:1541
-#, c-format
-msgid "%s before `%s'"
-msgstr ""
-
-#: cp/spew.c:1543
-#, c-format
-msgid "%s before `%c'"
-msgstr ""
-
-#: cp/spew.c:1545
-#, c-format
-msgid "%s before `\\%o'"
-msgstr ""
-
-#: cp/spew.c:1548
+#: cp/semantics.c:2107
#, c-format
-msgid "%s before `%s' token"
+msgid "type of `%E' is unknown"
msgstr ""
-#: cp/tree.c:253 cp/tree.c:265
+#: cp/tree.c:257 cp/tree.c:269
#, c-format
msgid "non-lvalue in %s"
msgstr ""
-#: cp/tree.c:648
+#: cp/tree.c:643
msgid "`%V' qualifiers cannot be applied to `%T'"
msgstr ""
-#: cp/tree.c:2011
+#: cp/tree.c:2038
#, c-format
msgid "`%s' attribute can only be applied to Java class definitions"
msgstr ""
-#: cp/tree.c:2041
+#: cp/tree.c:2068
#, c-format
msgid "`%s' attribute can only be applied to class definitions"
msgstr ""
-#: cp/tree.c:2047
+#: cp/tree.c:2074
#, c-format
msgid "`%s' is obsolete; g++ vtables are now COM-compatible by default"
msgstr ""
-#: cp/tree.c:2072
+#: cp/tree.c:2099
msgid "requested init_priority is not an integer constant"
msgstr ""
-#: cp/tree.c:2093
+#: cp/tree.c:2120
#, c-format
msgid ""
"can only use `%s' attribute on file-scope definitions of objects of class "
"type"
msgstr ""
-#: cp/tree.c:2101
+#: cp/tree.c:2128
msgid "requested init_priority is out of range"
msgstr ""
-#: cp/tree.c:2111
+#: cp/tree.c:2138
msgid "requested init_priority is reserved for internal use"
msgstr ""
-#: cp/tree.c:2121
+#: cp/tree.c:2148
#, c-format
msgid "`%s' attribute is not supported on this platform"
msgstr ""
-#: cp/tree.c:2657
+#: cp/tree.c:2686
#, c-format
msgid "lang_* check: failed in %s, at %s:%d"
msgstr ""
@@ -17271,161 +17540,161 @@ msgstr ""
msgid "%s between distinct pointer types `%T' and `%T' lacks a cast"
msgstr ""
-#: cp/typeck.c:1441
+#: cp/typeck.c:1448
msgid "ISO C++ prohibits conversion from `%#T' to `(...)'"
msgstr ""
-#: cp/typeck.c:1519
+#: cp/typeck.c:1526
#, c-format
msgid "invalid application of `%s' to a member function"
msgstr ""
-#: cp/typeck.c:1525
+#: cp/typeck.c:1532
#, c-format
msgid "invalid application of `%s' to non-static member"
msgstr ""
-#: cp/typeck.c:1543
+#: cp/typeck.c:1550
msgid "sizeof applied to a bit-field"
msgstr ""
-#: cp/typeck.c:1546
+#: cp/typeck.c:1553
msgid "ISO C++ forbids applying `sizeof' to an expression of function type"
msgstr ""
-#: cp/typeck.c:1658
+#: cp/typeck.c:1665
msgid "invalid use of non-lvalue array"
msgstr ""
-#: cp/typeck.c:1764
+#: cp/typeck.c:1771
msgid "deprecated conversion from string constant to `%T'"
msgstr ""
-#: cp/typeck.c:1898 cp/typeck.c:2151
+#: cp/typeck.c:1884 cp/typeck.c:2147
msgid "request for member `%D' in `%E', which is of non-class type `%T'"
msgstr ""
-#: cp/typeck.c:1964 cp/typeck.c:1985
+#: cp/typeck.c:1960 cp/typeck.c:1981
msgid "invalid access to non-static data member `%D' of NULL object"
msgstr ""
-#: cp/typeck.c:1966 cp/typeck.c:1987
+#: cp/typeck.c:1962 cp/typeck.c:1983
msgid "(perhaps the `offsetof' macro was used incorrectly)"
msgstr ""
-#: cp/typeck.c:2101
+#: cp/typeck.c:2097
msgid "destructor name `%T' does not match type `%T' of expression"
msgstr ""
-#: cp/typeck.c:2197
+#: cp/typeck.c:2193
msgid "`%D::%D' is not a member of `%T'"
msgstr ""
-#: cp/typeck.c:2259
+#: cp/typeck.c:2255
msgid "`%D' 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:2356
+#: cp/typeck.c:2352
msgid "`%T' is not a pointer-to-object type"
msgstr ""
-#: cp/typeck.c:2383
+#: cp/typeck.c:2377
#, c-format
msgid "invalid use of `%s' on pointer to member"
msgstr ""
-#: cp/typeck.c:2389
+#: cp/typeck.c:2383
msgid "invalid type argument"
msgstr ""
-#: cp/typeck.c:2492
+#: cp/typeck.c:2486
msgid "ISO C++ forbids subscripting non-lvalue array"
msgstr ""
-#: cp/typeck.c:2503
+#: cp/typeck.c:2497
msgid "subscripting array declared `register'"
msgstr ""
-#: cp/typeck.c:2588
+#: cp/typeck.c:2582
#, c-format
msgid "object missing in use of `%E'"
msgstr ""
-#: cp/typeck.c:2693
+#: cp/typeck.c:2686
msgid "ISO C++ forbids calling `::main' from within program"
msgstr ""
-#: cp/typeck.c:2718
+#: cp/typeck.c:2711
#, c-format
msgid "must use .* or ->* to call pointer-to-member function in `%E (...)'"
msgstr ""
-#: cp/typeck.c:2731
+#: cp/typeck.c:2724
#, c-format
msgid "`%E' cannot be used as a function"
msgstr ""
-#: cp/typeck.c:2856
+#: cp/typeck.c:2829
msgid "too many arguments to %s `%+#D'"
msgstr ""
-#: cp/typeck.c:2897
+#: cp/typeck.c:2870
msgid "parameter type of called function is incomplete"
msgstr ""
-#: cp/typeck.c:2961
+#: cp/typeck.c:2934
msgid "too few arguments to %s `%+#D'"
msgstr ""
-#: cp/typeck.c:3089 cp/typeck.c:3099
+#: cp/typeck.c:3239 cp/typeck.c:3249
msgid "assuming cast to type `%T' from overloaded function"
msgstr ""
-#: cp/typeck.c:3159
+#: cp/typeck.c:3309
#, c-format
msgid "division by zero in `%E / 0'"
msgstr ""
-#: cp/typeck.c:3161
+#: cp/typeck.c:3311
#, c-format
msgid "division by zero in `%E / 0.'"
msgstr ""
-#: cp/typeck.c:3191
+#: cp/typeck.c:3341
#, c-format
msgid "division by zero in `%E %% 0'"
msgstr ""
-#: cp/typeck.c:3193
+#: cp/typeck.c:3343
#, c-format
msgid "division by zero in `%E %% 0.'"
msgstr ""
-#: cp/typeck.c:3273
+#: cp/typeck.c:3423
#, c-format
msgid "%s rotate count is negative"
msgstr ""
-#: cp/typeck.c:3276
+#: cp/typeck.c:3426
#, c-format
msgid "%s rotate count >= width of type"
msgstr ""
-#: cp/typeck.c:3307 cp/typeck.c:3312 cp/typeck.c:3403 cp/typeck.c:3408
+#: cp/typeck.c:3457 cp/typeck.c:3462 cp/typeck.c:3553 cp/typeck.c:3558
msgid "ISO C++ forbids comparison between pointer and integer"
msgstr ""
-#: cp/typeck.c:3586
+#: cp/typeck.c:3736
msgid "comparison between types `%#T' and `%#T'"
msgstr ""
-#: cp/typeck.c:3622
+#: cp/typeck.c:3772
msgid "comparison between signed and unsigned integer expressions"
msgstr ""
-#: cp/typeck.c:3687
+#: cp/typeck.c:3837
msgid "invalid operands of types `%T' and `%T' to binary `%O'"
msgstr ""
@@ -17433,296 +17702,296 @@ 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:3709
+#: cp/typeck.c:3859
msgid "NULL used in arithmetic"
msgstr ""
-#: cp/typeck.c:3776
+#: cp/typeck.c:3926
msgid "ISO C++ forbids using pointer of type `void *' in subtraction"
msgstr ""
-#: cp/typeck.c:3778
+#: cp/typeck.c:3928
msgid "ISO C++ forbids using pointer to a function in subtraction"
msgstr ""
-#: cp/typeck.c:3780
+#: cp/typeck.c:3930
msgid "ISO C++ forbids using pointer to a method in subtraction"
msgstr ""
-#: cp/typeck.c:3782
+#: cp/typeck.c:3932
msgid "ISO C++ forbids using pointer to a member in subtraction"
msgstr ""
-#: cp/typeck.c:3794
+#: cp/typeck.c:3944
msgid "invalid use of a pointer to an incomplete type in pointer arithmetic"
msgstr ""
-#: cp/typeck.c:3854
+#: cp/typeck.c:4004
#, c-format
msgid ""
"invalid use of '%E' to form a pointer-to-member-function. Use a qualified-"
"id."
msgstr ""
-#: cp/typeck.c:3860
+#: cp/typeck.c:4010
#, c-format
msgid ""
"parenthesis around '%E' cannot be used to form a pointer-to-member-function"
msgstr ""
-#: cp/typeck.c:3883
+#: cp/typeck.c:4033
msgid "taking address of temporary"
msgstr ""
-#: cp/typeck.c:4086
+#: cp/typeck.c:4274
#, c-format
msgid "ISO C++ forbids %sing an enum"
msgstr ""
-#: cp/typeck.c:4098
+#: cp/typeck.c:4286
msgid "cannot %s a pointer to incomplete type `%T'"
msgstr ""
-#: cp/typeck.c:4105
+#: cp/typeck.c:4293
msgid "ISO C++ forbids %sing a pointer of type `%T'"
msgstr ""
-#: cp/typeck.c:4130
+#: cp/typeck.c:4318
msgid "cast to non-reference type used as lvalue"
msgstr ""
-#: cp/typeck.c:4164
+#: cp/typeck.c:4352
msgid "invalid use of `--' on bool variable `%D'"
msgstr ""
#. ARM $3.4
-#: cp/typeck.c:4197
+#: cp/typeck.c:4385
msgid "ISO C++ forbids taking address of function `::main'"
msgstr ""
#. An expression like &memfn.
-#: cp/typeck.c:4264
+#: cp/typeck.c:4452
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:4266
+#: cp/typeck.c:4454
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:4290
+#: cp/typeck.c:4478
msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression"
msgstr ""
-#: cp/typeck.c:4325
+#: cp/typeck.c:4510
msgid "attempt to take address of bit-field structure member `%D'"
msgstr ""
-#: cp/typeck.c:4453
+#: cp/typeck.c:4633
msgid "taking address of destructor"
msgstr ""
-#: cp/typeck.c:4466
+#: cp/typeck.c:4646
msgid "taking address of bound pointer-to-member expression"
msgstr ""
-#: cp/typeck.c:4482
+#: cp/typeck.c:4662
msgid "cannot create pointer to reference member `%D'"
msgstr ""
-#: cp/typeck.c:4545
+#: cp/typeck.c:4725
msgid "cannot take the address of `this', which is an rvalue expression"
msgstr ""
-#: cp/typeck.c:4564
+#: cp/typeck.c:4744
msgid "address requested for `%D', which is declared `register'"
msgstr ""
-#: cp/typeck.c:4785
+#: cp/typeck.c:4965
msgid "static_cast from type `%T' to type `%T' casts away constness"
msgstr ""
-#: cp/typeck.c:4793
+#: cp/typeck.c:4973
msgid "invalid static_cast from type `%T' to type `%T'"
msgstr ""
-#: cp/typeck.c:4832
+#: cp/typeck.c:5012
msgid ""
"invalid reinterpret_cast of an rvalue expression of type `%T' to type `%T'"
msgstr ""
-#: cp/typeck.c:4852
+#: cp/typeck.c:5032
msgid "reinterpret_cast from `%T' to `%T' loses precision"
msgstr ""
-#: cp/typeck.c:4865
+#: cp/typeck.c:5045
msgid "reinterpret_cast from `%T' to `%T' casts away const (or volatile)"
msgstr ""
-#: cp/typeck.c:4874
+#: cp/typeck.c:5054
msgid ""
"ISO C++ forbids casting between pointer-to-function and pointer-to-object"
msgstr ""
-#: cp/typeck.c:4880
+#: cp/typeck.c:5060
msgid "invalid reinterpret_cast from type `%T' to type `%T'"
msgstr ""
-#: cp/typeck.c:4907
+#: cp/typeck.c:5087
msgid ""
"invalid use of const_cast with type `%T', which is not a pointer, reference, "
"nor a pointer-to-data-member type"
msgstr ""
-#: cp/typeck.c:4910
+#: cp/typeck.c:5090
msgid ""
"invalid use of const_cast with type `%T', which is a pointer or reference to "
"a function type"
msgstr ""
-#: cp/typeck.c:4933
+#: cp/typeck.c:5113
msgid "invalid const_cast of an rvalue of type `%T' to type `%T'"
msgstr ""
-#: cp/typeck.c:4949
+#: cp/typeck.c:5129
msgid "invalid const_cast from type `%T' to type `%T'"
msgstr ""
-#: cp/typeck.c:4991 cp/typeck.c:4996
+#: cp/typeck.c:5171 cp/typeck.c:5176
msgid "ISO C++ forbids casting to an array type `%T'"
msgstr ""
-#: cp/typeck.c:5004
+#: cp/typeck.c:5184
msgid "invalid cast to function type `%T'"
msgstr ""
-#: cp/typeck.c:5056
+#: cp/typeck.c:5236
msgid "cast from `%T' to `%T' discards qualifiers from pointer target type"
msgstr ""
-#: cp/typeck.c:5102
+#: cp/typeck.c:5282
msgid "cast from `%T' to `%T' increases required alignment of target type"
msgstr ""
-#: cp/typeck.c:5270
+#: cp/typeck.c:5450
msgid " in evaluation of `%Q(%#T, %#T)'"
msgstr ""
-#: cp/typeck.c:5312
+#: cp/typeck.c:5492
msgid "ISO C++ forbids cast to non-reference type used as lvalue"
msgstr ""
-#: cp/typeck.c:5384
+#: cp/typeck.c:5564
msgid "incompatible types in assignment of `%T' to `%T'"
msgstr ""
-#: cp/typeck.c:5391
+#: cp/typeck.c:5571
msgid "ISO C++ forbids assignment of arrays"
msgstr ""
-#: cp/typeck.c:5534
+#: cp/typeck.c:5714
msgid " in pointer to member function conversion"
msgstr ""
-#: cp/typeck.c:5542
+#: cp/typeck.c:5722
msgid " in pointer to member conversion"
msgstr ""
#. This is a reinterpret cast, we choose to do nothing.
-#: cp/typeck.c:5553 cp/typeck.c:5572
-msgid "pointer to member cast via virtual base `%T' of `%T'"
+#: cp/typeck.c:5733 cp/typeck.c:5751
+msgid "pointer to member cast via virtual base `%T'"
msgstr ""
-#: cp/typeck.c:5576
-msgid "pointer to member conversion via virtual base `%T' of `%T'"
+#: cp/typeck.c:5754
+msgid "pointer to member conversion via virtual base `%T'"
msgstr ""
-#: cp/typeck.c:5646
+#: cp/typeck.c:5829
msgid "invalid conversion to type `%T' from type `%T'"
msgstr ""
-#: cp/typeck.c:5811
+#: cp/typeck.c:5994
msgid "passing NULL used for non-pointer %s %P of `%D'"
msgstr ""
-#: cp/typeck.c:5814
+#: cp/typeck.c:5997
msgid "%s to non-pointer type `%T' from NULL"
msgstr ""
-#: cp/typeck.c:5822
+#: cp/typeck.c:6005
msgid "passing `%T' for %s %P of `%D'"
msgstr ""
-#: cp/typeck.c:5825
+#: cp/typeck.c:6008
msgid "%s to `%T' from `%T'"
msgstr ""
-#: cp/typeck.c:5835
+#: cp/typeck.c:6018
msgid "passing negative value `%E' for %s %P of `%D'"
msgstr ""
-#: cp/typeck.c:5838
+#: cp/typeck.c:6021
msgid "%s of negative value `%E' to `%T'"
msgstr ""
-#: cp/typeck.c:5933
+#: cp/typeck.c:6116
msgid "cannot convert `%T' to `%T' for argument `%P' to `%D'"
msgstr ""
-#: cp/typeck.c:5936
+#: cp/typeck.c:6119
msgid "cannot convert `%T' to `%T' in %s"
msgstr ""
-#: cp/typeck.c:6023 cp/typeck.c:6025
+#: cp/typeck.c:6206 cp/typeck.c:6208
msgid "in passing argument %P of `%+D'"
msgstr ""
-#: cp/typeck.c:6140
+#: cp/typeck.c:6322
msgid "returning reference to temporary"
msgstr ""
-#: cp/typeck.c:6147
+#: cp/typeck.c:6329
msgid "reference to non-lvalue returned"
msgstr ""
-#: cp/typeck.c:6159
+#: cp/typeck.c:6341
msgid "reference to local variable `%D' returned"
msgstr ""
-#: cp/typeck.c:6162
+#: cp/typeck.c:6344
msgid "address of local variable `%D' returned"
msgstr ""
-#: cp/typeck.c:6193
+#: cp/typeck.c:6375
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:6201
+#: cp/typeck.c:6383
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:6204
+#: cp/typeck.c:6386
msgid "returning a value from a constructor"
msgstr ""
-#: cp/typeck.c:6227
+#: cp/typeck.c:6409
msgid ""
"return-statement with no value, in function declared with a non-void return "
"type"
msgstr ""
-#: cp/typeck.c:6243
+#: cp/typeck.c:6425
msgid ""
"return-statement with a value, in function declared with a void return type"
msgstr ""
-#: cp/typeck.c:6264
+#: cp/typeck.c:6446
msgid ""
"`operator new' must not return NULL unless it is declared `throw()' (or -"
"fcheck-new is in effect)"
@@ -17732,186 +18001,177 @@ msgstr ""
msgid "type `%T' is not a base type for type `%T'"
msgstr ""
-#: cp/typeck2.c:153
+#: cp/typeck2.c:158
msgid "cannot declare variable `%D' to be of type `%T'"
msgstr ""
-#: cp/typeck2.c:156
+#: cp/typeck2.c:161
msgid "cannot declare parameter `%D' to be of type `%T'"
msgstr ""
-#: cp/typeck2.c:159
+#: cp/typeck2.c:164
msgid "cannot declare field `%D' to be of type `%T'"
msgstr ""
-#: cp/typeck2.c:163
+#: cp/typeck2.c:168
msgid "invalid return type for member function `%#D'"
msgstr ""
-#: cp/typeck2.c:165
+#: cp/typeck2.c:170
msgid "invalid return type for function `%#D'"
msgstr ""
-#: cp/typeck2.c:168
+#: cp/typeck2.c:173
msgid "cannot allocate an object of type `%T'"
msgstr ""
-#: cp/typeck2.c:175
+#: cp/typeck2.c:180
msgid " because the following virtual functions are abstract:"
msgstr ""
-#: cp/typeck2.c:177
+#: cp/typeck2.c:182
msgid "\t%#D"
msgstr ""
-#: cp/typeck2.c:180
+#: cp/typeck2.c:185
msgid " since type `%T' has abstract virtual functions"
msgstr ""
-#: cp/typeck2.c:333
+#: cp/typeck2.c:338
msgid "constructor syntax used, but no constructor declared for type `%T'"
msgstr ""
-#: cp/typeck2.c:344
+#: cp/typeck2.c:349
msgid "comma expression used to initialize return value"
msgstr ""
-#: cp/typeck2.c:353
+#: cp/typeck2.c:358
msgid "cannot initialize arrays using this syntax"
msgstr ""
-#: cp/typeck2.c:408
-msgid "ISO C++ forbids non-constant aggregate initializer expressions"
-msgstr ""
-
-#: cp/typeck2.c:492
+#: cp/typeck2.c:473
msgid "initializing array with parameter list"
msgstr ""
-#: cp/typeck2.c:548
+#: cp/typeck2.c:529
msgid "initializer for scalar variable requires one element"
msgstr ""
-#: cp/typeck2.c:555
+#: cp/typeck2.c:536
msgid "braces around scalar initializer for `%T'"
msgstr ""
-#: cp/typeck2.c:558
+#: cp/typeck2.c:539
msgid "ignoring extra initializers for `%T'"
msgstr ""
-#: cp/typeck2.c:570
+#: cp/typeck2.c:551
msgid "variable-sized object of type `%T' may not be initialized"
msgstr ""
-#: cp/typeck2.c:580
+#: cp/typeck2.c:561
msgid "subobject of type `%T' must be initialized by constructor, not by `%E'"
msgstr ""
-#: cp/typeck2.c:646
+#: cp/typeck2.c:627
msgid "aggregate has a partly bracketed initializer"
msgstr ""
-#: cp/typeck2.c:684 cp/typeck2.c:788
+#: cp/typeck2.c:665 cp/typeck2.c:770
msgid "non-trivial labeled initializers"
msgstr ""
-#: cp/typeck2.c:701
+#: cp/typeck2.c:682
msgid "non-empty initializer for array of empty elements"
msgstr ""
-#: cp/typeck2.c:754
+#: cp/typeck2.c:736
msgid "initializer list for object of class with virtual base classes"
msgstr ""
-#: cp/typeck2.c:760
+#: cp/typeck2.c:742
msgid "initializer list for object of class with base classes"
msgstr ""
-#: cp/typeck2.c:766
+#: cp/typeck2.c:748
msgid "initializer list for object using virtual functions"
msgstr ""
-#: cp/typeck2.c:829 cp/typeck2.c:845
+#: cp/typeck2.c:811 cp/typeck2.c:827
msgid "missing initializer for member `%D'"
msgstr ""
-#: cp/typeck2.c:834
+#: cp/typeck2.c:816
msgid "uninitialized const member `%D'"
msgstr ""
-#: cp/typeck2.c:836
+#: cp/typeck2.c:818
msgid "member `%D' with uninitialized const fields"
msgstr ""
-#: cp/typeck2.c:839
+#: cp/typeck2.c:821
msgid "member `%D' is uninitialized reference"
msgstr ""
-#: cp/typeck2.c:885
+#: cp/typeck2.c:868
msgid "index value instead of field name in union initializer"
msgstr ""
-#: cp/typeck2.c:897
+#: cp/typeck2.c:880
msgid "no field `%D' in union being initialized"
msgstr ""
-#: cp/typeck2.c:905
+#: cp/typeck2.c:888
msgid "union `%T' with no named members cannot be initialized"
msgstr ""
-#: cp/typeck2.c:941
+#: cp/typeck2.c:924
msgid "excess elements in aggregate initializer"
msgstr ""
-#: cp/typeck2.c:1055
+#: cp/typeck2.c:1038
msgid "circular pointer delegation detected"
msgstr ""
-#: cp/typeck2.c:1068
+#: cp/typeck2.c:1051
msgid "base operand of `->' has non-pointer type `%T'"
msgstr ""
-#: cp/typeck2.c:1082
+#: cp/typeck2.c:1065
msgid "result of `operator->()' yields non-pointer result"
msgstr ""
-#: cp/typeck2.c:1084
+#: cp/typeck2.c:1067
msgid "base operand of `->' is not a pointer"
msgstr ""
-#: cp/typeck2.c:1150
+#: cp/typeck2.c:1133
msgid "`%E' cannot be used as a member pointer, since it is of type `%T'"
msgstr ""
-#: cp/typeck2.c:1157
+#: cp/typeck2.c:1140
msgid ""
"cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'"
msgstr ""
-#: cp/typeck2.c:1166
+#: cp/typeck2.c:1149
msgid "member type `%T::' incompatible with object type `%T'"
msgstr ""
-#: cp/typeck2.c:1203
+#: cp/typeck2.c:1186
msgid "`%T' fails to be a typedef or built-in type"
msgstr ""
-#: cp/typeck2.c:1276
-#, c-format
-msgid "ISO C++ forbids defining types within %s"
-msgstr ""
-
-#: cp/typeck2.c:1401
+#: cp/typeck2.c:1371
msgid "call to function `%D' which throws incomplete type `%#T'"
msgstr ""
-#: cp/typeck2.c:1404
+#: cp/typeck2.c:1374
msgid "call to function which throws incomplete type `%#T'"
msgstr ""
#. XXX Not i18n clean.
-#: cp/cp-tree.h:3895
+#: cp/cp-tree.h:3879
#, c-format
msgid "%s is deprecated, please see the documentation for details"
msgstr ""
@@ -18102,70 +18362,70 @@ msgstr ""
msgid "[REPORT BUG!!]"
msgstr ""
-#: f/com.c:3132
+#: f/com.c:3130
#, no-c-format
msgid "ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling"
msgstr ""
-#: f/com.c:11551
+#: f/com.c:11549
msgid "no INTEGER type can hold a pointer on this configuration"
msgstr ""
-#: f/com.c:11772
+#: f/com.c:11770
#, c-format
msgid "configuration: REAL, INTEGER, and LOGICAL are %d bits wide,"
msgstr ""
-#: f/com.c:11774
+#: f/com.c:11772
#, c-format
msgid "and pointers are %d bits wide, but g77 doesn't yet work"
msgstr ""
-#: f/com.c:11776
+#: f/com.c:11774
msgid "properly unless they all are 32 bits wide"
msgstr ""
-#: f/com.c:11777
+#: f/com.c:11775
msgid "Please keep this in mind before you report bugs."
msgstr ""
#. I/O will probably crash.
-#: f/com.c:11785
+#: f/com.c:11783
#, c-format
msgid "configuration: char * holds %d bits, but ftnlen only %d"
msgstr ""
#. ASSIGN 10 TO I will crash.
-#: f/com.c:11794
+#: f/com.c:11792
#, c-format
msgid ""
"configuration: char * holds %d bits, but INTEGER only %d --\n"
" ASSIGN statement might fail"
msgstr ""
-#: f/com.c:13609
+#: f/com.c:13604
msgid "In statement function"
msgstr ""
-#: f/com.c:13619
+#: f/com.c:13614
msgid "Outside of any program unit:\n"
msgstr ""
-#: f/com.c:15248
+#: f/com.c:15226
#, no-c-format
msgid "%A from %B at %0%C"
msgstr ""
-#: f/com.c:15425
+#: f/com.c:15400
msgid "directory name must immediately follow -I"
msgstr ""
-#: f/com.c:15568
+#: f/com.c:15543
#, no-c-format
msgid "At %0, INCLUDE file %A exists, but is not readable"
msgstr ""
-#: f/com.c:15603
+#: f/com.c:15578
#, no-c-format
msgid "At %0, INCLUDE nesting too deep"
msgstr ""
@@ -18191,21 +18451,21 @@ msgstr ""
msgid "Unsupported operand for ** at %1 -- converting to default INTEGER"
msgstr ""
-#: f/g77spec.c:257
+#: f/g77spec.c:236
#, c-format
msgid "overflowed output arg list for `%s'"
msgstr ""
-#: f/g77spec.c:396
+#: f/g77spec.c:375
msgid "--driver no longer supported"
msgstr ""
-#: f/g77spec.c:409
+#: f/g77spec.c:388
#, c-format
msgid "argument to `%s' missing"
msgstr ""
-#: f/g77spec.c:413
+#: f/g77spec.c:392
msgid "no input files; unwilling to write output files"
msgstr ""
@@ -18330,11 +18590,15 @@ msgstr ""
msgid "SELECT CASE on CHARACTER type (at %0) not supported -- sorry"
msgstr ""
-#: f/ste.c:2953
+#: f/ste.c:2731
+msgid "SELECT (at %0) has duplicate cases -- check integer overflow of CASE(s)"
+msgstr ""
+
+#: f/ste.c:2961
msgid "ASSIGN to variable that is too small"
msgstr ""
-#: f/ste.c:2981
+#: f/ste.c:2989
msgid "ASSIGNed GOTO target variable is too small"
msgstr ""
@@ -18343,21 +18607,21 @@ msgstr ""
msgid "Local adjustable symbol `%A' at %0"
msgstr ""
-#: f/target.c:2550
+#: f/target.c:2551
msgid "data initializer on host with different endianness"
msgstr ""
-#: f/top.c:237
+#: f/top.c:235
#, c-format
msgid "%s no longer supported -- try -fvxt"
msgstr ""
-#: f/top.c:239
+#: f/top.c:237
#, c-format
msgid "%s no longer supported -- try -fno-vxt -ff90"
msgstr ""
-#: f/top.c:307 f/top.c:309
+#: f/top.c:305 f/top.c:307
#, c-format
msgid "%s disabled, use normal debugging flags"
msgstr ""
@@ -19668,226 +19932,236 @@ msgstr ""
msgid "In anything"
msgstr ""
-#: java/check-init.c:919
+#: java/check-init.c:908
#, c-format
msgid "internal error in check-init: tree code not implemented: %s"
msgstr ""
-#: java/check-init.c:992
+#: java/check-init.c:980
#, c-format
msgid "final field '%s' may not have been initialized"
msgstr ""
-#: java/class.c:541 java/class.c:566
+#: java/class.c:516 java/class.c:540
msgid "internal error - too many interface type"
msgstr ""
-#: java/class.c:679
+#: java/class.c:640
msgid "bad method signature"
msgstr ""
-#: java/class.c:728
+#: java/class.c:684
msgid "misplaced ConstantValue attribute (not in any field)"
msgstr ""
-#: java/class.c:730
+#: java/class.c:686
#, c-format
msgid "duplicate ConstantValue attribute for field '%s'"
msgstr ""
-#: java/class.c:741
+#: java/class.c:697
#, c-format
msgid "ConstantValue attribute of field '%s' has wrong type"
msgstr ""
-#: java/class.c:1107
+#: java/class.c:960
#, c-format
msgid "field '%s' not found in class"
msgstr ""
-#: java/class.c:1369
+#: java/class.c:1218
msgid "abstract method in non-abstract class"
msgstr ""
-#: java/class.c:2071
+#: java/class.c:1933
#, c-format
msgid "non-static method '%s' overrides static method"
msgstr ""
-#: java/decl.c:1539
+#: java/decl.c:1072
+#, c-format
+msgid "declaration of `%s' shadows a parameter"
+msgstr ""
+
+#: java/decl.c:1075
+#, c-format
+msgid "declaration of `%s' shadows a symbol from the parameter list"
+msgstr ""
+
+#: java/decl.c:1502
#, c-format
msgid "In %s: overlapped variable and exception ranges at %d"
msgstr ""
-#: java/decl.c:1620
+#: java/decl.c:1579
msgid "bad type in parameter debug info"
msgstr ""
-#: java/decl.c:1630
+#: java/decl.c:1589
#, c-format
msgid "bad PC range for debug info for local `%s'"
msgstr ""
-#: java/expr.c:532
+#: java/expr.c:520
msgid "stack underflow - dup* operation"
msgstr ""
-#: java/expr.c:1538
+#: java/expr.c:1472
#, c-format
msgid ""
"reference `%s' is ambiguous: appears in interface `%s' and interface `%s'"
msgstr ""
-#: java/expr.c:1567
+#: java/expr.c:1500
#, c-format
msgid "field `%s' not found"
msgstr ""
-#: java/expr.c:1719
+#: java/expr.c:1639
msgid "ret instruction not implemented"
msgstr ""
-#: java/expr.c:1854
+#: java/expr.c:1781
#, c-format
msgid "method '%s' not found in class"
msgstr ""
-#: java/expr.c:2057
+#: java/expr.c:1977
#, c-format
msgid "failed to find class '%s'"
msgstr ""
-#: java/expr.c:2067
+#: java/expr.c:1987
#, c-format
msgid "class '%s' has no method named '%s' matching signature '%s'"
msgstr ""
-#: java/expr.c:2077
+#: java/expr.c:1997
msgid "invokestatic on non static method"
msgstr ""
-#: java/expr.c:2082
+#: java/expr.c:2002
msgid "invokestatic on abstract method"
msgstr ""
-#: java/expr.c:2090
+#: java/expr.c:2010
msgid "invoke[non-static] on static method"
msgstr ""
-#: java/expr.c:2375
+#: java/expr.c:2309
#, c-format
msgid "missing field '%s' in '%s'"
msgstr ""
-#: java/expr.c:2381
+#: java/expr.c:2315
#, c-format
msgid "mismatching signature for field '%s' in '%s'"
msgstr ""
-#: java/expr.c:2404
+#: java/expr.c:2338
#, c-format
msgid "assignment to final field `%s' not in field's class"
msgstr ""
-#: java/expr.c:2409
+#: java/expr.c:2343
#, c-format
msgid "assignment to final static field `%s' not in class initializer"
msgstr ""
-#: java/expr.c:2416
+#: java/expr.c:2350
#, c-format
msgid "assignment to final field `%s' not in constructor"
msgstr ""
-#: java/expr.c:2663
+#: java/expr.c:2591
#, c-format
msgid "can't expand %s"
msgstr ""
-#: java/expr.c:2840
+#: java/expr.c:2763
msgid "invalid PC in line number table"
msgstr ""
#. We've just reached the end of a region of dead code.
-#: java/expr.c:2885
+#: java/expr.c:2808
#, c-format
msgid "unreachable bytecode from %d to before %d"
msgstr ""
#. We've just reached the end of a region of dead code.
-#: java/expr.c:2922
+#: java/expr.c:2845
#, c-format
msgid "unreachable bytecode from %d to the end of the method"
msgstr ""
#. duplicate code from LOAD macro
-#: java/expr.c:3240
+#: java/expr.c:3159
msgid "unrecogized wide sub-instruction"
msgstr ""
-#: java/jcf-io.c:539
+#: java/jcf-io.c:533
#, c-format
msgid ""
"source file for class `%s' is newer than its matching class file. Source "
"file `%s' used instead"
msgstr ""
-#: java/jcf-parse.c:340
+#: java/jcf-parse.c:333
msgid "bad string constant"
msgstr ""
-#: java/jcf-parse.c:358
+#: java/jcf-parse.c:351
#, c-format
msgid "bad value constant type %d, index %d"
msgstr ""
-#: java/jcf-parse.c:530
+#: java/jcf-parse.c:516
#, c-format
msgid "can't reopen %s"
msgstr ""
-#: java/jcf-parse.c:535
+#: java/jcf-parse.c:521
#, c-format
msgid "can't close %s"
msgstr ""
-#: java/jcf-parse.c:617
+#: java/jcf-parse.c:605
#, c-format
msgid "cannot find file for class %s"
msgstr ""
-#: java/jcf-parse.c:629
+#: java/jcf-parse.c:616
msgid "not a valid Java .class file"
msgstr ""
-#: java/jcf-parse.c:632
+#: java/jcf-parse.c:619
msgid "error while parsing constant pool"
msgstr ""
-#: java/jcf-parse.c:635
+#: java/jcf-parse.c:622
#, c-format
msgid "error in constant pool entry #%d\n"
msgstr ""
#. FIXME - where was first time
-#: java/jcf-parse.c:647
+#: java/jcf-parse.c:634
#, c-format
msgid "reading class %s for the second time from %s"
msgstr ""
-#: java/jcf-parse.c:665
+#: java/jcf-parse.c:652
msgid "error while parsing fields"
msgstr ""
-#: java/jcf-parse.c:668
+#: java/jcf-parse.c:655
msgid "error while parsing methods"
msgstr ""
-#: java/jcf-parse.c:671
+#: java/jcf-parse.c:658
msgid "error while parsing final attributes"
msgstr ""
-#: java/jcf-parse.c:685
+#: java/jcf-parse.c:672
#, c-format
msgid ""
"the `java.lang.Object' that was found in `%s' didn't have the special zero-"
@@ -19896,44 +20170,49 @@ msgid ""
"info page describing how to set the classpath"
msgstr ""
-#: java/jcf-parse.c:774
+#: java/jcf-parse.c:759
msgid "missing Code attribute"
msgstr ""
-#: java/jcf-parse.c:1011
+#: java/jcf-parse.c:991
msgid "source file seen twice on command line and will be compiled only once"
msgstr ""
-#: java/jcf-parse.c:1027
+#: java/jcf-parse.c:1007
msgid "no input file specified"
msgstr ""
-#: java/jcf-parse.c:1056
+#: java/jcf-parse.c:1036
#, c-format
msgid "can't close input file %s"
msgstr ""
-#: java/jcf-parse.c:1093
+#: java/jcf-parse.c:1074
#, c-format
msgid "bad zip/jar file %s"
msgstr ""
-#: java/jcf-write.c:2643
+#: java/jcf-parse.c:1243
+#, c-format
+msgid "error while reading %s from zip file"
+msgstr ""
+
+#: java/jcf-write.c:2554
#, c-format
msgid ""
"internal error in generate_bytecode_insn - tree code not implemented: %s"
msgstr ""
-#: java/jcf-write.c:2981
+#: java/jcf-write.c:2887
msgid "field initializer type mismatch"
msgstr ""
-#: java/jcf-write.c:3389
+#: java/jcf-write.c:3335
#, c-format
msgid "can't create directory %s"
msgstr ""
-#: java/jcf-write.c:3443
+#: java/jcf-write.c:3388
#, c-format
msgid "can't create %s"
msgstr ""
@@ -19952,44 +20231,44 @@ msgstr ""
msgid "file not found `%s'"
msgstr ""
-#: java/jvspec.c:421
+#: java/jvspec.c:422
msgid "can't specify `-D' without `--main'\n"
msgstr ""
-#: java/jvspec.c:424
+#: java/jvspec.c:425
#, c-format
msgid "`%s' is not a valid class name"
msgstr ""
-#: java/jvspec.c:430
+#: java/jvspec.c:431
msgid "--resource requires -o"
msgstr ""
-#: java/jvspec.c:437
+#: java/jvspec.c:438
msgid "warning: already-compiled .class files ignored with -C"
msgstr ""
-#: java/jvspec.c:444
+#: java/jvspec.c:445
msgid "cannot specify both -C and -o"
msgstr ""
-#: java/jvspec.c:456
+#: java/jvspec.c:457
msgid "cannot create temporary file"
msgstr ""
-#: java/jvspec.c:484
+#: java/jvspec.c:485
msgid "using both @FILE with multiple files not implemented"
msgstr ""
-#: java/jvspec.c:533
+#: java/jvspec.c:534
msgid "cannot specify `main' class when not linking"
msgstr ""
-#: java/lang.c:545
+#: java/lang.c:780
msgid "can't do dependency tracking with input from stdin"
msgstr ""
-#: java/lang.c:561
+#: java/lang.c:796
msgid "couldn't determine target name for dependency tracking"
msgstr ""
@@ -20003,483 +20282,550 @@ msgid ""
"`--encoding=UTF-8' option"
msgstr ""
-#: java/mangle.c:87
+#: java/mangle.c:86
#, c-format
msgid "can't mangle %s"
msgstr ""
-#: java/mangle_name.c:146 java/mangle_name.c:218
+#: java/mangle_name.c:140 java/mangle_name.c:210
msgid "internal error - invalid Utf8 name"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse-scan.y:883 ../../gcc-cvs/gcc/java/parse.y:964
-#: ../../gcc-cvs/gcc/java/parse.y:1305 ../../gcc-cvs/gcc/java/parse.y:1366
-#: ../../gcc-cvs/gcc/java/parse.y:1576 ../../gcc-cvs/gcc/java/parse.y:1798
-#: ../../gcc-cvs/gcc/java/parse.y:1807 ../../gcc-cvs/gcc/java/parse.y:1818
-#: ../../gcc-cvs/gcc/java/parse.y:1829 ../../gcc-cvs/gcc/java/parse.y:1841
-#: ../../gcc-cvs/gcc/java/parse.y:1856 ../../gcc-cvs/gcc/java/parse.y:1873
-#: ../../gcc-cvs/gcc/java/parse.y:1875 ../../gcc-cvs/gcc/java/parse.y:1947
-#: ../../gcc-cvs/gcc/java/parse.y:2118 ../../gcc-cvs/gcc/java/parse.y:2180
-#: ../../gcc-cvs/gcc/java/parse.y:2332 ../../gcc-cvs/gcc/java/parse.y:2344
-#: ../../gcc-cvs/gcc/java/parse.y:2351 ../../gcc-cvs/gcc/java/parse.y:2358
-#: ../../gcc-cvs/gcc/java/parse.y:2369 ../../gcc-cvs/gcc/java/parse.y:2371
-#: ../../gcc-cvs/gcc/java/parse.y:2409 ../../gcc-cvs/gcc/java/parse.y:2411
-#: ../../gcc-cvs/gcc/java/parse.y:2413 ../../gcc-cvs/gcc/java/parse.y:2434
-#: ../../gcc-cvs/gcc/java/parse.y:2436 ../../gcc-cvs/gcc/java/parse.y:2438
-#: ../../gcc-cvs/gcc/java/parse.y:2454 ../../gcc-cvs/gcc/java/parse.y:2456
-#: ../../gcc-cvs/gcc/java/parse.y:2477 ../../gcc-cvs/gcc/java/parse.y:2479
-#: ../../gcc-cvs/gcc/java/parse.y:2481 ../../gcc-cvs/gcc/java/parse.y:2509
-#: ../../gcc-cvs/gcc/java/parse.y:2511 ../../gcc-cvs/gcc/java/parse.y:2513
-#: ../../gcc-cvs/gcc/java/parse.y:2515 ../../gcc-cvs/gcc/java/parse.y:2533
-#: ../../gcc-cvs/gcc/java/parse.y:2535 ../../gcc-cvs/gcc/java/parse.y:2546
-#: ../../gcc-cvs/gcc/java/parse.y:2557 ../../gcc-cvs/gcc/java/parse.y:2568
-#: ../../gcc-cvs/gcc/java/parse.y:2579 ../../gcc-cvs/gcc/java/parse.y:2590
-#: ../../gcc-cvs/gcc/java/parse.y:2603 ../../gcc-cvs/gcc/java/parse.y:2607
-#: ../../gcc-cvs/gcc/java/parse.y:2609 ../../gcc-cvs/gcc/java/parse.y:2622
+#: /home/zack/src/gcc/vanilla/gcc/java/parse-scan.y:882
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:945
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1286
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1347
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1557
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1779
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1788
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1799
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1810
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1822
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1837
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1854
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1856
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1928
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2099
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2161
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2313
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2325
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2332
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2339
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2350
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2352
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2390
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2392
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2394
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2415
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2417
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2419
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2435
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2437
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2458
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2460
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2462
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2490
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2492
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2494
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2496
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2514
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2516
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2527
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2538
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2549
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2560
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2571
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2584
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2588
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2590
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2603
msgid "Missing term"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse-scan.y:885 ../../gcc-cvs/gcc/java/parse.y:736
-#: ../../gcc-cvs/gcc/java/parse.y:774 ../../gcc-cvs/gcc/java/parse.y:799
-#: ../../gcc-cvs/gcc/java/parse.y:985 ../../gcc-cvs/gcc/java/parse.y:1340
-#: ../../gcc-cvs/gcc/java/parse.y:1552 ../../gcc-cvs/gcc/java/parse.y:1554
-#: ../../gcc-cvs/gcc/java/parse.y:1783 ../../gcc-cvs/gcc/java/parse.y:1809
-#: ../../gcc-cvs/gcc/java/parse.y:1820 ../../gcc-cvs/gcc/java/parse.y:1831
-#: ../../gcc-cvs/gcc/java/parse.y:1843 ../../gcc-cvs/gcc/java/parse.y:1858
+#: /home/zack/src/gcc/vanilla/gcc/java/parse-scan.y:884
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:717
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:755
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:780
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:966
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1321
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1533
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1535
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1764
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1790
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1801
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1812
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1824
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1839
msgid "';' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:734 ../../gcc-cvs/gcc/java/parse.y:772
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:715
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:753
msgid "Missing name"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:797
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:778
msgid "'*' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:811
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:792
msgid "Class or interface declaration expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:848 ../../gcc-cvs/gcc/java/parse.y:850
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:829
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:831
msgid "Missing class name"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:853 ../../gcc-cvs/gcc/java/parse.y:857
-#: ../../gcc-cvs/gcc/java/parse.y:865 ../../gcc-cvs/gcc/java/parse.y:1025
-#: ../../gcc-cvs/gcc/java/parse.y:1286 ../../gcc-cvs/gcc/java/parse.y:1288
-#: ../../gcc-cvs/gcc/java/parse.y:1618 ../../gcc-cvs/gcc/java/parse.y:1869
-#: ../../gcc-cvs/gcc/java/parse.y:1901 ../../gcc-cvs/gcc/java/parse.y:1954
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:834
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:838
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:846
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1006
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1267
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1269
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1599
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1850
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1882
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1935
msgid "'{' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:867
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:848
msgid "Missing super class name"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:877 ../../gcc-cvs/gcc/java/parse.y:893
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:858
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:874
msgid "Missing interface name"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:979
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:960
msgid "Missing variable initializer"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:996
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:977
msgid "Invalid declaration"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:999 ../../gcc-cvs/gcc/java/parse.y:1084
-#: ../../gcc-cvs/gcc/java/parse.y:2155 ../../gcc-cvs/gcc/java/parse.y:2177
-#: ../../gcc-cvs/gcc/java/parse.y:2181 ../../gcc-cvs/gcc/java/parse.y:2216
-#: ../../gcc-cvs/gcc/java/parse.y:2293 ../../gcc-cvs/gcc/java/parse.y:2303
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:980
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1065
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2136
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2158
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2162
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2197
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2274
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2284
msgid "']' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1003
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:984
msgid "Unbalanced ']'"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1039
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1020
msgid "Invalid method declaration, method name required"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1044 ../../gcc-cvs/gcc/java/parse.y:1049
-#: ../../gcc-cvs/gcc/java/parse.y:1054 ../../gcc-cvs/gcc/java/parse.y:2038
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1025
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1030
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1035
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2019
msgid "Identifier expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1059
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1040
msgid "Invalid method declaration, return type required"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1082 ../../gcc-cvs/gcc/java/parse.y:1532
-#: ../../gcc-cvs/gcc/java/parse.y:1539 ../../gcc-cvs/gcc/java/parse.y:1548
-#: ../../gcc-cvs/gcc/java/parse.y:1550 ../../gcc-cvs/gcc/java/parse.y:1578
-#: ../../gcc-cvs/gcc/java/parse.y:1686 ../../gcc-cvs/gcc/java/parse.y:1983
-#: ../../gcc-cvs/gcc/java/parse.y:2036
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1063
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1513
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1520
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1529
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1531
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1559
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1667
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1964
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2017
msgid "')' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1098
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1079
msgid "Missing formal parameter term"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1113 ../../gcc-cvs/gcc/java/parse.y:1118
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1094
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1099
msgid "Missing identifier"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1138 ../../gcc-cvs/gcc/java/parse.y:1147
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1119
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1128
msgid "Missing class type term"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1303
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1284
msgid "Invalid interface type"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1496 ../../gcc-cvs/gcc/java/parse.y:1665
-#: ../../gcc-cvs/gcc/java/parse.y:1667
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1477
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1646
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1648
msgid "':' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1518 ../../gcc-cvs/gcc/java/parse.y:1523
-#: ../../gcc-cvs/gcc/java/parse.y:1528
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1499
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1504
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1509
msgid "Invalid expression statement"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1546 ../../gcc-cvs/gcc/java/parse.y:1574
-#: ../../gcc-cvs/gcc/java/parse.y:1614 ../../gcc-cvs/gcc/java/parse.y:1682
-#: ../../gcc-cvs/gcc/java/parse.y:1750 ../../gcc-cvs/gcc/java/parse.y:1871
-#: ../../gcc-cvs/gcc/java/parse.y:1940 ../../gcc-cvs/gcc/java/parse.y:2030
-#: ../../gcc-cvs/gcc/java/parse.y:2032 ../../gcc-cvs/gcc/java/parse.y:2040
-#: ../../gcc-cvs/gcc/java/parse.y:2276 ../../gcc-cvs/gcc/java/parse.y:2278
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1527
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1555
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1595
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1663
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1731
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1852
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1921
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2011
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2013
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2021
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2257
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2259
msgid "'(' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1616
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1597
msgid "Missing term or ')'"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1663
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1644
msgid "Missing or invalid constant expression"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1684
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1665
msgid "Missing term and ')' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1723
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1704
msgid "Invalid control expression"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1725 ../../gcc-cvs/gcc/java/parse.y:1727
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1706
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1708
msgid "Invalid update expression"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1752
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1733
msgid "Invalid init statement"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1943
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1924
msgid "Missing term or ')' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1985
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1966
msgid "'class' or 'this' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:1987 ../../gcc-cvs/gcc/java/parse.y:1989
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1968
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:1970
msgid "'class' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2034
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2015
msgid "')' or term expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2153
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2134
msgid "'[' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2231
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2212
msgid "Field expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2288 ../../gcc-cvs/gcc/java/parse.y:2298
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2269
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2279
msgid "Missing term and ']' expected"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2402
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2383
msgid "']' expected, invalid type expression"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2405
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2386
msgid "Invalid type expression"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2517
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2498
msgid "Invalid reference type"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2995
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2965
msgid "Constructor invocation must be first thing in a constructor"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:2997
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2967
msgid "Only constructors can invoke constructors"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:3006
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:2975
#, c-format
msgid ": `%s' JDK1.1(TM) feature"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:3066 ../../gcc-cvs/gcc/java/parse.y:3068
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:3034
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:3036
#, c-format
msgid ""
"%s.\n"
"%s"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:6871
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:6766
#, c-format
msgid "malformed .zip archive in CLASSPATH: %s"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:6942
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:6837
#, c-format
msgid ""
"Can't find default package `%s'. Check the CLASSPATH environment variable "
"and the access to the archives"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:12270
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:12171
#, c-format
msgid "missing static field `%s'"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:12275
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:12176
#, c-format
msgid "not a static field `%s'"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:12318
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:12219
#, c-format
msgid "No case for %s"
msgstr ""
-#: ../../gcc-cvs/gcc/java/parse.y:13244
+#: /home/zack/src/gcc/vanilla/gcc/java/parse.y:13150
#, c-format
msgid "unregistered operator %s"
msgstr ""
-#: java/typeck.c:555
+#: java/typeck.c:530
msgid "junk at end of signature string"
msgstr ""
-#: java/verify.c:481
+#: java/verify.c:471
msgid "bad pc in exception_table"
msgstr ""
-#: java/verify.c:487
+#: java/verify.c:477
msgid "exception handler inside code that is being protected"
msgstr ""
-#: java/verify.c:1397
+#: java/verify.c:1387
#, c-format
msgid "unknown opcode %d@pc=%d during verification"
msgstr ""
-#: java/verify.c:1467 java/verify.c:1480 java/verify.c:1484
+#: java/verify.c:1457 java/verify.c:1470 java/verify.c:1474
#, c-format
msgid "verification error at PC=%d"
msgstr ""
-#: java/lang-options.h:32
+#: java/lang-options.h:33
msgid "Disable automatic array bounds checking"
msgstr ""
-#: java/lang-options.h:34
+#: java/lang-options.h:35
msgid "Disable assignability checks for stores into object arrays"
msgstr ""
-#: java/lang-options.h:36
+#: java/lang-options.h:37
msgid "Assume native functions are implemented using JNI"
msgstr ""
-#: java/lang-options.h:38
+#: java/lang-options.h:39
msgid "Replace system path"
msgstr ""
-#: java/lang-options.h:40
+#: java/lang-options.h:41
msgid "Set class path"
msgstr ""
-#: java/lang-options.h:42
+#: java/lang-options.h:43
msgid "Set class path (deprecated: use --classpath instead)"
msgstr ""
-#: java/lang-options.h:44
+#: java/lang-options.h:45
msgid "Choose class whose main method should be used"
msgstr ""
-#: java/lang-options.h:46
+#: java/lang-options.h:47
msgid "Choose input encoding (default comes from locale)"
msgstr ""
-#: java/lang-options.h:48
+#: java/lang-options.h:49
msgid "Add directory to class path"
msgstr ""
-#: java/lang-options.h:50
+#: java/lang-options.h:51
msgid "Directory where class files should be written"
msgstr ""
-#: java/lang-options.h:52
+#: java/lang-options.h:53
msgid "Warn if modifiers are specified when not necessary"
msgstr ""
-#: java/lang-options.h:54
+#: java/lang-options.h:55
msgid "Warn if deprecated empty statements are found"
msgstr ""
-#: java/lang-options.h:56
+#: java/lang-options.h:57
msgid "Warn if .class files are out of date"
msgstr ""
-#: java/lang-options.h:58
+#: java/lang-options.h:59
+msgid "Warn if deprecated class, method, or field is used"
+msgstr ""
+
+#: java/lang-options.h:61
msgid "Always check for non gcj generated classes archives"
msgstr ""
-#: java/lang-options.h:60
+#: java/lang-options.h:63
msgid "Never optimize static class initialization code"
msgstr ""
-#: java/lang-options.h:62
+#: java/lang-options.h:65
msgid "Use offset tables for virtual method calls"
msgstr ""
-#: objc/objc-act.c:653
+#: objc/objc-act.c:655
#, c-format
msgid "object does not conform to the `%s' protocol"
msgstr ""
-#: objc/objc-act.c:739 objc/objc-act.c:812
+#: objc/objc-act.c:741 objc/objc-act.c:814
#, c-format
msgid "class `%s' does not implement the `%s' protocol"
msgstr ""
-#: objc/objc-act.c:916
+#: objc/objc-act.c:918
#, c-format
msgid "`%s' cannot be statically allocated"
msgstr ""
-#: objc/objc-act.c:965
+#: objc/objc-act.c:967
#, c-format
msgid "unexpected type for `id' (%s)"
msgstr ""
-#: objc/objc-act.c:970
+#: objc/objc-act.c:972
msgid "undefined type `id', please import <objc/objc.h>"
msgstr ""
-#: objc/objc-act.c:1021
+#: objc/objc-act.c:1023
#, c-format
msgid "protocol `%s' has circular dependency"
msgstr ""
-#: objc/objc-act.c:1043 objc/objc-act.c:5303
+#: objc/objc-act.c:1045 objc/objc-act.c:5329
#, c-format
msgid "cannot find protocol declaration for `%s'"
msgstr ""
-#: objc/objc-act.c:1291 objc/objc-act.c:5879 objc/objc-act.c:6197
-#: objc/objc-act.c:6246 objc/objc-act.c:6282 objc-parse.y:1802
+#: objc/objc-act.c:1293 objc/objc-act.c:5905 objc/objc-act.c:6223
+#: objc/objc-act.c:6272 objc/objc-act.c:6308 objc-parse.y:1802
#, c-format
msgid "cannot find interface declaration for `%s'"
msgstr ""
-#: objc/objc-act.c:1330
+#: objc/objc-act.c:1332
#, c-format
msgid "cannot find reference tag for class `%s'"
msgstr ""
-#: objc/objc-act.c:2052
+#: objc/objc-act.c:2054
#, c-format
msgid "creating selector for non existant method %s"
msgstr ""
-#: objc/objc-act.c:2366
+#: objc/objc-act.c:2369
#, c-format
msgid "cannot find class `%s'"
msgstr ""
-#: objc/objc-act.c:2368
+#: objc/objc-act.c:2371
#, c-format
msgid "class `%s' already exists"
msgstr ""
#. fatal did not work with 2 args...should fix
-#: objc/objc-act.c:2475
+#: objc/objc-act.c:2478
#, c-format
msgid "cannot find interface declaration for `%s', superclass of `%s'"
msgstr ""
-#: objc/objc-act.c:2482
+#: objc/objc-act.c:2485
#, c-format
msgid "circular inheritance in interface declaration for `%s'"
msgstr ""
-#: objc/objc-act.c:3568 objc/objc-act.c:3585
+#: objc/objc-act.c:3571 objc/objc-act.c:3588
msgid "inconsistent instance variable specification"
msgstr ""
-#: objc/objc-act.c:4582
+#: objc/objc-act.c:4608
msgid "can not use an object as parameter to a method\n"
msgstr ""
-#: objc/objc-act.c:4782
+#: objc/objc-act.c:4808
#, c-format
msgid "multiple declarations for method `%s'"
msgstr ""
-#: objc/objc-act.c:4948
+#: objc/objc-act.c:4974
#, c-format
msgid "invalid receiver type `%s'"
msgstr ""
-#: objc/objc-act.c:4979 objc/objc-act.c:5005 objc/objc-act.c:5053
+#: objc/objc-act.c:5005 objc/objc-act.c:5031 objc/objc-act.c:5079
#, c-format
msgid "`%s' does not respond to `%s'"
msgstr ""
-#: objc/objc-act.c:4985 objc/objc-act.c:7320
+#: objc/objc-act.c:5011 objc/objc-act.c:7346
#, c-format
msgid "no super class declared in interface for `%s'"
msgstr ""
-#: objc/objc-act.c:5083
+#: objc/objc-act.c:5109
msgid "cannot find class (factory) method"
msgstr ""
-#: objc/objc-act.c:5084 objc/objc-act.c:5128
+#: objc/objc-act.c:5110 objc/objc-act.c:5154
#, c-format
msgid "return type for `%s' defaults to id"
msgstr ""
-#: objc/objc-act.c:5101
+#: objc/objc-act.c:5127
#, c-format
msgid "method `%s' not implemented by protocol"
msgstr ""
-#: objc/objc-act.c:5110
+#: objc/objc-act.c:5136
msgid "return type defaults to id"
msgstr ""
-#: objc/objc-act.c:5127
+#: objc/objc-act.c:5153
msgid "cannot find method"
msgstr ""
-#: objc/objc-act.c:5401
+#: objc/objc-act.c:5427
#, c-format
msgid "undeclared selector `%s'"
msgstr ""
@@ -20493,99 +20839,99 @@ 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:5445
+#: objc/objc-act.c:5471
#, c-format
msgid "instance variable `%s' accessed in class method"
msgstr ""
-#: objc/objc-act.c:5680
+#: objc/objc-act.c:5706
#, c-format
msgid "duplicate definition of class method `%s'"
msgstr ""
-#: objc/objc-act.c:5686
+#: objc/objc-act.c:5712
#, c-format
msgid "duplicate declaration of class method `%s'"
msgstr ""
-#: objc/objc-act.c:5722
+#: objc/objc-act.c:5748
#, c-format
msgid "duplicate definition of instance method `%s'"
msgstr ""
-#: objc/objc-act.c:5728
+#: objc/objc-act.c:5754
#, c-format
msgid "duplicate declaration of instance method `%s'"
msgstr ""
-#: objc/objc-act.c:5768
+#: objc/objc-act.c:5794
#, c-format
msgid "duplicate interface declaration for category `%s(%s)'"
msgstr ""
-#: objc/objc-act.c:5854
+#: objc/objc-act.c:5880
#, c-format
msgid "instance variable `%s' is declared private"
msgstr ""
-#: objc/objc-act.c:5901
+#: objc/objc-act.c:5927
#, c-format
msgid "instance variable `%s' is declared %s"
msgstr ""
-#: objc/objc-act.c:5911
+#: objc/objc-act.c:5937
msgid "static access to object of type `id'"
msgstr ""
-#: objc/objc-act.c:5936 objc/objc-act.c:6029
+#: objc/objc-act.c:5962 objc/objc-act.c:6055
#, c-format
msgid "incomplete implementation of class `%s'"
msgstr ""
-#: objc/objc-act.c:5940 objc/objc-act.c:6034
+#: objc/objc-act.c:5966 objc/objc-act.c:6060
#, c-format
msgid "incomplete implementation of category `%s'"
msgstr ""
-#: objc/objc-act.c:5945 objc/objc-act.c:6039
+#: objc/objc-act.c:5971 objc/objc-act.c:6065
#, c-format
msgid "method definition for `%c%s' not found"
msgstr ""
-#: objc/objc-act.c:6083
+#: objc/objc-act.c:6109
#, c-format
msgid "%s `%s' does not fully implement the `%s' protocol"
msgstr ""
-#: objc/objc-act.c:6141 objc/objc-act.c:8251
+#: objc/objc-act.c:6167 objc/objc-act.c:8277
msgid "`@end' missing in implementation context"
msgstr ""
-#: objc/objc-act.c:6169
+#: objc/objc-act.c:6195
#, c-format
msgid "reimplementation of class `%s'"
msgstr ""
-#: objc/objc-act.c:6211
+#: objc/objc-act.c:6237
#, c-format
msgid "conflicting super class name `%s'"
msgstr ""
-#: objc/objc-act.c:6226
+#: objc/objc-act.c:6252
#, c-format
msgid "duplicate interface declaration for class `%s'"
msgstr ""
-#: objc/objc-act.c:6508
+#: objc/objc-act.c:6534
#, c-format
msgid "duplicate declaration for protocol `%s'"
msgstr ""
-#: objc/objc-act.c:7365
+#: objc/objc-act.c:7391
msgid "[super ...] must appear in a method context"
msgstr ""
-#: objc/objc-act.c:8356 objc/objc-act.c:8372
+#: objc/objc-act.c:8382 objc/objc-act.c:8398
#, c-format
msgid "potential selector conflict for method `%s'"
msgstr ""
@@ -20636,177 +20982,180 @@ msgstr ""
msgid "(debug) trace lexical analysis"
msgstr ""
-#: treelang/lang-specs.h:52
-msgid "-pg or -p and -fomit-frame-pointer are incompatible"
+#: java/jvspec.c:80 gcc.c:762 ada/lang-specs.h:35
+msgid "-pg and -fomit-frame-pointer are incompatible"
+msgstr ""
+
+#: config/rs6000/darwin.h:96
+msgid " conflicting code gen style switches are used"
msgstr ""
#: config/sparc/sol2-bi.h:168 config/sparc/sol2-bi.h:178
+#: config/sparc/netbsd-elf.h:155 config/sparc/netbsd-elf.h:174
#: config/sparc/linux64.h:197 config/sparc/linux64.h:208
-#: config/sparc/netbsd-elf.h:156 config/sparc/netbsd-elf.h:175
msgid "may not use both -m32 and -m64"
msgstr ""
-#: config/sparc/freebsd.h:33 config/ia64/freebsd.h:23
-#: config/alpha/freebsd.h:42 config/i386/freebsd-aout.h:204
-msgid "`-p' not supported; use `-pg' and gprof(1)"
+#: config/mips/r3900.h:35
+msgid "-mhard-float not supported"
msgstr ""
-#: config/arm/arm.h:178
-msgid "-mapcs-26 and -mapcs-32 may not be used together"
+#: config/mips/r3900.h:37
+msgid "-msingle-float and -msoft-float can not both be specified"
msgstr ""
-#: config/arm/arm.h:180
-msgid "-msoft-float and -mhard_float may not be used together"
+#: java/lang-specs.h:34
+msgid "-fjni and -femit-class-files are incompatible"
msgstr ""
-#: config/arm/arm.h:182
-msgid "-mbig-endian and -mlittle-endian may not be used together"
+#: java/lang-specs.h:35
+msgid "-fjni and -femit-class-file are incompatible"
msgstr ""
-#: config/mcore/mcore.h:60
-msgid "choose either big or little endian, not both"
+#: java/lang-specs.h:36 java/lang-specs.h:37
+msgid "-femit-class-file should used along with -fsyntax-only"
msgstr ""
-#: config/mcore/mcore.h:63
-msgid "choose either m340 or m210 not both"
+#: config/vax/vax.h:50 config/vax/vax.h:51
+msgid "profiling not supported with -mg\n"
msgstr ""
-#: config/mcore/mcore.h:64
-msgid "the m210 does not have little endian support"
+#: config/vax/netbsd-elf.h:42
+msgid "The -shared option is not currently supported for VAX ELF."
msgstr ""
-#: config/mips/mips.h:954
-msgid "-pipe is not supported"
+#: objc/lang-specs.h:31 objc/lang-specs.h:46
+msgid "GNU Objective C no longer supports traditional compilation"
msgstr ""
-#: config/mips/mips.h:1147 config/arc/arc.h:63
-msgid "may not use both -EB and -EL"
+#: config/darwin.h:213
+msgid "-current_version only allowed with -dynamiclib"
msgstr ""
-#: ada/lang-specs.h:35 gcc.c:758 java/jvspec.c:79
-msgid "-pg and -fomit-frame-pointer are incompatible"
+#: config/darwin.h:216
+msgid "-install_name only allowed with -dynamiclib"
msgstr ""
-#: ada/lang-specs.h:37
-msgid "one of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada"
+#: config/darwin.h:221
+msgid "-bundle not allowed with -dynamiclib"
msgstr ""
-#: config/rs6000/darwin.h:62
-msgid " conflicting code gen style switches are used"
+#: config/darwin.h:222
+msgid "-bundle_loader not allowed with -dynamiclib"
msgstr ""
-#: java/lang-specs.h:33
-msgid "-fjni and -femit-class-files are incompatible"
+#: config/darwin.h:223
+msgid "-client_name not allowed with -dynamiclib"
msgstr ""
-#: java/lang-specs.h:34
-msgid "-fjni and -femit-class-file are incompatible"
+#: config/darwin.h:226
+msgid "-force_cpusubtype_ALL not allowed with -dynamiclib"
msgstr ""
-#: java/lang-specs.h:35 java/lang-specs.h:36
-msgid "-femit-class-file should used along with -fsyntax-only"
+#: config/darwin.h:227
+msgid "-force_flat_namespace not allowed with -dynamiclib"
msgstr ""
-#: gcc.c:731 f/lang-specs.h:38
-msgid "GNU C does not support -C without using -E"
+#: config/darwin.h:229
+msgid "-keep_private_externs not allowed with -dynamiclib"
msgstr ""
-#: gcc.c:732 f/lang-specs.h:39
-msgid "GNU C does not support -CC without using -E"
+#: config/darwin.h:230
+msgid "-private_bundle not allowed with -dynamiclib"
msgstr ""
-#: gcc.c:913
-msgid "-E required when input is from standard input"
+#: config/arm/arm.h:188
+msgid "-mapcs-26 and -mapcs-32 may not be used together"
msgstr ""
-#: gcc.c:917
-msgid "compilation of header file requested"
+#: config/arm/arm.h:190
+msgid "-msoft-float and -mhard_float may not be used together"
msgstr ""
-#: config/i386/sco5.h:581 config/i386/sco5.h:662
-msgid "-static not valid with -mcoff"
+#: config/arm/arm.h:192
+msgid "-mbig-endian and -mlittle-endian may not be used together"
msgstr ""
-#: config/i386/sco5.h:582 config/i386/sco5.h:663
-msgid "-shared not valid with -mcoff"
+#: config/arc/arc.h:63 config/mips/mips.h:1177
+msgid "may not use both -EB and -EL"
msgstr ""
-#: config/i386/sco5.h:583 config/i386/sco5.h:664
-msgid "-symbolic not valid with -mcoff"
+#: config/i386/cygwin.h:29
+msgid "mno-cygwin and mno-win32 are not compatible"
msgstr ""
-#: config/i386/sco5.h:632
-msgid "-fpic is not valid with -mcoff"
+#: config/i386/cygwin.h:70 config/i386/mingw32.h:57
+msgid "shared and mdll are not compatible"
msgstr ""
-#: config/i386/sco5.h:633
-msgid "-fPIC is not valid with -mcoff"
+#: config/i386/freebsd-aout.h:205
+msgid "`-p' not supported; use `-pg' and gprof(1)"
msgstr ""
-#: config/i386/sco5.h:665
-msgid "-fpic not valid with -mcoff"
+#: gcc.c:737
+msgid "GCC does not support -C or -CC without -E"
msgstr ""
-#: config/i386/sco5.h:666
-msgid "-fPIC not valid with -mcoff"
+#: gcc.c:889
+msgid "GNU C no longer supports -traditional without -E"
msgstr ""
-#: config/darwin.h:212
-msgid "-current_version only allowed with -dynamiclib"
+#: gcc.c:897
+msgid "-E required when input is from standard input"
msgstr ""
-#: config/darwin.h:215
-msgid "-install_name only allowed with -dynamiclib"
+#: f/lang-specs.h:38
+msgid "GCC does not support -C without using -E"
msgstr ""
-#: config/darwin.h:220
-msgid "-bundle not allowed with -dynamiclib"
+#: f/lang-specs.h:39
+msgid "GCC does not support -CC without using -E"
msgstr ""
-#: config/darwin.h:221
-msgid "-bundle_loader not allowed with -dynamiclib"
+#: config/i386/sco5.h:581 config/i386/sco5.h:662
+msgid "-static not valid with -mcoff"
msgstr ""
-#: config/darwin.h:222
-msgid "-client_name not allowed with -dynamiclib"
+#: config/i386/sco5.h:582 config/i386/sco5.h:663
+msgid "-shared not valid with -mcoff"
msgstr ""
-#: config/darwin.h:225
-msgid "-force_cpusubtype_ALL not allowed with -dynamiclib"
+#: config/i386/sco5.h:583 config/i386/sco5.h:664
+msgid "-symbolic not valid with -mcoff"
msgstr ""
-#: config/darwin.h:226
-msgid "-force_flat_namespace not allowed with -dynamiclib"
+#: config/i386/sco5.h:632
+msgid "-fpic is not valid with -mcoff"
msgstr ""
-#: config/darwin.h:228
-msgid "-keep_private_externs not allowed with -dynamiclib"
+#: config/i386/sco5.h:633
+msgid "-fPIC is not valid with -mcoff"
msgstr ""
-#: config/darwin.h:229
-msgid "-private_bundle not allowed with -dynamiclib"
+#: config/i386/sco5.h:665
+msgid "-fpic not valid with -mcoff"
msgstr ""
-#: config/vax/netbsd-elf.h:42
-msgid "The -shared option is not currently supported for VAX ELF."
+#: config/i386/sco5.h:666
+msgid "-fPIC not valid with -mcoff"
msgstr ""
-#: config/vax/vax.h:50 config/vax/vax.h:51
-msgid "profiling not supported with -mg\n"
+#: config/dsp16xx/dsp16xx.h:99 config/dsp16xx/dsp16xx.h:108
+msgid "a -ifile option requires a -map option"
msgstr ""
-#: config/mips/r3900.h:35
-msgid "-mhard-float not supported"
+#: treelang/lang-specs.h:52
+msgid "-pg or -p and -fomit-frame-pointer are incompatible"
msgstr ""
-#: config/mips/r3900.h:37
-msgid "-msingle-float and -msoft-float can not both be specified"
+#: config/mcore/mcore.h:71
+msgid "the m210 does not have little endian support"
msgstr ""
-#: config/i386/cygwin.h:117
-msgid "mno-cygwin and mno-win32 are not compatible"
+#: config/mips/mips.h:982
+msgid "-pipe is not supported"
msgstr ""
-#: config/i386/cygwin.h:172 config/i386/mingw32.h:86
-msgid "shared and mdll are not compatible"
+#: ada/lang-specs.h:37
+msgid "one of -c, -S, -gnatc, -gnatz, or -gnats is required for Ada"
msgstr ""
diff --git a/gcc/print-tree.c b/gcc/print-tree.c
index 8e5c9ae2ae9..12f07fd5689 100644
--- a/gcc/print-tree.c
+++ b/gcc/print-tree.c
@@ -332,7 +332,9 @@ print_node (file, prefix, node, indent)
if (TREE_CODE (node) == TYPE_DECL && TYPE_DECL_SUPPRESS_DEBUG (node))
fputs (" suppress-debug", file);
- if (TREE_CODE (node) == FUNCTION_DECL && DECL_INLINE (node))
+ if (TREE_CODE (node) == FUNCTION_DECL && DID_INLINE_FUNC (node))
+ fputs (" autoinline", file);
+ else if (TREE_CODE (node) == FUNCTION_DECL && DECL_INLINE (node))
fputs (" inline", file);
if (TREE_CODE (node) == FUNCTION_DECL && DECL_BUILT_IN (node))
fputs (" built-in", file);
diff --git a/gcc/profile.c b/gcc/profile.c
index 261bfd0d007..e5db849da01 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -202,6 +202,7 @@ instrument_edges (el)
insert_insn_on_edge (
gen_edge_profiler (total_num_edges_instrumented
+ num_instr_edges++), e);
+ rebuild_jump_labels (e->insns);
}
e = e->succ_next;
}
@@ -925,7 +926,7 @@ branch_prob ()
unsigned num_edges, ignored_edges;
struct edge_list *el;
const char *name = IDENTIFIER_POINTER
- (DECL_ASSEMBLER_NAME (current_function_decl));
+ (DECL_ASSEMBLER_NAME (current_function_decl));
profile_info.current_function_cfg_checksum = compute_checksum ();
for (i = 0; i < profile_info.n_sections; i++)
@@ -1085,6 +1086,8 @@ branch_prob ()
if (flag_test_coverage && bbg_file)
{
long offset;
+ const char *file = TREE_FILENAME (current_function_decl);
+ unsigned line = TREE_LINENO (current_function_decl);
/* Announce function */
if (gcov_write_unsigned (bbg_file, GCOV_TAG_FUNCTION)
@@ -1093,6 +1096,8 @@ branch_prob ()
strlen (name))
|| gcov_write_unsigned (bbg_file,
profile_info.current_function_cfg_checksum)
+ || gcov_write_string (bbg_file, file, strlen (file))
+ || gcov_write_unsigned (bbg_file, line)
|| gcov_write_length (bbg_file, offset))
goto bbg_error;
diff --git a/gcc/ra-build.c b/gcc/ra-build.c
index 4448065de0d..ffb5c9b46ae 100644
--- a/gcc/ra-build.c
+++ b/gcc/ra-build.c
@@ -1305,10 +1305,9 @@ init_one_web_common (web, reg)
AND_COMPL_HARD_REG_SET (web->usable_regs, never_use_colors);
prune_hardregs_for_mode (&web->usable_regs,
PSEUDO_REGNO_MODE (web->regno));
-#ifdef CLASS_CANNOT_CHANGE_MODE
+#ifdef CANNOT_CHANGE_MODE_CLASS
if (web->mode_changed)
- AND_COMPL_HARD_REG_SET (web->usable_regs, reg_class_contents[
- (int) CLASS_CANNOT_CHANGE_MODE]);
+ AND_COMPL_HARD_REG_SET (web->usable_regs, invalid_mode_change_regs);
#endif
web->num_freedom = hard_regs_count (web->usable_regs);
web->num_freedom -= web->add_hardregs;
@@ -1351,6 +1350,7 @@ reinit_one_web (web, reg)
web->artificial = 0;
web->live_over_abnormal = 0;
web->mode_changed = 0;
+ web->subreg_stripped = 0;
web->move_related = 0;
web->in_load = 0;
web->target_of_spilled_move = 0;
@@ -1729,7 +1729,7 @@ compare_and_free_webs (link)
&& (web1->num_uses != web2->num_uses
|| web1->num_defs != web2->num_defs))
/* Similarly, if the framepointer was unreferenced originally
- but we added spills, these fields may not match. */
+ but we added spills, these fields may not match. */
|| (web1->type != PRECOLORED
&& web1->crosses_call != web2->crosses_call)
|| (web1->type != PRECOLORED
@@ -1912,6 +1912,9 @@ parts_to_webs_1 (df, copy_webs, all_refs)
if ((DF_REF_FLAGS (ref) & DF_REF_MODE_CHANGE) != 0
&& web->regno >= FIRST_PSEUDO_REGISTER)
web->mode_changed = 1;
+ if ((DF_REF_FLAGS (ref) & DF_REF_STRIPPED) != 0
+ && web->regno >= FIRST_PSEUDO_REGISTER)
+ web->subreg_stripped = 1;
if (i >= def_id
&& TEST_BIT (live_over_abnormal, ref_id))
web->live_over_abnormal = 1;
@@ -1961,6 +1964,9 @@ parts_to_webs_1 (df, copy_webs, all_refs)
if ((DF_REF_FLAGS (ref) & DF_REF_MODE_CHANGE) != 0
&& web->regno >= FIRST_PSEUDO_REGISTER)
web->mode_changed = 1;
+ if ((DF_REF_FLAGS (ref) & DF_REF_STRIPPED) != 0
+ && web->regno >= FIRST_PSEUDO_REGISTER)
+ web->subreg_stripped = 1;
/* Setup def2web, or use2web, and increment num_defs or num_uses. */
if (i < def_id)
@@ -2364,10 +2370,9 @@ remember_web_was_spilled (web)
reg_class_contents[(int) GENERAL_REGS]);
AND_COMPL_HARD_REG_SET (web->usable_regs, never_use_colors);
prune_hardregs_for_mode (&web->usable_regs, PSEUDO_REGNO_MODE (web->regno));
-#ifdef CLASS_CANNOT_CHANGE_MODE
+#ifdef CANNOT_CHANGE_MODE_CLASS
if (web->mode_changed)
- AND_COMPL_HARD_REG_SET (web->usable_regs, reg_class_contents[
- (int) CLASS_CANNOT_CHANGE_MODE]);
+ AND_COMPL_HARD_REG_SET (web->usable_regs, invalid_mode_change_regs);
#endif
web->num_freedom = hard_regs_count (web->usable_regs);
if (!web->num_freedom)
diff --git a/gcc/ra-colorize.c b/gcc/ra-colorize.c
index 359dfd86126..7b9016a1ec1 100644
--- a/gcc/ra-colorize.c
+++ b/gcc/ra-colorize.c
@@ -1370,10 +1370,9 @@ colorize_one_web (web, hard)
else
COPY_HARD_REG_SET (colors,
usable_regs[reg_preferred_class (web->regno)]);
-#ifdef CLASS_CANNOT_CHANGE_MODE
+#ifdef CANNOT_CHANGE_MODE_CLASS
if (web->mode_changed)
- AND_COMPL_HARD_REG_SET (colors, reg_class_contents[
- (int) CLASS_CANNOT_CHANGE_MODE]);
+ AND_COMPL_HARD_REG_SET (colors, invalid_mode_change_regs);
#endif
COPY_HARD_REG_SET (call_clobbered, colors);
AND_HARD_REG_SET (call_clobbered, call_used_reg_set);
@@ -1404,10 +1403,9 @@ colorize_one_web (web, hard)
else
IOR_HARD_REG_SET (colors, usable_regs
[reg_alternate_class (web->regno)]);
-#ifdef CLASS_CANNOT_CHANGE_MODE
+#ifdef CANNOT_CHANGE_MODE_CLASS
if (web->mode_changed)
- AND_COMPL_HARD_REG_SET (colors, reg_class_contents[
- (int) CLASS_CANNOT_CHANGE_MODE]);
+ AND_COMPL_HARD_REG_SET (colors, invalid_mode_change_regs);
#endif
COPY_HARD_REG_SET (call_clobbered, colors);
AND_HARD_REG_SET (call_clobbered, call_used_reg_set);
@@ -2724,7 +2722,7 @@ ra_colorize_free_all ()
put_web (DLIST_WEB (d), INITIAL);
while ((d = pop_list (&WEBS(INITIAL))) != NULL)
{
- struct web *web =DLIST_WEB (d);
+ struct web *web = DLIST_WEB (d);
struct web *wnext;
web->orig_conflict_list = NULL;
web->conflict_list = NULL;
diff --git a/gcc/ra-debug.c b/gcc/ra-debug.c
index e415df4e69b..5f1a6ae3750 100644
--- a/gcc/ra-debug.c
+++ b/gcc/ra-debug.c
@@ -668,7 +668,8 @@ dump_igraph (df)
for (def1 = 0; def1 < num_webs; def1++)
{
int num1 = num;
- for (num2=0, def2 = 0; def2 < num_webs; def2++)
+ num2 = 0;
+ for (def2 = 0; def2 < num_webs; def2++)
if (def1 != def2 && TEST_BIT (igraph, igraph_index (def1, def2)))
{
if (num1 == num)
@@ -1107,7 +1108,7 @@ debug_hard_reg_set (set)
HARD_REG_SET set;
{
int i;
- for (i=0; i < FIRST_PSEUDO_REGISTER; ++i)
+ for (i = 0; i < FIRST_PSEUDO_REGISTER; ++i)
{
if (TEST_HARD_REG_BIT (set, i))
{
diff --git a/gcc/ra.c b/gcc/ra.c
index dfd4ef5b519..45f22ced3bb 100644
--- a/gcc/ra.c
+++ b/gcc/ra.c
@@ -148,6 +148,7 @@ HARD_REG_SET never_use_colors;
HARD_REG_SET usable_regs[N_REG_CLASSES];
unsigned int num_free_regs[N_REG_CLASSES];
HARD_REG_SET hardregs_for_mode[NUM_MACHINE_MODES];
+HARD_REG_SET invalid_mode_change_regs;
unsigned char byte2bitcount[256];
unsigned int debug_new_regalloc = -1;
@@ -555,6 +556,23 @@ init_ra ()
COPY_HARD_REG_SET (hardregs_for_mode[i], rs);
}
+ CLEAR_HARD_REG_SET (invalid_mode_change_regs);
+#ifdef CANNOT_CHANGE_MODE_CLASS
+ if (0)
+ for (i = 0; i < NUM_MACHINE_MODES; i++)
+ {
+ enum machine_mode from = (enum machine_mode) i;
+ enum machine_mode to;
+ for (to = VOIDmode; to < MAX_MACHINE_MODE; ++to)
+ {
+ int r;
+ for (r = 0; r < FIRST_PSEUDO_REGISTER; r++)
+ if (REG_CANNOT_CHANGE_MODE_P (from, to, r))
+ SET_HARD_REG_BIT (invalid_mode_change_regs, r);
+ }
+ }
+#endif
+
for (an_unusable_color = 0; an_unusable_color < FIRST_PSEUDO_REGISTER;
an_unusable_color++)
if (TEST_HARD_REG_BIT (never_use_colors, an_unusable_color))
@@ -755,7 +773,7 @@ reg_alloc ()
chains per insn, and per regno. In later passes only update
that info from the new and modified insns. */
df_analyse (df, (ra_pass == 1) ? 0 : (bitmap) -1,
- DF_HARD_REGS | DF_RD_CHAIN | DF_RU_CHAIN);
+ DF_HARD_REGS | DF_RD_CHAIN | DF_RU_CHAIN | DF_FOR_REGALLOC);
if ((debug_new_regalloc & DUMP_DF) != 0)
{
diff --git a/gcc/ra.h b/gcc/ra.h
index 522b77a7586..f324d362ad3 100644
--- a/gcc/ra.h
+++ b/gcc/ra.h
@@ -168,6 +168,11 @@ struct web
was illegal for hardregs in CLASS_CANNOT_CHANGE_MODE. */
unsigned int mode_changed:1;
+ /* Nonzero if some references of this web, where in subreg context,
+ but the actual subreg is already stripped (i.e. we don't know the
+ outer mode of the actual reference). */
+ unsigned int subreg_stripped:1;
+
/* Nonzero, when this web stems from the last pass of the allocator,
and all info is still valid (i.e. it wasn't spilled). */
unsigned int old_web:1;
@@ -497,6 +502,8 @@ extern unsigned int num_free_regs[N_REG_CLASSES];
represent the possible resources which could be taken away be a value
in mode M. */
extern HARD_REG_SET hardregs_for_mode[NUM_MACHINE_MODES];
+/* The set of hardregs, for which _any_ mode change is invalid. */
+extern HARD_REG_SET invalid_mode_change_regs;
/* For 0 <= I <= 255, the number of bits set in I. Used to calculate
the number of set bits in a HARD_REG_SET. */
extern unsigned char byte2bitcount[256];
diff --git a/gcc/real.c b/gcc/real.c
index 1e70bf7d4d9..c79dd288b62 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -158,7 +158,7 @@ get_canonical_qnan (r, sign)
memset (r, 0, sizeof (*r));
r->class = rvc_nan;
r->sign = sign;
- r->sig[SIGSZ-1] = SIG_MSB >> 1;
+ r->canonical = 1;
}
static inline void
@@ -169,7 +169,8 @@ get_canonical_snan (r, sign)
memset (r, 0, sizeof (*r));
r->class = rvc_nan;
r->sign = sign;
- r->sig[SIGSZ-1] = SIG_MSB >> 2;
+ r->signalling = 1;
+ r->canonical = 1;
}
static inline void
@@ -1213,7 +1214,7 @@ real_isnegzero (r)
/* Compare two floating-point objects for bitwise identity. */
-extern bool
+bool
real_identical (a, b)
const REAL_VALUE_TYPE *a, *b;
{
@@ -1228,22 +1229,29 @@ real_identical (a, b)
{
case rvc_zero:
case rvc_inf:
- break;
+ return true;
case rvc_normal:
if (a->exp != b->exp)
return false;
- /* FALLTHRU */
+ break;
+
case rvc_nan:
- for (i = 0; i < SIGSZ; ++i)
- if (a->sig[i] != b->sig[i])
- return false;
+ if (a->signalling != b->signalling)
+ return false;
+ /* The significand is ignored for canonical NaNs. */
+ if (a->canonical || b->canonical)
+ return a->canonical == b->canonical;
break;
default:
abort ();
}
+ for (i = 0; i < SIGSZ; ++i)
+ if (a->sig[i] != b->sig[i])
+ return false;
+
return true;
}
@@ -2243,29 +2251,13 @@ real_nan (r, str, quiet, mode)
/* Shift the significand into place such that the bits
are in the most significant bits for the format. */
- lshift_significand (r, r, SIGNIFICAND_BITS - fmt->p);
+ lshift_significand (r, r, SIGNIFICAND_BITS - fmt->pnan);
/* Our MSB is always unset for NaNs. */
r->sig[SIGSZ-1] &= ~SIG_MSB;
/* Force quiet or signalling NaN. */
- if (quiet)
- r->sig[SIGSZ-1] |= SIG_MSB >> 1;
- else
- r->sig[SIGSZ-1] &= ~(SIG_MSB >> 1);
-
- /* Force at least one bit of the significand set. */
- for (d = 0; d < SIGSZ; ++d)
- if (r->sig[d])
- break;
- if (d == SIGSZ)
- r->sig[SIGSZ-1] |= SIG_MSB >> 2;
-
- /* Our intermediate format forces QNaNs to have MSB-1 set.
- If the target format has QNaNs with the top bit unset,
- mirror the output routines and invert the top two bits. */
- if (!fmt->qnan_msb_set)
- r->sig[SIGSZ-1] ^= (SIG_MSB >> 1) | (SIG_MSB >> 2);
+ r->signalling = !quiet;
}
return true;
@@ -2325,14 +2317,6 @@ round_for_format (fmt, r)
case rvc_nan:
clear_significand_below (r, np2);
-
- /* If we've cleared the entire significand, we need one bit
- set for this to continue to be a NaN. */
- for (i = 0; i < SIGSZ; ++i)
- if (r->sig[i])
- break;
- if (i == SIGSZ)
- r->sig[SIGSZ-1] = SIG_MSB >> 2;
return;
case rvc_normal:
@@ -2583,28 +2567,33 @@ real_hash (r)
{
case rvc_zero:
case rvc_inf:
- break;
+ return h;
case rvc_normal:
h |= r->exp << 3;
- /* FALLTHRU */
+ break;
case rvc_nan:
- if (sizeof(unsigned long) > sizeof(unsigned int))
- for (i = 0; i < SIGSZ; ++i)
- {
- unsigned long s = r->sig[i];
- h ^= s ^ (s >> (HOST_BITS_PER_LONG / 2));
- }
- else
- for (i = 0; i < SIGSZ; ++i)
- h ^= r->sig[i];
+ if (r->signalling)
+ h ^= (unsigned int)-1;
+ if (r->canonical)
+ return h;
break;
default:
abort ();
}
+ if (sizeof(unsigned long) > sizeof(unsigned int))
+ for (i = 0; i < SIGSZ; ++i)
+ {
+ unsigned long s = r->sig[i];
+ h ^= s ^ (s >> (HOST_BITS_PER_LONG / 2));
+ }
+ else
+ for (i = 0; i < SIGSZ; ++i)
+ h ^= r->sig[i];
+
return h;
}
@@ -2642,10 +2631,23 @@ encode_ieee_single (fmt, buf, r)
case rvc_nan:
if (fmt->has_nans)
{
+ if (r->canonical)
+ sig = 0;
+ if (r->signalling == fmt->qnan_msb_set)
+ sig &= ~(1 << 22);
+ else
+ sig |= 1 << 22;
+ /* We overload qnan_msb_set here: it's only clear for
+ mips_ieee_single, which wants all mantissa bits but the
+ quiet/signalling one set in canonical NaNs (at least
+ Quiet ones). */
+ if (r->canonical && !fmt->qnan_msb_set)
+ sig |= (1 << 22) - 1;
+ else if (sig == 0)
+ sig = 1 << 21;
+
image |= 255 << 23;
image |= sig;
- if (!fmt->qnan_msb_set)
- image ^= 1 << 23 | 1 << 22;
}
else
image |= 0x7fffffff;
@@ -2703,8 +2705,8 @@ decode_ieee_single (fmt, r, buf)
{
r->class = rvc_nan;
r->sign = sign;
- if (!fmt->qnan_msb_set)
- image ^= (SIG_MSB >> 1 | SIG_MSB >> 2);
+ r->signalling = (((image >> (HOST_BITS_PER_LONG - 2)) & 1)
+ ^ fmt->qnan_msb_set);
r->sig[SIGSZ-1] = image;
}
else
@@ -2729,6 +2731,7 @@ const struct real_format ieee_single_format =
2,
1,
24,
+ 24,
-125,
128,
31,
@@ -2739,6 +2742,24 @@ const struct real_format ieee_single_format =
true
};
+const struct real_format mips_single_format =
+ {
+ encode_ieee_single,
+ decode_ieee_single,
+ 2,
+ 1,
+ 24,
+ 24,
+ -125,
+ 128,
+ 31,
+ true,
+ true,
+ true,
+ true,
+ false
+ };
+
/* IEEE double-precision format. */
@@ -2791,10 +2812,26 @@ encode_ieee_double (fmt, buf, r)
case rvc_nan:
if (fmt->has_nans)
{
+ if (r->canonical)
+ sig_hi = sig_lo = 0;
+ if (r->signalling == fmt->qnan_msb_set)
+ sig_hi &= ~(1 << 19);
+ else
+ sig_hi |= 1 << 19;
+ /* We overload qnan_msb_set here: it's only clear for
+ mips_ieee_single, which wants all mantissa bits but the
+ quiet/signalling one set in canonical NaNs (at least
+ Quiet ones). */
+ if (r->canonical && !fmt->qnan_msb_set)
+ {
+ sig_hi |= (1 << 19) - 1;
+ sig_lo = 0xffffffff;
+ }
+ else if (sig_hi == 0 && sig_lo == 0)
+ sig_hi = 1 << 18;
+
image_hi |= 2047 << 20;
image_hi |= sig_hi;
- if (!fmt->qnan_msb_set)
- image_hi ^= 1 << 19 | 1 << 18;
image_lo = sig_lo;
}
else
@@ -2884,6 +2921,7 @@ decode_ieee_double (fmt, r, buf)
{
r->class = rvc_nan;
r->sign = sign;
+ r->signalling = ((image_hi >> 30) & 1) ^ fmt->qnan_msb_set;
if (HOST_BITS_PER_LONG == 32)
{
r->sig[SIGSZ-1] = image_hi;
@@ -2891,9 +2929,6 @@ decode_ieee_double (fmt, r, buf)
}
else
r->sig[SIGSZ-1] = (image_hi << 31 << 1) | image_lo;
-
- if (!fmt->qnan_msb_set)
- r->sig[SIGSZ-1] ^= (SIG_MSB >> 1 | SIG_MSB >> 2);
}
else
{
@@ -2923,6 +2958,7 @@ const struct real_format ieee_double_format =
2,
1,
53,
+ 53,
-1021,
1024,
63,
@@ -2933,6 +2969,24 @@ const struct real_format ieee_double_format =
true
};
+const struct real_format mips_double_format =
+ {
+ encode_ieee_double,
+ decode_ieee_double,
+ 2,
+ 1,
+ 53,
+ 53,
+ -1021,
+ 1024,
+ 63,
+ true,
+ true,
+ true,
+ true,
+ false
+ };
+
/* IEEE extended double precision format. This comes in three
flavours: Intel's as a 12 byte image, Intel's as a 16 byte image,
@@ -2999,8 +3053,12 @@ encode_ieee_extended (fmt, buf, r)
sig_hi = sig_lo >> 31 >> 1;
sig_lo &= 0xffffffff;
}
- if (!fmt->qnan_msb_set)
- sig_hi ^= 1 << 30 | 1 << 29;
+ if (r->signalling == fmt->qnan_msb_set)
+ sig_hi &= ~(1 << 30);
+ else
+ sig_hi |= 1 << 30;
+ if ((sig_hi & 0x7fffffff) == 0 && sig_lo == 0)
+ sig_hi = 1 << 29;
/* Intel requires the explicit integer bit to be set, otherwise
it considers the value a "pseudo-nan". Motorola docs say it
@@ -3131,6 +3189,7 @@ decode_ieee_extended (fmt, r, buf)
{
r->class = rvc_nan;
r->sign = sign;
+ r->signalling = ((sig_hi >> 30) & 1) ^ fmt->qnan_msb_set;
if (HOST_BITS_PER_LONG == 32)
{
r->sig[SIGSZ-1] = sig_hi;
@@ -3138,9 +3197,6 @@ decode_ieee_extended (fmt, r, buf)
}
else
r->sig[SIGSZ-1] = (sig_hi << 31 << 1) | sig_lo;
-
- if (!fmt->qnan_msb_set)
- r->sig[SIGSZ-1] ^= (SIG_MSB >> 1 | SIG_MSB >> 2);
}
else
{
@@ -3179,6 +3235,7 @@ const struct real_format ieee_extended_motorola_format =
2,
1,
64,
+ 64,
-16382,
16384,
95,
@@ -3196,6 +3253,7 @@ const struct real_format ieee_extended_intel_96_format =
2,
1,
64,
+ 64,
-16381,
16384,
79,
@@ -3213,6 +3271,7 @@ const struct real_format ieee_extended_intel_128_format =
2,
1,
64,
+ 64,
-16381,
16384,
79,
@@ -3240,11 +3299,14 @@ static void decode_ibm_extended PARAMS ((const struct real_format *,
static void
encode_ibm_extended (fmt, buf, r)
- const struct real_format *fmt ATTRIBUTE_UNUSED;
+ const struct real_format *fmt;
long *buf;
const REAL_VALUE_TYPE *r;
{
REAL_VALUE_TYPE u, v;
+ const struct real_format *base_fmt;
+
+ base_fmt = fmt->qnan_msb_set ? &ieee_double_format : &mips_double_format;
switch (r->class)
{
@@ -3259,7 +3321,7 @@ encode_ibm_extended (fmt, buf, r)
case rvc_inf:
case rvc_nan:
/* Both doubles set to Inf / NaN. */
- encode_ieee_double (&ieee_double_format, &buf[0], r);
+ encode_ieee_double (base_fmt, &buf[0], r);
buf[2] = buf[0];
buf[3] = buf[1];
return;
@@ -3282,13 +3344,13 @@ encode_ibm_extended (fmt, buf, r)
{
/* v = remainder containing additional 53 bits of significand. */
do_add (&v, r, &u, 1);
- round_for_format (&ieee_double_format, &v);
+ round_for_format (base_fmt, &v);
}
- round_for_format (&ieee_double_format, &u);
+ round_for_format (base_fmt, &u);
- encode_ieee_double (&ieee_double_format, &buf[0], &u);
- encode_ieee_double (&ieee_double_format, &buf[2], &v);
+ encode_ieee_double (base_fmt, &buf[0], &u);
+ encode_ieee_double (base_fmt, &buf[2], &v);
break;
default:
@@ -3303,12 +3365,14 @@ decode_ibm_extended (fmt, r, buf)
const long *buf;
{
REAL_VALUE_TYPE u, v;
+ const struct real_format *base_fmt;
- decode_ieee_double (&ieee_double_format, &u, &buf[0]);
+ base_fmt = fmt->qnan_msb_set ? &ieee_double_format : &mips_double_format;
+ decode_ieee_double (base_fmt, &u, &buf[0]);
if (u.class != rvc_zero && u.class != rvc_inf && u.class != rvc_nan)
{
- decode_ieee_double (&ieee_double_format, &v, &buf[2]);
+ decode_ieee_double (base_fmt, &v, &buf[2]);
do_add (r, &u, &v, 0);
}
else
@@ -3322,6 +3386,7 @@ const struct real_format ibm_extended_format =
2,
1,
53 + 53,
+ 53,
-1021 + 53,
1024,
-1,
@@ -3332,6 +3397,24 @@ const struct real_format ibm_extended_format =
true
};
+const struct real_format mips_extended_format =
+ {
+ encode_ibm_extended,
+ decode_ibm_extended,
+ 2,
+ 1,
+ 53 + 53,
+ 53,
+ -1021 + 53,
+ 1024,
+ -1,
+ true,
+ true,
+ true,
+ true,
+ false
+ };
+
/* IEEE quad precision format. */
@@ -3379,7 +3462,12 @@ encode_ieee_quad (fmt, buf, r)
{
image3 |= 32767 << 16;
- if (HOST_BITS_PER_LONG == 32)
+ if (r->canonical)
+ {
+ /* Don't use bits from the significand. The
+ initialization above is right. */
+ }
+ else if (HOST_BITS_PER_LONG == 32)
{
image0 = u.sig[0];
image1 = u.sig[1];
@@ -3395,9 +3483,21 @@ encode_ieee_quad (fmt, buf, r)
image0 &= 0xffffffff;
image2 &= 0xffffffff;
}
-
- if (!fmt->qnan_msb_set)
- image3 ^= 1 << 15 | 1 << 14;
+ if (r->signalling == fmt->qnan_msb_set)
+ image3 &= ~0x8000;
+ else
+ image3 |= 0x8000;
+ /* We overload qnan_msb_set here: it's only clear for
+ mips_ieee_single, which wants all mantissa bits but the
+ quiet/signalling one set in canonical NaNs (at least
+ Quiet ones). */
+ if (r->canonical && !fmt->qnan_msb_set)
+ {
+ image3 |= 0x7fff;
+ image2 = image1 = image0 = 0xffffffff;
+ }
+ else if (((image3 & 0xffff) | image2 | image1 | image0) == 0)
+ image3 |= 0x4000;
}
else
{
@@ -3522,6 +3622,7 @@ decode_ieee_quad (fmt, r, buf)
{
r->class = rvc_nan;
r->sign = sign;
+ r->signalling = ((image3 >> 15) & 1) ^ fmt->qnan_msb_set;
if (HOST_BITS_PER_LONG == 32)
{
@@ -3536,9 +3637,6 @@ decode_ieee_quad (fmt, r, buf)
r->sig[1] = (image3 << 31 << 1) | image2;
}
lshift_significand (r, r, SIGNIFICAND_BITS - 113);
-
- if (!fmt->qnan_msb_set)
- r->sig[SIGSZ-1] ^= (SIG_MSB >> 1 | SIG_MSB >> 2);
}
else
{
@@ -3576,6 +3674,7 @@ const struct real_format ieee_quad_format =
2,
1,
113,
+ 113,
-16381,
16384,
127,
@@ -3585,6 +3684,24 @@ const struct real_format ieee_quad_format =
true,
true
};
+
+const struct real_format mips_quad_format =
+ {
+ encode_ieee_quad,
+ decode_ieee_quad,
+ 2,
+ 1,
+ 113,
+ 113,
+ -16381,
+ 16384,
+ 127,
+ true,
+ true,
+ true,
+ true,
+ false
+ };
/* Descriptions of VAX floating point formats can be found beginning at
@@ -3884,6 +4001,7 @@ const struct real_format vax_f_format =
2,
1,
24,
+ 24,
-127,
127,
15,
@@ -3901,6 +4019,7 @@ const struct real_format vax_d_format =
2,
1,
56,
+ 56,
-127,
127,
15,
@@ -3918,6 +4037,7 @@ const struct real_format vax_g_format =
2,
1,
53,
+ 53,
-1023,
1023,
15,
@@ -4100,6 +4220,7 @@ const struct real_format i370_single_format =
16,
4,
6,
+ 6,
-64,
63,
31,
@@ -4117,6 +4238,7 @@ const struct real_format i370_double_format =
16,
4,
14,
+ 14,
-64,
63,
63,
@@ -4332,6 +4454,7 @@ const struct real_format c4x_single_format =
2,
1,
24,
+ 24,
-126,
128,
-1,
@@ -4349,6 +4472,7 @@ const struct real_format c4x_extended_format =
2,
1,
32,
+ 32,
-126,
128,
-1,
@@ -4395,6 +4519,7 @@ const struct real_format real_internal_format =
2,
1,
SIGNIFICAND_BITS - 2,
+ SIGNIFICAND_BITS - 2,
-MAX_EXP,
MAX_EXP,
-1,
@@ -4436,7 +4561,6 @@ real_sqrt (r, mode, x)
const REAL_VALUE_TYPE *x;
{
static REAL_VALUE_TYPE halfthree;
- static REAL_VALUE_TYPE half;
static bool init = false;
REAL_VALUE_TYPE h, t, i;
int iter, exp;
@@ -4465,8 +4589,7 @@ real_sqrt (r, mode, x)
if (!init)
{
- real_arithmetic (&half, RDIV_EXPR, &dconst1, &dconst2);
- real_arithmetic (&halfthree, PLUS_EXPR, &dconst1, &half);
+ real_arithmetic (&halfthree, PLUS_EXPR, &dconst1, &dconsthalf);
init = true;
}
@@ -4480,7 +4603,7 @@ real_sqrt (r, mode, x)
/* i(n+1) = i(n) * (1.5 - 0.5*i(n)*i(n)*x). */
real_arithmetic (&t, MULT_EXPR, x, &i);
real_arithmetic (&h, MULT_EXPR, &t, &i);
- real_arithmetic (&t, MULT_EXPR, &h, &half);
+ real_arithmetic (&t, MULT_EXPR, &h, &dconsthalf);
real_arithmetic (&h, MINUS_EXPR, &halfthree, &t);
real_arithmetic (&t, MULT_EXPR, &i, &h);
@@ -4497,7 +4620,7 @@ real_sqrt (r, mode, x)
real_arithmetic (&h, MULT_EXPR, &t, &i);
real_arithmetic (&i, MINUS_EXPR, &dconst1, &h);
real_arithmetic (&h, MULT_EXPR, &t, &i);
- real_arithmetic (&i, MULT_EXPR, &half, &h);
+ real_arithmetic (&i, MULT_EXPR, &dconsthalf, &h);
real_arithmetic (&h, PLUS_EXPR, &t, &i);
/* ??? We need a Tuckerman test to get the last bit. */
diff --git a/gcc/real.h b/gcc/real.h
index 00551065555..0a470a512f3 100644
--- a/gcc/real.h
+++ b/gcc/real.h
@@ -35,7 +35,7 @@ enum real_value_class {
};
#define SIGNIFICAND_BITS (128 + HOST_BITS_PER_LONG)
-#define EXP_BITS (32 - 3)
+#define EXP_BITS (32 - 5)
#define MAX_EXP ((1 << (EXP_BITS - 1)) - 1)
#define SIGSZ (SIGNIFICAND_BITS / HOST_BITS_PER_LONG)
#define SIG_MSB ((unsigned long)1 << (HOST_BITS_PER_LONG - 1))
@@ -44,6 +44,8 @@ struct real_value GTY(())
{
ENUM_BITFIELD (real_value_class) class : 2;
unsigned int sign : 1;
+ unsigned int signalling : 1;
+ unsigned int canonical : 1;
signed int exp : EXP_BITS;
unsigned long sig[SIGSZ];
};
@@ -118,6 +120,9 @@ struct real_format
/* Size of the significand in digits of radix B. */
int p;
+ /* Size of the significant of a NaN, in digits of radix B. */
+ int pnan;
+
/* The minimum negative integer, x, such that b**(x-1) is normalized. */
int emin;
@@ -221,12 +226,16 @@ extern unsigned int real_hash PARAMS ((const REAL_VALUE_TYPE *));
/* Target formats defined in real.c. */
extern const struct real_format ieee_single_format;
+extern const struct real_format mips_single_format;
extern const struct real_format ieee_double_format;
+extern const struct real_format mips_double_format;
extern const struct real_format ieee_extended_motorola_format;
extern const struct real_format ieee_extended_intel_96_format;
extern const struct real_format ieee_extended_intel_128_format;
extern const struct real_format ibm_extended_format;
+extern const struct real_format mips_extended_format;
extern const struct real_format ieee_quad_format;
+extern const struct real_format mips_quad_format;
extern const struct real_format vax_f_format;
extern const struct real_format vax_d_format;
extern const struct real_format vax_g_format;
@@ -321,12 +330,14 @@ extern void real_ldexp PARAMS ((REAL_VALUE_TYPE *,
/* **** End of software floating point emulator interface macros **** */
-/* Constant real values 0, 1, 2, and -1. */
+/* Constant real values 0, 1, 2, -1, -2 and 0.5. */
extern REAL_VALUE_TYPE dconst0;
extern REAL_VALUE_TYPE dconst1;
extern REAL_VALUE_TYPE dconst2;
extern REAL_VALUE_TYPE dconstm1;
+extern REAL_VALUE_TYPE dconstm2;
+extern REAL_VALUE_TYPE dconsthalf;
/* Function to return a real value (not a tree node)
from a given integer constant. */
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c
index 8626d636778..525d0669440 100644
--- a/gcc/reg-stack.c
+++ b/gcc/reg-stack.c
@@ -454,7 +454,7 @@ reg_to_stack (first, file)
FOR_EACH_BB_REVERSE (bb)
{
edge e;
- for (e = bb->pred; e; e=e->pred_next)
+ for (e = bb->pred; e; e = e->pred_next)
if (!(e->flags & EDGE_DFS_BACK)
&& e->src != ENTRY_BLOCK_PTR)
BLOCK_INFO (bb)->predecessors++;
diff --git a/gcc/reload.c b/gcc/reload.c
index b207c21ae4e..e360e26c0da 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -2137,10 +2137,10 @@ operands_match_p (x, y)
(reg:SI 1) will be considered the same register. */
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
&& i < FIRST_PSEUDO_REGISTER)
- i += (GET_MODE_SIZE (GET_MODE (x)) / UNITS_PER_WORD) - 1;
+ i += HARD_REGNO_NREGS (i, GET_MODE (x)) - 1;
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
&& j < FIRST_PSEUDO_REGISTER)
- j += (GET_MODE_SIZE (GET_MODE (y)) / UNITS_PER_WORD) - 1;
+ j += HARD_REGNO_NREGS (j, GET_MODE (y)) - 1;
return i == j;
}
@@ -4890,25 +4890,23 @@ find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels, insn)
that the index needs a reload and find_reloads_address_1 will take care
of it.
- If we decide to do something here, it must be that
- `double_reg_address_ok' is true and that this address rtl was made by
- eliminate_regs. We generate a reload of the fp/sp/ap + constant and
+ Handle all base registers here, not just fp/ap/sp, because on some
+ targets (namely Sparc) we can also get invalid addresses from preventive
+ subreg big-endian corrections made by find_reloads_toplev.
+
+ If we decide to do something, it must be that `double_reg_address_ok'
+ is true. We generate a reload of the base register + constant and
rework the sum so that the reload register will be added to the index.
This is safe because we know the address isn't shared.
- We check for fp/ap/sp as both the first and second operand of the
- innermost PLUS. */
+ We check for the base register as both the first and second operand of
+ the innermost PLUS. */
else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
&& GET_CODE (XEXP (ad, 0)) == PLUS
- && (XEXP (XEXP (ad, 0), 0) == frame_pointer_rtx
-#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
- || XEXP (XEXP (ad, 0), 0) == hard_frame_pointer_rtx
-#endif
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
- || XEXP (XEXP (ad, 0), 0) == arg_pointer_rtx
-#endif
- || XEXP (XEXP (ad, 0), 0) == stack_pointer_rtx)
+ && GET_CODE (XEXP (XEXP (ad, 0), 0)) == REG
+ && REGNO (XEXP (XEXP (ad, 0), 0)) < FIRST_PSEUDO_REGISTER
+ && REG_MODE_OK_FOR_BASE_P (XEXP (XEXP (ad, 0), 0), mode)
&& ! maybe_memory_address_p (mode, ad, &XEXP (XEXP (ad, 0), 1)))
{
*loc = ad = gen_rtx_PLUS (GET_MODE (ad),
@@ -4926,14 +4924,9 @@ find_reloads_address (mode, memrefloc, ad, loc, opnum, type, ind_levels, insn)
else if (GET_CODE (ad) == PLUS && GET_CODE (XEXP (ad, 1)) == CONST_INT
&& GET_CODE (XEXP (ad, 0)) == PLUS
- && (XEXP (XEXP (ad, 0), 1) == frame_pointer_rtx
-#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
- || XEXP (XEXP (ad, 0), 1) == hard_frame_pointer_rtx
-#endif
-#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
- || XEXP (XEXP (ad, 0), 1) == arg_pointer_rtx
-#endif
- || XEXP (XEXP (ad, 0), 1) == stack_pointer_rtx)
+ && GET_CODE (XEXP (XEXP (ad, 0), 1)) == REG
+ && REGNO (XEXP (XEXP (ad, 0), 1)) < FIRST_PSEUDO_REGISTER
+ && REG_MODE_OK_FOR_BASE_P (XEXP (XEXP (ad, 0), 1), mode)
&& ! maybe_memory_address_p (mode, ad, &XEXP (XEXP (ad, 0), 0)))
{
*loc = ad = gen_rtx_PLUS (GET_MODE (ad),
@@ -5954,7 +5947,7 @@ subst_reloads (insn)
do the wrong thing if RELOADREG is multi-word. RELOADREG
will always be a REG here. */
if (GET_MODE (reloadreg) != r->mode && r->mode != VOIDmode)
- reloadreg = gen_rtx_REG (r->mode, REGNO (reloadreg));
+ reloadreg = reload_adjust_reg_for_mode (reloadreg, r->mode);
/* If we are putting this into a SUBREG and RELOADREG is a
SUBREG, we would be making nested SUBREGs, so we have to fix
@@ -6404,9 +6397,6 @@ find_equiv_reg (goal, insn, class, other, reload_reg_p, goalreg, mode)
int nregs;
int valuenregs;
- valtry = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
- valueno = 0; /* [GIMPLE] Avoid uninitialized use warning. */
-
if (goal == 0)
regno = goalreg;
else if (GET_CODE (goal) == REG)
@@ -6937,6 +6927,26 @@ regno_clobbered_p (regno, insn, mode, sets)
return 0;
}
+/* Find the low part, with mode MODE, of a hard regno RELOADREG. */
+rtx
+reload_adjust_reg_for_mode (reloadreg, mode)
+ rtx reloadreg;
+ enum machine_mode mode;
+{
+ int regno;
+
+ if (GET_MODE (reloadreg) == mode)
+ return reloadreg;
+
+ regno = REGNO (reloadreg);
+
+ if (WORDS_BIG_ENDIAN)
+ regno += HARD_REGNO_NREGS (regno, GET_MODE (reloadreg))
+ - HARD_REGNO_NREGS (regno, mode);
+
+ return gen_rtx_REG (mode, regno);
+}
+
static const char *const reload_when_needed_name[] =
{
"RELOAD_FOR_INPUT",
diff --git a/gcc/reload.h b/gcc/reload.h
index adc2984c0b3..7fc4f49da40 100644
--- a/gcc/reload.h
+++ b/gcc/reload.h
@@ -1,6 +1,6 @@
/* Communication between reload.c and reload1.c.
Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1997, 1998,
- 1999, 2000, 2001 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@@ -385,3 +385,7 @@ extern void cleanup_subreg_operands PARAMS ((rtx));
/* Debugging support. */
extern void debug_reload_to_stream PARAMS ((FILE *));
extern void debug_reload PARAMS ((void));
+
+/* Compute the actual register we should reload to, in case we're
+ reloading to/from a register that is wider than a word. */
+extern rtx reload_adjust_reg_for_mode PARAMS ((rtx, enum machine_mode));
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 06b53f73597..c70694bedfd 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -3940,6 +3940,7 @@ reload_as_needed (live_known)
if (asm_noperands (PATTERN (insn)) >= 0)
for (p = NEXT_INSN (prev); p != next; p = NEXT_INSN (p))
if (p != insn && INSN_P (p)
+ && GET_CODE (PATTERN (p)) != USE
&& (recog_memoized (p) < 0
|| (extract_insn (p), ! constrain_operands (1))))
{
@@ -5503,7 +5504,7 @@ choose_reload_regs (chain)
#ifdef CANNOT_CHANGE_MODE_CLASS
(!REG_CANNOT_CHANGE_MODE_P (i, GET_MODE (last_reg),
need_mode)
- ||
+ &&
#endif
(GET_MODE_SIZE (GET_MODE (last_reg))
>= GET_MODE_SIZE (need_mode))
@@ -6319,7 +6320,7 @@ emit_input_reload_insns (chain, rl, old, j)
must always be a REG here. */
if (GET_MODE (reloadreg) != mode)
- reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
+ reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
while (GET_CODE (oldequiv) == SUBREG && GET_MODE (oldequiv) != mode)
oldequiv = SUBREG_REG (oldequiv);
if (GET_MODE (oldequiv) != VOIDmode
@@ -6568,8 +6569,8 @@ emit_input_reload_insns (chain, rl, old, j)
oldequiv = old, real_oldequiv = real_old;
else
second_reload_reg
- = gen_rtx_REG (new_mode,
- REGNO (second_reload_reg));
+ = reload_adjust_reg_for_mode (second_reload_reg,
+ new_mode);
}
}
}
@@ -6691,7 +6692,7 @@ emit_output_reload_insns (chain, rl, j)
}
if (GET_MODE (reloadreg) != mode)
- reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
+ reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
#ifdef SECONDARY_OUTPUT_RELOAD_CLASS
@@ -6732,7 +6733,7 @@ emit_output_reload_insns (chain, rl, j)
= rld[secondary_reload].secondary_out_icode;
if (GET_MODE (reloadreg) != mode)
- reloadreg = gen_rtx_REG (mode, REGNO (reloadreg));
+ reloadreg = reload_adjust_reg_for_mode (reloadreg, mode);
if (tertiary_icode != CODE_FOR_nothing)
{
@@ -9147,7 +9148,6 @@ reload_cse_move2add (first)
if (GET_CODE (src) == CONST_INT && reg_base_reg[regno] < 0)
{
- int success = 0;
rtx new_src =
GEN_INT (trunc_int_for_mode (INTVAL (src)
- reg_offset[regno],
@@ -9159,11 +9159,11 @@ reload_cse_move2add (first)
value flag. jump2 already knows how to get rid of
no-op moves. */
if (new_src == const0_rtx)
- success = validate_change (insn, &SET_SRC (pat), reg, 0);
+ validate_change (insn, &SET_SRC (pat), reg, 0);
else if (rtx_cost (new_src, PLUS) < rtx_cost (src, SET)
&& have_add2_insn (reg, new_src))
- success = validate_change (insn, &PATTERN (insn),
- gen_add2_insn (reg, new_src), 0);
+ validate_change (insn, &PATTERN (insn),
+ gen_add2_insn (reg, new_src), 0);
else
{
enum machine_mode narrow_mode;
@@ -9187,9 +9187,8 @@ reload_cse_move2add (first)
gen_rtx_STRICT_LOW_PART (VOIDmode,
narrow_reg),
narrow_src);
- success = validate_change (insn, &PATTERN (insn),
- new_set, 0);
- if (success)
+ if (validate_change (insn, &PATTERN (insn),
+ new_set, 0))
break;
}
}
@@ -9206,7 +9205,7 @@ reload_cse_move2add (first)
(set (REGX) (REGY))
(set (REGX) (PLUS (REGX) (CONST_INT B)))
to
- (REGX) (REGY))
+ (set (REGX) (REGY))
(set (REGX) (PLUS (REGX) (CONST_INT A)))
...
(set (REGX) (plus (REGX) (CONST_INT B-A))) */
diff --git a/gcc/rtl.h b/gcc/rtl.h
index 89f554da724..b874d6410fe 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1577,7 +1577,7 @@ extern rtx simplify_rtx PARAMS ((rtx));
extern rtx avoid_constant_pool_reference PARAMS ((rtx));
/* In function.c */
-extern rtx gen_mem_addressof PARAMS ((rtx, tree));
+extern rtx gen_mem_addressof PARAMS ((rtx, tree, int));
/* In regclass.c */
extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int,
@@ -1595,6 +1595,14 @@ extern rtx set_unique_reg_note PARAMS ((rtx, enum reg_note, rtx));
: NULL_RTX)
#define single_set_1(I) single_set_2 (I, PATTERN (I))
+/* Structure used for passing data to REPLACE_LABEL. */
+typedef struct replace_label_data
+{
+ rtx r1;
+ rtx r2;
+ bool update_label_nuses;
+} replace_label_data;
+
extern int rtx_addr_can_trap_p PARAMS ((rtx));
extern bool nonzero_address_p PARAMS ((rtx));
extern int rtx_unstable_p PARAMS ((rtx));
@@ -1654,6 +1662,9 @@ extern int inequality_comparisons_p PARAMS ((rtx));
extern rtx replace_rtx PARAMS ((rtx, rtx, rtx));
extern rtx replace_regs PARAMS ((rtx, rtx *, unsigned int,
int));
+extern int replace_label PARAMS ((rtx *, void *));
+extern int rtx_referenced_p PARAMS ((rtx, rtx));
+extern bool tablejump_p PARAMS ((rtx, rtx *, rtx *));
extern int computed_jump_p PARAMS ((rtx));
typedef int (*rtx_function) PARAMS ((rtx *, void *));
extern int for_each_rtx PARAMS ((rtx *, rtx_function, void *));
@@ -2101,6 +2112,7 @@ extern rtx expand_mult_highpart PARAMS ((enum machine_mode, rtx,
int, int));
/* In gcse.c */
+extern bool can_copy_p PARAMS ((enum machine_mode));
#ifdef BUFSIZ
extern int gcse_main PARAMS ((rtx, FILE *));
extern int bypass_jumps PARAMS ((FILE *));
@@ -2270,6 +2282,7 @@ extern void init_alias_analysis PARAMS ((void));
extern void end_alias_analysis PARAMS ((void));
extern rtx addr_side_effect_eval PARAMS ((rtx, int, int));
extern bool memory_modified_in_insn_p PARAMS ((rtx, rtx));
+extern rtx find_base_term PARAMS ((rtx));
/* In sibcall.c */
typedef enum {
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index e184c20408e..f7923c2a87d 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -38,6 +38,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
static int global_reg_mentioned_p_1 PARAMS ((rtx *, void *));
static void set_of_1 PARAMS ((rtx, rtx, void *));
static void insn_dependent_p_1 PARAMS ((rtx, rtx, void *));
+static int rtx_referenced_p_1 PARAMS ((rtx *, void *));
static int computed_jump_p_1 PARAMS ((rtx));
static void parms_set PARAMS ((rtx, rtx, void *));
static bool hoist_test_store PARAMS ((rtx, rtx, regset));
@@ -465,15 +466,7 @@ get_jump_table_offset (insn, earliest)
rtx old_y;
int i;
- set = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
- if (GET_CODE (insn) != JUMP_INSN
- || ! (label = JUMP_LABEL (insn))
- || ! (table = NEXT_INSN (label))
- || GET_CODE (table) != JUMP_INSN
- || (GET_CODE (PATTERN (table)) != ADDR_VEC
- && GET_CODE (PATTERN (table)) != ADDR_DIFF_VEC)
- || ! (set = single_set (insn)))
+ if (!tablejump_p (insn, &label, &table) || !(set = single_set (insn)))
return NULL_RTX;
x = SET_SRC (set);
@@ -1328,19 +1321,17 @@ set_noop_p (set)
rtx src = SET_SRC (set);
rtx dst = SET_DEST (set);
- if (side_effects_p (src) || side_effects_p (dst))
- return 0;
-
- if (GET_CODE (dst) == MEM && GET_CODE (src) == MEM)
- return rtx_equal_p (dst, src);
-
if (dst == pc_rtx && src == pc_rtx)
return 1;
+ if (GET_CODE (dst) == MEM && GET_CODE (src) == MEM)
+ return rtx_equal_p (dst, src) && !side_effects_p (dst);
+
if (GET_CODE (dst) == SIGN_EXTRACT
|| GET_CODE (dst) == ZERO_EXTRACT)
return rtx_equal_p (XEXP (dst, 0), src)
- && ! BYTES_BIG_ENDIAN && XEXP (dst, 2) == const0_rtx;
+ && ! BYTES_BIG_ENDIAN && XEXP (dst, 2) == const0_rtx
+ && !side_effects_p (src);
if (GET_CODE (dst) == STRICT_LOW_PART)
dst = XEXP (dst, 0);
@@ -1560,7 +1551,7 @@ refers_to_regno_p (regno, endregno, x, loc)
else if (fmt[i] == 'E')
{
int j;
- for (j = XVECLEN (x, i) - 1; j >=0; j--)
+ for (j = XVECLEN (x, i) - 1; j >= 0; j--)
if (loc != &XVECEXP (x, i, j)
&& refers_to_regno_p (regno, endregno, XVECEXP (x, i, j), loc))
return 1;
@@ -2019,14 +2010,19 @@ rtx
find_reg_equal_equiv_note (insn)
rtx insn;
{
- rtx note;
+ rtx link;
- if (single_set (insn) == 0)
+ if (!INSN_P (insn))
return 0;
- else if ((note = find_reg_note (insn, REG_EQUIV, NULL_RTX)) != 0)
- return note;
- else
- return find_reg_note (insn, REG_EQUAL, NULL_RTX);
+ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
+ if (REG_NOTE_KIND (link) == REG_EQUAL
+ || REG_NOTE_KIND (link) == REG_EQUIV)
+ {
+ if (single_set (insn) == 0)
+ return 0;
+ return link;
+ }
+ return NULL;
}
/* Return true if DATUM, or any overlap of DATUM, of kind CODE is found
@@ -2793,6 +2789,137 @@ replace_regs (x, reg_map, nregs, replace_dest)
return x;
}
+/* Replace occurrences of the old label in *X with the new one.
+ DATA is a REPLACE_LABEL_DATA containing the old and new labels. */
+
+int
+replace_label (x, data)
+ rtx *x;
+ void *data;
+{
+ rtx l = *x;
+ rtx tmp;
+ rtx old_label = ((replace_label_data *) data)->r1;
+ rtx new_label = ((replace_label_data *) data)->r2;
+ bool update_label_nuses = ((replace_label_data *) data)->update_label_nuses;
+
+ if (l == NULL_RTX)
+ return 0;
+
+ if (GET_CODE (l) == MEM
+ && (tmp = XEXP (l, 0)) != NULL_RTX
+ && GET_CODE (tmp) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (tmp))
+ {
+ rtx c = get_pool_constant (tmp);
+ if (rtx_referenced_p (old_label, c))
+ {
+ rtx new_c, new_l;
+ replace_label_data *d = (replace_label_data *) data;
+
+ /* Create a copy of constant C; replace the label inside
+ but do not update LABEL_NUSES because uses in constant pool
+ are not counted. */
+ new_c = copy_rtx (c);
+ d->update_label_nuses = false;
+ for_each_rtx (&new_c, replace_label, data);
+ d->update_label_nuses = update_label_nuses;
+
+ /* Add the new constant NEW_C to constant pool and replace
+ the old reference to constant by new reference. */
+ new_l = force_const_mem (get_pool_mode (tmp), new_c);
+ *x = replace_rtx (l, l, new_l);
+ }
+ return 0;
+ }
+
+ /* If this is a JUMP_INSN, then we also need to fix the JUMP_LABEL
+ field. This is not handled by for_each_rtx because it doesn't
+ handle unprinted ('0') fields. */
+ if (GET_CODE (l) == JUMP_INSN && JUMP_LABEL (l) == old_label)
+ JUMP_LABEL (l) = new_label;
+
+ if ((GET_CODE (l) == LABEL_REF
+ || GET_CODE (l) == INSN_LIST)
+ && XEXP (l, 0) == old_label)
+ {
+ XEXP (l, 0) = new_label;
+ if (update_label_nuses)
+ {
+ ++LABEL_NUSES (new_label);
+ --LABEL_NUSES (old_label);
+ }
+ return 0;
+ }
+
+ return 0;
+}
+
+/* When *BODY is equal to X or X is directly referenced by *BODY
+ return nonzero, thus FOR_EACH_RTX stops traversing and returns nonzero
+ too, otherwise FOR_EACH_RTX continues traversing *BODY. */
+
+static int
+rtx_referenced_p_1 (body, x)
+ rtx *body;
+ void *x;
+{
+ rtx y = (rtx) x;
+
+ if (*body == NULL_RTX)
+ return y == NULL_RTX;
+
+ /* Return true if a label_ref *BODY refers to label Y. */
+ if (GET_CODE (*body) == LABEL_REF && GET_CODE (y) == CODE_LABEL)
+ return XEXP (*body, 0) == y;
+
+ /* If *BODY is a reference to pool constant traverse the constant. */
+ if (GET_CODE (*body) == SYMBOL_REF
+ && CONSTANT_POOL_ADDRESS_P (*body))
+ return rtx_referenced_p (y, get_pool_constant (*body));
+
+ /* By default, compare the RTL expressions. */
+ return rtx_equal_p (*body, y);
+}
+
+/* Return true if X is referenced in BODY. */
+
+int
+rtx_referenced_p (x, body)
+ rtx x;
+ rtx body;
+{
+ return for_each_rtx (&body, rtx_referenced_p_1, x);
+}
+
+/* If INSN is a jump to jumptable insn rturn true and store the label (which
+ INSN jumps to) to *LABEL and the tablejump insn to *TABLE.
+ LABEL and TABLE may be NULL. */
+
+bool
+tablejump_p (insn, label, table)
+ rtx insn;
+ rtx *label;
+ rtx *table;
+{
+ rtx l, t;
+
+ if (onlyjump_p (insn)
+ && (l = JUMP_LABEL (insn)) != NULL_RTX
+ && (t = NEXT_INSN (l)) != NULL_RTX
+ && GET_CODE (t) == JUMP_INSN
+ && (GET_CODE (PATTERN (t)) == ADDR_VEC
+ || GET_CODE (PATTERN (t)) == ADDR_DIFF_VEC))
+ {
+ if (label)
+ *label = l;
+ if (table)
+ *table = t;
+ return true;
+ }
+ return false;
+}
+
/* A subroutine of computed_jump_p, return 1 if X contains a REG or MEM or
constant that is not in the constant pool and not in the condition
of an IF_THEN_ELSE. */
diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c
index 92831641c79..0dae995d8ef 100644
--- a/gcc/sbitmap.c
+++ b/gcc/sbitmap.c
@@ -94,7 +94,7 @@ sbitmap_resize (bmap, n_elms, def)
}
else if (n_elms < bmap->n_bits)
{
- /* Clear the surplus bits in the last word. */
+ /* Clear the surplus bits in the last word. */
last_bit = n_elms % SBITMAP_ELT_BITS;
if (last_bit)
bmap->elms[size - 1]
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index b3c619df51d..874ebc26c7a 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -42,6 +42,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "sched-int.h"
#include "params.h"
#include "cselib.h"
+#include "df.h"
extern char *reg_known_equiv_p;
extern rtx *reg_known_value;
@@ -468,6 +469,19 @@ sched_analyze_1 (deps, x, insn)
while (GET_CODE (dest) == STRICT_LOW_PART || GET_CODE (dest) == SUBREG
|| GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT)
{
+ if (GET_CODE (dest) == STRICT_LOW_PART
+ || GET_CODE (dest) == ZERO_EXTRACT
+ || GET_CODE (dest) == SIGN_EXTRACT
+ || read_modify_subreg_p (dest))
+ {
+ /* These both read and modify the result. We must handle
+ them as writes to get proper dependencies for following
+ instructions. We must handle them as reads to get proper
+ dependencies from this to previous instructions.
+ Thus we need to call sched_analyze_2. */
+
+ sched_analyze_2 (deps, XEXP (dest, 0), insn);
+ }
if (GET_CODE (dest) == ZERO_EXTRACT || GET_CODE (dest) == SIGN_EXTRACT)
{
/* The second and third arguments are values read by this insn. */
diff --git a/gcc/sdbout.c b/gcc/sdbout.c
index 30565b3dca1..aaba3601dc4 100644
--- a/gcc/sdbout.c
+++ b/gcc/sdbout.c
@@ -333,7 +333,8 @@ const struct gcc_debug_hooks sdb_debug_hooks =
sdbout_global_decl, /* global_decl */
debug_nothing_tree, /* deferred_inline_function */
debug_nothing_tree, /* outlining_inline_function */
- sdbout_label
+ sdbout_label, /* label */
+ debug_nothing_int /* handle_pch */
};
#if 0
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 0bd9b6055b6..92ee19a0529 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -325,7 +325,7 @@ simplify_replace_rtx (x, old, new)
GET_MODE (SUBREG_REG (x)),
SUBREG_BYTE (x));
if (exp)
- x = exp;
+ x = exp;
}
return x;
@@ -1337,19 +1337,19 @@ simplify_binary_operation (code, mode, op0, op1)
/* (x - (x & y)) -> (x & ~y) */
if (GET_CODE (op1) == AND)
{
- if (rtx_equal_p (op0, XEXP (op1, 0)))
- {
- tem = simplify_gen_unary (NOT, mode, XEXP (op1, 1),
- GET_MODE (XEXP (op1, 1)));
- return simplify_gen_binary (AND, mode, op0, tem);
- }
- if (rtx_equal_p (op0, XEXP (op1, 1)))
- {
- tem = simplify_gen_unary (NOT, mode, XEXP (op1, 0),
- GET_MODE (XEXP (op1, 0)));
- return simplify_gen_binary (AND, mode, op0, tem);
- }
- }
+ if (rtx_equal_p (op0, XEXP (op1, 0)))
+ {
+ tem = simplify_gen_unary (NOT, mode, XEXP (op1, 1),
+ GET_MODE (XEXP (op1, 1)));
+ return simplify_gen_binary (AND, mode, op0, tem);
+ }
+ if (rtx_equal_p (op0, XEXP (op1, 1)))
+ {
+ tem = simplify_gen_unary (NOT, mode, XEXP (op1, 0),
+ GET_MODE (XEXP (op1, 0)));
+ return simplify_gen_binary (AND, mode, op0, tem);
+ }
+ }
break;
case MULT:
@@ -1605,15 +1605,15 @@ simplify_binary_operation (code, mode, op0, op1)
rtvec v = rtvec_alloc (n_elts);
unsigned int i;
- if (XVECLEN (trueop1, 0) != (int)n_elts)
+ if (XVECLEN (trueop1, 0) != (int) n_elts)
abort ();
for (i = 0; i < n_elts; i++)
{
- rtx x = XVECEXP (trueop1, 0, i);
+ rtx x = XVECEXP (trueop1, 0, i);
- if (GET_CODE (x) != CONST_INT)
- abort ();
- RTVEC_ELT (v, i) = CONST_VECTOR_ELT (trueop0, INTVAL (x));
+ if (GET_CODE (x) != CONST_INT)
+ abort ();
+ RTVEC_ELT (v, i) = CONST_VECTOR_ELT (trueop0, INTVAL (x));
}
return gen_rtx_CONST_VECTOR (mode, v);
@@ -1684,7 +1684,7 @@ simplify_binary_operation (code, mode, op0, op1)
return gen_rtx_CONST_VECTOR (mode, v);
}
- }
+ }
return 0;
default:
@@ -1863,6 +1863,13 @@ simplify_binary_operation (code, mode, op0, op1)
> (unsigned HOST_WIDE_INT) arg1 ? arg0 : arg1);
break;
+ case SS_PLUS:
+ case US_PLUS:
+ case SS_MINUS:
+ case US_MINUS:
+ /* ??? There are simplifications that can be done. */
+ return 0;
+
default:
abort ();
}
@@ -2549,7 +2556,7 @@ simplify_ternary_operation (code, mode, op0_mode, op0, op1, op2)
{
int elt_size = GET_MODE_SIZE (GET_MODE_INNER (mode));
unsigned n_elts = (GET_MODE_SIZE (mode) / elt_size);
- int mask = (1<<n_elts) - 1;
+ int mask = (1 << n_elts) - 1;
if (!(INTVAL (op2) & mask))
return op1;
@@ -2674,8 +2681,8 @@ simplify_subreg (outermode, op, innermode, byte)
int subbyte = byte % elt_size;
op = simplify_subreg (new_mode, op, innermode, byte - subbyte);
- if (! op)
- return NULL_RTX;
+ if (! op)
+ return NULL_RTX;
return simplify_subreg (outermode, op, new_mode, subbyte);
}
else if (GET_MODE_CLASS (outermode) == MODE_INT)
@@ -3084,7 +3091,7 @@ simplify_rtx (x)
SUBREG_BYTE (x));
if (code == CONSTANT_P_RTX)
{
- if (CONSTANT_P (XEXP (x,0)))
+ if (CONSTANT_P (XEXP (x, 0)))
return const1_rtx;
}
return NULL;
diff --git a/gcc/ssa-ccp.c b/gcc/ssa-ccp.c
index 86e5a4baa85..e3a770a6600 100644
--- a/gcc/ssa-ccp.c
+++ b/gcc/ssa-ccp.c
@@ -926,12 +926,7 @@ ssa_ccp_df_delete_unreachable_insns ()
/* Include any jump table following the basic block. */
end = b->end;
- if (GET_CODE (end) == JUMP_INSN
- && (tmp = JUMP_LABEL (end)) != NULL_RTX
- && (tmp = NEXT_INSN (tmp)) != NULL_RTX
- && GET_CODE (tmp) == JUMP_INSN
- && (GET_CODE (PATTERN (tmp)) == ADDR_VEC
- || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC))
+ if (tablejump_p (end, NULL, &tmp))
end = tmp;
while (1)
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 0a2b7d619f0..db700c23ee9 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -947,9 +947,9 @@ expand_fixups (first_insn)
Gotos that jump out of this contour must restore the
stack level and do the cleanups before actually jumping.
- DONT_JUMP_IN nonzero means report error there is a jump into this
- contour from before the beginning of the contour.
- This is also done if STACK_LEVEL is nonzero. */
+ DONT_JUMP_IN positive means report error if there is a jump into this
+ contour from before the beginning of the contour. This is also done if
+ STACK_LEVEL is nonzero unless DONT_JUMP_IN is negative. */
static void
fixup_gotos (thisblock, stack_level, cleanup_list, first_insn, dont_jump_in)
@@ -991,7 +991,8 @@ fixup_gotos (thisblock, stack_level, cleanup_list, first_insn, dont_jump_in)
It detects only a problem with the innermost block
around the label. */
if (f->target != 0
- && (dont_jump_in || stack_level || cleanup_list)
+ && (dont_jump_in > 0 || (dont_jump_in == 0 && stack_level)
+ || cleanup_list)
&& INSN_UID (first_insn) < INSN_UID (f->target_rtl)
&& INSN_UID (first_insn) > INSN_UID (f->before_jump)
&& ! DECL_ERROR_ISSUED (f->target))
@@ -3396,15 +3397,15 @@ tail_recursion_args (actuals, formals)
else
{
rtx tmp = argvec[i];
-
+ int unsignedp = TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a)));
+ promote_mode(TREE_TYPE (TREE_VALUE (a)), GET_MODE (tmp),
+ &unsignedp, 0);
if (DECL_MODE (f) != GET_MODE (DECL_RTL (f)))
{
tmp = gen_reg_rtx (DECL_MODE (f));
- convert_move (tmp, argvec[i],
- TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a))));
+ convert_move (tmp, argvec[i], unsignedp);
}
- convert_move (DECL_RTL (f), tmp,
- TREE_UNSIGNED (TREE_TYPE (TREE_VALUE (a))));
+ convert_move (DECL_RTL (f), tmp, unsignedp);
}
}
@@ -3761,8 +3762,10 @@ warn_about_unused_variables (vars)
MARK_ENDS is nonzero if we should put a note at the beginning
and end of this binding contour.
- DONT_JUMP_IN is nonzero if it is not valid to jump into this contour.
- (That is true automatically if the contour has a saved stack level.) */
+ DONT_JUMP_IN is positive if it is not valid to jump into this contour,
+ zero if we can jump into this contour only if it does not have a saved
+ stack level, and negative if we are not to check for invalid use of
+ labels (because the front end does that). */
void
expand_end_bindings (vars, mark_ends, dont_jump_in)
@@ -3797,8 +3800,8 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
/* Don't allow jumping into a block that has a stack level.
Cleanups are allowed, though. */
- if (dont_jump_in
- || thisblock->data.block.stack_level != 0)
+ if (dont_jump_in > 0
+ || (dont_jump_in == 0 && thisblock->data.block.stack_level != 0))
{
struct label_chain *chain;
@@ -3987,7 +3990,7 @@ expand_decl (decl)
/* If something wants our address, try to use ADDRESSOF. */
if (TREE_ADDRESSABLE (decl))
- put_var_into_stack (decl);
+ put_var_into_stack (decl, /*rescan=*/false);
}
else if (TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST
@@ -4087,6 +4090,8 @@ expand_decl_init (decl)
/* Compute and store the initial value now. */
+ push_temp_slots ();
+
if (DECL_INITIAL (decl) == error_mark_node)
{
enum tree_code code = TREE_CODE (TREE_TYPE (decl));
@@ -4110,6 +4115,7 @@ expand_decl_init (decl)
/* Free any temporaries we made while initializing the decl. */
preserve_temp_slots (NULL_RTX);
free_temp_slots ();
+ pop_temp_slots ();
}
/* CLEANUP is an expression to be executed at exit from this binding contour;
@@ -4472,6 +4478,7 @@ expand_start_case (exit_flag, expr, type, printname)
nesting_stack = thiscase;
do_pending_stack_adjust ();
+ emit_queue ();
/* Make sure case_stmt.start points to something that won't
need any transformation before expand_end_case. */
@@ -5545,6 +5552,7 @@ expand_end_case_type (orig_index, orig_type)
else if (CASE_USE_BIT_TESTS
&& ! TREE_CONSTANT (index_expr)
&& compare_tree_int (range, GET_MODE_BITSIZE (word_mode)) < 0
+ && compare_tree_int (range, 0) > 0
&& lshift_cheap_p ()
&& ((uniq == 1 && count >= 3)
|| (uniq == 2 && count >= 5)
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
index e5f772d3fec..9a16bba74ec 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -358,6 +358,19 @@ round_down (value, divisor)
return size_binop (MULT_EXPR, size_binop (FLOOR_DIV_EXPR, value, arg), arg);
}
+/* Subroutine of layout_decl: Force alignment required for the data type.
+ But if the decl itself wants greater alignment, don't override that. */
+
+static inline void
+do_type_align (tree type, tree decl)
+{
+ if (TYPE_ALIGN (type) > DECL_ALIGN (decl))
+ {
+ DECL_ALIGN (decl) = TYPE_ALIGN (type);
+ DECL_USER_ALIGN (decl) = TYPE_USER_ALIGN (type);
+ }
+}
+
/* Set the size, mode and alignment of a ..._DECL node.
TYPE_DECL does need this for C++.
Note that LABEL_DECL and CONST_DECL nodes do not need this,
@@ -412,67 +425,98 @@ layout_decl (decl, known_align)
= convert (sizetype, size_binop (CEIL_DIV_EXPR, DECL_SIZE (decl),
bitsize_unit_node));
- /* Force alignment required for the data type.
- But if the decl itself wants greater alignment, don't override that.
- Likewise, if the decl is packed, don't override it. */
- if (! (code == FIELD_DECL && DECL_BIT_FIELD (decl))
- && (DECL_ALIGN (decl) == 0
- || (! (code == FIELD_DECL && DECL_PACKED (decl))
- && TYPE_ALIGN (type) > DECL_ALIGN (decl))))
+ if (code != FIELD_DECL)
+ /* For non-fields, update the alignment from the type. */
+ do_type_align (type, decl);
+ else
+ /* For fields, it's a bit more complicated... */
{
- DECL_ALIGN (decl) = TYPE_ALIGN (type);
- DECL_USER_ALIGN (decl) = 0;
- }
+ if (DECL_BIT_FIELD (decl))
+ {
+ DECL_BIT_FIELD_TYPE (decl) = type;
- /* For fields, set the bit field type and update the alignment. */
- if (code == FIELD_DECL)
- {
- DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
- if (maximum_field_alignment != 0)
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
+ /* A zero-length bit-field affects the alignment of the next
+ field. */
+ if (integer_zerop (DECL_SIZE (decl))
+ && ! DECL_PACKED (decl)
+ && ! (*targetm.ms_bitfield_layout_p) (DECL_FIELD_CONTEXT (decl)))
+ {
+#ifdef PCC_BITFIELD_TYPE_MATTERS
+ if (PCC_BITFIELD_TYPE_MATTERS)
+ do_type_align (type, decl);
+ else
+#endif
+ {
+#ifdef EMPTY_FIELD_BOUNDARY
+ if (EMPTY_FIELD_BOUNDARY > DECL_ALIGN (decl))
+ {
+ DECL_ALIGN (decl) = EMPTY_FIELD_BOUNDARY;
+ DECL_USER_ALIGN (decl) = 0;
+ }
+#endif
+ }
+ }
+
+ /* See if we can use an ordinary integer mode for a bit-field.
+ Conditions are: a fixed size that is correct for another mode
+ and occupying a complete byte or bytes on proper boundary. */
+ if (TYPE_SIZE (type) != 0
+ && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
+ && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
+ {
+ enum machine_mode xmode
+ = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
+
+ if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode))
+ {
+ DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
+ DECL_ALIGN (decl));
+ DECL_MODE (decl) = xmode;
+ DECL_BIT_FIELD (decl) = 0;
+ }
+ }
+
+ /* Turn off DECL_BIT_FIELD if we won't need it set. */
+ if (TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
+ && known_align >= TYPE_ALIGN (type)
+ && DECL_ALIGN (decl) >= TYPE_ALIGN (type))
+ DECL_BIT_FIELD (decl) = 0;
+ }
+ else if (DECL_PACKED (decl) && DECL_USER_ALIGN (decl))
+ /* Don't touch DECL_ALIGN. For other packed fields, go ahead and
+ round up; we'll reduce it again below. */;
+ else
+ do_type_align (type, decl);
/* If the field is of variable size, we can't misalign it since we
have no way to make a temporary to align the result. But this
isn't an issue if the decl is not addressable. Likewise if it
is of unknown size. */
- else if (DECL_PACKED (decl)
- && (DECL_NONADDRESSABLE_P (decl)
- || DECL_SIZE_UNIT (decl) == 0
- || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
- {
- DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
- DECL_USER_ALIGN (decl) = 0;
- }
- }
-
- /* See if we can use an ordinary integer mode for a bit-field.
- Conditions are: a fixed size that is correct for another mode
- and occupying a complete byte or bytes on proper boundary. */
- if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
- && TYPE_SIZE (type) != 0
- && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
- && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)
- {
- enum machine_mode xmode
- = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);
-
- if (xmode != BLKmode && known_align >= GET_MODE_ALIGNMENT (xmode))
+ if (DECL_PACKED (decl)
+ && !DECL_USER_ALIGN (decl)
+ && (DECL_NONADDRESSABLE_P (decl)
+ || DECL_SIZE_UNIT (decl) == 0
+ || TREE_CODE (DECL_SIZE_UNIT (decl)) == INTEGER_CST))
+ DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
+
+ /* Should this be controlled by DECL_USER_ALIGN, too? */
+ if (maximum_field_alignment != 0)
+ DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), maximum_field_alignment);
+ if (! DECL_USER_ALIGN (decl))
{
- DECL_ALIGN (decl) = MAX (GET_MODE_ALIGNMENT (xmode),
- DECL_ALIGN (decl));
- DECL_MODE (decl) = xmode;
- DECL_BIT_FIELD (decl) = 0;
+ /* Some targets (i.e. i386, VMS) limit struct field alignment
+ to a lower boundary than alignment of variables unless
+ it was overridden by attribute aligned. */
+#ifdef BIGGEST_FIELD_ALIGNMENT
+ DECL_ALIGN (decl)
+ = MIN (DECL_ALIGN (decl), (unsigned) BIGGEST_FIELD_ALIGNMENT);
+#endif
+#ifdef ADJUST_FIELD_ALIGN
+ DECL_ALIGN (decl) = ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl));
+#endif
}
}
- /* Turn off DECL_BIT_FIELD if we won't need it set. */
- if (code == FIELD_DECL && DECL_BIT_FIELD (decl)
- && TYPE_MODE (type) == BLKmode && DECL_MODE (decl) == BLKmode
- && known_align >= TYPE_ALIGN (type)
- && DECL_ALIGN (decl) >= TYPE_ALIGN (type)
- && DECL_SIZE_UNIT (decl) != 0)
- DECL_BIT_FIELD (decl) = 0;
-
/* Evaluate nonconstant size only once, either now or as soon as safe. */
if (DECL_SIZE (decl) != 0 && TREE_CODE (DECL_SIZE (decl)) != INTEGER_CST)
DECL_SIZE (decl) = variable_size (DECL_SIZE (decl));
@@ -533,7 +577,7 @@ start_record_layout (t)
declaration, for example) use it -- otherwise, start with a
one-byte alignment. */
rli->record_align = MAX (BITS_PER_UNIT, TYPE_ALIGN (t));
- rli->unpacked_align = rli->unpadded_align = rli->record_align;
+ rli->unpacked_align = rli->record_align;
rli->offset_align = MAX (rli->record_align, BIGGEST_ALIGNMENT);
#ifdef STRUCTURE_SIZE_BOUNDARY
@@ -622,8 +666,8 @@ debug_rli (rli)
print_node_brief (stderr, "\noffset", rli->offset, 0);
print_node_brief (stderr, " bitpos", rli->bitpos, 0);
- fprintf (stderr, "\naligns: rec = %u, unpack = %u, unpad = %u, off = %u\n",
- rli->record_align, rli->unpacked_align, rli->unpadded_align,
+ fprintf (stderr, "\naligns: rec = %u, unpack = %u, off = %u\n",
+ rli->record_align, rli->unpacked_align,
rli->offset_align);
if (rli->packed_maybe_necessary)
fprintf (stderr, "packed may be necessary\n");
@@ -680,40 +724,21 @@ update_alignment_for_field (rli, field, known_align)
tree type = TREE_TYPE (field);
/* True if the field was explicitly aligned by the user. */
bool user_align;
+ bool is_bitfield;
- /* Lay out the field so we know what alignment it needs. For a
- packed field, use the alignment as specified, disregarding what
- the type would want. */
+ /* Lay out the field so we know what alignment it needs. */
+ layout_decl (field, known_align);
desired_align = DECL_ALIGN (field);
user_align = DECL_USER_ALIGN (field);
- layout_decl (field, known_align);
- if (! DECL_PACKED (field))
- {
- desired_align = DECL_ALIGN (field);
- user_align = DECL_USER_ALIGN (field);
- }
- /* Some targets (i.e. i386, VMS) limit struct field alignment
- to a lower boundary than alignment of variables unless
- it was overridden by attribute aligned. */
-#ifdef BIGGEST_FIELD_ALIGNMENT
- if (!user_align)
- desired_align
- = MIN (desired_align, (unsigned) BIGGEST_FIELD_ALIGNMENT);
-#endif
-
-#ifdef ADJUST_FIELD_ALIGN
- if (!user_align)
- desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
-#endif
+ is_bitfield = (type != error_mark_node
+ && DECL_BIT_FIELD_TYPE (field)
+ && ! integer_zerop (TYPE_SIZE (type)));
/* Record must have at least as much alignment as any field.
Otherwise, the alignment of the field within the record is
meaningless. */
- if ((* targetm.ms_bitfield_layout_p) (rli->t)
- && type != error_mark_node
- && DECL_BIT_FIELD_TYPE (field)
- && ! integer_zerop (TYPE_SIZE (type)))
+ if (is_bitfield && (* targetm.ms_bitfield_layout_p) (rli->t))
{
/* Here, the alignment of the underlying type of a bitfield can
affect the alignment of a record; even a zero-sized field
@@ -733,28 +758,11 @@ update_alignment_for_field (rli, field, known_align)
type_align = MIN (type_align, maximum_field_alignment);
rli->record_align = MAX (rli->record_align, type_align);
rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
- rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
}
- else
- desired_align = 1;
}
- else
#ifdef PCC_BITFIELD_TYPE_MATTERS
- if (PCC_BITFIELD_TYPE_MATTERS && type != error_mark_node
- && ! (* targetm.ms_bitfield_layout_p) (rli->t)
- && DECL_BIT_FIELD_TYPE (field)
- && ! integer_zerop (TYPE_SIZE (type)))
+ else if (is_bitfield && PCC_BITFIELD_TYPE_MATTERS)
{
- /* A zero-length bit-field affects the alignment of the next
- field. */
- if (!DECL_PACKED (field) && integer_zerop (DECL_SIZE (field)))
- {
- desired_align = TYPE_ALIGN (type);
-#ifdef ADJUST_FIELD_ALIGN
- desired_align = ADJUST_FIELD_ALIGN (field, desired_align);
-#endif
- }
-
/* Named bit-fields cause the entire structure to have the
alignment implied by their type. */
if (DECL_NAME (field) != 0)
@@ -779,18 +787,16 @@ update_alignment_for_field (rli, field, known_align)
rli->record_align = MAX (rli->record_align, desired_align);
rli->record_align = MAX (rli->record_align, type_align);
- rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
if (warn_packed)
rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
user_align |= TYPE_USER_ALIGN (type);
}
}
- else
#endif
+ else
{
rli->record_align = MAX (rli->record_align, desired_align);
rli->unpacked_align = MAX (rli->unpacked_align, TYPE_ALIGN (type));
- rli->unpadded_align = MAX (rli->unpadded_align, DECL_ALIGN (field));
}
TYPE_USER_ALIGN (rli->t) |= user_align;
@@ -905,7 +911,7 @@ place_field (rli, field)
if (warn_packed && DECL_PACKED (field))
{
- if (known_align > TYPE_ALIGN (type))
+ if (known_align >= TYPE_ALIGN (type))
{
if (TYPE_ALIGN (type) > desired_align)
{
diff --git a/gcc/stringpool.c b/gcc/stringpool.c
index 1edb46f66a6..afb9bdb0972 100644
--- a/gcc/stringpool.c
+++ b/gcc/stringpool.c
@@ -34,6 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "ggc.h"
#include "tree.h"
#include "hashtable.h"
+#include "cpplib.h"
/* The "" allocated string. */
const char empty_string[] = "";
@@ -50,6 +51,7 @@ static struct obstack string_stack;
static hashnode alloc_node PARAMS ((hash_table *));
static int mark_ident PARAMS ((struct cpp_reader *, hashnode, const PTR));
+static int ht_copy_and_clear PARAMS ((struct cpp_reader *, hashnode, const void *));
/* Initialize the string pool. */
void
@@ -214,6 +216,33 @@ struct string_pool_data GTY(())
static GTY(()) struct string_pool_data * spd;
+static int
+ht_copy_and_clear (r, hp, ht2_p)
+ cpp_reader *r ATTRIBUTE_UNUSED;
+ hashnode hp;
+ const void *ht2_p;
+{
+ cpp_hashnode *h = CPP_HASHNODE (hp);
+ struct ht *ht2 = (struct ht *) ht2_p;
+
+ if (h->type != NT_VOID
+ && (h->flags & NODE_BUILTIN) == 0)
+ {
+ cpp_hashnode *h2 = CPP_HASHNODE (ht_lookup (ht2,
+ NODE_NAME (h),
+ NODE_LEN (h),
+ HT_ALLOC));
+ h2->type = h->type;
+ memcpy (&h2->value, &h->value, sizeof (h->value));
+
+ h->type = NT_VOID;
+ memset (&h->value, 0, sizeof (h->value));
+ }
+ return 1;
+}
+
+static struct ht *saved_ident_hash;
+
void
gt_pch_save_stringpool ()
{
@@ -228,6 +257,18 @@ gt_pch_save_stringpool ()
spd->entries[i] = HT_IDENT_TO_GCC_IDENT (ident_hash->entries[i]);
else
spd->entries[i] = NULL;
+
+ saved_ident_hash = ht_create (14);
+ saved_ident_hash->alloc_node = alloc_node;
+ ht_forall (ident_hash, ht_copy_and_clear, saved_ident_hash);
+}
+
+void
+gt_pch_fixup_stringpool ()
+{
+ ht_forall (saved_ident_hash, ht_copy_and_clear, ident_hash);
+ ht_destroy (saved_ident_hash);
+ saved_ident_hash = 0;
}
void
diff --git a/gcc/system.h b/gcc/system.h
index 81988c51758..adece55d99b 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -270,6 +270,12 @@ extern int errno;
#ifndef WSTOPSIG
#define WSTOPSIG WEXITSTATUS
#endif
+#ifndef WCOREDUMP
+#define WCOREDUMP(S) ((S) & WCOREFLG)
+#endif
+#ifndef WCOREFLG
+#define WCOREFLG 0200
+#endif
/* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they
are defined to 0 then we must provide the relevant declaration
@@ -502,13 +508,16 @@ extern void abort PARAMS ((void));
#define HOST_BIT_BUCKET "/dev/null"
#endif
-/* Be conservative and only use enum bitfields with GCC.
+/* Be conservative and only use enum bitfields with GCC. Likewise for
+ char bitfields.
FIXME: provide a complete autoconf test for buggy enum bitfields. */
#if (GCC_VERSION > 2000)
#define ENUM_BITFIELD(TYPE) enum TYPE
+#define CHAR_BITFIELD unsigned char
#else
#define ENUM_BITFIELD(TYPE) unsigned int
+#define CHAR_BITFIELD unsigned int
#endif
#ifndef offsetof
diff --git a/gcc/target-def.h b/gcc/target-def.h
index a7f84c165eb..86774c1d59e 100644
--- a/gcc/target-def.h
+++ b/gcc/target-def.h
@@ -140,6 +140,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#endif
#endif
+#define TARGET_DWARF_REGISTER_SPAN hook_rtx_rtx_null
+
#ifndef TARGET_ASM_EXCEPTION_SECTION
#define TARGET_ASM_EXCEPTION_SECTION default_exception_section
#endif
@@ -310,6 +312,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_VECTOR_OPAQUE_P, \
TARGET_RTX_COSTS, \
TARGET_ADDRESS_COST, \
+ TARGET_DWARF_REGISTER_SPAN, \
TARGET_HAVE_NAMED_SECTIONS, \
TARGET_HAVE_CTORS_DTORS, \
TARGET_HAVE_TLS, \
diff --git a/gcc/target.h b/gcc/target.h
index 95c97b4e224..22558e9f778 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -334,6 +334,14 @@ struct gcc_target
invalid addresses. */
int (* address_cost) PARAMS ((rtx x));
+ /* Given a register, this hook should return a parallel of registers
+ to represent where to find the register pieces. Define this hook
+ if the register and its mode are represented in Dwarf in
+ non-contiguous locations, or if the register should be
+ represented in more than one register in Dwarf. Otherwise, this
+ hook should return NULL_RTX. */
+ rtx (* dwarf_register_span) PARAMS ((rtx));
+
/* Leave the boolean fields at the end. */
/* True if arbitrary sections are supported. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bb0450e9e72..c9113f00eda 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,564 @@
+2003-04-06 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gcc.misc-test/gcov-9.c: New test.
+ * gcc.misc-test/gcov-10.c: New test
+ * gcc.misc-test/gcov-11.c: New test.
+
+2003-04-05 Zack Weinberg <zack@codesourcery.com>
+
+ PR optimization/10024
+ * gcc.c-torture/compile/20030405-1.c: New test.
+
+2003-04-04 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.dg/pch/static-3.c: New.
+ * gcc.dg/pch/static-3.hs: New.
+ * gcc.dg/pch/pch.exp: Test with -O0 -g too.
+
+2003-04-04 Richard Henderson <rth@redhat.com>
+
+ * g++.dg/eh/forced1.C: Use _Unwind_SjLj_ForcedUnwind as appropriate.
+ * g++.dg/eh/forced2.C: Likewise.
+
+2003-04-03 Mike Stump <mrs@apple.com>
+
+ * lib/scanasm.exp (scan-assembler): Add xfail processing for
+ target arg.
+ (scan-assembler-times, scan-assembler-not): Likewise.
+ (scan-assembler-dem, scan-assembler-dem-not): Likewise.
+
+2003-04-03 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/sparc-loop-1.c: New test.
+
+2003-04-02 Geoffrey Keating <geoffk@apple.com>
+
+ PR other/9274
+ * g++.dg/pch/system-2.C: New.
+ * g++.dg/pch/system-2.Hs: New.
+
+2003-04-02 Aldy Hernandez <aldyh@redhat.com>
+
+ * g++.dg/eh/simd-2.C (vecfunc): Fix typo.
+
+ * g++.dg/eh/simd-1.C (vecfunc): Same.
+
+2003-04-01 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/20030401-1.c: New test case.
+
+2003-04-01 Ziemowit Laski <zlaski@apple.com>
+
+ * objc.dg/defs.m: New.
+
+2003-04-01 Aldy Hernandez <aldyh@redhat.com>
+
+ * g++.dg/eh/simd-1.C: New.
+ * g++.dg/eh/simd-2.C: New.
+
+2003-03-01 Aldy Hernandez <aldyh@redhat.com>
+
+ * gcc.c-torture/execute/simd-3.c: New.
+
+2003-03-31 Mark Mitchell <mark@codesourcery.com>
+
+ PR c/9936
+ * gcc.dg/20030331-2.c: New test.
+
+2003-03-31 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10278
+ * g++.dg/parse/crash2.C: New test.
+
+2003-03-31 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/compile/20030331-1.c: New test, moved from...
+ * gcc.c-torture/execute/20030331-1.c: ...here.
+
+2003-03-31 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/execute/20030331-1.c: New test.
+
+2003-03-31 Nathan Sidwell <nathan@codesourcery.com>
+
+ * lib/gcov.exp: Adjust call return testing strings.
+ * g77.dg/gcov/gcov-1.f: Don't expect unconditional branches.
+
+2003-03-31 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.dg/builtins-3.c: Add new tests for sin and cos.
+ * gcc.dg/builtins-7.c: New test case.
+ * gcc.dg/builtins-8.c: New test case.
+
+2003-03-31 Richard Sandiford <rsandifo@redhat.com>
+
+ * gcc.c-torture/execute/ieee/20030331-1.c: New test.
+
+2003-03-30 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/7647
+ * g++.dg/lookup-class-member-2.C: New test.
+
+2003-03-30 Glen Nakamura <glen@imodulo.com>
+
+ * gcc.dg/20030324-1.c: Add comments and abort if test fails.
+
+2003-03-28 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/ieee/fp-cmp-6.c: Correct test for -O0.
+
+2003-03-28 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/init/attrib1.C: New test.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp8.c: New test.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp7.c: New test.
+
+2003-03-28 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10047
+ * g++.dg/template/inline1.C: New test.
+
+2003-03-28 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/sparc-dwarf2.c: New test.
+
+2003-03-27 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/execute/ieee/fp-cmp-6.c: New test case.
+ * gcc.c-torture/execute/ieee/fp-cmp-7.c: New test case.
+
+2003-03-27 Mark Mitchell <mark@codesourcery.com>
+
+ * lib/gcov.exp (run-gcov): Add branches and calls options, rather
+ than reading .x files.
+ * g++.dg/gcov/gcov-1.C: Use run-gcov options, not .x files.
+ * g77.dg/gcov/gcov-1.f: Likewise.
+ * gcc.misc-tests/gcov-4b.c: Likewise.
+ * gcc.misc-tests/gcov-5b.c: Likewise.
+ * gcc.misc-tests/gcov-6.c: Likewise.
+ * gcc.misc-tests/gcov-7.c: Likewise.
+ * gcc.misc-tests/gcov-8.c: Likewise.
+ * g++.dg/gcov/gcov-1.x: Remove.
+ * g77.dg/gcov/gcov-1.x: Likewise.
+ * gcc.misc-tests/gcov-4b.x: Likewise.
+ * gcc.misc-tests/gcov-5b.x: Likewise.
+ * gcc.misc-tests/gcov-6.x: Likewise.
+ * gcc.misc-tests/gcov-7.x: Likewise.
+ * gcc.misc-tests/gcov-8.x: Likewise.
+
+2003-03-27 Glen Nakamura <glen@imodulo.com>
+
+ PR opt/10087
+ * gcc.dg/20030324-1.c: New test.
+
+2003-03-27 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/10224
+ * g++.dg/template/arg3.C: New test.
+
+ PR c++/10158
+ * g++.dg/template/friend18.C: New test.
+
+2003-03-26 Roger Sayle <roger@eyesopen.com>
+
+ * g77.f-torture/compile/20030326-1.f: New test case.
+
+2003-03-26 Janis Johnson <janis187@us.ibm.com>
+
+ * gcc.c-torture/execute/20020227-1.x: Don't XFAIL for powerpc64.
+
+ * gcc.c-torture/compile/simd-5.x: Expect XFAIL for powerpc64.
+
+2003-03-26 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/ia64-sync-3.c: New test.
+
+2003-03-26 Alan Modra <amodra@bigpond.net.au>
+
+ * gcc.dg/loop-2.c: Replace "inline" with "__inline__".
+
+2003-03-26 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp6.c: New test.
+
+2003-03-25 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/i386-signbit-1.c: New test.
+ * gcc.dg/i386-signbit-2.c: New test.
+ * gcc.dg/i386-signbit-3.c: New test.
+
+2003-03-25 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp5.c: Fix options.
+
+2003-03-24 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp5.c: Fix comment.
+
+2003-03-24 Bud Davis <bdavis9659@comcast.net>
+
+ PR fortran/10197
+ * g77.f-torture/execute/10197.f: New test.
+
+2003-03-24 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898, c++/383
+ * g++.dg/template/conv6.C: New test.
+
+ PR c++/10119
+ * g++.dg/template/ptrmem5.C: New test.
+
+ PR c++/10026
+ * g++.dg/lookup/koenig1.C: New test.
+
+ PR C++/10199
+ * g++.dg/lookup/template2.C: New test.
+
+2003-03-24 Jakub Jelinek <jakub@redhat.com>
+
+ * g++.dg/opt/rtti1.C: New test.
+
+2003-03-23 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/ultrasp5.c: New test.
+
+2003-03-23 Arpad Beszedes <beszedes@cc.u-szeged.hu>
+
+ PR middle-end/9967
+ * gcc.c-torture/execute/stdio-opt-1.c: Adjust test for change to
+ builtin fputs.
+
+2003-03-23 Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
+
+ PR c/8224
+ * gcc.dg/20030323-1.c: New test.
+
+2003-03-23 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.c-torture/compile/20030323-1.c: New test case.
+
+2003-03-22 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * gcc.dg/20030321-1.c: New test.
+
+2003-03-22 Zack Weinberg <zack@codesourcery.com>
+
+ * gcc.dg/Wshadow-1.c: Add a dg-warning line.
+
+2003-03-22 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9978, c++/9708
+ * g++.dg/ext/vlm1.C: Adjust expected error.
+ * g++.dg/ext/vla2.C: New test.
+ * g++.dg/template/arg1.C: New test.
+ * g++.dg/template/arg2.C: New test.
+
+2003-03-22 Bud Davis <bdavis9659@comcast.net>
+
+ * g77.f-torture/execute/select.f: New test.
+ * g77.f-torture/noncompile/select_no_compile.f: New test.
+
+2003-03-21 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9898
+ * g++.dg/other/error4.C: New test.
+
+2003-03-20 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/template/friend17.C: New test.
+
+2003-03-21 Alan Modra <amodra@bigpond.net.au>
+
+ * gcc.c-torture/compile/20030320-1.c: New.
+
+2003-03-20 Roger Sayle <roger@eyesopen.com>
+
+ * gcc.dg/builtins-6.c: New test case.
+
+2003-03-19 Alan Modra <amodra@bigpond.net.au>
+
+ PR target/10073
+ * gcc.c-torture/compile/20030319-1.c: New.
+
+2003-03-18 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/i386-cvt-1.c: New test.
+
+2003-03-17 Zack Weinberg <zack@codesourcery.com>
+
+ * objc.dg/naming-1.m: Use "(parse|syntax) error".
+ * objc.dg/naming-2.m: Likewise.
+
+2003-03-17 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9639
+ * g++.dg/parse/crash1.C: New test.
+
+2003-03-16 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/8805
+ * g++.dg/eh/cleanup1.C: New test.
+
+2003-03-16 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
+
+ * gcc.c-torture/execute/20030316-1.c: New test case.
+
+2003-03-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ PR c++/9629
+ * g++.dg/init/ctor2.C: New test.
+
+2003-03-15 Roger Sayle <roger@eyesopen.com>
+
+ * g77.f-torture/compile/xformat.f: New test case.
+
+2003-03-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * g++.old-deja/g++.mike/eh33.C: Remove xfail for hppa*-*-*.
+ * g++.old-deja/g++.mike/eh50.C: Likewise.
+
+2003-03-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/6440
+ * g++.dg/template/spec7.C: New test.
+ * g++.dg/template/spec8.C: Likewise.
+
+2003-03-14 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/execute/20030313-1.c: New test.
+
+2003-03-14 Richard Henderson <rth@redhat.com>
+
+ * gcc.dg/inline-2.c: Adjust alpha test for external call.
+
+2003-03-14 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.c-torture/compile/20030314-1.c: New test.
+
+2003-03-13 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * gcc.dg/dll-1.c: Remove thumb target. Change exp to _exp.
+ * gcc.dg/dll-2.c: Enable for cygwin and mingw. Remove
+ thumb target,
+ * gcc.dg/dll-3.c: Likewise. Adjust scan-assembler
+ to accept newer _imp__ prefix and additional
+ newline in .drectve section.
+ * gcc.dg/dll-4.c: Likewise.
+ * gcc.dg/dll-5.c: New file to test -mnop-fun-dllimport
+ switch.
+
+2003-03-13 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/parse/namespace9.C: New test.
+
+ * g++.dg/init/ref5.C: New test.
+ * g++.dg/parse/ptrmem1.C: Likewise.
+
+2003-03-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * gcc.dg/special/ecos.exp (gcsec-1.c): Find linker used by gcc.
+ * gcc.dg/old-style-asm-1.c (dg-final): Add hpux label alternative to
+ regular expression.
+ * gcc.dg/funcorder.c (dg-final): Check for "link_error,%r" on hppa*-*-*.
+ * gcc.dg/inline-1.c (dg-final): Check for "xyzzy?,%r" on hppa*-*-*.
+
+2003-03-12 Daniel Jacobowitz <drow@mvista.com>
+
+ * gcc.c-torture/execute/20030224-2.c: New test.
+
+2003-03-12 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/decl-3.c: New test.
+
+2003-03-12 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/i386-loop-2.c: New test.
+
+2003-03-11 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9474
+ * g++.dg/parse/namespace8.C: New test.
+
+ PR c++/9924
+ * g++.dg/overload/builtin2.C: New test.
+
+2003-03-11 Steven Bosscher <s.bosscher@student.tudelft.nl>
+
+ * gcc.dg/return-type-3.c: New test.
+
+2003-03-11 D.Venkatasubramanian <dvenkat@noida.hcltech.com>
+
+ * gcc.misc-tests/bprob.exp: Disable test cases for h8300-*-* as
+ profiling options are not supported.
+
+2003-03-10 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.old-deja/g++.benjamin/16077.C: Adjust warnings.
+ * g++.old-deja/g++.warn/impint2.C: Likewise.
+
+2003-03-10 Devang Patel <dpatel@apple.com>
+
+ * g++.dg/cpp/c++_cmd_1.C: New test.
+ * g++.dg/cpp/c++_cmd_1.h: New file.
+
+2003-03-10 Segher Boessenkool <segher@koffie.nl>
+
+ * gcc.dg/altivec-9.c: New file.
+
+2003-03-10 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * gcc.dg/ppc-sdata-1.c: New test.
+ * gcc.dg/ppc-sdata-2.c: New test.
+
+2003-03-09 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9373
+ * g++.dg/opt/ptrmem2.C: New test.
+
+ PR c++/8534
+ * g++.dg/opt/ptrmem1.C: New test.
+
+2003-03-09 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/i386-loop-1.c: New test.
+
+2003-03-09 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ PR c++/9970
+ * g++.dg/lookup/friend1.C: New test.
+
+2003-03-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9823
+ * g++.dg/parser/constructor1.C: New test.
+
+2003-03-08 Hans-Peter Nilsson <hp@bitrange.com>
+
+ * gcc.c-torture/execute/20020720-1.x: Add xfail for cris-*-*.
+
+ * gcc.dg/old-style-asm-1.c: Tweak to match mmix-knuth-mmixware.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * gcc.dg/cpp/Wunused.c: Update test.
+
+2003-03-08 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/inline-3.c: New test.
+
+2003-03-08 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9809
+ * g++.dg/parse/builtin1.C: New test.
+
+ PR c++/9982
+ * g++.dg/abi/cookie1.C: New test.
+ * g++.dg/abi/cookie2.C: Likewise.
+
+ PR c++/9524
+ * g++.dg/template/field1.C: New test.
+
+ PR c++/9912
+ * g++.dg/parse/class1.C: New test.
+ * g++.dg/parse/namespace7.C: Likewise.
+ * g++.old-deja/g++.other/decl5.C: Remove XFAILs.
+
+2003-03-07 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/init/ref4.C: New test.
+
+2003-03-07 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/i386-local2.c: Fix problems with certain versions of dejagnu.
+ * gcc.dg/inline-3.c: New test.
+
+2003-03-06 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/init/ref3.C: New test.
+
+ PR c++/9965
+ * g++.dg/init/ref2.C: New test.
+
+ PR c++/9400
+ * g++.dg/warn/Wshadow-2.C: New test.
+
+ PR c++/9791
+ * g++.dg/warn/Woverloaded-1.C: New test.
+
+2003-03-05 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/i386-local2.c: New.
+ * gcc.dg/i386-local.c: Fix typo.
+
+2003-03-05 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/abi/layout3.C: New test.
+
+2003-03-05 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.c-torture/compile/20030305-1.c
+
+2003-03-05 Jan Hubicka <jh@suse.cz>
+
+ * gcc.dg/i386-local.c: New.
+
+2003-03-04 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * gcc.dg/sh-relax.c: Disable for sh64-*-*.
+
+2003-03-04 Eric Botcazou <ebotcazou@libertysurf.fr>
+
+ * gcc.dg/switch-2.c: New test.
+ * gcc.dg/switch-3.c: New test.
+ * gcc.dg/Wswitch.c: Adjust line numbers.
+ * gcc.dg/Wswitch-default.c: Likewise.
+ * gcc.dg/Wswitch-enum.c: Likewise.
+
+2003-03-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * gcc.c-torture/execute/20030222-1.c: New test.
+
+2003-03-03 James E Wilson <wilson@tuliptree.org>
+
+ * gcc.dg/m68k-slp-ice.c: New test for PR c/7872.
+
+2003-03-03 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9878
+ * g++.dg/init/ref1.C: New test.
+
+2003-03-03 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * gcc.dg/sh-relax.c: New SH-only test.
+
+2003-03-03 Geoffrey Keating <geoffk@apple.com>
+
+ * gcc.c-torture/compile/20010327-1.c: Back out last change. Add
+ comment explaining purpose of testcase.
+
+2003-03-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * gcc.c-torture/execute/960312-1.x: New file, must pass -mshort
+ for HC11/HC12 (asm needs two int registers).
+ * gcc.c-torture/compile/20020312-1.x: New file, don't execute on
+ HC11/HC12 because the test uses an asm which needs two 32-bit
+ registers.
+
+2003-03-02 Stephane Carrez <stcarrez@nerim.fr>
+
+ * gcc.c-torture/compile/920501-12.x: New file, must pass -mshort
+ for HC11/HC12 (array is too large otherwise).
+ * gcc.c-torture/compile/920501-4.x: New file, likewise.
+ * gcc.c-torture/compile/20010518-2.x: Likewise.
+ * gcc.c-torture/compile/980506-1.x: Don't execute this test on
+ HC11/HC12 (array is too large).
+
2003-03-01 Geoffrey Keating <geoffk@apple.com>
* lib/gcc-dg.exp (gcc-dg-test): Change .pch to .gch.
@@ -53,7 +614,7 @@
PR c++/9829
* g++.dg/parse/namespace6.C: New test.
-
+
2003-02-25 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
PR target/9732
@@ -85,7 +646,7 @@
PR c++/5333
* g++.dg/parse/fused-params1.C: Adjust error messages.
* g++.dg/template/nested3.C: New test.
-
+
2003-02-24 Alan Modra <amodra@bigpond.net.au>
* g++.dg/abi/param1.C: New test.
@@ -97,22 +658,22 @@
2003-02-22 Kelley Cook <kelleycook@comcast.net>
- * g++.old-deja/g++.other/store-expr1.C: Replace "mcpu"
- with "mtune".
- * g++.old-deja/g++.other/store-expr2.C: Likewise.
- * gcc.c-torture/execute/20010129-1.x: Likewise.
- * gcc.dg/20011107-1.c: Likewise.
- * gcc.dg/20020108-1.c: Likewise.
- * gcc.dg/20020122-3.c: Likewise.
- * gcc.dg/20020206-1.c: Likewise.
- * gcc.dg/20020310-1.c: Likewise.
- * gcc.dg/20020426-2.c: Likewise.
- * gcc.dg/20020517-1.c: Likewise.
- * gcc.dg/991230-1.c: Likewise.
- * gcc.dg/i386-unroll-1.c: Likewise.
- * gcc.misc-tests/i386-prefetch.exp: Likewise.
-
-Sat Feb 22 20:14:12 CET 2003 Jan Hubicka <jh@suse.cz>
+ * g++.old-deja/g++.other/store-expr1.C: Replace "mcpu"
+ with "mtune".
+ * g++.old-deja/g++.other/store-expr2.C: Likewise.
+ * gcc.c-torture/execute/20010129-1.x: Likewise.
+ * gcc.dg/20011107-1.c: Likewise.
+ * gcc.dg/20020108-1.c: Likewise.
+ * gcc.dg/20020122-3.c: Likewise.
+ * gcc.dg/20020206-1.c: Likewise.
+ * gcc.dg/20020310-1.c: Likewise.
+ * gcc.dg/20020426-2.c: Likewise.
+ * gcc.dg/20020517-1.c: Likewise.
+ * gcc.dg/991230-1.c: Likewise.
+ * gcc.dg/i386-unroll-1.c: Likewise.
+ * gcc.misc-tests/i386-prefetch.exp: Likewise.
+
+2003-02-22 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-mul.c: New test.
@@ -158,7 +719,7 @@ Sat Feb 22 20:14:12 CET 2003 Jan Hubicka <jh@suse.cz>
PR c++/9729
* g++.dg/abi/conv1.C: New test.
-Thu Feb 20 14:38:13 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-20 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/20020720-1.x: XFAIL for x86-64.
@@ -166,7 +727,7 @@ Thu Feb 20 14:38:13 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/20030219-1.c: New test.
-Tue Feb 18 23:28:53 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-18 Jan Hubicka <jh@suse.cz>
* gcc.dg/funcorder.c: New test.
@@ -203,7 +764,7 @@ Tue Feb 18 23:28:53 CET 2003 Jan Hubicka <jh@suse.cz>
PR c++/9457
* g++.dg/template/init1.C: New test.
-Sun Feb 16 23:08:19 CET 2003 Jan HUbicka <jh@suse.cz>
+2003-02-16 Jan HUbicka <jh@suse.cz>
* gcc.dg/c90-const-expr-3.c (DZERO): New static variable
(foo): Add few extra tests
@@ -250,7 +811,7 @@ Sun Feb 16 23:08:19 CET 2003 Jan HUbicka <jh@suse.cz>
* gcc.dg/decl-2.c: New test.
-Mon Feb 10 11:41:20 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-10 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-fpcvt-1.c: New test.
@@ -343,7 +904,7 @@ Mon Feb 10 11:41:20 CET 2003 Jan Hubicka <jh@suse.cz>
PR c++/8736
* g++.dg/parse/missing-template1.C: New test.
-Tue Feb 4 21:41:09 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-04 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-cadd.c: Compile using -march=k8.
* gcc.dg/i386-cmov?.c: Likewise.
@@ -357,7 +918,7 @@ Tue Feb 4 21:41:09 CET 2003 Jan Hubicka <jh@suse.cz>
PR c++/7129
* testsuite/g++.dg/ext/max.C: New test.
-Mon Feb 3 16:05:11 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-02-03 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/20030203-1.c: New test.
@@ -408,7 +969,7 @@ Mon Feb 3 16:05:11 CET 2003 Jan Hubicka <jh@suse.cz>
* g++.dg/lookup/nested1.C: Test moved from ...
* g++.old-deja/g++.other/lookup24.C: ... here.
-Tue Jan 28 12:19:35 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-28 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-cmov5.c: New test.
@@ -459,7 +1020,7 @@ Tue Jan 28 12:19:35 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.dg/20030123-1.c: New test.
-Sat Jan 25 21:06:49 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
PR opt/8492
* gcc.c-torture/compile/20030125-1.c
@@ -485,7 +1046,7 @@ Sat Jan 25 21:06:49 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/switch-1.c: New test case.
-Sat Jan 25 12:32:55 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-25 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/20030125-1.[cx]: New test.
@@ -585,7 +1146,7 @@ Sat Jan 25 12:32:55 CET 2003 Jan Hubicka <jh@suse.cz>
PR c++/9388
* g++.dg/parse/lookup2.C: Likewise.
-Tue Jan 21 18:01:35 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-21 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/990208-1.c: Add noinline attributes as needed.
* gcc.c-torture/execute/eeprof-1.c: Likewise.
@@ -685,7 +1246,7 @@ Tue Jan 21 18:01:35 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/961203-1.x: Likewise.
* gcc.c-torture/compile/20020604-1.x: Likewise.
-Wed Jan 15 12:20:52 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-15 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/20030115-1.c: New test.
@@ -699,7 +1260,7 @@ Wed Jan 15 12:20:52 CET 2003 Jan Hubicka <jh@suse.cz>
* g++.old-deja/g++.abi/vmihint.C (main): Revise expected flags per
the specification.
-Tue Jan 14 00:45:03 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-14 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-fpcvt-1.c: New test.
* gcc.dg/i386-fpcvt-2.c: New test.
@@ -907,7 +1468,7 @@ Tue Jan 14 00:45:03 CET 2003 Jan Hubicka <jh@suse.cz>
* g++.dg/template/friend13.C: Likewise.
* g++.old-deja/g++.eh/spec6.C: Add missing error message.
-Wed Jan 8 11:41:47 CET 2003 Jan Hubicka <jh@suse.cz>
+2003-01-08 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-cadd.c: New test.
* gcc.dg/i386-cmov4.c: Likewise.
@@ -1518,11 +2079,11 @@ Wed Jan 8 11:41:47 CET 2003 Jan Hubicka <jh@suse.cz>
* gcc.dg/bitfld-6.c: New test.
-Wed Nov 27 14:37:34 CET 2002 Jan Hubicka <jh@suse.cz>
+2002-11-27 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/20021127.[cx]: New test.
-Tue Nov 26 22:09:53 CET 2002 Jan Hubicka <jh@suse.cz>
+2002-11-26 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-cmov[123].c: New tests for conditional move code
quality.
@@ -1667,12 +2228,12 @@ Tue Nov 26 22:09:53 CET 2002 Jan Hubicka <jh@suse.cz>
PR c++/8389
* g++.dg/template/access6.C: New test.
-Fri Nov 8 13:13:53 CET 2002 Jan Hubicka <jh@suse.cz>
+2002-11-08 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-ssefp-1.c: New test.
* gcc.dg/i386-ssefp-1.c: New test.
-Fri Nov 8 10:52:15 CET 2002 Jan Hubicka <jh@suse.cz>
+2002-11-08 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/20021108-1.c: New testcase for x86-64 failure.
@@ -1975,7 +2536,7 @@ Fri Nov 8 10:52:15 CET 2002 Jan Hubicka <jh@suse.cz>
PR c++/7584
* g++.dg/inherit/using3.C: New test.
-Thu Oct 17 19:12:58 CEST 2002 Jan Hubicka <jh@suse.cz>
+2002-10-17 Jan Hubicka <jh@suse.cz>
* gcc.dg/20021017-2.c: New test.
@@ -2031,11 +2592,11 @@ Thu Oct 17 19:12:58 CEST 2002 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/20021015-1.c: New test.
-Tue Oct 15 14:22:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-10-15 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/weak/typeof-2.c: For SH targets, return before baz3 test.
-Mon Oct 14 20:37:51 CEST 2002 Jan Hubicka <jh@suse.cz>
+2002-10-14 Jan Hubicka <jh@suse.cz>
* gcc.dg/i386-ssetype-[1-5].c: New tests.
@@ -2076,7 +2637,7 @@ Mon Oct 14 20:37:51 CEST 2002 Jan Hubicka <jh@suse.cz>
* gcc.dg/cpp/assembler.S: Don't use -ansi.
-Fri Oct 11 10:56:49 2002 Richard Shann <richard.shann@superh.com>
+2002-10-11 Richard Shann <richard.shann@superh.com>
* gcc.c-torture/compile/simd-5.c: New test.
@@ -2310,7 +2871,7 @@ Fri Oct 11 10:56:49 2002 Richard Shann <richard.shann@superh.com>
* g++.old-deja/g++.other/crash32.C: Mark ICE.
-Tue Sep 17 13:59:45 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-09-17 Nicola Pero <n.pero@mi.flashnet.it>
* objc.dg/comp-types-1.m: New test.
* objc.dg/comp-types-2.m: New test.
@@ -2463,7 +3024,7 @@ Tue Sep 17 13:59:45 2002 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.dg/cpp/_Pragma4.c: Fix typo.
-Fri Sep 6 16:39:37 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-09-06 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/formal_protocol-6.x: Removed. This testcase is now
expected to pass.
@@ -2493,7 +3054,7 @@ Fri Sep 6 16:39:37 2002 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.dg/weak-8.c: Ditto.
* gcc.dg/weak-9.c: Ditto.
-Thu Sep 5 00:34:33 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-09-05 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/loop-14.c: New test.
@@ -2512,11 +3073,11 @@ Thu Sep 5 00:34:33 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/cpp/_Pragma4.c: New test.
-Tue Sep 3 11:04:26 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-09-03 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/nil_method-1.m: New testcase.
-Sun Sep 1 12:47:39 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-09-01 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/class-tests-1.h (test_class_with_superclass): Call
[Object class], not [Object initialize].
@@ -2532,7 +3093,7 @@ Sun Sep 1 12:47:39 2002 Nicola Pero <n.pero@mi.flashnet.it>
* testsuite/g++.dg/abi/bitfield5.C: New test.
* testsuite/g++.dg/abi/vbase10.C: Likewise.
-Tue Aug 27 22:23:22 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-08-27 Nicola Pero <n.pero@mi.flashnet.it>
* objc.dg/undeclared-selector.m: New test.
@@ -2747,7 +3308,7 @@ Tue Aug 27 22:23:22 2002 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.c-torture/execute/va-arg-15.x, va-arg-16.x, va-arg-17.x:
Delete.
-Tue Jul 23 21:02:43 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-07-23 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/compile/simd-4.c: New test.
@@ -2833,7 +3394,7 @@ Tue Jul 23 21:02:43 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/compile/20020710-1.c: New test.
-Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-07-11 J"orn Rennecke <joern.rennecke@superh.com>
Andrew Pinski <pinskia@physics.uc.edu>
gcc.c-torture/compile/simd-2.c: New testcase.
@@ -2896,7 +3457,7 @@ Thu Jul 11 15:39:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
* g++.dg/debug/debug6.C: New test.
* g++.dg/debug/debug7.C: New test.
-Thu Jul 4 07:36:48 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-07-04 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/compile/simd-3.c: New test.
@@ -2911,7 +3472,7 @@ Thu Jul 4 07:36:48 2002 J"orn Rennecke <joern.rennecke@superh.com>
* g++.dg/init/array4.C: New test.
* g++.dg/init/array5.C: New test.
-Wed Jul 3 10:25:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-07-03 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/simd-1.c (main): Also test &, |, ^, ~.
* gcc.c-torture/execute/simd-2.c (main): Likewise.
@@ -2980,7 +3541,7 @@ Wed Jul 3 10:25:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
* lib/objc-torture.exp (objc-torture-compile): ...instead of here
(objc-torture-execute): or here.
-Mon Jul 1 12:51:05 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-07-01 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/arith-rand-ll.c: New test.
@@ -3007,7 +3568,7 @@ Mon Jul 1 12:51:05 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/string-opt-8.c (strncmp): Fix typo in
return type.
-Thu Jun 27 15:23:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-06-27 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/simd-2.c (i, j): Add initializer elements to
avoid division by zero.
@@ -3016,7 +3577,7 @@ Thu Jun 27 15:23:21 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/Wunknownprag.c: New tests.
-Tue Jun 25 21:50:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-06-25 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/simd-2.c: New test.
@@ -3283,7 +3844,7 @@ Tue Jun 25 21:50:38 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc/testsuite/gcc.dg/weak-8.c: New test.
-Thu May 23 11:09:26 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-05-23 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/weak-2.c: Allow optional leading underscore
in scan-assembler symbol name.
@@ -3320,11 +3881,11 @@ Thu May 23 11:09:26 2002 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/tls/tls.exp, gcc.dg/tls/trivial.c, gcc.dg/tls/diag-1.c,
gcc.dg/tls/diag-2.c, gcc.dg/tls/init-1.c: New directory and files.
-Tue May 21 14:25:32 2002 Brian R. Gaeke <brg@dgate.ORG>
+2002-05-21 Brian R. Gaeke <brg@dgate.ORG>
* g++.dg/other/copy2.C: New test.
-Mon May 20 10:51:35 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-05-20 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.c-torture/execute/memcpy-2.c (SEQUENCE_LENGTH): Define.
(MAX_COPY): Bump up to 10 times sizeof (long long).
@@ -3560,7 +4121,7 @@ Mon May 20 10:51:35 2002 J"orn Rennecke <joern.rennecke@superh.com>
PR c++/6438.
* g++.dg/parse/stmtexpr2.C: New test.
-Wed Apr 24 21:38:36 2002 J"orn Rennecke <joern.rennecke@superh.com>
+2002-04-24 J"orn Rennecke <joern.rennecke@superh.com>
* gcc.dg/20020312-2.c: Add SH target.
@@ -3901,7 +4462,7 @@ Wed Apr 24 21:38:36 2002 J"orn Rennecke <joern.rennecke@superh.com>
* g++.old-deja/g++.law/bit-fields2.C: Skip on mmix-knuth-mmixware.
-Thu Mar 28 16:38:09 2002 Jeffrey A Law (law@redhat.com)
+2002-03-28 Jeffrey A Law (law@redhat.com)
* gcc.c-torture/execute/20020328-1.c: New test.
@@ -4132,7 +4693,7 @@ Thu Mar 28 16:38:09 2002 Jeffrey A Law (law@redhat.com)
* gcc.dg/20020122-4.c: Ditto.
* gcc.dg/inline-2.c: Ditto.
-Thu Mar 14 14:28:38 2002 Jeffrey A Law (law@cygnus.com)
+2002-03-14 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20020314-1.c: New test.
@@ -4213,7 +4774,7 @@ Thu Mar 14 14:28:38 2002 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/va-arg-22.c: New test.
-Sat Mar 9 07:47:50 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2002-03-09 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/compile/20020309-1.c: New test.
@@ -4221,7 +4782,7 @@ Sat Mar 9 07:47:50 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/execute/20020307-2.c: New test.
-Thu Mar 7 10:05:31 2002 Jeffrey A Law (law@redhat.com)
+2002-03-07 Jeffrey A Law (law@redhat.com)
* g77.f-torture/compile/20020307-1.f: New test.
@@ -4920,7 +5481,7 @@ Thu Mar 7 10:05:31 2002 Jeffrey A Law (law@redhat.com)
* gcc.dg/i386-mmx-1.c, gcc.dg/i386-mmx-2.c: New.
* gcc.dg/i386-sse-1.c, gcc.dg/i386-sse-2.c, gcc.dg/i386-sse-1.c: New.
-Fri Jan 11 12:13:30 2002 Nicola Pero <n.pero@mi.flashnet.it>
+2002-01-11 Nicola Pero <n.pero@mi.flashnet.it>
* objc.dg/special/unclaimed-category-1.m: Include objc/objc-api.h.
@@ -4943,7 +5504,7 @@ Fri Jan 11 12:13:30 2002 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.c-torture/execute/20020108-1.c: Rewrite to choose the proper
type in which to perform the operation for each size.
-Wed Jan 9 16:48:33 2002 Alan Matsuoka (alanm@redhat.com)
+2002-01-09 Alan Matsuoka (alanm@redhat.com)
* gcc.c-torture/compile/20020109-2.c: New test.
@@ -4969,7 +5530,7 @@ Wed Jan 9 16:48:33 2002 Alan Matsuoka (alanm@redhat.com)
* gcc.dg/20010822-1.c: New test.
* gcc.dg/20011107-1.c: New test.
-Wed Jan 9 14:03:20 2002 Jeffrey A Law (law@redhat.com)
+2002-01-09 Jeffrey A Law (law@redhat.com)
* gcc.dg/asm-fs-1.c: Disable warnings when compiling.
@@ -5235,11 +5796,11 @@ Wed Jan 9 14:03:20 2002 Jeffrey A Law (law@redhat.com)
* g++.dg/other/error1.C: New test.
-Mon Dec 17 14:31:42 2001 Jeffrey A Law (law@redhat.com)
+2001-12-17 Jeffrey A Law (law@redhat.com)
* gcc.c-torture/execute/20011217-1.c: New test.
-Mon Dec 17 16:54:56 2001 Nicola Pero <nicola@brainstorm.co.uk>
+2001-12-17 Nicola Pero <nicola@brainstorm.co.uk>
* objc.dg/special/: New directory.
* objc.dg/special/special.exp: New file.
@@ -5273,7 +5834,7 @@ Mon Dec 17 16:54:56 2001 Nicola Pero <nicola@brainstorm.co.uk>
std::__malloc_alloc_template<0> and
std::__default_alloc_template<false, 0>.
-Thu Dec 13 10:35:33 2001 Nicola Pero <n.pero@mi.flashnet.it>
+2001-12-13 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/bf-21.m: New test.
* objc/execute/enumeration-1.m: New test.
@@ -5352,7 +5913,7 @@ Thu Dec 13 10:35:33 2001 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.dg/sparc-ret.c: New file, test return corruption bug for
ultrasparc.
-Fri Dec 7 06:29:03 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2001-12-07 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* g++-old.deja/g++.robertl/eb101.C: Deleted.
@@ -5439,7 +6000,7 @@ Fri Dec 7 06:29:03 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* g++.old-deja/g++.pt/memtemp100.C: Remove non-standard
constructs.
-Wed Nov 28 15:05:54 2001 Jeffrey A Law (law@cygnus.com)
+2001-11-28 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20011128-1.c: New test.
@@ -5463,7 +6024,7 @@ Wed Nov 28 15:05:54 2001 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20011121-1.c: New test.
-Fri Nov 23 15:55:44 2001 Jeffrey A Law (law@cygnus.com)
+2001-11-23 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/ieee/20011123-1.c: New test.
@@ -5660,7 +6221,7 @@ Fri Nov 23 15:55:44 2001 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20011029-1.c: New test.
-Mon Oct 29 21:19:53 2001 Nicola Pero <n.pero@mi.flashnet.it>
+2001-10-29 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/class_self-1.m: New test.
* objc/execute/class_self-2.m: New test.
@@ -6235,7 +6796,7 @@ Mon Oct 29 21:19:53 2001 Nicola Pero <n.pero@mi.flashnet.it>
* g77.f-torture/execute/intrinsic-vax-cd.f: New test
* g77.f-torture/execute/intrinsic-f2c-z.f: New test
-Mon Jul 23 10:14:17 2001 Jeffrey A Law (law@cygnus.com)
+2001-07-23 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20010723-1.c: New test.
@@ -6299,7 +6860,7 @@ Mon Jul 23 10:14:17 2001 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20001229-1.c: Include <sys/proc.h> for
UAC_SIGBUS, UAC_NOPRINT definitions.
-Mon Jul 16 12:21:56 2001 Nicola Pero <n.pero@mi.flashnet.it>
+2001-07-16 Nicola Pero <n.pero@mi.flashnet.it>
* objc/execute/object_is_class.m: New test.
* objc/execute/object_is_meta_class.m: New test.
@@ -6351,7 +6912,7 @@ Mon Jul 16 12:21:56 2001 Nicola Pero <n.pero@mi.flashnet.it>
* gcc.c-torture/compile/20010701-1.c,
g++.old-deja/g++.ext/attrib6.C: New tests.
-Fri Jul 6 09:31:43 2001 Jeffrey A Law (law@cygnus.com)
+2001-07-06 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20010706-1.c: New test.
@@ -6665,7 +7226,7 @@ Wed May 23 2001 Jeffrey D. Oldham <oldham@codesourcery.com>
* gcc.dg/complete-port.c: New (revised version of libgcc1-test.c)
-Wed May 16 20:33:57 CEST 2001 Jan Hubicka <jh@suse.cz>
+2001-05-16 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/compile/20010516-1.c: New test.
@@ -6812,7 +7373,7 @@ Wed May 16 20:33:57 CEST 2001 Jan Hubicka <jh@suse.cz>
* g77.f-torture/compile/20000629-1.x: Remove - error
has been fixed.
-Thu Apr 26 11:15:12 2001 Jeffrey A Law (law@cygnus.com)
+2001-04-26 Jeffrey A Law (law@cygnus.com)
* g++.dg/special/initp1.C: Moved here from g++.old-deja/g++.ext.
Tweak slightly to work with g++.dg framework.
@@ -7020,7 +7581,7 @@ Thu Apr 26 11:15:12 2001 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.brendan/crash15.C (main): Same.
* g++.old-deja/g++.brendan/copy9.C: Same.
-Fri Apr 6 15:36:15 2001 J"orn Rennecke <amylaar@redhat.com>
+2001-04-06 J"orn Rennecke <amylaar@redhat.com>
* gcc.c-torture/execute/20001203-2.c (memset):
Count argument is of type __SIZE_TYPE__.
@@ -7263,7 +7824,7 @@ Fri Apr 6 15:36:15 2001 J"orn Rennecke <amylaar@redhat.com>
* g++.old-deja/g++.other/inline20.C: New test.
-Wed Feb 21 12:38:22 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
+2001-02-21 Ovidiu Predescu <ovidiu@cup.hp.com>
* objc/execute/nested-1.m: Added (contributed by Nicola Pero).
@@ -7295,11 +7856,11 @@ Wed Feb 21 12:38:22 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
* gcc.c-torture/execute/longlong.c: New test.
-Wed Feb 14 21:41:17 2001 J"orn Rennecke <amylaar@redhat.com>
+2001-02-14 J"orn Rennecke <amylaar@redhat.com>
* g++.old-deja/g++.brendan/new2.C (main): Use sizeof.
-Wed Feb 14 21:31:25 2001 J"orn Rennecke <amylaar@redhat.com>
+2001-02-14 J"orn Rennecke <amylaar@redhat.com>
* gcc.c-torture/execute/920302-1.c (execute):
Change argument type to short.
@@ -7389,7 +7950,7 @@ Wed Feb 14 21:31:25 2001 J"orn Rennecke <amylaar@redhat.com>
* g++.dg/stdbool-if.C: New test.
-Wed Feb 7 09:54:47 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
+2001-02-07 Ovidiu Predescu <ovidiu@cup.hp.com>
* objc/execute/fdecl.m: Added main().
@@ -7401,7 +7962,7 @@ Wed Feb 7 09:54:47 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
* gcc.dg/cpp/avoidpaste1.c: Update.
-Tue Feb 5 8:53:33 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
+2001-02-05 Ovidiu Predescu <ovidiu@cup.hp.com>
* objc/execute/bycopy-1.m, bycopy-2.m: Added new tests from Nicola
Pero <nicola@brainstorm.co.uk>.
@@ -7452,7 +8013,7 @@ Tue Feb 5 8:53:33 2001 Ovidiu Predescu <ovidiu@cup.hp.com>
* gcc.dg/c99-float-1.c: Back out "XFAIL FLT_EVAL_METHOD and
DECIMAL_DIG cases for Irix."
-Wed Jan 31 12:23:32 2001 J"orn Rennecke <amylaar@redhat.com>
+2001-01-31 J"orn Rennecke <amylaar@redhat.com>
* gcc.c-torture/execute/920302-1.c: Cast 0 to pointer.
@@ -7940,7 +8501,7 @@ Wed Jan 31 12:23:32 2001 J"orn Rennecke <amylaar@redhat.com>
* gcc.c-torture/compile/20001222-1.x: Remove.
-Thu Jan 4 13:54:11 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2001-01-04 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/execute/built-in-setjmp.c: New.
@@ -8044,11 +8605,11 @@ Thu Jan 4 13:54:11 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/compile/20001222-1.c: New test.
* gcc.c-torture/compile/20001222-1.x: Xfail.
-Fri Dec 22 06:45:03 2000 Alexandre Oliva <aoliva@redhat.com>
+2000-12-22 Alexandre Oliva <aoliva@redhat.com>
* gcc.c-torture/execute/comp-goto-2.c: New test.
-Thu Dec 21 22:43:03 2000 J"orn Rennecke <amylaar@redhat.com>
+2000-12-21 J"orn Rennecke <amylaar@redhat.com>
* gcc.c-torture/execute/comp-goto-1.c (uint32, sint32):
Use long types if __INT_MAX__ is 32767.
@@ -8763,7 +9324,7 @@ Thu Dec 21 22:43:03 2000 J"orn Rennecke <amylaar@redhat.com>
* gcc.dg/cpp/include2.c: New tests.
-Fri Nov 3 13:32:14 2000 Mark P Mitchell <mark@codesourcery.com>
+2000-11-03 Mark P Mitchell <mark@codesourcery.com>
* lib/g++.exp (g++_set_ld_library_path): New function.
Use it to set LD_LIBRARYN32_PATH and LD_LIBRARY64_PATH.
@@ -9142,7 +9703,7 @@ Fri 15-Sep-2000 06:50:11 BST Neil Booth <NeilB@earthling.net>
* gcc.dg/cpp/paste10.c: Testcase for PASTE_LEFT buglet.
-Thu Sep 14 16:48:49 2000 Jeffrey A Law (law@cygnus.com)
+2000-09-14 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000914-1.c: New test.
@@ -9155,7 +9716,7 @@ Thu Sep 14 16:48:49 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/widechar-2.c: New test for wchar_t
constant by Ulrich Drepper <drepper@redhat.com>.
-Tue Sep 12 18:32:07 2000 J"orn Rennecke <amylaar@redhat.co.uk>
+2000-09-12 J"orn Rennecke <amylaar@redhat.co.uk>
* gcc.c-torture/compile/981006-1.x: No -fpic for sh-coff / sh-hms.
@@ -9391,7 +9952,7 @@ Tue Sep 12 18:32:07 2000 J"orn Rennecke <amylaar@redhat.co.uk>
* gcc.dg/20000724-1.c: New test.
* gcc.dg/20000807-1.c: New test.
-Sun Aug 20 01:41:35 MSD 2000 Dennis Chernoivanov <cdi@sparc.spb.su>
+2000-08-20 Dennis Chernoivanov <cdi@sparc.spb.su>
* gcc.dg/cpp/pragma-1.c: New test.
* gcc.dg/cpp/pragma-2.c: New test.
@@ -9401,7 +9962,7 @@ Sun Aug 20 01:41:35 MSD 2000 Dennis Chernoivanov <cdi@sparc.spb.su>
* gcc.dg/cpp/lexstrng.c: Don't include string.h.
* gcc.dg/cpp/paste2.c: Don't include string.h. Prototype strcmp.
-Fri Aug 18 16:57:35 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-08-18 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/compile/20000818-1.c: New test.
@@ -9512,7 +10073,7 @@ Fri Aug 18 16:57:35 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.dg/c90-printf-2.c, gcc.dg/c99-printf-2.c: New tests.
-Sun Aug 6 11:41:51 2000 Ovidiu Predescu <ovidiu@cup.hp.com>
+2000-08-06 Ovidiu Predescu <ovidiu@cup.hp.com>
* lib/objc.exp (objc_target_compile): Set the ld_library_path so
that running programs linked against the shared version of libobjc
@@ -9549,7 +10110,7 @@ Sun Aug 6 11:41:51 2000 Ovidiu Predescu <ovidiu@cup.hp.com>
* gcc.dg/cpp/20000625-2.c: Expect warning on line 8, not 9.
* gcc.dg/compare2.c: No longer expected to fail.
-Fri Aug 4 23:00:50 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
+2000-08-04 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/20000804-1.c: New test.
@@ -9561,7 +10122,7 @@ Fri Aug 4 23:00:50 2000 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.dg/cpp/20000625-2.c: Don't expect a warning on line 4.
-Thu Aug 3 01:46:33 2000 Jeffrey A Law (law@cygnus.com)
+2000-08-03 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000803-1.c: New test.
@@ -9585,7 +10146,7 @@ Thu Aug 3 01:46:33 2000 Jeffrey A Law (law@cygnus.com)
* gcc.dg/cpp/macsyntx.c: Fix error regexp.
-Mon Jul 31 21:14:49 2000 Jeffrey A Law (law@cygnus.com)
+2000-07-31 Jeffrey A Law (law@cygnus.com)
* gcc-c-torture/execute/20000731-2.c: New test.
@@ -9623,7 +10184,7 @@ Mon Jul 31 21:14:49 2000 Jeffrey A Law (law@cygnus.com)
* gcc.dg/c90-impl-int-2.c, gcc.dg/c99-impl-int-2.c: New tests.
-Wed Jul 26 19:41:51 2000 Hans-Peter Nilsson <hp@axis.com>
+2000-07-26 Hans-Peter Nilsson <hp@axis.com>
* gcc.c-tortuer/execute/20000726-1.c: New test.
@@ -9729,7 +10290,7 @@ Wed Jul 26 19:41:51 2000 Hans-Peter Nilsson <hp@axis.com>
* gcc.dg/cpp/cmdlne-dM.c: New test.
* gcc.dg/cpp/cmdlne-dD.c: New test.
-Mon Jul 17 03:13:12 2000 Jeffrey A Law (law@cygnus.com)
+2000-07-17 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000717-3.c: New test.
@@ -9757,7 +10318,7 @@ Mon Jul 17 03:13:12 2000 Jeffrey A Law (law@cygnus.com)
* gcc.dg/c99-impl-int-1.c, gcc.dg/c99-longlong-1.c,
* gcc.dg/c99-restrict-1.c, gcc.dg/c99-return-1.c: New tests.
-Mon Jul 17 00:41:57 2000 Greg McGary <greg@mcgary.org>
+2000-07-17 Greg McGary <greg@mcgary.org>
* gcc.c-torture/execute/20000717-1.c: New test.
* gcc.c-torture/execute/20000717-1.x: Expected to fail.
@@ -9972,7 +10533,7 @@ Mon Jul 17 00:41:57 2000 Greg McGary <greg@mcgary.org>
* gcc.dg/980217-1.c: Declare abort.
* gcc.dg/cpp/20000628-1a.h: Use a declaration instead of an asm.
-Thu Jun 29 09:42:40 2000 Jeffrey A Law (law@cygnus.com)
+2000-06-29 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/compile/20000629-1.f: New test.
* g77.f-torture/compile/20000629-1.x: Expected to fail.
@@ -10241,11 +10802,11 @@ Thu Jun 29 09:42:40 2000 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/old-deja.exp: Add -Wno-long-long.
-Fri Jun 9 22:46:34 2000 Jeffrey A Law (law@cygnus.com)
+2000-06-09 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000609-1.c: New test.
-Fri Jun 9 21:54:28 2000 Clinton Popetz <cpopetz@cygnus.com>
+2000-06-09 Clinton Popetz <cpopetz@cygnus.com>
* gcc.dg/20000609-1.c: New test.
@@ -10414,7 +10975,7 @@ Fri Jun 9 21:54:28 2000 Clinton Popetz <cpopetz@cygnus.com>
* gcc.c-torture/execute/conversion.c: Ditto.
* gcc.c-torture/execute/cvt-1.c: Ditto.
-Thu May 18 16:03:29 2000 Jeffrey A Law (law@cygnus.com)
+2000-05-18 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000518-1.c: New test.
@@ -10422,7 +10983,7 @@ Thu May 18 16:03:29 2000 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/compile/200005018.f: New test.
-Wed May 17 18:30:10 2000 Jeffrey A Law (law@cygnus.com)
+2000-05-17 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000517-1.c: New test.
@@ -10439,7 +11000,7 @@ Wed May 17 18:30:10 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990208-1.c (main): Don't pass
constants through to doit's conditional.
-Thu May 11 19:02:43 2000 Jeffrey A Law (law@cygnus.com)
+2000-05-11 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000511-1.c: New test.
* g77.f-torture/compile/20000511-1.f: New test.
@@ -10492,7 +11053,7 @@ Thu May 11 19:02:43 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000504-1.c: New test. Derived from
OpenSSL by Jason R Thorpe.
-Wed May 3 13:02:10 2000 Jim Wilson <wilson@cygnus.com>
+2000-05-03 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/20000503-1.c: New test for extract_muldiv bug.
@@ -10519,7 +11080,7 @@ Thu Apr 27 15:58:18 MET DST 2000 Jan Hubicka <jh@suse.cz>
* gcc.c-torture/execute/va-arg-20.c: New test.
-Sun Apr 23 14:41:33 2000 Jeffrey A Law (law@cygnus.com)
+2000-04-23 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000422-1.c: New test.
@@ -10528,7 +11089,7 @@ Sun Apr 23 14:41:33 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000420-2.c: New test for stack misalignment
when optimizing, but without sibling-call optimizations (-O1).
-Thu Apr 20 11:57:03 2000 Jeffrey A Law (law@cygnus.com)
+2000-04-20 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000420-1.c: New test.
@@ -10537,7 +11098,7 @@ Thu Apr 20 11:57:03 2000 Jeffrey A Law (law@cygnus.com)
* g++.abi/ptrflags.C: New test.
* g++.eh/catchptr1.C: Test incomplete pointer chains.
-Wed Apr 19 09:16:32 2000 Catherine Moore <clm@cygnus.com>
+2000-04-19 Catherine Moore <clm@cygnus.com>
* gcc.c-torture/execute/921017-1.c: Check for NO_TRAMPOLINES.
@@ -10550,11 +11111,11 @@ Wed Apr 19 09:16:32 2000 Catherine Moore <clm@cygnus.com>
* gcc.dg/20000419-1.c: New test.
-Wed Apr 12 22:54:02 2000 Hans-Peter Nilsson <hp@axis.com>
+2000-04-12 Hans-Peter Nilsson <hp@axis.com>
* gcc.c-torture/execute/20000412-6.c: New test.
-Wed Apr 12 10:25:08 2000 Jeffrey A Law (law@cygnus.com)
+2000-04-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000412-5.c: New test.
* g77.f-torture/compile/20000412-1.f: New test.
@@ -10615,7 +11176,7 @@ Wed Apr 12 10:25:08 2000 Jeffrey A Law (law@cygnus.com)
cpp-shift.c, cpp-shortcircuit.c, cpp-unary.c: Add FSF
copyright.
-Wed Apr 5 22:51:36 2000 Hans-Peter Nilsson <hp@axis.com>
+2000-04-05 Hans-Peter Nilsson <hp@axis.com>
* gcc.c-torture/execute/960327-1.c (f): Add a letter to s[] to
avoid stack-frame overwrite.
@@ -10642,12 +11203,12 @@ Wed Apr 5 22:51:36 2000 Hans-Peter Nilsson <hp@axis.com>
* gcc.dg/cpp-redef-2.c, gcc.dg/cpp-tradwarn1.c,
gcc.dg/cpp-unc.c: Add -fno-show-column to compiler options.
-Mon Apr 3 02:35:34 2000 Jeffrey A Law (law@cygnus.com)
+2000-04-03 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000403-2.c: New test.
* gcc.c-torture/compile/20000403-1.c: New test.
-Mon Apr 3 16:53:52 2000 Hans-Peter Nilsson <hp@axis.com>
+2000-04-03 Hans-Peter Nilsson <hp@axis.com>
* gcc.c-torture/execute/20000403-1.c: New test.
@@ -10655,7 +11216,7 @@ Mon Apr 3 16:53:52 2000 Hans-Peter Nilsson <hp@axis.com>
* gcc.c-torture/execute/20000402-1.c: New test.
-Mon Apr 3 14:10:34 2000 Donald Lindsay <dlindsay@cygnus.com>
+2000-04-03 Donald Lindsay <dlindsay@cygnus.com>
* gcc.c-torture/execute/va-arg-15.c: New test.
* gcc.c-torture/execute/va-arg-16.c: New test.
@@ -10683,7 +11244,7 @@ Mon Apr 3 14:10:34 2000 Donald Lindsay <dlindsay@cygnus.com>
* gcc.dg/cpp-shortcircuit.c New tests.
* gcc.dg/cpp-unary.c New tests.
-Wed Mar 29 13:44:23 2000 Jeffrey A Law (law@cygnus.com)
+2000-03-29 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000329-1.c: New test.
@@ -10717,7 +11278,7 @@ Wed Mar 29 13:44:23 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000319-1.c: New test.
-Tue Mar 14 08:58:37 2000 Jeffrey A Law (law@cygnus.com)
+2000-03-14 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000314-3.c: New test.
* gcc.c-torture/execute/20000314-2.c: New test.
@@ -10729,7 +11290,7 @@ Tue Mar 14 08:58:37 2000 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.warn/inline.C: New test.
-Fri Mar 10 01:15:19 2000 Hans-Peter Nilsson <hp@bitrange.com>
+2000-03-10 Hans-Peter Nilsson <hp@bitrange.com>
* gcc.c-torture/execute/divconst-2.c: Rewrite to check for
standards-compliant result rather than specific constants.
@@ -10762,7 +11323,7 @@ Fri Mar 10 01:15:19 2000 Hans-Peter Nilsson <hp@bitrange.com>
* g++.old-deja/g++.warn/impint2.C: New test.
-Sun Mar 5 23:25:12 2000 Hans-Peter Nilsson <hp@bitrange.com>
+2000-03-05 Hans-Peter Nilsson <hp@bitrange.com>
* gcc.c-torture/execute/20000224-1.c (main): Expected return-value
is 1, not zero.
@@ -10791,7 +11352,7 @@ Sun Mar 5 23:25:12 2000 Hans-Peter Nilsson <hp@bitrange.com>
* g++.old-deja/g++.pt/unify7.C: New test.
-Sat Feb 26 19:46:09 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+2000-02-26 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* g++.old-deja/g++.ext/attrib5.C: XFAIL on Alpha since no link alias.
* g++.old-deja/g++.pt/static3.C: Generalize system name for Alpha.
@@ -10805,7 +11366,7 @@ Sat Feb 26 19:46:09 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* gcc.c-torture/compile/cpp-2.c: New test.
* gcc.c-torture/compile/cpp-1.c: New test.
-Fri Feb 25 21:44:49 2000 Jeffrey A Law (law@cygnus.com)
+2000-02-25 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000225-1.c: New test.
@@ -10825,7 +11386,7 @@ Fri Feb 25 21:44:49 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/va-arg-13.c: New test.
-Wed Feb 23 14:16:06 2000 Donald Lindsay <dlindsay@cygnus.com>
+2000-02-23 Donald Lindsay <dlindsay@cygnus.com>
* gcc.c-torture/execute/va-arg-12.c: New test.
@@ -10850,15 +11411,15 @@ Wed Feb 23 14:16:06 2000 Donald Lindsay <dlindsay@cygnus.com>
* lib/g++.exp (g++_init): Add -fmessage-length=0 to
ALWAYS_CXXFLAGS.
-Fri Feb 11 12:35:40 2000 Robert Lipe <robertl@sco.com>
+2000-02-11 Robert Lipe <robertl@sco.com>
* gcc.c-torture/compile/20000211-3.c: New test.
-Fri Feb 11 12:35:40 2000 Martin Buchholz <martin@xemacs.org>
+2000-02-11 Martin Buchholz <martin@xemacs.org>
* gcc.c-torture/compile/20000211-2.c: New test.
-Fri Feb 11 12:35:40 2000 Jeffrey A Law (law@cygnus.com)
+2000-02-11 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000211-1.c: New test.
@@ -10913,16 +11474,16 @@ Fri Feb 11 12:35:40 2000 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/ieee/fp-cmp-4.c: New.
-Thu Jan 20 12:34:48 2000 Jeffrey A Law (law@cygnus.com)
+2000-01-20 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000120-2.c: New test.
* gcc.c-torture/execute/20000120-1.c: New test.
-Thu Jan 13 02:29:32 2000 Jeffrey A Law (law@cygnus.com)
+2000-01-13 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000113-1.c: New test.
-Wed Jan 12 20:26:58 2000 Jeffrey A Law (law@cygnus.com)
+2000-01-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/20000112-1.c: New test.
@@ -10930,7 +11491,7 @@ Wed Jan 12 20:26:58 2000 Jeffrey A Law (law@cygnus.com)
* gcc.dg/20000111-1.c: New test.
-Mon Jan 10 18:12:49 2000 Jeffrey A Law (law@cygnus.com)
+2000-01-10 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990628-1.c: Tweak to work on targets
with 16 bit integers.
@@ -10947,7 +11508,7 @@ Mon Jan 10 18:12:49 2000 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.other/cast4.C: New test.
-Wed Jan 5 00:26:20 2000 Jeffrey A Law (law@cygnus.com)
+2000-01-05 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/20000105-2.c: New test.
* gcc.c-torture/compile/20000105-1.c: New test.
@@ -11038,13 +11599,13 @@ Wed Jan 5 00:26:20 2000 Jeffrey A Law (law@cygnus.com)
* gcc.dg/991230-1.c: New test.
-Wed Dec 29 23:48:49 1999 Jeffrey A Law (law@cygnus.com)
+1999-12-29 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/991229-3.c: New test.
* gcc.c-torture/compile/991229-2.c: New test.
* gcc.c-torture/compile/991229-1.c: New test.
-Wed Dec 29 20:54:46 1999 Greg McGary <gkm@eng.ascend.com>
+1999-12-29 Greg McGary <gkm@eng.ascend.com>
* gcc.c-torture/compile/labels-2.c: New test.
@@ -11092,17 +11653,17 @@ Wed Dec 29 20:54:46 1999 Greg McGary <gkm@eng.ascend.com>
* gcc.dg/991214-1.c: New test.
-Mon Dec 13 23:03:09 1999 Jeffrey A Law (law@cygnus.com)
+1999-12-13 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/991213-3.c: New test.
* gcc.c-torture/compile/991213-2.c: New test.
* gcc.c-torture/compile/991213-1.c: New test.
-Fri Dec 10 00:53:10 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+1999-12-10 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.dg/991209-1.c: New test.
-Wed Dec 8 23:44:08 1999 Nathan Sidwell <nathan@acm.org>
+1999-12-08 Nathan Sidwell <nathan@acm.org>
* gcc.c-torture/compile/991208-1.c: New test.
@@ -11150,7 +11711,7 @@ Wed Dec 8 23:44:08 1999 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.ext/pretty3.C: New test.
* g++.old-deja/g++.other/debug6.C: New test.
-Wed Oct 20 16:18:23 1999 Jim Wilson <wilson@cygnus.com>
+1999-10-20 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/noncompile/noncompile.exp: For 940510-1.c, change
compiler_output to look for one error message instead of two.
@@ -11179,7 +11740,7 @@ Wed Oct 20 16:18:23 1999 Jim Wilson <wilson@cygnus.com>
host is equipped with driver.h and driver.o so it can actually
compile and run the tests.
-Fri Oct 8 18:46:11 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+1999-10-08 Bernd Schmidt <bernds@cygnus.co.uk>
* gcc.c-torture/compile/991008-1.c: New test.
@@ -11217,35 +11778,35 @@ Fri Oct 8 18:46:11 1999 Bernd Schmidt <bernds@cygnus.co.uk>
* gcc.dg/array-1.c: New test.
-Sat Oct 30 22:23:46 1999 Stephen L Moshier <moshier@mediaone.net>
+1999-10-30 Stephen L Moshier <moshier@mediaone.net>
* gcc.c-torture/execute/991030-1.c: New test.
-Tue Oct 26 20:25:42 1999 Richard Henderson <rth@cygnus.com>
+1999-10-26 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/compile/991026-2.c: New test.
-Tue Oct 26 00:45:56 1999 Jeffrey A Law (law@cygnus.com)
+1999-10-26 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/991026-1.c: New test.
-Sat Oct 23 23:36:03 1999 Jeffrey A Law (law@cygnus.com)
+1999-10-23 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/991023-1.c: New test.
-Tue Oct 19 02:11:29 1999 Jeffrey A Law (law@cygnus.com)
+1999-10-19 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/991019-1.c: New test.
-Sat Oct 16 00:05:48 1999 Richard Henderson <rth@cygnus.com>
+1999-10-16 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/991016-1.c: New test.
-Thu Oct 14 04:22:47 1999 Stephane Carrez <stcarrez@worldnet.fr>
+1999-10-14 Stephane Carrez <stcarrez@worldnet.fr>
* gcc.c-torture/execute/991014-1.c: New test.
-Wed Oct 13 22:01:35 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
+1999-10-13 J"orn Rennecke <amylaar@cygnus.co.uk>
* g++.old-deja/g++.other/union2.C: New test.
@@ -11263,12 +11824,12 @@ Wed Oct 13 22:01:35 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/va-arg-11.c: New test.
-Fri Oct 1 00:53:17 1999 Mark P. Mitchell <mark@codesourcery.com>
+1999-10-01 Mark P. Mitchell <mark@codesourcery.com>
* lib/file-format.exp (gcc_target_object_format): Don't
crash if objdump is unavailable.
-Wed Sep 29 23:48:44 1999 Donn Terry <donn@interix.com>
+1999-09-29 Donn Terry <donn@interix.com>
* gcc.misc-tests/mg.exp: delete extraneous redirection.
@@ -11276,15 +11837,15 @@ Wed Sep 29 23:48:44 1999 Donn Terry <donn@interix.com>
* gcc.c-torture/compile/990928-1.c: New test.
-Tue Sep 28 13:19:15 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-28 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/decl6.C: New test.
-Tue Sep 28 01:19:09 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+1999-09-28 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.c-torture/execute/va-arg-10.c: New test.
-Mon Sep 27 09:14:24 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-27 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.pt/memtemp77.C: Adjust expected
__PRETTY_FUNCTION__.
@@ -11302,7 +11863,7 @@ Mon Sep 27 09:14:24 BST 1999 Nathan Sidwell <nathan@acm.org>
* g++.dg/ecos.exp: Don't supply -finit-priority to cc1plus.
-Tue Sep 21 15:38:10 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-21 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/dyncast1.C: New test.
* g++.old-deja/g++.other/dyncast2.C: New test.
@@ -11324,25 +11885,25 @@ Tue Sep 21 15:38:10 BST 1999 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.eh/catch9.C: New test.
* g++.old-deja/g++.eh/catch9p.C: New test.
-Mon Sep 13 14:14:21 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-13 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/sizeof3.C: Remove XFAILS.
* g++.old-deja/g++.other/sizeof4.C: Remove XFAILS.
-Mon Sep 13 06:28:57 1999 Jeffrey A Law (law@cygnus.com)
+1999-09-13 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/990913-1.c: New test.
-Fri Sep 10 11:21:25 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-10 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.jason/rfg4.C: Revert erroneous change, add -w.
* g++.old-deja/g++.jason/rfg5.C: Likewise.
-Thu Sep 9 10:40:36 1999 Richard Henderson <rth@cygnus.com>
+1999-09-09 Richard Henderson <rth@cygnus.com>
* g++.old-deja/g++.other/delete6.C: Use size_t with operator new.
-Thu Sep 9 12:32:57 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-09 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/lookup11.C: New test.
* g++.old-deja/g++.bugs/900428_01.C: Rework now we understand
@@ -11356,7 +11917,7 @@ Thu Sep 9 12:32:57 BST 1999 Nathan Sidwell <nathan@acm.org>
* gcc.c-torture/noncompile/noncompile.exp: Add poison-1.c.
* gcc.c-torture/noncompile/poison-1.c: New file.
-Wed Sep 8 09:39:56 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-08 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/sizeof3.C: New test.
* g++.old-deja/g++.other/sizeof4.C: New test.
@@ -11380,31 +11941,31 @@ Wed Sep 8 09:39:56 BST 1999 Nathan Sidwell <nathan@acm.org>
* g77.f-torture/noncompile/19990826-4.f: Clarify who wrote what.
-Fri Sep 3 10:39:38 BST 1999 Richard Earnshaw <rearnsha@arm.com>
+1999-09-03 Richard Earnshaw <rearnsha@arm.com>
* gcc.c-torture/execute/990827-1.c: Fix typo.
-Fri Sep 03 09:31:10 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-03 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/deref1.C: New test.
-Thu Sep 02 09:27:34 BST 1999 Nathan Sidwell <nathan@acm.org>
+1999-09-02 Nathan Sidwell <nathan@acm.org>
* g++.old-deja/g++.other/ambig2.C: New test.
* g++.old-deja/g++.other/cond5.C: New test.
* g++.old-deja/g++.other/lookup16.C: New test.
-Thu Sep 2 01:17:51 1999 Marc Espie <espie@cvs.openbsd.org>
+1999-09-02 Marc Espie <espie@cvs.openbsd.org>
* gcc.dg/980414-1.c: Fix assembler syntax to work with old
assemblers too.
-Tue Aug 31 17:57:49 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-31 Jeffrey A Law (law@cygnus.com)
* lib/c-torture.exp: Avoid the "compare executables" optimization
when testing native.
-Sun Aug 29 14:35:41 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-29 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990829-1.c: New test.
* gcc.c-torture/compile/990829-1.c: New test.
@@ -11423,7 +11984,7 @@ Sun Aug 29 14:35:41 1999 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.pt/memtemp90.C: Renamed from lss-010.C.
* g++.old-deja/g++.pt/memtemp91.C: Renamed from lss-011.C.
-Fri Aug 27 01:24:16 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-27 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990827-1.c: New test.
@@ -11475,7 +12036,7 @@ Fri Aug 27 01:24:16 1999 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.other/local3.C: Removed XFAIL.
-Wed Aug 4 01:17:17 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-04 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/970312-1.c: Delete duplicate test.
@@ -11483,7 +12044,7 @@ Wed Aug 4 01:17:17 1999 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.eh/spec6.C: Add more tests. Remove XFAILS.
-Wed Aug 4 01:17:17 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-04 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990804-1.c: New test.
@@ -11501,13 +12062,13 @@ Wed Aug 4 01:17:17 1999 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.other/enum2.C: New test.
-Mon Aug 2 13:35:12 1999 Richard Henderson <rth@cygnus.com>
+1999-08-02 Richard Henderson <rth@cygnus.com>
Adapted from tests from Franz Sirl:
* gcc.c-torture/execute/va-arg-7.c: New test.
* gcc.c-torture/execute/va-arg-8.c: New test.
-Sun Aug 1 22:29:34 1999 Jeffrey A Law (law@cygnus.com)
+1999-08-01 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/990801-2.c: New test.
@@ -11525,7 +12086,7 @@ Sun Aug 1 22:29:34 1999 Jeffrey A Law (law@cygnus.com)
from fr1 to unknown_register, since fr1 is a legitimate register
on some machines.
-Sun Jul 25 21:41:37 1999 Jeffrey A Law (law@cygnus.com)
+1999-07-25 Jeffrey A Law (law@cygnus.com)
* README: More listname related changes.
@@ -11557,11 +12118,11 @@ Sun Jul 25 21:41:37 1999 Jeffrey A Law (law@cygnus.com)
* gcc.dg/special/ecos.exp: Remove definition of proc
gcc_target_object_format.
-Mon Jun 28 08:20:51 1999 Jeffrey A Law (law@cygnus.com)
+1999-06-28 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990628-1.c: New test.
-Fri Jun 25 05:28:40 1999 Jeffrey A Law (law@cygnus.com)
+1999-06-25 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/990625-2.c: New test.
@@ -11574,7 +12135,7 @@ Fri Jun 25 05:28:40 1999 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/dll.x: Only support the dll.c test on
ports that use the COFF/PE file format.
-Thu Jun 17 13:48:16 1999 Jeffrey A Law (law@cygnus.com)
+1999-06-17 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/990617-1.c: New test.
@@ -11590,7 +12151,7 @@ Thu Jun 17 13:48:16 1999 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.eh/catch1.C: New test.
-Mon Jun 7 23:39:16 1999 Jeffrey A Law (law@cygnus.com)
+1999-06-07 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.mike/p6610a.C: Expect failure on freebsd-elf.
@@ -11602,19 +12163,19 @@ Mon Jun 7 23:39:16 1999 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/compile/19990502-0.f: Replace with new,
shorter, test that still fails after recent changes.
-Fri Jun 4 02:25:04 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+1999-06-04 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* gcc.c-torture/execute/990604-1.c: New test.
-Mon May 31 00:34:51 1999 Jeffrey A Law (law@cygnus.com)
+1999-05-31 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990531-1.c: New test.
-Thu May 27 02:38:36 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+1999-05-27 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.c-torture/compile/990527-1.c: New test.
-Thu May 27 02:18:51 1999 Joern Rennecke <amylaar@cygnus.com>
+1999-05-27 Joern Rennecke <amylaar@cygnus.com>
* gcc.c-torture/execute/990527-1.c: New test.
@@ -11627,7 +12188,7 @@ Thu May 27 02:18:51 1999 Joern Rennecke <amylaar@cygnus.com>
* g77.f-torture/compile/19990525-0.f: New test.
-Tue May 25 01:21:16 1999 Jeffrey A Law (law@cygnus.com)
+1999-05-25 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990525-2.c: New test.
@@ -11642,17 +12203,17 @@ Tue May 25 01:21:16 1999 Jeffrey A Law (law@cygnus.com)
after downgrade to warning (cp/ChangeLog: 1999-05-20 Jason
Merrill).
-Mon May 24 00:01:52 1999 Jeffrey A Law (law@cygnus.com)
+1999-05-24 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990524-1.c: New test.
* gcc.dg/990524-1.c: New test.
-Sun May 23 21:18:12 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+1999-05-23 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.c-torture/compile/990523-1.c: New test.
-Wed May 19 02:56:18 1999 Raja R Harinath <harinath@cs.umn.edu>
+1999-05-19 Raja R Harinath <harinath@cs.umn.edu>
* gcc.c-torture/compile/990519-1.c: New test.
@@ -11668,7 +12229,7 @@ Wed May 19 02:56:18 1999 Raja R Harinath <harinath@cs.umn.edu>
* gcc.dg/noreturn-1.c: New test.
-Thu May 13 02:02:46 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+1999-05-13 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* gcc.c-torture/execute/990513-1.c: New test.
@@ -11724,12 +12285,12 @@ Thu May 13 02:02:46 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
* g77.f-torture/compile/19990502-0.f: New test.
-Sun May 2 01:38:50 1999 Craig Burley <craig@jcb-sc.com>
+1999-05-02 Craig Burley <craig@jcb-sc.com>
* g77.f-torture/execute/u77-test.f (main): Declare FTELL as
intrinsic.
-Sun May 2 01:13:37 1999 Craig Burley <craig@jcb-sc.com>
+1999-05-02 Craig Burley <craig@jcb-sc.com>
* g77.f-torture/execute/u77-test.f (main): List libU77
intrinsics not currently tested.
@@ -11738,12 +12299,12 @@ Sun May 2 01:13:37 1999 Craig Burley <craig@jcb-sc.com>
FTELL_subr, MCLOCK, MCLOCK8, and CPU_TIME.
Trim blanks off the ends of some printed strings.
-Sun May 2 00:06:45 1999 Craig Burley <craig@jcb-sc.com>
+1999-05-02 Craig Burley <craig@jcb-sc.com>
* g77.f-torture/execute/u77-test.f (main): Just warn about
FSTAT gid disagreement, as it's expected on some systems.
-Sat May 1 23:57:18 1999 Craig Burley <craig@jcb-sc.com>
+1999-05-01 Craig Burley <craig@jcb-sc.com>
* g77.f-torture/execute/u77-test.f: Generalize sum-checking to
use a new function, which allows for some slop.
@@ -11757,7 +12318,7 @@ Sat May 1 23:57:18 1999 Craig Burley <craig@jcb-sc.com>
libf2c/libU77 version, bringing patches to that version here.
Add suitable commentary.
-Sun Apr 25 12:28:59 1999 Richard Henderson <rth@cygnus.com>
+1999-04-25 Richard Henderson <rth@cygnus.com>
* gcc.dg/990424-1.c: New test.
@@ -11771,16 +12332,16 @@ Sun Apr 25 12:28:59 1999 Richard Henderson <rth@cygnus.com>
* g77.f-torture/compile/19990419-0.f: New test.
* g77.f-torture/execute/19990419-1.f: New test.
-Sat Apr 17 16:56:48 1999 Richard Henderson <rth@cygnus.com>
+1999-04-17 Richard Henderson <rth@cygnus.com>
* gcc.dg/uninit-9.c (func): Use __builtin_alloca instead of alloca
to avoid the need for a prototype to supress a warning.
-Wed Apr 7 23:08:59 1999 Jim Wilson <wilson@cygnus.com>
+1999-04-07 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/920501-7.c (main): Delete __I960__ ifndef.
-Sun Apr 4 04:02:53 1999 Jeffrey A Law (law@cygnus.com)
+1999-04-04 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990404-1.c: New test.
@@ -11791,12 +12352,12 @@ Sun Apr 4 04:02:53 1999 Jeffrey A Law (law@cygnus.com)
* gcc.misc-tests/m-un-2.c: Adjust regexps for new format of
missing initializer warnings.
-Sun Mar 28 00:49:41 1999 Jeffrey A Law (law@cygnus.com)
+1999-03-28 Jeffrey A Law (law@cygnus.com)
* lib/objc-torture.exp: Replace "77" with "Obj-C" in pattern
matching strings.
-Fri Mar 26 00:50:46 1999 Jeffrey A Law (law@cygnus.com)
+1999-03-26 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990326-1.c: New test from Charles Hannum.
@@ -11805,16 +12366,16 @@ Fri Mar 26 00:50:46 1999 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/execute/19990325-0.f: New test.
* g77.f-torture/execute/19990325-1.f: New test.
-Wed Mar 24 22:50:50 1999 Jeffrey A Law (law@cygnus.com)
+1999-03-24 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990324-1.c: New test.
-Mon Mar 22 14:55:58 1999 Jim Wilson <wilson@cygnus.com>
+1999-03-22 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/bf-sign-2.c (main): Replace struct sizeof
test with 4.
-Wed Mar 17 12:22:39 1999 Richard Henderson <rth@cygnus.com>
+1999-03-17 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/ieee/980619-1.x: New. Expected fail on x86.
@@ -11828,7 +12389,7 @@ Wed Mar 17 12:22:39 1999 Richard Henderson <rth@cygnus.com>
* g77.f-torture/execute/19990313-0.f: New test.
* g77.f-torture/execute/19990313-1.f: New test.
-Fri Mar 12 16:17:28 1999 Jim Wilson <wilson@cygnus.com>
+1999-03-12 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/970312-1.c, execute/980605-1.c (f): Change
printf to sprintf.
@@ -11867,7 +12428,7 @@ Fri Mar 12 16:17:28 1999 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/noncompile/noncompile.exp (951025-1.c): Accept an error
message on line 1 or line 2; cccp and cpplib do this differently.
-Mon Mar 1 23:29:14 1999 Jeffrey A Law (law@cygnus.com)
+1999-03-01 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.law/weak1.C: New test.
@@ -11893,7 +12454,7 @@ Mon Mar 1 23:29:14 1999 Jeffrey A Law (law@cygnus.com)
* lib/c-torture.exp: Add -O3 to TORTURE_OPTIONS list.
-Mon Feb 22 01:15:08 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-22 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990222-1.c: New test.
@@ -11906,17 +12467,17 @@ Mon Feb 22 01:15:08 1999 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/compile/19981216-0.f: New test.
-Sun Feb 14 01:26:29 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-14 Jeffrey A Law (law@cygnus.com)
* gcc.dg/990214-1.c: New test.
-Sat Feb 13 00:43:52 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-13 Jeffrey A Law (law@cygnus.com)
* gcc.dg/990213-2.c: New test.
* gcc.dg/990213-1.c: New test.
-Fri Feb 12 11:04:35 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/990106-2.c: Update to work on targets with 16bit
ints.
@@ -11928,11 +12489,11 @@ Fri Feb 12 11:04:35 1999 Jeffrey A Law (law@cygnus.com)
* lib/chill.exp: Fix typo: doesn'timeout -> doesn't
-Thu Feb 11 01:12:12 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-11 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990211-1.c: New test from Nathan SIdwell.
-Wed Feb 10 13:08:12 1999 Jonathan Larmour <jlarmour@cygnus.co.uk>
+1999-02-10 Jonathan Larmour <jlarmour@cygnus.co.uk>
* gcc.dg/special/ecos.exp: New test driver for new tests with
special requirements.
@@ -11949,7 +12510,7 @@ Wed Feb 10 13:08:12 1999 Jonathan Larmour <jlarmour@cygnus.co.uk>
* gcc.dg/special/wkali-2a.c: Accompanying file to wkali-2.c.
* gcc.dg/special/wkali-2b.c: Accompanying file to wkali-2.c.
-Wed Feb 10 12:15:35 1999 Felix Lee <flee@cygnus.com>
+1999-02-10 Felix Lee <flee@cygnus.com>
* lib/c-torture.exp (c-torture-compile): Pull out code for
analyzing gcc error messages.
@@ -11957,7 +12518,7 @@ Wed Feb 10 12:15:35 1999 Felix Lee <flee@cygnus.com>
positives.
* lib/gcc.exp (gcc_check_compile): New function.
-Mon Feb 8 21:42:57 1999 Richard Henderson <rth@cygnus.com>
+1999-02-08 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/990208-1.c: New test.
@@ -11978,7 +12539,7 @@ Mon Feb 8 21:42:57 1999 Richard Henderson <rth@cygnus.com>
* README: Add comment about g++.dg directory
-Sat Feb 6 18:00:38 1999 Jeffrey A Law (law@cygnus.com)
+1999-02-06 Jeffrey A Law (law@cygnus.com)
* README: Update email addresses.
@@ -11996,11 +12557,11 @@ Sat Feb 6 18:00:38 1999 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/memcheck/driver.c (main): Use exit or
abort to terminate program execution.
-Sat Jan 30 16:22:47 1999 Richard Henderson <rth@cygnus.com>
+1999-01-30 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/990130-1.c: New test.
-Sat Jan 30 11:10:06 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-30 Jeffrey A Law (law@cygnus.com)
* gcc.dg/990130-1.c: New test.
@@ -12020,7 +12581,7 @@ Sat Jan 30 11:10:06 1999 Jeffrey A Law (law@cygnus.com)
positives.
* lib/gcc.exp (gcc_check_compile): new function.
-Sun Jan 17 00:02:33 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-17 Jeffrey A Law (law@cygnus.com)
* gcc.dg/990117-1.c: New test.
@@ -12028,25 +12589,25 @@ Sun Jan 17 00:02:33 1999 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990117-1.c: New test from HJ Lu.
-Fri Jan 15 02:52:00 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-15 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/compile/990115-1.f: New test.
-Thu Jan 7 23:39:47 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-07 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/990107-1.c: New test
-Wed Jan 6 02:21:59 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-06 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/990106-2.c: New test.
* gcc.c-torture/execute/990106-1.c: New test.
-Wed Dec 30 23:05:28 1998 Zack Weinberg <zack@rabi.columbia.edu>
+1998-12-30 Zack Weinberg <zack@rabi.columbia.edu>
* gcc.c-torture/compile/981223-1.c: New test.
-Tue Dec 29 11:33:25 1998 Richard Henderson <rth@cygnus.com>
+1998-12-29 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/bcp-1.c (bad10): Rename from opt3.
(opt3): Rename from opt4 and disable.
@@ -12063,11 +12624,11 @@ Tue Dec 29 11:33:25 1998 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/920501-4.c (main): Fix typo: replace | with ||.
-Fri Dec 11 10:25:57 1998 Jeffrey A Law (law@cygnus.com)
+1998-12-11 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.benjamin/p12475.C: Expect failure on mips64 targets.
-Fri Dec 11 01:12:45 1998 Zack Weinberg <zack@rabi.columbia.edu>
+1998-12-11 Zack Weinberg <zack@rabi.columbia.edu>
* gcc.c-torture/compile/981211-1.c: New test.
@@ -12077,7 +12638,7 @@ Fri Dec 11 01:12:45 1998 Zack Weinberg <zack@rabi.columbia.edu>
* g++.old-deja/g++.pt/instantiate6.C: Linker error, not crash.
-Tue Dec 8 22:50:04 1998 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+1998-12-08 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.special/930510-1.c: Make C9X safe.
* gcc.misc-tests/gcov-1.c Similarly.
@@ -12087,7 +12648,7 @@ Tue Dec 8 22:50:04 1998 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.dg/ultrasp1.c: New test.
-Sun Dec 6 00:40:12 1998 Richard Henderson <rth@cygnus.com>
+1998-12-06 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/981206.c: New test.
@@ -12161,7 +12722,7 @@ Sun Dec 6 00:40:12 1998 Richard Henderson <rth@cygnus.com>
* g77.f-torture/execute/labug1.f: New test.
-Sat Nov 21 21:41:05 1998 Jeffrey A Law (law@cygnus.com)
+1998-11-21 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980526-1.c: Do nothing if NO_LABEL_VALUES
is defined.
@@ -12175,7 +12736,7 @@ Sat Nov 21 21:41:05 1998 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.eh/throw2.C: New test. CV-qualifiers are not
properly discarded.
-Sun Oct 11 05:04:28 1998 Ken Raeburn <raeburn@cygnus.com>
+1998-10-11 Ken Raeburn <raeburn@cygnus.com>
* gcc.c-torture/execute/memcheck: New directory of tests for
-fcheck-memory-usage.
@@ -12187,11 +12748,11 @@ Sun Oct 11 05:04:28 1998 Ken Raeburn <raeburn@cygnus.com>
* README.g++: Eliminate obsolete information, update and move most
relevant stuff to README.
-Sat Nov 7 02:55:55 1998 Richard Henderson <rth@cygnus.com>
+1998-11-07 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/compile/981107-1.c: New test.
-Mon Nov 2 11:16:03 1998 Doug Evans <devans@canuck.cygnus.com>
+1998-11-02 Doug Evans <devans@canuck.cygnus.com>
* execute/memcpy-bi.c: New testcase.
@@ -12222,15 +12783,15 @@ Mon Nov 2 11:16:03 1998 Doug Evans <devans@canuck.cygnus.com>
* lib/old-dejagnu.exp (old-dejagnu): Document `Additional sources'.
-Thu Oct 22 16:01:44 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+1998-10-22 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* compile/981022-1.c, compile/981022-1.x: New test and driver.
-Mon Oct 19 14:03:07 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-19 Jeffrey A Law (law@cygnus.com)
* 981019-1.c: New test.
-Wed Oct 14 21:11:19 1998 Robert Lipe <robertl@dgii.com>
+1998-10-14 Robert Lipe <robertl@dgii.com>
* lib/objc-torture.exp (objc-torture-execute): Add -I so we can
find objc headers.
@@ -12300,11 +12861,11 @@ Wed Oct 14 21:11:19 1998 Robert Lipe <robertl@dgii.com>
* g++.old-deja/g++.ns/extern1.C: Fix XFAIL mark.
-Fri Oct 9 19:19:19 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-09 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/special/920521-1.c: Fix bogus test.
-Thu Oct 8 19:14:05 1998 Nick Clifton <nickc@cygnus.com>
+1998-10-08 Nick Clifton <nickc@cygnus.com>
* gcc.dg/dll-?.c Add thumb to target list.
Fix assembler scan patterns to match current assembler output.
@@ -12324,7 +12885,7 @@ Thu Oct 8 19:14:05 1998 Nick Clifton <nickc@cygnus.com>
* g++.old-deja/g++.other/init7.C: New test. Retry initialization
of static locals if first initialization throws.
-Wed Oct 7 12:00:20 1998 Jim Wilson <wilson@cygnus.com>
+1998-10-07 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/compile/981007-1.c: New test for irix6 -O0 core dump.
@@ -12380,16 +12941,16 @@ Wed Oct 7 12:00:20 1998 Jim Wilson <wilson@cygnus.com>
* g++.old-deja/g++.other/typename1.C: New test; template-dependent
type name without `typename' should be rejected with -pedantic.
-Fri Oct 2 21:55:58 1998 Richard Henderson <rth@cygnus.com>
+1998-10-02 Richard Henderson <rth@cygnus.com>
* g++.old-deja/g++.other/addrof1.C: New test.
-Thu Oct 1 17:15:26 1998 Nick Clifton <nickc@cygnus.com>
+1998-10-01 Nick Clifton <nickc@cygnus.com>
* gcc.c-torture/compile/981001-1.c: New test.
* gcc.c-torture/execute/981001-1.c: New test.
-Thu Oct 1 19:05:20 1998 Jeffrey A Law (law@cygnus.com)
+1998-10-01 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/981001-2.c: New test.
* gcc.c-torture/compile/981001-3.c: New test.
@@ -12472,50 +13033,50 @@ Thu Oct 1 19:05:20 1998 Jeffrey A Law (law@cygnus.com)
(un)signed char are different types for template specialization
purposes.
-Thu Sep 3 00:40:32 1998 Ovidiu Predescu <ovidiu@aracnet.com>
+1998-09-03 Ovidiu Predescu <ovidiu@aracnet.com>
* lib/{objc.exp,objc-torture.exp}: New files for objc testing harness.
* objc: ObjC testsuite.
-Mon Aug 31 12:00:00 1998 Catherine Moore <clm@cygnus.com>
+1998-08-31 Catherine Moore <clm@cygnus.com>
* gcc.c-torture/execute/941014-1.x: New file.
-Mon Aug 31 15:19:32 1998 Nick Clifton <nickc@cygnus.com>
+1998-08-31 Nick Clifton <nickc@cygnus.com>
* lib/c-torture.exp: Add support for
torture_eval_before_compile and torture_eval_before_execute
variables.
-Sun Aug 30 17:38:20 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-30 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980626-1.c: Delete this test. We've declared the warning
this test triggers valid.
-Thu Aug 27 23:59:18 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-27 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980827-1.c: New test.
-Wed Aug 26 16:10:00 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-08-26 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/loop-4b.c: New test.
-Wed Aug 26 16:25:38 1998 Nick Clifton <nickc@cygnus.com>
+1998-08-26 Nick Clifton <nickc@cygnus.com>
* lib/c-torture.exp: Add support for
torture_eval_before_compile and torture_eval_before_execute
variables.
-Tue Aug 25 19:42:13 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-25 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980825-1.c: New test.
-Mon Aug 24 14:20:32 1998 Nick Clifton <nickc@cygnus.com>
+1998-08-24 Nick Clifton <nickc@cygnus.com>
* gcc.c-torture/execute/bcp-1.c (main): Fix optimize test loop to
count number tests in opt_t0 not good_t0.
-Mon Aug 24 16:38:52 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-24 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/930326-1.x: Fix typo.
@@ -12524,7 +13085,7 @@ Mon Aug 24 16:38:52 1998 Jeffrey A Law (law@cygnus.com)
* lib/old-dejagnu.exp: Make it possible to XFAIL a test that
causes an ICE.
-Fri Aug 21 23:59:18 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-21 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/unsorted/memtst.c: Reduce size of array when
STACK_SIZE is defined.
@@ -12532,7 +13093,7 @@ Fri Aug 21 23:59:18 1998 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980821-1.c: New test.
-Fri Aug 21 03:14:04 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-21 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980526-2.c: Disable for targets with 16bit ints.
@@ -12546,17 +13107,17 @@ Fri Aug 21 03:14:04 1998 Jeffrey A Law (law@cygnus.com)
* lib/old-dejagnu.exp: Revise handling of `Internal compiler
error'.
-Tue Aug 18 19:19:50 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-18 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/*.x: Some updates for the h8300 targets.
-Sun Aug 16 01:29:19 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-16 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980816-1.c: New test.
* gcc.dg/980816-1.c: New test.
-Thu Aug 13 00:13:55 1998 Jeffrey A Law (law@cygnus.com)
+1998-08-13 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/ieee/ieee.exp: Pass -ffloat-store to
compiler for ieee tests.
@@ -12571,11 +13132,11 @@ Thu Aug 13 00:13:55 1998 Jeffrey A Law (law@cygnus.com)
-finstrument-functions.
* gcc.c-torture/special/special.exp: Run it.
-Wed Jul 29 00:17:18 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-29 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980729-1.c: New test.
-Mon Jul 27 11:05:07 1998 Nick Clifton <nickc@cygnus.com>
+1998-07-27 Nick Clifton <nickc@cygnus.com>
* gcc.c-torture/execute/ieee/930529-1.c (main): Check to see if
__thumb__ is defined, and test for ARM style doubles if so.
@@ -12584,12 +13145,12 @@ Mon Jul 27 11:05:07 1998 Nick Clifton <nickc@cygnus.com>
* g77.f-torture/noncompile/980615-0.f: New test.
-Sun Jul 26 01:15:56 1998 H.J. Lu (hjl@gnu.org)
+1998-07-26 H.J. Lu (hjl@gnu.org)
* gcc.dg/980312-1.c: Do link instead of compile.
* gcc.dg/980313-1.c: Likewise.
-Sun Jul 26 01:05:02 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-26 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980726-1.c: New test.
@@ -12597,26 +13158,26 @@ Sun Jul 26 01:05:02 1998 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/execute/io0.f: New test.
-Fri Jul 24 11:02:43 1998 Nick Clifton <nickc@cygnus.com>
+1998-07-24 Nick Clifton <nickc@cygnus.com>
* gcc.c-torture/execute/comp-goto-1.c (main): Make main() return
an int.
-Thu Jun 18 15:12:30 1998 Michael Meissner <meissner@cygnus.com>
+1998-06-18 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/980618-{1,2}.c: New tests that showed up
m32r bugs.
-Fri Jul 17 14:19:32 1998 Nick Clifton <nickc@cygnus.com>
+1998-07-17 Nick Clifton <nickc@cygnus.com>
* gcc.dg/980626-1.c: Expect failures for all toolchains until
c-decl.c:grokdeclarator can handle mode attributes.
-Thu Jul 16 21:42:50 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-16 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980716-1.c: New test.
-Mon Jul 13 22:26:37 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-13 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/920715-1.x: No longer expected to fail on
the mn10200.
@@ -12636,42 +13197,42 @@ Mon Jul 13 22:26:37 1998 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/execute/970816-3.f: New test from Craig.
-Fri Jul 10 23:43:33 1998 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
+1998-07-10 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
* g++.other/singleton.C: Return error value instead of taking
SIGSEGV.
-Fri Jul 10 10:02:03 1998 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
+1998-07-10 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
* g++.other/singleton.C: New test. Warning is under dispute.
Runtime crash is not.
-Thu Jul 9 23:07:45 1998 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
+1998-07-09 Martin von Loewis <martin@mira.isdn.cs.tu-berlin.de>
* g++.ns/{alias2.C, alias5.C, koenig4.C, lookup3.C ns13.C,
ns14.C, ns15.C, template3.C, undef1.C, using4.C, using5.C,
using6.C, using7.C}: New namespace tests.
-Thu Jul 9 22:44:49 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+1998-07-09 Alexandre Oliva <oliva@dcc.unicamp.br>
* g++.old-deja/g++.other/partspec1.C: Test matching of partial
specialization with typedef'ed names used as array indexes.
-Thu Jul 9 00:38:51 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-09 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980709-1.c: New test.
* gcc.dg/980709-1.c: New test.
-Tue Jul 7 13:41:27 1998 Richard Henderson <rth@cygnus.com>
+1998-07-07 Richard Henderson <rth@cygnus.com>
* gcc.c-torture/execute/bcp-1.c: New test.
-Tue Jul 7 11:49:04 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-07 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980707-1.c: New test.
-Mon Jul 6 18:20:27 1998 Kamil Iskra <iskra@student.uci.agh.edu.pl>
+1998-07-06 Kamil Iskra <iskra@student.uci.agh.edu.pl>
* gcc.c-torture/compile/980706-1.c: New test.
@@ -12680,13 +13241,13 @@ Mon Jul 6 18:20:27 1998 Kamil Iskra <iskra@student.uci.agh.edu.pl>
* g77.f-torture/execute/980701-0.f,
g77.f-torture/execute/980701-1.f: New test from Craig.
-Wed Jul 1 00:52:51 1998 Jeffrey A Law (law@cygnus.com)
+1998-07-01 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/compile/980701-1.c: New test.
* gcc.c-torture/execute/980701-1.c: New test.
-Tue Jun 30 11:51:42 1998 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-ka
+1998-06-30 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-ka
rlsruhe.de>
* g++.old-deja/g++.robertl/eb132.C: New test.
@@ -12701,7 +13262,7 @@ rlsruhe.de>
* g77.f-torture/execute/980628-3.f: Remove mail headers.
-Sun Jun 28 12:49:02 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-28 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/execute/980628-4.f: New test from Craig.
* g77.f-torture/execute/980628-5.f: Likewise.
@@ -12711,64 +13272,64 @@ Sun Jun 28 12:49:02 1998 Jeffrey A Law (law@cygnus.com)
* g77.f-torture/execute/980628-3.f: Likewise.
* g77.f-torture/execute/980628-6.f: Likewise.
-Sun Jun 28 00:37:26 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-28 Jeffrey A Law (law@cygnus.com)
* lib/g77.exp (default_g77_version): Tweak to make it work in a build
directory when nothing has been installed yet.
-Sat Jun 27 23:23:18 1998 Carlo Wood <carlo@runaway.xs4all.nl>
+1998-06-27 Carlo Wood <carlo@runaway.xs4all.nl>
* gcc.c-torture/special/special.exp: Handle newer versions of
dejagnu.
-Fri Jun 26 17:57:40 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-26 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980626-1.c: New test.
-Fri Jun 19 23:26:12 1998 Bruno Haible <haible@ilog.fr>
+1998-06-19 Bruno Haible <haible@ilog.fr>
* gcc.misc-tests/m-un-2.c: New test.
* g++.old-deja/g++.other/warn01.c: Likewise.
-Fri Jun 19 14:06:36 1998 Robert Lipe <robertl@dgii.com>
+1998-06-19 Robert Lipe <robertl@dgii.com>
* gcc.dg/980414-1.c: Move comments outside of ASM to improve
compatibility with assmblers with a different comment character.
Eliminate use of GAS-specific extensions.
-Fri Jun 19 02:05:14 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-19 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/ieee/980619-1.c: New test.
-Fri Jun 19 00:58:11 1998 Robert Lipe <robertl@dgii.com>
+1998-06-19 Robert Lipe <robertl@dgii.com>
*lib/g77.exp: Replace search for libf2c.a with search for newly
renamed libg2c.a
-Wed Jun 17 18:53:12 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-17 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980617-1.c: New test.
-Fri Jun 12 01:08:49 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980612-1.c: New test.
-Mon Jun 8 02:13:42 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-08 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980523-1.c: Only test on ppc-linux.
* gcc.dg/980526-1.c, gcc.dg/switch-1.c: Likewise.
* gcc.c-torture/execute/980608-1.c: New test.
-Fri Jun 5 21:54:26 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-06-05 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/980605-1.c: New test.
-Thu Jun 4 01:39:24 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-04 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980604-1.c: New test.
-Tue Jun 2 20:51:43 1998 Jeffrey A Law (law@cygnus.com)
+1998-06-02 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/980602-1.c: New test.
* gcc.c-torture/execute/980602-2.c: Likewise.
@@ -12777,17 +13338,17 @@ Tue Jun 2 20:51:43 1998 Jeffrey A Law (law@cygnus.com)
* 970125-0.f: Fix per JCB. Add commentary.
-Sun May 31 23:23:29 1998 Michael Meissner <meissner@cygnus.com>
+1998-05-31 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/ieee/mzero2.c: New test to better test
IEEE -0 support.
-Fri May 29 01:10:12 1998 Peter Leven <leven@lpr.e-technik.tu-muenchen.de>
+1998-05-29 Peter Leven <leven@lpr.e-technik.tu-muenchen.de>
* gcc.c-torture/execute/ieee/fp-cmp-1.c: Set up signal handler
earlier.
-Thu May 28 00:17:42 1998 Catherine Moore <clm@cygnus.com>
+1998-05-28 Catherine Moore <clm@cygnus.com>
* gcc.c-torture/execute/980526-3.c: New test.
@@ -12798,12 +13359,12 @@ Thu May 28 00:17:42 1998 Catherine Moore <clm@cygnus.com>
* g++.old-deja/g++.jason/thunk3.C: Add m68k-motorola-sysv and
m88k-motorola-sysv3 to XFAIL.
-Tue May 26 23:58:03 1998 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+1998-05-26 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
* gcc.dg/980526-1.c: New test.
* gcc.c-torture/execute/980526-2.c: New test.
-Tue May 26 23:40:40 1998 Jeffrey A Law (law@cygnus.com)
+1998-05-26 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980523-1.c: Change "ppc" to "powerpc".
@@ -12820,7 +13381,7 @@ Tue May 26 23:40:40 1998 Jeffrey A Law (law@cygnus.com)
* lib/old-dejagnu.exp: All tests fail if we got an internal compiler
error for the line. Don't run multiple tests for the same line.
-Sat May 23 23:27:10 1998 Jeffrey A Law (law@cygnus.com)
+1998-05-23 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980523-1.c: New test.
@@ -12832,15 +13393,15 @@ Sat May 23 23:27:10 1998 Jeffrey A Law (law@cygnus.com)
* lib/old-dejagnu.exp: Ignore C++ "instantiated from" mesages.
-Thu May 21 23:23:21 1998 Jeffrey A Law (law@cygnus.com)
+1998-05-21 Jeffrey A Law (law@cygnus.com)
* gcc.dg/980520-1.c: New test.
-Wed May 20 14:37:15 1998 Manfred Hollstein <manfred@s-direktnet.de>
+1998-05-20 Manfred Hollstein <manfred@s-direktnet.de>
* gcc.dg/980502-1.c: Fix return type.
-Wed May 20 11:29:48 1998 Jeffrey A Law (law@cygnus.com)
+1998-05-20 Jeffrey A Law (law@cygnus.com)
* gcc.dg/{980502-1.c, clobbers.c}: New tests.
* gcc.c-torture/compile/{980504-1.c, 980506-1.c}: Likewise.
@@ -12868,7 +13429,7 @@ Wed May 20 11:29:48 1998 Jeffrey A Law (law@cygnus.com)
g77.f-torture/execute/claus.f, g77.f-torture/execute/cabs.f: Call
abort where appropriate.
-Tue May 5 19:20:13 1998 Michael Meissner <meissner@cygnus.com>
+1998-05-05 Michael Meissner <meissner@cygnus.com>
* lib/c-torture.exp (TORTURE_OPTIONS): Add -Os to options.
* lib/f-torture.exp (TORTURE_OPTIONS): Ditto.
@@ -12891,34 +13452,34 @@ Tue May 5 19:20:13 1998 Michael Meissner <meissner@cygnus.com>
* g77.f-torture/compile/970125-0.f: New test.
* g77.f-torture/compile/980419-1.f: New test.
-Wed Apr 8 13:09:15 1998 Jim Wilson <wilson@cygnus.com>
+1998-04-08 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/980407-1.c: Delete test. Is duplicate
of loop-4.c.
-Tue Apr 7 12:01:24 1998 Jim Wilson <wilson@cygnus.com>
+1998-04-07 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/980407-1.c: New test from Joern Rennecke.
-Fri Apr 3 12:27:49 1998 Jim Wilson <wilson@cygnus.com>
+1998-04-03 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/compile/980329-1.c: New test.
-Wed Mar 18 16:22:22 1998 Jim Wilson <wilson@cygnus.com>
+1998-03-18 Jim Wilson <wilson@cygnus.com>
* gcc.dg/980313-1.c: New test for fp conditional move on PPro.
* gcc.dg/980312-1.c: Fix typo in -march command.
-Mon Mar 16 20:01:30 1998 H.J. Lu (hjl@gnu.org)
+1998-03-16 H.J. Lu (hjl@gnu.org)
* gcc.dg/980312-1.c: New test for fp conditional move on PPro.
-Wed Mar 11 13:08:48 1998 Robert Lipe <robertl@dgii.com>
+1998-03-11 Robert Lipe <robertl@dgii.com>
* g77.f-torture/execute/980310-5.f: Deleted. Craig Burley and
Dave Love agree the Fortran source is bogus.
-Wed Mar 11 00:03:49 1998 Robert Lipe <robertl@dgii.com>
+1998-03-11 Robert Lipe <robertl@dgii.com>
* g77.f-torture/compile/980310-1.f, g77.f-torture/compile/980310-2.f
g77.f-torture/compile/980310-3.f, g77.f-torture/compile/980310-4.f
@@ -12926,7 +13487,7 @@ Wed Mar 11 00:03:49 1998 Robert Lipe <robertl@dgii.com>
g77.f-torture/compile/980310-8.f: New tests from egcs-bugs archives.
* g77.f-torture/execute/980310-5.f: New test from egcs-bugs archives.
-Tue Mar 10 00:31:51 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+1998-03-10 Alexandre Oliva <oliva@dcc.unicamp.br>
* g++.old-deja/g++.other/friend1.C: New test.
@@ -12935,16 +13496,16 @@ Tue Mar 10 00:31:51 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
* g77.f-torture/execute/dnrm2.f (dnrm2): Avoid uninitialized (and
possibly uninitialized) variables and declare dnrm2.
-Mon Feb 23 15:16:53 1998 Robert Lipe <robertl@dgii.com>
+1998-02-23 Robert Lipe <robertl@dgii.com>
From Bruno Haible <haible@ilog.fr>:
* gcc.c-torture/execute/980223.c: New test.
-Fri Feb 13 00:36:07 1998 Jeffrey A Law (law@cygnus.com)
+1998-02-13 Jeffrey A Law (law@cygnus.com)
* gcc.dg/ifelse-1.c: New test.
-Mon Feb 9 02:08:47 1998 H.J. Lu (hjl@gnu.org)
+1998-02-09 H.J. Lu (hjl@gnu.org)
* lib/g77.exp (g77_target_compile): Fix multilibs for libf2c.
@@ -12954,32 +13515,32 @@ Mon Feb 9 02:08:47 1998 H.J. Lu (hjl@gnu.org)
handling to be like "excess errors test fails".
* Update various tests accordingly.
-Fri Feb 6 14:30:48 1998 Jim Wilson <wilson@cygnus.com>
+1998-02-06 Jim Wilson <wilson@cygnus.com>
* gcc.c-torture/execute/980205.c: New test.
-Sun Jan 18 01:33:59 1998 Jeffrey A Law (law@cygnus.com)
+1998-01-18 Jeffrey A Law (law@cygnus.com)
* lib/c-torture.exp: Look for .x files instead of .cexp files.
* lib/f-torture.exp: Similarly.
* gcc.c-torture: Rename all .cexp files to .x files.
-Mon Dec 8 23:55:26 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-12-08 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/noncompile/noncompile.exp (921102-1.c): Fixed comment.
(940510-1.c): Removed duplicate.
(971104-1.c): New test.
-Tue Nov 25 16:18:51 1997 Kate Hedstrom (kate@ahab.rutgers.edu)
+1997-11-25 Kate Hedstrom (kate@ahab.rutgers.edu)
* lib/f-torture.exp: Improve error and loop detection.
-Wed Nov 19 14:27:04 1997 Michael Meissner <meissner@cygnus.com>
+1997-11-19 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/950221-1.c (filler): If STACK_SIZE is defined,
use that to size the filler array.
-Fri Sep 26 10:50:53 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-09-26 Bob Manson <manson@charmed.cygnus.com>
* lib/c-torture.exp(c-torture-execute): Fix typo.
@@ -12987,57 +13548,57 @@ Fri Sep 26 10:50:53 1997 Bob Manson <manson@charmed.cygnus.com>
testcase as the executable name. Keep the executable around if
the test fails.
-Fri Sep 19 17:19:53 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-09-19 Bob Manson <manson@charmed.cygnus.com>
* lib/c-torture.exp (TORTURE_OPTIONS): Removed unnecessary
changes. Only test one -g option, and move it to the end of the
list of options to test.
-Fri Sep 19 17:58:00 1997 Michael Meissner <meissner@cygnus.com>
+1997-09-19 Michael Meissner <meissner@cygnus.com>
* lib/c-torture.exp (TORTURE_OPTIONS): Check for the environment
variable GCC_TORTURE_OPTIONS to supply default switches separated
by colons. If no environment variable, run tests with -O0 -g, -O1
-g, and -O2 -g as well.
-Wed Sep 17 10:12:26 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-09-17 Bob Manson <manson@charmed.cygnus.com>
* lib/plumhall.exp: Don't set PHSRC in this file. Add a few
explanatory comments. Fix indentation.
-Mon Sep 15 00:36:53 1997 Jeffrey A Law (law@cygnus.com)
+1997-09-15 Jeffrey A Law (law@cygnus.com)
* lib/g++.exp (g++_init): Look for xgcc in $basedir too.
-Thu Sep 11 13:54:47 1997 Jeffrey A Law (law@cygnus.com)
+1997-09-11 Jeffrey A Law (law@cygnus.com)
* g++.old-deja/g++.brendan/scope4.C: No longer expected to fail.
* g++.old-deja/g++.mike/p7325.C: Likewise.
* g++.old-deja/g++.mike/eh51.C: No longer expected to fail on the PA.
-Thu Sep 11 10:00:03 1997 Alexandre Oliva (oliva@dcc.unicamp.br)
+1997-09-11 Alexandre Oliva (oliva@dcc.unicamp.br)
* g++.old-deja/g++.brendan/crash20.C: Rework to avoid libg++.
* g++.old-deja/g++.brendan/crash30.C: Likewise.
* g++.old-deja/g++.brendan/crash39.C: Likewise.
* g++.old-deja/g++.law/operators4.C: Likewise.
-Thu Sep 11 09:53:40 1997 Joe Buck (jbuck@synopsys.com)
+1997-09-11 Joe Buck (jbuck@synopsys.com)
* g++.old-deja/g++.mike/p658.C: eliminate <bool.h> use.
* g++.old-deja/g++.mike/p784.C: Ditto.
* g++.old-deja/g++.mike/p785.C: Ditto.
-Fri Sep 5 00:21:42 1997 Jeffrey A Law (law@cygnus.com)
+1997-09-05 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/cbrt.c: Tweak to work on more targets.
-Wed Sep 3 17:29:35 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-09-03 Bob Manson <manson@charmed.cygnus.com>
* gcc.c-torture/execute/ieee/ieee.exp: Check for ieee_multilib_flags
target feature; pass this to c-torture-execute as needed.
-Wed Sep 3 17:15:00 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-09-03 Bob Manson <manson@charmed.cygnus.com>
* lib/c-torture.exp(c-torture-execute): If the previous and the
current executables being tested are identical, we don't need to
@@ -13045,15 +13606,15 @@ Wed Sep 3 17:15:00 1997 Bob Manson <manson@charmed.cygnus.com>
unique. Add an optional argument for passing additional compiler
flags.
-Tue Sep 2 16:34:31 1997 Doug Evans <dje@canuck.cygnus.com>
+1997-09-02 Doug Evans <dje@canuck.cygnus.com>
* lib/gcc-dg.exp (gcc-dg-test): Fix typos setting compile_type.
-Fri Aug 29 12:48:09 1997 Jeffrey A Law (law@cygnus.com)
+1997-08-29 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/921007-1.c: Make strcmp static.
-Thu Jul 31 12:17:24 1997 Jeffrey A Law (law@cygnus.com)
+1997-07-31 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/920501-9.c: Fix to work on targets with
32bit or larger longs.
@@ -13061,44 +13622,44 @@ Thu Jul 31 12:17:24 1997 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/961017-2.c: Fix to work on targets which
have either a 32bit long or 32bit int.
-Tue Jul 29 00:40:38 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-07-29 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/conversion.c (test_float_to_integer):
Make double precision tests dependent on sizeof (double).
-Wed Jul 9 15:15:40 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-07-09 Bob Manson <manson@charmed.cygnus.com>
* gcc.prms/5403.c: Allow CRLFs to occur at the start of the output
too.
-Tue Jun 17 22:11:16 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-06-17 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/compile/961203-1.cexp: New script.
-Mon Jun 16 15:27:06 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-06-16 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp(g++_init): Use g++_include_flags instead of making
up the includes ourselves.
-Wed Jun 11 17:33:21 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-06-11 Bob Manson <manson@charmed.cygnus.com>
* lib/plumhall.exp: Remove random include, and add a few
verbose messages for debugging.
-Fri Jun 6 14:23:24 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-06-06 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp: Use g++_link_flags from libgloss.exp, instead
of trying to do it ourselves.
-Wed Jun 4 03:38:50 1997 J"orn Rennecke <amylaar@cygnus.co.uk>
+1997-06-04 J"orn Rennecke <amylaar@cygnus.co.uk>
* gcc.c-torture/execute/ieee/ieee.exp: Set -mieee for SH.
-Wed Jun 4 18:43:55 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-06-04 Bob Manson <manson@charmed.cygnus.com>
* gcc.prms/5403.c: Made regexp a bit less strict.
-Tue Jun 3 15:12:39 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-06-03 Bob Manson <manson@charmed.cygnus.com>
* lib/mike-gcc.exp: Don't use global exec_output anymore. Output
is returned from remote_load instead.
@@ -13107,30 +13668,30 @@ Tue Jun 3 15:12:39 1997 Bob Manson <manson@charmed.cygnus.com>
* lib/old-dejagnu.exp: Ditto.
* lib/c-torture.exp: Ditto.
-Fri May 30 23:15:15 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-05-30 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp: Use build_wrapper procedure.
* lib/gcc.exp: Ditto.
-Tue May 20 15:23:27 1997 Jeffrey A Law (law@cygnus.com)
+1997-05-20 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/*.c: Include stdlib.h instead of using
an old-style decl for malloc. Fixes tests to work when
sizeof (int) != sizeof (size_t).
-Thu May 15 14:00:04 1997 Mike Meissner <meissner@cygnus.com>
+1997-05-15 Mike Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/va-arg-3.c: If NO_VARARGS is defined, nop test.
* gcc.c-torture/execute/strct-varg-1.c: If NO_VARARGS is defined,
use stdargs.h interface.
-Thu May 15 14:10:39 1997 Mike Meissner <meissner@cygnus.com>
+1997-05-15 Mike Meissner <meissner@cygnus.com>
* lib/gcc.exp (gcc_target_compile): If gcc,no_varargs, define
NO_VARARGS when compiling.
-Thu May 1 14:49:19 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-05-01 Bob Manson <manson@charmed.cygnus.com>
* lib/plumhall.exp(ph_includes): New procedure.
(ph_make): Use it.
@@ -13139,17 +13700,17 @@ Thu May 1 14:49:19 1997 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp: Rename test-glue.c to testglue.c.
* lib/gcc.exp: Ditto.
-Thu Apr 10 14:50:26 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-04-10 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp(g++init): Don't try to be smart, always run g++_init
to completion when it's called.
-Fri Mar 21 16:34:52 1997 Michael Meissner <meissner@cygnus.com>
+1997-03-21 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/920501-7.c (main,x): If NO_LABELS_VALUES
is defined, don't do test.
-Thu Mar 20 09:50:32 1997 Doug Evans <dje@canuck.cygnus.com>
+1997-03-20 Doug Evans <dje@canuck.cygnus.com>
* lib/plumhall.exp (ph_make): Comment out errorCode=NONE test
for object files.
@@ -13159,7 +13720,7 @@ Thu Mar 20 09:50:32 1997 Doug Evans <dje@canuck.cygnus.com>
errorCode, record errorCode in log file.
(*): Replace send_log/verbose with verbose -log.
-Wed Mar 19 13:06:26 1997 Michael Meissner <meissner@cygnus.com>
+1997-03-19 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/ieee/rbug.c (main): Don't do long long to
double conversion if double isn't at least 8 bytes.
@@ -13171,7 +13732,7 @@ Wed Mar 19 13:06:26 1997 Michael Meissner <meissner@cygnus.com>
8 bytes, just exit, since 4 byte doubles don't have enough bits of
precision for the test to complete.
-Fri Mar 14 17:51:02 1997 Michael Meissner <meissner@cygnus.com>
+1997-03-14 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/920715-1.cexp (d10v-*-*): Expect to fail
if d10v is not compiled with the -mdouble64 flag.
@@ -13180,29 +13741,29 @@ Fri Mar 14 17:51:02 1997 Michael Meissner <meissner@cygnus.com>
* gcc.c-torture/execute/cvt-1.cexp (d10v-*-*): Expect to fail if
d10v is not compiled with the -mint32 flag.
-Thu Mar 13 16:09:28 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-03-13 Bob Manson <manson@charmed.cygnus.com>
* lib/plumhall.exp: Use incr_count.
-Wed Mar 12 10:01:33 1997 Jeffrey A Law (law@cygnus.com)
+1997-03-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.45.
-Sun Feb 23 18:12:04 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-23 Bob Manson <manson@charmed.cygnus.com>
* lib/gcc.exp(gcc_init): Add args parameter (which will contain
the name of the expect testcase file).
* lib/g++.exp(g++_init): Ditto.
-Thu Feb 20 13:53:05 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-20 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp(g++_exit): $gluefile lives on the build, not
the host.
* lib/gcc.exp(gcc_exit): New procedure.
-Wed Feb 19 15:16:16 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-19 Bob Manson <manson@charmed.cygnus.com>
* g++.old-deja/g++.rfg/*: Added "Build don't link" and ERROR
specs where appropriate.
@@ -13213,7 +13774,7 @@ Wed Feb 19 15:16:16 1997 Bob Manson <manson@charmed.cygnus.com>
* Converted all non-old-style g++ testcases to old-style, and
moved into g++.old-deja.
-Fri Feb 14 11:46:46 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-14 Bob Manson <manson@charmed.cygnus.com>
* lib/old-dejagnu.exp(old-dejagnu): Add various "skip if"
options.
@@ -13223,17 +13784,17 @@ Fri Feb 14 11:46:46 1997 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp(g++_init): Don't unset gluefile unless it exists.
-Thu Feb 13 17:30:46 1997 Michael Meissner <meissner@cygnus.com>
+1997-02-13 Michael Meissner <meissner@cygnus.com>
* lib/gcc.exp (gcc_target_compile): Add support for defining
NO_TRAMPOLINES and NO_LABEL_VALUES if the baseboard file indicates
the machine doesn't have those features.
-Tue Feb 11 12:57:11 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-11 Bob Manson <manson@charmed.cygnus.com>
* g++.law/operators4.exp: Don't use LIBS.
-Sat Feb 8 14:45:55 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-08 Bob Manson <manson@charmed.cygnus.com>
* g++.law/virtual1.exp: Don't use CXX_FLAGS.
@@ -13246,7 +13807,7 @@ Sat Feb 8 14:45:55 1997 Bob Manson <manson@charmed.cygnus.com>
* lib/gcc.exp: Allow use of --tool_exec and --tool_opt.
-Fri Feb 7 12:55:45 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-07 Bob Manson <manson@charmed.cygnus.com>
* lib/old-dejagnu.exp: Use prune_warnings instead of
prune_system_crud.
@@ -13256,13 +13817,13 @@ Fri Feb 7 12:55:45 1997 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp: Include both libstdc++ and libstdc++/stl.
-Fri Feb 7 10:41:53 1997 Jeffrey A Law (law@cygnus.com)
+1997-02-07 Jeffrey A Law (law@cygnus.com)
* 941014-2.c: Include stdlib.h
* 960327-1.c: Include stdio.h
* dbra.c, index-1.c: Don't assume ints are 32bits.
-Tue Feb 4 12:51:09 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-04 Bob Manson <manson@charmed.cygnus.com>
* lib/gcc.exp: Add gcc,stack_size target feature.
@@ -13274,12 +13835,12 @@ Tue Feb 4 12:51:09 1997 Bob Manson <manson@charmed.cygnus.com>
the correct include and link paths.
* g++.old-deja/old-deja.exp: Ditto.
-Mon Feb 3 19:00:07 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-03 Bob Manson <manson@charmed.cygnus.com>
* lib/g++.exp(g++_init): target_compile no longer returns the
filename of the result.
-Sun Feb 2 14:42:34 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-02 Bob Manson <manson@charmed.cygnus.com>
* gcc.misc-tests/gcov.exp: Add -nocomplain to the
call to glob.
@@ -13287,12 +13848,12 @@ Sun Feb 2 14:42:34 1997 Bob Manson <manson@charmed.cygnus.com>
* gcc.c-torture/special/special.exp: Change call to
gcc_target_compile to include the object file.
-Sun Feb 2 17:11:50 1997 Ian Lance Taylor <ian@cygnus.com>
+1997-02-02 Ian Lance Taylor <ian@cygnus.com>
* gcc.c-torture/special/special.exp: Correct misspelling in last
change.
-Sat Feb 1 12:34:23 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-02-01 Bob Manson <manson@charmed.cygnus.com>
* lib/plumhall.exp(ph_summary): Log the entire output of the
executable. Return -1 if there were any failures, 0 otherwise.
@@ -13300,17 +13861,17 @@ Sat Feb 1 12:34:23 1997 Bob Manson <manson@charmed.cygnus.com>
(ph_make): Clean up objects and executables that were built
if the tests succeeded.
-Thu Jan 30 13:45:56 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-01-30 Bob Manson <manson@charmed.cygnus.com>
* g++.old-deja/old-deja.exp: Add -L and -I flags so we include
libraries and includes in the build tree as appropriate.
-Wed Jan 29 17:19:34 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-01-29 Bob Manson <manson@charmed.cygnus.com>
* lib/c-torture.exp: Instead of looking for the global variable
NO_LONG_LONG, check to see if that's a feature of the target.
-Wed Jan 29 00:36:25 1997 Bob Manson <manson@charmed.cygnus.com>
+1997-01-29 Bob Manson <manson@charmed.cygnus.com>
* config/default.exp: Minimize. Delete the remainer of the files in
config; this functionality is now in devo/dejagnu/config.
@@ -13335,36 +13896,36 @@ Wed Jan 29 00:36:25 1997 Bob Manson <manson@charmed.cygnus.com>
lib/old-dejagnu.exp: Ditto.
lib/plumhall.exp: Ditto.
-Wed Jan 8 14:43:07 1997 Jim Wilson <wilson@cygnus.com>
+1997-01-08 Jim Wilson <wilson@cygnus.com>
* lib/plumhall.exp (ph_make): Use CFLAGS and ANSICFLAGS when linking.
(ph_linker): Likewise.
-Wed Nov 13 16:04:19 1996 Joern Rennecke <amylaar@cygnus.com>
+1996-11-13 Joern Rennecke <amylaar@cygnus.com>
* gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: Only use
MAP_ANON / MAP_ANONYMOUS if defined;
else try to map from /dev/zero .
-Tue Nov 12 23:30:12 1996 Jeffrey A Law (law@cygnus.com)
+1996-11-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: If MAP_ANON
isn't defined, then define it to MAP_ANONYMOUS.
-Tue Nov 12 11:57:49 1996 Jeffrey A Law (law@cygnus.com)
+1996-11-12 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.42 release.
-Mon Nov 11 12:45:31 1996 Jeffrey A Law (law@cygnus.com)
+1996-11-11 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.41 release.
-Sun Oct 27 18:56:18 1996 Jeffrey A Law (law@cygnus.com)
+1996-10-27 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/enum-1.c: New test. Will be in next
c-torture release.
-Thu Aug 15 11:09:36 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+1996-08-15 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/gcc.exp (gcc_init): Always append the target_info to CFLAGS
and LDFLAGS. Fix second case to append the target_info ldflags
@@ -13376,31 +13937,31 @@ Thu Aug 15 11:09:36 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* config/proelf.exp: Load remote.exp and do `push_target hppro'.
(GDB): Fix relative path to go up another dir for finding gdb.
-Thu Aug 8 17:03:27 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+1996-08-08 Rob Savoye <rob@chinadoll.cygnus.com>
* lib/gcc.exp(gcc_init): Set CFLAGS and LDFLAGS to their new
versions in the target_info array, if they don't exist.
-Fri Aug 2 15:39:03 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+1996-08-02 Brendan Kehoe <brendan@lisa.cygnus.com>
* config/vx.exp (${tool}_load): Fix syntax of `$shell_id < 0'.
-Mon Jul 8 15:45:58 1996 Jim Wilson <wilson@cygnus.com>
+1996-07-08 Jim Wilson <wilson@cygnus.com>
* lib/g++.exp: Change all uses of $base_dir/ to $base_dir/../.
* lib/gcc.exp, lib/old-dejagnu.exp: Likewise.
-Mon Jul 1 15:53:00 1996 Bob Manson <manson@charmed.cygnus.com>
+1996-07-01 Bob Manson <manson@charmed.cygnus.com>
* lib/old-dejagnu.exp: Don't remove the output file before we've
actually tested it. Don't append pwd to the path of the executable
we're testing.
-Sun Jun 30 14:37:50 1996 Doug Evans <dje@canuck.cygnus.com>
+1996-06-30 Doug Evans <dje@canuck.cygnus.com>
* lib/g++.exp (default_g++_start): Don't pass LDFLAGS, LIBS if -c.
-Wed Jun 26 14:15:55 1996 Bob Manson <manson@charmed.cygnus.com>
+1996-06-26 Bob Manson <manson@charmed.cygnus.com>
* lib/old-dejagnu.exp (old-dejagnu): Add $tmpdir to specify a
temporary directory for compiler files, and set it to a default
@@ -13416,16 +13977,16 @@ Wed Jun 26 14:15:55 1996 Bob Manson <manson@charmed.cygnus.com>
the compiler writes the final output file as $output. Use $output
as the executable to be tested.
-Mon Jun 24 17:12:16 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+1996-06-24 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp: Also add -Wl,-rpath,... for linux.
-Sat Jun 8 15:12:24 1996 Jeffrey A Law (law@cygnus.com)
+1996-06-08 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture/execute/pending-1.c: New test. Still
pending in Tege's queue.
-Wed Apr 24 18:13:45 1996 Jim Wilson <wilson@chestnut.cygnus.com>
+1996-04-24 Jim Wilson <wilson@chestnut.cygnus.com>
* lib/plumhall.exp (ph_summary): Add arguments name and exec_status.
Add variables local_failcnt and local_unresolvedcnt. Call gcc_fail
@@ -13435,19 +13996,19 @@ Wed Apr 24 18:13:45 1996 Jim Wilson <wilson@chestnut.cygnus.com>
(ph_execute): Add new argument. Pass additional arguments to
ph_summary. Call gcc_fail is there is no execution output.
-Wed Apr 24 13:39:23 1996 Jeffrey A Law (law@cygnus.com)
+1996-04-24 Jeffrey A Law (law@cygnus.com)
* lib/plumhall.exp (proc_summary): Output relavent summary
lines into the log so specific failures in plumhall can be
investigated.
-Wed Apr 10 13:23:45 1996 Jeffrey A Law (law@cygnus.com)
+1996-04-10 Jeffrey A Law (law@cygnus.com)
* lib/c-torture.exp: Provide a default value for $NO_LONG_LONG.
(c-torture-execute): Don't try to execute tests which use
"long long" types if $NO_LONG_LONG is nonzero.
-Mon Apr 8 08:52:29 1996 Doug Evans <dje@canuck.cygnus.com>
+1996-04-08 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/execute/ieee/ieee.exp: Run c-torture-execute,
not c-torture.
@@ -13455,31 +14016,31 @@ Mon Apr 8 08:52:29 1996 Doug Evans <dje@canuck.cygnus.com>
* gcc.ieee: Move from here.
* gcc.c-torture/execute/ieee: To here.
-Tue Mar 26 23:41:18 1996 Jeffrey A Law (law@cygnus.com)
+1996-03-26 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.41 release.
-Fri Mar 22 15:49:24 1996 Jeffrey A Law (law@cygnus.com)
+1996-03-22 Jeffrey A Law (law@cygnus.com)
* lib/c-torture.exp (c-torture-execute): Remove "$executable",
not "$output".
-Thu Mar 7 12:37:08 1996 Doug Evans <dje@charmed.cygnus.com>
+1996-03-07 Doug Evans <dje@charmed.cygnus.com>
* lib/gcc.exp (default_gcc_start): Don't pass $LDFLAGS $LIBS if
-c present.
-Sat Mar 2 22:36:37 1996 Jeffrey A Law (law@cygnus.com)
+1996-03-02 Jeffrey A Law (law@cygnus.com)
* config/proelf.exp: Handle connecting to a simulator.
-Wed Jan 31 00:58:15 1996 Jeffrey A Law (law@cygnus.com)
+1996-01-31 Jeffrey A Law (law@cygnus.com)
* config/proelf.exp: New file. Enough framework that we can
run c-torture tests on the proelf targets (or any other target
that gdb can connect to for that matter).
-Mon Jan 29 08:57:46 1996 Doug Evans <dje@canuck.cygnus.com>
+1996-01-29 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/special/special.exp: Delete libs arg to dg-runtest.
* gcc.ph/testing/limits/limits.exp: Likewise. Don't pass $CFLAGS.
@@ -13487,7 +14048,7 @@ Mon Jan 29 08:57:46 1996 Doug Evans <dje@canuck.cygnus.com>
* lib/plumhall.exp (ph_execute): Always call ph_summary if
exec_output exists.
-Sun Jan 28 11:28:43 1996 Doug Evans <dje@charmed.cygnus.com>
+1996-01-28 Doug Evans <dje@charmed.cygnus.com>
* config/sim.exp (SIM_TIME_LIMIT): New user settable variable.
(${tool}_load): Use 240 seconds if SIM_TIME_LIMIT not set.
@@ -13499,7 +14060,7 @@ Sun Jan 28 11:28:43 1996 Doug Evans <dje@charmed.cygnus.com>
${tool}_load.
* lib/chill.exp (verbose): Delete.
-Sat Jan 27 12:28:07 1996 Doug Evans <dje@charmed.cygnus.com>
+1996-01-27 Doug Evans <dje@charmed.cygnus.com>
* lib/gcc.exp (default_gcc_start): Change order of args to
$LDFLAGS $CFLAGS $LIBS.
@@ -13515,7 +14076,7 @@ Sat Jan 27 12:28:07 1996 Doug Evans <dje@charmed.cygnus.com>
* lib/dg.exp: Deleted, moved to dejagnu/lib.
-Wed Jan 24 18:37:00 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+1996-01-24 Brendan Kehoe <brendan@lisa.cygnus.com>
* g++.old-deja/old-deja.exp: Add passing of $mathlib to old-dejagnu.
@@ -13525,28 +14086,28 @@ Wed Jan 24 18:37:00 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (g++_init): Take out use of -rpath for the sun4, not
necessary.
-Sat Jan 20 17:22:08 1996 Brendan Kehoe <brendan@cygnus.com>
+1996-01-20 Brendan Kehoe <brendan@cygnus.com>
* g++.old-deja/old-deja.exp: Move setting of runshlib out of the
global for loop; add use of $mathlib.
* lib/old-dejagnu.exp (old-dejagnu-init): Put the runshlib
settings here; set mathlib for anything but VxWorks.
-Mon Jan 22 16:31:57 1996 Jeffrey A Law (law@cygnus.com)
+1996-01-22 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.40 release.
-Wed Jan 3 00:54:33 1996 Jeffrey A Law (law@cygnus.com)
+1996-01-03 Jeffrey A Law (law@cygnus.com)
* gcc.ph/testing/limits/limits.exp: Load ${tool}-dg.exp, not
dg.exp.
-Sun Dec 3 16:17:42 1995 Jeffrey A. Law <law@sethra.cygnus.com>
+1995-12-03 Jeffrey A. Law <law@sethra.cygnus.com>
* lib/c-torture.exp (c-torture-execute): Declare "output" as
global.
-Fri Nov 17 20:01:19 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-11-17 Doug Evans <dje@canuck.cygnus.com>
* lib/g++.exp (LIBS): Define if not already.
* lib/gcc-dg.exp (gcc-dg-test): Set executable file as a.out.
@@ -13555,28 +14116,28 @@ Fri Nov 17 20:01:19 1995 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/special (921210-1.c): Call prune_system_crud and
prune_gcc_output.
-Thu Nov 16 09:15:40 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-11-16 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture-compile): Fix calls to `unsupported'.
(c-torture-execute): Likewise. Rename `name' to `testcase'.
-Wed Nov 15 23:04:36 1995 Jeffrey A Law (law@cygnus.com)
+1995-11-15 Jeffrey A Law (law@cygnus.com)
* gcc.c-torture: Update to c-torture-1.39 release.
-Sat Nov 4 12:52:05 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-11-04 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture-execute): Don't return if one option
fails, try others as well.
-Thu Nov 2 09:28:35 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-11-02 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture-execute): This proc's result is `void'.
If compilation fails, mark execute tests as `untested'.
If test is marked as unsupported, don't mark compilation and
execute tests as failed.
-Wed Oct 25 20:57:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-25 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (g++_init): Don't link in libg++, and look to
libstdc++ for whether or not we want to be doing shared
@@ -13584,47 +14145,47 @@ Wed Oct 25 20:57:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/mike-g++.exp (postbase): Don't link in libg++.
* g++.old-deja/old-deja.exp: Likewise.
-Mon Oct 23 13:05:11 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-23 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (CXX): Default to run `c++' instead of `g++'.
-Tue Oct 17 15:24:47 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-17 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (g++_init): Also check for libg++.sl for the hppa.
For that, add `-Wl,-a,shared_archive'.
* g++.old-deja/old-deja.exp: Likewise.
-Tue Oct 17 13:09:06 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-10-17 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture-execute): Ensure CFLAGS restored.
-Mon Oct 16 23:13:32 1995 Brendan Kehoe <brendan@cygnus.com>
+1995-10-16 Brendan Kehoe <brendan@cygnus.com>
* lib/mike-g++.exp (postbase): Pay attention to the status of
g++_load.
-Mon Oct 16 19:28:32 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-16 Brendan Kehoe <brendan@lisa.cygnus.com>
* g++.old-deja/old-deja.exp: Add $LIBS at the end of the args.
-Mon Oct 16 13:48:58 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-10-16 Doug Evans <dje@canuck.cygnus.com>
* lib/gcc.exp (default_gcc_start): No longer need to log program
being executed or its output, execute_anywhere does that now.
* lib/g++.exp (default_g++_version): Call execute_anywhere.
(default_g++_start): Likewise. Delete calls to verbose/send_log.
-Thu Oct 12 10:34:58 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-12 Brendan Kehoe <brendan@lisa.cygnus.com>
* g++.old-deja/old-deja.exp: Updated the shared libg++ tests to be
the same as those in lib/g++.exp.
-Tue Oct 10 13:47:27 1995 Jeff Law (law@hurl.cygnus.com)
+1995-10-10 Jeff Law (law@hurl.cygnus.com)
* gcc.c-torture: Update to c-torture-1.38 release.
* gcc.ieee: Related changes.
-Fri Oct 6 12:39:17 1995 Rob Savoye <rob@darkstar.cygnus.com>
+1995-10-06 Rob Savoye <rob@darkstar.cygnus.com>
* mike-gcc.exp, mike-g++.exp: Use "execute_anywhere" rather than
"exec". Minor reformatting changes.
@@ -13640,41 +14201,41 @@ Fri Oct 6 12:39:17 1995 Rob Savoye <rob@darkstar.cygnus.com>
Use execute_anywhere rather than calling exec directly. Now it
works for canadian cross testing.
-Thu Oct 5 10:06:45 1995 Brendan Kehoe <brendan@rtl.cygnus.com>
+1995-10-05 Brendan Kehoe <brendan@rtl.cygnus.com>
* lib/g++.exp: Add -nocomplain flag to glob. Use catch to put the
results into a variable, and check that rather than using file exists.
-Wed Oct 4 16:31:02 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-10-04 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp: Use glob to see libg++.so.2.7.0, since sun4 doesn't
create a libg++.so. For sunos4.1.*, also add -ltermcap.
-Tue Sep 26 10:15:14 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-26 Brendan Kehoe <brendan@lisa.cygnus.com>
* g++.old-deja/old-deja.exp: Create and pass runshlib and
lib_curses if there's a shared libg++ in the build tree.
-Fri Sep 22 10:47:24 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-09-22 Doug Evans <dje@canuck.cygnus.com>
* lib/mike-{gcc,g++}.exp (postbase): Restore CFLAGS, CXX_FLAGS, LIBS
if not supported target.
-Fri Sep 22 09:22:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-22 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (g++_init): Move empty setting of runshlib and
link_curses up to always happen, not just for native builds.
-Thu Sep 21 10:23:32 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-09-21 Jeff Law (law@snake.cs.utah.edu)
* gcc.c-torture: Update to c-torture-1.36 release.
* gcc.failure: Related changes.
-Wed Sep 20 10:56:26 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-09-20 Doug Evans <dje@canuck.cygnus.com>
* lib/plumhall.exp (PHSRC, PHDST): Allow config files to override.
-Tue Sep 19 17:26:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-19 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/g++.exp (g++_init): Put the shared and math lib stuff in here.
* lib/mike-g++.exp (postbase): Not in here. Still reference
@@ -13684,33 +14245,33 @@ Tue Sep 19 17:26:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
pass the runtime shared library options for Solaris, OSF/1, and
Irix5, and link with -lcurses to avoid unresolved references.
-Wed Sep 13 15:28:10 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-13 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/gcc.exp (gcc_init): Return if gcc_initialized is 1, so we
only run once.
-Wed Sep 13 10:51:52 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-09-13 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture-compile): Don't alter CFLAGS.
-Mon Sep 11 11:02:03 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-09-11 Jeff Law (law@snake.cs.utah.edu)
* gcc.c-torture: Update to c-torture-1.35 release. Note we
do not have a framework for the "compat" tests yet.
-Sat Sep 9 16:15:20 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-09 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/mike-g++.exp (postbase): New local variable `mathlib',
set to null if we're testing vxworks5.1. Use that instead of
`-lm' in the setting of LIBS for link and run.
-Fri Sep 8 13:53:38 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-08 Brendan Kehoe <brendan@lisa.cygnus.com>
* config/rom68k.exp (${tool}_load): Major changes to make it
work. Verified that it does in fact return the stuff in
exec_output properly. Catch any Emul or any TRAP other than 0.
-Thu Sep 7 23:04:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-09-07 Brendan Kehoe <brendan@lisa.cygnus.com>
* lib/mike-g++.exp (prebase): Call g++_init at the end to set
LDFLAGS properly for targets that need stuff from libgloss.
@@ -13718,7 +14279,7 @@ Thu Sep 7 23:04:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
only run once.
(gpp_initialized): New variable.
-Wed Sep 6 21:56:13 1995 Rob Savoye <rob@darkstar.cygnus.com>
+1995-09-06 Rob Savoye <rob@darkstar.cygnus.com>
* config/rom68k.exp: Load libgloss.exp.
* lib/gcc.exp (gcc_init): get proper flags for newlib and libgloss
@@ -13726,7 +14287,7 @@ Wed Sep 6 21:56:13 1995 Rob Savoye <rob@darkstar.cygnus.com>
* lib/g++.exp (g++_init): get proper flags for newlib and libgloss
so we can produce a fully linked binary.
-Sun Sep 3 13:25:26 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-09-03 Doug Evans <dje@canuck.cygnus.com>
* lib/plumhall.exp (ph_section): Watch for expected failures.
Add missing `else'.
@@ -13735,7 +14296,7 @@ Sun Sep 3 13:25:26 1995 Doug Evans <dje@canuck.cygnus.com>
run the testcase.
(c-torture): Likewise.
-Mon Aug 28 11:23:38 1995 Doug Evans <dje@cygnus.com>
+1995-08-28 Doug Evans <dje@cygnus.com>
* gcc.dg/dg.exp (scan-assembler, scan-assembler-not): New procs.
@@ -13751,12 +14312,12 @@ Mon Aug 28 11:23:38 1995 Doug Evans <dje@cygnus.com>
* lib/plumhall.exp (ph_execute): Only call ph_summary if
execution "succeeded".
-Mon Aug 14 14:03:53 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-08-14 Doug Evans <dje@canuck.cygnus.com>
* config/win32.exp: New file.
* lib/c-torture.exp (c-torture-execute): Handle $exe_ext.
-Fri Aug 4 15:39:54 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-08-04 Doug Evans <dje@canuck.cygnus.com>
* lib/gcc-dg.exp (gcc-dg-prune): Mark testcases that fill ram as
unsupported.
@@ -13769,7 +14330,7 @@ Fri Aug 4 15:39:54 1995 Doug Evans <dje@canuck.cygnus.com>
prune_system_crud.
* lib/old-dejagnu.exp (old-dejagnu): Likewise.
-Tue Aug 1 11:09:33 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-08-01 Doug Evans <dje@canuck.cygnus.com>
* gcc.misc-tests/{acker1.c,dhry.c,dhry.h,matrix1.c,optbench.c,
sieve.c,sort2.c}: New files.
@@ -13785,73 +14346,73 @@ Tue Aug 1 11:09:33 1995 Doug Evans <dje@canuck.cygnus.com>
* config/sh.exp: Deleted (use sim.exp instead).
-Fri Jul 28 11:33:46 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-07-28 Brendan Kehoe <brendan@lisa.cygnus.com>
* config/vx.exp: Declare CHECKTASK as global.
* config/vxworks29k.exp: Reduce to only set CHECKTASK, and load vx.exp.
* lib/mike-g++.exp: Load [pwd]/a.out, not `./a.out'.
* lib/old-dejagnu.exp: Load [pwd]/$executable.
-Wed Jul 26 19:45:39 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+1995-07-26 Brendan Kehoe <brendan@lisa.cygnus.com>
* config/vxworks29k.exp: New file, for the a29k-vxworks5.1
target. Like vx.exp, only includes `vx29k.exp' instead of
`vxworks.exp'.
-Sun Jul 23 17:38:52 1995 Ian Lance Taylor <ian@cygnus.com>
+1995-07-23 Ian Lance Taylor <ian@cygnus.com>
* config/sim.exp: Increase time limit from 120 seconds to 240.
-Thu Jul 6 11:07:38 1995 Jeffrey A. Law <law@rtl.cygnus.com>
+1995-07-06 Jeffrey A. Law <law@rtl.cygnus.com>
* gcc.c-torture/execute/950628-1.c: New test.
-Sat Jun 10 18:51:41 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-06-10 Jeff Law (law@snake.cs.utah.edu)
* gcc.c-torture: Update with changes/additions from
c-torture-1.34.
-Mon Jun 5 17:58:07 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-06-05 Doug Evans <dje@canuck.cygnus.com>
* gcc.prms/prms.exp: Pass LDFLAGS to dg-test.
-Sun Jun 4 05:13:57 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-06-04 Jeff Law (law@snake.cs.utah.edu)
* gcc.c-torture/compile/funcptr-1.c: Test case for 7107.
-Thu Jun 1 00:06:19 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-06-01 Jeff Law (law@snake.cs.utah.edu)
* gcc.c-torture/compile/950512-1.c: New test.
* gcc.c-torture/execute/strct-pack-4.c, strct-pack-5.c}: Likewise.
* gcc.dg/struct-ret-1.c: Likewise.
-Wed May 31 14:25:13 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-05-31 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/execute/{920410-1.c,921113-1.c,921208-2.c,
930106-1.c,memcpy-1.c}: Use STACK_SIZE if defined.
-Tue May 30 11:19:54 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-05-30 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/special/920411-1.c: Deleted.
* gcc.c-torture/special/special.exp: Delete 920411-1.c.
-Mon May 22 16:55:11 1995 Doug Evans <dje@chestnut.cygnus.com>
+1995-05-22 Doug Evans <dje@chestnut.cygnus.com>
* config/sim.exp (${tool}_load): Hack in call to bash to get a
cpu limit.
-Fri May 12 18:57:54 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
+1995-05-12 Torbjorn Granlund <tege@rtl.cygnus.com>
* gcc.c-torture/execute/{950511-1.c,950512-1.c}: New tests.
-Thu May 4 14:23:54 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+1995-05-04 Torbjorn Granlund <tege@adder.cygnus.com>
From kenner;
* gcc.c-torture/execute/va-arg-2.c (f[0-9], f1[0-5]): Verify format
is the proper length.
* va-arg-3.c: Likewise.
-Sun Apr 30 16:02:59 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-04-30 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp: Moved to dejagnu/lib. Copy kept here (for awhile).
* lib/gcc-dg.exp: New file, gcc interface to dg.exp.
@@ -13859,56 +14420,56 @@ Sun Apr 30 16:02:59 1995 Doug Evans <dje@canuck.cygnus.com>
* lib/gcc.exp (default_gcc_start): Delete old cruft. Delete result.
* lib/g++.exp (default_g++_start): Delete old cruft.
-Tue Apr 25 17:20:18 1995 Torbjorn Granlund <tege@cygnus.com>
+1995-04-25 Torbjorn Granlund <tege@cygnus.com>
* gcc.c-torture/execute/memcpy-1.c: Decrease stack requirements from
(2 * (1 << 18)) to (2 * (1 << 17)).
* gcc.c-torture/execute/arith-rand.c: Avoid -0x80000000/-1.
-Thu Apr 20 12:21:13 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+1995-04-20 J.T. Conklin <jtc@rtl.cygnus.com>
* config/rom68k.exp: Renamed from config/idp.exp
-Tue Apr 18 13:33:26 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
+1995-04-18 Torbjorn Granlund <tege@rtl.cygnus.com>
* c-torture/compile/921109-2.c
-Tue Apr 18 10:45:12 1995 Mike Stump <mrs@cygnus.com>
+1995-04-18 Mike Stump <mrs@cygnus.com>
* lib/old-dejagnu.exp: We expect Execution test failure if we expected
excess errors.
-Sat Apr 15 11:16:58 1995 Doug Evans <dje@chestnut.cygnus.com>
+1995-04-15 Doug Evans <dje@chestnut.cygnus.com>
* lib/gcc.exp (default_gcc_start): Handle leading "-" in compiler
output.
* lib/g++.exp (default_g++_start): Likewise.
-Wed Mar 29 16:34:03 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+1995-03-29 Torbjorn Granlund <tege@adder.cygnus.com>
* gcc.c-torture/compile/950329-1.c: New test.
-Tue Mar 28 16:10:33 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+1995-03-28 J.T. Conklin <jtc@rtl.cygnus.com>
* config/bug.exp (${tool}_load): Updated to use new remote_open
and remote_close procs.
* config/idp.exp: New file.
-Wed Mar 22 15:01:58 1995 Torbjorn Granlund <tege@rtl.cygnus.com>
+1995-03-22 Torbjorn Granlund <tege@rtl.cygnus.com>
* gcc.c-torture/execute/950322-1.c: New test.
-Tue Mar 21 21:24:49 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-03-21 Doug Evans <dje@canuck.cygnus.com>
* config/vx.exp (${tool}_load): Clean up testing of return code from
vxworks_ld and vxworks_spawn.
-Tue Mar 21 17:01:42 1995 Doug Evans <dje@deneb.cygnus.com>
+1995-03-21 Doug Evans <dje@deneb.cygnus.com>
* lib/c-torture.exp (c-torture-execute): Pass same text to pass/fail.
-Mon Mar 13 14:49:42 1995 Mike Stump <mrs@cygnus.com>
+1995-03-13 Mike Stump <mrs@cygnus.com>
* lib/old-deja.exp: Add `excess errors test - ' error, now one
can mark excess errors on a machine by machine basis. Note, the
@@ -13918,12 +14479,12 @@ Mon Mar 13 14:49:42 1995 Mike Stump <mrs@cygnus.com>
mips-*-* alpha-*-* m68k-*-* is how to expect excess errors on
those 4 machines, but no others.
-Fri Mar 10 12:33:04 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+1995-03-10 J.T. Conklin <jtc@rtl.cygnus.com>
* gcc.c-torture/execute/execute.exp (c-torture-execute): from here.
* lib/c-torture.exp: to here.
-Fri Mar 10 10:38:15 1995 Torbjorn Granlund <tege@adder.cygnus.com>
+1995-03-10 Torbjorn Granlund <tege@adder.cygnus.com>
* gcc.c-torture/execute/950221-1.c: New test.
* gcc.c-torture/execute/struct-ret-1.c: New test.
@@ -13931,12 +14492,12 @@ Fri Mar 10 10:38:15 1995 Torbjorn Granlund <tege@adder.cygnus.com>
* gcc.c-torture/execute/941101-1.c (f): Fix typo, == was !=.
-Fri Mar 3 16:28:35 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-03-03 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/execute/arith-1.c (main): Return 0.
* gcc.c-torture/execute/arith-rand.c (main): Return 0.
-Wed Mar 1 02:08:29 1995 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu)
+1995-03-01 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu)
* g++.gb: New directory of tests, derived from my signature and
class scoping tests.
@@ -13969,16 +14530,16 @@ Wed Mar 1 02:08:29 1995 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu)
* g++.gb/README: New file, explains what these tests are about.
-Tue Feb 28 10:37:52 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-02-28 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp (dg-do): Support `preprocess'.
(dg-test): Likewise.
-Mon Feb 13 15:18:10 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+1995-02-13 J.T. Conklin <jtc@rtl.cygnus.com>
* config/udi.exp: change "continue -expect" to "exp_continue".
-Sat Feb 11 00:25:20 1995 Torbjorn Granlund (tege@tiny.cygnus.com)
+1995-02-11 Torbjorn Granlund (tege@tiny.cygnus.com)
* gcc.c-torture/execute/{921025-1.c, 930525-1.c}:
Delete redundant tests.
@@ -14013,23 +14574,23 @@ Sat Feb 11 00:25:20 1995 Torbjorn Granlund (tege@tiny.cygnus.com)
* gcc.c-torture/compile/920902-1.c: Delete 2:nd parameter.
-Wed Feb 8 15:30:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+1995-02-08 Jason Merrill <jason@phydeaux.cygnus.com>
* lib/mike-g++.exp: Add -lm to LIBS.
-Tue Feb 7 17:09:50 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-02-07 Doug Evans <dje@canuck.cygnus.com>
* lib/c-torture.exp (c-torture): Allow relative pathname in $srcdir.
-Mon Jan 30 14:33:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
+1995-01-30 Jason Merrill <jason@phydeaux.cygnus.com>
* lib/mike-g++.exp: Add -lstdc++ to LIBS.
-Thu Jan 12 16:41:34 1995 Doug Evans <dje@canuck.cygnus.com>
+1995-01-12 Doug Evans <dje@canuck.cygnus.com>
* gcc.misc-tests/dg-test.exp: Only run if $DG_TEST=yes.
-Mon Jan 2 11:50:10 1995 Jeff Law (law@snake.cs.utah.edu)
+1995-01-02 Jeff Law (law@snake.cs.utah.edu)
* g++.law/{arg9.C, arg10.C, arg11.C, arm15.C, arm16.C}: New tests.
* g++.law/{bad-error3.C, bad-error4.C, bad-error5.C}: Likewise.
@@ -14067,22 +14628,22 @@ Mon Jan 2 11:50:10 1995 Jeff Law (law@snake.cs.utah.edu)
No longer expected to fail.
* g++.law/missed-error3.C: Tweak for recent bool changes.
-Sun Dec 4 20:54:33 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-12-04 Doug Evans <dje@canuck.cygnus.com>
* config/emb-unix: Deleted.
* config/unix.exp (${tool}_load): Use new proc rsh_exec to perform
remote execution. Do final link on remote host if REMOTE_LINK is set.
-Thu Dec 1 08:43:05 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-12-01 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp (dg-test): Fix typo in last patch.
-Wed Nov 30 13:25:32 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-30 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp (dg-test): Fix pattern that searches for expected output
(handles multiple occurrences).
-Thu Nov 24 19:48:38 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-24 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/*/*.exp: Pass full pathname to c-torture.
* gcc.c-torture/execute/execute.exp (c-torture-execute): Remove
@@ -14094,16 +14655,16 @@ Thu Nov 24 19:48:38 1994 Doug Evans <dje@canuck.cygnus.com>
(gcc_fail): Likewise.
* lib/dg.exp (dg-test): Don't delete $subdir from pathname in messages.
-Wed Nov 23 13:56:00 1994 J.T. Conklin <jtc@rtl.cygnus.com>
+1994-11-23 J.T. Conklin <jtc@rtl.cygnus.com>
* lib/netware.exp: Only attach to NetWare i386 systems.
-Wed Nov 16 11:27:00 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-16 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp (dg-test): Don't print $subdir (or above) in pass/fail
messages. Add test name to "output pattern match" pass/fail message.
-Sat Nov 12 22:11:52 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-12 Doug Evans <dje@canuck.cygnus.com>
* gcc.dg: New testsuite.
* gcc.dg/dg.exp: New file.
@@ -14113,14 +14674,14 @@ Sat Nov 12 22:11:52 1994 Doug Evans <dje@canuck.cygnus.com>
* gcc.misc-tests/msgs.exp: New testcase driver.
-Wed Nov 9 14:23:09 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-09 Doug Evans <dje@canuck.cygnus.com>
* gcc.c-torture/execute/execute.exp (c-torture_execute): New proc.
Watch for illegal return values from ${tool}_load.
* config/unix.exp (${tool}_load): Fix pass/fail detection for
cross targets. Coerce return value >0 to 1.
-Tue Nov 8 14:10:33 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-08 Doug Evans <dje@canuck.cygnus.com>
* config/unix.exp (${tool}_load): Call program rsh, not proc.
@@ -14134,7 +14695,7 @@ Tue Nov 8 14:10:33 1994 Doug Evans <dje@canuck.cygnus.com>
and without loops.
* gcc.c-torture/execute/execute.exp: Likewise.
-Wed Nov 2 14:47:58 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-11-02 Doug Evans <dje@canuck.cygnus.com>
* config/*.exp: Clarify return code from ${tool}_load.
Call `unresolved' or `untested' instead of `warning' or `perror'
@@ -14177,13 +14738,13 @@ Wed Nov 2 14:47:58 1994 Doug Evans <dje@canuck.cygnus.com>
Get option list from TORTURE_OPTIONS. Delete -funroll[-all]-loops if
no loops. Update to reflect clarified return codes from ${tool}_load.
-Fri Oct 21 23:10:16 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-10-21 Doug Evans <dje@canuck.cygnus.com>
* lib/old-dejagnu.exp (process-option): Append ".*" to pattern
to grep for.
(old-dejagnu): Likewise (where necessary).
-Fri Oct 14 17:54:58 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-10-14 Doug Evans <dje@canuck.cygnus.com>
* gcc.misc-tests/gcov.exp: New file, for gcov testing.
@@ -14201,16 +14762,16 @@ Fri Oct 14 17:54:58 1994 Doug Evans <dje@canuck.cygnus.com>
Don't clobber previous definition of `unknown'.
Print tcl errors in `dg-final'.
-Wed Oct 12 13:05:37 1994 Doug Evans <dje@canuck.cygnus.com>
+1994-10-12 Doug Evans <dje@canuck.cygnus.com>
* lib/dg.exp (dg-process-target): Improve syntax error messages.
(dg-test): Don't print errorInfo, it contains stack backtrace.
-Mon Sep 26 12:18:53 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-26 Doug Evans (dje@canuck.cygnus.com)
* lib/g++.exp (runtest_file_p): Define if missing.
-Sat Sep 24 15:29:23 1994 Doug Evans (dje@cygnus.com)
+1994-09-24 Doug Evans (dje@cygnus.com)
* lib/mike-g++.exp: Comment out loading of g++.exp.
* lib/g++.exp: Update copyright. Test for existence of $CXX at start.
@@ -14227,7 +14788,7 @@ Sat Sep 24 15:29:23 1994 Doug Evans (dje@cygnus.com)
* g++.old-deja/old-deja.exp: utils.exp is loaded by runtest.exp.
* lib/old-dejagnu.exp: ${tool}.exp is loaded by config file.
-Thu Sep 22 11:39:17 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-22 Doug Evans (dje@canuck.cygnus.com)
* lib/c-torture.exp (c-torture-compile): Rework compiler
message processing.
@@ -14235,13 +14796,13 @@ Thu Sep 22 11:39:17 1994 Doug Evans (dje@canuck.cygnus.com)
* gcc.c-torture/compile/initbug1.{c,exp}: Deleted, not part of
c-torture.
-Wed Sep 21 09:49:43 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-21 Doug Evans (dje@canuck.cygnus.com)
* gcc.wendy/wendy.dis: Renamed from wendy.exp to disable the testsuite.
* lib/dg.exp (dg-process-target): Support { target native }.
-Tue Sep 20 17:16:55 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-20 Doug Evans (dje@canuck.cygnus.com)
* lib/dg.exp (dg-test): Clean up some comments. Delete code that
looked for "... program xxx got fatal signal".
@@ -14249,12 +14810,12 @@ Tue Sep 20 17:16:55 1994 Doug Evans (dje@canuck.cygnus.com)
Ignore compiler messages "path prefix not used" and "linker input
file unused".
-Wed Sep 14 11:44:40 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-14 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp (runtest_file_p): Define if missing.
* gcc.prms/template.c: Example to work from.
-Tue Sep 13 10:30:48 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-13 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp (gcc_finish): Delete code to update `testcnt'.
* lib/dg.exp (dg-test): Call unsupported testcases as such.
@@ -14275,12 +14836,12 @@ Tue Sep 13 10:30:48 1994 Doug Evans (dje@canuck.cygnus.com)
Separate execution pass/fail from output pattern match pass/fail.
Delete BUILD/XBUILD support (duplicate of LOSE/XLOSE).
-Mon Sep 12 13:47:35 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
+1994-09-12 Jim Wilson (wilson@sphagnum.cygnus.com)
* gcc.c-torture/special/special.exp: Don't expect failure for mips
target for 920510-1.c.
-Mon Sep 12 12:44:39 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-12 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp (gcc_init): Move initialized message to verbose level 3.
Clean up comment regarding use of passcnt, etc.
@@ -14298,11 +14859,11 @@ Mon Sep 12 12:44:39 1994 Doug Evans (dje@canuck.cygnus.com)
* g++.old-deja.exp: Likewise.
Move "Testing file" message to verbose level 1.
-Fri Sep 9 10:21:18 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-09 Doug Evans (dje@canuck.cygnus.com)
* gcc.wendy/t.c: Add DEJAGNU_CFLAGS:"-DNOPAUSE".
-Thu Sep 8 16:52:43 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-08 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp: Ensure CFLAGS, LIBS, and LDFLAGS are set.
(default_gcc_start): Accept optional second list element
@@ -14353,7 +14914,7 @@ Thu Sep 8 16:52:43 1994 Doug Evans (dje@canuck.cygnus.com)
* lib/c-torture.exp: Call gcc_pass/gcc_fail instead of
gcc_[ce]pass/fail.
-Wed Sep 7 11:09:08 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-09-07 Doug Evans (dje@canuck.cygnus.com)
* lib/g++.exp (g++_start): Rename arg to `prog' to avoid varargs
confusion.
@@ -14371,7 +14932,7 @@ Wed Sep 7 11:09:08 1994 Doug Evans (dje@canuck.cygnus.com)
Simplify verbose code, and include status and exec_output.
(g++_load): Use gcc_load.
-Sun Sep 4 13:59:27 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
+1994-09-04 Jim Wilson (wilson@sphagnum.cygnus.com)
* gcc.c-torture/noncompile/920928-1.c: Delete obsolete file.
* gcc.c-torture/noncompile/noncompile.exp: Delete support for
@@ -14379,7 +14940,7 @@ Sun Sep 4 13:59:27 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
940714-3.c as these testcases don't exist anymore. Make
va-arg-1.c expected to pass.
-Fri Aug 19 12:27:07 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-08-19 Doug Evans (dje@canuck.cygnus.com)
* gcc.misc-tests/misc.exp: Only run specific testcases.
* gcc.misc-tests/dg-test.exp: New file. Tests dg.exp.
@@ -14395,18 +14956,18 @@ Fri Aug 19 12:27:07 1994 Doug Evans (dje@canuck.cygnus.com)
Simplify "initialized" message.
(gcc_stat): Clean up comments a little.
-Tue Aug 16 11:16:46 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-08-16 Doug Evans (dje@canuck.cygnus.com)
* gcc.prms/prms.exp: New driver for gcc.prms testsuite directory.
-Mon Aug 15 21:20:36 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-08-15 Doug Evans (dje@canuck.cygnus.com)
* lib/old-dejagnu.exp (process-option): New proc.
(old-dejagnu-init, old-dejagnu-stat): Likewise.
(old-dejagnu): Simplify.
* g++.old-deja/old-deja.exp: Update to new version of old-dejagnu.
-Sun Aug 14 09:23:53 1994 Jeff Law (law@snake.cs.utah.edu)
+1994-08-14 Jeff Law (law@snake.cs.utah.edu)
* lib/c-torture.exp (c-torture): Only call setup_xfail if $xfail
exists and is not an empty string.
@@ -14443,7 +15004,7 @@ Sun Aug 14 09:23:53 1994 Jeff Law (law@snake.cs.utah.edu)
940712-1.c, calls.c, combine-hang.c, goto-1.c, init-2.c,
labels-1.c, packed-1.c, zero-strct-1.c}: Import from c-torture-1.29.
-Tue Jul 12 12:49:44 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
+1994-07-12 Jim Kingdon (kingdon@lioth.cygnus.com)
* gcc.execute/{940712-1.c, 940712-2.c, 940713-1.c, 940714-1.c},
gcc.noncompile/{940712-1.h, 940712-1a.h, 940712-1b.h, 940712-1.c,
@@ -14453,12 +15014,12 @@ Tue Jul 12 12:49:44 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
New tests.
* gcc.noncompile/noncompile.exp: Change accordingly.
-Thu Jul 7 14:20:33 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-07-07 Doug Evans (dje@canuck.cygnus.com)
* config/sim.exp, lib/c-torture.exp, lib/gcc.exp:
Undo previous clobberage.
-Mon Jul 4 17:00:59 1994 Jeff Law (law@snake.cs.utah.edu)
+1994-07-04 Jeff Law (law@snake.cs.utah.edu)
* gcc.compile/{931102-1.c, 931102-2.c, 931031-1.c}:
* gcc.special/{930510-1.c, special.exp}:
@@ -14466,18 +15027,18 @@ Mon Jul 4 17:00:59 1994 Jeff Law (law@snake.cs.utah.edu)
931102-2.c, struct-pack-1.c, divmod-1.c, complex-1.c,
struct-varargs-1.c}: New tests from c-torture-1.26.
-Tue Jun 28 17:39:42 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
+1994-06-28 J.T. Conklin (jtc@phishhead.cygnus.com)
* gcc.wendy/wendy.exp: add --'s so that -1 isn't parsed as an
argument to switch.
-Sat May 21 10:39:38 1994 Bill Cox (bill@rtl.cygnus.com)
+1994-05-21 Bill Cox (bill@rtl.cygnus.com)
* Revert the previous changes. Please see Rob's directory
(/lisa/test/rob/progressive/gcc/testsuite) for testing
fixes.
-Thu May 19 18:00:03 1994 Bill Cox (bill@rtl.cygnus.com)
+1994-05-19 Bill Cox (bill@rtl.cygnus.com)
* config/sim.exp, config/udi.exp, config/unix.exp, config/vx.exp,
g++.brendan/alignof.exp, g++.brendan/arm3.exp, g++.brendan/code-gen5.exp,
@@ -14507,17 +15068,17 @@ Thu May 19 18:00:03 1994 Bill Cox (bill@rtl.cygnus.com)
lib/chill.exp, lib/g++.exp, lib/gcc.exp, lib/mike-g++.exp, lib/mike-gcc.exp,
lib/old-dejagnu.exp: Checkin Rob's 94Q1 testing changes.
-Tue May 17 14:55:09 1994 Bill Cox (bill@rtl.cygnus.com)
+1994-05-17 Bill Cox (bill@rtl.cygnus.com)
* config/udi.exp, gcc.execute/execute.exp, gcc.wendy/wendy.exp,
lib/g++.exp, lib/old-dejagnu.exp: Replace error proc calls
with perror calls.
-Mon May 2 17:41:13 1994 Jason Merrill (jason@deneb.cygnus.com)
+1994-05-02 Jason Merrill (jason@deneb.cygnus.com)
* config/unix.exp (g++_load): Fix syntax.
-Thu Apr 14 12:22:10 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
+1994-04-14 Jim Wilson (wilson@sphagnum.cygnus.com)
* gcc.compile/initbug1.exp (CFLAGS): Add space at beginning.
* gcc.noncompile/921017-1.c: Deleted obsolete test.
@@ -14528,7 +15089,7 @@ Thu Apr 14 12:22:10 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
* gcc.wendy/hbm4.c: Correct typo.
* gcc.wendy/tad1.c, tad2.c: Correct expected output.
-Mon Mar 28 13:29:37 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-03-28 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp (gcc_[ce]{pass,fail}): Remove output/executable argument.
* gcc.wendy/wendy.exp (wendy_try): Remove `output' argument of
@@ -14540,19 +15101,19 @@ Mon Mar 28 13:29:37 1994 Doug Evans (dje@canuck.cygnus.com)
Call gcc_cpass, gcc_cfail.
(c-torture): Pass testing option to c-torture-compile.
-Mon Mar 21 12:40:33 1994 Doug Evans (dje@cygnus.com)
+1994-03-21 Doug Evans (dje@cygnus.com)
Bring patches over from progressive.
* config/default.exp: Exit remote shell cleanly.
(g++_exit, g++_start): Add default versions.
* config/sim.exp (gcc_load): Use perror, not error.
-Sun Mar 20 12:05:32 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-03-20 Doug Evans (dje@canuck.cygnus.com)
* lib/gcc.exp: Don't set CFLAGS if CC not set. It clobbers the value
set in site.exp.
-Mon Mar 14 19:30:28 1994 Doug Evans (dje@cygnus.com)
+1994-03-14 Doug Evans (dje@cygnus.com)
* gcc.wendy/wendy.exp (wendy_first_line): New proc to fetch
DEJAGNU_OUTPUT and DEJAGNU_CFLAGS.
@@ -14563,12 +15124,12 @@ Mon Mar 14 19:30:28 1994 Doug Evans (dje@cygnus.com)
* lib/gcc.exp: Minor cleanup work.
(gcc_cpass, gcc_cfail, gcc_epass, gcc_efail): New procs.
-Wed Mar 9 15:22:54 1994 Doug Evans (dje@canuck.cygnus.com)
+1994-03-09 Doug Evans (dje@canuck.cygnus.com)
* config/sim.exp (gcc_load): Document return codes better.
Don't pass -v to simulator.
-Thu Feb 24 07:15:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+1994-02-24 Jeffrey A. Law (law@snake.cs.utah.edu)
* gcc.special/920717-x.c: Fix typo.
* gcc.special/special.exp (920717-x.c): Use $srcdir/$subdir to
@@ -14576,7 +15137,7 @@ Thu Feb 24 07:15:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
* lib/mike-gcc.exp: Fix typo.
-Tue Feb 15 15:41:47 1994 Rob Savoye (rob@darkstar.cygnus.com)
+1994-02-15 Rob Savoye (rob@darkstar.cygnus.com)
* lib/gcc.exp: Minor cleanup work. Find the proper gcc or g++
binary to use, transform the name.
@@ -14584,22 +15145,22 @@ Tue Feb 15 15:41:47 1994 Rob Savoye (rob@darkstar.cygnus.com)
it's now a special case of gcc that requires no special support.
Add a default.exp for unsupported targets.
-Fri Feb 11 12:59:54 1994 Rob Savoye (rob@poseidon.cygnus.com)
+1994-02-11 Rob Savoye (rob@poseidon.cygnus.com)
* g++.jason/report.exp, g++.old-deja/old-deja.exp,
lib/old-dejagnu.exp: Fix a few patterns to work with the new
version of Tcl.
-Wed Feb 9 21:35:47 1994 Rob Savoye (rob@darkstar.cygnus.com)
+1994-02-09 Rob Savoye (rob@darkstar.cygnus.com)
* lib/c-torture.exp: Made "file prefix*never used a pass, rather
than a warning.
-Sun Feb 6 16:52:13 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
+1994-02-06 Jeffrey A. Law (law@snake.cs.utah.edu)
* lib/mike-gcc.exp: Add in recent changes from mike-g++.exp.
-Mon Jan 3 17:28:25 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
+1994-01-03 Jim Wilson (wilson@sphagnum.cygnus.com)
* gcc.execute/execute.exp: Combine opt_list and foption_list into
option_list. Compile every file with only 4/6 option choices
@@ -14610,12 +15171,12 @@ Mon Jan 3 17:28:25 1994 Jim Wilson (wilson@sphagnum.cygnus.com)
* lib/gcc.exp: Set LIBS, CFLAGS, and LDFLAGS to empty strings if
not already set.
-Thu Dec 30 17:17:07 1993 Mike Stump (mrs@rtl.cygnus.com)
+1993-12-30 Mike Stump (mrs@rtl.cygnus.com)
* lib/old-deja.exp: Add `excess errors test fails' error, now one
can put an XFAIL *-*-* on excess errors.
-Sun Dec 19 21:45:34 1993 Jeffrey A. Law (law@snake.cs.utah.edu
+1993-12-19 Jeffrey A. Law (law@snake.cs.utah.edu
* g++.law: Add more tests derived from g++-bugs snapshots.
@@ -14625,30 +15186,30 @@ Sun Dec 19 21:45:34 1993 Jeffrey A. Law (law@snake.cs.utah.edu
* lib/mike-gcc.exp (postbase): Delete the .o file after we've
compiled it, and the a.out file after we've run it.
-Fri Dec 17 11:29:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+1993-12-17 Brendan Kehoe (brendan@lisa.cygnus.com)
* lib/mike-g++.exp (postbase): Delete the .o file after we've
compiled it, and the a.out file after we've run it.
-Fri Dec 17 10:18:16 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+1993-12-17 Jeffrey A. Law (law@snake.cs.utah.edu)
* g++.law/*.exp: Avoid losing arguments added via "append" commands.
-Wed Dec 15 20:36:40 1993 Rob Savoye (rob@darkstar.cygnus.com)
+1993-12-15 Rob Savoye (rob@darkstar.cygnus.com)
* lib/gcc.exp, lib/g++.exp: Use catch rather than exec to get the
version number.
-Sun Dec 12 21:10:04 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
+1993-12-12 Jeffrey A. Law (law@snake.cs.utah.edu)
* g++.law: New directory of g++ tests derived from the g++-bugs
snapshots.
-Thu Dec 09 16:50:41 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-12-09 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.compile: initbug1.c initbug1.exp testcase added
-Mon Dec 06 11:09:52 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-12-06 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.dje/sizetype-1.exp, dje.exp: minor clean ups
* gcc.execute/execute.exp: minor cleanups. added gcc_stat calls. added
@@ -14657,7 +15218,7 @@ Mon Dec 06 11:09:52 1993 Jeffrey Wheat (cassidy@cygnus.com)
Jeff Law (law@cs.utah.edu)
-Tue Nov 30 16:34:07 1993 Mike Stump (mrs@cygnus.com)
+1993-11-30 Mike Stump (mrs@cygnus.com)
* config/unix-g++.exp: Follow the gcc way of doing things.
* g++.old-deja/old-deja.exp: Minor updates.
@@ -14665,37 +15226,37 @@ Tue Nov 30 16:34:07 1993 Mike Stump (mrs@cygnus.com)
* lib/old-dejagnu.exp: Minor updates.
* lib/mike-g++.exp: Always unset errorInfo.
-Sat Nov 6 11:34:51 1993 Mike Stump (mrs@cygnus.com)
+1993-11-06 Mike Stump (mrs@cygnus.com)
* lib/gcc.exp: Fix some errors with the below change, CC and
CFLAGS should be global when setting, not local.
-Wed Nov 3 11:16:26 1993 Rob Savoye (rob@darkstar.cygnus.com)
+1993-11-03 Rob Savoye (rob@darkstar.cygnus.com)
* lib/gcc.exp: Transform tool name.
-Wed Oct 27 23:57:29 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-27 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.*/*.exp: Fixd some de-stablizing changes. Sorry.
-Wed Oct 27 14:45:50 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-27 Jeffrey Wheat (cassidy@cygnus.com)
* lib/gcc.exp: change gcc_done to gcc_stat
-Wed Oct 27 09:57:51 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-27 Jeffrey Wheat (cassidy@cygnus.com)
* Upgraded gcc testsuite to c-torture version 1.25
-Sun Oct 24 10:58:03 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-24 Jeffrey Wheat (cassidy@cygnus.com)
* lib/gcc.exp: added reporting code. Changed verbose compile message.
* lib/c-torture: added hooks for new reporting code.
-Thu Oct 21 18:45:32 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-21 Jeffrey Wheat (cassidy@cygnus.com)
* config/sh-gcc.exp: check if sh-sim exists in the path
-Mon Oct 18 11:13:22 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-18 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.code_quality/code_quality.exp: Initial changes for new logic.
* gcc.compile/compile.exp: Initial changes for new logic.
@@ -14708,7 +15269,7 @@ Mon Oct 18 11:13:22 1993 Jeffrey Wheat (cassidy@cygnus.com)
* lib/c-torture.exp: Initial changes for new logic.
* lib/gcc.exp: Initial changes for new logic.
-Fri Oct 15 00:19:42 1993 Mike Stump (mrs@cygnus.com)
+1993-10-15 Mike Stump (mrs@cygnus.com)
* lib/mike-g++.exp, lib/old-dejagnu.exp: Make the message not
depend upon failure or success. Fully qualify names in failure
@@ -14718,38 +15279,38 @@ Fri Oct 15 00:19:42 1993 Mike Stump (mrs@cygnus.com)
like all others, so that things are uniform. Other miscellaneous
improvements.
-Wed Oct 13 15:04:51 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-13 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.cpp: new directory for cpp tests
-Mon Oct 4 09:03:41 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-10-04 Jeffrey Wheat (cassidy@cygnus.com)
* lib/chill.exp: Code reformatted, removed unused code.
* config/unix-chill.exp: Code reformatted, removed unused code.
* chill.execute/execute.exp: Code reformatted, removed unused code.
* chill.execute/oe/orient.exp: Code reformatted, removed unused code.
-Mon Oct 4 06:19:26 1993 Ian Lance Taylor (ian@cygnus.com)
+1993-10-04 Ian Lance Taylor (ian@cygnus.com)
* config/mips-gcc.exp, config/mips-g++.exp: New files. Execution
routines not written.
-Mon Sep 27 21:07:44 1993 Rob Savoye (rob@darkstar.cygnus.com)
+1993-09-27 Rob Savoye (rob@darkstar.cygnus.com)
* config/bug-gcc.exp: Use new procs from bug.exp.
-Tue Sep 21 18:21:12 1993 Rob Savoye (rob@darkstar.cygnus.com)
+1993-09-21 Rob Savoye (rob@darkstar.cygnus.com)
* config/vx-gcc.exp: Use new vxworks_ld proc, so files get loaded
via ftp, rather than depending on NFS.
* config/vx-gcc.exp: Use new vxworks_spawn proc to execute test
case.
-Thu Sep 9 23:09:15 1993 Rob Savoye (rob@darkstar.cygnus.com)
+1993-09-09 Rob Savoye (rob@darkstar.cygnus.com)
* config/bug-gcc.exp: Use new download proc.
-Tue Sep 14 19:23:58 1993 Jeffrey Wheat (cassidy at deneb.cygnus.com)
+1993-09-14 Jeffrey Wheat (cassidy at deneb.cygnus.com)
* chill.execute/execute.exp: cleanups, handles errors better
* chill.compile/compile.exp: rewrite, based on execute.exp
@@ -14760,13 +15321,13 @@ Tue Sep 14 19:23:58 1993 Jeffrey Wheat (cassidy at deneb.cygnus.com)
Added a hack to capture stderr from exec, so noncompile tests
can work.
-Sat Sep 11 15:30:10 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-09-11 Jeffrey Wheat (cassidy@cygnus.com)
* chill.execute/execute.exp: rewrite of testsuite driver
* lib/chill.exp: rewrite of testsuite driver
* config/unix-chill.exp: rewrite of testsuite driver
-Wed Aug 25 14:11:13 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-08-25 Bill Cox (bill@rtl.cygnus.com)
In chill.execute:
* iexpr.ch: Standardize uppercase.
@@ -14774,7 +15335,7 @@ Wed Aug 25 14:11:13 1993 Bill Cox (bill@rtl.cygnus.com)
* vary.ch: standardize. Correct varying string assignments.
* vary.dat: Add new output lines.
-Tue Aug 24 13:45:49 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-08-24 Bill Cox (bill@rtl.cygnus.com)
In chill.execute:
* chprintf.ch: Standardize use of uppercase.
@@ -14782,13 +15343,13 @@ Tue Aug 24 13:45:49 1993 Bill Cox (bill@rtl.cygnus.com)
rather than a SYN.
* pinits.ch: Standardize.
-Mon Aug 23 17:26:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
+1993-08-23 Per Bothner (bothner@kalessin.cygnus.com)
* rts.c: Get malloc() from <stdlib.h>, not <malloc.h>.
* Makefil: Renamed to Makefile.in.
* configure.in: New.
-Mon Aug 23 14:24:13 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-08-23 Bill Cox (bill@rtl.cygnus.com)
In chill.execute:
* .cvsignore: Add result/output files.
@@ -14802,16 +15363,16 @@ Mon Aug 23 14:24:13 1993 Bill Cox (bill@rtl.cygnus.com)
* sets.ch: Tiny cleanup.
* vary1.ch: Re-indent.
-Tue Aug 17 15:42:07 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-08-17 Bill Cox (bill@rtl.cygnus.com)
* Add PR-related files to Makefiles, .cvsignore files, etc.
-Mon Aug 2 15:46:05 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
+1993-08-02 Jeff Wheat (cassidy@cygnus.com)
* gcc.unsorted: flow.c and loop.c - renamed to avoid conflicts
with compiler objects. New names are test-flow.c and test-loop.c
-Tue Jul 27 10:08:08 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
+1993-07-27 Jeff Wheat (cassidy@cygnus.com)
* Upgraded c-torture tests from 1.19 to 1.20
@@ -14822,24 +15383,24 @@ Tue Jul 27 10:08:08 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
* gcc.failure: 920411-1.c 920627-2.c
* gcc.ieee: 920518-1.c 920810-1.c 930529-1.c
-Tue Jul 20 15:19:44 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
+1993-07-20 Jeff Wheat (cassidy@cygnus.com)
* chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp
More changes to get testsuite working properly. Needs more work.
Added some support for POSIX IEEE Std 1003.3-1991 error messages.
-Mon Jul 19 18:40:31 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
+1993-07-19 Jeff Wheat (cassidy@cygnus.com)
* chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp
More changes to get testsuite working properly. Needs more work.
-Tue Jul 13 18:38:56 PDT 1993 Jeff Wheat (cassidy@cygnus.com)
+1993-07-13 Jeff Wheat (cassidy@cygnus.com)
* chill.compile/compile.exp: Added for Dejagnu support
* chill.execute/execute.exp: Added for Dejagnu support
* lib/chill.exp config/unix-chill.exp : Added for Dejagnu support
-Sat Jun 19 07:13:05 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-06-19 Bill Cox (bill@rtl.cygnus.com)
This should complete moving the CHILL test files.
* chill.noncompile(.cvsignore printf.grt
@@ -14853,12 +15414,12 @@ Sat Jun 19 07:13:05 1993 Bill Cox (bill@rtl.cygnus.com)
test-support files.
(Makefile): More corrections.
-Fri Jun 18 23:40:54 1993 Bill Cox (bill@rtl.cygnus.com)
+1993-06-18 Bill Cox (bill@rtl.cygnus.com)
* chill.compile, chill.execute, chill.nocompile: Add CHILL
test cases, ready for DejaGnu.
-Thu Jun 17 19:14:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-06-17 Jeffrey Wheat (cassidy@cygnus.com)
* Upgraded c-torture tests from 1.18 to 1.19
@@ -14871,23 +15432,23 @@ Thu Jun 17 19:14:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
* gcc.misc-test(s): added tests:
inst-check.c test-consts.c test-ior.c test-switch.c
-Wed Jun 9 16:53:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
+1993-06-09 Brendan Kehoe (brendan@lisa.cygnus.com)
* lib/mike-g++.exp: Load `./a.out', not `a.out'.
-Mon Jun 7 16:18:40 1993 Ian Lance Taylor (ian@cygnus.com)
+1993-06-07 Ian Lance Taylor (ian@cygnus.com)
* g++.old-deja/old-deja.exp: Don't delete all the .o files.
-Thu Jun 3 13:13:36 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-06-03 Jeffrey Wheat (cassidy@cygnus.com)
* Upgraded c-torture tests from 1.17 to 1.18
-Wed Jun 2 19:02:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com)
+1993-06-02 Jeffrey Wheat (cassidy@cygnus.com)
* Upgraded c-torture tests from 1.12 to 1.17
-Fri Apr 30 09:38:41 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-30 Mike Werner (mtw@deneb.cygnus.com)
* lib/old-dejagnu.exp:
Fixed handling of XFAIL target triplets to correctly
@@ -14896,7 +15457,7 @@ Fri Apr 30 09:38:41 1993 Mike Werner (mtw@deneb.cygnus.com)
printed out by the result of the testcases within a
given test file.
-Thu Apr 29 19:06:29 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-29 Mike Werner (mtw@deneb.cygnus.com)
* lib/old-dejagnu.exp:
Reworked expected failure handling to trigger off of XFAIL
@@ -14906,7 +15467,7 @@ Thu Apr 29 19:06:29 1993 Mike Werner (mtw@deneb.cygnus.com)
It has just occured that the handling of wildcards in the
target triplet may not be correct.
-Fri Apr 23 13:16:20 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-23 Mike Werner (mtw@deneb.cygnus.com)
* g++.old-deja/tests:
Moved all subdirectories up one level into g++.old-deja .
@@ -14921,11 +15482,11 @@ Fri Apr 23 13:16:20 1993 Mike Werner (mtw@deneb.cygnus.com)
this corrected a problem with erroneous diff logs. Added code
to search testcases for expected fail and unexpected pass keywords.
-Tue Apr 20 18:27:58 1993 Rob Savoye (rob at darkstar.cygnus.com)
+1993-04-20 Rob Savoye (rob at darkstar.cygnus.com)
* lib/c-torture.exp: Ignore "file path prefix*unused" message.
-Thu Apr 15 11:01:59 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-15 Mike Werner (mtw@deneb.cygnus.com)
* g++.old-deja/tests/g++.sun/g++.frag/1045608.C:
Removed extraneous text from end of "Special g++ Options"
@@ -14935,14 +15496,14 @@ Thu Apr 15 11:01:59 1993 Mike Werner (mtw@deneb.cygnus.com)
keywords, embedded in testcases comments, which will trigger
calls to xpass and xfail.
-Wed Apr 14 14:28:01 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-14 Mike Werner (mtw@deneb.cygnus.com)
* lib/old-dejagnu.exp: Cleaned up pattern matching for keyphrase
comments embedded in the testcases, especially the one looking for
special compiler options, as well as the pattern matching for the
compiler output again.
-Mon Apr 12 15:15:37 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-12 Mike Werner (mtw@deneb.cygnus.com)
* lib/old-dejagnu.exp: Do a proper check of the return value for
execute tests. Fixed several problems with the pattern matching
@@ -14952,27 +15513,27 @@ Mon Apr 12 15:15:37 1993 Mike Werner (mtw@deneb.cygnus.com)
executes the tests passed to it and returns a usable return
value.
-Sun Apr 11 17:22:37 1993 Rob Savoye (rob at darkstar.cygnus.com)
+1993-04-11 Rob Savoye (rob at darkstar.cygnus.com)
* lib/gcc.exp: Exits gracefully if $CC is bogus.
-Fri Apr 9 09:41:59 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-09 Mike Werner (mtw@deneb.cygnus.com)
* lib/old-dejagnu.exp , g++.old-deja/old-deja.exp:
Modified both files to properly execute the old style
dejagnu tests. The previous versions of these files were
experimental and did not function anything near correctly.
-Mon Apr 5 21:08:24 1993 Rob Savoye (rob@cygnus.com)
+1993-04-05 Rob Savoye (rob@cygnus.com)
* Removed all Makefile.in and configure.in files. No configuration
needed now.
-Fri Apr 2 12:15:17 1993 Mike Werner (mtw@deneb.cygnus.com)
+1993-04-02 Mike Werner (mtw@deneb.cygnus.com)
* lib: relocated old-dejagnu.exp from devo/dejagnu/lib
-Sun Mar 28 11:17:48 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
+1993-03-28 Ken Raeburn (raeburn@kr-pc.cygnus.com)
* gcc.compile/configure.in, gcc.unsorted/configure.in,
gcc.special/configure.in, gcc.noncompile/configure.in,
@@ -14981,18 +15542,18 @@ Sun Mar 28 11:17:48 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
g++.niklas/configure.in, g++.mike/configure.in: Remove extra quote
in srcname setting.
-Thu Mar 25 20:07:55 1993 Rob Savoye (rob at darkstar.cygnus.com)
+1993-03-25 Rob Savoye (rob at darkstar.cygnus.com)
* lib/udi.exp: Fixed mondfe and mondfe_download.
* config/udi-gcc.exp: Fixed misc bugs, works with expect 4.x.
* config/abug-gcc.exp: Fixed misc bugs, works with expect 4.x.
-Thu Mar 25 13:06:41 1993 Ian Lance Taylor (ian@cygnus.com)
+1993-03-25 Ian Lance Taylor (ian@cygnus.com)
* config/udi-gdb.exp: Check $shell_id after connecting to target.
(gdb_exit): Don't remove *_soc files.
-Mon Mar 22 14:28:46 1993 Ian Lance Taylor (ian@cygnus.com)
+1993-03-22 Ian Lance Taylor (ian@cygnus.com)
* lib/c-torture.exp: Don't look for main; instead always use -w
-c. This is how the c-torture tests work. Remove the object
diff --git a/gcc/testsuite/g++.dg/ext/vlm1.C b/gcc/testsuite/g++.dg/ext/vlm1.C
index 61628e6bba4..13f67027710 100644
--- a/gcc/testsuite/g++.dg/ext/vlm1.C
+++ b/gcc/testsuite/g++.dg/ext/vlm1.C
@@ -4,7 +4,7 @@ template <class T> struct A {};
struct B {
static const int s;
- A<int[s]> a; // { dg-error "variably modified|no type" }
+ A<int[s]> a; // { dg-error "variably modified|no type|trying to instantiate" }
};
const int B::s=16;
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-1.C b/gcc/testsuite/g++.dg/gcov/gcov-1.C
index 617994401f6..6089adac05b 100644
--- a/gcc/testsuite/g++.dg/gcov/gcov-1.C
+++ b/gcc/testsuite/g++.dg/gcov/gcov-1.C
@@ -310,4 +310,4 @@ main()
return 0;
}
-/* { dg-final { run-gcov -b gcov-1.C } } */
+/* { dg-final { run-gcov branches { -b gcov-1.C } } } */
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-1.x b/gcc/testsuite/g++.dg/gcov/gcov-1.x
deleted file mode 100644
index b01ef42b9d7..00000000000
--- a/gcc/testsuite/g++.dg/gcov/gcov-1.x
+++ /dev/null
@@ -1,2 +0,0 @@
-set gcov_verify_branches 1
-return 0
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-2.C b/gcc/testsuite/g++.dg/warn/Wunused-2.C
index 9cdd11e84a6..dcad9015e11 100644
--- a/gcc/testsuite/g++.dg/warn/Wunused-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wunused-2.C
@@ -2,5 +2,5 @@
// { dg-options "-Wunused -O3" }
static const int i = 0;
-static void f() { } /* { dg-warning "defined but not used" } */
+static void f() { } /* { dg-warning "defined but not used" "" { xfail *-*-* } } */
static inline void g() { }
diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C b/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C
index f38154ec507..3bed73666c1 100644
--- a/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C
+++ b/gcc/testsuite/g++.old-deja/g++.benjamin/16077.C
@@ -17,7 +17,7 @@ public:
operator colombia();
};
-void peace(const colombia&); // WARNING - // WARNING -
+void peace(const colombia&);
void foo(nicaragua& b) {
peace(b); // WARNING - // WARNING -
diff --git a/gcc/testsuite/g++.old-deja/g++.ext/overload1.C b/gcc/testsuite/g++.old-deja/g++.ext/overload1.C
index d99e04fecb8..b1e96b5e6a2 100644
--- a/gcc/testsuite/g++.old-deja/g++.ext/overload1.C
+++ b/gcc/testsuite/g++.old-deja/g++.ext/overload1.C
@@ -11,8 +11,8 @@ struct X
{
X (int);
};
-void Foo (int, float, bool);
-void Foo (float, int, X);
+void Foo (int, float, bool); // WARNING - candidate
+void Foo (float, int, X); // WARNING - candidate
void Baz ()
{
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh33.C b/gcc/testsuite/g++.old-deja/g++.mike/eh33.C
index d37630ca946..ef574991f83 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/eh33.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/eh33.C
@@ -1,5 +1,5 @@
// Special g++ Options: -fexceptions
-// excess errors test - XFAIL hppa*-*-* sparc64-*-elf z8k-*-* arm-*-pe
+// excess errors test - XFAIL sparc64-*-elf z8k-*-* arm-*-pe
#include <exception>
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh50.C b/gcc/testsuite/g++.old-deja/g++.mike/eh50.C
index 9c06a04b9f5..76d89933065 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/eh50.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/eh50.C
@@ -1,5 +1,5 @@
// Special g++ Options: -fexceptions
-// excess errors test - XFAIL hppa*-*-* sparc64-*-elf z8k-*-* arm-*-pe
+// excess errors test - XFAIL sparc64-*-elf z8k-*-* arm-*-pe
#include <exception>
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/err1.C b/gcc/testsuite/g++.old-deja/g++.mike/err1.C
index 8748c7860b1..3f234bb92a4 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/err1.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/err1.C
@@ -2,7 +2,7 @@
struct gorf {
int stuff;
- void snarf();
+ void snarf(); // ERROR -
};
template <class T> void gorf::snarf() { return; } // ERROR -
diff --git a/gcc/testsuite/g++.old-deja/g++.other/decl5.C b/gcc/testsuite/g++.old-deja/g++.other/decl5.C
index b46d57da648..f384fe0316d 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/decl5.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/decl5.C
@@ -26,7 +26,7 @@ struct B {
struct A::fink { // ERROR - no such member
int m;
};
- struct A::Z { // ERROR - A::Z not a member of B XFAIL
+ struct A::Z { // ERROR - A::Z not a member of B
int m;
};
int m;
@@ -66,7 +66,7 @@ namespace NMS
int N::fn() { // ERROR - N::fn not a member of NMS
return 0;
}
- struct N::F { // ERROR - N::F not a member of NMS XFAIL
+ struct N::F { // ERROR - N::F not a member of NMS
int i;
};
}
diff --git a/gcc/testsuite/g++.old-deja/g++.other/new2.C b/gcc/testsuite/g++.old-deja/g++.other/new2.C
deleted file mode 100644
index 9a6e0514ff4..00000000000
--- a/gcc/testsuite/g++.old-deja/g++.other/new2.C
+++ /dev/null
@@ -1,21 +0,0 @@
-//Build don't link:
-typedef __SIZE_TYPE__ size_t;
-void *operator new(size_t, unsigned int);
-
-struct X{
- X();
- X(int);
-};
-
-
-void f(X *x = new X); // ERROR -
-
-void f(X *x = new X(4)); // ERROR -
-
-void f(X *x = new X[4]); // ERROR -
-
-void f(X *x = new (3) X(6)); // ERROR -
-
-void f(X *x = new (2) X[10]); // ERROR -
-
-void f(X *x = new X[10][5]); // ERROR -
diff --git a/gcc/testsuite/g++.old-deja/g++.warn/impint2.C b/gcc/testsuite/g++.old-deja/g++.warn/impint2.C
index 73e706e5e00..a522ffc34fa 100644
--- a/gcc/testsuite/g++.old-deja/g++.warn/impint2.C
+++ b/gcc/testsuite/g++.old-deja/g++.warn/impint2.C
@@ -13,7 +13,7 @@ struct X
X (int const &, int const &);
};
-void foo (int const &); // WARNING - in passing
+void foo (int const &);
void wibble (int const &);
void wibble (int const &, int const &);
void punk (int const & = 3.5f); // WARNING - in passing
diff --git a/gcc/testsuite/g77.dg/gcov/gcov-1.f b/gcc/testsuite/g77.dg/gcov/gcov-1.f
index d710483cedc..fa0ce55f8f8 100644
--- a/gcc/testsuite/g77.dg/gcov/gcov-1.f
+++ b/gcc/testsuite/g77.dg/gcov/gcov-1.f
@@ -118,9 +118,7 @@ C Test simple GOTO.
if (f .ne. 0) goto 100 ! count(2)
! branch(end)
gt1 = 1 ! count(1)
- ! branch(100)
goto 101 ! count(1)
- ! branch(end)
100 gt1 = 2 ! count(1)
101 continue ! count(2)
end
@@ -136,9 +134,7 @@ C Test simple GOTO again, this time out of a DO loop.
if (i .eq. f) goto 100 ! count(19)
end do
gt2 = 4 ! count(1)
- ! branch(100)
goto 101 ! count(1)
- ! branch(end)
100 gt2 = 8 ! count(1)
101 continue ! count(2)
end
@@ -149,17 +145,13 @@ C Test computed GOTO.
integer i
goto (101, 102, 103, 104), i ! count(2)
gt3 = 8 ! count(1)
- ! branch(100)
goto 105 ! count(1)
- ! branch(end)
101 gt3 = 1024
goto 105
102 gt3 = 2048
goto 105
103 gt3 = 16 ! count(1)
- ! branch(100)
goto 105 ! count(1)
- ! branch(end)
104 gt3 = 4096
goto 105
105 gt3 = gt3 * 2 ! count(2)
@@ -424,4 +416,4 @@ C Test nested IF statements and IF with compound expressions.
end if
end
C
-C { dg-final { run-gcov -b gcov-1.f } }
+C { dg-final { run-gcov branches calls { -b gcov-1.f } } }
diff --git a/gcc/testsuite/g77.dg/gcov/gcov-1.x b/gcc/testsuite/g77.dg/gcov/gcov-1.x
deleted file mode 100644
index 8e4f50be9a4..00000000000
--- a/gcc/testsuite/g77.dg/gcov/gcov-1.x
+++ /dev/null
@@ -1,3 +0,0 @@
-set gcov_verify_branches 1
-set gcov_verify_calls 1
-return 0
diff --git a/gcc/testsuite/gcc.c-torture/compile/20010327-1.c b/gcc/testsuite/gcc.c-torture/compile/20010327-1.c
index 711cd7151ef..10f7e39516f 100644
--- a/gcc/testsuite/gcc.c-torture/compile/20010327-1.c
+++ b/gcc/testsuite/gcc.c-torture/compile/20010327-1.c
@@ -1,6 +1,9 @@
+/* This testcase tests whether GCC can produce static initialized data
+ that references addresses of size 'unsigned long', even if that's not
+ the same as __SIZE_TYPE__. (See 20011114-1.c for the same test of
+ size __SIZE_TYPE__.)
+
+ Some rare environments might not have the required relocs to support
+ this; they should have this test disabled in the .x file. */
extern void _text;
-/* We use __SIZE_TYPE__ here because it's as wide as a pointer, so we
- know we won't have a non-constant because of extension or
- truncation of the pointer to fit. */
-static __SIZE_TYPE__ x
- = (__SIZE_TYPE__) &_text - (__SIZE_TYPE__) 0x10000000L - 1;
+static unsigned long x = (unsigned long) &_text - 0x10000000L - 1;
diff --git a/gcc/testsuite/gcc.c-torture/compile/20010518-2.x b/gcc/testsuite/gcc.c-torture/compile/20010518-2.x
index 4cfce33b2dc..1bd6f8fd464 100644
--- a/gcc/testsuite/gcc.c-torture/compile/20010518-2.x
+++ b/gcc/testsuite/gcc.c-torture/compile/20010518-2.x
@@ -1,2 +1,8 @@
-set options "-S"
+# This test fails on HC11/HC12 when it is compiled without -mshort because
+# the array is too large (INT_MAX/2 > 64K). Force to use 16-bit ints for it.
+if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"] } {
+ set options "-S -mshort"
+} else {
+ set options "-S"
+}
return 0
diff --git a/gcc/testsuite/gcc.c-torture/compile/980506-1.x b/gcc/testsuite/gcc.c-torture/compile/980506-1.x
index 056ef463835..133ed24d944 100644
--- a/gcc/testsuite/gcc.c-torture/compile/980506-1.x
+++ b/gcc/testsuite/gcc.c-torture/compile/980506-1.x
@@ -7,4 +7,7 @@ if { [istarget "h8300-*-*"] } {
return 1;
}
+if { [istarget "m6811-*-*"] || [istarget "m6812-*-*"] } {
+ return 1
+}
return 0
diff --git a/gcc/testsuite/gcc.c-torture/compile/simd-5.x b/gcc/testsuite/gcc.c-torture/compile/simd-5.x
index b7612f78787..81c9ccaa2f5 100644
--- a/gcc/testsuite/gcc.c-torture/compile/simd-5.x
+++ b/gcc/testsuite/gcc.c-torture/compile/simd-5.x
@@ -1,6 +1,16 @@
# h8300 does not have long long
if { [istarget "h8300-*-*"] } {
- return 1;
+ return 1;
+}
+
+# PowerPC-64 doesn't handle this; see PR target/9680
+set torture_eval_before_compile {
+ set compiler_conditional_xfail_data {
+ "PR target/9680" \
+ "powerpc64-*-*" \
+ { "*" } \
+ { "" }
+ }
}
return 0
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020227-1.x b/gcc/testsuite/gcc.c-torture/execute/20020227-1.x
index 67afb822088..72adedff865 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20020227-1.x
+++ b/gcc/testsuite/gcc.c-torture/execute/20020227-1.x
@@ -24,6 +24,8 @@ if { [istarget "sparc64-*-*"] || [istarget "sparcv9-*-*"] } {
{ "-O0" "-O1" }
}
}
+} elseif { [istarget "powerpc64-*-*"] } {
+ # PowerPC-64 doesn't fail at any optimization level.
} elseif { [istarget "*64*-*-*"] || [istarget "alpha*-*-*"]
|| [istarget "mmix-*-*"] || [istarget "mips*-*-irix6*"] } {
# Other 64-bit targets fail at all optimization levels.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020720-1.x b/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
index 76e446be4d1..58e311c0d3c 100644
--- a/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
+++ b/gcc/testsuite/gcc.c-torture/execute/20020720-1.x
@@ -15,7 +15,8 @@ set torture_eval_before_compile {
global compiler_conditional_xfail_data
set compiler_conditional_xfail_data {
"This test fails to optimize completely on certain platforms." \
- { "xtensa-*-*" "sh-*-*" "arm*-*-*" "strongarm*-*-*" "xscale*-*-*" "h8300*-*-*" "x86_64-*-*" } \
+ { "xtensa-*-*" "sh-*-*" "arm*-*-*" "strongarm*-*-*" "xscale*-*-*" \
+ "h8300*-*-*" "x86_64-*-*" "cris-*-*" } \
{ "*" } \
{ "-O0" }
}
diff --git a/gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c b/gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c
index f5316d41863..fc43c5721e8 100644
--- a/gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c
+++ b/gcc/testsuite/gcc.c-torture/execute/stdio-opt-1.c
@@ -54,7 +54,7 @@ int main()
return 0;
}
-#ifdef __OPTIMIZE__
+#if defined (__OPTIMIZE__) && ! defined (__OPTIMIZE_SIZE__)
/* When optimizing, all the above cases should be transformed into
something else. So any remaining calls to the original function
should abort. */
diff --git a/gcc/testsuite/gcc.dg/Wshadow-1.c b/gcc/testsuite/gcc.dg/Wshadow-1.c
index 63808aa9c89..320d4f808da 100644
--- a/gcc/testsuite/gcc.dg/Wshadow-1.c
+++ b/gcc/testsuite/gcc.dg/Wshadow-1.c
@@ -10,7 +10,7 @@ void foo (double decl1) /* { dg-warning "shadows a global decl" } */
{
}
-void foo1 (int d)
+void foo1 (int d) /* { dg-warning "shadowed declaration" } */
{
double d; /* { dg-bogus "warning" "warning in place of error" } */
/* { dg-error "shadows a parameter" "" { target *-*-* } 15 } */
diff --git a/gcc/testsuite/gcc.dg/Wswitch-default.c b/gcc/testsuite/gcc.dg/Wswitch-default.c
index 3cc7f2ef091..a1a3d39c1d9 100644
--- a/gcc/testsuite/gcc.dg/Wswitch-default.c
+++ b/gcc/testsuite/gcc.dg/Wswitch-default.c
@@ -18,8 +18,8 @@ foo (int i, int j, enum e ei, enum e ej, enum e ek, enum e el,
case 4: return 3;
default: break;
}
- switch (ei)
- { /* { dg-warning "switch missing default case" } */
+ switch (ei) /* { dg-warning "switch missing default case" } */
+ {
}
switch (ej)
{
diff --git a/gcc/testsuite/gcc.dg/Wswitch-enum.c b/gcc/testsuite/gcc.dg/Wswitch-enum.c
index 00e4b552f83..d031b12ce14 100644
--- a/gcc/testsuite/gcc.dg/Wswitch-enum.c
+++ b/gcc/testsuite/gcc.dg/Wswitch-enum.c
@@ -19,9 +19,9 @@ foo (int i, int j, enum e ei, enum e ej, enum e ek, enum e el,
case 4: return 3;
default: break;
}
- switch (ei)
- { /* { dg-warning "enumeration value `e1' not handled in switch" "enum e1" } */
- } /* { dg-warning "enumeration value `e2' not handled in switch" "enum e2" { target *-*-* } 23 } */
+ switch (ei) /* { dg-warning "enumeration value `e1' not handled in switch" "enum e1" } */
+ { /* { dg-warning "enumeration value `e2' not handled in switch" "enum e2" { target *-*-* } 22 } */
+ }
switch (ej)
{ /* { dg-warning "enumeration value `e1' not handled in switch" "enum e1" { target *-*-* } 28 } */
default: break;
diff --git a/gcc/testsuite/gcc.dg/Wswitch.c b/gcc/testsuite/gcc.dg/Wswitch.c
index 014919b87bd..38c3cbbb446 100644
--- a/gcc/testsuite/gcc.dg/Wswitch.c
+++ b/gcc/testsuite/gcc.dg/Wswitch.c
@@ -19,9 +19,9 @@ foo (int i, int j, enum e ei, enum e ej, enum e ek, enum e el,
case 4: return 3;
default: break;
}
- switch (ei)
- { /* { dg-warning "enumeration value `e1' not handled in switch" "enum e1" } */
- } /* { dg-warning "enumeration value `e2' not handled in switch" "enum e2" { target *-*-* } 23 } */
+ switch (ei) /* { dg-warning "enumeration value `e1' not handled in switch" "enum e1" } */
+ { /*{ dg-warning "enumeration value `e2' not handled in switch" "enum e2" { target *-*-* } 22 } */
+ }
switch (ej)
{
default: break;
diff --git a/gcc/testsuite/gcc.dg/builtins-3.c b/gcc/testsuite/gcc.dg/builtins-3.c
index 49bea5e126e..3c2dbfd7f52 100644
--- a/gcc/testsuite/gcc.dg/builtins-3.c
+++ b/gcc/testsuite/gcc.dg/builtins-3.c
@@ -1,7 +1,7 @@
-/* Copyright (C) 2002 Free Software Foundation.
+/* Copyright (C) 2002, 2003 Free Software Foundation.
Verify that built-in math function constant folding of constant
- arguments is correctly performed by the by the compiler.
+ arguments is correctly performed by the compiler.
Written by Roger Sayle, 16th August 2002. */
@@ -24,6 +24,12 @@ int main()
if (log (1.0) != 0.0)
link_error ();
+ if (sin (0.0) != 0.0)
+ link_error ();
+
+ if (cos (0.0) != 1.0)
+ link_error ();
+
if (sqrtf (0.0f) != 0.0f)
link_error ();
@@ -37,6 +43,12 @@ int main()
if (logf (1.0f) != 0.0f)
link_error ();
+ if (sinf (0.0f) != 0.0f)
+ link_error ();
+
+ if (cosf (0.0f) != 1.0f)
+ link_error ();
+
if (sqrtl (0.0l) != 0.0l)
link_error ();
@@ -50,6 +62,12 @@ int main()
if (logl (1.0l) != 0.0l)
link_error ();
+ if (sinl (0.0l) != 0.0l)
+ link_error ();
+
+ if (cosl (0.0l) != 1.0l)
+ link_error ();
+
return 0;
}
diff --git a/gcc/testsuite/gcc.dg/cpp/Wunused.c b/gcc/testsuite/gcc.dg/cpp/Wunused.c
index aa099ee79c8..ac363ad04b8 100644
--- a/gcc/testsuite/gcc.dg/cpp/Wunused.c
+++ b/gcc/testsuite/gcc.dg/cpp/Wunused.c
@@ -1,7 +1,8 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc. */
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. */
/* { dg-do preprocess } */
-/* { dg-options -Wunused-macros } */
+/* Duplicate command line options should not warn. */
+/* { dg-options "-Wunused-macros -Dfoo -Dfoo" } */
/* Test everything related to -Wunused-macros.
diff --git a/gcc/testsuite/gcc.dg/dll-1.c b/gcc/testsuite/gcc.dg/dll-1.c
index 4ae1a0e1797..f823523b270 100644
--- a/gcc/testsuite/gcc.dg/dll-1.c
+++ b/gcc/testsuite/gcc.dg/dll-1.c
@@ -1,10 +1,10 @@
/* { dg-do compile { target arm*-*-pe* } } */
-/* { dg-do compile { target thumb*-*-pe* } } */
/* { dg-options -mno-nop-fun-dllimport } */
__declspec (dllimport) void imp ();
-__declspec (dllexport) void exp () { imp (); }
+__declspec (dllexport) void _exp () { imp (); }
+
+/* { dg-final { scan-assembler "\.section\[ \t\]*.drectve\n\[^\n\]*-export:_exp.*__imp_imp" } } */
+/* { dg-final { scan-assembler-not "__imp__exp" } } */
-/* { dg-final { scan-assembler "\.section\[ \t\]*.drectve\n\[^\n\]*-export:exp.*__imp_imp" } } */
-/* { dg-final { scan-assembler-not "__imp_exp" } } */
diff --git a/gcc/testsuite/gcc.dg/dll-2.c b/gcc/testsuite/gcc.dg/dll-2.c
index bf917079965..45456ce8330 100644
--- a/gcc/testsuite/gcc.dg/dll-2.c
+++ b/gcc/testsuite/gcc.dg/dll-2.c
@@ -9,7 +9,8 @@
and functions. In C++, it only works for functions. */
/* { dg-do compile { target arm*-*-pe* } } */
-/* { dg-do compile { target thumb*-*-pe* } } */
+/* { dg-do compile { target i?86-pc-cygwin } } */
+/* { dg-do compile { target i?86-pc-mingw* } } */
__declspec (dllimport) int foo1 ();
__declspec (dllexport) int foo1 ();
diff --git a/gcc/testsuite/gcc.dg/dll-3.c b/gcc/testsuite/gcc.dg/dll-3.c
index 0be1f973025..2d5517eace6 100644
--- a/gcc/testsuite/gcc.dg/dll-3.c
+++ b/gcc/testsuite/gcc.dg/dll-3.c
@@ -1,7 +1,8 @@
/* Ensure dllexport overrides dllimport. */
/* { dg-do compile { target arm*-*-pe* } } */
-/* { dg-do compile { target thumb*-*-pe* } } */
+/* { dg-do compile { target i?86-pc-cygwin } } */
+/* { dg-do compile { target i?86-pc-mingw* } } */
__declspec (dllimport) int foo1 ();
__declspec (dllexport) int foo1 ();
@@ -12,5 +13,6 @@ __declspec (dllimport) int foo2 ();
__declspec (dllexport) int foo1 () { return foo2 (); }
__declspec (dllexport) int foo2 () { return foo1 (); }
-/* { dg-final { scan-assembler "\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo1.*\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo2" } } */
-/* { dg-final { scan-assembler-not "(__imp_foo1|__imp_foo2)" } } */
+/* { dg-final { scan-assembler "\.section\[ \t\]*.drectve\n.*-export:foo2" } } */
+/* { dg-final { scan-assembler "-export:foo1" } } */
+/* { dg-final { scan-assembler-not "(__imp_foo1|_imp__foo1|__imp_foo2|_imp__foo2)" } } */
diff --git a/gcc/testsuite/gcc.dg/dll-4.c b/gcc/testsuite/gcc.dg/dll-4.c
index fec08fcbb60..45ed7a11007 100644
--- a/gcc/testsuite/gcc.dg/dll-4.c
+++ b/gcc/testsuite/gcc.dg/dll-4.c
@@ -1,5 +1,6 @@
/* { dg-do compile { target arm*-*-pe* } } */
-/* { dg-do compile { target thumb*-*-pe* } } */
+/* { dg-do compile { target i?86-pc-cygwin } } */
+/* { dg-do compile { target i?86-pc-mingw* } } */
__declspec (dllimport) int foo1;
int foo1;
@@ -11,4 +12,4 @@ int f () { return foo1 + foo2; }
/* FIXME: We should scan the output of nm for this case. */
/* { dg-final { scan-assembler "(foo2:.*\.comm\[ \t_\]*foo1)" } } */
-/* { dg-final { scan-assembler-not "__imp_" } } */
+/* { dg-final { scan-assembler-not "(__imp_|_imp__)" } } */
diff --git a/gcc/testsuite/gcc.dg/funcorder.c b/gcc/testsuite/gcc.dg/funcorder.c
index 0dec72c7d02..b064d1cc467 100644
--- a/gcc/testsuite/gcc.dg/funcorder.c
+++ b/gcc/testsuite/gcc.dg/funcorder.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-options "-O2 -funit-at-a-time" } */
-/* { dg-final { scan-assembler-not "link_error" } } */
+/* { dg-final { if [ istarget hppa*-*-* ] { scan-assembler-not "link_error,%r" } else { scan-assembler-not "link_error" } } } */
/* In unit-at-time the functions should be assembled in order
e q t main, so we realize that they are pure. */
diff --git a/gcc/testsuite/gcc.dg/inline-1.c b/gcc/testsuite/gcc.dg/inline-1.c
index 17a9a2f7243..4dce611d912 100644
--- a/gcc/testsuite/gcc.dg/inline-1.c
+++ b/gcc/testsuite/gcc.dg/inline-1.c
@@ -1,7 +1,7 @@
/* Verify that DECL_INLINE gets copied between DECLs properly. */
/* { dg-do compile } */
/* { dg-options "-O1" } */
-/* { dg-final { scan-assembler-not "xyzzy" } } */
+/* { dg-final { if [ istarget hppa*-*-* ] { scan-assembler-not "xyzzy?,%r" } else { scan-assembler-not "xyzzy" } } } */
/* Test that declaration followed by definition inlines. */
static inline int xyzzy0 (int);
diff --git a/gcc/testsuite/gcc.dg/inline-2.c b/gcc/testsuite/gcc.dg/inline-2.c
index 0049fc8336d..28991bccb9f 100644
--- a/gcc/testsuite/gcc.dg/inline-2.c
+++ b/gcc/testsuite/gcc.dg/inline-2.c
@@ -14,6 +14,6 @@ int bar(void)
return foo() + 1;
}
-/* { dg-final { scan-assembler "bsr" { target alpha*-*-* } } } */
+/* { dg-final { scan-assembler-not "jsr" { target alpha*-*-* } } } */
/* { dg-final { scan-assembler-not "PLT" { target i?86-*-* x86_64-*-* } } } */
/* { dg-final { scan-assembler-not "plt" { target powerpc*-*-* } } } */
diff --git a/gcc/testsuite/gcc.dg/old-style-asm-1.c b/gcc/testsuite/gcc.dg/old-style-asm-1.c
index 006cf0949b0..c33707e609c 100644
--- a/gcc/testsuite/gcc.dg/old-style-asm-1.c
+++ b/gcc/testsuite/gcc.dg/old-style-asm-1.c
@@ -16,4 +16,12 @@ void foo(int v)
asm ("dummy3");
}
-/* { dg-final { scan-assembler "L2" } } */
+/* The purpose of the test below is to check that there are two branches
+ in the generated code, supposedly corresponding to the if-statements.
+ Warning: this is fragile and assumes that one of the generated labels
+ for the branches matches the string "L2", or as with
+ mmix-knuth-mmixware, "L:2". That assumption is generally invalid,
+ because for example it depends on the target macro
+ ASM_GENERATE_INTERNAL_LABEL to generate a name matching this regexp (as
+ with the default definition). */
+/* { dg-final { scan-assembler "L(:|\\\$0*)?2" } } */
diff --git a/gcc/testsuite/gcc.dg/pch/pch.exp b/gcc/testsuite/gcc.dg/pch/pch.exp
index 7a5aacaac56..543d6147d7b 100644
--- a/gcc/testsuite/gcc.dg/pch/pch.exp
+++ b/gcc/testsuite/gcc.dg/pch/pch.exp
@@ -41,8 +41,11 @@ foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
catch { file delete "$bname.s-gch" }
# We don't try to use the loop-optimizing options, since they are highly
- # unlikely to make any difference to PCH.
- foreach flags $torture_without_loops {
+ # unlikely to make any difference to PCH. However, we do want to
+ # add -O0 -g, since users who want PCH usually want debugging and quick
+ # compiles.
+ set pch_torture [concat [list {-O0 -g}] $torture_without_loops]
+ foreach flags $pch_torture {
verbose "Testing $nshort, $flags" 1
# For the header files, the default is to precompile.
diff --git a/gcc/testsuite/gcc.dg/special/ecos.exp b/gcc/testsuite/gcc.dg/special/ecos.exp
index b8875023ae1..835233f1d4b 100644
--- a/gcc/testsuite/gcc.dg/special/ecos.exp
+++ b/gcc/testsuite/gcc.dg/special/ecos.exp
@@ -155,7 +155,9 @@ if { [ check_weak_available ] == 1 } {
# gcsec-1.c
###########
-set ld_output [ remote_exec host "[ find_ld ]" "--help" ]
+# Check if the ld used by gcc supports --gc-sections.
+set gcc_ld [lindex [gcc_target_compile "-print-prog-name=ld" "" "none" ""] 0]
+set ld_output [remote_exec host "$gcc_ld" "--help"]
# AIX gld supports garbage collection. But AIX gcc does not support
# -ffunction-sections or -fdata-sections.
diff --git a/gcc/testsuite/gcc.misc-tests/bprob.exp b/gcc/testsuite/gcc.misc-tests/bprob.exp
index 5f370682a53..3203efa5108 100644
--- a/gcc/testsuite/gcc.misc-tests/bprob.exp
+++ b/gcc/testsuite/gcc.misc-tests/bprob.exp
@@ -20,7 +20,8 @@
# Some targets don't have any implementation of __bb_init_func or are
# missing other needed machinery.
if { [istarget mmix-*-*]
- || [istarget cris-*-*] } {
+ || [istarget cris-*-*]
+ || [istarget h8300-*-*] } {
return
}
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-4b.c b/gcc/testsuite/gcc.misc-tests/gcov-4b.c
index 72870b20952..139f10d86c9 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-4b.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-4b.c
@@ -258,4 +258,4 @@ main()
return 0;
}
-/* { dg-final { run-gcov -b gcov-4b.c } } */
+/* { dg-final { run-gcov branches { -b gcov-4b.c } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-4b.x b/gcc/testsuite/gcc.misc-tests/gcov-4b.x
deleted file mode 100644
index b01ef42b9d7..00000000000
--- a/gcc/testsuite/gcc.misc-tests/gcov-4b.x
+++ /dev/null
@@ -1,2 +0,0 @@
-set gcov_verify_branches 1
-return 0
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-5b.c b/gcc/testsuite/gcc.misc-tests/gcov-5b.c
index ec59e56aed4..cbd3958718c 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-5b.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-5b.c
@@ -31,4 +31,4 @@ int main ()
return 0;
}
-/* { dg-final { run-gcov -b gcov-5b.c } } */
+/* { dg-final { run-gcov branches { -b gcov-5b.c } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-5b.x b/gcc/testsuite/gcc.misc-tests/gcov-5b.x
deleted file mode 100644
index b01ef42b9d7..00000000000
--- a/gcc/testsuite/gcc.misc-tests/gcov-5b.x
+++ /dev/null
@@ -1,2 +0,0 @@
-set gcov_verify_branches 1
-return 0
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-6.c b/gcc/testsuite/gcc.misc-tests/gcov-6.c
index 34680d31b85..90273d56396 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-6.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-6.c
@@ -34,4 +34,4 @@ main()
/* returns(end) */
}
-/* { dg-final { run-gcov -b gcov-6.c } } */
+/* { dg-final { run-gcov branches calls { -b gcov-6.c } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-6.x b/gcc/testsuite/gcc.misc-tests/gcov-6.x
deleted file mode 100644
index 8e4f50be9a4..00000000000
--- a/gcc/testsuite/gcc.misc-tests/gcov-6.x
+++ /dev/null
@@ -1,3 +0,0 @@
-set gcov_verify_branches 1
-set gcov_verify_calls 1
-return 0
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-7.c b/gcc/testsuite/gcc.misc-tests/gcov-7.c
index e0ed7a3d3c8..700cec6f533 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-7.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-7.c
@@ -81,4 +81,4 @@ main()
/* returns(end) */
}
-/* { dg-final { run-gcov -b gcov-7.c } } */
+/* { dg-final { run-gcov calls branches { -b gcov-7.c } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-7.x b/gcc/testsuite/gcc.misc-tests/gcov-7.x
deleted file mode 100644
index 8e4f50be9a4..00000000000
--- a/gcc/testsuite/gcc.misc-tests/gcov-7.x
+++ /dev/null
@@ -1,3 +0,0 @@
-set gcov_verify_branches 1
-set gcov_verify_calls 1
-return 0
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-8.c b/gcc/testsuite/gcc.misc-tests/gcov-8.c
index 4c95b3dae30..7223bde8374 100644
--- a/gcc/testsuite/gcc.misc-tests/gcov-8.c
+++ b/gcc/testsuite/gcc.misc-tests/gcov-8.c
@@ -44,4 +44,4 @@ int main ()
return t == 0;
}
-/* { dg-final { run-gcov -b gcov-8.c } } */
+/* { dg-final { run-gcov branches {-b gcov-8.c } } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-8.x b/gcc/testsuite/gcc.misc-tests/gcov-8.x
deleted file mode 100644
index b01ef42b9d7..00000000000
--- a/gcc/testsuite/gcc.misc-tests/gcov-8.x
+++ /dev/null
@@ -1,2 +0,0 @@
-set gcov_verify_branches 1
-return 0
diff --git a/gcc/testsuite/lib/gcov.exp b/gcc/testsuite/lib/gcov.exp
index 672156eb9ed..3350d288c04 100644
--- a/gcc/testsuite/lib/gcov.exp
+++ b/gcc/testsuite/lib/gcov.exp
@@ -168,7 +168,7 @@ proc verify-calls { testcase file } {
set n 0
while { [gets $fd line] >= 0 } {
regexp "^\[^:\]+: *(\[0-9\]+):" "$line" all n
- if [regexp "returns" $line] {
+ if [regexp "return" $line] {
verbose "Processing returns line $n: $line" 3
if [regexp "returns\\((\[0-9 \]+)\\)" "$line" all new_shouldbe] {
# All percentages in the current list should have been seen.
@@ -179,12 +179,12 @@ proc verify-calls { testcase file } {
}
# Record the percentages to check for.
set shouldbe $new_shouldbe
- } elseif [regexp "call +\[0-9\]+ returns (-\[0-9\]+)%" "$line" \
+ } elseif [regexp "call +\[0-9\]+ returned (-\[0-9\]+)%" "$line" \
all returns] {
# Percentages should never be negative.
fail "$n: negative percentage: $returns"
incr failed
- } elseif [regexp "call +\[0-9\]+ returns (\[0-9\]+)%" "$line" \
+ } elseif [regexp "call +\[0-9\]+ returned (\[0-9\]+)%" "$line" \
all returns] {
# For branches we check that percentages are not greater than
# 100 but call return percentages can be, as for setjmp(), so
@@ -217,37 +217,40 @@ proc verify-calls { testcase file } {
# Called by dg-final to run gcov and analyze the results.
#
-# ARGS is the options to pass to gcov followed by the name of the
-# test source file.
+# ARGS consists of the optional strings "branches" and/or "calls",
+# (indicating that these things should be verified) followed by a
+# list of arguments to provide to gcov, including the name of the
+# source file.
proc run-gcov { args } {
global GCOV
global srcdir subdir
- # Extract the test name from the arguments.
- set testcase [lindex $args end]
+ set gcov_args [lindex $args end]
+
+ set gcov_verify_calls 0
+ set gcov_verify_branches 0
+ set gcov_execute_xfail ""
+ set gcov_verify_xfail ""
- # Get special options for this test from the .x script, if present.
- # This can include:
- # gcov_execute_xfail string to pass to setup_xfail
- # gcov_verify_xfail string to pass to setup_xfail
- # gcov_verify_branches if defined, check branch percentages
- # gcov_verify_calls if defined, check call return percentages
- if [file exists [file rootname $srcdir/$subdir/$testcase].x] {
- set done_p 0
- catch "set done_p \[source [file rootname $srcdir/$subdir/$testcase].x\]"
- if { $done_p } {
- return
+ foreach a $args {
+ if { $a == "calls" } {
+ set gcov_verify_calls 1
+ } elseif { $a == "branches" } {
+ set gcov_verify_branches 1
}
}
- if [info exists gcov_execute_xfail] {
+ # Extract the test name from the arguments.
+ set testcase [lindex $gcov_args end]
+
+ if { $gcov_execute_xfail != "" } {
eval setup_xfail [split $gcov_execute_xfail]
}
verbose "Running $GCOV $testcase" 2
set testcase [remote_download host $testcase];
- set result [remote_exec host $GCOV $args];
+ set result [remote_exec host $GCOV $gcov_args];
if { [lindex $result 0] != 0 } {
fail "$subdir/$testcase gcov failed: [lindex $result 1]"
clean-gcov $testcase
@@ -263,7 +266,7 @@ proc run-gcov { args } {
}
remote_upload host $testcase.gcov $testcase.gcov;
- if [info exists gcov_verify_xfail] {
+ if { $gcov_verify_xfail != "" } {
eval setup_xfail [split $gcov_verify_xfail]
}
@@ -272,12 +275,12 @@ proc run-gcov { args } {
# If requested via the .x file, check that branch and call information
# is correct.
- if [info exists gcov_verify_branches] {
+ if { $gcov_verify_branches } {
set bfailed [verify-branches $testcase $testcase.gcov]
} else {
set bfailed 0
}
- if [info exists gcov_verify_calls] {
+ if { $gcov_verify_calls } {
set cfailed [verify-calls $testcase $testcase.gcov]
} else {
set cfailed 0
diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp
index 774ec4a7ecd..133516d11cd 100644
--- a/gcc/testsuite/lib/scanasm.exp
+++ b/gcc/testsuite/lib/scanasm.exp
@@ -32,8 +32,8 @@ proc scan-assembler { args } {
switch [dg-process-target [lindex $args 1]] {
"S" { }
"N" { return }
- "F" { error "scan-assembler: `xfail' not allowed here" }
- "P" { error "scan-assembler: `xfail' not allowed here" }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
}
}
@@ -70,8 +70,8 @@ proc scan-assembler-times { args } {
switch [dg-process-target [lindex $args 2]] {
"S" { }
"N" { return }
- "F" { error "scan-assembler: `xfail' not allowed here" }
- "P" { error "scan-assembler: `xfail' not allowed here" }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
}
}
@@ -108,8 +108,8 @@ proc scan-assembler-not { args } {
switch [dg-process-target [lindex $args 1]] {
"S" { }
"N" { return }
- "F" { error "scan-assembler-not: `xfail' not allowed here" }
- "P" { error "scan-assembler-not: `xfail' not allowed here" }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
}
}
@@ -145,8 +145,8 @@ proc scan-assembler-dem { args } {
switch [dg-process-target [lindex $args 1]] {
"S" { }
"N" { return }
- "F" { error "[lindex $args 0]: `xfail' not allowed here" }
- "P" { error "[lindex $args 0]: `xfail' not allowed here" }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
}
}
@@ -191,8 +191,8 @@ proc scan-assembler-dem-not { args } {
switch [dg-process-target [lindex $args 1]] {
"S" { }
"N" { return }
- "F" { error "scan-assembler-dem-not: `xfail' not allowed here" }
- "P" { error "scan-assembler-dem-not: `xfail' not allowed here" }
+ "F" { setup_xfail "*-*-*" }
+ "P" { }
}
}
diff --git a/gcc/testsuite/objc.dg/naming-1.m b/gcc/testsuite/objc.dg/naming-1.m
index f49c73678f9..69d98b7be51 100644
--- a/gcc/testsuite/objc.dg/naming-1.m
+++ b/gcc/testsuite/objc.dg/naming-1.m
@@ -17,5 +17,5 @@ void foo(void)
void bar(void)
{
View *view; /* ok */
- View = 1; /* { dg-error "parse error" } */
+ View = 1; /* { dg-error "(parse|syntax) error" } */
}
diff --git a/gcc/testsuite/objc.dg/naming-2.m b/gcc/testsuite/objc.dg/naming-2.m
index 2d15ae61074..72fc67fc78c 100644
--- a/gcc/testsuite/objc.dg/naming-2.m
+++ b/gcc/testsuite/objc.dg/naming-2.m
@@ -4,7 +4,7 @@
@interface Foo
@end
-float Foo; /* { dg-error "parse error before" } */
+float Foo; /* { dg-error "(parse|syntax) error" } */
double Bar;
@interface Bar
diff --git a/gcc/toplev.c b/gcc/toplev.c
index a5360401e24..cab201b2d34 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -76,6 +76,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tree-alias-common.h"
#include "cfgloop.h"
#include "hosthooks.h"
+#include "cgraph.h"
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
#include "dwarf2out.h"
@@ -135,6 +136,9 @@ static void print_switch_values PARAMS ((FILE *, int, int, const char *,
/* Nonzero to dump debug info whilst parsing (-dy option). */
static int set_yydebug;
+/* True if we don't need a backend (e.g. preprocessing only). */
+static bool no_backend;
+
/* Length of line when printing switch values. */
#define MAX_LINE 75
@@ -177,7 +181,7 @@ const char *dump_base_name;
/* Name to use as a base for auxiliary output files. */
-const char *aux_base_name;
+static const char *aux_base_name;
/* Format to use to print dumpfile index value */
#ifndef DUMPFILE_FORMAT
@@ -322,7 +326,7 @@ static void close_dump_file PARAMS ((enum dump_file_index,
int rtl_dump_and_exit;
int flag_print_asm_name;
static int version_flag;
-static char *filename;
+static const char *filename;
enum graph_dump_types graph_dump_format;
/* Name for output file of assembly code, specified with -o. */
@@ -741,6 +745,10 @@ int flag_unwind_tables = 0;
int flag_asynchronous_unwind_tables = 0;
+/* Nonzero means allow for forced unwinding. */
+
+int flag_forced_unwind_exceptions;
+
/* Nonzero means don't place uninitialized global data in common storage
by default. */
@@ -1151,6 +1159,8 @@ static const lang_independent_options f_options[] =
N_("Generate unwind tables exact at each instruction boundary") },
{"non-call-exceptions", &flag_non_call_exceptions, 1,
N_("Support synchronous non-call exceptions") },
+ {"forced-unwind-exceptions", &flag_forced_unwind_exceptions, 1,
+ N_("Support forced unwinding, e.g. for thread cancellation") },
{"profile-arcs", &profile_arc_flag, 1,
N_("Insert arc based program profiling code") },
{"test-coverage", &flag_test_coverage, 1,
@@ -2007,7 +2017,7 @@ wrapup_global_declarations (vec, len)
decl = vec[i];
/* We're not deferring this any longer. Assignment is
- conditional to avoid needlessly dirtying PCH pages. */
+ conditional to avoid needlessly dirtying PCH pages. */
if (DECL_DEFER_OUTPUT (decl) != 0)
DECL_DEFER_OUTPUT (decl) = 0;
@@ -2203,11 +2213,17 @@ pop_srcloc ()
input_file_stack = fs->next;
free (fs);
input_file_stack_tick++;
- /* The initial source file is never popped. */
- if (!input_file_stack)
- abort ();
- input_filename = input_file_stack->name;
- lineno = input_file_stack->line;
+
+ if (input_file_stack)
+ {
+ input_filename = input_file_stack->name;
+ lineno = input_file_stack->line;
+ }
+ else
+ {
+ input_filename = NULL;
+ lineno = 0;
+ }
}
/* Compile an entire translation unit. Write a file of assembly
@@ -2522,12 +2538,16 @@ rest_of_compilation (decl)
goto exit_rest_of_compilation;
}
}
- else
- /* ??? Note that this has the effect of making it look
- like "inline" was specified for a function if we choose
- to inline it. This isn't quite right, but it's
- probably not worth the trouble to fix. */
+ else {
+ /* ??? Note that we used to just make it look like if
+ the "inline" keyword was specified when we decide
+ to inline it (because of -finline-functions).
+ garloff@suse.de, 2002-04-24: Add another flag to
+ actually record this piece of information. */
+ if (!DECL_INLINE (decl))
+ DID_INLINE_FUNC (decl) = 1;
inlinable = DECL_INLINE (decl) = 1;
+ }
}
insns = get_insns ();
@@ -2555,6 +2575,7 @@ rest_of_compilation (decl)
if (inlinable
|| (DECL_INLINE (decl)
+ && flag_inline_functions
&& ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
&& ! TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
&& ! flag_keep_inline_functions)
@@ -2666,6 +2687,10 @@ rest_of_compilation (decl)
delete_unreachable_blocks ();
+ /* We have to issue these warnings now already, because CFG cleanups
+ further down may destroy the required information. */
+ check_function_return_warnings ();
+
/* Turn NOTE_INSN_PREDICTIONs into branch predictions. */
if (flag_guess_branch_prob)
{
@@ -2849,7 +2874,8 @@ rest_of_compilation (decl)
}
timevar_push (TV_JUMP);
- cleanup_cfg (optimize ? CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP: 0);
+ if (optimize)
+ cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_PRE_LOOP);
/* Try to identify useless null pointer tests and delete them. */
if (flag_delete_null_pointer_checks)
@@ -2950,6 +2976,10 @@ rest_of_compilation (decl)
save_cfj = flag_cse_follow_jumps;
flag_cse_skip_blocks = flag_cse_follow_jumps = 0;
+ /* Instantiate any remaining CONSTANT_P_RTX nodes. */
+ if (current_function_calls_constant_p)
+ purge_builtin_constant_p ();
+
/* If -fexpensive-optimizations, re-run CSE to clean up things done
by gcse. */
if (flag_expensive_optimizations)
@@ -2995,10 +3025,6 @@ rest_of_compilation (decl)
#endif
}
- /* Instantiate any remaining CONSTANT_P_RTX nodes. */
- if (optimize > 0 && flag_gcse && current_function_calls_constant_p)
- purge_builtin_constant_p ();
-
/* Move constant computations out of loops. */
if (optimize > 0 && flag_loop_optimize)
@@ -3080,8 +3106,9 @@ rest_of_compilation (decl)
open_dump_file (DFI_cfg, decl);
if (rtl_dump_file)
dump_flow_info (rtl_dump_file);
- cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0)
- | (flag_thread_jumps ? CLEANUP_THREADING : 0));
+ if (optimize)
+ cleanup_cfg (CLEANUP_EXPENSIVE
+ | (flag_thread_jumps ? CLEANUP_THREADING : 0));
/* It may make more sense to mark constant functions after dead code is
eliminated by life_analysis, but we need to do it early, as -fprofile-arcs
@@ -3222,8 +3249,6 @@ rest_of_compilation (decl)
open_dump_file (DFI_life, decl);
regclass_init ();
- check_function_return_warnings ();
-
#ifdef ENABLE_CHECKING
verify_flow_info ();
#endif
@@ -3511,7 +3536,8 @@ rest_of_compilation (decl)
#endif
split_all_insns (0);
- cleanup_cfg (optimize ? CLEANUP_EXPENSIVE : 0);
+ if (optimize)
+ cleanup_cfg (CLEANUP_EXPENSIVE);
/* On some machines, the prologue and epilogue code, or parts thereof,
can be represented as RTL. Doing so lets us schedule insns between
@@ -3575,7 +3601,7 @@ rest_of_compilation (decl)
open_dump_file (DFI_bbro, decl);
/* Last attempt to optimize CFG, as scheduling, peepholing and insn
- splitting possibly introduced more crossjumping opportunities. */
+ splitting possibly introduced more crossjumping opportunities. */
cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE
| (flag_crossjumping ? CLEANUP_CROSSJUMP : 0));
@@ -3806,6 +3832,16 @@ rest_of_compilation (decl)
timevar_pop (TV_FINAL);
+ if ((*targetm.binds_local_p) (current_function_decl))
+ {
+ int pref = cfun->preferred_stack_boundary;
+ if (cfun->recursive_call_emit
+ && cfun->stack_alignment_needed > cfun->preferred_stack_boundary)
+ pref = cfun->stack_alignment_needed;
+ cgraph_rtl_info (current_function_decl)->preferred_incoming_stack_boundary
+ = pref;
+ }
+
/* Make sure volatile mem refs aren't considered valid operands for
arithmetic insns. We must call this here if this is a nested inline
function, since the above code leaves us in the init_recog state
@@ -4127,6 +4163,16 @@ decode_f_option (arg)
read_integral_parameter (option_value, arg - 2,
MAX_INLINE_INSNS);
set_param_value ("max-inline-insns", val);
+ set_param_value ("max-inline-insns-single", val/2);
+ set_param_value ("max-inline-insns-auto", val/2);
+ set_param_value ("max-inline-insns-rtl", val);
+ if (val/4 < MIN_INLINE_INSNS)
+ {
+ if (val/4 > 10)
+ set_param_value ("min-inline-insns", val/4);
+ else
+ set_param_value ("min-inline-insns", 10);
+ }
}
else if ((option_value = skip_leading_substring (arg, "tree-points-to=")))
{
@@ -4429,18 +4475,21 @@ independent_decode_option (argc, argv)
{
display_help ();
exit_after_options = 1;
+ return 1;
}
if (!strcmp (arg, "-target-help"))
{
display_target_options ();
exit_after_options = 1;
+ return 1;
}
if (!strcmp (arg, "-version"))
{
print_version (stderr, "");
exit_after_options = 1;
+ return 1;
}
/* Handle '--param <name>=<value>'. */
@@ -4477,9 +4526,6 @@ independent_decode_option (argc, argv)
return 2;
}
- if (*arg == 'Y')
- arg++;
-
switch (*arg)
{
default:
@@ -5056,6 +5102,7 @@ parse_options_and_default_flags (argc, argv)
flag_inline_functions = 1;
flag_rename_registers = 1;
flag_unswitch_loops = 1;
+ flag_unit_at_a_time = 1;
}
if (optimize < 2 || optimize_size)
@@ -5195,11 +5242,31 @@ parse_options_and_default_flags (argc, argv)
static void
process_options ()
{
+ /* Allow the front end to perform consistency checks and do further
+ initialization based on the command line options. This hook also
+ sets the original filename if appropriate (e.g. foo.i -> foo.c)
+ so we can correctly initialize debug output. */
+ no_backend = (*lang_hooks.post_options) (&filename);
+ main_input_filename = input_filename = filename;
+
#ifdef OVERRIDE_OPTIONS
/* Some machines may reject certain combinations of options. */
OVERRIDE_OPTIONS;
#endif
+ /* Set aux_base_name if not already set. */
+ if (aux_base_name)
+ ;
+ else if (filename)
+ {
+ char *name = xstrdup (lbasename (filename));
+
+ strip_off_ending (name, strlen (name));
+ aux_base_name = name;
+ }
+ else
+ aux_base_name = "gccaux";
+
/* Set up the align_*_log variables, defaulting them to 1 if they
were still unset. */
if (align_loops <= 0) align_loops = 1;
@@ -5431,17 +5498,10 @@ lang_dependent_init (name)
if (dump_base_name == 0)
dump_base_name = name ? name : "gccdump";
- /* Front-end initialization. This hook can assume that GC,
- identifier hashes etc. are set up, but debug initialization is
- not done yet. This routine must return the original filename
- (e.g. foo.i -> foo.c) so can correctly initialize debug output. */
- name = (*lang_hooks.init) (name);
- if (name == NULL)
+ /* Other front-end initialization. */
+ if ((*lang_hooks.init) () == 0)
return 0;
- /* Is this duplication necessary? */
- name = ggc_strdup (name);
- main_input_filename = input_filename = name;
init_asm_output (name);
/* These create various _DECL nodes, so need to be called after the
@@ -5537,29 +5597,6 @@ finalize ()
static void
do_compile ()
{
- /* All command line options have been parsed; allow the front end to
- perform consistency checks, etc. */
- bool no_backend = (*lang_hooks.post_options) ();
-
- /* The bulk of command line switch processing. */
- process_options ();
-
- /* If an error has already occurred, give up. */
- if (errorcount)
- return;
-
- if (aux_base_name)
- /*NOP*/;
- else if (filename)
- {
- char *name = xstrdup (lbasename (filename));
-
- aux_base_name = name;
- strip_off_ending (name, strlen (name));
- }
- else
- aux_base_name = "gccaux";
-
/* We cannot start timing until after options are processed since that
says if we run timers or not. */
init_timevar ();
@@ -5601,7 +5638,13 @@ toplev_main (argc, argv)
/* Exit early if we can (e.g. -help). */
if (!exit_after_options)
- do_compile ();
+ {
+ process_options ();
+
+ /* Don't do any more if an error has already occurred. */
+ if (!errorcount)
+ do_compile ();
+ }
if (errorcount || sorrycount)
return (FATAL_EXIT_CODE);
diff --git a/gcc/toplev.h b/gcc/toplev.h
index 2dab2447a85..de13bc249ff 100644
--- a/gcc/toplev.h
+++ b/gcc/toplev.h
@@ -108,7 +108,6 @@ extern void check_global_declarations PARAMS ((union tree_node **, int));
extern const char *progname;
extern const char *dump_base_name;
-extern const char *aux_base_name;
extern int target_flags_explicit;
diff --git a/gcc/tracer.c b/gcc/tracer.c
index 5c19b55aafd..0e31b2ae2f6 100644
--- a/gcc/tracer.c
+++ b/gcc/tracer.c
@@ -347,7 +347,7 @@ layout_superblocks ()
RBI (best->dest)->visited = 1;
}
else
- for (; bb != EXIT_BLOCK_PTR; bb=bb->next_bb)
+ for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
{
if (!RBI (bb)->visited)
{
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 398acd69f0f..a8dda86fb61 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -278,14 +278,28 @@ make_blocks (first_p, next_block_link, parent_stmt, bb)
tree prev_stmt;
tree *stmt_p = tsi_container (i);
+ /* Ignore empty containers. */
+ if (*stmt_p == empty_stmt_node || *stmt_p == error_mark_node)
+ continue;
+
prev_stmt = stmt;
stmt = tsi_stmt (i);
+ /* If the statement starts a new basic block or if we have determined
+ in a previous pass that we need to create a new block for STMT, do
+ so now. */
+ if (start_new_block || stmt_starts_bb_p (stmt, prev_stmt))
+ {
+ bb = create_bb ();
+ start_new_block = false;
+ }
+
/* Set the block for the container of non-executable statements. */
if (stmt == NULL_TREE)
{
- if (bb && *stmt_p != empty_stmt_node)
+ if (bb)
append_stmt_to_bb (stmt_p, bb, parent_stmt);
+ last = *stmt_p;
continue;
}
@@ -293,15 +307,6 @@ make_blocks (first_p, next_block_link, parent_stmt, bb)
NEXT_BLOCK_LINK (stmt) = NULL_TREE;
code = TREE_CODE (stmt);
- /* If the statement starts a new basic block or if we have determined
- in a previous pass that we need to create a new block for STMT, do
- so now. */
- if (start_new_block || stmt_starts_bb_p (stmt, prev_stmt))
- {
- bb = create_bb ();
- start_new_block = false;
- }
-
/* Now add STMT to BB and create the subgraphs for special statement
codes. */
append_stmt_to_bb (stmt_p, bb, parent_stmt);
@@ -380,9 +385,8 @@ make_blocks (first_p, next_block_link, parent_stmt, bb)
last = stmt;
}
- /* If LAST_STMT is set, link it to NEXT_BLOCK_LINK. This allows making
- edges from the last block inside a lexical scope (see
- successor_block). */
+ /* If LAST is set, link it to NEXT_BLOCK_LINK. This allows making edges
+ from the last block inside a lexical scope (see successor_block). */
if (last)
{
NEXT_BLOCK_LINK (last) = next_block_link;
@@ -421,17 +425,17 @@ make_loop_expr_blocks (loop_p, next_block_link, entry)
LOOP_EXPR body, will naturally loop back. */
STRIP_CONTAINERS (loop);
si = tsi_start (&LOOP_EXPR_BODY (loop));
- next_block_link = tsi_stmt (si);
+ next_block_link = *(tsi_container (si));
/* If the loop body is empty, point NEXT_BLOCK_LINK to the statement
following the LOOP_EXPR node, as we do with the other control
structures. */
- if (next_block_link == NULL_TREE)
+ if (body_is_empty (LOOP_EXPR_BODY (loop)))
{
si = tsi_start (loop_p);
tsi_next (&si);
if (!tsi_end_p (si))
- next_block_link = tsi_stmt (si);
+ next_block_link = *(tsi_container (si));
}
make_blocks (&LOOP_EXPR_BODY (loop), next_block_link, loop, NULL);
@@ -461,7 +465,7 @@ make_cond_expr_blocks (cond_p, next_block_link, entry)
si = tsi_start (cond_p);
tsi_next (&si);
if (!tsi_end_p (si))
- next_block_link = tsi_stmt (si);
+ next_block_link = *(tsi_container (si));
STRIP_CONTAINERS (cond);
make_blocks (&COND_EXPR_THEN (cond), next_block_link, cond, NULL);
@@ -492,7 +496,7 @@ make_switch_expr_blocks (switch_e_p, next_block_link, entry)
si = tsi_start (switch_e_p);
tsi_next (&si);
if (!tsi_end_p (si))
- next_block_link = tsi_stmt (si);
+ next_block_link = *(tsi_container (si));
STRIP_CONTAINERS (switch_e);
make_blocks (&SWITCH_BODY (switch_e), next_block_link, switch_e, NULL);
@@ -531,7 +535,7 @@ make_bind_expr_blocks (bind_p, next_block_link, entry, parent_stmt)
si = tsi_start (bind_p);
tsi_next (&si);
if (!tsi_end_p (si))
- next_block_link = tsi_stmt (si);
+ next_block_link = *(tsi_container (si));
/* By passing the current block ENTRY to make_blocks, we will keep adding
statements to ENTRY until we find a block terminating statement inside
@@ -1761,12 +1765,13 @@ dump_tree_bb (outf, prefix, bb, indent)
else
fprintf (outf, "nil\n");
- for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
- {
- fprintf (outf, "%s%s# ", s_indent, prefix);
- print_generic_stmt (outf, phi, 0);
- fprintf (outf, "\n");
- }
+ if (bb->aux)
+ for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+ {
+ fprintf (outf, "%s%s# ", s_indent, prefix);
+ print_generic_stmt (outf, phi, 0);
+ fprintf (outf, "\n");
+ }
for (si = bsi_start (bb); !bsi_end_p (si); bsi_next (&si))
{
@@ -2038,7 +2043,10 @@ successor_block (bb)
NEXT_BLOCK_LINK for BB's last statement. If NEXT_BLOCK_LINK is still
NULL, then BB is the last basic block in the function. In which case
we have reached the end of the flowgraph and return EXIT_BLOCK_PTR. */
- if (last_stmt && NEXT_BLOCK_LINK (last_stmt))
+ if (last_stmt == NULL_TREE)
+ last_stmt = *bb->end_tree_p;
+
+ if (NEXT_BLOCK_LINK (last_stmt))
return bb_for_stmt (NEXT_BLOCK_LINK (last_stmt));
else
return EXIT_BLOCK_PTR;
@@ -2157,12 +2165,16 @@ stmt_starts_bb_p (t, prev_t)
tree t;
tree prev_t;
{
- enum tree_code code = TREE_CODE (t);
-
+ enum tree_code code;
+
+ if (t == NULL_TREE)
+ return false;
+
/* LABEL_EXPRs and CASE_LABEL_EXPRs start a new basic block only if the
preceding statement wasn't a label of the same type. This prevents
the creation of consecutive blocks that have nothing but a single
label. */
+ code = TREE_CODE (t);
if (code == LABEL_EXPR || code == CASE_LABEL_EXPR)
{
if (prev_t && TREE_CODE (prev_t) == code)
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 7ac06d4d625..5829d06dae9 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -2,20 +2,20 @@
Copyright 2001, 2002 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -115,7 +115,7 @@ static tree copy_body_r PARAMS ((tree *, int *, void *));
static tree copy_body PARAMS ((inline_data *));
static tree expand_call_inline PARAMS ((tree *, int *, void *));
static void expand_calls_inline PARAMS ((tree *, inline_data *));
-static int inlinable_function_p PARAMS ((tree, inline_data *));
+static int inlinable_function_p PARAMS ((tree, inline_data *, int));
static tree remap_decl PARAMS ((tree, inline_data *));
static tree remap_decls PARAMS ((tree, inline_data *));
static tree initialize_inlined_parameters PARAMS ((inline_data *, tree, tree, tree));
@@ -534,6 +534,10 @@ initialize_inlined_parameters (id, args, fn, bind_expr)
if (DECL_P (value))
value = build1 (NOP_EXPR, TREE_TYPE (value), value);
+ /* If this is a constant, make sure it has the right type. */
+ else if (TREE_TYPE (value) != TREE_TYPE (p))
+ value = fold (build1 (NOP_EXPR, TREE_TYPE (p), value));
+
splay_tree_insert (id->decl_map,
(splay_tree_key) p,
(splay_tree_value) value);
@@ -682,10 +686,11 @@ declare_return_variable (id, return_slot_addr, use_p)
/* Returns nonzero if a function can be inlined as a tree. */
int
-tree_inlinable_function_p (fn)
+tree_inlinable_function_p (fn, nolimit)
tree fn;
+ int nolimit;
{
- return inlinable_function_p (fn, NULL);
+ return inlinable_function_p (fn, NULL, nolimit);
}
/* If *TP is possibly call to alloca, return nonzero. */
@@ -705,7 +710,12 @@ static tree
find_alloca_call (exp)
tree exp;
{
- return walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+ int line = lineno;
+ const char *file = input_filename;
+ tree ret = walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+ lineno = line;
+ input_filename = file;
+ return ret;
}
static tree
@@ -731,7 +741,12 @@ static tree
find_builtin_longjmp_call (exp)
tree exp;
{
- return walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+ int line = lineno;
+ const char *file = input_filename;
+ tree ret = walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+ lineno = line;
+ input_filename = file;
+ return ret;
}
/* Returns nonzero if FN is a function that can be inlined into the
@@ -739,12 +754,14 @@ find_builtin_longjmp_call (exp)
can be inlined at all. */
static int
-inlinable_function_p (fn, id)
+inlinable_function_p (fn, id, nolimit)
tree fn;
inline_data *id;
+ int nolimit;
{
int inlinable;
int currfn_insns;
+ int max_inline_insns_single = MAX_INLINE_INSNS_SINGLE;
/* If we've already decided this function shouldn't be inlined,
there's no need to check again. */
@@ -753,7 +770,13 @@ inlinable_function_p (fn, id)
/* Assume it is not inlinable. */
inlinable = 0;
-
+
+ /* We may be here either because fn is declared inline or because
+ we use -finline-functions. For the second case, we are more
+ restrictive. */
+ if (DID_INLINE_FUNC (fn))
+ max_inline_insns_single = MAX_INLINE_INSNS_AUTO;
+
/* The number of instructions (estimated) of current function. */
currfn_insns = DECL_NUM_STMTS (fn) * INSNS_PER_STMT;
@@ -766,13 +789,14 @@ inlinable_function_p (fn, id)
front-end that must set DECL_INLINE in this case, because
dwarf2out loses if a function is inlined that doesn't have
DECL_INLINE set. */
- else if (! DECL_INLINE (fn))
+ else if (! DECL_INLINE (fn) && !nolimit)
;
/* We can't inline functions that are too big. Only allow a single
function to be of MAX_INLINE_INSNS_SINGLE size. Make special
allowance for extern inline functions, though. */
- else if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn)
- && currfn_insns > MAX_INLINE_INSNS_SINGLE)
+ else if (!nolimit
+ && ! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn)
+ && currfn_insns > max_inline_insns_single)
;
/* We can't inline functions that call __builtin_longjmp at all.
The non-local goto machenery really requires the destination
@@ -802,7 +826,7 @@ inlinable_function_p (fn, id)
/* In case we don't disregard the inlining limits and we basically
can inline this function, investigate further. */
if (! (*lang_hooks.tree_inlining.disregard_inline_limits) (fn)
- && inlinable)
+ && inlinable && !nolimit)
{
int sum_insns = (id ? id->inlined_stmts : 0) * INSNS_PER_STMT
+ currfn_insns;
@@ -945,7 +969,9 @@ expand_call_inline (tp, walk_subtrees, data)
/* Don't try to inline functions that are not well-suited to
inlining. */
- if (!inlinable_function_p (fn, id))
+ if ((!flag_unit_at_a_time || !DECL_SAVED_TREE (fn)
+ || !cgraph_global_info (fn)->inline_once)
+ && !inlinable_function_p (fn, id, 0))
return NULL_TREE;
if (! (*lang_hooks.tree_inlining.start_inlining) (fn))
diff --git a/gcc/tree-inline.h b/gcc/tree-inline.h
index 9c11436f399..d2e6ee904b8 100644
--- a/gcc/tree-inline.h
+++ b/gcc/tree-inline.h
@@ -2,20 +2,20 @@
Copyright 2001 Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
-This file is part of GNU CC.
+This file is part of GCC.
-GNU CC is free software; you can redistribute it and/or modify
+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.
-GNU CC is distributed in the hope that it will be useful,
+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 GNU CC; see the file COPYING. If not, write to
+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. */
@@ -25,7 +25,7 @@ Boston, MA 02111-1307, USA. */
/* Function prototypes. */
void optimize_inline_calls PARAMS ((tree));
-int tree_inlinable_function_p PARAMS ((tree));
+int tree_inlinable_function_p PARAMS ((tree, int));
tree walk_tree PARAMS ((tree*, walk_tree_fn, void*, void*));
tree walk_tree_without_duplicates PARAMS ((tree*, walk_tree_fn, void*));
tree copy_tree_r PARAMS ((tree*, int*, void*));
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index 903f02dd22a..07ceedc51c4 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -37,7 +37,7 @@ static const char *op_symbol PARAMS ((tree));
static void pretty_print_string PARAMS ((output_buffer *, const char*));
static void print_call_name PARAMS ((output_buffer *, tree));
static void newline_and_indent PARAMS ((output_buffer *, int));
-static inline void maybe_init_pretty_print PARAMS ((void));
+static void maybe_init_pretty_print PARAMS ((void));
static void print_declaration PARAMS ((output_buffer *, tree, int,
int));
static void print_struct_decl PARAMS ((output_buffer *, tree, int));
@@ -477,6 +477,20 @@ dump_generic_node (buffer, node, spc, flags)
output_add_string (buffer, "\"");
break;
+ case VECTOR_CST:
+ {
+ tree elt;
+ output_add_string (buffer, "{ ");
+ for (elt = TREE_VECTOR_CST_ELTS (node); elt; elt = TREE_CHAIN (elt))
+ {
+ dump_generic_node (buffer, TREE_VALUE (elt), spc, flags);
+ if (TREE_CHAIN (elt))
+ output_add_string (buffer, ", ");
+ }
+ output_add_string (buffer, " }");
+ }
+ break;
+
case FUNCTION_TYPE:
break;
diff --git a/gcc/tree-simple.c b/gcc/tree-simple.c
index 8535fd482ee..9ba414d8ead 100644
--- a/gcc/tree-simple.c
+++ b/gcc/tree-simple.c
@@ -649,7 +649,8 @@ is_simple_const (t)
|| TREE_CODE (t) == STRING_CST
|| TREE_CODE (t) == LABEL_DECL
|| TREE_CODE (t) == RESULT_DECL
- || TREE_CODE (t) == COMPLEX_CST);
+ || TREE_CODE (t) == COMPLEX_CST
+ || TREE_CODE (t) == VECTOR_CST);
}
int
diff --git a/gcc/tree.c b/gcc/tree.c
index 38f9c98f979..32701ab3bf5 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1877,8 +1877,13 @@ substitute_in_expr (exp, f, r)
else if (code == CONSTRUCTOR)
abort ();
- op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
- op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
+ op0 = TREE_OPERAND (exp, 0);
+ op1 = TREE_OPERAND (exp, 1);
+ if (contains_placeholder_p (op0))
+ op0 = substitute_in_expr (op0, f, r);
+ if (contains_placeholder_p (op1))
+ op1 = substitute_in_expr (op1, f, r);
+
if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1))
return exp;
@@ -1904,9 +1909,17 @@ substitute_in_expr (exp, f, r)
else if (code != COND_EXPR)
abort ();
- op0 = substitute_in_expr (TREE_OPERAND (exp, 0), f, r);
- op1 = substitute_in_expr (TREE_OPERAND (exp, 1), f, r);
- op2 = substitute_in_expr (TREE_OPERAND (exp, 2), f, r);
+ op0 = TREE_OPERAND (exp, 0);
+ op1 = TREE_OPERAND (exp, 1);
+ op2 = TREE_OPERAND (exp, 2);
+
+ if (contains_placeholder_p (op0))
+ op0 = substitute_in_expr (op0, f, r);
+ if (contains_placeholder_p (op1))
+ op1 = substitute_in_expr (op1, f, r);
+ if (contains_placeholder_p (op2))
+ op2 = substitute_in_expr (op2, f, r);
+
if (op0 == TREE_OPERAND (exp, 0) && op1 == TREE_OPERAND (exp, 1)
&& op2 == TREE_OPERAND (exp, 2))
return exp;
@@ -3948,10 +3961,10 @@ get_narrower (op, unsignedp_ptr)
/* See what's inside this conversion. If we decide to strip it,
we will set WIN. */
- op = TREE_OPERAND (op, 0);
if (bitschange > 0)
{
+ op = TREE_OPERAND (op, 0);
/* An extension: the outermost one can be stripped,
but remember whether it is zero or sign extension. */
if (first)
@@ -3970,6 +3983,7 @@ get_narrower (op, unsignedp_ptr)
if (first)
uns = TREE_UNSIGNED (TREE_TYPE (op));
first = 0;
+ op = TREE_OPERAND (op, 0);
}
win = op;
diff --git a/gcc/tree.h b/gcc/tree.h
index 9f17f2c8d4a..c307671b8f1 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1917,6 +1917,11 @@ struct tree_type GTY(())
where it is called. */
#define DECL_INLINE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.inline_flag)
+/* Nonzero in a FUNCTION_DECL means this function has been found inlinable
+ only by virtue of -finline-functions */
+#define DID_INLINE_FUNC(NODE) \
+ (FUNCTION_DECL_CHECK (NODE)->decl.inlined_function_flag)
+
/* In a FUNCTION_DECL, nonzero if the function cannot be inlined. */
#define DECL_UNINLINABLE(NODE) (FUNCTION_DECL_CHECK (NODE)->decl.uninlinable)
@@ -2110,7 +2115,8 @@ struct tree_decl GTY(())
unsigned user_align : 1;
unsigned uninlinable : 1;
unsigned thread_local_flag : 1;
- /* Two unused bits. */
+ unsigned inlined_function_flag : 1;
+ /* One unused bit. */
unsigned lang_flag_0 : 1;
unsigned lang_flag_1 : 1;
@@ -2766,11 +2772,9 @@ typedef struct record_layout_info_s
tree bitpos;
/* The alignment of the record so far, in bits. */
unsigned int record_align;
- /* The alignment of the record so far, not including padding, in bits. */
+ /* The alignment of the record so far, ignoring #pragma pack and
+ __attribute__ ((packed)), in bits. */
unsigned int unpacked_align;
- /* The alignment of the record so far, allowing for the record to be
- padded only at the end, in bits. */
- unsigned int unpadded_align;
/* The previous field layed out. */
tree prev_field;
/* The static variables (i.e., class variables, as opposed to
@@ -2778,6 +2782,8 @@ typedef struct record_layout_info_s
tree pending_statics;
/* Bits remaining in the current alignment group */
int remaining_in_alignment;
+ /* True if we've seen a packed field that didn't have normal
+ alignment anyway. */
int packed_maybe_necessary;
} *record_layout_info;
@@ -3313,7 +3319,7 @@ extern void expand_dummy_function_end PARAMS ((void));
extern void init_function_for_compilation PARAMS ((void));
extern void init_function_start PARAMS ((tree, const char *, int));
extern void assign_parms PARAMS ((tree));
-extern void put_var_into_stack PARAMS ((tree));
+extern void put_var_into_stack PARAMS ((tree, int));
extern void flush_addressof PARAMS ((tree));
extern void uninitialized_vars_warning PARAMS ((tree));
extern void setjmp_args_warning PARAMS ((void));
diff --git a/gcc/treelang/ChangeLog b/gcc/treelang/ChangeLog
index a8008dc6a14..64bb4bc719b 100644
--- a/gcc/treelang/ChangeLog
+++ b/gcc/treelang/ChangeLog
@@ -1,12 +1,53 @@
+2003-03-21 Andreas Jaeger <aj@suse.de>
+
+ * treetree.c (cpp_create_reader): Follow prototype change in
+ cpplib.h.
+
+2003-03-17 Andreas Jaeger <aj@suse.de>
+
+ * Make-lang.in (treelang.tags): Remove duplicate entry.
+
+2003-03-15 Andreas Jaeger <aj@suse.de>
+
+ * treetree.c (cpp_handle_option): Remove.
+
+2003-03-13 Andreas Jaeger <aj@suse.de>
+
+ * Make-lang.in (tree1$(exeext)): Fix previous patch.
+
+2003-03-12 Andreas Jaeger <aj@suse.de>
+
+ * Make-lang.in (tree1$(exeext)): Add c-cppbuiltin.o.
+
+2003-03-08 Neil Booth <neil@daikokuya.co.uk>
+
+ * tree1.c (in_fname): Fix type.
+ (treelang_init): Update prototype and use of in_fname.
+ * treelang.h (in_fname): Fix type.
+ * treetree.c (tree_code_if_start, tree_code_if_else,
+ tree_code_if_end, tree_code_create_function_prototype,
+ tree_code_create_function_initial, tree_code_create_funciton_wrapup,
+ tree_code_create_variable, tree_code_output_expression_statement)
+ : Fix prototypes and use of filenames.
+ * treetree.h: Similarly.
+
+2003-03-05 Andreas Jaeger <aj@suse.de>
+
+ * treetree.c (init_c_lex): Follow change to c-common.h.
+
+2003-03-04 Tom Tromey <tromey@redhat.com>
+
+ * Make-lang.in (treelang.tags): New target.
+
2003-03-01 Tim Josling <tej@melbpc.org.au>
Name clashes with rtl.h fixed.
-
+
* lex.l: Tokens PLUS, MINUS, RETURN changed to tl_PLUS tl_MINUS
tl_RETURN.
- * parse.y: Ditto.
-
+ * parse.y: Ditto.
+
2003-02-24 Tim Josling <tej@melbpc.org.au>
* parse.y (my_yylex): New - ensure lexer time is charged to
@@ -14,11 +55,11 @@
(yylex): redefine as invocation of my_yylex which then calls
flex-generated yylex.
(timevar.h): include.
-
+
2003-02-23 Tim Josling <tej@melbpc.org.au>
Fix garbage collection, add more error checking, force GC always.
-
+
* Make-lang.in (treelang/tree1.o): Depend on treelang/treetree.h
(treelang/treetree.o): Depend on treelang/parse.h
diff --git a/gcc/treelang/ChangeLog.tree-ssa b/gcc/treelang/ChangeLog.tree-ssa
index d133b636de5..57048a2023a 100644
--- a/gcc/treelang/ChangeLog.tree-ssa
+++ b/gcc/treelang/ChangeLog.tree-ssa
@@ -5,4 +5,10 @@
information. Use TREE_FILENAME and TREE_LINENO to extract file/line
information from tree nodes.
+2003-04-06 Diego Novillo <dnovillo@redhat.com>
+ * treetree.c (print_call_graph): New function.
+ (make_rtl_for_local_static): New function.
+ (prep_stmt): New function.
+ * Make-lang.in (tree1): Add dependencies on c-simplify.o
+ and c-pretty-print.o
diff --git a/gcc/treelang/Make-lang.in b/gcc/treelang/Make-lang.in
index 71c7851bf7b..64bdad25f3c 100644
--- a/gcc/treelang/Make-lang.in
+++ b/gcc/treelang/Make-lang.in
@@ -64,7 +64,7 @@ TREE_SOURCE = ${srcdir}/treelang/parse.y ${srcdir}/treelang/lex.l ${srcdir}/tree
TREE_EXES = tree1$(exeext)
#no -Wtraditional warnings, allow long long
-treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations
+treelang-warn = $(LOOSE_WARN) -pedantic -Wno-long-long -Wmissing-prototypes -Wmissing-declarations $(WERROR)
# bison emits some unused static arrays (yytoknum)
treelang/parse.o-warn = -Wno-error
@@ -82,10 +82,12 @@ treelang.done: tree1$(exeext)
# core compiler
tree1$(exeext): treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o\
- $(TREE_BE_LIBS) c-convert.o c-typeck.o c-common.o c-decl.o attribs.o
+ $(TREE_BE_LIBS) c-convert.o c-typeck.o c-common.o c-cppbuiltin.o \
+ c-decl.o attribs.o c-simplify.o c-pretty-print.o
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
- treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o c-convert.o\
- c-typeck.o c-common.o c-decl.o attribs.o $(TREE_BE_LIBS)
+ treelang/tree1.o treelang/treetree.o treelang/lex.o treelang/parse.o \
+ c-convert.o c-typeck.o c-common.o c-cppbuiltin.o c-decl.o attribs.o \
+ c-simplify.o c-pretty-print.o $(TREE_BE_LIBS)
#
# Compiling object files from source files.
@@ -132,6 +134,9 @@ treelang.all.cross:
treelang.start.encap:
treelang.rest.encap:
+treelang.tags: force
+ cd $(srcdir)/treelang; etags *.y *.l *.c *.h
+
.phony:treelang.info
treelang.info: $(srcdir)/treelang/treelang.info
@@ -307,15 +312,6 @@ treelang.wc: force
#
-# Update the tags table for emacs find label (alt-.) function
-TAGS: treelang.tags
-
-.PHONY: treelang.tags
-
-treelang.tags:
- cd $(srcdir)/treelang; \
- etags -l c ${TREE_SOURCE}
-
.PHONY: treelang.html
treelang.html:
diff --git a/gcc/treelang/tree1.c b/gcc/treelang/tree1.c
index 20913bafd78..e6f96d4b625 100644
--- a/gcc/treelang/tree1.c
+++ b/gcc/treelang/tree1.c
@@ -78,7 +78,7 @@ unsigned int option_lexer_trace = 0;
/* Local variables. */
-unsigned char *in_fname = NULL; /* Input file name. */
+const char *in_fname; /* Input file name. */
/* This is 1 if we have output the version string. */
@@ -179,12 +179,12 @@ treelang_decode_option (num_options_left, first_option_left)
/* Language dependent parser setup. */
-const char*
-treelang_init (const char* filename)
+bool
+treelang_init ()
{
- /* Set up the declarations needed for this front end. */
+ in_fname = main_input_filename;
- input_filename = "";
+ /* Set up the declarations needed for this front end. */
lineno = 0;
/* Init decls etc. */
@@ -193,7 +193,7 @@ treelang_init (const char* filename)
/* This error will not happen from GCC as it will always create a
fake input file. */
- if (!filename || (filename[0] == ' ') || (!filename[0]))
+ if (!in_fname || in_fname[0] == ' ' || !in_fname[0])
{
if (!version_done)
{
@@ -201,17 +201,17 @@ treelang_init (const char* filename)
exit (1);
}
- in_fname = NULL;
- return NULL;
+ return false;
}
- yyin = fopen (filename, "r");
+
+ yyin = fopen (in_fname, "r");
if (!yyin)
{
- fprintf (stderr, "Unable to open input file %s\n", filename);
+ fprintf (stderr, "Unable to open input file %s\n", in_fname);
exit (1);
}
- input_filename = filename;
- return (char*) (in_fname = (unsigned char*)filename);
+
+ return true;
}
/* Language dependent wrapup. */
diff --git a/gcc/treelang/treelang.h b/gcc/treelang/treelang.h
index 6258c0e88ec..5fded628736 100644
--- a/gcc/treelang/treelang.h
+++ b/gcc/treelang/treelang.h
@@ -40,7 +40,7 @@ enum category_enum
};
/* Input file name and FILE. */
-extern unsigned char* in_fname;
+extern const char* in_fname;
extern FILE* yyin;
/* Forward references to satisfy mutually recursive definitions. */
diff --git a/gcc/treelang/treetree.c b/gcc/treelang/treetree.c
index 5712e2730ef..6880051bfb0 100644
--- a/gcc/treelang/treetree.c
+++ b/gcc/treelang/treetree.c
@@ -1,4 +1,4 @@
-/*
+/*
TREELANG Compiler back end interface (treetree.c)
Called by the parser.
@@ -9,8 +9,8 @@
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, Free Software Foundation, Inc.
- This code is based on toy.c written by Richard Kenner.
-
+ This code is based on toy.c written by Richard Kenner.
+
It was later modified by Jonathan Bartlett whose changes have all
been removed (by Tim Josling).
@@ -38,7 +38,7 @@
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding!
+ what you give them. Help stamp out software-hoarding!
---------------------------------------------------------------------------
@@ -110,9 +110,9 @@ extern char **file_names;
#define LANG_HOOKS_INIT treelang_init
#undef LANG_HOOKS_NAME
#define LANG_HOOKS_NAME "GNU treelang"
-#undef LANG_HOOKS_FINISH
+#undef LANG_HOOKS_FINISH
#define LANG_HOOKS_FINISH treelang_finish
-#undef LANG_HOOKS_DECODE_OPTION
+#undef LANG_HOOKS_DECODE_OPTION
#define LANG_HOOKS_DECODE_OPTION treelang_decode_option
const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
@@ -149,14 +149,14 @@ unsigned int tree_code_char_size = 0;
/* Return the tree stuff for this type TYPE_NUM. */
-tree
-tree_code_get_type (int type_num)
+tree
+tree_code_get_type (int type_num)
{
switch (type_num)
{
case SIGNED_CHAR:
return signed_char_type_node;
-
+
case UNSIGNED_CHAR:
return unsigned_char_type_node;
@@ -164,10 +164,10 @@ tree_code_get_type (int type_num)
return integer_type_node;
case UNSIGNED_INT:
- return unsigned_type_node;
+ return unsigned_type_node;
case VOID_TYPE:
- return void_type_node;
+ return void_type_node;
default:
abort ();
@@ -179,34 +179,34 @@ tree_code_get_type (int type_num)
LINENO in file FILENAME. */
void
-tree_code_if_start (tree exp, unsigned char* filename, int lineno)
+tree_code_if_start (tree exp, const char* filename, int lineno)
{
tree cond_exp;
- cond_exp = build (NE_EXPR,
- TREE_TYPE (exp),
- exp,
+ cond_exp = build (NE_EXPR,
+ TREE_TYPE (exp),
+ exp,
build1 (CONVERT_EXPR, TREE_TYPE (exp), integer_zero_node));
- emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
+ emit_line_note (filename, lineno); /* Output the line number information. */
expand_start_cond (cond_exp, /* Exit-able if nonzero. */ 0);
}
/* Output the code for the else of an if statement. The else occurred
at line LINENO in file FILENAME. */
-void
-tree_code_if_else (unsigned char* filename, int lineno)
+void
+tree_code_if_else (const char* filename, int lineno)
{
- emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
+ emit_line_note (filename, lineno); /* Output the line number information. */
expand_start_else ();
}
/* Output the code for the end_if an if statement. The end_if (final brace) occurred
at line LINENO in file FILENAME. */
-void
-tree_code_if_end (unsigned char* filename, int lineno)
+void
+tree_code_if_end (const char* filename, int lineno)
{
- emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
+ emit_line_note (filename, lineno); /* Output the line number information. */
expand_end_cond ();
}
@@ -214,12 +214,12 @@ tree_code_if_end (unsigned char* filename, int lineno)
STORAGE_CLASS, type of return variable is RET_TYPE, parameter lists
is PARMS, returns decl for this function. */
-tree
+tree
tree_code_create_function_prototype (unsigned char* chars,
unsigned int storage_class,
unsigned int ret_type,
struct prod_token_parm_item* parms,
- unsigned char* filename,
+ const char* filename,
int lineno)
{
@@ -252,30 +252,35 @@ tree_code_create_function_prototype (unsigned char* chars,
fn_decl = build_decl (FUNCTION_DECL, id, fn_type);
DECL_CONTEXT (fn_decl) = NULL_TREE; /* Nested functions not supported here. */
+ /* if (lineno > 1000000)
+ ; */ /* Probably the line # is rubbish because someone forgot to set
+ the line number - and unfortunately impossible line #s are used as
+ magic flags at various times. The longest known function for
+ example is about 550,000 lines (it was written in COBOL). */
annotate_with_file_line (fn_decl, filename, lineno);
TREE_USED (fn_decl) = 1;
/* Real name (optional). */
SET_DECL_ASSEMBLER_NAME (fn_decl, DECL_NAME (fn_decl));
-
+
TREE_PUBLIC (fn_decl) = 0;
- DECL_EXTERNAL (fn_decl) = 0;
- TREE_STATIC (fn_decl) = 0;
+ DECL_EXTERNAL (fn_decl) = 0;
+ TREE_STATIC (fn_decl) = 0;
switch (storage_class)
{
case STATIC_STORAGE:
- TREE_PUBLIC (fn_decl) = 0;
+ TREE_PUBLIC (fn_decl) = 0;
break;
case EXTERNAL_DEFINITION_STORAGE:
TREE_PUBLIC (fn_decl) = 1;
- TREE_STATIC (fn_decl) = 0;
+ TREE_STATIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 0;
break;
-
+
case EXTERNAL_REFERENCE_STORAGE:
- TREE_PUBLIC (fn_decl) = 0;
+ TREE_PUBLIC (fn_decl) = 0;
DECL_EXTERNAL (fn_decl) = 1;
break;
@@ -296,9 +301,9 @@ tree_code_create_function_prototype (unsigned char* chars,
PREV_SAVED (as created by tree_code_create_function_prototype),
the function is at line number LINENO in file FILENAME. The
parameter details are in the lists PARMS. Returns nothing. */
-void
-tree_code_create_function_initial (tree prev_saved,
- unsigned char* filename,
+void
+tree_code_create_function_initial (tree prev_saved,
+ const char* filename,
int lineno,
struct prod_token_parm_item* parms)
{
@@ -309,7 +314,7 @@ tree_code_create_function_initial (tree prev_saved,
tree parm_decl;
tree parm_list;
tree resultdecl;
- struct prod_token_parm_item* this_parm;
+ struct prod_token_parm_item* this_parm;
struct prod_token_parm_item* parm;
fn_decl = prev_saved;
@@ -329,7 +334,7 @@ tree_code_create_function_initial (tree prev_saved,
annotate_with_file_line (fn_decl, filename, lineno);
/* Prepare creation of rtl for a new function. */
-
+
resultdecl = DECL_RESULT (fn_decl) = build_decl (RESULT_DECL, NULL_TREE, TREE_TYPE (TREE_TYPE (fn_decl)));
DECL_CONTEXT (DECL_RESULT (fn_decl)) = fn_decl;
annotate_with_file_line (resultdecl, filename, lineno);
@@ -340,10 +345,10 @@ tree_code_create_function_initial (tree prev_saved,
parm_list = NULL_TREE;
for (parm = parms; parm; parm = parm->tp.par.next)
{
- parm_decl = build_decl (PARM_DECL, get_identifier
- ((const char*) (parm->tp.par.variable_name)),
+ parm_decl = build_decl (PARM_DECL, get_identifier
+ ((const char*) (parm->tp.par.variable_name)),
get_type_for_numeric_type (parm->type));
-
+
/* Some languages have different nominal and real types. */
DECL_ARG_TYPE (parm_decl) = TREE_TYPE (parm_decl);
if (!DECL_ARG_TYPE (parm_decl))
@@ -357,7 +362,7 @@ tree_code_create_function_initial (tree prev_saved,
/* Back into reverse order as the back end likes them. */
parm_list = nreverse (parm_list);
-
+
DECL_ARGUMENTS (fn_decl) = parm_list;
/* Save the decls for use when the args are referred to. */
@@ -380,23 +385,23 @@ tree_code_create_function_initial (tree prev_saved,
make_decl_rtl (fn_decl, NULL);
/* Use filename/lineno from above. */
- init_function_start (fn_decl, (const char *)filename, lineno);
-
+ init_function_start (fn_decl, filename, lineno);
+
/* Create rtl for startup code of function, such as saving registers. */
-
+
expand_function_start (fn_decl, 0);
-
+
/* Function.c requires a push at the start of the function. that
looks like a bug to me but let's make it happy. */
-
+
(*lang_hooks.decls.pushlevel) (0);
-
+
/* Create rtl for the start of a new scope. */
-
+
expand_start_bindings (2);
/* Put the parameters into the symbol table. */
-
+
for (first_param = param_decl = nreverse (DECL_ARGUMENTS (fn_decl));
param_decl;
param_decl = next_param)
@@ -414,82 +419,82 @@ tree_code_create_function_initial (tree prev_saved,
/* Force it to be output, else may be solely inlined. */
TREE_ADDRESSABLE (fn_decl) = 1;
-
+
/* Stop -O3 from deleting it. */
TREE_USED (fn_decl) = 1;
/* Add a new level to the debugger symbol table. */
-
+
(*lang_hooks.decls.pushlevel) (0);
-
+
/* Create rtl for the start of a new scope. */
-
+
expand_start_bindings (0);
-
- emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
+
+ emit_line_note (filename, lineno); /* Output the line number information. */
}
/* Wrapup a function contained in file FILENAME, ending at line LINENO. */
-void
-tree_code_create_function_wrapup (unsigned char* filename,
+void
+tree_code_create_function_wrapup (const char* filename,
int lineno)
{
tree block;
tree fn_decl;
fn_decl = current_function_decl;
-
- emit_line_note ((const char *)filename, lineno); /* Output the line number information. */
+
+ emit_line_note (filename, lineno); /* Output the line number information. */
/* Get completely built level from debugger symbol table. */
-
+
block = (*lang_hooks.decls.poplevel) (1, 0, 0);
-
+
/* Emit rtl for end of scope. */
-
+
expand_end_bindings (block, 0, 1);
-
+
/* Emit rtl for end of function. */
-
- expand_function_end ((const char *)filename, lineno, 0);
-
+
+ expand_function_end (filename, lineno, 0);
+
/* Pop the level. */
block = (*lang_hooks.decls.poplevel) (1, 0, 1);
/* And attach it to the function. */
-
+
DECL_INITIAL (fn_decl) = block;
-
+
/* Emit rtl for end of scope. */
-
+
expand_end_bindings (block, 0, 1);
-
+
/* Call optimization and convert optimized rtl to assembly code. */
-
+
rest_of_compilation (fn_decl);
-
+
/* We are not inside of any scope now. */
-
+
current_function_decl = NULL_TREE;
}
-/*
- Create a variable.
-
- The storage class is STORAGE_CLASS (eg LOCAL).
- The name is CHARS/LENGTH.
- The type is EXPRESSION_TYPE (eg UNSIGNED_TYPE).
- The init tree is INIT.
+/*
+ Create a variable.
+
+ The storage class is STORAGE_CLASS (eg LOCAL).
+ The name is CHARS/LENGTH.
+ The type is EXPRESSION_TYPE (eg UNSIGNED_TYPE).
+ The init tree is INIT.
*/
-tree
+tree
tree_code_create_variable (unsigned int storage_class,
unsigned char* chars,
unsigned int length,
unsigned int expression_type,
tree init,
- unsigned char* filename,
+ const char* filename,
int lineno)
{
tree var_type;
@@ -513,10 +518,10 @@ tree_code_create_variable (unsigned int storage_class,
DECL_INITIAL (var_decl) = build1 (CONVERT_EXPR, var_type, init);
else
DECL_INITIAL (var_decl) = NULL_TREE;
-
+
/* 4. Compute size etc. */
layout_decl (var_decl, 0);
-
+
if (TYPE_SIZE (var_type) == 0)
abort (); /* Did not calculate size. */
@@ -536,27 +541,27 @@ tree_code_create_variable (unsigned int storage_class,
TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 0;
break;
-
+
case EXTERNAL_DEFINITION_STORAGE:
- TREE_STATIC (var_decl) = 0;
+ TREE_STATIC (var_decl) = 0;
TREE_PUBLIC (var_decl) = 1;
break;
-
+
case EXTERNAL_REFERENCE_STORAGE:
DECL_EXTERNAL (var_decl) = 1;
TREE_PUBLIC (var_decl) = 0;
break;
-
+
default:
abort ();
}
-
+
/* This should really only be set if the variable is used. */
TREE_USED (var_decl) = 1;
-
+
/* Expand declaration and initial value if any. */
-
- if (TREE_STATIC (var_decl))
+
+ if (TREE_STATIC (var_decl))
rest_of_decl_compilation (var_decl, 0, 0, 0);
else
{
@@ -564,9 +569,9 @@ tree_code_create_variable (unsigned int storage_class,
if (DECL_INITIAL (var_decl))
expand_decl_init (var_decl);
}
-
+
return pushdecl (copy_node (var_decl));
-
+
}
@@ -589,7 +594,7 @@ tree_code_generate_return (tree type, tree exp)
if (exp)
{
- setret = build (MODIFY_EXPR, type, DECL_RESULT (current_function_decl),
+ setret = build (MODIFY_EXPR, type, DECL_RESULT (current_function_decl),
build1 (CONVERT_EXPR, type, exp));
TREE_SIDE_EFFECTS (setret) = 1;
TREE_USED (setret) = 1;
@@ -601,12 +606,12 @@ tree_code_generate_return (tree type, tree exp)
/* Output the code for this expression statement CODE. */
-void
-tree_code_output_expression_statement (tree code,
- unsigned char* filename, int lineno)
+void
+tree_code_output_expression_statement (tree code,
+ const char* filename, int lineno)
{
/* Output the line number information. */
- emit_line_note ((const char *)filename, lineno);
+ emit_line_note (filename, lineno);
TREE_USED (code) = 1;
TREE_SIDE_EFFECTS (code) = 1;
expand_expr_stmt (code);
@@ -615,7 +620,7 @@ tree_code_output_expression_statement (tree code,
/* Return a tree for a constant integer value in the token TOK. No
size checking is done. */
-tree
+tree
tree_code_get_integer_value (unsigned char* chars, unsigned int length)
{
long long int val = 0;
@@ -644,8 +649,8 @@ tree_code_get_integer_value (unsigned char* chars, unsigned int length)
/* Return the tree for an expresssion, type EXP_TYPE (see treetree.h)
with tree type TYPE and with operands1 OP1, OP2 (maybe), OP3 (maybe). */
-tree
-tree_code_get_expression (unsigned int exp_type,
+tree
+tree_code_get_expression (unsigned int exp_type,
tree type, tree op1, tree op2, tree op3 ATTRIBUTE_UNUSED)
{
tree ret1;
@@ -657,8 +662,8 @@ tree_code_get_expression (unsigned int exp_type,
if (!op1 || !op2)
abort ();
operator = MODIFY_EXPR;
- ret1 = build (operator, type,
- op1,
+ ret1 = build (operator, type,
+ op1,
build1 (CONVERT_EXPR, type, op2));
break;
@@ -666,21 +671,21 @@ tree_code_get_expression (unsigned int exp_type,
case EXP_PLUS:
operator = PLUS_EXPR;
goto binary_expression;
-
+
case EXP_MINUS:
operator = MINUS_EXPR;
goto binary_expression;
-
+
case EXP_EQUALS:
operator = EQ_EXPR;
goto binary_expression;
-
+
/* Expand a binary expression. Ensure the operands are the right type. */
binary_expression:
if (!op1 || !op2)
abort ();
- ret1 = build (operator, type,
- build1 (CONVERT_EXPR, type, op1),
+ ret1 = build (operator, type,
+ build1 (CONVERT_EXPR, type, op1),
build1 (CONVERT_EXPR, type, op2));
break;
@@ -695,7 +700,7 @@ tree_code_get_expression (unsigned int exp_type,
else
ret1 = build1 (CONVERT_EXPR, type, op1);
break;
-
+
case EXP_FUNCTION_INVOCATION:
if (!op1 || !op2)
abort ();
@@ -709,13 +714,13 @@ tree_code_get_expression (unsigned int exp_type,
default:
abort ();
}
-
+
return ret1;
}
/* Init parameter list and return empty list. */
-tree
+tree
tree_code_init_parameters (void)
{
return NULL_TREE;
@@ -724,11 +729,11 @@ tree_code_init_parameters (void)
/* Add a parameter EXP whose expression type is EXP_PROTO to list
LIST, returning the new list. */
-tree
+tree
tree_code_add_parameter (tree list, tree proto_exp, tree exp)
{
tree new_exp;
- new_exp = tree_cons (NULL_TREE,
+ new_exp = tree_cons (NULL_TREE,
build1 (CONVERT_EXPR, TREE_TYPE (proto_exp), exp),
NULL_TREE);
if (!list)
@@ -741,45 +746,45 @@ tree_code_add_parameter (tree list, tree proto_exp, tree exp)
tree
get_type_for_numeric_type (unsigned int numeric_type)
{
-
+
int size1;
int sign1;
switch (numeric_type)
{
case VOID_TYPE:
return void_type_node;
-
+
case SIGNED_INT:
size1 = tree_code_int_size;
sign1 = 1;
break;
-
+
case UNSIGNED_INT:
size1 = tree_code_int_size;
sign1 = 0;
break;
-
+
case SIGNED_CHAR:
size1 = tree_code_char_size;
sign1 = 1;
break;
-
+
case UNSIGNED_CHAR:
size1 = tree_code_char_size;
sign1 = 0;
break;
-
+
default:
abort ();
}
return tree_code_get_numeric_type (size1, sign1);
-
+
}
/* Return tree representing a numeric type of size SIZE1 bits and
signed if SIGN1 != 0. */
-tree
+tree
tree_code_get_numeric_type (unsigned int size1, unsigned int sign1)
{
tree ret1;
@@ -798,10 +803,10 @@ tree_code_get_numeric_type (unsigned int size1, unsigned int sign1)
else
ret1 = unsigned_char_type_node;
}
- else
+ else
abort ();
-
- return ret1;
+
+ return ret1;
}
/* Garbage Collection. */
@@ -816,7 +821,7 @@ tree_ggc_storage_always_used (void * m)
if (*mm)
ggc_mark (*mm);
-}
+}
/* Following from c-lang.c. */
@@ -847,8 +852,8 @@ check_function_format (int *status ATTRIBUTE_UNUSED,
/* Tell the c code we are not objective C. */
int
-objc_comptypes (tree lhs ATTRIBUTE_UNUSED,
- tree rhs ATTRIBUTE_UNUSED,
+objc_comptypes (tree lhs ATTRIBUTE_UNUSED,
+ tree rhs ATTRIBUTE_UNUSED,
int reflexive ATTRIBUTE_UNUSED)
{
return 0;
@@ -878,6 +883,34 @@ build_return_stmt (tree expr ATTRIBUTE_UNUSED)
abort ();
}
+/* Should not be called for treelang. */
+
+void
+print_call_graph (FILE *file ATTRIBUTE_UNUSED, tree t ATTRIBUTE_UNUSED)
+{
+ abort ();
+}
+
+/* We're about to expand T, a statement. Set up appropriate context
+ for the substitution. */
+
+void
+prep_stmt (t)
+ tree t;
+{
+ if (!STMT_LINENO_FOR_FN_P (t))
+ lineno = STMT_LINENO (t);
+ current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
+}
+
+/* Should not be called for treelang. */
+
+void
+make_rtl_for_local_static (tree decl ATTRIBUTE_UNUSED)
+{
+ abort ();
+}
+
/* C warning, ignore. */
void
@@ -915,15 +948,16 @@ expand_stmt (tree t ATTRIBUTE_UNUSED)
/* Should not be called for treelang. */
cpp_reader *
-cpp_create_reader (enum c_lang lang ATTRIBUTE_UNUSED)
+cpp_create_reader (enum c_lang lang ATTRIBUTE_UNUSED,
+ struct ht *table ATTRIBUTE_UNUSED)
{
abort ();
}
/* Should not be called for treelang. */
-const char *
-init_c_lex (const char *filename ATTRIBUTE_UNUSED)
+void
+init_c_lex (void)
{
abort ();
}
@@ -963,7 +997,7 @@ handle_format_attribute (tree *node ATTRIBUTE_UNUSED,
int flags ATTRIBUTE_UNUSED,
bool *no_add_attrs ATTRIBUTE_UNUSED)
{
- return NULL_TREE;
+ return NULL_TREE;
}
/* Should not be called for treelang. */
@@ -980,18 +1014,8 @@ handle_format_arg_attribute (tree *node ATTRIBUTE_UNUSED,
/* Should not be called for treelang. */
-int
-cpp_handle_option (cpp_reader *pfile ATTRIBUTE_UNUSED,
- int argc ATTRIBUTE_UNUSED,
- char **argv ATTRIBUTE_UNUSED)
-{
- abort ();
-}
-
-/* Should not be called for treelang. */
-
-void
-cpp_assert (cpp_reader * cr ATTRIBUTE_UNUSED,
+void
+cpp_assert (cpp_reader * cr ATTRIBUTE_UNUSED,
const char *s ATTRIBUTE_UNUSED)
{
abort ();
@@ -1103,7 +1127,7 @@ defer_fn (tree fn ATTRIBUTE_UNUSED)
/* Should not be called for treelang. */
-cpp_options
+cpp_options
*cpp_get_options (cpp_reader * cr ATTRIBUTE_UNUSED)
{
abort ();
@@ -1111,10 +1135,10 @@ cpp_options
/* Should not be called for treelang. */
-void
+void
cpp_define (cpp_reader * cr ATTRIBUTE_UNUSED, const char * c ATTRIBUTE_UNUSED)
{
- abort ();
+ abort ();
}
/* Should not be called for treelang. */
@@ -1237,7 +1261,7 @@ treelang_init_decl_processing ()
tree id;
ridpointers = (tree *) ggc_calloc ((int) RID_MAX, sizeof (tree));
-
+
for (i = 0; i < N_reswords; i++)
{
id = get_identifier (reswords[i].word);
diff --git a/gcc/treelang/treetree.h b/gcc/treelang/treetree.h
index 111cf128183..c41dd6d5ed4 100644
--- a/gcc/treelang/treetree.h
+++ b/gcc/treelang/treetree.h
@@ -39,31 +39,31 @@ void tree_ggc_storage_always_used (void *m);
tree tree_code_get_expression (unsigned int exp_type, tree type, tree op1, tree op2, tree op3);
tree tree_code_get_numeric_type (unsigned int size1, unsigned int sign1);
void tree_code_create_function_initial (tree prev_saved,
- unsigned char* filename, int lineno,
+ const char* filename, int lineno,
struct prod_token_parm_item* parms);
-void tree_code_create_function_wrapup (unsigned char* filename, int lineno);
+void tree_code_create_function_wrapup (const char* filename, int lineno);
tree tree_code_create_function_prototype (unsigned char* chars,
unsigned int storage_class,
unsigned int ret_type,
struct prod_token_parm_item* parms,
- unsigned char* filename,
+ const char* filename,
int lineno);
tree tree_code_create_variable (unsigned int storage_class,
unsigned char* chars,
unsigned int length,
unsigned int expression_type,
tree init,
- unsigned char* filename,
+ const char* filename,
int lineno);
-void tree_code_output_expression_statement (tree code, unsigned char* filename, int lineno);
+void tree_code_output_expression_statement (tree code, const char* filename, int lineno);
tree get_type_for_numeric_type (unsigned int numeric_type);
-void tree_code_if_start (tree exp, unsigned char* filename, int lineno);
-void tree_code_if_else (unsigned char* filename, int lineno);
-void tree_code_if_end (unsigned char* filename, int lineno);
+void tree_code_if_start (tree exp, const char* filename, int lineno);
+void tree_code_if_else (const char* filename, int lineno);
+void tree_code_if_end (const char* filename, int lineno);
tree tree_code_get_type (int type_num);
void treelang_init_decl_processing (void);
void treelang_finish (void);
-const char *treelang_init (const char* filename);
+bool treelang_init (void);
int treelang_decode_option (int, char **);
void treelang_parse_file (int debug_flag);
void push_var_level (void);
diff --git a/gcc/tsystem.h b/gcc/tsystem.h
index 104c7663751..511d5cf36f9 100644
--- a/gcc/tsystem.h
+++ b/gcc/tsystem.h
@@ -73,20 +73,16 @@ extern int atexit (void (*)(void));
extern int errno;
#endif
-#ifdef POSIX
-#include <string.h>
-#endif
-
/* GCC (fixproto) guarantees these system headers exist. */
+#include <string.h>
#include <stdlib.h>
#include <unistd.h>
/* GCC supplies this header. */
#include <limits.h>
-#ifdef POSIX
+/* GCC (fixproto) guarantees this system headers exists. */
#include <time.h>
-#endif
#endif /* inhibit_libc */
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 993cad1e36a..c04f63786d9 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -305,9 +305,11 @@ unroll_loop (loop, insn_count, strength_reduce_p)
jump to the loop condition. Make sure to delete the jump
insn, otherwise the loop body will never execute. */
+ /* FIXME this actually checks for a jump to the continue point, which
+ is not the same as the condition in a for loop. As a result, this
+ optimization fails for most for loops. We should really use flow
+ information rather than instruction pattern matching. */
rtx ujump = ujump_to_loop_cont (loop->start, loop->cont);
- if (ujump)
- delete_related_insns (ujump);
/* If number of iterations is exactly 1, then eliminate the compare and
branch at the end of the loop since they will never be taken.
@@ -319,9 +321,10 @@ unroll_loop (loop, insn_count, strength_reduce_p)
if (GET_CODE (last_loop_insn) == BARRIER)
{
/* Delete the jump insn. This will delete the barrier also. */
- delete_related_insns (PREV_INSN (last_loop_insn));
+ last_loop_insn = PREV_INSN (last_loop_insn);
}
- else if (GET_CODE (last_loop_insn) == JUMP_INSN)
+
+ if (ujump && GET_CODE (last_loop_insn) == JUMP_INSN)
{
#ifdef HAVE_cc0
rtx prev = PREV_INSN (last_loop_insn);
@@ -333,24 +336,27 @@ unroll_loop (loop, insn_count, strength_reduce_p)
if (only_sets_cc0_p (prev))
delete_related_insns (prev);
#endif
- }
- /* Remove the loop notes since this is no longer a loop. */
- if (loop->vtop)
- delete_related_insns (loop->vtop);
- if (loop->cont)
- delete_related_insns (loop->cont);
- if (loop_start)
- delete_related_insns (loop_start);
- if (loop_end)
- delete_related_insns (loop_end);
+ delete_related_insns (ujump);
- return;
+ /* Remove the loop notes since this is no longer a loop. */
+ if (loop->vtop)
+ delete_related_insns (loop->vtop);
+ if (loop->cont)
+ delete_related_insns (loop->cont);
+ if (loop_start)
+ delete_related_insns (loop_start);
+ if (loop_end)
+ delete_related_insns (loop_end);
+
+ return;
+ }
}
- else if (loop_info->n_iterations > 0
- /* Avoid overflow in the next expression. */
- && loop_info->n_iterations < (unsigned) MAX_UNROLLED_INSNS
- && loop_info->n_iterations * insn_count < (unsigned) MAX_UNROLLED_INSNS)
+
+ if (loop_info->n_iterations > 0
+ /* Avoid overflow in the next expression. */
+ && loop_info->n_iterations < (unsigned) MAX_UNROLLED_INSNS
+ && loop_info->n_iterations * insn_count < (unsigned) MAX_UNROLLED_INSNS)
{
unroll_number = loop_info->n_iterations;
unroll_type = UNROLL_COMPLETELY;
@@ -1624,11 +1630,13 @@ calculate_giv_inc (pattern, src_insn, regno)
}
else if (GET_CODE (increment) == IOR
+ || GET_CODE (increment) == PLUS
|| GET_CODE (increment) == ASHIFT
- || GET_CODE (increment) == PLUS)
+ || GET_CODE (increment) == LSHIFTRT)
{
/* The rs6000 port loads some constants with IOR.
- The alpha port loads some constants with ASHIFT and PLUS. */
+ The alpha port loads some constants with ASHIFT and PLUS.
+ The sparc64 port loads some constants with LSHIFTRT. */
rtx second_part = XEXP (increment, 1);
enum rtx_code code = GET_CODE (increment);
@@ -1645,8 +1653,10 @@ calculate_giv_inc (pattern, src_insn, regno)
increment = GEN_INT (INTVAL (increment) | INTVAL (second_part));
else if (code == PLUS)
increment = GEN_INT (INTVAL (increment) + INTVAL (second_part));
- else
+ else if (code == ASHIFT)
increment = GEN_INT (INTVAL (increment) << INTVAL (second_part));
+ else
+ increment = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (increment) >> INTVAL (second_part));
}
if (GET_CODE (increment) != CONST_INT)
diff --git a/gcc/unwind-dw2-fde-darwin.c b/gcc/unwind-dw2-fde-darwin.c
index 77e44e852ad..cd979dc1d1e 100644
--- a/gcc/unwind-dw2-fde-darwin.c
+++ b/gcc/unwind-dw2-fde-darwin.c
@@ -1,19 +1,19 @@
/* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
@@ -86,12 +86,18 @@ enum {
ALLOCED_IMAGE_MASK = 2, /* The FDE entries were allocated by
malloc, and must be freed. This isn't
used by newer libgcc versions. */
- IMAGE_IS_TEXT_MASK = 4 /* This image is in the TEXT segment. */
+ IMAGE_IS_TEXT_MASK = 4, /* This image is in the TEXT segment. */
+ DESTRUCTOR_MAY_BE_CALLED_LIVE = 8 /* The destructor may be called on an
+ object that's part of the live
+ image list. */
};
-/* Delete any data we allocated on a live_images structure.
- IMAGE has already been removed from the KEYMGR_GCC3_LIVE_IMAGE_LIST.
- Called by KeyMgr (which will delete the struct after we return.) */
+/* Delete any data we allocated on a live_images structure. Either
+ IMAGE has already been removed from the
+ KEYMGR_GCC3_LIVE_IMAGE_LIST and the struct will be deleted
+ after we return, or that list is locked and we're being called
+ because this object might be about to be unloaded. Called by
+ KeyMgr. */
static void
live_image_destructor (struct live_images *image)
@@ -105,7 +111,10 @@ live_image_destructor (struct live_images *image)
image->object_info = NULL;
if (image->examined_p & ALLOCED_IMAGE_MASK)
free (image->fde);
+ image->fde = NULL;
}
+ image->examined_p = 0;
+ image->destructor = NULL;
}
/* Run through the list of live images. If we can allocate memory,
@@ -165,7 +174,8 @@ examine_objects (void *pc, struct dwarf_eh_bases *bases, int dont_alloc)
image->destructor = live_image_destructor;
image->object_info = ob;
- image->examined_p |= EXAMINED_IMAGE_MASK;
+ image->examined_p |= (EXAMINED_IMAGE_MASK
+ | DESTRUCTOR_MAY_BE_CALLED_LIVE);
}
image->fde = real_fde;
diff --git a/gcc/unwind-dw2-fde-glibc.c b/gcc/unwind-dw2-fde-glibc.c
index d4b62349fca..fcda45739ed 100644
--- a/gcc/unwind-dw2-fde-glibc.c
+++ b/gcc/unwind-dw2-fde-glibc.c
@@ -1,20 +1,20 @@
/* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Contributed by Jakub Jelinek <jakub@redhat.com>.
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c
index 6a44865d7c3..bce8e5ee5b7 100644
--- a/gcc/unwind-dw2.c
+++ b/gcc/unwind-dw2.c
@@ -50,6 +50,10 @@
#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
#endif
+#ifndef DWARF_REG_TO_UNWIND_COLUMN
+#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
+#endif
+
/* This is the register and unwind state for a particular frame. This
provides the information necessary to unwind up past a frame and return
to its caller. */
@@ -164,18 +168,46 @@ read_8s (const void *p) { const union unaligned *up = p; return up->s8; }
inline _Unwind_Word
_Unwind_GetGR (struct _Unwind_Context *context, int index)
{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
/* This will segfault if the register hasn't been saved. */
return * (_Unwind_Word *) context->reg[index];
}
+/* Get the value of the CFA as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ return context->cfa;
+}
+
/* Overwrite the saved value for register REG in CONTEXT with VAL. */
inline void
_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
* (_Unwind_Word *) context->reg[index] = val;
}
+/* Get the pointer to a register INDEX as saved in CONTEXT. */
+
+static inline void *
+_Unwind_GetGRPtr (struct _Unwind_Context *context, int index)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ return context->reg[index];
+}
+
+/* Set the pointer to a register INDEX as saved in CONTEXT. */
+
+static inline void
+_Unwind_SetGRPtr (struct _Unwind_Context *context, int index, void *p)
+{
+ index = DWARF_REG_TO_UNWIND_COLUMN (index);
+ context->reg[index] = p;
+}
+
/* Retrieve the return address for CONTEXT. */
inline _Unwind_Ptr
@@ -741,13 +773,14 @@ execute_cfa_program (const unsigned char *insn_ptr,
reg = insn & 0x3f;
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Sword) utmp * fs->data_align;
- fs->regs.reg[reg].how = REG_SAVED_OFFSET;
- fs->regs.reg[reg].loc.offset = offset;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
}
else if ((insn & 0xc0) == DW_CFA_restore)
{
reg = insn & 0x3f;
- fs->regs.reg[reg].how = REG_UNSAVED;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_UNSAVED;
}
else switch (insn)
{
@@ -773,13 +806,14 @@ execute_cfa_program (const unsigned char *insn_ptr,
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Sword) utmp * fs->data_align;
- fs->regs.reg[reg].how = REG_SAVED_OFFSET;
- fs->regs.reg[reg].loc.offset = offset;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
break;
case DW_CFA_restore_extended:
insn_ptr = read_uleb128 (insn_ptr, &reg);
- fs->regs.reg[reg].how = REG_UNSAVED;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
break;
case DW_CFA_undefined:
@@ -795,8 +829,8 @@ execute_cfa_program (const unsigned char *insn_ptr,
_Unwind_Word reg2;
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &reg2);
- fs->regs.reg[reg].how = REG_SAVED_REG;
- fs->regs.reg[reg].loc.reg = reg2;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg = reg2;
}
break;
@@ -853,8 +887,8 @@ execute_cfa_program (const unsigned char *insn_ptr,
case DW_CFA_expression:
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
- fs->regs.reg[reg].how = REG_SAVED_EXP;
- fs->regs.reg[reg].loc.exp = insn_ptr;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_EXP;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
insn_ptr += utmp;
break;
@@ -863,8 +897,9 @@ execute_cfa_program (const unsigned char *insn_ptr,
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_sleb128 (insn_ptr, &stmp);
offset = stmp * fs->data_align;
- fs->regs.reg[reg].how = REG_SAVED_OFFSET;
- fs->regs.reg[reg].loc.offset = offset;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
break;
case DW_CFA_def_cfa_sf:
@@ -897,8 +932,9 @@ execute_cfa_program (const unsigned char *insn_ptr,
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Word) utmp * fs->data_align;
- fs->regs.reg[reg].how = REG_SAVED_OFFSET;
- fs->regs.reg[reg].loc.offset = -offset;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
+ = REG_SAVED_OFFSET;
+ fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = -offset;
break;
default:
@@ -1052,7 +1088,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
one frame to the next. In this case, the stack pointer is never
stored, so it has no saved address in the context. What we do
have is the CFA from the previous stack frame. */
- if (context->reg[fs->cfa_reg] == NULL)
+ if (_Unwind_GetGRPtr (context, fs->cfa_reg) == NULL)
cfa = context->cfa;
else
cfa = (void *) (_Unwind_Ptr) _Unwind_GetGR (context, fs->cfa_reg);
@@ -1086,10 +1122,12 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
case REG_UNSAVED:
break;
case REG_SAVED_OFFSET:
- context->reg[i] = cfa + fs->regs.reg[i].loc.offset;
+ _Unwind_SetGRPtr (context, i, (void *) (cfa + fs->regs.reg[i].loc.offset));
break;
case REG_SAVED_REG:
- context->reg[i] = orig_context.reg[fs->regs.reg[i].loc.reg];
+ _Unwind_SetGRPtr
+ (context, i,
+ _Unwind_GetGRPtr (&orig_context, fs->regs.reg[i].loc.reg));
break;
case REG_SAVED_EXP:
{
@@ -1100,7 +1138,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
exp = read_uleb128 (exp, &len);
val = execute_stack_op (exp, exp + len, &orig_context,
(_Unwind_Ptr) cfa);
- context->reg[i] = (void *) val;
+ _Unwind_SetGRPtr (context, i, (void *) val);
}
break;
}
@@ -1205,6 +1243,7 @@ uw_install_context_1 (struct _Unwind_Context *current,
{
void *c = current->reg[i];
void *t = target->reg[i];
+
if (t && c && t != c)
memcpy (c, t, dwarf_reg_size_table[i]);
}
diff --git a/gcc/unwind-libunwind.c b/gcc/unwind-libunwind.c
index e73db1c5697..bbbbd3882b1 100644
--- a/gcc/unwind-libunwind.c
+++ b/gcc/unwind-libunwind.c
@@ -3,20 +3,20 @@
Free Software Foundation, Inc.
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
- This file is part of GNU CC.
+ This file is part of GCC.
- GNU CC is free software; you can redistribute it and/or modify
+ 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.
- GNU CC is distributed in the hope that it will be useful,
+ 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 GNU CC; see the file COPYING. If not, write to
+ 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. */
@@ -51,13 +51,13 @@ struct _Unwind_Context {
static _Unwind_Reason_Code
uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs)
{
- unw_word_t handler;
+ unw_proc_info_t pi;
if (unw_step (&context->cursor) <= 0)
return _URC_END_OF_STACK;
- unw_get_reg (&context->cursor, UNW_REG_HANDLER, &handler);
- fs->personality = (_Unwind_Personality_Fn) handler;
+ unw_get_proc_info(&context->cursor, &pi);
+ fs->personality = (_Unwind_Personality_Fn) pi.handler;
return _URC_NO_REASON;
}
@@ -105,6 +105,15 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index)
return ret;
}
+/* Get the value of the CFA as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ /* ??? Is there any way to get this information? */
+ return NULL;
+}
+
/* Overwrite the saved value for register REG in CONTEXT with VAL. */
void
@@ -137,19 +146,19 @@ _Unwind_SetIP (struct _Unwind_Context *context, _Unwind_Ptr val)
void *
_Unwind_GetLanguageSpecificData (struct _Unwind_Context *context)
{
- unw_word_t ret;
+ unw_proc_info_t pi;
- unw_get_reg (&context->cursor, UNW_REG_LSDA, &ret);
- return (void *) ret;
+ unw_get_proc_info(&context->cursor, &pi);
+ return (void *) pi.lsda;
}
_Unwind_Ptr
_Unwind_GetRegionStart (struct _Unwind_Context *context)
{
- unw_word_t ret;
+ unw_proc_info_t pi;
- unw_get_reg (&context->cursor, UNW_REG_PROC_START, &ret);
- return (_Unwind_Ptr) ret;
+ unw_get_proc_info(&context->cursor, &pi);
+ return (_Unwind_Ptr) pi.start_ip;
}
#include "unwind.inc"
diff --git a/gcc/unwind-sjlj.c b/gcc/unwind-sjlj.c
index 535804c1166..6d6fd8bc9b5 100644
--- a/gcc/unwind-sjlj.c
+++ b/gcc/unwind-sjlj.c
@@ -170,6 +170,15 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index)
return context->fc->data[index];
}
+/* Get the value of the CFA as saved in CONTEXT. */
+
+_Unwind_Word
+_Unwind_GetCFA (struct _Unwind_Context *context)
+{
+ /* ??? Ideally __builtin_setjmp places the CFA in the jmpbuf. */
+ return NULL;
+}
+
void
_Unwind_SetGR (struct _Unwind_Context *context, int index, _Unwind_Word val)
{
diff --git a/gcc/unwind.h b/gcc/unwind.h
index e4b1e10865d..084eebfa875 100644
--- a/gcc/unwind.h
+++ b/gcc/unwind.h
@@ -18,6 +18,13 @@
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
+/* As a special exception, if you include this header file into source
+ files compiled by GCC, this header 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 is derived from the C++ ABI for IA-64. Where we diverge
for cross-architecture compatibility are noted with "@@@". */
@@ -131,6 +138,9 @@ extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
+/* @@@ Retrieve the CFA of the given context. */
+extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
+
extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 0cbdc11099d..a505643c832 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1562,6 +1562,8 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
else if (DECL_INITIAL (decl) == 0
|| DECL_INITIAL (decl) == error_mark_node
|| (flag_zero_initialized_in_bss
+ /* Leave constant zeroes in .rodata so they can be shared. */
+ && !TREE_READONLY (decl)
&& initializer_zerop (DECL_INITIAL (decl))))
{
unsigned HOST_WIDE_INT size = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
@@ -2124,7 +2126,11 @@ struct rtx_const GTY(())
ENUM_BITFIELD(machine_mode) mode : 16;
union rtx_const_un {
REAL_VALUE_TYPE GTY ((tag ("4"))) du;
- struct addr_const GTY ((tag ("1"))) addr;
+ struct rtx_const_u_addr {
+ rtx base;
+ const char *symbol;
+ HOST_WIDE_INT offset;
+ } GTY ((tag ("1"))) addr;
struct rtx_const_u_di {
HOST_WIDE_INT high;
HOST_WIDE_INT low;
@@ -2632,8 +2638,6 @@ output_constant_def (exp, defer)
int labelno = -1;
rtx rtl;
- defstr = NULL; /* [GIMPLE] Avoid uninitialized use warning. */
-
/* We can't just use the saved RTL if this is a deferred string constant
and we are not to defer anymore. */
if (TREE_CODE (exp) != INTEGER_CST && TREE_CST_RTL (exp)
@@ -3066,13 +3070,12 @@ decode_rtx_const (mode, x, value)
if (value->kind >= RTX_INT && value->un.addr.base != 0)
switch (GET_CODE (value->un.addr.base))
{
-#if 0
case SYMBOL_REF:
/* Use the string's address, not the SYMBOL_REF's address,
for the sake of addresses of library routines. */
- value->un.addr.base = (rtx) XSTR (value->un.addr.base, 0);
+ value->un.addr.symbol = XSTR (value->un.addr.base, 0);
+ value->un.addr.base = NULL_RTX;
break;
-#endif
case LABEL_REF:
/* For a LABEL_REF, compare labels. */
@@ -3097,7 +3100,8 @@ simplify_subtraction (x)
if (val0.kind >= RTX_INT
&& val0.kind == val1.kind
- && val0.un.addr.base == val1.un.addr.base)
+ && val0.un.addr.base == val1.un.addr.base
+ && val0.un.addr.symbol == val1.un.addr.symbol)
return GEN_INT (val0.un.addr.offset - val1.un.addr.offset);
return x;
@@ -4032,6 +4036,23 @@ output_constant (exp, size, align)
thissize = MIN (TREE_STRING_LENGTH (exp), size);
assemble_string (TREE_STRING_POINTER (exp), thissize);
}
+ else if (TREE_CODE (exp) == VECTOR_CST)
+ {
+ int elt_size;
+ tree link;
+ unsigned int nalign;
+ enum machine_mode inner;
+
+ inner = GET_MODE_INNER (TYPE_MODE (TREE_TYPE (exp)));
+ nalign = MIN (align, GET_MODE_ALIGNMENT (inner));
+
+ elt_size = GET_MODE_UNIT_SIZE (TYPE_MODE (TREE_TYPE (exp)));
+
+ link = TREE_VECTOR_CST_ELTS (exp);
+ output_constant (TREE_VALUE (link), elt_size, align);
+ while ((link = TREE_CHAIN (link)) != NULL)
+ output_constant (TREE_VALUE (link), elt_size, nalign);
+ }
else
abort ();
break;
diff --git a/gcc/version.c b/gcc/version.c
index aeb2932034f..3428d75f365 100644
--- a/gcc/version.c
+++ b/gcc/version.c
@@ -6,7 +6,7 @@
please modify this string to indicate that, e.g. by putting your
organization's name in parentheses at the end of the string. */
-const char version_string[] = "3.5-tree-ssa 20030302 (experimental)";
+const char version_string[] = "3.5-tree-ssa 20030406 (experimental)";
/* This is the location of the online document giving instructions for
reporting bugs. If you distribute a modified version of GCC,
@@ -15,4 +15,4 @@ const char version_string[] = "3.5-tree-ssa 20030302 (experimental)";
forward us bugs reported to you, if you determine that they are
not bugs in your modifications.) */
-const char bug_report_url[] = "<URL:http://www.gnu.org/software/gcc/bugs.html>";
+const char bug_report_url[] = "<URL:http://gcc.gnu.org/bugs.html>";
diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c
index a5cb8a2524d..7824698ffd2 100644
--- a/gcc/vmsdbgout.c
+++ b/gcc/vmsdbgout.c
@@ -1,9 +1,9 @@
-/* Output VMS debug format symbol table information from the GNU C compiler.
+/* Output VMS debug format symbol table information from GCC.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Douglas B. Rupp (rupp@gnat.com).
-This file is part of GNU CC.
+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
@@ -189,7 +189,8 @@ const struct gcc_debug_hooks vmsdbg_debug_hooks
vmsdbgout_global_decl,
debug_nothing_tree, /* deferred_inline_function */
vmsdbgout_abstract_function,
- debug_nothing_rtx /* label */
+ debug_nothing_rtx, /* label */
+ debug_nothing_int /* handle_pch */
};
/* Definitions of defaults for assembler-dependent names of various
diff --git a/include/ChangeLog b/include/ChangeLog
index 058e782ea5e..51d2fc2158b 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,15 @@
+2003-03-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * ansidecl.h (ATTRIBUTE_NONNULL, ATTRIBUTE_NULL_PRINTF,
+ ATTRIBUTE_NULL_PRINTF_1, ATTRIBUTE_NULL_PRINTF_2,
+ ATTRIBUTE_NULL_PRINTF_3, ATTRIBUTE_NULL_PRINTF_4,
+ ATTRIBUTE_NULL_PRINTF_5): New.
+ (ATTRIBUTE_PRINTF): Add ATTRIBUTE_NONNULL.
+
+2003-03-17 Jan Hubicka <jh@suse.cz>
+
+ * hashtab.h (htab_traverse_noresize): Declare.
+
2003-02-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* libiberty.h: Document return value of physmem routines.
diff --git a/include/ansidecl.h b/include/ansidecl.h
index d169b4f50ed..f8f2d737bf0 100644
--- a/include/ansidecl.h
+++ b/include/ansidecl.h
@@ -268,8 +268,21 @@ So instead we use the macro below and test it against specific values. */
#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
#endif /* ATTRIBUTE_NORETURN */
+/* Attribute `nonnull' was valid as of gcc 3.3. */
+#ifndef ATTRIBUTE_NONNULL
+# if (GCC_VERSION >= 3003)
+# define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
+# else
+# define ATTRIBUTE_NONNULL(m)
+# endif /* GNUC >= 3.3 */
+#endif /* ATTRIBUTE_NONNULL */
+
+/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
+ This was the case for the `printf' format attribute by itself
+ before GCC 3.3, but as of 3.3 we need to add the `nonnull'
+ attribute to retain this behavior. */
#ifndef ATTRIBUTE_PRINTF
-#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
@@ -277,6 +290,21 @@ So instead we use the macro below and test it against specific values. */
#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
#endif /* ATTRIBUTE_PRINTF */
+/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A
+ NULL format specifier was allowed as of gcc 3.3. */
+#ifndef ATTRIBUTE_NULL_PRINTF
+# if (GCC_VERSION >= 3003)
+# define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+# else
+# define ATTRIBUTE_NULL_PRINTF(m, n)
+# endif /* GNUC >= 3.3 */
+# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
+# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
+# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
+# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
+# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
+#endif /* ATTRIBUTE_NULL_PRINTF */
+
/* 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/include/hashtab.h b/include/hashtab.h
index 4995a9a10e0..7acb5eb2859 100644
--- a/include/hashtab.h
+++ b/include/hashtab.h
@@ -168,6 +168,7 @@ extern void htab_clear_slot PARAMS ((htab_t, void **));
extern void htab_remove_elt PARAMS ((htab_t, void *));
extern void htab_traverse PARAMS ((htab_t, htab_trav, void *));
+extern void htab_traverse_noresize PARAMS ((htab_t, htab_trav, void *));
extern size_t htab_size PARAMS ((htab_t));
extern size_t htab_elements PARAMS ((htab_t));
diff --git a/libf2c/ChangeLog b/libf2c/ChangeLog
index 60eda27cd9d..be091247888 100644
--- a/libf2c/ChangeLog
+++ b/libf2c/ChangeLog
@@ -1,3 +1,15 @@
+2003-03-24 Bud Davis <bdavis9659@comcast.net>
+
+ PR fortran/10197
+ * libI77/open.c (f_open): A DIRECT ACCESS file is
+ UNFORMATTED by default.
+
+Wed Mar 12 22:27:14 2003 Andreas Schwab <schwab@suse.de>
+
+ * aclocal.m4 (GLIBCPP_EXPORT_INSTALL_INFO): Avoid trailing /. in
+ glibcpp_toolexeclibdir.
+ * configure: Rebuilt.
+
2003-02-20 Alexandre Oliva <aoliva@redhat.com>
* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
diff --git a/libf2c/aclocal.m4 b/libf2c/aclocal.m4
index 5d39edcfcbe..9c513b62d89 100644
--- a/libf2c/aclocal.m4
+++ b/libf2c/aclocal.m4
@@ -212,7 +212,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
AC_SUBST(glibcpp_prefixdir)
diff --git a/libf2c/configure b/libf2c/configure
index f38c0d0865a..c05b3f9cfee 100755
--- a/libf2c/configure
+++ b/libf2c/configure
@@ -1266,7 +1266,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
@@ -1356,7 +1360,7 @@ ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1360: checking for ld used by GCC" >&5
+echo "configure:1364: checking for ld used by GCC" >&5
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -1386,10 +1390,10 @@ echo "configure:1360: checking for ld used by GCC" >&5
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1390: checking for GNU ld" >&5
+echo "configure:1394: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1393: checking for non-GNU ld" >&5
+echo "configure:1397: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1424,7 +1428,7 @@ else
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1428: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1432: checking if the linker ($LD) is GNU ld" >&5
if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1441,7 +1445,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1445: checking for $LD option to reload object files" >&5
+echo "configure:1449: checking for $LD option to reload object files" >&5
if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1453,7 +1457,7 @@ reload_flag=$lt_cv_ld_reload_flag
test -n "$reload_flag" && reload_flag=" $reload_flag"
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1457: checking for BSD-compatible nm" >&5
+echo "configure:1461: checking for BSD-compatible nm" >&5
if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1491,7 +1495,7 @@ NM="$lt_cv_path_NM"
echo "$ac_t""$NM" 1>&6
echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1495: checking how to recognise dependant libraries" >&5
+echo "configure:1499: checking how to recognise dependant libraries" >&5
if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1664,13 +1668,13 @@ file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1668: checking for object suffix" >&5
+echo "configure:1672: checking for object suffix" >&5
if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1674: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
for ac_file in conftest.*; do
case $ac_file in
*.c) ;;
@@ -1694,7 +1698,7 @@ case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:1698: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1702: checking for ${ac_tool_prefix}file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1756,7 +1760,7 @@ fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:1760: checking for file" >&5
+echo "configure:1764: checking for file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1827,7 +1831,7 @@ esac
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1831: checking for $ac_word" >&5
+echo "configure:1835: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1859,7 +1863,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1863: checking for $ac_word" >&5
+echo "configure:1867: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1894,7 +1898,7 @@ fi
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1898: checking for $ac_word" >&5
+echo "configure:1902: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1926,7 +1930,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1930: checking for $ac_word" >&5
+echo "configure:1934: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1993,8 +1997,8 @@ 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 1997 "configure"' > conftest.$ac_ext
- if { (eval echo configure:1998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ echo '#line 2001 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:2002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if test "$lt_cv_prog_gnu_ld" = yes; then
case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
@@ -2027,7 +2031,7 @@ case $host in
ia64-*-hpux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2031: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2035: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*ELF-32*)
HPUX_IA64_MODE="32"
@@ -2043,7 +2047,7 @@ ia64-*-hpux*)
x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*32-bit*)
case $host in
@@ -2087,7 +2091,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2091: checking whether the C compiler needs -belf" >&5
+echo "configure:2095: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2100,14 +2104,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2104 "configure"
+#line 2108 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
@@ -2231,7 +2235,7 @@ else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2235: checking for $ac_word" >&5
+echo "configure:2239: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2271,7 +2275,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2275: checking for a BSD compatible install" >&5
+echo "configure:2279: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2324,7 +2328,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:2328: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:2332: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2353,7 +2357,7 @@ fi
# Sanity check for the cross-compilation case:
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2357: checking how to run the C preprocessor" >&5
+echo "configure:2361: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2368,13 +2372,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2372 "configure"
+#line 2376 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2378: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2382: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2385,13 +2389,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2389 "configure"
+#line 2393 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2399: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2402,13 +2406,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2406 "configure"
+#line 2410 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2412: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2416: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2434,17 +2438,17 @@ echo "$ac_t""$CPP" 1>&6
ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for stdio.h""... $ac_c" 1>&6
-echo "configure:2438: checking for stdio.h" >&5
+echo "configure:2442: checking for stdio.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2443 "configure"
+#line 2447 "configure"
#include "confdefs.h"
#include <stdio.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2448: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2452: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2472,12 +2476,12 @@ fi
echo $ac_n "checking for built-in g77 integer types""... $ac_c" 1>&6
-echo "configure:2476: checking for built-in g77 integer types" >&5
+echo "configure:2480: checking for built-in g77 integer types" >&5
if eval "test \"`echo '$''{'libf2c_cv_has_g77_builtin_types'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2481 "configure"
+#line 2485 "configure"
#include "confdefs.h"
int main() {
@@ -2487,7 +2491,7 @@ __g77_longint g77l;
__g77_ulongint g77ul;
; return 0; }
EOF
-if { (eval echo configure:2491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2495: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libf2c_cv_has_g77_builtin_types=yes
else
@@ -2584,34 +2588,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
-t quote
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output. A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
diff --git a/libf2c/libI77/open.c b/libf2c/libI77/open.c
index 790f5d67098..ac1e00ec6de 100644
--- a/libf2c/libI77/open.c
+++ b/libf2c/libI77/open.c
@@ -148,7 +148,10 @@ f_open (olist * a)
b->url = (int) a->orl;
b->ublnk = a->oblnk && (*a->oblnk == 'z' || *a->oblnk == 'Z');
if (a->ofm == 0)
- b->ufmt = 1;
+ if ((a->oacc) && (*a->oacc == 'D' || *a->oacc == 'd'))
+ b->ufmt = 0;
+ else
+ b->ufmt = 1;
else if (*a->ofm == 'f' || *a->ofm == 'F')
b->ufmt = 1;
else
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 319315e5159..9b4eef63e77 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,25 @@
+2003-04-04 Loren J. Rittle <ljrittle@acm.org>
+
+ * include/Makefile.in: Regenerate.
+
+2003-03-21 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
+
+ * libffi/include/ffi.h.in: Define X86 instead of X86_64 in 32
+ bit mode.
+ * libffi/src/x86/ffi.c (ffi_closure_SYSV, ffi_closure_raw_SYSV):
+ Receive closure pointer through parameter, read args using
+ __builtin_dwarf_cfa.
+ (FFI_INIT_TRAMPOLINE): Send closure reference through eax.
+
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Avoid trailing /. in toolexeclibdir.
+ * configure: Rebuilt.
+
+2003-03-03 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * src/powerpc/darwin_closure.S: Recode to fit dynamic libraries.
+
2003-02-06 Andreas Tobler <a.tobler@schweiz.ch>
* libffi/src/powerpc/darwin_closure.S:
diff --git a/libffi/configure b/libffi/configure
index bdf13a8da50..0a812deea19 100755
--- a/libffi/configure
+++ b/libffi/configure
@@ -3661,7 +3661,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexeclibdir='$(libdir)'
fi
-toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+esac
diff --git a/libffi/configure.in b/libffi/configure.in
index 06b5fa936c9..aa57ed1fa93 100644
--- a/libffi/configure.in
+++ b/libffi/configure.in
@@ -172,7 +172,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexeclibdir='$(libdir)'
fi
-toolexeclibdir=$toolexeclibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;;
+esac
AC_SUBST(toolexecdir)
AC_SUBST(toolexeclibdir)
diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in
index 13aa274f405..b5d4e2de87b 100644
--- a/libffi/include/Makefile.in
+++ b/libffi/include/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -81,6 +81,8 @@ TARGET = @TARGET@
TARGETDIR = @TARGETDIR@
VERSION = @VERSION@
libffi_basedir = @libffi_basedir@
+toolexecdir = @toolexecdir@
+toolexeclibdir = @toolexeclibdir@
AUTOMAKE_OPTIONS = foreign
@@ -89,7 +91,7 @@ EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
hackdir = $(includedir)
hack_DATA = fficonfig.h ffi.h ffi_mips.h
-mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+mkinstalldirs = $(SHELL) $(top_srcdir)/${libffi_basedir}../mkinstalldirs
CONFIG_HEADER = ../fficonfig.h
CONFIG_CLEAN_FILES = ffi.h
DATA = $(hack_DATA)
diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in
index 02853846c9f..fe91ecd5e2e 100644
--- a/libffi/include/ffi.h.in
+++ b/libffi/include/ffi.h.in
@@ -170,6 +170,13 @@ extern "C" {
#endif
#endif
+#ifdef X86_64
+#if defined (__i386__)
+#undef X86_64
+#define X86
+#endif
+#endif
+
#ifndef LIBFFI_ASM
/* ---- Generic type definitions ----------------------------------------- */
diff --git a/libffi/src/powerpc/darwin_closure.S b/libffi/src/powerpc/darwin_closure.S
index 9ae17d8cce8..9f721de8a61 100644
--- a/libffi/src/powerpc/darwin_closure.S
+++ b/libffi/src/powerpc/darwin_closure.S
@@ -25,21 +25,19 @@
----------------------------------------------------------------------- */
#define LIBFFI_ASM
-#define JUMPTARGET(name) name
#define L(x) x
-.text
-.globl _ffi_closure_helper_DARWIN
+ .file "darwin_closure.S"
.text
- .align 2
+ .align 2
.globl _ffi_closure_ASM
-
+
.text
.align 2
_ffi_closure_ASM:
LFB1:
- mflr r0 /* extract return address */
- stw r0, 8(r1) /* save the return address */
+ mflr r0 /* extract return address */
+ stw r0, 8(r1) /* save the return address */
LCFI0:
/* 24 Bytes (Linkage Area)
32 Bytes (outgoing parameter area, always reserved)
@@ -47,7 +45,7 @@ LCFI0:
8 Bytes (result)
168 Bytes */
- stwu r1,-176(r1) /* skip over caller save area
+ stwu r1,-176(r1) /* skip over caller save area
keep stack aligned to 16 */
LCFI1:
/* we want to build up an area for the parameters passed
@@ -97,98 +95,147 @@ LCFI1:
addi r7,r1,232
/* make the call */
- bl L(_ffi_closure_helper_DARWIN)
-
+ bl Lffi_closure_helper_DARWIN$stub
+
/* now r3 contains the return type */
/* so use it to look up in a table */
/* so we know how to deal with each type */
/* look up the proper starting point in table */
/* by using return type as offset */
- addi r5,r1,160 /* get pointer to results area */
- addis r4,0,ha16(.L60) /* get address of jump table */
- addi r4,r4,lo16(.L60)
- slwi r3,r3,2 /* now multiply return type by 4 */
- lwzx r3,r4,r3 /* get the contents of that table value */
- add r3,r3,r4 /* add contents of table to table address */
+ addi r5,r1,160 /* get pointer to results area */
+ bl Lget_ret_type0_addr /* get pointer to Lret_type0 into LR */
+ mflr r4 /* move to r4 */
+ slwi r3,r3,4 /* now multiply return type by 16 */
+ add r3,r3,r4 /* add contents of table to table address */
mtctr r3
- bctr /* jump to it */
+ bctr /* jump to it */
LFE1:
- .align 2
-
-.L60:
- .long .L44-.L60 /* FFI_TYPE_VOID */
- .long .L50-.L60 /* FFI_TYPE_INT */
- .long .L47-.L60 /* FFI_TYPE_FLOAT */
- .long .L46-.L60 /* FFI_TYPE_DOUBLE */
- .long .L46-.L60 /* FFI_TYPE_LONGDOUBLE */
- .long .L56-.L60 /* FFI_TYPE_UINT8 */
- .long .L55-.L60 /* FFI_TYPE_SINT8 */
- .long .L58-.L60 /* FFI_TYPE_UINT16 */
- .long .L57-.L60 /* FFI_TYPE_SINT16 */
- .long .L50-.L60 /* FFI_TYPE_UINT32 */
- .long .L50-.L60 /* FFI_TYPE_SINT32 */
- .long .L48-.L60 /* FFI_TYPE_UINT64 */
- .long .L48-.L60 /* FFI_TYPE_SINT64 */
- .long .L44-.L60 /* FFI_TYPE_STRUCT */
- .long .L50-.L60 /* FFI_TYPE_POINTER */
-
-
-/* case double */
-.L46:
- lfd f1,0(r5)
- b .L44
-
-/* case float */
-.L47:
- lfs f1,0(r5)
- b .L44
-
-/* case long long */
-.L48:
- lwz r3,0(r5)
- lwz r4,4(r5)
- b .L44
+/* Each of the ret_typeX code fragments has to be exactly 16 bytes long */
+/* (4 instructions). For cache effectiveness we align to a 16 byte boundary */
+/* first. */
-/* case default / int32 / pointer */
-.L50:
- lwz r3,0(r5)
- b .L44
-
-/* case signed int8 */
-.L55:
- addi r5,r5,3
- lbz r3,0(r5)
- extsb r3,r3
- b .L44
-
-/* case unsigned int8 */
-.L56:
- addi r5,r5,3
- lbz r3,0(r5)
- b .L44
-
-/* case signed int16 */
-.L57:
- addi r5,r5,2
- lhz r3,0(r5)
- extsh r3,r3
- b .L44
-
-/* case unsigned int16 */
-.L58:
- addi r5,r5,2
- lhz r3,0(r5)
-
-/* case void / done */
-.L44:
-
- addi r1,r1,176 /* restore stack pointer */
- lwz r0,8(r1) /* get return address */
- mtlr r0 /* reset link register */
+ .align 4
+
+ nop
+ nop
+ nop
+Lget_ret_type0_addr:
+ blrl
+
+/* case FFI_TYPE_VOID */
+Lret_type0:
+ b Lfinish
+ nop
+ nop
+ nop
+
+/* case FFI_TYPE_INT */
+Lret_type1:
+ lwz r3,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_FLOAT */
+Lret_type2:
+ lfs f1,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_DOUBLE */
+Lret_type3:
+ lfd f1,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_LONGDOUBLE */
+Lret_type4:
+ lfd f1,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_UINT8 */
+Lret_type5:
+ lbz r3,3(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_SINT8 */
+Lret_type6:
+ lbz r3,3(r5)
+ extsb r3,r3
+ b Lfinish
+ nop
+
+/* case FFI_TYPE_UINT16 */
+Lret_type7:
+ lhz r3,2(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_SINT16 */
+Lret_type8:
+ lha r3,2(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_UINT32 */
+Lret_type9:
+ lwz r3,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_SINT32 */
+Lret_type10:
+ lwz r3,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case FFI_TYPE_UINT64 */
+Lret_type11:
+ lwz r3,0(r5)
+ lwz r4,4(r5)
+ b Lfinish
+ nop
+
+/* case FFI_TYPE_SINT64 */
+Lret_type12:
+ lwz r3,0(r5)
+ lwz r4,4(r5)
+ b Lfinish
+ nop
+
+/* case FFI_TYPE_STRUCT */
+Lret_type13:
+ b Lfinish
+ nop
+ nop
+ nop
+
+/* case FFI_TYPE_POINTER */
+Lret_type14:
+ lwz r3,0(r5)
+ b Lfinish
+ nop
+ nop
+
+/* case done */
+Lfinish:
+ addi r1,r1,176 /* restore stack pointer */
+ lwz r0,8(r1) /* get return address */
+ mtlr r0 /* reset link register */
blr
-
-/* END(ffi_closure_ASM) */
+
+/* END(ffi_closure_ASM) */
.data
.section __TEXT,__eh_frame
@@ -233,4 +280,24 @@ LASFDE1:
.byte 0x7e ; sleb128 -2
.align 2
LEFDE1:
-
+.data
+ .align 2
+LDFCM0:
+.section __TEXT,__picsymbolstub1,symbol_stubs,pure_instructions,32
+ .align 2
+Lffi_closure_helper_DARWIN$stub:
+ .indirect_symbol _ffi_closure_helper_DARWIN
+ mflr r0
+ bcl 20,31,LO$ffi_closure_helper_DARWIN
+LO$ffi_closure_helper_DARWIN:
+ mflr r11
+ addis r11,r11,ha16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)
+ mtlr r0
+ lwzu r12,lo16(L_ffi_closure_helper_DARWIN$lazy_ptr - LO$ffi_closure_helper_DARWIN)(r11)
+ mtctr r12
+ bctr
+.data
+.lazy_symbol_pointer
+L_ffi_closure_helper_DARWIN$lazy_ptr:
+ .indirect_symbol _ffi_closure_helper_DARWIN
+ .long dyld_stub_binding_helper
diff --git a/libffi/src/x86/ffi.c b/libffi/src/x86/ffi.c
index 68135f97c35..bd0874f771a 100644
--- a/libffi/src/x86/ffi.c
+++ b/libffi/src/x86/ffi.c
@@ -214,35 +214,29 @@ void ffi_call(/*@dependent@*/ ffi_cif *cif,
static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
void** args, ffi_cif* cif);
-static void ffi_closure_SYSV ();
-static void ffi_closure_raw_SYSV ();
+static void ffi_closure_SYSV (ffi_closure *)
+ __attribute__ ((regparm(1)));
+static void ffi_closure_raw_SYSV (ffi_raw_closure *)
+ __attribute__ ((regparm(1)));
-/* This function is jumped to by the trampoline, on entry, %ecx (a
- * caller-save register) holds the address of the closure.
- * Clearly, this requires __GNUC__, so perhaps we should translate this
- * into an assembly file if this is to be distributed with ffi.
- */
+/* This function is jumped to by the trampoline */
static void
-ffi_closure_SYSV ()
+ffi_closure_SYSV (closure)
+ ffi_closure *closure;
{
// this is our return value storage
long double res;
// our various things...
- void *args;
ffi_cif *cif;
void **arg_area;
- ffi_closure *closure;
unsigned short rtype;
void *resp = (void*)&res;
+ void *args = __builtin_dwarf_cfa ();
- /* grab the trampoline context pointer */
- asm ("movl %%ecx,%0" : "=r" (closure));
-
cif = closure->cif;
arg_area = (void**) alloca (cif->nargs * sizeof (void*));
- asm ("leal 8(%%ebp),%0" : "=q" (args));
/* this call will initialize ARG_AREA, such that each
* element in that array points to the corresponding
@@ -330,11 +324,11 @@ ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
({ 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 + 10); \
- *(unsigned char*) &__tramp[0] = 0xb9; \
- *(unsigned int*) &__tramp[1] = __ctx; \
- *(unsigned char*) &__tramp[5] = 0xe9; \
- *(unsigned int*) &__tramp[6] = __dis; \
+ unsigned int __dis = __fun - ((unsigned int) __tramp + FFI_TRAMPOLINE_SIZE); \
+ *(unsigned char*) &__tramp[0] = 0xb8; \
+ *(unsigned int*) &__tramp[1] = __ctx; /* movl __ctx, %eax */ \
+ *(unsigned char *) &__tramp[5] = 0xe9; \
+ *(unsigned int*) &__tramp[6] = __dis; /* jmp __fun */ \
})
@@ -364,30 +358,23 @@ ffi_prep_closure (ffi_closure* closure,
#if !FFI_NO_RAW_API
static void
-ffi_closure_raw_SYSV ()
+ffi_closure_raw_SYSV (closure)
+ ffi_raw_closure *closure;
{
// this is our return value storage
long double res;
// our various things...
- void *args;
ffi_raw *raw_args;
ffi_cif *cif;
- ffi_raw_closure *closure;
unsigned short rtype;
void *resp = (void*)&res;
- /* grab the trampoline context pointer */
- asm ("movl %%ecx,%0" : "=r" (closure));
-
- /* take the argument pointer */
- asm ("leal 8(%%ebp),%0" : "=q" (args));
-
/* get the cif */
cif = closure->cif;
/* the SYSV/X86 abi matches the RAW API exactly, well.. almost */
- raw_args = (ffi_raw*) args;
+ raw_args = (ffi_raw*) __builtin_dwarf_cfa ();
(closure->fun) (cif, resp, raw_args, closure->user_data);
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 31d159b9317..0fe3e78e090 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,32 @@
+2003-03-23 Alexandre Oliva <aoliva@redhat.com>
+
+ * Makefile.in (MULTIOSDIR): New macro. Use $(CC) $(LIBCFLAGS)
+ instead of $$CC alone.
+ (install_to_tooldir): Use it.
+
+2003-17-03 Jan Hubicka <jh@suse.cz>
+
+ * hashtab.c (htab_traverse_noresize): Break out from ...
+ * hashtab.c (htab_traverse): ... here.
+
+2003-12-03 Jan Hubicka <jh@suse.cz>
+
+ * hashtab.c (htab_expand): Fix warning.
+
+ * hashtab.c (htab_expand): Compute the size of hashtable based
+ on the number of elements actually used.
+ (htab_traverse): Call htab_expand when table is too empty.
+
+2003-03-11 Carlo Wood <carlo@gnu.org>
+
+ * cplus-dem.c (demangle_integral_value): Correction to reflect
+ patch of 2002-01-10 in order to also make negative multi-digits
+ without leading underscore work.
+
+2003-03-03 Mark Mitchell <mark@codesourcery.com>
+
+ * cplus-dem.c: Add license exception to copyright notice.
+
2003-02-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* physmem.c: Formatting changes from upstream.
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 064179669bd..737d239450a 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -286,11 +286,16 @@ 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/`$$CC -print-multi-os-directory`
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n
- ( cd $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory` ; $(RANLIB) $(TARGETLIB)n )
- mv -f $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/`$$CC -print-multi-os-directory`/$(TARGETLIB)
+ ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
+ $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
+ ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; $(RANLIB) $(TARGETLIB)n )
+ mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
# needed-list is used by libstdc++. NEEDED is the list of functions
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 0b5a3e0b29e..59afcd371ba 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -11,6 +11,15 @@ modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
+In addition to the permissions in the GNU Library 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 Library Public License
+restrictions do apply in other respects; for example, they cover
+modification of the file, and distribution when not linked into a
+combined executable.)
+
Libiberty 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
@@ -1788,31 +1797,34 @@ demangle_integral_value (work, mangled, s)
success = 0;
- /* Negative numbers are indicated with a leading `m'. */
- if (**mangled == 'm')
- {
- string_appendn (s, "-", 1);
- (*mangled)++;
- }
- else if (mangled[0][0] == '_' && mangled[0][1] == 'm')
- {
- /* Since consume_count_with_underscores does not handle the
- `m'-prefix we must do it here, using consume_count and
- adjusting underscores: we have to consume the underscore
- matching the prepended one. */
- multidigit_without_leading_underscore = 1;
- string_appendn (s, "-", 1);
- (*mangled) += 2;
- }
- else if (**mangled == '_')
- {
- /* Do not consume a following underscore;
- multidigit_without_leading_underscore will consume what should be
- consumed. */
- leave_following_underscore = 1;
+ if (**mangled == '_')
+ {
+ if (mangled[0][1] == 'm')
+ {
+ /* Since consume_count_with_underscores does not handle the
+ `m'-prefix we must do it here, using consume_count and
+ adjusting underscores: we have to consume the underscore
+ matching the prepended one. */
+ multidigit_without_leading_underscore = 1;
+ string_appendn (s, "-", 1);
+ (*mangled) += 2;
+ }
+ else
+ {
+ /* Do not consume a following underscore;
+ consume_count_with_underscores will consume what
+ should be consumed. */
+ leave_following_underscore = 1;
+ }
}
else
{
+ /* Negative numbers are indicated with a leading `m'. */
+ if (**mangled == 'm')
+ {
+ string_appendn (s, "-", 1);
+ (*mangled)++;
+ }
/* Since consume_count_with_underscores does not handle
multi-digit numbers that do not start with an underscore,
and this number can be an integer template parameter,
@@ -1853,7 +1865,7 @@ demangle_integral_value (work, mangled, s)
/* All is well. */
success = 1;
}
- }
+ }
return success;
}
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index 0429936e961..2f8dfd6c581 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -373,7 +373,14 @@ htab_expand (htab)
oentries = htab->entries;
olimit = oentries + htab->size;
- nsize = higher_prime_number (htab->size * 2);
+ /* Resize only when table after removal of unused elements is either
+ too full or too empty. */
+ if ((htab->n_elements - htab->n_deleted) * 2 > htab->size
+ || ((htab->n_elements - htab->n_deleted) * 8 < htab->size
+ && htab->size > 32))
+ nsize = higher_prime_number ((htab->n_elements - htab->n_deleted) * 2);
+ else
+ nsize = htab->size;
if (htab->alloc_with_arg_f != NULL)
nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
@@ -596,13 +603,16 @@ htab_clear_slot (htab, slot)
argument. */
void
-htab_traverse (htab, callback, info)
+htab_traverse_noresize (htab, callback, info)
htab_t htab;
htab_trav callback;
PTR info;
{
- PTR *slot = htab->entries;
- PTR *limit = slot + htab->size;
+ PTR *slot;
+ PTR *limit;
+
+ slot = htab->entries;
+ limit = slot + htab->size;
do
{
@@ -615,6 +625,24 @@ htab_traverse (htab, callback, info)
while (++slot < limit);
}
+/* Like htab_traverse_noresize, but does resize the table when it is
+ too empty to improve effectivity of subsequent calls. */
+
+void
+htab_traverse (htab, callback, info)
+ htab_t htab;
+ htab_trav callback;
+ PTR info;
+{
+ PTR *slot;
+ PTR *limit;
+
+ if ((htab->n_elements - htab->n_deleted) * 8 < htab->size)
+ htab_expand (htab);
+
+ htab_traverse_noresize (htab, callback, info);
+}
+
/* Return the current size of given hash table. */
size_t
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 1cefce06361..c59b2addbf4 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,1362 @@
+2003-04-06 Michael Koch <konqueror@gmx.de>
+
+ * java/net/URLConnection.java:
+ Import classes directly.
+ (URLConnection): Merged class documentation with classpath.
+ (url): Moved, documentation from classpath added.
+ (doInput): Moved, documentation from classpath added.
+ (doOutput): Moved, documentation from classpath added.
+ (allowUserInteraction): Moved.
+ (useCaches): Moved, documentation from classpath added.
+ (ifModifiedSince): Moved, documentation from classpath added.
+ (connected): Moved, documentation from classpath added.
+
+2003-04-06 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileInputStream.java
+ (skip): Renamed some variables to match classpath, added
+ checks from classpath.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/AbstractAction.java
+ (AbstractAction): Reformatted.
+ (serialVersionUID): New private member variable.
+ * javax/swing/plaf/BorderUIResource.java
+ (serialVersionUID): New private member variable.
+ * javax/swing/plaf/basic/BasicLookAndFeel.java
+ (serialVersionUID): New private member variable.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/sql/Date.java
+ (valueOf): Deprecated, reformatted.
+ (toString): Deprecated, reformatted.
+ * java/sql/Time.java
+ (valueOf): Deprecated, reformatted.
+ (toString): Deprecated, reformatted.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/dgc/VMID.java
+ (isUnique): Deprecated.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/io/File.java
+ (separator): Merged documentation from classpath.
+ (separatorChar): Merged documentation from classpath.
+ (pathSeparator): Merged documentation from classpath.
+ (pathSeparatorChar): Merged documentation from classpath.
+ (path): Merged documentation from classpath.
+ (canRead): Merged documentation from classpath.
+ (canWrite): Merged documentation from classpath.
+ (createNewFile): Merged documentation from classpath.
+ (delete): Merged documentation from classpath.
+ (equals): Merged documentation from classpath.
+ (exists): Merged documentation from classpath.
+ (File): Renamed p to name to match classpath, merged documentation
+ from classpath.
+ (getAbsolutePath): Merged documentation from classpath.
+ (getCanonicalPath): Merged documentation from classpath.
+ (getCanonicalFile): Merged documentation from classpath.
+ (getName): Merged documentation from classpath.
+ (getParent): Merged documentation from classpath.
+ (getParentFile): Merged documentation from classpath.
+ (getPath): Merged documentation from classpath.
+ (hashCode): Merged documentation from classpath.
+ (isAbsolute): Merged documentation from classpath.
+ (isDirectory): Merged documentation from classpath.
+ (isFile): Merged documentation from classpath.
+ (isHidden): Merged documentation from classpath.
+ (lastModified): Merged documentation from classpath.
+ (length): Merged documentation from classpath.
+ (list): Merged documentation from classpath.
+ (listFiles): Merged documentation from classpath.
+ (toString): Merged documentation from classpath.
+ (toURL): Merged documentation from classpath.
+ (mkdir): Merged documentation from classpath.
+ (mkdirs): Merged documentation from classpath.
+ (createTempFile): Merged documentation from classpath.
+ (setReadOnly): Merged documentation from classpath.
+ (listRoots): Merged documentation from classpath.
+ (compareTo): Merged documentation from classpath.
+ (renameTo): Merged documentation from classpath.
+ (setLastModified): Merged documentation from classpath.
+ * java/io/PrintStream.java
+ (auto_flush): Merged documentation from classpath.
+ (PrintStream): Merged documentation from classpath.
+ (checkError): Merged documentation from classpath.
+ (setError): Merged documentation from classpath.
+ (close): Merged documentation from classpath.
+ (flush): Merged documentation from classpath.
+ (print): Merged documentation from classpath.
+ (println): Merged documentation from classpath.
+ (write): Renamed count to len to match classpath,
+ merged documentation from classpath.
+ * java/io/RandomAccessFile.java
+ (readShort): Merged documentation from classpath.
+ (readUnsignedByte): Merged documentation from classpath.
+ (readUnsignedShort): Merged documentation from classpath.
+ (readUTF): Merged documentation from classpath.
+ (seek): Reformatted, merged documentation from classpath.
+ (skipBytes): Renamed some variables to match classpath, reformatted,
+ merged documentation from classpath.
+ (write): Merged documentation from classpath.
+ (writeBoolean): Merged documentation from classpath.
+ (writeByte): Merged documentation from classpath.
+ (writeShort): Merged documentation from classpath.
+ (writeChar): Merged documentation from classpath.
+ (writeInt): Merged documentation from classpath.
+ (writeLong): Merged documentation from classpath.
+ (writeFloat): Merged documentation from classpath.
+ (writeDouble): Merged documentation from classpath.
+ (writeBytes): Merged documentation from classpath.
+ (writeChars): Merged documentation from classpath.
+ (writeUTF): Reformatted.
+ (getChannel): Reformatted.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/font/TextAttribute.java
+ (readResolve): Throws java.io.InvalidObjectException.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/server/LoaderHandler.java
+ (loadClass): Deprecated.
+ (getSecurityContext): Deprecated.
+ * java/rmi/server/LogStream.java
+ (getDefaultStream): Deprecated.
+ (setDefaultStream): Deprecated.
+ (getOutputStream): Deprecated.
+ (setOutputStream): Deprecated.
+ (write): Deprecated.
+ (toString): Deprecated.
+ (parseLevel): Deprecated.
+ * java/rmi/server/Operation.java
+ (Operation): Deprecated.
+ (getOperation): Deprecated.
+ (toString): Deprecated.
+ * java/rmi/server/RemoteCall.java
+ (getOutputStream): Deprecated.
+ (releaseOutputStream): Deprecated.
+ (getInputStream): Deprecated.
+ (releaseInputStream): Deprecated.
+ (getResultStream): Deprecated.
+ (executeCall): Deprecated.
+ (done): Deprecated.
+ * java/rmi/server/RemoteRef.java
+ (invoke): Deprecated.
+ (newCall): Deprecated.
+ (done): Deprecated.
+ * java/rmi/server/RemoteStub.java
+ (setRef): Deprecated.
+ * java/rmi/server/Skeleton.java:
+ No need to import java.lang.Exception explicitly.
+ (dispatch): Deprecated.
+ (getOperations): Deprecated.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/dgc/VMID.java,
+ java/rmi/registry/RegistryHandler.java,
+ java/rmi/server/LogStream.java,
+ java/rmi/server/Operation.java,
+ java/rmi/server/RemoteCall.java,
+ java/rmi/server/RemoteRef.java,
+ java/rmi/server/RemoteStub.java:
+ Reformatted.
+
+2003-03-31 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/AbstractCellEditor.java,
+ javax/swing/AbstractListModel.java,
+ javax/swing/ActionMap.java,
+ javax/swing/BorderFactory.java,
+ javax/swing/ButtonGroup.java,
+ javax/swing/DefaultBoundedRangeModel.java,
+ javax/swing/DefaultButtonModel.java,
+ javax/swing/DefaultCellEditor.java,
+ javax/swing/DefaultComboBoxModel.java,
+ javax/swing/DefaultDesktopManager.java,
+ javax/swing/DefaultListCellRenderer.java,
+ javax/swing/DefaultSingleSelectionModel.java,
+ javax/swing/InputMap.java,
+ javax/swing/JComponent.java,
+ javax/swing/JMenu.java,
+ javax/swing/JSlider.java,
+ javax/swing/KeyStroke.java,
+ javax/swing/OverlayLayout.java,
+ javax/swing/ScrollPaneLayout.java,
+ javax/swing/SizeRequirements.java,
+ javax/swing/UIManager.java,
+ javax/swing/ViewportLayout.java,
+ javax/swing/border/AbstractBorder.java,
+ javax/swing/colorchooser/DefaultColorSelectionModel.java,
+ javax/swing/event/EventListenerList.java,
+ javax/swing/table/AbstractTableModel.java,
+ javax/swing/table/DefaultTableCellRenderer.java,
+ javax/swing/table/DefaultTableColumnModel.java,
+ javax/swing/table/DefaultTableModel.java,
+ javax/swing/table/TableColumn.java,
+ javax/swing/text/StyledEditorKit.java,
+ javax/swing/tree/DefaultMutableTreeNode.java,
+ javax/swing/tree/DefaultTreeModel.java,
+ javax/swing/tree/DefaultTreeSelectionModel.java,
+ javax/swing/tree/TreePath.java,
+ javax/swing/undo/AbstractUndoableEdit.java,
+ javax/swing/undo/StateEdit.java,
+ javax/swing/undo/StateEditable.java,
+ javax/swing/undo/UndoableEditSupport.java:
+ Merges from classpath.
+
+2003-03-30 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/String.java (data, boffset, count): Documented.
+ (String(byte[],String)): Reformatted.
+ (String(byte[])): Likewise.
+ (lastIndexOf(int)): Likewise.
+ (lastIndexOf(String)): Likewise.
+ (substring(int)): Renamed argument to match Classpath.
+ (String(StringBuffer)): Don't share buffer if it is nearly empty.
+
+ * java/lang/String.java: Miscellaneous minor formatting changes
+ to match Classpath more closely.
+
+2003-03-29 Eric Blake <ebb9@email.byu.edu>
+ Tom Tromey <tromey@redhat.com>
+
+ * java/lang/natString.cc (hashCode): Use cachedHashCode.
+ (init()): Removed.
+ (charAt): Put index in exception.
+ (contentEquals): New method.
+ Include StringBuffer.h.
+ * java/lang/String.java (cachedHashCode): New field.
+ (String()): Follow classpath implementation.
+ (init()): Removed.
+ (contentEquals): Declare.
+ (subSequence): Don't declare IndexOutIfBoundsException in throws
+ clause.
+ (matches, replaceFirst, replaceAll, split): New methods from
+ Classpath.
+
+2003-03-29 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/String.java: Reordered to follow Classpath; merged in
+ javadoc.
+
+ * java/text/MessageFormat.java: Removed some whitespace.
+
+ * Makefile.in: Rebuilt.
+ * Makefile.am (awt_java_source_files): Added new files.
+ * gnu/javax/rmi/PortableServer.java,
+ gnu/javax/rmi/CORBA/DelegateFactory.java,
+ gnu/javax/rmi/CORBA/GetDelegateInstanceException.java,
+ gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java,
+ gnu/javax/rmi/CORBA/StubDelegateImpl.java,
+ gnu/javax/rmi/CORBA/UtilDelegateImpl.java,
+ gnu/javax/rmi/CORBA/ValueHandlerImpl.java,
+ javax/rmi/BAD_OPERATION.java, javax/rmi/ORB.java,
+ javax/rmi/PortableRemoteObject.java,
+ javax/rmi/CORBA/ClassDesc.java, javax/rmi/CORBA/ObjectImpl.java,
+ javax/rmi/CORBA/PortableRemoteObjectDelegate.java,
+ javax/rmi/CORBA/Stub.java, javax/rmi/CORBA/StubDelegate.java,
+ javax/rmi/CORBA/SystemException.java, javax/rmi/CORBA/Tie.java,
+ javax/rmi/CORBA/Util.java, javax/rmi/CORBA/UtilDelegate.java,
+ javax/rmi/CORBA/ValueHandler.java: New files from Classpath.
+
+ * java/lang/natClass.cc (newInstance): Put method name in
+ exception.
+ (getConstructor): Likewise.
+ (getDeclaredConstructor): Likewise.
+ (getPrivateMethod): Likewise.
+
+2003-03-28 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/reflect/Proxy.java: New version from Classpath.
+ * java/lang/Package.java: New version from Classpath.
+
+2003-03-29 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * configure.in (HAVE_BACKTRACE) [s390*-*-linux*]: Define.
+ * configure: Regenerate.
+
+2003-03-28 Michael Koch <konqueror@gmx.de>
+
+ * java/io/File.java:
+ Import needed classes instead of whole packages, merged class
+ documentation with classpath, moved constants and variables to top of
+ class.
+ * java/io/PrintStream.java:
+ Merged class documentation with classpath, moved constants and
+ variables to top of class.
+ * java/io/RandomAccessFile.java
+ (RandomAccessFile): Merged with classpath.
+ (read): Merged with classpath).
+ (read*): Reformatted.
+
+2003-03-28 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileDescriptor.java
+ (finalize): Throws Throwable, not IOException.
+ * java/io/ObjectOutputStream.java
+ (PutField.put): Doesnt throws anything.
+
+2003­03-28 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileOutputStream.java:
+ Merged class documentation and authors with classpath.
+ (FileOutputStream): Partly merged with classpath.
+ (write): Merged with classpath.
+ (getChannel): Make it synchronized instead of explicit block in this
+ method.
+ * java/io/RandomAccessFile.java:
+ Merged class documentation and authors with classpath.
+
+2003-03-26 Tom Tromey <tromey@redhat.com>
+
+ * java/lang/natRuntime.cc (insertSystemProperties): Set
+ gnu.classpath.home.url.
+ * Makefile.in: Rebuilt.
+ * Makefile.am: Define LIBDIR.
+
+2003-03-25 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileInputStream.java
+ (read): Renamed b to buf and off to offset.
+ * java/io/FileOutputStream.java
+ (ch): Documentation added.
+ (FileOutputStream): Documentation added.
+ (getFD): Documentation added.
+ (write): Documentation added.
+ (close): Documentation added.
+ (getChannel): Documentation added.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/io/DataOutputStream.java
+ (write): Merged from classpath.
+ * java/io/File.java:
+ Merged copyrigth with classpath.
+ * java/io/FileInputStream.java
+ (getChannel): Made it synchronized instead of using a synchronized
+ block.
+ * java/io/FileOutputStream.java: Reformatted.
+ * java/io/InputStreamReader.java
+ (InputStreamReader): Renamed enc to encoding_name.
+ (close): Merged documentation from classpath.
+ (getEncoding): Merged documentation from classpath.
+ (ready): Merged documentation from classpath.
+ (read): Merged documentation from classpath.
+ * java/io/LineNumberReader.java
+ (lineNumber): Made it private.
+ (LineNumberReader): Use Constant instead of a direct value.
+ * java/io/OutputStreamWriter.java
+ (OutputStreamWriter): Renamed enc to encoding_scheme, merged
+ documentation from classpath.
+ (close): Merged documentation from classpath.
+ (flush): Merged documentation from classpath.
+ (write): Merged documentation from classpath.
+ * java/io/PrintStream.java: Reformatted.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/text/ComponentView.java
+ (getComponent): Must be final.
+ * javax/swing/tree/DefaultTreeCellRenderer.java:
+ Reformatted.
+ * javax/swing/undo/StateEditable.java:
+ Reformatted.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/activation/ActivationInstantiator.java:
+ Reformatted.
+ * java/rmi/activation/Activator.java:
+ Reformatted.
+ * java/rmi/registry/RegistryHandler.java:
+ Remerged from classpath.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/util/Date.java:
+ Fixed documentation starting tag to make javadoc happy.
+ * java/util/regex/Pattern.java
+ (Pattern): Implements Serializable.
+ * java/util/PatternSyntaxException.java
+ (serialVersionUID): New member variable.
+
+2003-03-24 Michael Koch <koqnueror@gmx.de>
+
+ * java/awt/ContainerOrderFocusTraversalPolicy.java
+ (getFirstComponent): Implemented.
+ (getLastComponent): Implemented.
+ (getDefaultComponent): Implemented.
+ (setImplicitDownCycleTraversal): Fixed implementation.
+ * java/awt/Robot.java
+ (Robot): Added documentation.
+ * java/awt/Toolkit.java
+ (getFontList): Deprecated.
+ (getFontMetrics): Deprecated.
+ (getPrintJob): Added documentation.
+ (getSystemSelection): Added documentation.
+ (getLockingKeyState): Added documentation.
+ (setLockingKeyState): Added documentation.
+ (createCustomCursor): Added documentation.
+ (getBestCursorSize): Added documentation.
+ (getMaximumCursorColors): Added documentation.
+ (isFrameStateSupported): Added documentation.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/io/RandomAccessFile.java:
+ More little merges with classpath. No code changes.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/net/natInetAddressNoNet.cc:
+ Include stddef.h.
+ * java/net/natPlainDatagramSocketImplNoNet.cc:
+ Fixed inlcude of java/net/DatagramPacket.h.
+ * java/net/natPlainSocketImplNoNet.cc:
+ Include some missing classes.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/dnd/DropTarget.java
+ (DropTargetAutoScroller): According to the online documentation, this
+ is protected, but in reality it is public.
+ * java/awt/dnd/DropTargetContext.java
+ (TransferableProxy): According to the online documentation, this
+ is protected, but in reality it is public.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/io/DataInputStream.java
+ (): Wrapped documentation line.
+ (): Fixed @return tag.
+ * java/io/DataOutputStream.java
+ (written): Moved to top of class.
+ (all methods): Merged documentation from classpath.
+ * java/io/File.java:
+ Merged copyright year with classpath.
+ * java/io/FileInputStream.java
+ (all methods): Merged documentation from classpath.
+ * java/io/LineNumberReader.java
+ (getLineNumber): Fixed @return tag.
+ * java/io/ObjectInputStream.java.
+ Reformatted.
+ * java/io/ObjectOutputStream.java:
+ Reformatted, fixed some @see tags.
+ * java/io/OutputStreamWriter.java:
+ Deleted empty line.
+ * java/io/Writer.java:
+ Reformatted.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/Frame.java
+ (DEFAULT_CURSOR): Fixed @deprecated tag.
+ (setCursor): Fixed @deprecated tag.
+
+2003-03-24 Michael Koch <konqueror@gmx.de>
+
+ * java/beans/beancontext/BeanContextEvent.java:
+ Reformated.
+
+2003-03-23 Eric Blake <ebb9@email.byu.edu>
+
+ * java/lang/natStringBuffer.cc (regionMatches): New function.
+ * java/lang/String.java (count): Now package-private.
+ * java/lang/StringBuffer.java: Merged with Classpath.
+
+2003-03-23 Michael Koch <konqueror@gmx.de>
+
+ * java/io/BufferedOutputStream.java:
+ Reformated.
+ * java/io/BufferedReader.java:
+ Reformated.
+ * java/io/ByteArrayOutputStream.java
+ (size): Fixed @see tag.
+ * java/io/CharArrayWriter.java
+ (size): Fixed @see tag.
+ * java/io/DataInput.java:
+ Reformated.
+ * java/io/DataOutput.java:
+ Reformated.
+ * java/io/DataOutputStream.java:
+ Merged copyright years with classpath.
+ * java/io/Externalizable.java:
+ Reformated.
+ * java/io/FileFilter.java:
+ Reformated.
+ * java/io/FileInputStream.java:
+ Merged copyright years with classpath.
+ * java/io/FileOutputStream.java:
+ Merged copyright years with classpath.
+ * java/io/FilePermission.java
+ (FilePermission): Replaced @XXX with FIXME:.
+ * java/io/FileWriter.java:
+ Reformated.
+ * java/io/FilenameFilter.java:
+ Reformated.
+ * java/io/FilterInputStream.java:
+ Reformated.
+ * java/io/FilterOutputStream.java:
+ Reformated.
+ * java/io/FilterReader.java:
+ Reformated.
+ * java/io/FilterWriter.java:
+ Reformated.
+ * java/io/LineNumberInputStream.java
+ (LineNumberInputStream): Replaced @code with HTML tags to make javadoc
+ happy.
+ (getLineNumber): Fixed @return tag.
+ * java/io/ObjectInput.java:
+ Reformated.
+ * java/io/ObjectOutput.java:
+ Reformated.
+ * java/io/ObjectStreamClass.java:
+ Reformated.
+ * java/io/PrintStream.java:
+ Merged copyright years with classpath.
+ * java/io/PushbackReader.java
+ (PushbackReader): Replaced @code with @param.
+ * java/io/SerializablePermission.java:
+ Reformated.
+ * java/io/StreamTokenizer.java
+ (resetSyntax): Fixed @see tag.
+
+2003-03-22 Richard Henderson <rth@redhat.com>
+
+ * sysdep/ia64/locks.h: Include ia64intrin.h.
+ (compare_and_swap): Use __sync_bool_compare_and_swap.
+ (compare_and_swap_release): Expose ar.ccv assignment.
+
+2003-03-22 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * include/posix.h: Add suffix for darwin dynamic libraries.
+
+2003-03-21 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/Action.java
+ (ACCELERATOR_KEY): New constant.
+ (ACTION_COMMAND_KEY): Likewise.
+ (MNEMONIC_KEY): Likewise.
+ * javax/swing/UnsupportedLookAndFeelException.java
+ (UnsupportedLookAndFeelException): Must be public.
+ * javax/swing/WindowConstants.java
+ (EXIT_ON_CLOSE): New constant.
+ * javax/swing/text/BadLocationException.java
+ (offset): New member variable.
+ (BadLocationException): New implementation, documentation added.
+ (offsetRequested): New method.
+ * javax/swing/text/Caret.java:
+ Reformated.
+ * javax/swing/text/Document.java:
+ Reformated.
+
+2003-03-21 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/activation/Activatable.java
+ (serialVersionUID): New member variable.
+ * java/rmi/activation/ActivationGroup.java
+ (serialVersionUID): New member variable.
+ * java/rmi/activation/ActivationGroupDesc.java
+ (serialVersionUID): New member variable.
+ * java/rmi/registry/Registry.java:
+ Reformated.
+ (Registry): Deprecated.
+ * java/rmi/server/LoaderHandler.java
+ Reformated.
+ (LoaderHandler): Deprecated.
+ * java/rmi/server/LogStream.java
+ Reformated.
+ (LogStream): Deprecated.
+ * java/rmi/server/Operation.java
+ (Operation): Deprecated.
+ * java/rmi/server/RMIFailureHandler.java:
+ Reformated.
+ * java/rmi/server/RMISocketFactory.java:
+ Reformated.
+ * java/rmi/server/RemoteCall.java
+ (RemoteCall): Deprecated.
+ * java/rmi/server/RemoteStub.java:
+ Reformated.
+ * java/rmi/server/Skeleton.java
+ Reformated.
+ (Skeleton): Deprecated.
+
+2003-03-21 Michael Koch <konqueror@gmx.de>
+
+ * java/io/LineNumberReader.java
+ (LineNumberReader): Merged documentation with classpath.
+ (getLineNumber): Likewise.
+ (setLineNumber): Likewise.
+ (mark): Likewise.
+ (reset): Likewise.
+ (read): Likewise.
+ (readLine): Likewise.
+ (skip): Likewise.
+
+2003-03-21 Michael Koch <konqueror@gmx.de>
+
+ * java/rmi/RMISecurityManager.java
+ (checkAccept): Removed.
+ (checkAccess): Likewise.
+ (checkAccess): Likewise.
+ (checkAwtEventQueueAccess): Likewise.
+ (checkConnect): Likewise.
+ (checkCreateClassLoader): Likewise.
+ (checkDelete): Likewise.
+ (checkExec): Likewise.
+ (checkExit): Likewise.
+ (checkLink): Likewise.
+ (checkListen): Likewise.
+ (checkMemberAccess): Likewise.
+ (checkMulticast): Likewise.
+ (checkPackageAccess): Likewise.
+ (checkPackageDefinition): Likewise.
+ (checkPermission): Likewise.
+ (checkPrintJobAccess): Likewise.
+ (checkPropertiesAccess): Likewise.
+ (checkPropertyAccess): Likewise.
+ (checkRead): Likewise.
+ (checkSecurityAccess): Likewise.
+ (checkSetFactory): Likewise.
+ (checkSystemClipboardAccess): Likewise.
+ (checkTopLevelWindow): Likewise.
+ (checkWrite): Likewise.
+
+2003-03-20 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/nio/FileChannelImpl.java
+ (address): Removed.
+ (map_address): New member variable.
+ (length): Make it package private.
+ (fd): Make it package private.
+ (buf): Make it package private.
+ (file_obj): Make it package private.
+ (FileChannelImpl): New constructor.
+ (nio_mmap_file): Use RawData instead of long.
+ (nio_munmap_file): Use RawData instead of long.
+ (nio_msync): Use RawData instead of long.
+ (implCloseChannel): New implementation using map_address.
+ (read): Reformated.
+ (map): Implemented.
+ (create_direct_mapped_buffer): Implemented, use RawData, throws
+ IOException.
+ (force): Use map_address instead of address.
+ * gnu/java/nio/MappedByteFileBuffer.java
+ (address): Removed.
+ (map_address): New member variable.
+ (MappedByteFileBuffer): Use map_address instead of address, reformated.
+ (several methods): Use map_address instead of address, replaced long
+ with RawData where appropriate.
+ * gnu/java/nio/natFileChannelImpl.cc
+ (nio_mmap_file): Replaced long with RawData.
+ (nio_munmap_file): Replaced long with RawData.
+ (nio_msync): Replaced long with RawData.
+ * gnu/java/nio/natMappedByteFileBuffer.cc
+ (several methods): Replaced long with RawData where appropriate.
+
+2003-03-20 Michael Koch <konqueror@gmx.de>
+
+ * java/net/InetAddress.java,
+ java/net/JarURLConnection.java,
+ java/net/PlainDatagramSocketImpl.java,
+ java/net/PlainSocketImpl.java,
+ java/net/URLConnection.java:
+ Merged copyright statements with classpath for easier merging.
+
+2003-03-20 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileInputStream.java
+ (getChannel): New implementation.
+ * java/io/FileOutputStream.java
+ (ch): New member variable.
+ (getChannel): Implemented.
+ * java/io/RandomAccessFile.java
+ (RandomAccessFile): Throws FileNotFoundException instead of
+ IOException.
+ (getChannel): New method.
+ (ch): New member variable.
+
+2003-03-20 Michael Koch <konqueror@gmx.de>
+
+ * java/io/DataOutputStream.java,
+ java/io/File.java,
+ java/io/FileInputStream.java,
+ java/io/FileOutputStream.java,
+ java/io/InputStreamReader.java,
+ java/io/LineNumberReader.java,
+ java/io/OutputStreamWriter.java,
+ java/io/PrintStream.java,
+ java/io/RandomAccessFile.java:
+ Merged copyright statements with classpath for easier merging.
+
+2003-03-19 Michael Koch <konqueror@gmx.de>
+
+ * java/lang/Process.java:
+ Merged from classpath.
+
+2003-03-19 Michael Koch <konqueror@gmx.de>
+
+ * java/io/FileOutputStream.java
+ (FileOutputStream): New constructor, merged from classpath.
+ * java/io/FileWriter.java
+ (FileWriter): New constructor, merged from classpath.
+
+2003-03-18 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/ScrollPane.java
+ (ScrollPane): Rewrote for new ScrollPaneAdjustable.
+ (getViewportSize): Likewise.
+ (addNotify): Likewise.
+ (removeNotify): Likewise.
+ * java/awt/ScrollPaneAdjustable.java
+ (ScrollPaneAdjustable): No longer extends Scrollbar.
+ * java/beans/beancontext/BeanContextServices.java:
+ Reformated.
+ (getService): Added throws TooManyListenersException;
+ * java/beans/beancontext/BeanContextServicesSupport.java:
+ Reformated.
+
+2003-03-18 Michael Koch <konqueror@gmx.de>
+
+ * java/io/BufferedOutputStream.java,
+ java/io/DataInput.java,
+ java/io/DataInputStream.java,
+ java/io/DataOutput.java,
+ java/io/Externalizable.java:
+ More merges from classpath.
+
+2003-03-18 Michael Koch <konqueror@gmx.de>
+
+ * configure.in: Fixed links to platform dependant java.net files.
+ * configure: Regenerated.
+ * java/net/natInetAddress.cc,
+ java/net/natNetworkInterface.cc,
+ java/net/natPlainDatagramSocketImpl.cc,
+ java/net/natPlainSocketImpl.cc:
+ Removed.
+
+2003-03-18 Michael Koch <konqueror@gmx.de>
+
+ * configure.in: Create links to architecture dependent files,
+ introduced PLATFORMNET variable (set to NoNet for newlib usage).
+ * configure: Regenerated.
+ * java/net/natInetAddressNoNet.cc,
+ java/net/natInetAddressPosix.cc,
+ java/net/natInetAddressWin32.cc,
+ java/net/natNetworkInterfaceNoNet.cc,
+ java/net/natNetworkInterfacePosix.cc,
+ java/net/natNetworkInterfaceWin32.cc,
+ java/net/natPlainDatagramSocketImplNoNet.cc,
+ java/net/natPlainDatagramSocketImplPosix.cc,
+ java/net/natPlainDatagramSocketImplWin32.cc,
+ java/net/natPlainSocketImplNoNet.cc,
+ java/net/natPlainSocketImplPosix.cc,
+ java/net/natPlainSocketImplWin32.cc: New files.
+
+2003-03-18 Michael Koch <konqueror@gmx.de>
+
+ * java/io/BufferedReader.java,
+ java/io/BufferedWriter.java,
+ java/io/ByteArrayOutputStream.java,
+ java/io/FileFilter.java,
+ java/io/FilePermission.java,
+ java/io/FileReader.java,
+ java/io/FileWriter.java,
+ java/io/FilenameFilter.java,
+ java/io/FilterInputStream.java,
+ java/io/FilterOutputStream.java,
+ java/io/FilterReader.java,
+ java/io/FilterWriter.java,
+ java/io/ObjectInput.java,
+ java/io/ObjectInputValidation.java,
+ java/io/ObjectOutput.java,
+ java/io/ObjectStreamField.java,
+ java/io/PipedInputStream.java,
+ java/io/PipedReader.java,
+ java/io/PrintWriter.java,
+ java/io/PushbackReader.java,
+ java/io/Reader.java,
+ java/io/SerializablePermission.java,
+ java/io/StringReader.java,
+ java/io/Writer.java:
+ Merged from classpath.
+
+2003-03-17 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/ScrollPaneAdjustable.java:
+ Compile fixes.
+
+2003-03-17 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramSocket.java
+ (connect): Fixed comment.
+ * java/nio/ByteBuffer.java
+ (hasArray): Fixed comment.
+
+2003-03-17 Michael Koch <konqueror@gmx.de>
+
+ * java/beans/Beans.java:
+ Explicitely import classes not packages.
+ * java/beans/FeatureDescriptor.java
+ (preferred): New member variable.
+ (isPreferred): New method.
+ (setPreferred): New method.
+ * java/beans/PropertyEditorManager.java:
+ Explicitely import used classes.
+ * java/beans/beancontext/BeanContextChild.java:
+ Added line wrapping.
+ * java/beans/beancontext/BeanContextChildSupport.java:
+ Reindented.
+ * java/beans/beancontext/BeanContextEvent.java:
+ Reindented.
+
+2003-03-17 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/Dialog.java
+ (Dialog): New constructor, changed implementations, added
+ documentation.
+ * java/awt/ScrollPaneAdjustable.java
+ (ScrollPaneAdjustable): Extends Object, implements Adjustable and
+ Serializable.
+ (serialVersionUID): New member variable.
+ (sp): New member variable.
+ (orientation): New member variable.
+ (value): New member variable.
+ (minimum): New member variable.
+ (maximum): New member variable.
+ (visibleAmount): New member variable.
+ (unitIncrement): New member variable.
+ (blockIncrement): New member variable.
+ (AdjustmentListener): New member variable.
+ (ScrollPaneAdjustable): New implementation.
+ (addAdjustmentListener): New method.
+ (removeAdjustmentListener): New method.
+ (getAdjustmentListeners): New method.
+ (getBlockIncrement): New method.
+ (getMaximum): New method.
+ (getMinimum): New method.
+ (getOrientation): New method.
+ (getUnitIncrement): New method.
+ (getValue): New method.
+ (getVisibleAmount): New method.
+ (setBlockIncrement): New method.
+ (setMaximum): Implemented.
+ (setMinimum): Implemented.
+ (setUnitIncrement): New method.
+ (setValue): New method.
+ (setVisibleAmount): Implemented.
+ (paramString): New stubbed method.
+ * java/awt/Window.java
+ (show): Call setVisible().
+ (hide): Call setVisible().
+ (processEvent): Add cases for WINDOW_GAINED_FOCUS, WINDOW_LOST_FOCUS
+ and WINDOW_STATE_CHANGED.
+ (processWindowFocusEvent): New method.
+ (processWindowStateEvent): New method.
+ (postEvent): Deprecated.
+ (applyResourceBundle): Deprecated.
+ * java/awt/datatransfer/DataFlavor.java
+ (DataFlavor): Doesn't thow ClassNotFoundException.
+
+2003-03-17 Michael Koch
+
+ * javax/print/attribute/Attribute.java,
+ javax/print/attribute/AttributeSet.java,
+ javax/print/attribute/PrintRequestAttributeSet.java:
+ New files.
+ * Makefile.am
+ (javax_source_files): Added new files:
+ javax/print/attribute/Attribute.java
+ javax/print/attribute/AttributeSet.java
+ javax/print/attribute/PrintRequestAttributeSet.java
+ * Makefile.in: Regenerated.
+
+2003-03-17 Michael Koch
+
+ * javax/print/attribute/Attribute.java,
+ javax/print/attribute/AttributeSet.java,
+ javax/print/attribute/PrintRequestAttributeSet.java:
+ New files.
+ * Makefile.am
+ (awt_java_source_files): Added new files:
+ javax/print/attribute/Attribute.java
+ javax/print/attribute/AttributeSet.java
+ javax/print/attribute/PrintRequestAttributeSet.java
+ * Makefile.in: Regenerated.
+
+2003-03-16 Tom Tromey <tromey@redhat.com>
+
+ * resolve.cc (ncode): Use _Jv_platform_ffi_abi.
+ Include platform.h.
+ * java/lang/natRuntime.cc (insertSystemProperties): Use
+ _Jv_platform_path_separator.
+ (nativeGetLibname): Use _Jv_platform_file_separator.
+ (_load): Use _Jv_platform_onload_names.
+ (onload_names): New global.
+ * include/win32.h (_Jv_platform_file_separator): New define.
+ (_Jv_platform_path_separator): Likewise.
+ (_Jv_platform_onload_names): Likewise.
+ (_Jv_platform_ffi_abi): Likewise.
+ * include/posix.h (_Jv_platform_file_separator): New define.
+ (_Jv_platform_path_separator): Likewise.
+ (_Jv_platform_onload_names): Likewise.
+ (_Jv_platform_ffi_abi): Likewise.
+
+2003-03-14 Hans Boehm <Hans.Boehm@hp.com>
+
+ * java/lang/natObject.cc (JV_SYNC_HASH): replace signed % by &.
+
+2003-02-14 Jeroen Frijters <jeroen@sumatra.nl>
+
+ * java/io/ObjectInputStream.java (readObject): Cleaned up the class
+ hierarchy loop.
+ (readFields(Object,ObjectStreamField[],boolean)): Changed argument
+ list to Object,ObjectStreamClass, moved callReadMethod code up into
+ readObject and added Class argument to all setXxxField calls.
+ (callReadMethod): Changed Class argument to ObjectStreamClass to be
+ consistent with ObjectOutputStream and to facilitate caching the
+ Method in the future.
+ (setBooleanField): Added Class argument.
+ (setByteField): Likewise.
+ (setCharField): Likewise.
+ (setDoubleField): Likewise.
+ (setFloatField): Likewise.
+ (setIntField): Likewise.
+ (setLongField): Likewise.
+ (setShortField): Likewise.
+ (setObjectField): Likewise.
+ * java/io/ObjectOutputStream.java (writeObject): Cleaned up the
+ class hierarchy loop.
+ (defaultWriteObject): Call writeFields with new argument list.
+ (writeFields(Object,ObjectStreamField[],boolean): Changed argument
+ list to Object,ObjectStreamClass, moved callWriteMethod up into
+ writeObject and added Class argument to all getXxxField calls.
+ (callWriteMethod): Added ObjectStreamClass argument to be able to
+ get the proper class to call getMethod on (each class can have (or
+ not have) its own writeObject method).
+ (getBooleanField): Added Class argument.
+ (getByteField): Likewise.
+ (getCharField): Likewise.
+ (getDoubleField): Likewise.
+ (getFloatField): Likewise.
+ (getIntField): Likewise.
+ (getLongField): Likewise.
+ (getShortField): Likewise.
+ (getObjectField): Likewise.
+ * java/io/ObjectStreamClass.java (hasReadMethod): Added method to
+ facilitate caching the Method object in the future.
+
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Avoid trailing /. in toolexeclibdir.
+ * configure: Rebuilt.
+
+2003-03-11 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/nio/ByteBufferImpl.java
+ (putInt): Use limit() instead of limit.
+ * gnu/java/nio/CharBufferImpl.java
+ (slice): Fixed implementation.
+ (subSequence): Better bounds checking.
+ * gnu/java/nio/MappedByteFileBuffer.java:
+ Import all needed classes directly.
+ * java/nio/ByteBuffer.java
+ (hashCode): New dummy method.
+ * java/nio/CharBuffer.java
+ (array_offset): New member variable.
+ (hasArray): Fixed documentation.
+ (arrayOffset): Return array_offset.
+
+2003-03-10 2003-02-27 Mohan Embar <gnustuff@thisiscool.com>
+
+ * include/jvm.h: removed declaration of _Jv_ThisExecutable()
+ setter; made return value of getter const char* instead of char*
+ * prims.cc: removed all references to _Jv_ThisExecutable().
+ These are in the platform-specific sections now.
+ * posix.cc: define platform-specific _Jv_ThisExecutable().
+ Handle DISABLE_MAIN_ARGS and HAVE_PROC_SELF_EXE cases
+ * win32.cc: define platform-specific _Jv_ThisExecutable()
+ using GetModuleFilename()
+ * java/lang/natRuntime.cc: set gnu.gcj.progname property
+ to argv[0] instead of _Jv_ThisExecutable()
+
+2003-03-10 Ranjit Mathew <rmathew@hotmail.com>
+
+ * gnu/gcj/runtime/NameFinder.java (usingAddr2name): New flag
+ that is set if we are using addr2name.awk instead of addr2line.
+ (NameFinder): Set usingAddr2name if using addr2name.awk.
+ (getExternalLabel): New native method to convert a method
+ name to an external label.
+ (lookup): Convert name given by addr2line to an external label
+ before demangling.
+
+ * gnu/gcj/runtime/natNameFinder.cc (LABEL_PREFIX): New string
+ constant representing the prefix attached to method names to
+ convert them to an external label.
+ (gnu::gcj::runtime::NameFinder::getExternalLabel): Define
+ using LABEL_PREFIX.
+
+2003-03-10 Tom Tromey <tromey@redhat.com>
+
+ * Makefile.in: Rebuilt.
+ * Makefile.am (GCJ_WITH_FLAGS): Added -Wno-deprecated.
+ (JC1FLAGS): Removed -Wno-deprecated.
+
+2003-03-10 Michael Koch <konqueror@gmx.de>
+
+ * java/nio/ByteOrder.java
+ (nativeOrder): Working implementation, added documentation.
+ (toString): Added documentation.
+
+2003-03-10 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramSocket.java,
+ java/net/MulticastSocket.java,
+ java/net/Socket.java,
+ java/net/URL.java,
+ java/net/URLConnection.java:
+ Fixed some documentation tags to make javadoc and friends happy.
+
+2003-03-10 Michael Koch <koqnueror@gmx.de>
+
+ * java/beans/beancontext/BeanContextServicesSupport.java,
+ java/beans/beancontext/BeanContextSupport.java: New files.
+ * Makefile.am
+ (awt_source_files): Added new files.
+ * Makefile.in: Regenerated.
+
+2003-03-10 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/FocusTraversalPolicy.java
+ (FocusTraversalPolicy): Documentation added.
+ (getComponentAfter): Documentation added.
+ (getComponentBefore): Documentation added.
+ (getFirstComponent): Documentation added.
+ (getLastComponent): Documentation added.
+ (getDefaultComponent): Documentation added.
+ (getInitialComponent): Documentation added.
+ * java/awt/ScrollPaneAdjustable.java
+ (sp): New member variable.
+ (orientation): New member variable.
+ (value): New member variable.
+ (minimum): New member variable.
+ (maximum): New member variable.
+ (visibleAmount): New member variable.
+ (unitIncrement): New member variable.
+ (blockIncrement): New member variable.
+ (adjustmentListener): New member variable.
+ (ScrollPaneAdjustable): Rewrote.
+ (addAdjustmentListener): New method.
+ (removeAdjustmentListener): New method.
+ (getAdjustmentListeners): New method.
+ (getBlockIncrement): New method.
+ (getMaximum): New method.
+ (getMinimum): New method.
+ (getOrientation): New method.
+ (getUnitIncrement): New method.
+ (getValue): New method.
+ (getVisibleAmount): New method.
+ (setBlockIncrement): New method.
+ (setUnitIncrement): New method.
+ (setMaximum): Implemented.
+ (setMinimum): Implemented.
+ (setValue): New method.
+ (setVisibleAmount): Implemented.
+ (paramString): New method.
+ * java/awt/Window.java
+ (show): Use setVisible(true) instead of super.show().
+ (hide): Use sevVisible(false) instead of super.hide().
+ (processWindowEvent): Added cases for WINDOW_GAINED_FOCUS,
+ WINDOW_LOST_FOCUS and WINDOW_STATE_CHANGED.
+ (postEvent): Deprecated.
+ (applyResourceBundle): Deprecated.
+ (processWindowFocusEvent): New method.
+ (processWindowStateEvent): New method.
+ * java/awt/datatransfer/DataFlavor.java: Reindented.
+ * java/awt/font/TextHitInfo.java
+ (charIndex): New member variable.
+ (leadingEdge): New member variable.
+ (TextHitInfo): New constructor.
+ (getCharIndex): Implemented.
+ (isLeadingEdge): Implemented.
+ (getInsertionIndex): Implemented.
+ (hashCode): Access charIndex directly.
+ (equals): Reformated.
+ (leading): Implemented.
+ (trailing): Implemented.
+ (beforeOffset): Implemented.
+ (afterOffset): Implemented.
+ (getOtherHit): Implemented.
+ (getOffsetHit): Implemented.
+ (toString): Implemented.
+ * java/awt/image/BufferedImage.java
+ (BufferedImage): Implements WritableRenderedImage.
+ (observers): New member variable.
+ (addTileObserver): New method.
+ (removeTileObserver): New method.
+
+2003-03-09 Tom Tromey <tromey@redhat.com>
+
+ PR libgcj/9934:
+ * java/io/natFileDescriptorPosix.cc (available): Fixed arguments
+ to lseek. Return 0 if we can't compute the value.
+
+2003-03-03 Michael Koch <konqueror@gmx.de>
+
+ * java/net/NetworkInterface.java: Merged with classpath.
+
+2003-03-03 Tom Tromey <tromey@redhat.com>
+
+ * verify.cc (handle_jsr_insn): Don't fail if `jsr' appears at end
+ of bytecode.
+ (handle_ret_insn): Fail if returning to jsr that appears at end of
+ bytecode.
+
+2003-03-03 Michael Koch <konqueror@gmx.de>
+
+ * Makefile.am
+ (ordinary_java_source_files):
+ Added gnu/java/nio/MappedByteFileBuffer.java.
+ (nat_source_files):
+ Added gnu/java/nio/natMappedByteFileBuffer.cc.
+ * Makefile.in: Regenerated.
+
+2003-03-03 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramSocket.java
+ (connect): Merged comment from classpath.
+ (receive): Merged documentation from classpath.
+ * java/net/Socket.java
+ (setSoTimeout): Clarified documentation.
+ * java/net/URL.java
+ (getPath): Merged from classpath.
+ (getUserInfo): Merged from classpath.
+ (getQuery): Merged from classpath.
+ * java/net/URLStreamHandler.java
+ (toExternalForm): Merged from classpath.
+
+2003-03-02 Mark Wielaard <mark@klomp.org>
+
+ * java/util/Properties.java (load): Only skip line if the first
+ character is a comment, whitespaces don't count.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/net/NetPermission.java:
+ Merged copyright with classpath.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/lang/Package.java:
+ Remerged from classpath.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/net/HttpURLConnection.java
+ (HTTP_SERVER_ERROR): Deprecated.
+ * java/net/MulticastSocket.java
+ (send): Replaced checkMulticast with appropriate checkPermission call,
+ deprecated.
+ * java/net/URLDecoder.java
+ (decode): Deprecated.
+ * java/net/URLEncoder.java
+ (encode): Deprecated.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * javax/swing/text/Caret.java
+ (getMagicCaretPosition): Fixed typo in method name.
+ * javax/swing/text/DefaultCaret.java
+ (getMagicCaretPosition): Fixed typo in method name.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/List.java
+ (setMultipleSelections): Deprecated.
+ (delItem): Deprecated.
+ * java/awt/MenuComponent.java
+ (getPeer): Deprecated.
+ * java/awt/ScrollPane.java
+ (addNotify): getPeer() is deprecated. Use isDisplayable() instead.
+ * java/awt/dnd/MouseDragGestureRecognizer.java
+ (mouseClicked): Added comment.
+ (mousePressed): Added comment.
+ (mouseReleased): Added comment.
+ (mouseEntered): Added comment.
+ (mouseExited): Added comment.
+ (mouseDragged): Added comment.
+ (mouseMoved): Added comment.
+ * java/awt/event/KeyEvent.java
+ (KeyEvent): Deprecated.
+ (setModifiers): Deprecated.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * gnu/java/nio/FileChannelImpl.java
+ (fd): Type FileDescriptor instead of int.
+ (lengthInternal): Removed.
+ (FileChannelImpl): Fixed arguments, check type of file object.
+ (size): Made it native.
+ (implPosition): New native method.
+ (implTruncate): New native method.
+ (position): Implemented.
+ (truncate): Implemented.
+ (nio_mmap_file): Changed arguments.
+ (nio_munmap_file): Changed arguments.
+ (nio_msync): Changed arguments.
+ * gnu/java/nio/natFileChannelImpl.cc
+ (lengthInternal): Removed.
+ (size): New method.
+ (implPosition): New method.
+ (implTruncate): New method.
+ (nio_mmap_file): Changed arguments.
+ (nio_munmap_file): Changed arguments.
+ (nio_msync): Changed arguments.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/dnd/DropTargetContext.java:
+ Compile fix: Forgot to commit import.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/Component.java,
+ java/awt/ScrollPane.java:
+ Fixed typos.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/dnd/DnDEventMulticaster.java: New file.
+ * java/awt/dnd/DragSource.java
+ (flavorMap): New member variable.
+ (dragSourceListener): New member variable.
+ (dragSourceMotionListener): New member variable.
+ (getFlavorMap): Implemented.
+ (createDragGestureRecognizer): Implemented.
+ (addDragSourceListener): Implemented.
+ (removeDragSourceListener): Implemented.
+ (getDragSourceListeners): Implemented.
+ (addDragSourceMotionListener): Implemented.
+ (removeDragSourceMotionListener): Implemented.
+ (getDragSourceMotionListeners): Implemented.
+ (getListeners): Implemented.
+ * java/awt/dnd/DragSourceContext.java
+ (peer): New member variable.
+ (cursor): New member variable.
+ (transferable): New member variable.
+ (trigger): New member variable.
+ (dragSourceListener): New member variable.
+ (image): New member variable.
+ (offset): New member variable.
+ (DragSourceContext): Implemented.
+ (getDragSource): Implemented.
+ (getComponent): Implemented.
+ (getTrigger): Implemented.
+ (getSourceActions): Implemented.
+ (setCursor): Implemented.
+ (getCursor): Implemented.
+ (addDragSourceListener): Implemented.
+ (removeDragSourceListener): Implemented.
+ (getTransferable): Implemented.
+ * java/awt/dnd/DropTarget.java
+ (DropTargetAutoScroller.component): New member variable.
+ (DropTargetAutoScroller.point): New member variable.
+ (DropTargetAutoScroller.DropTargetAutoScroller): Implemented.
+ (DropTargetAutoScroller.updateLocation): Implemented.
+ (active): Renamed from isActive, defaults to true now.
+ (component): New member variable.
+ (flavorMap): New member variable.
+ (actions): New member variable.
+ (dropTargetContext): New member variable.
+ (dropTargetListener): New member variable.
+ (DropTarget): Implemented.
+ (getComponent): Implemented.
+ (setComponent): Implemented.
+ (setDefaultActions): Implemented.
+ (getDefaultActions): Implemented.
+ (setActive): Use active instead of isActive.
+ (isActive): Use active instead of isActive.
+ (addDropTargetListener): Implemented.
+ (removeDropTargetListener): Implemented.
+ (getFlavorMap): Implemented.
+ (setFlavorMap): Implemented.
+ (getDropTargetContext): Implemented.
+ (createDropTargetContext): Implemented.
+ (createDropTargetAutoScroller): Implemented.
+ * java/awt/dnd/DropTargetContext.java
+ (TransferableProxy.getTransferDataFlavors): Implemented.
+ (TransferableProxy.isDataFlavorSupported): Implemented.
+ (TransferableProxy.getTransferData): Implemented.
+ (dropTarget): New member variable.
+ (dtcp): New member variable.
+ (DropTargetContext): New package private constructor.
+ (getDropTarget): Implemented.
+ (getComponent): Implemented.
+ (addNotify): Implemented.
+ (removeNotify): Implemented.
+ (getCurrentDataFlavorsAsList): Implemented.
+ (isDataFlavorSupported): Implemented.
+ * java/awt/dnd/MouseDragGestureRecognizer.java
+ (registerListeners): Implemented.
+ (unregisterListeners): Implemented.
+ * Makefile.am
+ (awt_java_source_files): Added java/awt/dnd/DnDEventMulticaster.java.
+ * Makefile.in: Regenerated.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/awt/Component.java
+ (eventTypeEnabled): New method.
+ (dispatchEventImpl): Moved checks for event to eventTypeEnabled.
+ * java/awt/Container.java
+ (changeSupport): New member variable.
+ (addPropertyChangeListener): New methods.
+ * java/awt/ContainerOrderFocusTraversalPolicy.java
+ (ContainerOrderFocusTraversalPolicy): Added comment.
+ (getComponentAfter): Throw exception, documentation added.
+ (getComponentBefore): Throw exception, documentation added.
+ (getFirstComponent): Throw exception, documentation added.
+ (getLastComponent): Throw exception, documentation added.
+ (getDefaultComponent): Throw exception, documentation added.
+ * java/awt/EventQueue.java: Reindented.
+ * java/awt/FocusTraversalPolicy.java:
+ (FocusTraversalPolicy): Added comment.
+ (getComponentAfter): Documentation added.
+ (getComponentBefore): Documentation added.
+ (getFirstComponent): Documentation added.
+ (getLastComponent): Documentation added.
+ (getDefaultComponent): Documentation added.
+ (getInitialComponent): Documentation added.
+ * java/awt/ScrollPane.java
+ (wheelScrollingEnabled): New member variable.
+ (ScrollPane): Initialize wheelScollingEnabled.
+ (eventTypeEnabled): New method.
+ (isWheelScrollingEnabled): New method.
+ (setWheelScrollingEnabled): New method.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * java/net/DatagramSocket.java
+ (closed): New member variable.
+ (close): Use closed variable.
+ (getInetAddress): No need to call isConnected().
+ (getPort): No need to call isConnected().
+ (disconnect): Reset remoteAddress and remotePort, fixed typo.
+ (isClosed): Reimplemented.
+
+2003-03-02 Michael Koch <konqueror@gmx.de>
+
+ * configure.in: Added check for memory mapping of files.
+ * configure: Regenerated.
+ * config.h.in: Regenerated.
+
2003-03-01 Jason Thorpe <thorpej@wasabisystems.com>
* posix-threads.cc: Include <unistd.h> if HAVE_UNISTD_H is defined.
diff --git a/libjava/Makefile.am b/libjava/Makefile.am
index d6054ccbb0b..38435cbd838 100644
--- a/libjava/Makefile.am
+++ b/libjava/Makefile.am
@@ -72,7 +72,7 @@ endif # CANADIAN
## The compiler with whatever flags we want for both -c and -C
## compiles.
-GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8
+GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c
GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
@@ -97,7 +97,7 @@ AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
## Detect bugs in the verifier implementation, and maybe other places.
-Wswitch-enum \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
- -DPREFIX="\"$(prefix)\""
+ -DPREFIX="\"$(prefix)\"" -DLIBDIR="\"$(libdir)\""
if USING_GCC
AM_CFLAGS = @LIBGCJ_CFLAGS@ $(WARNINGS)
else
@@ -105,7 +105,7 @@ AM_CFLAGS = @LIBGCJ_CFLAGS@
endif
JCFLAGS = -g
-JC1FLAGS = @LIBGCJ_JAVAFLAGS@ -Wno-deprecated $(GCJFLAGS)
+JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
LIBFFIINCS = @LIBFFIINCS@
@@ -767,6 +767,13 @@ gnu/java/beans/BeanInfoEmbryo.java \
gnu/java/beans/EmptyBeanInfo.java \
gnu/java/beans/ExplicitBeanInfo.java \
gnu/java/beans/IntrospectionIncubator.java \
+gnu/javax/rmi/CORBA/DelegateFactory.java \
+gnu/javax/rmi/CORBA/GetDelegateInstanceException.java \
+gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java \
+gnu/javax/rmi/CORBA/StubDelegateImpl.java \
+gnu/javax/rmi/CORBA/UtilDelegateImpl.java \
+gnu/javax/rmi/CORBA/ValueHandlerImpl.java \
+gnu/javax/rmi/PortableServer.java \
java/applet/Applet.java \
java/applet/AppletStub.java \
java/applet/AppletContext.java \
@@ -1037,6 +1044,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \
java/awt/dnd/peer/DropTargetContextPeer.java \
java/awt/dnd/peer/DropTargetPeer.java \
java/awt/dnd/DnDConstants.java \
+java/awt/dnd/DnDEventMulticaster.java \
java/awt/dnd/DragGestureEvent.java \
java/awt/dnd/DragGestureListener.java \
java/awt/dnd/DragGestureRecognizer.java \
@@ -1092,6 +1100,8 @@ java/beans/beancontext/BeanContextServiceRevokedEvent.java \
java/beans/beancontext/BeanContextServiceRevokedListener.java \
java/beans/beancontext/BeanContextServices.java \
java/beans/beancontext/BeanContextServicesListener.java \
+java/beans/beancontext/BeanContextServicesSupport.java \
+java/beans/beancontext/BeanContextSupport.java \
java/beans/BeanDescriptor.java \
java/beans/BeanInfo.java \
java/beans/Beans.java \
@@ -1120,6 +1130,19 @@ java/beans/VetoableChangeListenerProxy.java \
java/beans/VetoableChangeSupport.java \
java/beans/Visibility.java \
java/beans/AppletInitializer.java \
+javax/rmi/BAD_OPERATION.java \
+javax/rmi/ORB.java \
+javax/rmi/PortableRemoteObject.java \
+javax/rmi/CORBA/ClassDesc.java \
+javax/rmi/CORBA/ObjectImpl.java \
+javax/rmi/CORBA/PortableRemoteObjectDelegate.java \
+javax/rmi/CORBA/StubDelegate.java \
+javax/rmi/CORBA/Stub.java \
+javax/rmi/CORBA/SystemException.java \
+javax/rmi/CORBA/Tie.java \
+javax/rmi/CORBA/UtilDelegate.java \
+javax/rmi/CORBA/Util.java \
+javax/rmi/CORBA/ValueHandler.java \
javax/swing/border/AbstractBorder.java \
javax/swing/border/Border.java \
javax/swing/border/CompoundBorder.java \
@@ -1229,6 +1252,7 @@ javax/swing/JCheckBox.java \
javax/swing/JComponent.java \
javax/swing/JDialog.java \
javax/swing/JEditorPane.java \
+javax/swing/JFormattedTextField.java \
javax/swing/JFrame.java \
javax/swing/JLabel.java \
javax/swing/JLayeredPane.java \
@@ -1313,6 +1337,7 @@ javax/swing/text/ComponentView.java \
javax/swing/text/DefaultCaret.java \
javax/swing/text/DefaultEditorKit.java \
javax/swing/text/Document.java \
+javax/swing/text/DocumentFilter.java \
javax/swing/text/EditorKit.java \
javax/swing/text/Element.java \
javax/swing/text/GapContent.java \
@@ -1326,6 +1351,7 @@ javax/swing/text/Style.java \
javax/swing/text/View.java \
javax/swing/text/ViewFactory.java \
javax/swing/text/MutableAttributeSet.java \
+javax/swing/text/NavigationFilter.java \
javax/swing/text/StyledDocument.java \
javax/swing/text/StyledEditorKit.java \
javax/swing/text/TextAction.java \
@@ -1616,6 +1642,9 @@ javax/naming/ldap/UnsolicitedNotification.java \
javax/naming/ldap/UnsolicitedNotificationEvent.java \
javax/naming/ldap/UnsolicitedNotificationListener.java \
javax/naming/OperationNotSupportedException.java \
+javax/print/attribute/Attribute.java \
+javax/print/attribute/AttributeSet.java \
+javax/print/attribute/PrintRequestAttributeSet.java \
javax/sql/ConnectionEvent.java \
javax/sql/ConnectionEventListener.java \
javax/sql/ConnectionPoolDataSource.java \
@@ -2072,6 +2101,7 @@ gnu/java/nio/FileChannelImpl.java \
gnu/java/nio/FloatBufferImpl.java \
gnu/java/nio/IntBufferImpl.java \
gnu/java/nio/LongBufferImpl.java \
+gnu/java/nio/MappedByteFileBuffer.java \
gnu/java/nio/PipeImpl.java \
gnu/java/nio/SelectionKeyImpl.java \
gnu/java/nio/SelectorImpl.java \
@@ -2492,6 +2522,7 @@ gnu/java/nio/natFileChannelImpl.cc \
gnu/java/nio/natFloatBufferImpl.cc \
gnu/java/nio/natIntBufferImpl.cc \
gnu/java/nio/natLongBufferImpl.cc \
+gnu/java/nio/natMappedByteFileBuffer.cc \
gnu/java/nio/natSelectorImpl.cc \
gnu/java/nio/natShortBufferImpl.cc \
gnu/java/nio/natSocketChannelImpl.cc \
diff --git a/libjava/Makefile.in b/libjava/Makefile.in
index d07f68d31af..15279a5bfe2 100644
--- a/libjava/Makefile.in
+++ b/libjava/Makefile.in
@@ -174,7 +174,7 @@ bin_SCRIPTS = addr2name.awk
@CANADIAN_TRUE@GCJH = @CANADIAN_TRUE@gcjh
@CANADIAN_FALSE@GCJH = @CANADIAN_FALSE@$(MULTIBUILDTOP)../$(COMPPATH)/gcc/gcjh
-GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8
+GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated
GCJCOMPILE = $(LIBTOOL) --tag=GCJ --mode=compile $(GCJ_WITH_FLAGS) -fclasspath= -fbootclasspath=$(here) $(JC1FLAGS) -MD -MT $@ -MF $(@:.lo=.d) -c
GCJLINK = $(LIBTOOL) --tag=GCJ --mode=link $(GCJ) -L$(here) $(JC1FLAGS) $(LDFLAGS) -o $@
@@ -191,13 +191,13 @@ AM_CXXFLAGS = -fno-rtti -fnon-call-exceptions \
-fdollars-in-identifiers \
-Wswitch-enum \
@LIBGCJ_CXXFLAGS@ @X_CFLAGS@ $(WARNINGS) -D_GNU_SOURCE \
- -DPREFIX="\"$(prefix)\""
+ -DPREFIX="\"$(prefix)\"" -DLIBDIR="\"$(libdir)\""
@USING_GCC_TRUE@AM_CFLAGS = @USING_GCC_TRUE@@LIBGCJ_CFLAGS@ $(WARNINGS)
@USING_GCC_FALSE@AM_CFLAGS = @USING_GCC_FALSE@@LIBGCJ_CFLAGS@
JCFLAGS = -g
-JC1FLAGS = @LIBGCJ_JAVAFLAGS@ -Wno-deprecated $(GCJFLAGS)
+JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)
LIBFFIINCS = @LIBFFIINCS@
@@ -536,6 +536,13 @@ gnu/java/beans/BeanInfoEmbryo.java \
gnu/java/beans/EmptyBeanInfo.java \
gnu/java/beans/ExplicitBeanInfo.java \
gnu/java/beans/IntrospectionIncubator.java \
+gnu/javax/rmi/CORBA/DelegateFactory.java \
+gnu/javax/rmi/CORBA/GetDelegateInstanceException.java \
+gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.java \
+gnu/javax/rmi/CORBA/StubDelegateImpl.java \
+gnu/javax/rmi/CORBA/UtilDelegateImpl.java \
+gnu/javax/rmi/CORBA/ValueHandlerImpl.java \
+gnu/javax/rmi/PortableServer.java \
java/applet/Applet.java \
java/applet/AppletStub.java \
java/applet/AppletContext.java \
@@ -761,6 +768,7 @@ java/awt/peer/MenuItemPeer.java \
java/awt/peer/MenuPeer.java \
java/awt/peer/PanelPeer.java \
java/awt/peer/PopupMenuPeer.java \
+java/awt/peer/RobotPeer.java \
java/awt/peer/ScrollPanePeer.java \
java/awt/peer/ScrollbarPeer.java \
java/awt/peer/TextAreaPeer.java \
@@ -805,6 +813,7 @@ java/awt/dnd/peer/DragSourceContextPeer.java \
java/awt/dnd/peer/DropTargetContextPeer.java \
java/awt/dnd/peer/DropTargetPeer.java \
java/awt/dnd/DnDConstants.java \
+java/awt/dnd/DnDEventMulticaster.java \
java/awt/dnd/DragGestureEvent.java \
java/awt/dnd/DragGestureListener.java \
java/awt/dnd/DragGestureRecognizer.java \
@@ -860,6 +869,8 @@ java/beans/beancontext/BeanContextServiceRevokedEvent.java \
java/beans/beancontext/BeanContextServiceRevokedListener.java \
java/beans/beancontext/BeanContextServices.java \
java/beans/beancontext/BeanContextServicesListener.java \
+java/beans/beancontext/BeanContextServicesSupport.java \
+java/beans/beancontext/BeanContextSupport.java \
java/beans/BeanDescriptor.java \
java/beans/BeanInfo.java \
java/beans/Beans.java \
@@ -888,6 +899,19 @@ java/beans/VetoableChangeListenerProxy.java \
java/beans/VetoableChangeSupport.java \
java/beans/Visibility.java \
java/beans/AppletInitializer.java \
+javax/rmi/BAD_OPERATION.java \
+javax/rmi/ORB.java \
+javax/rmi/PortableRemoteObject.java \
+javax/rmi/CORBA/ClassDesc.java \
+javax/rmi/CORBA/ObjectImpl.java \
+javax/rmi/CORBA/PortableRemoteObjectDelegate.java \
+javax/rmi/CORBA/StubDelegate.java \
+javax/rmi/CORBA/Stub.java \
+javax/rmi/CORBA/SystemException.java \
+javax/rmi/CORBA/Tie.java \
+javax/rmi/CORBA/UtilDelegate.java \
+javax/rmi/CORBA/Util.java \
+javax/rmi/CORBA/ValueHandler.java \
javax/swing/border/AbstractBorder.java \
javax/swing/border/Border.java \
javax/swing/border/CompoundBorder.java \
@@ -997,6 +1021,7 @@ javax/swing/JCheckBox.java \
javax/swing/JComponent.java \
javax/swing/JDialog.java \
javax/swing/JEditorPane.java \
+javax/swing/JFormattedTextField.java \
javax/swing/JFrame.java \
javax/swing/JLabel.java \
javax/swing/JLayeredPane.java \
@@ -1081,6 +1106,7 @@ javax/swing/text/ComponentView.java \
javax/swing/text/DefaultCaret.java \
javax/swing/text/DefaultEditorKit.java \
javax/swing/text/Document.java \
+javax/swing/text/DocumentFilter.java \
javax/swing/text/EditorKit.java \
javax/swing/text/Element.java \
javax/swing/text/GapContent.java \
@@ -1094,6 +1120,7 @@ javax/swing/text/Style.java \
javax/swing/text/View.java \
javax/swing/text/ViewFactory.java \
javax/swing/text/MutableAttributeSet.java \
+javax/swing/text/NavigationFilter.java \
javax/swing/text/StyledDocument.java \
javax/swing/text/StyledEditorKit.java \
javax/swing/text/TextAction.java \
@@ -1386,6 +1413,9 @@ javax/naming/ldap/UnsolicitedNotification.java \
javax/naming/ldap/UnsolicitedNotificationEvent.java \
javax/naming/ldap/UnsolicitedNotificationListener.java \
javax/naming/OperationNotSupportedException.java \
+javax/print/attribute/Attribute.java \
+javax/print/attribute/AttributeSet.java \
+javax/print/attribute/PrintRequestAttributeSet.java \
javax/sql/ConnectionEvent.java \
javax/sql/ConnectionEventListener.java \
javax/sql/ConnectionPoolDataSource.java \
@@ -1833,6 +1863,7 @@ gnu/java/nio/FileChannelImpl.java \
gnu/java/nio/FloatBufferImpl.java \
gnu/java/nio/IntBufferImpl.java \
gnu/java/nio/LongBufferImpl.java \
+gnu/java/nio/MappedByteFileBuffer.java \
gnu/java/nio/PipeImpl.java \
gnu/java/nio/SelectionKeyImpl.java \
gnu/java/nio/SelectorImpl.java \
@@ -2252,6 +2283,7 @@ gnu/java/nio/natFileChannelImpl.cc \
gnu/java/nio/natFloatBufferImpl.cc \
gnu/java/nio/natIntBufferImpl.cc \
gnu/java/nio/natLongBufferImpl.cc \
+gnu/java/nio/natMappedByteFileBuffer.cc \
gnu/java/nio/natSelectorImpl.cc \
gnu/java/nio/natShortBufferImpl.cc \
gnu/java/nio/natSocketChannelImpl.cc \
@@ -2429,14 +2461,14 @@ gnu/gcj/runtime/natVMClassLoader.lo gnu/java/nio/natByteBufferImpl.lo \
gnu/java/nio/natCharBufferImpl.lo gnu/java/nio/natDoubleBufferImpl.lo \
gnu/java/nio/natFileChannelImpl.lo gnu/java/nio/natFloatBufferImpl.lo \
gnu/java/nio/natIntBufferImpl.lo gnu/java/nio/natLongBufferImpl.lo \
-gnu/java/nio/natSelectorImpl.lo gnu/java/nio/natShortBufferImpl.lo \
-gnu/java/nio/natSocketChannelImpl.lo java/io/natFile.lo \
-java/io/natFileDescriptor.lo java/io/natObjectInputStream.lo \
-java/io/natVMObjectStreamClass.lo java/lang/natCharacter.lo \
-java/lang/natClass.lo java/lang/natClassLoader.lo \
-java/lang/natConcreteProcess.lo java/lang/natDouble.lo \
-java/lang/natFloat.lo java/lang/natMath.lo java/lang/natObject.lo \
-java/lang/natRuntime.lo java/lang/natString.lo \
+gnu/java/nio/natMappedByteFileBuffer.lo gnu/java/nio/natSelectorImpl.lo \
+gnu/java/nio/natShortBufferImpl.lo gnu/java/nio/natSocketChannelImpl.lo \
+java/io/natFile.lo java/io/natFileDescriptor.lo \
+java/io/natObjectInputStream.lo java/io/natVMObjectStreamClass.lo \
+java/lang/natCharacter.lo java/lang/natClass.lo \
+java/lang/natClassLoader.lo java/lang/natConcreteProcess.lo \
+java/lang/natDouble.lo java/lang/natFloat.lo java/lang/natMath.lo \
+java/lang/natObject.lo java/lang/natRuntime.lo java/lang/natString.lo \
java/lang/natStringBuffer.lo java/lang/natSystem.lo \
java/lang/natThread.lo java/lang/natVMSecurityManager.lo \
java/lang/ref/natReference.lo java/lang/reflect/natArray.lo \
@@ -2895,7 +2927,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/nio/DoubleBufferImpl.P \
.deps/gnu/java/nio/FileChannelImpl.P \
.deps/gnu/java/nio/FloatBufferImpl.P .deps/gnu/java/nio/IntBufferImpl.P \
-.deps/gnu/java/nio/LongBufferImpl.P .deps/gnu/java/nio/PipeImpl.P \
+.deps/gnu/java/nio/LongBufferImpl.P \
+.deps/gnu/java/nio/MappedByteFileBuffer.P .deps/gnu/java/nio/PipeImpl.P \
.deps/gnu/java/nio/SelectionKeyImpl.P .deps/gnu/java/nio/SelectorImpl.P \
.deps/gnu/java/nio/SelectorProviderImpl.P \
.deps/gnu/java/nio/ServerSocketChannelImpl.P \
@@ -2917,6 +2950,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/nio/natFloatBufferImpl.P \
.deps/gnu/java/nio/natIntBufferImpl.P \
.deps/gnu/java/nio/natLongBufferImpl.P \
+.deps/gnu/java/nio/natMappedByteFileBuffer.P \
.deps/gnu/java/nio/natSelectorImpl.P \
.deps/gnu/java/nio/natShortBufferImpl.P \
.deps/gnu/java/nio/natSocketChannelImpl.P \
@@ -2970,7 +3004,14 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/gnu/java/util/prefs/MemoryBasedFactory.P \
.deps/gnu/java/util/prefs/MemoryBasedPreferences.P \
.deps/gnu/java/util/prefs/NodeReader.P \
-.deps/gnu/java/util/prefs/NodeWriter.P .deps/interpret.P \
+.deps/gnu/java/util/prefs/NodeWriter.P \
+.deps/gnu/javax/rmi/CORBA/DelegateFactory.P \
+.deps/gnu/javax/rmi/CORBA/GetDelegateInstanceException.P \
+.deps/gnu/javax/rmi/CORBA/PortableRemoteObjectDelegateImpl.P \
+.deps/gnu/javax/rmi/CORBA/StubDelegateImpl.P \
+.deps/gnu/javax/rmi/CORBA/UtilDelegateImpl.P \
+.deps/gnu/javax/rmi/CORBA/ValueHandlerImpl.P \
+.deps/gnu/javax/rmi/PortableServer.P .deps/interpret.P \
.deps/java/applet/Applet.P .deps/java/applet/AppletContext.P \
.deps/java/applet/AppletStub.P .deps/java/applet/AudioClip.P \
.deps/java/awt/AWTError.P .deps/java/awt/AWTEvent.P \
@@ -3042,6 +3083,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/awt/datatransfer/Transferable.P \
.deps/java/awt/datatransfer/UnsupportedFlavorException.P \
.deps/java/awt/dnd/Autoscroll.P .deps/java/awt/dnd/DnDConstants.P \
+.deps/java/awt/dnd/DnDEventMulticaster.P \
.deps/java/awt/dnd/DragGestureEvent.P \
.deps/java/awt/dnd/DragGestureListener.P \
.deps/java/awt/dnd/DragGestureRecognizer.P \
@@ -3177,7 +3219,7 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/awt/peer/MenuComponentPeer.P \
.deps/java/awt/peer/MenuItemPeer.P .deps/java/awt/peer/MenuPeer.P \
.deps/java/awt/peer/PanelPeer.P .deps/java/awt/peer/PopupMenuPeer.P \
-.deps/java/awt/peer/ScrollPanePeer.P \
+.deps/java/awt/peer/RobotPeer.P .deps/java/awt/peer/ScrollPanePeer.P \
.deps/java/awt/peer/ScrollbarPeer.P .deps/java/awt/peer/TextAreaPeer.P \
.deps/java/awt/peer/TextComponentPeer.P \
.deps/java/awt/peer/TextFieldPeer.P .deps/java/awt/peer/WindowPeer.P \
@@ -3226,6 +3268,8 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/java/beans/beancontext/BeanContextServiceRevokedListener.P \
.deps/java/beans/beancontext/BeanContextServices.P \
.deps/java/beans/beancontext/BeanContextServicesListener.P \
+.deps/java/beans/beancontext/BeanContextServicesSupport.P \
+.deps/java/beans/beancontext/BeanContextSupport.P \
.deps/java/io/BufferedInputStream.P \
.deps/java/io/BufferedOutputStream.P .deps/java/io/BufferedReader.P \
.deps/java/io/BufferedWriter.P .deps/java/io/ByteArrayInputStream.P \
@@ -3804,6 +3848,17 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/javax/naming/spi/ObjectFactoryBuilder.P \
.deps/javax/naming/spi/ResolveResult.P \
.deps/javax/naming/spi/Resolver.P .deps/javax/naming/spi/StateFactory.P \
+.deps/javax/print/attribute/Attribute.P \
+.deps/javax/print/attribute/AttributeSet.P \
+.deps/javax/print/attribute/PrintRequestAttributeSet.P \
+.deps/javax/rmi/BAD_OPERATION.P .deps/javax/rmi/CORBA/ClassDesc.P \
+.deps/javax/rmi/CORBA/ObjectImpl.P \
+.deps/javax/rmi/CORBA/PortableRemoteObjectDelegate.P \
+.deps/javax/rmi/CORBA/Stub.P .deps/javax/rmi/CORBA/StubDelegate.P \
+.deps/javax/rmi/CORBA/SystemException.P .deps/javax/rmi/CORBA/Tie.P \
+.deps/javax/rmi/CORBA/Util.P .deps/javax/rmi/CORBA/UtilDelegate.P \
+.deps/javax/rmi/CORBA/ValueHandler.P .deps/javax/rmi/ORB.P \
+.deps/javax/rmi/PortableRemoteObject.P \
.deps/javax/sql/ConnectionEvent.P \
.deps/javax/sql/ConnectionEventListener.P \
.deps/javax/sql/ConnectionPoolDataSource.P .deps/javax/sql/DataSource.P \
@@ -3842,13 +3897,14 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/javax/swing/JComboBox.P .deps/javax/swing/JComponent.P \
.deps/javax/swing/JDesktopPane.P .deps/javax/swing/JDialog.P \
.deps/javax/swing/JEditorPane.P .deps/javax/swing/JFileChooser.P \
-.deps/javax/swing/JFrame.P .deps/javax/swing/JInternalFrame.P \
-.deps/javax/swing/JLabel.P .deps/javax/swing/JLayeredPane.P \
-.deps/javax/swing/JList.P .deps/javax/swing/JMenu.P \
-.deps/javax/swing/JMenuBar.P .deps/javax/swing/JMenuItem.P \
-.deps/javax/swing/JOptionPane.P .deps/javax/swing/JPanel.P \
-.deps/javax/swing/JPasswordField.P .deps/javax/swing/JPopupMenu.P \
-.deps/javax/swing/JProgressBar.P .deps/javax/swing/JRadioButton.P \
+.deps/javax/swing/JFormattedTextField.P .deps/javax/swing/JFrame.P \
+.deps/javax/swing/JInternalFrame.P .deps/javax/swing/JLabel.P \
+.deps/javax/swing/JLayeredPane.P .deps/javax/swing/JList.P \
+.deps/javax/swing/JMenu.P .deps/javax/swing/JMenuBar.P \
+.deps/javax/swing/JMenuItem.P .deps/javax/swing/JOptionPane.P \
+.deps/javax/swing/JPanel.P .deps/javax/swing/JPasswordField.P \
+.deps/javax/swing/JPopupMenu.P .deps/javax/swing/JProgressBar.P \
+.deps/javax/swing/JRadioButton.P \
.deps/javax/swing/JRadioButtonMenuItem.P .deps/javax/swing/JRootPane.P \
.deps/javax/swing/JScrollBar.P .deps/javax/swing/JScrollPane.P \
.deps/javax/swing/JSeparator.P .deps/javax/swing/JSlider.P \
@@ -4004,10 +4060,13 @@ DEP_FILES = .deps/$(srcdir)/$(CONVERT_DIR)/gen-from-JIS.P \
.deps/javax/swing/text/ComponentView.P \
.deps/javax/swing/text/DefaultCaret.P \
.deps/javax/swing/text/DefaultEditorKit.P \
-.deps/javax/swing/text/Document.P .deps/javax/swing/text/EditorKit.P \
-.deps/javax/swing/text/Element.P .deps/javax/swing/text/GapContent.P \
+.deps/javax/swing/text/Document.P \
+.deps/javax/swing/text/DocumentFilter.P \
+.deps/javax/swing/text/EditorKit.P .deps/javax/swing/text/Element.P \
+.deps/javax/swing/text/GapContent.P \
.deps/javax/swing/text/JTextComponent.P .deps/javax/swing/text/Keymap.P \
.deps/javax/swing/text/MutableAttributeSet.P \
+.deps/javax/swing/text/NavigationFilter.P \
.deps/javax/swing/text/PlainDocument.P \
.deps/javax/swing/text/PlainEditorKit.P \
.deps/javax/swing/text/Position.P .deps/javax/swing/text/Segment.P \
diff --git a/libjava/configure b/libjava/configure
index 567b70fc09e..ea75d7a00d6 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -2976,11 +2976,12 @@ case "$TARGET_ECOS" in
no) case "$host" in
*mingw*)
PLATFORM=Win32
+ PLATFORMNET=Win32
PLATFORMOBJS=win32.lo
PLATFORMH=win32.h
echo $ac_n "checking whether 'ld' is at least 2.13""... $ac_c" 1>&6
-echo "configure:2984: checking whether 'ld' is at least 2.13" >&5
+echo "configure:2985: checking whether 'ld' is at least 2.13" >&5
LD_PROG=`$CC --print-prog-name=ld`
LD_VERSION=`$LD_PROG --version`
LD_VERSION_MAJOR=`echo "$LD_VERSION" | head -1 | cut -d '.' -f 1 | cut -d ' ' -f 4`
@@ -3005,6 +3006,7 @@ fi
;;
*)
PLATFORM=Posix
+ PLATFORMNET=Posix
PLATFORMOBJS=posix.lo
PLATFORMH=posix.h
;;
@@ -3012,6 +3014,7 @@ fi
;;
*)
PLATFORM=Ecos
+ PLATFORMNET=NoNet
cat >> confdefs.h <<\EOF
#define ECOS 1
EOF
@@ -3024,7 +3027,7 @@ esac
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3028: checking how to run the C preprocessor" >&5
+echo "configure:3031: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -3039,13 +3042,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 3043 "configure"
+#line 3046 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -3056,13 +3059,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 3060 "configure"
+#line 3063 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3066: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3069: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -3073,13 +3076,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 3077 "configure"
+#line 3080 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3086: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -3104,7 +3107,7 @@ fi
echo "$ac_t""$CPP" 1>&6
cat > conftest.$ac_ext <<EOF
-#line 3108 "configure"
+#line 3111 "configure"
#include "confdefs.h"
#include <stdint.h>
EOF
@@ -3119,7 +3122,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3123 "configure"
+#line 3126 "configure"
#include "confdefs.h"
#include <inttypes.h>
EOF
@@ -3134,7 +3137,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3138 "configure"
+#line 3141 "configure"
#include "confdefs.h"
#include <sys/types.h>
EOF
@@ -3149,7 +3152,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3153 "configure"
+#line 3156 "configure"
#include "confdefs.h"
#include <sys/config.h>
EOF
@@ -3166,7 +3169,7 @@ rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3170 "configure"
+#line 3173 "configure"
#include "confdefs.h"
#include <time.h>
EOF
@@ -3181,7 +3184,7 @@ fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3185 "configure"
+#line 3188 "configure"
#include "confdefs.h"
#include <time.h>
EOF
@@ -3206,6 +3209,12 @@ test -d java/lang || mkdir java/lang
+test -d java/net || mkdir java/net
+
+
+
+
+
case "${host}" in
*mingw*)
SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
@@ -3235,7 +3244,7 @@ ZLIBTESTSPEC=
# Uses ac_ vars as temps to allow command line to override cache and checks.
# --without-x overrides everything else, but does not touch the cache.
echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:3239: checking for X" >&5
+echo "configure:3248: checking for X" >&5
# Check whether --with-x or --without-x was given.
if test "${with_x+set}" = set; then
@@ -3297,12 +3306,12 @@ if test "$ac_x_includes" = NO; then
# First, try using that file with no special directory specified.
cat > conftest.$ac_ext <<EOF
-#line 3301 "configure"
+#line 3310 "configure"
#include "confdefs.h"
#include <$x_direct_test_include>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3306: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -3371,14 +3380,14 @@ if test "$ac_x_libraries" = NO; then
ac_save_LIBS="$LIBS"
LIBS="-l$x_direct_test_library $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3375 "configure"
+#line 3384 "configure"
#include "confdefs.h"
int main() {
${x_direct_test_function}()
; return 0; }
EOF
-if { (eval echo configure:3382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBS="$ac_save_LIBS"
# We can link X programs with no special library path.
@@ -3484,17 +3493,17 @@ else
case "`(uname -sr) 2>/dev/null`" in
"SunOS 5"*)
echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:3488: checking whether -R must be followed by a space" >&5
+echo "configure:3497: checking whether -R must be followed by a space" >&5
ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 3491 "configure"
+#line 3500 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3498: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_nospace=yes
else
@@ -3510,14 +3519,14 @@ rm -f conftest*
else
LIBS="$ac_xsave_LIBS -R $x_libraries"
cat > conftest.$ac_ext <<EOF
-#line 3514 "configure"
+#line 3523 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_R_space=yes
else
@@ -3549,7 +3558,7 @@ rm -f conftest*
# libraries were built with DECnet support. And karl@cs.umb.edu says
# the Alpha needs dnet_stub (dnet does not exist).
echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:3553: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:3562: checking for dnet_ntoa in -ldnet" >&5
ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3557,7 +3566,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldnet $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3561 "configure"
+#line 3570 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3568,7 +3577,7 @@ int main() {
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:3572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3590,7 +3599,7 @@ fi
if test $ac_cv_lib_dnet_dnet_ntoa = no; then
echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:3594: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:3603: checking for dnet_ntoa in -ldnet_stub" >&5
ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3598,7 +3607,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldnet_stub $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3602 "configure"
+#line 3611 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3609,7 +3618,7 @@ int main() {
dnet_ntoa()
; return 0; }
EOF
-if { (eval echo configure:3613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3638,12 +3647,12 @@ fi
# The nsl library prevents programs from opening the X display
# on Irix 5.2, according to dickey@clark.net.
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:3642: checking for gethostbyname" >&5
+echo "configure:3651: checking for gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3647 "configure"
+#line 3656 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
@@ -3666,7 +3675,7 @@ gethostbyname();
; return 0; }
EOF
-if { (eval echo configure:3670: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3679: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
@@ -3687,7 +3696,7 @@ fi
if test $ac_cv_func_gethostbyname = no; then
echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:3691: checking for gethostbyname in -lnsl" >&5
+echo "configure:3700: checking for gethostbyname in -lnsl" >&5
ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3695,7 +3704,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3699 "configure"
+#line 3708 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3706,7 +3715,7 @@ int main() {
gethostbyname()
; return 0; }
EOF
-if { (eval echo configure:3710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3736,12 +3745,12 @@ fi
# -lsocket must be given before -lnsl if both are needed.
# We assume that if connect needs -lnsl, so does gethostbyname.
echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:3740: checking for connect" >&5
+echo "configure:3749: checking for connect" >&5
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3745 "configure"
+#line 3754 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
@@ -3764,7 +3773,7 @@ connect();
; return 0; }
EOF
-if { (eval echo configure:3768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
@@ -3785,7 +3794,7 @@ fi
if test $ac_cv_func_connect = no; then
echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:3789: checking for connect in -lsocket" >&5
+echo "configure:3798: checking for connect in -lsocket" >&5
ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3793,7 +3802,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3797 "configure"
+#line 3806 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3804,7 +3813,7 @@ int main() {
connect()
; return 0; }
EOF
-if { (eval echo configure:3808: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3828,12 +3837,12 @@ fi
# gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:3832: checking for remove" >&5
+echo "configure:3841: checking for remove" >&5
if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3837 "configure"
+#line 3846 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char remove(); below. */
@@ -3856,7 +3865,7 @@ remove();
; return 0; }
EOF
-if { (eval echo configure:3860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_remove=yes"
else
@@ -3877,7 +3886,7 @@ fi
if test $ac_cv_func_remove = no; then
echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:3881: checking for remove in -lposix" >&5
+echo "configure:3890: checking for remove in -lposix" >&5
ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3885,7 +3894,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lposix $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3889 "configure"
+#line 3898 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3896,7 +3905,7 @@ int main() {
remove()
; return 0; }
EOF
-if { (eval echo configure:3900: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -3920,12 +3929,12 @@ fi
# BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:3924: checking for shmat" >&5
+echo "configure:3933: checking for shmat" >&5
if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3929 "configure"
+#line 3938 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char shmat(); below. */
@@ -3948,7 +3957,7 @@ shmat();
; return 0; }
EOF
-if { (eval echo configure:3952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_shmat=yes"
else
@@ -3969,7 +3978,7 @@ fi
if test $ac_cv_func_shmat = no; then
echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:3973: checking for shmat in -lipc" >&5
+echo "configure:3982: checking for shmat in -lipc" >&5
ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -3977,7 +3986,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lipc $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3981 "configure"
+#line 3990 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -3988,7 +3997,7 @@ int main() {
shmat()
; return 0; }
EOF
-if { (eval echo configure:3992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4021,7 +4030,7 @@ fi
# libraries we check for below, so use a different variable.
# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:4025: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:4034: checking for IceConnectionNumber in -lICE" >&5
ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4029,7 +4038,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lICE $X_EXTRA_LIBS $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4033 "configure"
+#line 4042 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4040,7 +4049,7 @@ int main() {
IceConnectionNumber()
; return 0; }
EOF
-if { (eval echo configure:4044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4138,7 +4147,7 @@ fi
libsubdir=.libs
echo $ac_n "checking for garbage collector to use""... $ac_c" 1>&6
-echo "configure:4142: checking for garbage collector to use" >&5
+echo "configure:4151: checking for garbage collector to use" >&5
# Check whether --enable-java-gc or --disable-java-gc was given.
if test "${enable_java_gc+set}" = set; then
enableval="$enable_java_gc"
@@ -4191,7 +4200,7 @@ esac
echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
-echo "configure:4195: checking for thread model used by GCC" >&5
+echo "configure:4204: checking for thread model used by GCC" >&5
THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
echo "$ac_t""$THREADS" 1>&6
@@ -4395,16 +4404,17 @@ EOF
GCJ="${target_alias}-gcj"
fi
NATIVE=no
+ PLATFORMNET=NoNet
else
for ac_func in strerror ioctl select fstat open fsync sleep opendir
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4403: checking for $ac_func" >&5
+echo "configure:4413: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4408 "configure"
+#line 4418 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4427,7 +4437,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4454,12 +4464,12 @@ done
for ac_func in gmtime_r localtime_r readdir_r getpwuid_r getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4458: checking for $ac_func" >&5
+echo "configure:4468: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4463 "configure"
+#line 4473 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4482,7 +4492,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4496: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4509,12 +4519,12 @@ done
for ac_func in access stat mkdir rename rmdir unlink realpath utime chmod
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4513: checking for $ac_func" >&5
+echo "configure:4523: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4518 "configure"
+#line 4528 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4537,7 +4547,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4564,12 +4574,12 @@ done
for ac_func in nl_langinfo setlocale
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4568: checking for $ac_func" >&5
+echo "configure:4578: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4573 "configure"
+#line 4583 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4592,7 +4602,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4606: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4619,12 +4629,12 @@ done
for ac_func in inet_aton inet_addr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4623: checking for $ac_func" >&5
+echo "configure:4633: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4628 "configure"
+#line 4638 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4647,7 +4657,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4674,12 +4684,12 @@ done
for ac_func in inet_pton uname inet_ntoa
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4678: checking for $ac_func" >&5
+echo "configure:4688: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4683 "configure"
+#line 4693 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4702,7 +4712,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4729,12 +4739,12 @@ done
for ac_func in fork execvp pipe sigaction ftruncate
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4733: checking for $ac_func" >&5
+echo "configure:4743: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4738 "configure"
+#line 4748 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4757,7 +4767,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4785,17 +4795,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4789: checking for $ac_hdr" >&5
+echo "configure:4799: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4794 "configure"
+#line 4804 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4809: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4822,12 +4832,12 @@ fi
done
echo $ac_n "checking for backtrace""... $ac_c" 1>&6
-echo "configure:4826: checking for backtrace" >&5
+echo "configure:4836: checking for backtrace" >&5
if eval "test \"`echo '$''{'ac_cv_func_backtrace'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4831 "configure"
+#line 4841 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char backtrace(); below. */
@@ -4850,7 +4860,7 @@ backtrace();
; return 0; }
EOF
-if { (eval echo configure:4854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_backtrace=yes"
else
@@ -4869,9 +4879,6 @@ if eval "test \"`echo '$ac_cv_func_'backtrace`\" = yes"; then
ia64-*-linux*)
# Has broken backtrace()
;;
- s390*-*-linux*)
- # Has broken backtrace()
- ;;
*)
cat >> confdefs.h <<\EOF
#define HAVE_BACKTRACE 1
@@ -4897,7 +4904,7 @@ fi
echo $ac_n "checking for dladdr in -ldl""... $ac_c" 1>&6
-echo "configure:4901: checking for dladdr in -ldl" >&5
+echo "configure:4908: checking for dladdr in -ldl" >&5
ac_lib_var=`echo dl'_'dladdr | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4905,7 +4912,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4909 "configure"
+#line 4916 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -4916,7 +4923,7 @@ int main() {
dladdr()
; return 0; }
EOF
-if { (eval echo configure:4920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4946,7 +4953,7 @@ do
ac_safe=`echo "$ac_file" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_file""... $ac_c" 1>&6
-echo "configure:4950: checking for $ac_file" >&5
+echo "configure:4957: checking for $ac_file" >&5
if eval "test \"`echo '$''{'ac_cv_file_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5004,7 +5011,7 @@ fi
echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:5008: checking for iconv" >&5
+echo "configure:5015: checking for iconv" >&5
if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5012,7 +5019,7 @@ else
am_cv_func_iconv="no, consider installing GNU libiconv"
am_cv_lib_iconv=no
cat > conftest.$ac_ext <<EOF
-#line 5016 "configure"
+#line 5023 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -5022,7 +5029,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:5026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_func_iconv=yes
else
@@ -5034,7 +5041,7 @@ rm -f conftest*
am_save_LIBS="$LIBS"
LIBS="$LIBS $am_cv_libiconv_ldpath -liconv"
cat > conftest.$ac_ext <<EOF
-#line 5038 "configure"
+#line 5045 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
@@ -5044,7 +5051,7 @@ iconv_t cd = iconv_open("","");
iconv_close(cd);
; return 0; }
EOF
-if { (eval echo configure:5048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5055: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_lib_iconv=yes
am_cv_func_iconv=yes
@@ -5065,13 +5072,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
EOF
echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:5069: checking for iconv declaration" >&5
+echo "configure:5076: checking for iconv declaration" >&5
if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5075 "configure"
+#line 5082 "configure"
#include "confdefs.h"
#include <stdlib.h>
@@ -5090,7 +5097,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:5094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5101: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
am_cv_proto_iconv_arg1=""
else
@@ -5119,19 +5126,19 @@ EOF
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:5123: checking for LC_MESSAGES" >&5
+echo "configure:5130: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5128 "configure"
+#line 5135 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:5135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
@@ -5152,12 +5159,12 @@ EOF
fi
fi
echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6
-echo "configure:5156: checking whether struct tm is in sys/time.h or time.h" >&5
+echo "configure:5163: checking whether struct tm is in sys/time.h or time.h" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5161 "configure"
+#line 5168 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <time.h>
@@ -5165,7 +5172,7 @@ int main() {
struct tm *tp; tp->tm_sec;
; return 0; }
EOF
-if { (eval echo configure:5169: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5176: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm=time.h
else
@@ -5186,12 +5193,12 @@ EOF
fi
echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6
-echo "configure:5190: checking for tm_zone in struct tm" >&5
+echo "configure:5197: checking for tm_zone in struct tm" >&5
if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5195 "configure"
+#line 5202 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_cv_struct_tm>
@@ -5199,7 +5206,7 @@ int main() {
struct tm tm; tm.tm_zone;
; return 0; }
EOF
-if { (eval echo configure:5203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5210: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_struct_tm_zone=yes
else
@@ -5219,12 +5226,12 @@ EOF
else
echo $ac_n "checking for tzname""... $ac_c" 1>&6
-echo "configure:5223: checking for tzname" >&5
+echo "configure:5230: checking for tzname" >&5
if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5228 "configure"
+#line 5235 "configure"
#include "confdefs.h"
#include <time.h>
#ifndef tzname /* For SGI. */
@@ -5234,7 +5241,7 @@ int main() {
atoi(*tzname);
; return 0; }
EOF
-if { (eval echo configure:5238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_var_tzname=yes
else
@@ -5259,12 +5266,12 @@ fi
for ac_func in gethostbyname_r
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5263: checking for $ac_func" >&5
+echo "configure:5270: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5268 "configure"
+#line 5275 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5287,7 +5294,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5298: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5314,7 +5321,7 @@ EOF
# We look for the one that returns `int'.
# Hopefully this check is robust enough.
cat > conftest.$ac_ext <<EOF
-#line 5318 "configure"
+#line 5325 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -5334,7 +5341,7 @@ rm -f conftest*
*" -D_REENTRANT "*) ;;
*)
echo $ac_n "checking whether gethostbyname_r declaration requires -D_REENTRANT""... $ac_c" 1>&6
-echo "configure:5338: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
+echo "configure:5345: checking whether gethostbyname_r declaration requires -D_REENTRANT" >&5
if eval "test \"`echo '$''{'libjava_cv_gethostbyname_r_needs_reentrant'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -5347,14 +5354,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 5351 "configure"
+#line 5358 "configure"
#include "confdefs.h"
#include <netdb.h>
int main() {
gethostbyname_r("", 0, 0);
; return 0; }
EOF
-if { (eval echo configure:5358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5365: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_gethostbyname_r_needs_reentrant=no
else
@@ -5364,14 +5371,14 @@ else
CPPFLAGS_SAVE="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -D_REENTRANT"
cat > conftest.$ac_ext <<EOF
-#line 5368 "configure"
+#line 5375 "configure"
#include "confdefs.h"
#include <netdb.h>
int main() {
gethostbyname_r("", 0, 0);
; return 0; }
EOF
-if { (eval echo configure:5375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5382: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_gethostbyname_r_needs_reentrant=yes
else
@@ -5406,12 +5413,12 @@ EOF
esac
echo $ac_n "checking for struct hostent_data""... $ac_c" 1>&6
-echo "configure:5410: checking for struct hostent_data" >&5
+echo "configure:5417: checking for struct hostent_data" >&5
if eval "test \"`echo '$''{'libjava_cv_struct_hostent_data'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5415 "configure"
+#line 5422 "configure"
#include "confdefs.h"
#if GETHOSTBYNAME_R_NEEDS_REENTRANT && !defined(_REENTRANT)
@@ -5422,7 +5429,7 @@ int main() {
struct hostent_data data;
; return 0; }
EOF
-if { (eval echo configure:5426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libjava_cv_struct_hostent_data=yes
else
@@ -5454,7 +5461,7 @@ done
# to exist where expected. (The root issue: AC_CHECK_FUNCS assumes C
# linkage check is enough, yet C++ code requires proper prototypes.)
cat > conftest.$ac_ext <<EOF
-#line 5458 "configure"
+#line 5465 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -5465,12 +5472,12 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
for ac_func in gethostbyaddr_r
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5469: checking for $ac_func" >&5
+echo "configure:5476: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5474 "configure"
+#line 5481 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5493,7 +5500,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5520,7 +5527,7 @@ EOF
# We look for the one that returns `int'.
# Hopefully this check is robust enough.
cat > conftest.$ac_ext <<EOF
-#line 5524 "configure"
+#line 5531 "configure"
#include "confdefs.h"
#include <netdb.h>
EOF
@@ -5547,12 +5554,12 @@ rm -f conftest*
for ac_func in gethostname
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5551: checking for $ac_func" >&5
+echo "configure:5558: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5556 "configure"
+#line 5563 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5575,7 +5582,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5579: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5599,7 +5606,7 @@ EOF
EOF
cat > conftest.$ac_ext <<EOF
-#line 5603 "configure"
+#line 5610 "configure"
#include "confdefs.h"
#include <unistd.h>
EOF
@@ -5630,12 +5637,12 @@ done
for ac_func in pthread_mutexattr_settype pthread_mutexattr_setkind_np
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5634: checking for $ac_func" >&5
+echo "configure:5641: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5639 "configure"
+#line 5646 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5658,7 +5665,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5688,12 +5695,12 @@ done
for ac_func in sched_yield
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5692: checking for $ac_func" >&5
+echo "configure:5699: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5697 "configure"
+#line 5704 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5716,7 +5723,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5738,7 +5745,7 @@ EOF
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sched_yield in -lrt""... $ac_c" 1>&6
-echo "configure:5742: checking for sched_yield in -lrt" >&5
+echo "configure:5749: checking for sched_yield in -lrt" >&5
ac_lib_var=`echo rt'_'sched_yield | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5746,7 +5753,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lrt $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5750 "configure"
+#line 5757 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5757,7 +5764,7 @@ int main() {
sched_yield()
; return 0; }
EOF
-if { (eval echo configure:5761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5783,7 +5790,7 @@ else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sched_yield in -lposix4""... $ac_c" 1>&6
-echo "configure:5787: checking for sched_yield in -lposix4" >&5
+echo "configure:5794: checking for sched_yield in -lposix4" >&5
ac_lib_var=`echo posix4'_'sched_yield | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5791,7 +5798,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lposix4 $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5795 "configure"
+#line 5802 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5802,7 +5809,7 @@ int main() {
sched_yield()
; return 0; }
EOF
-if { (eval echo configure:5806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5838,7 +5845,7 @@ done
# We can save a little space at runtime if the mutex has m_count
# or __m_count. This is a nice hack for Linux.
cat > conftest.$ac_ext <<EOF
-#line 5842 "configure"
+#line 5849 "configure"
#include "confdefs.h"
#include <pthread.h>
int main() {
@@ -5847,7 +5854,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:5851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define PTHREAD_MUTEX_HAVE_M_COUNT 1
@@ -5859,7 +5866,7 @@ else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 5863 "configure"
+#line 5870 "configure"
#include "confdefs.h"
#include <pthread.h>
int main() {
@@ -5868,7 +5875,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:5872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define PTHREAD_MUTEX_HAVE___M_COUNT 1
@@ -5888,12 +5895,12 @@ rm -f conftest*
for ac_func in gettimeofday time ftime
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5892: checking for $ac_func" >&5
+echo "configure:5899: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5897 "configure"
+#line 5904 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5916,7 +5923,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5947,12 +5954,12 @@ done
for ac_func in memmove
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5951: checking for $ac_func" >&5
+echo "configure:5958: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5956 "configure"
+#line 5963 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5975,7 +5982,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6005,12 +6012,12 @@ done
for ac_func in memcpy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6009: checking for $ac_func" >&5
+echo "configure:6016: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6014 "configure"
+#line 6021 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6033,7 +6040,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6062,7 +6069,7 @@ done
fi
echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
-echo "configure:6066: checking for dlopen in -ldl" >&5
+echo "configure:6073: checking for dlopen in -ldl" >&5
ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6070,7 +6077,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6074 "configure"
+#line 6081 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6081,7 +6088,7 @@ int main() {
dlopen()
; return 0; }
EOF
-if { (eval echo configure:6085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6126,7 +6133,7 @@ fi
#--------------------------------------------------------------------
echo $ac_n "checking for socket libraries""... $ac_c" 1>&6
-echo "configure:6130: checking for socket libraries" >&5
+echo "configure:6137: checking for socket libraries" >&5
if eval "test \"`echo '$''{'gcj_cv_lib_sockets'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6134,12 +6141,12 @@ else
gcj_checkBoth=0
unset ac_cv_func_connect
echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:6138: checking for connect" >&5
+echo "configure:6145: checking for connect" >&5
if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6143 "configure"
+#line 6150 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char connect(); below. */
@@ -6162,7 +6169,7 @@ connect();
; return 0; }
EOF
-if { (eval echo configure:6166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6173: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_connect=yes"
else
@@ -6185,7 +6192,7 @@ fi
if test "$gcj_checkSocket" = 1; then
unset ac_cv_func_connect
echo $ac_n "checking for main in -lsocket""... $ac_c" 1>&6
-echo "configure:6189: checking for main in -lsocket" >&5
+echo "configure:6196: checking for main in -lsocket" >&5
ac_lib_var=`echo socket'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6193,14 +6200,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lsocket $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6197 "configure"
+#line 6204 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6204: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6211: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6227,12 +6234,12 @@ fi
LIBS="$LIBS -lsocket -lnsl"
unset ac_cv_func_accept
echo $ac_n "checking for accept""... $ac_c" 1>&6
-echo "configure:6231: checking for accept" >&5
+echo "configure:6238: checking for accept" >&5
if eval "test \"`echo '$''{'ac_cv_func_accept'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6236 "configure"
+#line 6243 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char accept(); below. */
@@ -6255,7 +6262,7 @@ accept();
; return 0; }
EOF
-if { (eval echo configure:6259: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_accept=yes"
else
@@ -6282,12 +6289,12 @@ fi
gcj_oldLibs=$LIBS
LIBS="$LIBS $gcj_cv_lib_sockets"
echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:6286: checking for gethostbyname" >&5
+echo "configure:6293: checking for gethostbyname" >&5
if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6291 "configure"
+#line 6298 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gethostbyname(); below. */
@@ -6310,7 +6317,7 @@ gethostbyname();
; return 0; }
EOF
-if { (eval echo configure:6314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gethostbyname=yes"
else
@@ -6328,7 +6335,7 @@ if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
-echo "configure:6332: checking for main in -lnsl" >&5
+echo "configure:6339: checking for main in -lnsl" >&5
ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6336,14 +6343,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lnsl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6340 "configure"
+#line 6347 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6354: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6375,7 +6382,7 @@ echo "$ac_t""$gcj_cv_lib_sockets" 1>&6
if test "$with_system_zlib" = yes; then
echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
-echo "configure:6379: checking for deflate in -lz" >&5
+echo "configure:6386: checking for deflate in -lz" >&5
ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6383,7 +6390,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lz $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6387 "configure"
+#line 6394 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6394,7 +6401,7 @@ int main() {
deflate()
; return 0; }
EOF
-if { (eval echo configure:6398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6469,7 +6476,7 @@ fi
# Extract the first word of "gtk-config", so it can be a program name with args.
set dummy gtk-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6473: checking for $ac_word" >&5
+echo "configure:6480: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6504,7 +6511,7 @@ fi
min_gtk_version=1.2.4
echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6
-echo "configure:6508: checking for GTK - version >= $min_gtk_version" >&5
+echo "configure:6515: checking for GTK - version >= $min_gtk_version" >&5
no_gtk=""
if test "$GTK_CONFIG" = "no" ; then
no_gtk=yes
@@ -6527,7 +6534,7 @@ echo "configure:6508: checking for GTK - version >= $min_gtk_version" >&5
echo $ac_n "cross compiling; assumed OK... $ac_c"
else
cat > conftest.$ac_ext <<EOF
-#line 6531 "configure"
+#line 6538 "configure"
#include "confdefs.h"
#include <gtk/gtk.h>
@@ -6605,7 +6612,7 @@ main ()
}
EOF
-if { (eval echo configure:6609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -6639,7 +6646,7 @@ fi
CFLAGS="$CFLAGS $GTK_CFLAGS"
LIBS="$LIBS $GTK_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6643 "configure"
+#line 6650 "configure"
#include "confdefs.h"
#include <gtk/gtk.h>
@@ -6649,7 +6656,7 @@ int main() {
return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version));
; return 0; }
EOF
-if { (eval echo configure:6653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GTK or finding the wrong"
@@ -6740,7 +6747,7 @@ fi
# Extract the first word of "glib-config", so it can be a program name with args.
set dummy glib-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6744: checking for $ac_word" >&5
+echo "configure:6751: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -6775,7 +6782,7 @@ fi
min_glib_version=1.2.4
echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
-echo "configure:6779: checking for GLIB - version >= $min_glib_version" >&5
+echo "configure:6786: checking for GLIB - version >= $min_glib_version" >&5
no_glib=""
if test "$GLIB_CONFIG" = "no" ; then
no_glib=yes
@@ -6798,7 +6805,7 @@ echo "configure:6779: checking for GLIB - version >= $min_glib_version" >&5
echo $ac_n "cross compiling; assumed OK... $ac_c"
else
cat > conftest.$ac_ext <<EOF
-#line 6802 "configure"
+#line 6809 "configure"
#include "confdefs.h"
#include <glib.h>
@@ -6874,7 +6881,7 @@ main ()
}
EOF
-if { (eval echo configure:6878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -6908,7 +6915,7 @@ fi
CFLAGS="$CFLAGS $GLIB_CFLAGS"
LIBS="$LIBS $GLIB_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6912 "configure"
+#line 6919 "configure"
#include "confdefs.h"
#include <glib.h>
@@ -6918,7 +6925,7 @@ int main() {
return ((glib_major_version) || (glib_minor_version) || (glib_micro_version));
; return 0; }
EOF
-if { (eval echo configure:6922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
@@ -6998,7 +7005,7 @@ fi
# Extract the first word of "libart-config", so it can be a program name with args.
set dummy libart-config; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7002: checking for $ac_word" >&5
+echo "configure:7009: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_LIBART_CONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7033,7 +7040,7 @@ fi
min_libart_version=2.1.0
echo $ac_n "checking for LIBART - version >= $min_libart_version""... $ac_c" 1>&6
-echo "configure:7037: checking for LIBART - version >= $min_libart_version" >&5
+echo "configure:7044: checking for LIBART - version >= $min_libart_version" >&5
no_libart=""
if test "$LIBART_CONFIG" = "no" ; then
no_libart=yes
@@ -7057,7 +7064,7 @@ echo "configure:7037: checking for LIBART - version >= $min_libart_version" >&5
echo $ac_n "cross compiling; assumed OK... $ac_c"
else
cat > conftest.$ac_ext <<EOF
-#line 7061 "configure"
+#line 7068 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -7115,7 +7122,7 @@ int main ()
EOF
-if { (eval echo configure:7119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -7149,7 +7156,7 @@ fi
CFLAGS="$CFLAGS $LIBART_CFLAGS"
LIBS="$LIBS $LIBART_LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7153 "configure"
+#line 7160 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -7159,7 +7166,7 @@ int main() {
return 0;
; return 0; }
EOF
-if { (eval echo configure:7163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7170: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding LIBART or finding the wrong"
@@ -7198,7 +7205,7 @@ rm -f conftest*
# requires -ldl.
if test "$GC" = boehm; then
echo $ac_n "checking for main in -ldl""... $ac_c" 1>&6
-echo "configure:7202: checking for main in -ldl" >&5
+echo "configure:7209: checking for main in -ldl" >&5
ac_lib_var=`echo dl'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7206,14 +7213,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-ldl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7210 "configure"
+#line 7217 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:7217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7280,7 +7287,7 @@ fi
# Extract the first word of "${ac_tool_prefix}gcj", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcj; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7284: checking for $ac_word" >&5
+echo "configure:7291: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7312,7 +7319,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "gcj", so it can be a program name with args.
set dummy gcj; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:7316: checking for $ac_word" >&5
+echo "configure:7323: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_GCJ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -7374,13 +7381,13 @@ exec 5>>./config.log
CPPFLAGS=$GCJ_SAVE_CPPFLAGS
echo $ac_n "checking size of void *""... $ac_c" 1>&6
-echo "configure:7378: checking size of void *" >&5
+echo "configure:7385: checking size of void *" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_void_p'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_size in 4 8 1 2 16 12 ; do # List sizes in rough order of prevalence.
cat > conftest.$ac_ext <<EOF
-#line 7384 "configure"
+#line 7391 "configure"
#include "confdefs.h"
#include "confdefs.h"
#include <sys/types.h>
@@ -7390,7 +7397,7 @@ int main() {
switch (0) case 0: case (sizeof (void *) == $ac_size):;
; return 0; }
EOF
-if { (eval echo configure:7394: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7401: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_sizeof_void_p=$ac_size
else
@@ -7479,7 +7486,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexecmainlibdir='$(libdir)'
fi
-toolexeclibdir=$toolexecmainlibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+esac
@@ -7496,18 +7507,18 @@ EOF
echo $ac_n "checking for g++ -ffloat-store bug""... $ac_c" 1>&6
-echo "configure:7500: checking for g++ -ffloat-store bug" >&5
+echo "configure:7511: checking for g++ -ffloat-store bug" >&5
save_CFLAGS="$CFLAGS"
CFLAGS="-x c++ -O2 -ffloat-store"
cat > conftest.$ac_ext <<EOF
-#line 7504 "configure"
+#line 7515 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
; return 0; }
EOF
-if { (eval echo configure:7511: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7522: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
echo "$ac_t""no" 1>&6
else
@@ -7527,17 +7538,17 @@ for ac_hdr in unistd.h bstring.h sys/time.h sys/types.h fcntl.h sys/ioctl.h sys/
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7531: checking for $ac_hdr" >&5
+echo "configure:7542: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7536 "configure"
+#line 7547 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7541: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7552: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7567,17 +7578,17 @@ for ac_hdr in dirent.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7571: checking for $ac_hdr" >&5
+echo "configure:7582: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7576 "configure"
+#line 7587 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7581: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7592: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7607,17 +7618,17 @@ for ac_hdr in inttypes.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7611: checking for $ac_hdr" >&5
+echo "configure:7622: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7616 "configure"
+#line 7627 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7632: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7653,12 +7664,12 @@ fi
done
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:7657: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:7668: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7662 "configure"
+#line 7673 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -7674,7 +7685,7 @@ wait (&s);
s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
; return 0; }
EOF
-if { (eval echo configure:7678: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7689: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
@@ -7696,12 +7707,12 @@ fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:7700: checking for ANSI C header files" >&5
+echo "configure:7711: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7705 "configure"
+#line 7716 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -7709,7 +7720,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7713: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7724: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7726,7 +7737,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 7730 "configure"
+#line 7741 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -7744,7 +7755,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 7748 "configure"
+#line 7759 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -7765,7 +7776,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 7769 "configure"
+#line 7780 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -7776,7 +7787,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:7780: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7791: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -7800,12 +7811,12 @@ EOF
fi
echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:7804: checking for ssize_t" >&5
+echo "configure:7815: checking for ssize_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7809 "configure"
+#line 7820 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -7834,9 +7845,9 @@ fi
echo $ac_n "checking for in_addr_t""... $ac_c" 1>&6
-echo "configure:7838: checking for in_addr_t" >&5
+echo "configure:7849: checking for in_addr_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 7840 "configure"
+#line 7851 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
@@ -7850,7 +7861,7 @@ int main() {
in_addr_t foo;
; return 0; }
EOF
-if { (eval echo configure:7854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_IN_ADDR_T 1
@@ -7866,16 +7877,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct ip_mreq is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:7870: checking whether struct ip_mreq is in netinet/in.h" >&5
+echo "configure:7881: checking whether struct ip_mreq is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7872 "configure"
+#line 7883 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct ip_mreq mreq;
; return 0; }
EOF
-if { (eval echo configure:7879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7890: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_STRUCT_IP_MREQ 1
@@ -7891,16 +7902,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct ipv6_mreq is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:7895: checking whether struct ipv6_mreq is in netinet/in.h" >&5
+echo "configure:7906: checking whether struct ipv6_mreq is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7897 "configure"
+#line 7908 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct ipv6_mreq mreq6;
; return 0; }
EOF
-if { (eval echo configure:7904: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_STRUCT_IPV6_MREQ 1
@@ -7916,16 +7927,16 @@ fi
rm -f conftest*
echo $ac_n "checking whether struct sockaddr_in6 is in netinet/in.h""... $ac_c" 1>&6
-echo "configure:7920: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
+echo "configure:7931: checking whether struct sockaddr_in6 is in netinet/in.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7922 "configure"
+#line 7933 "configure"
#include "confdefs.h"
#include <netinet/in.h>
int main() {
struct sockaddr_in6 addr6;
; return 0; }
EOF
-if { (eval echo configure:7929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_INET6 1
@@ -7941,9 +7952,9 @@ fi
rm -f conftest*
echo $ac_n "checking for socklen_t in sys/socket.h""... $ac_c" 1>&6
-echo "configure:7945: checking for socklen_t in sys/socket.h" >&5
+echo "configure:7956: checking for socklen_t in sys/socket.h" >&5
cat > conftest.$ac_ext <<EOF
-#line 7947 "configure"
+#line 7958 "configure"
#include "confdefs.h"
#define _POSIX_PII_SOCKET
#include <sys/types.h>
@@ -7952,7 +7963,7 @@ int main() {
socklen_t x = 5;
; return 0; }
EOF
-if { (eval echo configure:7956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7967: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_SOCKLEN_T 1
@@ -7968,16 +7979,16 @@ fi
rm -f conftest*
echo $ac_n "checking for tm_gmtoff in struct tm""... $ac_c" 1>&6
-echo "configure:7972: checking for tm_gmtoff in struct tm" >&5
+echo "configure:7983: checking for tm_gmtoff in struct tm" >&5
cat > conftest.$ac_ext <<EOF
-#line 7974 "configure"
+#line 7985 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
struct tm tim; tim.tm_gmtoff = 0;
; return 0; }
EOF
-if { (eval echo configure:7981: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7992: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define STRUCT_TM_HAS_GMTOFF 1
@@ -7990,16 +8001,16 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
echo $ac_n "checking for global timezone variable""... $ac_c" 1>&6
-echo "configure:7994: checking for global timezone variable" >&5
+echo "configure:8005: checking for global timezone variable" >&5
cat > conftest.$ac_ext <<EOF
-#line 7996 "configure"
+#line 8007 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
void i(){long z2 = 2*timezone;}
; return 0; }
EOF
-if { (eval echo configure:8003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_TIMEZONE 1
@@ -8012,16 +8023,16 @@ else
rm -rf conftest*
echo "$ac_t""no" 1>&6
echo $ac_n "checking for global _timezone variable""... $ac_c" 1>&6
-echo "configure:8016: checking for global _timezone variable" >&5
+echo "configure:8027: checking for global _timezone variable" >&5
cat > conftest.$ac_ext <<EOF
-#line 8018 "configure"
+#line 8029 "configure"
#include "confdefs.h"
#include <time.h>
int main() {
long z2 = _timezone;
; return 0; }
EOF
-if { (eval echo configure:8025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8036: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_UNDERSCORE_TIMEZONE 1
@@ -8043,19 +8054,19 @@ rm -f conftest*
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:8047: checking for working alloca.h" >&5
+echo "configure:8058: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8052 "configure"
+#line 8063 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:8059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
@@ -8076,12 +8087,12 @@ EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:8080: checking for alloca" >&5
+echo "configure:8091: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8085 "configure"
+#line 8096 "configure"
#include "confdefs.h"
#ifdef __GNUC__
@@ -8109,7 +8120,7 @@ int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:8113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
@@ -8141,12 +8152,12 @@ EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:8145: checking whether alloca needs Cray hooks" >&5
+echo "configure:8156: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8150 "configure"
+#line 8161 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
@@ -8171,12 +8182,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8175: checking for $ac_func" >&5
+echo "configure:8186: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8180 "configure"
+#line 8191 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8199,7 +8210,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8226,7 +8237,7 @@ done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:8230: checking stack direction for C alloca" >&5
+echo "configure:8241: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8234,7 +8245,7 @@ else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 8238 "configure"
+#line 8249 "configure"
#include "confdefs.h"
find_stack_direction ()
{
@@ -8253,7 +8264,7 @@ main ()
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:8257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
@@ -8274,13 +8285,279 @@ EOF
fi
+for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:8293: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8298 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:8303: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in getpagesize
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:8332: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8337 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* 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();
+
+int main() {
+
+/* 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
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:8360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for working mmap""... $ac_c" 1>&6
+echo "configure:8385: checking for working mmap" >&5
+if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_mmap_fixed_mapped=no
+else
+ cat > conftest.$ac_ext <<EOF
+#line 8393 "configure"
+#include "confdefs.h"
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+ Here is a matrix of mmap possibilities:
+ mmap private not fixed
+ mmap private fixed at somewhere currently unmapped
+ mmap private fixed at somewhere already mapped
+ mmap shared not fixed
+ mmap shared fixed at somewhere currently unmapped
+ mmap shared fixed at somewhere already mapped
+ For private mappings, we should verify that changes cannot be read()
+ back from the file, nor mmap's back from the file at a different
+ address. (There have been systems where private was not correctly
+ implemented like the infamous i386 svr4.0, and systems where the
+ VM page cache was not coherent with the filesystem buffer cache
+ like early versions of FreeBSD and possibly contemporary NetBSD.)
+ For shared mappings, we should conversely verify that changes get
+ propogated back to all the places they're supposed to be.
+
+ Grep wants private fixed already mapped.
+ The main things grep needs to know about mmap are:
+ * does it exist and is it safe to write into the mmap'd area
+ * how to use it (BSD variants) */
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+/* This mess was copied from the GNU getpagesize.h. */
+#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
+
+/* Assume that all systems that can run configure have sys/param.h. */
+# ifndef HAVE_SYS_PARAM_H
+# define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+# define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+# ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define getpagesize() EXEC_PAGESIZE
+# else /* no EXEC_PAGESIZE */
+# ifdef NBPG
+# define getpagesize() NBPG * CLSIZE
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif /* no CLSIZE */
+# else /* no NBPG */
+# ifdef NBPC
+# define getpagesize() NBPC
+# else /* no NBPC */
+# ifdef PAGESIZE
+# define getpagesize() PAGESIZE
+# endif /* PAGESIZE */
+# endif /* no NBPC */
+# endif /* no NBPG */
+# endif /* no EXEC_PAGESIZE */
+# else /* no HAVE_SYS_PARAM_H */
+# define getpagesize() 8192 /* punt totally */
+# endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+#ifdef __cplusplus
+extern "C" { void *malloc(unsigned); }
+#else
+char *malloc();
+#endif
+
+int
+main()
+{
+ char *data, *data2, *data3;
+ int i, pagesize;
+ int fd;
+
+ pagesize = getpagesize();
+
+ /*
+ * First, make a file with some known garbage in it.
+ */
+ data = malloc(pagesize);
+ if (!data)
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ *(data + i) = rand();
+ umask(0);
+ fd = creat("conftestmmap", 0600);
+ if (fd < 0)
+ exit(1);
+ if (write(fd, data, pagesize) != pagesize)
+ exit(1);
+ close(fd);
+
+ /*
+ * Next, try to mmap the file at a fixed address which
+ * already has something else allocated at it. If we can,
+ * also make sure that we see the same garbage.
+ */
+ fd = open("conftestmmap", O_RDWR);
+ if (fd < 0)
+ exit(1);
+ data2 = malloc(2 * pagesize);
+ if (!data2)
+ exit(1);
+ data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
+ if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_FIXED, fd, 0L))
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data2 + i))
+ exit(1);
+
+ /*
+ * Finally, make sure that changes to the mapped area
+ * do not percolate back to the file as seen by read().
+ * (This is a bug on some variants of i386 svr4.0.)
+ */
+ for (i = 0; i < pagesize; ++i)
+ *(data2 + i) = *(data2 + i) + 1;
+ data3 = malloc(pagesize);
+ if (!data3)
+ exit(1);
+ if (read(fd, data3, pagesize) != pagesize)
+ exit(1);
+ for (i = 0; i < pagesize; ++i)
+ if (*(data + i) != *(data3 + i))
+ exit(1);
+ close(fd);
+ unlink("conftestmmap");
+ exit(0);
+}
+
+EOF
+if { (eval echo configure:8533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_func_mmap_fixed_mapped=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+fi
+
for ac_prog in perl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:8284: checking for $ac_word" >&5
+echo "configure:8561: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -8855,8 +9132,8 @@ fi; done
EOF
cat >> $CONFIG_STATUS <<EOF
-ac_sources="include/$PLATFORMH java/io/natFile${FILE-${PLATFORM}}.cc java/io/natFileDescriptor${FILE-${PLATFORM}}.cc java/lang/${PLATFORM}Process.java java/lang/nat${PLATFORM}Process.cc include/$GCHDR include/$THREADH sysdep/$sysdeps_dir/locks.h $SIGNAL_HANDLER"
-ac_dests="include/platform.h java/io/natFile.cc java/io/natFileDescriptor.cc java/lang/ConcreteProcess.java java/lang/natConcreteProcess.cc include/java-gc.h include/java-threads.h sysdep/locks.h include/java-signal.h"
+ac_sources="include/$PLATFORMH java/io/natFile${FILE-${PLATFORM}}.cc java/io/natFileDescriptor${FILE-${PLATFORM}}.cc java/lang/${PLATFORM}Process.java java/lang/nat${PLATFORM}Process.cc java/net/natInetAddress${PLATFORMNET}.cc java/net/natNetworkInterface${PLATFORMNET}.cc java/net/natPlainSocketImpl${PLATFORMNET}.cc java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc include/$GCHDR include/$THREADH sysdep/$sysdeps_dir/locks.h $SIGNAL_HANDLER"
+ac_dests="include/platform.h java/io/natFile.cc java/io/natFileDescriptor.cc java/lang/ConcreteProcess.java java/lang/natConcreteProcess.cc java/net/natInetAddress.cc java/net/natNetworkInterface.cc java/net/natPlainSocketImpl.cc java/net/natPlainDatagramSocketImpl.cc include/java-gc.h include/java-threads.h sysdep/locks.h include/java-signal.h"
EOF
cat >> $CONFIG_STATUS <<\EOF
diff --git a/libjava/configure.in b/libjava/configure.in
index 037451dcee8..f1e0a39b222 100644
--- a/libjava/configure.in
+++ b/libjava/configure.in
@@ -224,12 +224,14 @@ case "$TARGET_ECOS" in
no) case "$host" in
*mingw*)
PLATFORM=Win32
+ PLATFORMNET=Win32
PLATFORMOBJS=win32.lo
PLATFORMH=win32.h
CHECK_FOR_BROKEN_MINGW_LD
;;
*)
PLATFORM=Posix
+ PLATFORMNET=Posix
PLATFORMOBJS=posix.lo
PLATFORMH=posix.h
;;
@@ -237,6 +239,7 @@ case "$TARGET_ECOS" in
;;
*)
PLATFORM=Ecos
+ PLATFORMNET=NoNet
AC_DEFINE(ECOS)
PLATFORMOBJS=posix.lo
PLATFORMH=posix.h
@@ -269,6 +272,14 @@ test -d java/lang || mkdir java/lang
AC_LINK_FILES(java/lang/${PLATFORM}Process.java, java/lang/ConcreteProcess.java)
AC_LINK_FILES(java/lang/nat${PLATFORM}Process.cc, java/lang/natConcreteProcess.cc)
+dnl Likewise for natInetAddress.cc, natNetworkInterface.cc, natPlainSocketImpl.cc
+dnl and natPlainDatagramSocketImpl.cc
+test -d java/net || mkdir java/net
+AC_LINK_FILES(java/net/natInetAddress${PLATFORMNET}.cc, java/net/natInetAddress.cc)
+AC_LINK_FILES(java/net/natNetworkInterface${PLATFORMNET}.cc, java/net/natNetworkInterface.cc)
+AC_LINK_FILES(java/net/natPlainSocketImpl${PLATFORMNET}.cc, java/net/natPlainSocketImpl.cc)
+AC_LINK_FILES(java/net/natPlainDatagramSocketImpl${PLATFORMNET}.cc, java/net/natPlainDatagramSocketImpl.cc)
+
case "${host}" in
*mingw*)
SYSTEMSPEC="-lgdi32 -lwsock32 -lws2_32"
@@ -554,6 +565,7 @@ if test "x${with_newlib}" = "xyes"; then
GCJ="${target_alias}-gcj"
fi
NATIVE=no
+ PLATFORMNET=NoNet
else
AC_CHECK_FUNCS(strerror ioctl select fstat open fsync sleep opendir)
AC_CHECK_FUNCS(gmtime_r localtime_r readdir_r getpwuid_r getcwd)
@@ -568,9 +580,6 @@ else
ia64-*-linux*)
# Has broken backtrace()
;;
- s390*-*-linux*)
- # Has broken backtrace()
- ;;
*)
AC_DEFINE(HAVE_BACKTRACE)
;;
@@ -871,7 +880,11 @@ else
toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
toolexecmainlibdir='$(libdir)'
fi
-toolexeclibdir=$toolexecmainlibdir/`$CC -print-multi-os-directory`
+multi_os_directory=`$CC -print-multi-os-directory`
+case $multi_os_directory in
+ .) toolexeclibdir=$toolexecmainlibdir ;; # Avoid trailing /.
+ *) toolexeclibdir=$toolexecmainlibdir/$multi_os_directory ;;
+esac
AC_SUBST(toolexecdir)
AC_SUBST(toolexecmainlibdir)
AC_SUBST(toolexeclibdir)
@@ -970,6 +983,7 @@ AC_TRY_COMPILE([#include <time.h>], [struct tm tim; tim.tm_gmtoff = 0;],
[AC_MSG_RESULT(no)])])])
AC_FUNC_ALLOCA
+AC_FUNC_MMAP
AC_CHECK_PROGS(PERL, perl, false)
diff --git a/libjava/gnu/gcj/runtime/NameFinder.java b/libjava/gnu/gcj/runtime/NameFinder.java
index 4089411e84b..19820c1bd6b 100644
--- a/libjava/gnu/gcj/runtime/NameFinder.java
+++ b/libjava/gnu/gcj/runtime/NameFinder.java
@@ -103,6 +103,11 @@ public class NameFinder
private BufferedReader addr2lineIn;
/**
+ * Flag set if using addr2name.awk instead of addr2line from binutils.
+ */
+ private boolean usingAddr2name = false;
+
+ /**
* Creates a new NameFinder. Call close to get rid of any resources
* created while using the <code>lookup</code> methods.
*/
@@ -142,6 +147,7 @@ public class NameFinder
{
String[] exec = new String[] {"addr2name.awk", executable};
addr2line = runtime.exec(exec);
+ usingAddr2name = true;
}
catch (IOException ioe2) { addr2line = null; }
}
@@ -181,6 +187,11 @@ public class NameFinder
native private String getAddrAsString(RawData addrs, int n);
/**
+ * Returns the label that is exported for the given method name.
+ */
+ native private String getExternalLabel(String name);
+
+ /**
* If nth element of stack is an interpreted frame, return the
* element representing the method being interpreted.
*/
@@ -212,6 +223,15 @@ public class NameFinder
addr2lineOut.flush();
name = addr2lineIn.readLine();
file = addr2lineIn.readLine();
+
+ // addr2line uses symbolic debugging information instead
+ // of the actually exported labels as addr2name.awk does.
+ // This name might need some modification, depending on
+ // the system, to make it a label like that returned
+ // by addr2name.awk or dladdr.
+ if (! usingAddr2name)
+ if (name != null && ! "??".equals (name))
+ name = getExternalLabel (name);
}
catch (IOException ioe) { addr2line = null; }
}
diff --git a/libjava/gnu/gcj/runtime/natNameFinder.cc b/libjava/gnu/gcj/runtime/natNameFinder.cc
index 29687cb5bb9..6605e380591 100644
--- a/libjava/gnu/gcj/runtime/natNameFinder.cc
+++ b/libjava/gnu/gcj/runtime/natNameFinder.cc
@@ -15,6 +15,8 @@ details. */
#include <config.h>
+#include <string.h>
+
#include <gcj/cni.h>
#include <jvm.h>
#include <java/lang/String.h>
@@ -28,6 +30,37 @@ details. */
#include <dlfcn.h>
#endif
+// On some systems, a prefix is attached to a method name before
+// it is exported as a label. The GCC preprocessor predefines
+// this prefix as the macro __USER_LABEL_PREFIX__ which expands to
+// a string (not string constant) representing the prefix, if any.
+#undef LABEL_PREFIX
+#ifdef __USER_LABEL_PREFIX__
+
+#define USER_LABEL_PREFIX_STRING_0(s) #s
+#define USER_LABEL_PREFIX_STRING(s) USER_LABEL_PREFIX_STRING_0(s)
+
+#define LABEL_PREFIX USER_LABEL_PREFIX_STRING(__USER_LABEL_PREFIX__)
+
+#else /* __USER_LABEL_PREFIX__ */
+
+#define LABEL_PREFIX ""
+
+#endif /* ! __USER_LABEL_PREFIX__ */
+
+java::lang::String*
+gnu::gcj::runtime::NameFinder::getExternalLabel (java::lang::String* name)
+{
+ jsize nameLen = JvGetStringUTFLength (name);
+ jsize pfxLen = strlen (LABEL_PREFIX);
+ char *newName = (char *) JvMalloc (pfxLen + nameLen + 1);
+ *(newName + 0) = '\0';
+ strcpy (newName, LABEL_PREFIX);
+ JvGetStringUTFRegion (name, 0, nameLen, newName + pfxLen);
+ *(newName + pfxLen + nameLen) = '\0';
+ return JvNewStringLatin1 (newName);
+}
+
java::lang::String*
gnu::gcj::runtime::NameFinder::getExecutable (void)
{
diff --git a/libjava/gnu/java/nio/ByteBufferImpl.java b/libjava/gnu/java/nio/ByteBufferImpl.java
index 149dc1c9683..342f3316a70 100644
--- a/libjava/gnu/java/nio/ByteBufferImpl.java
+++ b/libjava/gnu/java/nio/ByteBufferImpl.java
@@ -320,7 +320,7 @@ public final class ByteBufferImpl extends ByteBuffer
if (readOnly)
throw new ReadOnlyBufferException ();
- nio_put_Short (this, position (), limit(), value);
+ nio_put_Short (this, position (), limit (), value);
inc_pos (2);
return this;
}
@@ -352,7 +352,7 @@ public final class ByteBufferImpl extends ByteBuffer
if (readOnly)
throw new ReadOnlyBufferException ();
- nio_put_Int (this, position (), limit , value);
+ nio_put_Int (this, position (), limit (), value);
inc_pos (4);
return this;
}
diff --git a/libjava/gnu/java/nio/CharBufferImpl.java b/libjava/gnu/java/nio/CharBufferImpl.java
index 5126e28f096..f35ae4b09ff 100644
--- a/libjava/gnu/java/nio/CharBufferImpl.java
+++ b/libjava/gnu/java/nio/CharBufferImpl.java
@@ -98,7 +98,8 @@ public final class CharBufferImpl extends CharBuffer
public CharBuffer slice()
{
- return new CharBufferImpl (this);
+ return new CharBufferImpl (backing_buffer, arrayOffset () + position (),
+ remaining ());
}
public CharBuffer duplicate()
@@ -125,9 +126,10 @@ public final class CharBufferImpl extends CharBuffer
final public CharSequence subSequence (int start, int end)
{
- if (start < 0 ||
- end > length () ||
- start > end)
+ if (start < 0
+ || start > length ()
+ || end < start
+ || end > length ())
throw new IndexOutOfBoundsException ();
// No support for direct buffers yet.
diff --git a/libjava/gnu/java/nio/FileChannelImpl.java b/libjava/gnu/java/nio/FileChannelImpl.java
index 31779bbc64e..c233d8210a7 100644
--- a/libjava/gnu/java/nio/FileChannelImpl.java
+++ b/libjava/gnu/java/nio/FileChannelImpl.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.nio;
import java.io.EOFException;
+import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -51,6 +52,7 @@ import java.nio.channels.NonReadableChannelException;
import java.nio.channels.NonWritableChannelException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
+import gnu.gcj.RawData;
/**
* This file is not user visible !
@@ -62,43 +64,49 @@ import java.nio.channels.WritableByteChannel;
public class FileChannelImpl extends FileChannel
{
- public long address;
- public int length;
- public int fd;
- public MappedByteBuffer buf;
- public Object file_obj; // just to keep it live...
-
- /**
- * This method came from java.io.RandomAccessFile
- * It is private there so we will repeat it here.
- */
- private native long lengthInternal (int native_fd) throws IOException;
+ // GCJ LOCAL: This variable stores a pointer to the memory
+ // where the file is mapped.
+ RawData map_address;
+
+ int length;
+ FileDescriptor fd;
+ MappedByteBuffer buf;
+ Object file_obj; // just to keep it live...
- public FileChannelImpl (int fd, Object obj)
+ public FileChannelImpl (FileDescriptor fd, boolean write, Object obj)
{
+ if (!(obj instanceof RandomAccessFile)
+ && !(obj instanceof FileInputStream)
+ && !(obj instanceof FileOutputStream))
+ throw new InternalError ();
+
this.fd = fd;
this.file_obj = obj;
}
- public long size () throws IOException
+ public FileChannelImpl ()
{
- if (!isOpen ())
- throw new ClosedChannelException ();
-
- return lengthInternal (fd);
+ this (new FileDescriptor (-1), true, null);
}
+
+ private native long implPosition ();
+ private native FileChannel implPosition (long newPosition);
+ private native FileChannel implTruncate (long size);
+
+ private native RawData nio_mmap_file (long pos, long size, int mode);
+ private native void nio_unmmap_file (RawData map_address, int size);
+ private native void nio_msync (RawData map_address, int length);
+
+ public native long size () throws IOException;
protected void implCloseChannel() throws IOException
{
- if (address != 0)
+ if (map_address != null)
{
- nio_unmmap_file (fd, address, (int) length);
- address = 0;
+ nio_unmmap_file (map_address, (int) length);
+ map_address = null;
}
- // FIXME
- fd = 0;
-
if (file_obj instanceof RandomAccessFile)
{
RandomAccessFile o = (RandomAccessFile) file_obj;
@@ -121,14 +129,14 @@ public class FileChannelImpl extends FileChannel
int s = (int)size();
if (buf == null)
- {
+ {
throw new EOFException("file not mapped");
- }
+ }
- for (int i=0; i<s; i++)
- {
- dst.put( buf.get() );
- }
+ for (int i = 0; i < s; i++)
+ {
+ dst.put (buf.get());
+ }
return s;
}
@@ -153,9 +161,9 @@ public class FileChannelImpl extends FileChannel
long result = 0;
for (int i = offset; i < offset + length; i++)
- {
- result += write (dsts[i]);
- }
+ {
+ result += write (dsts [i]);
+ }
return result;
}
@@ -165,15 +173,15 @@ public class FileChannelImpl extends FileChannel
int w = 0;
if (buf == null)
- {
+ {
throw new EOFException ("file not mapped");
- }
+ }
while (src.hasRemaining ())
- {
+ {
buf.put (src.get ());
w++;
- }
+ }
return w;
}
@@ -195,14 +203,14 @@ public class FileChannelImpl extends FileChannel
public long write(ByteBuffer[] srcs, int offset, int length)
throws IOException
{
- long res = 0;
+ long result = 0;
for (int i = offset;i < offset + length;i++)
- {
- res += write (srcs[i]);
- }
+ {
+ result += write (srcs[i]);
+ }
- return res;
+ return result;
}
public MappedByteBuffer map (FileChannel.MapMode mode, long position,
@@ -217,23 +225,22 @@ public class FileChannelImpl extends FileChannel
|| size > Integer.MAX_VALUE)
throw new IllegalArgumentException ();
-// int cmode = mode.m;
-// address = nio_mmap_file (fd, position, size, cmode);
-// length = size;
-// buf = new MappedByteFileBuffer (this);
-// return buf;
- return null;
+ int cmode = mode.m;
+ map_address = nio_mmap_file (position, size, cmode);
+ length = (int) size;
+ buf = new MappedByteFileBuffer (this);
+ return buf;
}
- static MappedByteBuffer create_direct_mapped_buffer (long address,
+ static MappedByteBuffer create_direct_mapped_buffer (RawData map_address,
long length)
+ throws IOException
{
-// FileChannelImpl ch = new FileChannelImpl (-1, null);
-// ch.address = address;
-// ch.length = (int) length;
-// ch.buf = new MappedByteFileBuffer (ch);
-// return ch.buf;
- return null;
+ FileChannelImpl ch = new FileChannelImpl ();
+ ch.map_address = map_address;
+ ch.length = (int) length;
+ ch.buf = new MappedByteFileBuffer (ch);
+ return ch.buf;
}
public long write (ByteBuffer[] srcs)
@@ -252,7 +259,7 @@ public class FileChannelImpl extends FileChannel
// FIXME: What to do with metaData ?
- nio_msync (fd, address, length);
+ nio_msync (map_address, length);
}
public long transferTo (long position, long count, WritableByteChannel target)
@@ -322,7 +329,7 @@ public class FileChannelImpl extends FileChannel
if (!isOpen ())
throw new ClosedChannelException ();
- throw new Error ("not implemented");
+ return implPosition ();
}
public FileChannel position (long newPosition)
@@ -334,7 +341,7 @@ public class FileChannelImpl extends FileChannel
if (!isOpen ())
throw new ClosedChannelException ();
- throw new Error ("not implemented");
+ return implPosition (newPosition);
}
public FileChannel truncate (long size)
@@ -348,10 +355,6 @@ public class FileChannelImpl extends FileChannel
// FIXME: check for NonWritableChannelException
- throw new Error ("not implemented");
+ return implTruncate (size);
}
-
- private static native long nio_mmap_file (int fd, long pos, int size, int mode);
- private static native void nio_unmmap_file (int fd, long address, int size);
- private static native void nio_msync (int fd, long address, int length);
}
diff --git a/libjava/gnu/java/nio/MappedByteFileBuffer.java b/libjava/gnu/java/nio/MappedByteFileBuffer.java
index e8399047d5a..ec6c83c5d70 100644
--- a/libjava/gnu/java/nio/MappedByteFileBuffer.java
+++ b/libjava/gnu/java/nio/MappedByteFileBuffer.java
@@ -36,13 +36,22 @@ obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.nio;
-import java.nio.*;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.DoubleBuffer;
+import java.nio.FloatBuffer;
+import java.nio.IntBuffer;
+import java.nio.LongBuffer;
+import java.nio.ShortBuffer;
+import java.nio.MappedByteBuffer;
import java.io.IOException;
+import gnu.gcj.RawData;
final public class MappedByteFileBuffer
extends MappedByteBuffer
{
- public long address;
+ RawData map_address;
boolean readOnly;
boolean direct;
public FileChannelImpl ch;
@@ -52,13 +61,17 @@ final public class MappedByteFileBuffer
super ((int) ch.size (), (int) ch.size (), 0, -1);
this.ch = ch;
- address = ch.address;
- try {
- long si = ch.size() / 1;
- limit((int)si);
- } catch (IOException e) {
- System.err.println("failed to get size of file-channel's file");
- }
+ map_address = ch.map_address;
+
+ try
+ {
+ long si = ch.size () / 1;
+ limit ((int) si);
+ }
+ catch (IOException e)
+ {
+ System.err.println ("failed to get size of file-channel's file");
+ }
}
public MappedByteFileBuffer (MappedByteFileBuffer b)
@@ -68,7 +81,7 @@ final public class MappedByteFileBuffer
this.readOnly = b.isReadOnly ();
this.ch = b.ch;
- address = b.address;
+ map_address = b.map_address;
limit (b.limit ());
}
@@ -79,57 +92,59 @@ final public class MappedByteFileBuffer
public static native byte nio_read_Byte_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Byte_file_channel (FileChannelImpl ch,
int index, int limit,
byte value,
- long address);
+ RawData map_address);
public static native short nio_read_Short_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Short_file_channel (FileChannelImpl ch,
int index, int limit,
short value,
- long address);
+ RawData map_address);
public static native char nio_read_Char_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Char_file_channel (FileChannelImpl ch,
int index, int limit,
char value,
- long address);
+ RawData map_address);
public static native int nio_read_Int_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Int_file_channel (FileChannelImpl ch,
int index, int limit,
- int value, long address);
+ int value,
+ RawData map_address);
public static native long nio_read_Long_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Long_file_channel (FileChannelImpl ch,
int index, int limit,
long value,
- long address);
+ RawData map_address);
public static native float nio_read_Float_file_channel (FileChannelImpl ch,
int index, int limit,
- long address);
+ RawData map_address);
public static native void nio_write_Float_file_channel (FileChannelImpl ch,
int index, int limit,
float value,
- long address);
- public static native double nio_read_Double_file_channel (FileChannelImpl ch,
- int index, int limit,
- long address);
+ RawData map_address);
+ public static native double
+ nio_read_Double_file_channel (FileChannelImpl ch, int index, int limit,
+ RawData map_address);
public static native void nio_write_Double_file_channel (FileChannelImpl ch,
int index, int limit,
double value,
- long address);
+ RawData map_address);
final public byte get ()
{
byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, position (),
- limit (), address);
+ limit (),
+ map_address);
position (position () + 1);
return a;
}
@@ -137,7 +152,7 @@ final public class MappedByteFileBuffer
final public ByteBuffer put (byte b)
{
MappedByteFileBuffer.nio_write_Byte_file_channel (ch, position (), limit (),
- b, address);
+ b, map_address);
position (position () + 1);
return this;
}
@@ -146,14 +161,14 @@ final public class MappedByteFileBuffer
{
byte a = MappedByteFileBuffer.nio_read_Byte_file_channel (ch, index,
limit (),
- address);
+ map_address);
return a;
}
final public ByteBuffer put (int index, byte b)
{
MappedByteFileBuffer.nio_write_Byte_file_channel (ch, index, limit (), b,
- address);
+ map_address);
return this;
}
@@ -195,27 +210,28 @@ final public class MappedByteFileBuffer
final public byte getByte ()
{
- byte a = nio_read_Byte_file_channel (ch, position (), limit (), address);
+ byte a = nio_read_Byte_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putByte (byte value)
{
- nio_write_Byte_file_channel (ch, position (), limit (), value, address);
+ nio_write_Byte_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public byte getByte (int index)
{
- byte a = nio_read_Byte_file_channel (ch, index, limit(), address);
+ byte a = nio_read_Byte_file_channel (ch, index, limit(), map_address);
return a;
}
final public ByteBuffer putByte (int index, byte value)
{
- nio_write_Byte_file_channel (ch, index, limit (), value, address);
+ nio_write_Byte_file_channel (ch, index, limit (), value, map_address);
return this;
};
@@ -229,27 +245,28 @@ final public class MappedByteFileBuffer
final public char getChar ()
{
- char a = nio_read_Char_file_channel (ch, position (), limit (), address);
+ char a = nio_read_Char_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putChar (char value)
{
- nio_write_Char_file_channel (ch, position (), limit (), value, address);
+ nio_write_Char_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public char getChar (int index)
{
- char a = nio_read_Char_file_channel (ch, index, limit (), address);
+ char a = nio_read_Char_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putChar (int index, char value)
{
- nio_write_Char_file_channel (ch, index, limit (), value, address);
+ nio_write_Char_file_channel (ch, index, limit (), value, map_address);
return this;
};
@@ -263,27 +280,29 @@ final public class MappedByteFileBuffer
final public short getShort ()
{
- short a = nio_read_Short_file_channel (ch, position (), limit (), address);
+ short a = nio_read_Short_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putShort (short value)
{
- nio_write_Short_file_channel (ch, position (), limit (), value, address);
+ nio_write_Short_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public short getShort (int index)
{
- short a = nio_read_Short_file_channel (ch, index, limit (), address);
+ short a = nio_read_Short_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putShort (int index, short value)
{
- nio_write_Short_file_channel (ch, index, limit (), value, address);
+ nio_write_Short_file_channel (ch, index, limit (), value, map_address);
return this;
}
@@ -297,28 +316,27 @@ final public class MappedByteFileBuffer
final public int getInt ()
{
- int a = nio_read_Int_file_channel (ch, position (), limit (), address);
+ int a = nio_read_Int_file_channel (ch, position (), limit (), map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putInt (int value)
{
- nio_write_Int_file_channel (ch, position (), limit (), value, address);
+ nio_write_Int_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public int getInt (int index)
{
- int a = nio_read_Int_file_channel (ch, index, limit (),
- address);
+ int a = nio_read_Int_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putInt (int index, int value)
{
- nio_write_Int_file_channel (ch, index, limit (), value, address);
+ nio_write_Int_file_channel (ch, index, limit (), value, map_address);
return this;
}
@@ -332,27 +350,28 @@ final public class MappedByteFileBuffer
final public long getLong ()
{
- long a = nio_read_Long_file_channel (ch, position (), limit (), address);
+ long a = nio_read_Long_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putLong (long value)
{
- nio_write_Long_file_channel (ch, position (), limit (), value, address);
+ nio_write_Long_file_channel (ch, position (), limit (), value, map_address);
position (position () + 1);
return this;
}
final public long getLong (int index)
{
- long a = nio_read_Long_file_channel (ch, index, limit (), address);
+ long a = nio_read_Long_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putLong (int index, long value)
{
- nio_write_Long_file_channel (ch, index, limit (), value, address);
+ nio_write_Long_file_channel (ch, index, limit (), value, map_address);
return this;
}
@@ -366,27 +385,29 @@ final public class MappedByteFileBuffer
final public float getFloat ()
{
- float a = nio_read_Float_file_channel (ch, position (), limit (), address);
+ float a = nio_read_Float_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putFloat (float value)
{
- nio_write_Float_file_channel (ch, position (), limit (), value, address);
+ nio_write_Float_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public float getFloat (int index)
{
- float a = nio_read_Float_file_channel (ch, index, limit (), address);
+ float a = nio_read_Float_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putFloat (int index, float value)
{
- nio_write_Float_file_channel (ch, index, limit (), value, address);
+ nio_write_Float_file_channel (ch, index, limit (), value, map_address);
return this;
}
@@ -400,27 +421,29 @@ final public class MappedByteFileBuffer
final public double getDouble ()
{
- double a = nio_read_Double_file_channel (ch, position (), limit (), address);
+ double a = nio_read_Double_file_channel (ch, position (), limit (),
+ map_address);
position (position () + 1);
return a;
}
final public ByteBuffer putDouble (double value)
{
- nio_write_Double_file_channel (ch, position (), limit (), value, address);
+ nio_write_Double_file_channel (ch, position (), limit (), value,
+ map_address);
position (position () + 1);
return this;
}
final public double getDouble (int index)
{
- double a = nio_read_Double_file_channel (ch, index, limit (), address);
+ double a = nio_read_Double_file_channel (ch, index, limit (), map_address);
return a;
}
final public ByteBuffer putDouble (int index, double value)
{
- nio_write_Double_file_channel (ch, index, limit (), value, address);
+ nio_write_Double_file_channel (ch, index, limit (), value, map_address);
return this;
}
}
diff --git a/libjava/gnu/java/nio/natFileChannelImpl.cc b/libjava/gnu/java/nio/natFileChannelImpl.cc
index 87386305bc6..9413a77d700 100644
--- a/libjava/gnu/java/nio/natFileChannelImpl.cc
+++ b/libjava/gnu/java/nio/natFileChannelImpl.cc
@@ -24,30 +24,52 @@ details. */
#include <fcntl.h>
#endif
+#include <gnu/gcj/RawData.h>
#include <gnu/java/nio/FileChannelImpl.h>
+#include <java/io/FileDescriptor.h>
#include <java/io/IOException.h>
#include <java/nio/channels/FileChannel.h>
jlong
-gnu::java::nio::FileChannelImpl::lengthInternal (jint fd)
+gnu::java::nio::FileChannelImpl::size ()
{
- throw new ::java::io::IOException (JvNewStringUTF ("lengthInternal not implemented"));
+ return fd->length ();
}
jlong
-gnu::java::nio::FileChannelImpl::nio_mmap_file (jint, jlong, jint, jint)
+gnu::java::nio::FileChannelImpl::implPosition ()
+{
+ return fd->getFilePointer ();
+}
+
+java::nio::channels::FileChannel*
+gnu::java::nio::FileChannelImpl::implPosition (jlong newPosition)
+{
+ fd->seek (newPosition, ::java::io::FileDescriptor::SET, true);
+ return this;
+}
+
+java::nio::channels::FileChannel*
+gnu::java::nio::FileChannelImpl::implTruncate (jlong size)
+{
+ fd->setLength (size);
+ return this;
+}
+
+gnu::gcj::RawData*
+gnu::java::nio::FileChannelImpl::nio_mmap_file (jlong pos, jlong size, jint /*mode*/)
{
throw new ::java::io::IOException (JvNewStringUTF ("mmap not implemented"));
}
void
-gnu::java::nio::FileChannelImpl::nio_unmmap_file (jint, jlong, jint)
+gnu::java::nio::FileChannelImpl::nio_unmmap_file (gnu::gcj::RawData* map_address, jint size)
{
throw new ::java::io::IOException (JvNewStringUTF ("munmap not implemented"));
}
void
-gnu::java::nio::FileChannelImpl::nio_msync (jint, jlong, jint)
+gnu::java::nio::FileChannelImpl::nio_msync (gnu::gcj::RawData* map_address, jint length)
{
throw new ::java::io::IOException (JvNewStringUTF ("msync not implemented"));
}
diff --git a/libjava/gnu/java/nio/natMappedByteFileBuffer.cc b/libjava/gnu/java/nio/natMappedByteFileBuffer.cc
index 6f2eee2107d..e64e27c8829 100644
--- a/libjava/gnu/java/nio/natMappedByteFileBuffer.cc
+++ b/libjava/gnu/java/nio/natMappedByteFileBuffer.cc
@@ -24,13 +24,14 @@ details. */
#include <fcntl.h>
#endif
+#include <gnu/gcj/RawData.h>
#include <gnu/java/nio/MappedByteFileBuffer.h>
#include <java/lang/Error.h>
jbyte
gnu::java::nio::MappedByteFileBuffer::nio_read_Byte_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -38,7 +39,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Byte_file_channel
jchar
gnu::java::nio::MappedByteFileBuffer::nio_read_Char_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -46,7 +47,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Char_file_channel
jdouble
gnu::java::nio::MappedByteFileBuffer::nio_read_Double_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -54,7 +55,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Double_file_channel
jfloat
gnu::java::nio::MappedByteFileBuffer::nio_read_Float_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -62,7 +63,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Float_file_channel
jint
gnu::java::nio::MappedByteFileBuffer::nio_read_Int_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -70,7 +71,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Int_file_channel
jlong
gnu::java::nio::MappedByteFileBuffer::nio_read_Long_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -78,7 +79,7 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Long_file_channel
jshort
gnu::java::nio::MappedByteFileBuffer::nio_read_Short_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong)
+ jint, jint, gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -86,7 +87,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_read_Short_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Byte_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jbyte, jlong)
+ jint, jint, jbyte,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -94,7 +96,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Byte_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Char_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jchar, jlong)
+ jint, jint, jchar,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -102,7 +105,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Char_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Double_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jdouble, jlong)
+ jint, jint, jdouble,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -110,7 +114,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Double_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Float_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jfloat, jlong)
+ jint, jint, jfloat,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -118,7 +123,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Float_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Int_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jint, jlong)
+ jint, jint, jint,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -126,7 +132,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Int_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Long_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jlong, jlong)
+ jint, jint, jlong,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
@@ -134,7 +141,8 @@ gnu::java::nio::MappedByteFileBuffer::nio_write_Long_file_channel
void
gnu::java::nio::MappedByteFileBuffer::nio_write_Short_file_channel
(gnu::java::nio::FileChannelImpl*,
- jint, jint, jshort, jlong)
+ jint, jint, jshort,
+ gnu::gcj::RawData*)
{
throw new ::java::lang::Error (_Jv_NewStringUTF ("not implemented"));
}
diff --git a/libjava/include/config.h.in b/libjava/include/config.h.in
index 5fb650327b6..c6b376867f0 100644
--- a/libjava/include/config.h.in
+++ b/libjava/include/config.h.in
@@ -13,6 +13,9 @@
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
#undef HAVE_ALLOCA_H
+/* Define if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
@@ -217,6 +220,9 @@
/* Define if you have the gethostname function. */
#undef HAVE_GETHOSTNAME
+/* Define if you have the getpagesize function. */
+#undef HAVE_GETPAGESIZE
+
/* Define if you have the getpwuid_r function. */
#undef HAVE_GETPWUID_R
diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h
index 1e604980e0e..38f675a1fef 100644
--- a/libjava/include/jvm.h
+++ b/libjava/include/jvm.h
@@ -352,9 +352,8 @@ extern "C"
jlong _Jv_remJ (jlong, jlong);
}
-/* get/set the name of the running executable. */
-extern char *_Jv_ThisExecutable (void);
-extern void _Jv_ThisExecutable (const char *);
+/* Get the name of the running executable. */
+extern const char *_Jv_ThisExecutable (void);
/* Return a pointer to a symbol in executable or loaded library. */
void *_Jv_FindSymbolInExecutable (const char *);
diff --git a/libjava/include/posix.h b/libjava/include/posix.h
index 0aadd47d3b3..ad937536a8e 100644
--- a/libjava/include/posix.h
+++ b/libjava/include/posix.h
@@ -42,7 +42,23 @@ details. */
// Prefix and suffix for shared libraries.
#define _Jv_platform_solib_prefix "lib"
+#if defined(__APPLE__) && defined(__MACH__) && defined(__ppc__)
+#define _Jv_platform_solib_suffix ".dylib"
+#else
#define _Jv_platform_solib_suffix ".so"
+#endif
+
+// Separator for file name components.
+#define _Jv_platform_file_separator ((jchar) '/')
+// Separator for path components.
+#define _Jv_platform_path_separator ((jchar) ':')
+
+// List of names for `JNI_OnLoad'.
+#define _Jv_platform_onload_names { "JNI_OnLoad", NULL }
+
+// Type of libffi ABI used by JNICALL methods. NOTE: This must agree
+// with the JNICALL definition in jni.h
+#define _Jv_platform_ffi_abi FFI_DEFAULT_ABI
#ifndef DISABLE_JAVA_NET
#include <java/net/InetAddress.h>
diff --git a/libjava/include/win32.h b/libjava/include/win32.h
index 4330c79d397..320273aa4e5 100644
--- a/libjava/include/win32.h
+++ b/libjava/include/win32.h
@@ -24,6 +24,22 @@ details. */
#define _Jv_platform_solib_prefix ""
#define _Jv_platform_solib_suffix ".dll"
+// Separator for file name components.
+#define _Jv_platform_file_separator ((jchar) '\\')
+// Separator for path components.
+#define _Jv_platform_path_separator ((jchar) ';')
+
+// List of names for `JNI_OnLoad'. On Win32, JNI_OnLoad is an
+// "stdcall" function taking two pointers (8 bytes) as arguments. It
+// could also have been exported as "JNI_OnLoad@8" (MinGW) or
+// "_JNI_OnLoad@8" (MSVC).
+#define _Jv_platform_onload_names \
+ { "JNI_OnLoad", "JNI_OnLoad@8", "_JNI_OnLoad@8", NULL }
+
+// Type of libffi ABI used by JNICALL methods. NOTE: This must agree
+// with the JNICALL definition in jni.h
+#define _Jv_platform_ffi_abi FFI_STDCALL
+
#ifndef DISABLE_JAVA_NET
// these errors cannot occur on Win32
diff --git a/libjava/java/awt/Component.java b/libjava/java/awt/Component.java
index 88f91810dc0..cc723b480f2 100644
--- a/libjava/java/awt/Component.java
+++ b/libjava/java/awt/Component.java
@@ -4075,46 +4075,62 @@ p * <li>the set of backward traversal keys
*/
void dispatchEventImpl(AWTEvent e)
{
- // Make use of event id's in order to avoid multiple instanceof tests.
- if (e.id <= ComponentEvent.COMPONENT_LAST
- && e.id >= ComponentEvent.COMPONENT_FIRST
- && (componentListener != null
- || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= KeyEvent.KEY_LAST
- && e.id >= KeyEvent.KEY_FIRST
- && (keyListener != null
- || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= MouseEvent.MOUSE_LAST
- && e.id >= MouseEvent.MOUSE_FIRST
- && (mouseListener != null
- || mouseMotionListener != null
- || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= FocusEvent.FOCUS_LAST
- && e.id >= FocusEvent.FOCUS_FIRST
- && (focusListener != null
- || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= InputMethodEvent.INPUT_METHOD_LAST
- && e.id >= InputMethodEvent.INPUT_METHOD_FIRST
- && (inputMethodListener != null
- || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= HierarchyEvent.HIERARCHY_LAST
- && e.id >= HierarchyEvent.HIERARCHY_FIRST
- && (hierarchyListener != null
- || hierarchyBoundsListener != null
- || (eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0))
- processEvent(e);
- else if (e.id <= PaintEvent.PAINT_LAST
- && e.id >= PaintEvent.PAINT_FIRST
- && (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0)
+ if (eventTypeEnabled (e.id))
processEvent(e);
}
/**
+ * Tells whether or not an event type is enabled.
+ */
+ boolean eventTypeEnabled (int type)
+ {
+ if (type > AWTEvent.RESERVED_ID_MAX)
+ return true;
+
+ switch (type)
+ {
+ case ComponentEvent.COMPONENT_HIDDEN:
+ case ComponentEvent.COMPONENT_MOVED:
+ case ComponentEvent.COMPONENT_RESIZED:
+ case ComponentEvent.COMPONENT_SHOWN:
+ return (componentListener != null
+ || (eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0);
+
+ case KeyEvent.KEY_PRESSED:
+ case KeyEvent.KEY_RELEASED:
+ case KeyEvent.KEY_TYPED:
+ return (keyListener != null
+ || (eventMask & AWTEvent.KEY_EVENT_MASK) != 0);
+
+ case MouseEvent.MOUSE_CLICKED:
+ case MouseEvent.MOUSE_ENTERED:
+ case MouseEvent.MOUSE_EXITED:
+ case MouseEvent.MOUSE_PRESSED:
+ case MouseEvent.MOUSE_RELEASED:
+ return (mouseListener != null
+ || mouseMotionListener != null
+ || (eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0);
+
+ case FocusEvent.FOCUS_GAINED:
+ case FocusEvent.FOCUS_LOST:
+ return (focusListener != null
+ || (eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0);
+
+ case InputMethodEvent.INPUT_METHOD_TEXT_CHANGED:
+ case InputMethodEvent.CARET_POSITION_CHANGED:
+ return (inputMethodListener != null
+ || (eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0);
+
+ case PaintEvent.PAINT:
+ case PaintEvent.UPDATE:
+ return (eventMask & AWTEvent.PAINT_EVENT_MASK) != 0;
+
+ default:
+ return false;
+ }
+ }
+
+ /**
* Coalesce paint events. Current heuristic is: Merge if the union of
* areas is less than twice that of the sum of the areas. The X server
* tend to create a lot of paint events that are adjacent but not
diff --git a/libjava/java/awt/Container.java b/libjava/java/awt/Container.java
index 91804d7f8c9..caffc50ab0e 100644
--- a/libjava/java/awt/Container.java
+++ b/libjava/java/awt/Container.java
@@ -45,6 +45,7 @@ import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Serializable;
@@ -89,6 +90,7 @@ public class Container extends Component
/* Anything else is non-serializable, and should be declared "transient". */
transient ContainerListener containerListener;
+ transient PropertyChangeSupport changeSupport;
/**
* Default constructor for subclasses.
@@ -1125,12 +1127,27 @@ public class Container extends Component
throw new NullPointerException ();
}
- public void addPropertyChangeListener(PropertyChangeListener l)
+ public void addPropertyChangeListener (PropertyChangeListener listener)
{
+ if (listener == null)
+ return;
+
+ if (changeSupport == null)
+ changeSupport = new PropertyChangeSupport (this);
+
+ changeSupport.addPropertyChangeListener (listener);
}
- public void addPropertyChangeListener(String name, PropertyChangeListener l)
+ public void addPropertyChangeListener (String name,
+ PropertyChangeListener listener)
{
+ if (listener == null)
+ return;
+
+ if (changeSupport == null)
+ changeSupport = new PropertyChangeSupport (this);
+
+ changeSupport.addPropertyChangeListener (name, listener);
}
// Hidden helper methods.
diff --git a/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java b/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
index 71267a579f0..ce4bdf8bc0e 100644
--- a/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
+++ b/libjava/java/awt/ContainerOrderFocusTraversalPolicy.java
@@ -41,11 +41,15 @@ package java.awt;
import java.io.Serializable;
/**
- * STUB CLASS ONLY
+ * @author Michael Koch
+ * @since 1.4
*/
public class ContainerOrderFocusTraversalPolicy extends FocusTraversalPolicy
implements Serializable
{
+ /**
+ * Compatible to JDK 1.4+
+ */
static final long serialVersionUID = 486933713763926351L;
private boolean implicitDownCycleTraversal = true;
@@ -55,37 +59,134 @@ public class ContainerOrderFocusTraversalPolicy extends FocusTraversalPolicy
*/
public ContainerOrderFocusTraversalPolicy()
{
- throw new Error("not implemented");
+ // Nothing to do here
}
+ /**
+ * Returns the Component that should receive the focus after current.
+ * root must be a focus cycle root of current.
+ *
+ * @exception IllegalArgumentException If root is not a focus cycle
+ * root of current, or if either root or current is null.
+ */
public Component getComponentAfter(Container root, Component current)
{
+ if (root == null
+ || current == null)
+ throw new IllegalArgumentException ();
+
return null;
}
+ /**
+ * Returns the Component that should receive the focus before current.
+ * root must be a focus cycle root of current.
+ *
+ * @exception IllegalArgumentException If root is not a focus cycle
+ * root of current, or if either root or current is null.
+ */
public Component getComponentBefore(Container root, Component current)
{
+ if (root == null
+ || current == null)
+ throw new IllegalArgumentException ();
+
return null;
}
+ /**
+ * Returns the first Component of root that should receive the focus.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public Component getFirstComponent(Container root)
{
+ if (root == null)
+ throw new IllegalArgumentException ();
+
+ if (!root.isVisible ()
+ || !root.isDisplayable ())
+ return null;
+
+ if (accept (root))
+ return root;
+
+ Component[] componentArray = root.getComponents ();
+
+ for (int i = 0; i < componentArray.length; i++)
+ {
+ Component component = componentArray [i];
+
+ if (component instanceof Container)
+ {
+ Component result = getLastComponent ((Container) component);
+
+ if (result != null)
+ return result;
+ }
+ else
+ {
+ if (accept (component))
+ return component;
+ }
+ }
+
return null;
}
+ /**
+ * Returns the last Component of root that should receive the focus.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public Component getLastComponent(Container root)
{
+ if (root == null)
+ throw new IllegalArgumentException ();
+
+ if (!root.isVisible ()
+ || !root.isDisplayable ())
+ return null;
+
+ if (accept (root))
+ return root;
+
+ Component[] componentArray = root.getComponents ();
+
+ for (int i = componentArray.length - 1; i >= 0; i++)
+ {
+ Component component = componentArray [i];
+
+ if (component instanceof Container)
+ {
+ Component result = getLastComponent ((Container) component);
+
+ if (result != null)
+ return result;
+ }
+ else
+ {
+ if (accept (component))
+ return component;
+ }
+ }
+
return null;
}
+ /**
+ * Returns the default Component of root that should receive the focus.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public Component getDefaultComponent(Container root)
{
- return null;
+ return getFirstComponent (root);
}
public void setImplicitDownCycleTraversal(boolean value)
{
- boolean implicitDownCycleTraversal = value;
+ implicitDownCycleTraversal = value;
}
public boolean getImplicitDownCycleTraversal()
diff --git a/libjava/java/awt/Dialog.java b/libjava/java/awt/Dialog.java
index 9aa2ea6f346..e7c40b14ae4 100644
--- a/libjava/java/awt/Dialog.java
+++ b/libjava/java/awt/Dialog.java
@@ -153,11 +153,37 @@ Dialog(Frame parent, String title)
* @param title The title string for this dialog box.
* @param modal <true> if this dialog box is modal, <code>false</code>
* otherwise.
+ *
+ * @exception IllegalArgumentException If owner is null or
+ * GraphicsEnvironment.isHeadless() returns true.
*/
public
Dialog(Frame parent, String title, boolean modal)
{
- super(parent);
+ this (parent, title, modal, parent.getGraphicsConfiguration ());
+}
+
+/**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title, modality and <code>GraphicsConfiguration</code>,
+ * that is not resizable.
+ *
+ * @param parent The parent frame of this dialog box.
+ * @param title The title string for this dialog box.
+ * @param modal <true> if this dialog box is modal, <code>false</code>
+ * otherwise.
+ * @param gc The <code>GraphicsConfiguration</code> object to use.
+ *
+ * @exception IllegalArgumentException If owner is null, the
+ * GraphicsConfiguration is not a screen device or
+ * GraphicsEnvironment.isHeadless() returns true.
+ *
+ * @since 1.4
+ */
+public
+Dialog (Frame parent, String title, boolean modal, GraphicsConfiguration gc)
+{
+ super (parent, gc);
this.title = title;
this.modal = modal;
@@ -166,10 +192,19 @@ Dialog(Frame parent, String title, boolean modal)
setLayout(new BorderLayout());
}
+/**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, that is not resizable.
+ *
+ * @exception IllegalArgumentException If parent is null. This exception is
+ * always thrown when GraphicsEnvironment.isHeadless() returns true.
+ *
+ * @since 1.2
+ */
public
Dialog (Dialog owner)
{
- this (owner, "", false);
+ this (owner, "", false, owner.getGraphicsConfiguration ());
}
/**
@@ -184,7 +219,7 @@ Dialog (Dialog owner)
public
Dialog (Dialog owner, String title)
{
- this (owner, title, false);
+ this (owner, title, false, owner.getGraphicsConfiguration ());
}
/**
@@ -199,9 +234,29 @@ Dialog (Dialog owner, String title)
public
Dialog (Dialog owner, String title, boolean modal)
{
- super (owner);
+ this (owner, title, modal, owner.getGraphicsConfiguration ());
+}
+
+/**
+ * Initializes a new instance of <code>Dialog</code> with the specified,
+ * parent, title, modality and <code>GraphicsConfiguration</code>,
+ * that is not resizable.
+ *
+ * @exception IllegalArgumentException If parent is null, the
+ * GraphicsConfiguration is not a screen device or
+ * GraphicsEnvironment.isHeadless() returns true.
+ *
+ * @since 1.4
+ */
+public
+Dialog (Dialog parent, String title, boolean modal, GraphicsConfiguration gc)
+{
+ super (parent, parent.getGraphicsConfiguration ());
+
this.modal = modal;
this.title = title;
+ resizable = false;
+
setLayout (new BorderLayout ());
}
diff --git a/libjava/java/awt/EventQueue.java b/libjava/java/awt/EventQueue.java
index 6b64fb7ee3b..90ba6eafcf1 100644
--- a/libjava/java/awt/EventQueue.java
+++ b/libjava/java/awt/EventQueue.java
@@ -116,7 +116,8 @@ public class EventQueue
if (next_in != next_out)
return queue[next_out];
- else return null;
+ else
+ return null;
}
/**
@@ -142,7 +143,7 @@ public class EventQueue
{
AWTEvent qevt = queue[i];
if (qevt.id == id)
- return qevt;
+ return qevt;
}
return null;
}
@@ -159,7 +160,7 @@ public class EventQueue
if (next != null)
{
next.postEvent(evt);
- return;
+ return;
}
// FIXME: Security checks?
@@ -169,25 +170,25 @@ public class EventQueue
while (i != next_in)
{
AWTEvent qevt = queue[i];
- Object src;
- if (qevt.id == evt.id
- && (src = qevt.getSource()) == evt.getSource()
- && src instanceof Component)
- {
- /* If there are, call coalesceEvents on the source component
- to see if they can be combined. */
- Component srccmp = (Component) src;
- AWTEvent coalesced_evt = srccmp.coalesceEvents(qevt, evt);
- if (coalesced_evt != null)
- {
- /* Yes. Replace the existing event with the combined event. */
- queue[i] = coalesced_evt;
- return;
- }
+ Object src;
+ if (qevt.id == evt.id
+ && (src = qevt.getSource()) == evt.getSource()
+ && src instanceof Component)
+ {
+ /* If there are, call coalesceEvents on the source component
+ to see if they can be combined. */
+ Component srccmp = (Component) src;
+ AWTEvent coalesced_evt = srccmp.coalesceEvents(qevt, evt);
+ if (coalesced_evt != null)
+ {
+ /* Yes. Replace the existing event with the combined event. */
+ queue[i] = coalesced_evt;
+ return;
+ }
break;
- }
- if (++i == queue.length)
- i = 0;
+ }
+ if (++i == queue.length)
+ i = 0;
}
queue[next_in] = evt;
@@ -198,15 +199,15 @@ public class EventQueue
{
/* Queue is full. Extend it. */
AWTEvent[] oldQueue = queue;
- queue = new AWTEvent[queue.length * 2];
+ queue = new AWTEvent[queue.length * 2];
- int len = oldQueue.length - next_out;
- System.arraycopy(oldQueue, next_out, queue, 0, len);
- if (next_out != 0)
- System.arraycopy(oldQueue, 0, queue, len, next_out);
+ int len = oldQueue.length - next_out;
+ System.arraycopy(oldQueue, next_out, queue, 0, len);
+ if (next_out != 0)
+ System.arraycopy(oldQueue, 0, queue, len, next_out);
- next_out = 0;
- next_in = oldQueue.length;
+ next_out = 0;
+ next_in = oldQueue.length;
}
notify();
}
@@ -237,8 +238,8 @@ public class EventQueue
synchronized (current)
{
- eq.postEvent(ie);
- current.wait();
+ eq.postEvent(ie);
+ current.wait();
}
Exception exception;
@@ -247,7 +248,9 @@ public class EventQueue
throw new InvocationTargetException(exception);
}
- /** @since JDK1.2 */
+ /**
+ * @since 1.2
+ */
public static void invokeLater(Runnable runnable)
{
EventQueue eq = Toolkit.getDefaultToolkit().getSystemEventQueue();
@@ -264,22 +267,26 @@ public class EventQueue
return (Thread.currentThread() == eq.dispatchThread);
}
- /** Allows a custom EventQueue implementation to replace this one.
- * All pending events are transferred to the new queue. Calls to postEvent,
- * getNextEvent, and peekEvent are forwarded to the pushed queue until it
- * is removed with a pop().
- *
- * @exception NullPointerException if newEventQueue is null.
- */
+ /**
+ * Allows a custom EventQueue implementation to replace this one.
+ * All pending events are transferred to the new queue. Calls to postEvent,
+ * getNextEvent, and peekEvent are forwarded to the pushed queue until it
+ * is removed with a pop().
+ *
+ * @exception NullPointerException if newEventQueue is null.
+ */
public synchronized void push(EventQueue newEventQueue)
{
+ if (newEventQueue == null)
+ throw new NullPointerException ();
+
int i = next_out;
while (i != next_in)
{
newEventQueue.postEvent(queue[i]);
- next_out = i;
- if (++i == queue.length)
- i = 0;
+ next_out = i;
+ if (++i == queue.length)
+ i = 0;
}
next = newEventQueue;
@@ -301,19 +308,19 @@ public class EventQueue
// occur.
synchronized (prev)
{
- prev.next = null;
+ prev.next = null;
}
synchronized (this)
{
- int i = next_out;
- while (i != next_in)
- {
+ int i = next_out;
+ while (i != next_in)
+ {
prev.postEvent(queue[i]);
- next_out = i;
- if (++i == queue.length)
- i = 0;
- }
+ next_out = i;
+ if (++i == queue.length)
+ i = 0;
+ }
}
}
@@ -328,22 +335,22 @@ public class EventQueue
if (evt instanceof ActiveEvent)
{
ActiveEvent active_evt = (ActiveEvent) evt;
- active_evt.dispatch();
+ active_evt.dispatch();
}
else
{
- Object source = evt.getSource();
+ Object source = evt.getSource();
- if (source instanceof Component)
- {
+ if (source instanceof Component)
+ {
Component srccmp = (Component) source;
- srccmp.dispatchEvent(evt);
- }
- else if (source instanceof MenuComponent)
- {
- MenuComponent srccmp = (MenuComponent) source;
- srccmp.dispatchEvent(evt);
- }
+ srccmp.dispatchEvent(evt);
+ }
+ else if (source instanceof MenuComponent)
+ {
+ MenuComponent srccmp = (MenuComponent) source;
+ srccmp.dispatchEvent(evt);
+ }
}
}
diff --git a/libjava/java/awt/FocusTraversalPolicy.java b/libjava/java/awt/FocusTraversalPolicy.java
index fcabeceb375..0354a7fe1a2 100644
--- a/libjava/java/awt/FocusTraversalPolicy.java
+++ b/libjava/java/awt/FocusTraversalPolicy.java
@@ -39,26 +39,63 @@ exception statement from your version. */
package java.awt;
/**
- * STUB CLASS ONLY
+ * @since 1.4
*/
public abstract class FocusTraversalPolicy
{
+ /**
+ * Creates a <code>FocusTraversalPolicy</code> object.
+ */
public FocusTraversalPolicy()
{
+ // Do nothing in here.
}
+ /**
+ * Returns the Component that should receive the focus after a Component.
+ *
+ * @exception IllegalArgumentException If root or current is null,
+ * or if root is not a focus cycle root of current.
+ */
public abstract Component getComponentAfter(Container root,
Component current);
+ /**
+ * Returns the Component that should receive the focus before a Component.
+ *
+ * @exception IllegalArgumentException If root or current is null,
+ * or if root is not a focus cycle root of current.
+ */
public abstract Component getComponentBefore(Container root,
Component current);
+ /**
+ * Returns the first Component in the traversal cycle.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public abstract Component getFirstComponent(Container root);
+ /**
+ * Returns the last Component in the traversal cycle.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public abstract Component getLastComponent(Container root);
+ /**
+ * Returns the default Component to focus.
+ *
+ * @exception IllegalArgumentException If root is null.
+ */
public abstract Component getDefaultComponent(Container root);
+ /**
+ * Returns the Component that should receive the focus when a Window is made
+ * visible for the first time.
+ *
+ * @exception IllegalArgumentException If window is null.
+ */
public Component getInitialComponent(Window window)
{
return getDefaultComponent(window);
diff --git a/libjava/java/awt/Frame.java b/libjava/java/awt/Frame.java
index 8c08a2e9b7b..c6742b0c321 100644
--- a/libjava/java/awt/Frame.java
+++ b/libjava/java/awt/Frame.java
@@ -60,7 +60,7 @@ public class Frame extends Window implements MenuContainer
/**
* Constant for the default cursor.
- * Deprecated. replaced by <code>Cursor.DEFAULT_CURSOR</code> instead.
+ * @deprecated Replaced by <code>Cursor.DEFAULT_CURSOR</code> instead.
*/
public static final int DEFAULT_CURSOR = Cursor.DEFAULT_CURSOR;
@@ -390,7 +390,7 @@ getCursorType()
*
* @param type The cursor type.
*
- * @deprecated. Use <code>Component.setCursor(Cursor)</code> instead.
+ * @deprecated Use <code>Component.setCursor(Cursor)</code> instead.
*/
public void
setCursor(int type)
diff --git a/libjava/java/awt/List.java b/libjava/java/awt/List.java
index 9e59041f781..b57cc89f555 100644
--- a/libjava/java/awt/List.java
+++ b/libjava/java/awt/List.java
@@ -299,6 +299,8 @@ setMultipleMode(boolean multipleMode)
*
* @param multipleMode <code>true</code> to enable multiple mode,
* <code>false</code> otherwise.
+ *
+ * @deprecated
*/
public void
setMultipleSelections(boolean multipleMode)
@@ -523,6 +525,8 @@ addItem(String item, int index)
* @param index The index of the item to delete.
*
* @exception IllegalArgumentException If the index is not valid
+ *
+ * @deprecated
*/
public void
delItem(int index) throws IllegalArgumentException
diff --git a/libjava/java/awt/MenuComponent.java b/libjava/java/awt/MenuComponent.java
index 09c25c9d1af..7cd85325747 100644
--- a/libjava/java/awt/MenuComponent.java
+++ b/libjava/java/awt/MenuComponent.java
@@ -186,6 +186,8 @@ setParent(MenuContainer parent)
* Returns the native windowing system peer for this component.
*
* @return The peer for this component.
+ *
+ * @deprecated
*/
public MenuComponentPeer
getPeer()
diff --git a/libjava/java/awt/Robot.java b/libjava/java/awt/Robot.java
index 1de5f3f3706..cc0ab15c6e9 100644
--- a/libjava/java/awt/Robot.java
+++ b/libjava/java/awt/Robot.java
@@ -45,66 +45,98 @@ public class Robot
{
private boolean waitForIdle;
private int autoDelay;
+
+ /**
+ * Creates a <code>Robot</code> object.
+ *
+ * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
+ * @exception SecurityException If createRobot permission is not granted.
+ */
public Robot() throws AWTException
{
throw new Error("not implemented");
}
+
+ /**
+ * Creates a <code>Robot</code> object.
+ *
+ * @exception AWTException If GraphicsEnvironment.isHeadless() returns true.
+ * @exception IllegalArgumentException If <code>screen</code> is not a screen
+ * GraphicsDevice.
+ * @exception SecurityException If createRobot permission is not granted.
+ */
public Robot(GraphicsDevice screen) throws AWTException
{
this();
}
+
public void mouseMove(int x, int y)
{
}
+
public void mousePress(int buttons)
{
}
+
public void mouseRelease(int buttons)
{
}
+
public void mouseWheel(int wheelAmt)
{
}
+
public void keyPress(int keycode)
{
}
+
public void keyRelease(int keycode)
{
}
+
public Color getPixelColor(int x, int y)
{
return null;
}
+
public BufferedImage createScreenCapture(Rectangle screen)
{
return null;
}
+
public boolean isAutoWaitForIdle()
{
return waitForIdle;
}
+
public void setAutoWaitForIdle(boolean value)
{
waitForIdle = value;
}
+
public int getAutoDelay()
{
return autoDelay;
}
+
public void setAutoDelay(int ms)
{
if (ms < 0 || ms > 60000)
throw new IllegalArgumentException();
+
autoDelay = ms;
}
+
public void delay(int ms)
{
if (ms < 0 || ms > 60000)
throw new IllegalArgumentException();
}
+
public void waitForIdle()
{
}
+
public String toString()
{
return "unimplemented";
diff --git a/libjava/java/awt/ScrollPane.java b/libjava/java/awt/ScrollPane.java
index 9b8b82a9a95..930ace7d1b5 100644
--- a/libjava/java/awt/ScrollPane.java
+++ b/libjava/java/awt/ScrollPane.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package java.awt;
+import java.awt.event.MouseEvent;
import java.awt.peer.ScrollPanePeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.ComponentPeer;
@@ -105,6 +106,8 @@ private int scrollbarDisplayPolicy;
// Current scroll position
private Point scrollPosition = new Point(0, 0);
+private boolean wheelScrollingEnabled;
+
/*************************************************************************/
/*
@@ -150,9 +153,11 @@ ScrollPane(int scrollbarDisplayPolicy)
if (scrollbarDisplayPolicy != SCROLLBARS_NEVER)
{
- hAdjustable = new ScrollPaneAdjustable(Scrollbar.HORIZONTAL);
- vAdjustable = new ScrollPaneAdjustable(Scrollbar.VERTICAL);
+ hAdjustable = new ScrollPaneAdjustable (this, Scrollbar.HORIZONTAL);
+ vAdjustable = new ScrollPaneAdjustable (this, Scrollbar.VERTICAL);
}
+
+ wheelScrollingEnabled = true;
}
/*************************************************************************/
@@ -210,23 +215,17 @@ getVAdjustable()
*
* @return The viewport size.
*/
-public Dimension
-getViewportSize()
+public Dimension getViewportSize ()
{
- Dimension viewsize = getSize();
- Insets insets = getInsets();
- viewsize.width = viewsize.width - (insets.left + insets.right);
- viewsize.height = viewsize.height - (insets.top + insets.bottom);
-
- ScrollPaneAdjustable v = (ScrollPaneAdjustable)getVAdjustable();
- ScrollPaneAdjustable h = (ScrollPaneAdjustable)getHAdjustable();
-
- if ((v != null) && v.isVisible())
- viewsize.width = viewsize.width - v.getSize().width;
- if ((h != null) && h.isVisible())
- viewsize.height = viewsize.height - v.getSize().height;
-
- return(viewsize);
+ Dimension viewsize = getSize ();
+ Insets insets = getInsets ();
+ viewsize.width = (viewsize.width
+ - (insets.left + insets.right)
+ - getVScrollbarWidth ());
+ viewsize.height = (viewsize.height
+ - (insets.top + insets.bottom)
+ - getHScrollbarHeight ());
+ return viewsize;
}
/*************************************************************************/
@@ -338,15 +337,11 @@ setScrollPosition(int x, int y)
public void
addNotify()
{
- if (getPeer() == null)
+ if (!isDisplayable ())
return;
setPeer((ComponentPeer)getToolkit().createScrollPane(this));
-
- if (hAdjustable != null)
- hAdjustable.addNotify();
- if (vAdjustable != null)
- vAdjustable.removeNotify();
+ super.addNotify();
}
/*************************************************************************/
@@ -357,11 +352,6 @@ addNotify()
public void
removeNotify()
{
- if (hAdjustable != null)
- hAdjustable.removeNotify();
- if (vAdjustable != null)
- vAdjustable.removeNotify();
-
super.removeNotify();
}
@@ -470,5 +460,37 @@ paramString()
return(getClass().getName());
}
+ /**
+ * Tells whether or not an event is enabled.
+ *
+ * @since 1.4
+ */
+ public boolean eventTypeEnabled (int type)
+ {
+ if (type == MouseEvent.MOUSE_WHEEL)
+ return wheelScrollingEnabled;
+
+ return super.eventTypeEnabled (type);
+ }
+
+ /**
+ * Tells whether or not wheel scrolling is enabled.
+ *
+ * @since 1.4
+ */
+ public boolean isWheelScrollingEnabled ()
+ {
+ return wheelScrollingEnabled;
+ }
+
+ /**
+ * Enables/disables wheel scrolling.
+ *
+ * @since 1.4
+ */
+ public void setWheelScrollingEnabled (boolean enable)
+ {
+ wheelScrollingEnabled = enable;
+ }
} // class ScrollPane
diff --git a/libjava/java/awt/ScrollPaneAdjustable.java b/libjava/java/awt/ScrollPaneAdjustable.java
index 152f4d6e554..13131f9c45b 100644
--- a/libjava/java/awt/ScrollPaneAdjustable.java
+++ b/libjava/java/awt/ScrollPaneAdjustable.java
@@ -38,29 +38,142 @@ exception statement from your version. */
package java.awt;
+import java.awt.event.AdjustmentListener;
+import java.io.Serializable;
+
/**
* Need this class since the serialization spec for ScrollPane
* uses it.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
+ * @since 1.4
*/
-class ScrollPaneAdjustable extends Scrollbar
+public class ScrollPaneAdjustable
+ implements Adjustable, Serializable
{
- public ScrollPaneAdjustable (int orientation)
+ private static final long serialVersionUID = -3359745691033257079L;
+
+ ScrollPane sp;
+ int orientation;
+ int value;
+ int minimum;
+ int maximum;
+ int visibleAmount;
+ int unitIncrement = 1;
+ int blockIncrement = 1;
+ AdjustmentListener adjustmentListener;
+
+ ScrollPaneAdjustable (ScrollPane sp, int orientation)
+ {
+ this.sp = sp;
+ this.orientation = orientation;
+ }
+
+ ScrollPaneAdjustable (ScrollPane sp, int orientation, int value, int minimum,
+ int maximum, int visibleAmount, int unitIncrement,
+ int blockIncrement)
+ {
+ this.sp = sp;
+ this.orientation = orientation;
+ this.value = value;
+ this.minimum = minimum;
+ this.maximum = maximum;
+ this.visibleAmount = visibleAmount;
+ this.unitIncrement = unitIncrement;
+ this.blockIncrement = blockIncrement;
+ }
+
+ public void addAdjustmentListener (AdjustmentListener listener)
+ {
+ AWTEventMulticaster.add (adjustmentListener, listener);
+ }
+
+ public void removeAdjustmentListener (AdjustmentListener listener)
+ {
+ AWTEventMulticaster.remove (adjustmentListener, listener);
+ }
+
+ public AdjustmentListener[] getAdjustmentListeners ()
+ {
+ return (AdjustmentListener[]) AWTEventMulticaster.getListeners
+ (adjustmentListener, AdjustmentListener.class);
+ }
+
+ public int getBlockIncrement ()
+ {
+ return blockIncrement;
+ }
+
+ public int getMaximum ()
+ {
+ return maximum;
+ }
+
+ public int getMinimum ()
+ {
+ return minimum;
+ }
+
+ public int getOrientation ()
{
- super (orientation);
+ return orientation;
}
+ public int getUnitIncrement ()
+ {
+ return unitIncrement;
+ }
+
+ public int getValue ()
+ {
+ return value;
+ }
+
+ public int getVisibleAmount ()
+ {
+ return visibleAmount;
+ }
+
+ public void setBlockIncrement (int blockIncrement)
+ {
+ this.blockIncrement = blockIncrement;
+ }
+
public void setMaximum (int maximum)
{
+ this.maximum = maximum;
}
public void setMinimum (int minimum)
{
+ this.minimum = minimum;
}
+ public void setUnitIncrement (int unitIncrement)
+ {
+ this.unitIncrement = unitIncrement;
+ }
+
+ public void setValue (int value)
+ {
+ this.value = value;
+
+ if (value < minimum)
+ minimum = value;
+
+ if (value > maximum)
+ maximum = value;
+ }
+
public void setVisibleAmount (int visibleAmount)
{
+ this.visibleAmount = visibleAmount;
}
+
+ public String paramString ()
+ {
+ throw new Error ("not implemented");
+ }
+
} // class ScrollPaneAdjustable
diff --git a/libjava/java/awt/Toolkit.java b/libjava/java/awt/Toolkit.java
index 7fc3ac0e164..36615944a20 100644
--- a/libjava/java/awt/Toolkit.java
+++ b/libjava/java/awt/Toolkit.java
@@ -448,6 +448,8 @@ public abstract class Toolkit
* Returns the names of the available fonts.
*
* @return The names of the available fonts.
+ *
+ * @deprecated
*/
public abstract String[] getFontList();
@@ -457,6 +459,8 @@ public abstract class Toolkit
* @param name The name of the font to return metrics for.
*
* @return The requested font metrics.
+ *
+ * @deprecated
*/
public abstract FontMetrics getFontMetrics(Font name);
@@ -597,12 +601,32 @@ public abstract class Toolkit
*
* @return The requested print job, or <code>null</code> if the job
* was cancelled.
+ *
+ * @exception NullPointerException If frame is null,
+ * or GraphicsEnvironment.isHeadless() returns true.
+ * @exception SecurityException If this thread is not allowed to initiate
+ * a print job request.
*/
public abstract PrintJob getPrintJob(Frame frame, String title,
Properties props);
-
/**
+ * Returns a instance of <code>PrintJob</code> for the specified
+ * arguments.
+ *
+ * @param frame The window initiating the print job.
+ * @param title The print job title.
+ * @param jobAttr A set of job attributes which will control the print job.
+ * @param pageAttr A set of page attributes which will control the print job.
+ *
+ * @exception NullPointerException If frame is null, and either jobAttr is null
+ * or jobAttr.getDialog() returns JobAttributes.DialogType.NATIVE.
+ * @exception IllegalArgumentException If pageAttrspecifies differing cross
+ * feed and feed resolutions, or when GraphicsEnvironment.isHeadless() returns
+ * true.
+ * @exception SecurityException If this thread is not allowed to initiate
+ * a print job request.
+ *
* @since 1.3
*/
public PrintJob getPrintJob(Frame frame, String title,
@@ -626,6 +650,8 @@ public abstract class Toolkit
public abstract Clipboard getSystemClipboard();
/**
+ * Gets the singleton instance of the system selection as a Clipboard object.
+ *
* @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
*
* @since 1.4
@@ -649,21 +675,42 @@ public abstract class Toolkit
return Event.CTRL_MASK;
}
+ /**
+ * Returns whether the given locking key on the keyboard is currently in its
+ * "on" state.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ * @exception IllegalArgumentException If keyCode is not one of the valid keys.
+ * @exception UnsupportedOperationException If the host system doesn't allow
+ * getting the state of this key programmatically, or if the keyboard doesn't
+ * have this key.
+ */
public boolean getLockingKeyState(int keyCode)
{
if (keyCode != KeyEvent.VK_CAPS_LOCK
&& keyCode != KeyEvent.VK_NUM_LOCK
&& keyCode != KeyEvent.VK_SCROLL_LOCK)
throw new IllegalArgumentException();
+
throw new UnsupportedOperationException();
}
+ /**
+ * Sets the state of the given locking key on the keyboard.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ * @exception IllegalArgumentException If keyCode is not one of the valid keys.
+ * @exception UnsupportedOperationException If the host system doesn't allow
+ * getting the state of this key programmatically, or if the keyboard doesn't
+ * have this key.
+ */
public void setLockingKeyState(int keyCode, boolean on)
{
if (keyCode != KeyEvent.VK_CAPS_LOCK
&& keyCode != KeyEvent.VK_NUM_LOCK
&& keyCode != KeyEvent.VK_SCROLL_LOCK)
throw new IllegalArgumentException();
+
throw new UnsupportedOperationException();
}
@@ -697,6 +744,13 @@ public abstract class Toolkit
}
}
+ /**
+ * Creates a new custom cursor object.
+ *
+ * @exception IndexOutOfBoundsException If the hotSpot values are outside
+ * the bounds of the cursor.
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ */
public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
{
// Presumably the only reason this isn't abstract is for backwards
@@ -704,17 +758,33 @@ public abstract class Toolkit
return null;
}
+ /**
+ * Returns the supported cursor dimension which is closest to the
+ * desired sizes.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ */
public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
{
return new Dimension (0,0);
}
+ /**
+ * Returns the maximum number of colors the Toolkit supports in a custom
+ * cursor palette.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ */
public int getMaximumCursorColors()
{
return 0;
}
/**
+ * Returns whether Toolkit supports this state for Frames.
+ *
+ * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
+ *
* @since 1.4
*/
public boolean isFrameStateSupported(int state)
diff --git a/libjava/java/awt/Window.java b/libjava/java/awt/Window.java
index 805152e5405..80c47594397 100644
--- a/libjava/java/awt/Window.java
+++ b/libjava/java/awt/Window.java
@@ -213,14 +213,14 @@ public class Window extends Container
addNotify();
validate();
- super.show();
+ setVisible (true);
toFront();
}
public void hide()
{
// FIXME: call hide() on any "owned" children here.
- super.hide();
+ setVisible (false);
}
public boolean isDisplayable()
@@ -503,30 +503,37 @@ public class Window extends Container
{
if (windowListener != null)
{
- switch (evt.getID())
- {
- case WindowEvent.WINDOW_ACTIVATED:
- windowListener.windowActivated(evt);
- break;
- case WindowEvent.WINDOW_CLOSED:
- windowListener.windowClosed(evt);
- break;
- case WindowEvent.WINDOW_CLOSING:
- windowListener.windowClosing(evt);
- break;
- case WindowEvent.WINDOW_DEACTIVATED:
- windowListener.windowDeactivated(evt);
- break;
- case WindowEvent.WINDOW_DEICONIFIED:
- windowListener.windowDeiconified(evt);
- break;
- case WindowEvent.WINDOW_ICONIFIED:
- windowListener.windowIconified(evt);
- break;
- case WindowEvent.WINDOW_OPENED:
- windowListener.windowOpened(evt);
- break;
- }
+ switch (evt.getID())
+ {
+ case WindowEvent.WINDOW_ACTIVATED:
+ windowListener.windowActivated(evt);
+ break;
+ case WindowEvent.WINDOW_CLOSED:
+ windowListener.windowClosed(evt);
+ break;
+ case WindowEvent.WINDOW_CLOSING:
+ windowListener.windowClosing(evt);
+ break;
+ case WindowEvent.WINDOW_DEACTIVATED:
+ windowListener.windowDeactivated(evt);
+ break;
+ case WindowEvent.WINDOW_DEICONIFIED:
+ windowListener.windowDeiconified(evt);
+ break;
+ case WindowEvent.WINDOW_ICONIFIED:
+ windowListener.windowIconified(evt);
+ break;
+ case WindowEvent.WINDOW_OPENED:
+ windowListener.windowOpened(evt);
+ break;
+ case WindowEvent.WINDOW_GAINED_FOCUS:
+ case WindowEvent.WINDOW_LOST_FOCUS:
+ processWindowFocusEvent (evt);
+ break;
+ case WindowEvent.WINDOW_STATE_CHANGED:
+ processWindowStateEvent (evt);
+ break;
+ }
}
}
@@ -548,6 +555,8 @@ public class Window extends Container
* Post a Java 1.0 event to the event queue.
*
* @param event The event to post.
+ *
+ * @deprecated
*/
public boolean postEvent(Event e)
{
@@ -566,13 +575,21 @@ public class Window extends Container
return super.isShowing();
}
- /** @since 1.2 */
+ /**
+ * @since 1.2
+ *
+ * @deprecated
+ */
public void applyResourceBundle(ResourceBundle rb)
{
// FIXME
}
- /** @since 1.2 */
+ /**
+ * @since 1.2
+ *
+ * @deprecated
+ */
public void applyResourceBundle(String rbName)
{
ResourceBundle rb = ResourceBundle.getBundle(rbName);
@@ -598,4 +615,34 @@ public class Window extends Container
if (peer != null) return peer.getGraphicsConfiguration();
return null;
}
+
+ protected void processWindowFocusEvent(WindowEvent event)
+ {
+ if (windowFocusListener != null)
+ {
+ switch (event.getID ())
+ {
+ case WindowEvent.WINDOW_GAINED_FOCUS:
+ windowFocusListener.windowGainedFocus (event);
+ break;
+
+ case WindowEvent.WINDOW_LOST_FOCUS:
+ windowFocusListener.windowLostFocus (event);
+ break;
+
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * @since 1.4
+ */
+ protected void processWindowStateEvent(WindowEvent event)
+ {
+ if (windowStateListener != null
+ && event.getID () == WindowEvent.WINDOW_STATE_CHANGED)
+ windowStateListener.windowStateChanged (event);
+ }
}
diff --git a/libjava/java/awt/datatransfer/DataFlavor.java b/libjava/java/awt/datatransfer/DataFlavor.java
index 7239adde772..2603b6e3954 100644
--- a/libjava/java/awt/datatransfer/DataFlavor.java
+++ b/libjava/java/awt/datatransfer/DataFlavor.java
@@ -49,13 +49,14 @@ import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
+import java.nio.charset.Charset;
/**
- * This class represents a particular data format used for transferring
- * data via the clipboard.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
+ * This class represents a particular data format used for transferring
+ * data via the clipboard.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
public class DataFlavor implements java.io.Externalizable, Cloneable
{
static final long serialVersionUID = 8367026044764648243L;
@@ -67,50 +68,50 @@ public class DataFlavor implements java.io.Externalizable, Cloneable
*/
/**
- * This is the data flavor used for tranferring plain text. The MIME
- * type is "text/plain; charset=unicode". The representation class
- * is <code>java.io.InputStream</code>.
- *
- * @deprecated The charset unicode is platform specific and InputStream
- * deals with bytes not chars. Use <code>getRederForText()</code>.
- */
+ * This is the data flavor used for tranferring plain text. The MIME
+ * type is "text/plain; charset=unicode". The representation class
+ * is <code>java.io.InputStream</code>.
+ *
+ * @deprecated The charset unicode is platform specific and InputStream
+ * deals with bytes not chars. Use <code>getRederForText()</code>.
+ */
public static final DataFlavor plainTextFlavor;
/**
- * This is the data flavor used for transferring Java strings. The
- * MIME type is "application/x-java-serialized-object" and the
- * representation class is <code>java.lang.String</code>.
- */
+ * This is the data flavor used for transferring Java strings. The
+ * MIME type is "application/x-java-serialized-object" and the
+ * representation class is <code>java.lang.String</code>.
+ */
public static final DataFlavor stringFlavor;
/**
- * This is a data flavor used for transferring lists of files. The
- * representation type is a <code>java.util.List</code>, with each element of
- * the list being a <code>java.io.File</code>.
- */
+ * This is a data flavor used for transferring lists of files. The
+ * representation type is a <code>java.util.List</code>, with each element of
+ * the list being a <code>java.io.File</code>.
+ */
public static final DataFlavor javaFileListFlavor;
public static final DataFlavor imageFlavor;
/**
- * This is the MIME type used for transferring a serialized object.
- * The representation class is the type of object be deserialized.
- */
+ * This is the MIME type used for transferring a serialized object.
+ * The representation class is the type of object be deserialized.
+ */
public static final String javaSerializedObjectMimeType =
"application/x-java-serialized-object";
/**
- * This is the MIME type used to transfer a Java object reference within
- * the same JVM. The representation class is the class of the object
- * being transferred.
- */
+ * This is the MIME type used to transfer a Java object reference within
+ * the same JVM. The representation class is the class of the object
+ * being transferred.
+ */
public static final String javaJVMLocalObjectMimeType =
"application/x-java-jvm-local-object";
/**
- * This is the MIME type used to transfer a link to a remote object.
- * The representation class is the type of object being linked to.
- */
+ * This is the MIME type used to transfer a link to a remote object.
+ * The representation class is the type of object being linked to.
+ */
public static final String javaRemoteObjectMimeType =
"application/x-java-remote-object";
@@ -158,17 +159,17 @@ private String humanPresentableName;
*/
/**
- * This method attempts to load the named class. The following class
- * loaders are searched in order: the bootstrap class loader, the
- * system class loader, the context class loader (if it exists), and
- * the specified fallback class loader.
- *
- * @param className The name of the class to load.
- * @param classLoader The class loader to use if all others fail, which
- * may be <code>null</code>.
- *
- * @exception ClassNotFoundException If the class cannot be loaded.
- */
+ * This method attempts to load the named class. The following class
+ * loaders are searched in order: the bootstrap class loader, the
+ * system class loader, the context class loader (if it exists), and
+ * the specified fallback class loader.
+ *
+ * @param className The name of the class to load.
+ * @param classLoader The class loader to use if all others fail, which
+ * may be <code>null</code>.
+ *
+ * @exception ClassNotFoundException If the class cannot be loaded.
+ */
protected static final Class
tryToLoadClass(String className, ClassLoader classLoader)
throws ClassNotFoundException
@@ -214,9 +215,9 @@ tryToLoadClass(String className, ClassLoader classLoader)
*/
/**
- * Empty public constructor needed for externalization.
- * Should not be used for normal instantiation.
- */
+ * Empty public constructor needed for externalization.
+ * Should not be used for normal instantiation.
+ */
public
DataFlavor()
{
@@ -228,8 +229,8 @@ DataFlavor()
/*************************************************************************/
/**
- * Private constructor.
- */
+ * Private constructor.
+ */
private
DataFlavor(Class representationClass,
String mimeType,
@@ -246,15 +247,15 @@ DataFlavor(Class representationClass,
/*************************************************************************/
/**
- * Initializes a new instance of <code>DataFlavor</code>. The class
- * and human readable name are specified, the MIME type will be
- * "application/x-java-serialized-object". If the human readable name
- * is not specified (<code>null</code>) then the human readable name
- * will be the same as the MIME type.
- *
- * @param representationClass The representation class for this object.
- * @param humanPresentableName The display name of the object.
- */
+ * Initializes a new instance of <code>DataFlavor</code>. The class
+ * and human readable name are specified, the MIME type will be
+ * "application/x-java-serialized-object". If the human readable name
+ * is not specified (<code>null</code>) then the human readable name
+ * will be the same as the MIME type.
+ *
+ * @param representationClass The representation class for this object.
+ * @param humanPresentableName The display name of the object.
+ */
public
DataFlavor(Class representationClass, String humanPresentableName)
{
@@ -268,23 +269,23 @@ DataFlavor(Class representationClass, String humanPresentableName)
/*************************************************************************/
/**
- * Initializes a new instance of <code>DataFlavor</code> with the
- * specified MIME type and description. If the MIME type has a
- * "class=<rep class>" parameter then the representation class will
- * be the class name specified. Otherwise the class defaults to
- * <code>java.io.InputStream</code>. If the human readable name
- * is not specified (<code>null</code>) then the human readable name
- * will be the same as the MIME type.
- *
- * @param mimeType The MIME type for this flavor.
- * @param humanPresentableName The display name of this flavor.
- * @param classLoader The class loader for finding classes if the default
- * class loaders do not work.
- *
- * @exception IllegalArgumentException If the representation class
- * specified cannot be loaded.
- * @exception ClassNotFoundException If the class is not loaded.
- */
+ * Initializes a new instance of <code>DataFlavor</code> with the
+ * specified MIME type and description. If the MIME type has a
+ * "class=<rep class>" parameter then the representation class will
+ * be the class name specified. Otherwise the class defaults to
+ * <code>java.io.InputStream</code>. If the human readable name
+ * is not specified (<code>null</code>) then the human readable name
+ * will be the same as the MIME type.
+ *
+ * @param mimeType The MIME type for this flavor.
+ * @param humanPresentableName The display name of this flavor.
+ * @param classLoader The class loader for finding classes if the default
+ * class loaders do not work.
+ *
+ * @exception IllegalArgumentException If the representation class
+ * specified cannot be loaded.
+ * @exception ClassNotFoundException If the class is not loaded.
+ */
public
DataFlavor(String mimeType, String humanPresentableName,
ClassLoader classLoader) throws ClassNotFoundException
@@ -317,45 +318,44 @@ getRepresentationClassFromMime(String mimeString, ClassLoader classLoader)
/*************************************************************************/
/**
- * Initializes a new instance of <code>DataFlavor</code> with the
- * specified MIME type and description. If the MIME type has a
- * "class=<rep class>" parameter then the representation class will
- * be the class name specified. Otherwise the class defaults to
- * <code>java.io.InputStream</code>. If the human readable name
- * is not specified (<code>null</code>) then the human readable name
- * will be the same as the MIME type. This is the same as calling
- * <code>new DataFlavor(mimeType, humanPresentableName, null)</code>.
- *
- * @param mimeType The MIME type for this flavor.
- * @param humanPresentableName The display name of this flavor.
- * @param classLoader The class loader for finding classes.
- *
- * @exception IllegalArgumentException If the representation class
- * specified cannot be loaded.
- */
+ * Initializes a new instance of <code>DataFlavor</code> with the
+ * specified MIME type and description. If the MIME type has a
+ * "class=<rep class>" parameter then the representation class will
+ * be the class name specified. Otherwise the class defaults to
+ * <code>java.io.InputStream</code>. If the human readable name
+ * is not specified (<code>null</code>) then the human readable name
+ * will be the same as the MIME type. This is the same as calling
+ * <code>new DataFlavor(mimeType, humanPresentableName, null)</code>.
+ *
+ * @param mimeType The MIME type for this flavor.
+ * @param humanPresentableName The display name of this flavor.
+ * @param classLoader The class loader for finding classes.
+ *
+ * @exception IllegalArgumentException If the representation class
+ * specified cannot be loaded.
+ */
public
DataFlavor(String mimeType, String humanPresentableName)
- throws ClassNotFoundException
{
- this(mimeType, humanPresentableName, null);
+ this (getRepresentationClassFromMime (mimeType, null), humanPresentableName);
}
/*************************************************************************/
/**
- * Initializes a new instance of <code>DataFlavor</code> with the specified
- * MIME type. This type can have a "class=" parameter to specify the
- * representation class, and then the class must exist or an exception will
- * be thrown. If there is no "class=" parameter then the representation class
- * will be <code>java.io.InputStream</code>. This is the same as calling
- * <code>new DataFlavor(mimeType, null)</code>.
- *
- * @param mimeType The MIME type for this flavor.
- *
- * @exception IllegalArgumentException If a class is not specified in
- * the MIME type.
- * @exception ClassNotFoundException If the class cannot be loaded.
- */
+ * Initializes a new instance of <code>DataFlavor</code> with the specified
+ * MIME type. This type can have a "class=" parameter to specify the
+ * representation class, and then the class must exist or an exception will
+ * be thrown. If there is no "class=" parameter then the representation class
+ * will be <code>java.io.InputStream</code>. This is the same as calling
+ * <code>new DataFlavor(mimeType, null)</code>.
+ *
+ * @param mimeType The MIME type for this flavor.
+ *
+ * @exception IllegalArgumentException If a class is not specified in
+ * the MIME type.
+ * @exception ClassNotFoundException If the class cannot be loaded.
+ */
public
DataFlavor(String mimeType) throws ClassNotFoundException
{
@@ -365,10 +365,10 @@ DataFlavor(String mimeType) throws ClassNotFoundException
/*************************************************************************/
/**
- * Returns the MIME type of this flavor.
- *
- * @return The MIME type for this flavor.
- */
+ * Returns the MIME type of this flavor.
+ *
+ * @return The MIME type for this flavor.
+ */
public String
getMimeType()
{
@@ -378,10 +378,10 @@ getMimeType()
/*************************************************************************/
/**
- * Returns the representation class for this flavor.
- *
- * @return The representation class for this flavor.
- */
+ * Returns the representation class for this flavor.
+ *
+ * @return The representation class for this flavor.
+ */
public Class
getRepresentationClass()
{
@@ -391,10 +391,10 @@ getRepresentationClass()
/*************************************************************************/
/**
- * Returns the human presentable name for this flavor.
- *
- * @return The human presentable name for this flavor.
- */
+ * Returns the human presentable name for this flavor.
+ *
+ * @return The human presentable name for this flavor.
+ */
public String
getHumanPresentableName()
{
@@ -404,10 +404,10 @@ getHumanPresentableName()
/*************************************************************************/
/**
- * Returns the primary MIME type for this flavor.
- *
- * @return The primary MIME type for this flavor.
- */
+ * Returns the primary MIME type for this flavor.
+ *
+ * @return The primary MIME type for this flavor.
+ */
public String
getPrimaryType()
{
@@ -421,10 +421,10 @@ getPrimaryType()
/*************************************************************************/
/**
- * Returns the MIME subtype for this flavor.
- *
- * @return The MIME subtype for this flavor.
- */
+ * Returns the MIME subtype for this flavor.
+ *
+ * @return The MIME subtype for this flavor.
+ */
public String
getSubType()
{
@@ -444,15 +444,15 @@ getSubType()
/*************************************************************************/
/**
- * Returns the value of the named MIME type parameter, or <code>null</code>
- * if the parameter does not exist. Given the parameter name and the mime
- * string.
- *
- * @param paramName The name of the parameter.
- * @param mimeString The mime string from where the name should be found.
- *
- * @return The value of the parameter or null.
- */
+ * Returns the value of the named MIME type parameter, or <code>null</code>
+ * if the parameter does not exist. Given the parameter name and the mime
+ * string.
+ *
+ * @param paramName The name of the parameter.
+ * @param mimeString The mime string from where the name should be found.
+ *
+ * @return The value of the parameter or null.
+ */
private static String
getParameter(String paramName, String mimeString)
{
@@ -470,14 +470,15 @@ getParameter(String paramName, String mimeString)
}
/*************************************************************************/
+
/**
- * Returns the value of the named MIME type parameter, or <code>null</code>
- * if the parameter does not exist.
- *
- * @param paramName The name of the paramter.
- *
- * @return The value of the parameter.
- */
+ * Returns the value of the named MIME type parameter, or <code>null</code>
+ * if the parameter does not exist.
+ *
+ * @param paramName The name of the paramter.
+ *
+ * @return The value of the parameter.
+ */
public String
getParameter(String paramName)
{
@@ -487,10 +488,10 @@ getParameter(String paramName)
/*************************************************************************/
/**
- * Sets the human presentable name to the specified value.
- *
- * @param humanPresentableName The new display name.
- */
+ * Sets the human presentable name to the specified value.
+ *
+ * @param humanPresentableName The new display name.
+ */
public void
setHumanPresentableName(String humanPresentableName)
{
@@ -500,16 +501,16 @@ setHumanPresentableName(String humanPresentableName)
/*************************************************************************/
/**
- * Tests the MIME type of this object for equality against the specified
- * MIME type.
- *
- * @param mimeType The MIME type to test against.
- *
- * @return <code>true</code> if the MIME type is equal to this object's
- * MIME type, <code>false</code> otherwise.
- *
- * @exception NullPointerException If mimeType is null.
- */
+ * Tests the MIME type of this object for equality against the specified
+ * MIME type.
+ *
+ * @param mimeType The MIME type to test against.
+ *
+ * @return <code>true</code> if the MIME type is equal to this object's
+ * MIME type, <code>false</code> otherwise.
+ *
+ * @exception NullPointerException If mimeType is null.
+ */
public boolean
isMimeTypeEqual(String mimeType)
{
@@ -521,14 +522,14 @@ isMimeTypeEqual(String mimeType)
/*************************************************************************/
/**
- * Tests the MIME type of this object for equality against the specified
- * data flavor's MIME type
- *
- * @param flavor The flavor to test against.
- *
- * @return <code>true</code> if the flavor's MIME type is equal to this
- * object's MIME type, <code>false</code> otherwise.
- */
+ * Tests the MIME type of this object for equality against the specified
+ * data flavor's MIME type
+ *
+ * @param flavor The flavor to test against.
+ *
+ * @return <code>true</code> if the flavor's MIME type is equal to this
+ * object's MIME type, <code>false</code> otherwise.
+ */
public boolean
isMimeTypeEqual(DataFlavor flavor)
{
@@ -538,11 +539,11 @@ isMimeTypeEqual(DataFlavor flavor)
/*************************************************************************/
/**
- * Tests whether or not this flavor represents a serialized object.
- *
- * @return <code>true</code> if this flavor represents a serialized
- * object, <code>false</code> otherwise.
- */
+ * Tests whether or not this flavor represents a serialized object.
+ *
+ * @return <code>true</code> if this flavor represents a serialized
+ * object, <code>false</code> otherwise.
+ */
public boolean
isMimeTypeSerializedObject()
{
@@ -552,12 +553,12 @@ isMimeTypeSerializedObject()
/*************************************************************************/
/**
- * Tests whether or not this flavor has a representation class of
- * <code>java.io.InputStream</code>.
- *
- * @param <code>true</code> if the representation class of this flavor
- * is <code>java.io.InputStream</code>, <code>false</code> otherwise.
- */
+ * Tests whether or not this flavor has a representation class of
+ * <code>java.io.InputStream</code>.
+ *
+ * @param <code>true</code> if the representation class of this flavor
+ * is <code>java.io.InputStream</code>, <code>false</code> otherwise.
+ */
public boolean
isRepresentationClassInputStream()
{
@@ -567,12 +568,12 @@ isRepresentationClassInputStream()
/*************************************************************************/
/**
- * Tests whether the representation class for this flavor is
- * serializable.
- *
- * @param <code>true</code> if the representation class is serializable,
- * <code>false</code> otherwise.
- */
+ * Tests whether the representation class for this flavor is
+ * serializable.
+ *
+ * @param <code>true</code> if the representation class is serializable,
+ * <code>false</code> otherwise.
+ */
public boolean
isRepresentationClassSerializable()
{
@@ -592,11 +593,11 @@ isRepresentationClassSerializable()
/*************************************************************************/
/**
- * Tests whether the representation class for his flavor is remote.
- *
- * @return <code>true</code> if the representation class is remote,
- * <code>false</code> otherwise.
- */
+ * Tests whether the representation class for his flavor is remote.
+ *
+ * @return <code>true</code> if the representation class is remote,
+ * <code>false</code> otherwise.
+ */
public boolean
isRepresentationClassRemote()
{
@@ -607,11 +608,11 @@ isRepresentationClassRemote()
/*************************************************************************/
/**
- * Tests whether or not this flavor represents a serialized object.
- *
- * @return <code>true</code> if this flavor represents a serialized
- * object, <code>false</code> otherwise.
- */
+ * Tests whether or not this flavor represents a serialized object.
+ *
+ * @return <code>true</code> if this flavor represents a serialized
+ * object, <code>false</code> otherwise.
+ */
public boolean
isFlavorSerializedObjectType()
{
@@ -622,11 +623,11 @@ isFlavorSerializedObjectType()
/*************************************************************************/
/**
- * Tests whether or not this flavor represents a remote object.
- *
- * @return <code>true</code> if this flavor represents a remote object,
- * <code>false</code> otherwise.
- */
+ * Tests whether or not this flavor represents a remote object.
+ *
+ * @return <code>true</code> if this flavor represents a remote object,
+ * <code>false</code> otherwise.
+ */
public boolean
isFlavorRemoteObjectType()
{
@@ -636,11 +637,11 @@ isFlavorRemoteObjectType()
/*************************************************************************/
/**
- * Tests whether or not this flavor represents a list of files.
- *
- * @return <code>true</code> if this flavor represents a list of files,
- * <code>false</code> otherwise.
- */
+ * Tests whether or not this flavor represents a list of files.
+ *
+ * @return <code>true</code> if this flavor represents a list of files,
+ * <code>false</code> otherwise.
+ */
public boolean
isFlavorJavaFileListType()
{
@@ -654,14 +655,14 @@ isFlavorJavaFileListType()
/*************************************************************************/
/**
- * Returns a copy of this object.
- *
- * @return A copy of this object.
- *
- * @exception CloneNotSupportedException If the object's class does not support
- * the Cloneable interface. Subclasses that override the clone method can also
- * throw this exception to indicate that an instance cannot be cloned.
- */
+ * Returns a copy of this object.
+ *
+ * @return A copy of this object.
+ *
+ * @exception CloneNotSupportedException If the object's class does not support
+ * the Cloneable interface. Subclasses that override the clone method can also
+ * throw this exception to indicate that an instance cannot be cloned.
+ */
public Object clone () throws CloneNotSupportedException
{
try
@@ -677,15 +678,15 @@ public Object clone () throws CloneNotSupportedException
/*************************************************************************/
/**
- * This method test the specified <code>DataFlavor</code> for equality
- * against this object. This will be true if the MIME type and
- * representation type are the equal.
- *
- * @param flavor The <code>DataFlavor</code> to test against.
- *
- * @return <code>true</code> if the flavor is equal to this object,
- * <code>false</code> otherwise.
- */
+ * This method test the specified <code>DataFlavor</code> for equality
+ * against this object. This will be true if the MIME type and
+ * representation type are the equal.
+ *
+ * @param flavor The <code>DataFlavor</code> to test against.
+ *
+ * @return <code>true</code> if the flavor is equal to this object,
+ * <code>false</code> otherwise.
+ */
public boolean
equals(DataFlavor flavor)
{
@@ -704,22 +705,22 @@ equals(DataFlavor flavor)
/*************************************************************************/
/**
- * This method test the specified <code>Object</code> for equality
- * against this object. This will be true if the following conditions
- * are met:
- * <p>
- * <ul>
- * <li>The object is not <code>null</code>.
- * <li>The object is an instance of <code>DataFlavor</code>.
- * <li>The object's MIME type and representation class are equal to
- * this object's.
- * </ul>
- *
- * @param obj The <code>Object</code> to test against.
- *
- * @return <code>true</code> if the flavor is equal to this object,
- * <code>false</code> otherwise.
- */
+ * This method test the specified <code>Object</code> for equality
+ * against this object. This will be true if the following conditions
+ * are met:
+ * <p>
+ * <ul>
+ * <li>The object is not <code>null</code>.
+ * <li>The object is an instance of <code>DataFlavor</code>.
+ * <li>The object's MIME type and representation class are equal to
+ * this object's.
+ * </ul>
+ *
+ * @param obj The <code>Object</code> to test against.
+ *
+ * @return <code>true</code> if the flavor is equal to this object,
+ * <code>false</code> otherwise.
+ */
public boolean
equals(Object obj)
{
@@ -735,17 +736,17 @@ equals(Object obj)
/*************************************************************************/
/**
- * Tests whether or not the specified string is equal to the MIME type
- * of this object.
- *
- * @param str The string to test against.
- *
- * @return <code>true</code> if the string is equal to this object's MIME
- * type, <code>false</code> otherwise.
- *
- * @deprecated Not compatible with <code>hashCode()</code>.
- * Use <code>isMimeTypeEqual()</code>
- */
+ * Tests whether or not the specified string is equal to the MIME type
+ * of this object.
+ *
+ * @param str The string to test against.
+ *
+ * @return <code>true</code> if the string is equal to this object's MIME
+ * type, <code>false</code> otherwise.
+ *
+ * @deprecated Not compatible with <code>hashCode()</code>.
+ * Use <code>isMimeTypeEqual()</code>
+ */
public boolean
equals(String str)
{
@@ -755,10 +756,10 @@ equals(String str)
/*************************************************************************/
/**
- * Returns the hash code for this data flavor.
- * The hash code is based on the (lower case) mime type and the
- * representation class.
- */
+ * Returns the hash code for this data flavor.
+ * The hash code is based on the (lower case) mime type and the
+ * representation class.
+ */
public int
hashCode()
{
@@ -768,9 +769,9 @@ hashCode()
/*************************************************************************/
/**
- * Returns <code>true</code> when the given <code>DataFlavor</code>
- * matches this one.
- */
+ * Returns <code>true</code> when the given <code>DataFlavor</code>
+ * matches this one.
+ */
public boolean
match(DataFlavor dataFlavor)
{
@@ -781,16 +782,16 @@ match(DataFlavor dataFlavor)
/*************************************************************************/
/**
- * This method exists for backward compatibility. It simply returns
- * the same name/value pair passed in.
- *
- * @param name The parameter name.
- * @param value The parameter value.
- *
- * @return The name/value pair.
- *
- * @deprecated
- */
+ * This method exists for backward compatibility. It simply returns
+ * the same name/value pair passed in.
+ *
+ * @param name The parameter name.
+ * @param value The parameter value.
+ *
+ * @return The name/value pair.
+ *
+ * @deprecated
+ */
protected String
normalizeMimeTypeParameter(String name, String value)
{
@@ -800,15 +801,15 @@ normalizeMimeTypeParameter(String name, String value)
/*************************************************************************/
/**
- * This method exists for backward compatibility. It simply returns
- * the MIME type string unchanged.
- *
- * @param type The MIME type.
- *
- * @return The MIME type.
- *
- * @deprecated
- */
+ * This method exists for backward compatibility. It simply returns
+ * the MIME type string unchanged.
+ *
+ * @param type The MIME type.
+ *
+ * @return The MIME type.
+ *
+ * @deprecated
+ */
protected String
normalizeMimeType(String type)
{
@@ -818,12 +819,12 @@ normalizeMimeType(String type)
/*************************************************************************/
/**
- * Serialize this class.
- *
- * @param stream The <code>ObjectOutput</code> stream to serialize to.
- *
- * @exception IOException If an error occurs.
- */
+ * Serialize this class.
+ *
+ * @param stream The <code>ObjectOutput</code> stream to serialize to.
+ *
+ * @exception IOException If an error occurs.
+ */
public void
writeExternal(ObjectOutput stream) throws IOException
{
@@ -833,14 +834,14 @@ writeExternal(ObjectOutput stream) throws IOException
/*************************************************************************/
/**
- * De-serialize this class.
- *
- * @param stream The <code>ObjectInput</code> stream to deserialize from.
- *
- * @exception IOException If an error ocurs.
- * @exception ClassNotFoundException If the class for an object being restored
- * cannot be found.
- */
+ * De-serialize this class.
+ *
+ * @param stream The <code>ObjectInput</code> stream to deserialize from.
+ *
+ * @exception IOException If an error ocurs.
+ * @exception ClassNotFoundException If the class for an object being restored
+ * cannot be found.
+ */
public void
readExternal(ObjectInput stream) throws IOException, ClassNotFoundException
{
@@ -850,9 +851,9 @@ readExternal(ObjectInput stream) throws IOException, ClassNotFoundException
/*************************************************************************/
/**
- * Returns a string representation of this DataFlavor. Including the
- * representation class name, MIME type and human presentable name.
- */
+ * Returns a string representation of this DataFlavor. Including the
+ * representation class name, MIME type and human presentable name.
+ */
public String
toString()
{
@@ -867,8 +868,8 @@ toString()
/*************************************************************************/
/**
- * XXX - Currently returns <code>plainTextFlavor</code>.
- */
+ * XXX - Currently returns <code>plainTextFlavor</code>.
+ */
public static final DataFlavor
getTextPlainUnicodeFlavor()
{
@@ -878,10 +879,10 @@ getTextPlainUnicodeFlavor()
/*************************************************************************/
/**
- * XXX - Currently returns <code>java.io.InputStream</code>.
- *
- * @since 1.3
- */
+ * XXX - Currently returns <code>java.io.InputStream</code>.
+ *
+ * @since 1.3
+ */
public final Class
getDefaultRepresentationClass()
{
@@ -890,8 +891,8 @@ getDefaultRepresentationClass()
/*************************************************************************/
/**
- * XXX - Currently returns <code>java.io.InputStream</code>.
- */
+ * XXX - Currently returns <code>java.io.InputStream</code>.
+ */
public final String
getDefaultRepresentationClassAsString()
{
@@ -901,15 +902,15 @@ getDefaultRepresentationClassAsString()
/*************************************************************************/
/**
- * Selects the best supported text flavor on this implementation.
- * Returns <code>null</code> when none of the given flavors is liked.
- *
- * The <code>DataFlavor</code> returned the first data flavor in the
- * array that has either a representation class which is (a subclass of)
- * <code>Reader</code> or <code>String</code>, or has a representation
- * class which is (a subclass of) <code>InputStream</code> and has a
- * primary MIME type of "text" and has an supported encoding.
- */
+ * Selects the best supported text flavor on this implementation.
+ * Returns <code>null</code> when none of the given flavors is liked.
+ *
+ * The <code>DataFlavor</code> returned the first data flavor in the
+ * array that has either a representation class which is (a subclass of)
+ * <code>Reader</code> or <code>String</code>, or has a representation
+ * class which is (a subclass of) <code>InputStream</code> and has a
+ * primary MIME type of "text" and has an supported encoding.
+ */
public static final DataFlavor
selectBestTextFlavor(DataFlavor[] availableFlavors)
{
@@ -952,30 +953,30 @@ selectBestTextFlavor(DataFlavor[] availableFlavors)
/*************************************************************************/
/**
- * Creates a <code>Reader</code> for a given <code>Transferable</code>.
- *
- * If the representation class is a (subclass of) <code>Reader</code>
- * then an instance of the representation class is returned. If the
- * representatation class is a <code>String</code> then a
- * <code>StringReader</code> is returned. And if the representation class
- * is a (subclass of) <code>InputStream</code> and the primary MIME type
- * is "text" then a <code>InputStreamReader</code> for the correct charset
- * encoding is returned.
- *
- * @param transferable The <code>Transferable</code> for which a text
- * <code>Reader</code> is requested.
- *
- * @exception IllegalArgumentException If the representation class is not one
- * of the seven listed above or the Transferable has null data.
- * @exception NullPointerException If the Transferable is null.
- * @exception UnsupportedFlavorException when the transferable doesn't
- * support this <code>DataFlavor</code>. Or if the representable class
- * isn't a (subclass of) <code>Reader</code>, <code>String</code>,
- * <code>InputStream</code> and/or the primary MIME type isn't "text".
- * @exception IOException when any IOException occurs.
- * @exception UnsupportedEncodingException if the "charset" isn't supported
- * on this platform.
- */
+ * Creates a <code>Reader</code> for a given <code>Transferable</code>.
+ *
+ * If the representation class is a (subclass of) <code>Reader</code>
+ * then an instance of the representation class is returned. If the
+ * representatation class is a <code>String</code> then a
+ * <code>StringReader</code> is returned. And if the representation class
+ * is a (subclass of) <code>InputStream</code> and the primary MIME type
+ * is "text" then a <code>InputStreamReader</code> for the correct charset
+ * encoding is returned.
+ *
+ * @param transferable The <code>Transferable</code> for which a text
+ * <code>Reader</code> is requested.
+ *
+ * @exception IllegalArgumentException If the representation class is not one
+ * of the seven listed above or the Transferable has null data.
+ * @exception NullPointerException If the Transferable is null.
+ * @exception UnsupportedFlavorException when the transferable doesn't
+ * support this <code>DataFlavor</code>. Or if the representable class
+ * isn't a (subclass of) <code>Reader</code>, <code>String</code>,
+ * <code>InputStream</code> and/or the primary MIME type isn't "text".
+ * @exception IOException when any IOException occurs.
+ * @exception UnsupportedEncodingException if the "charset" isn't supported
+ * on this platform.
+ */
public Reader getReaderForText(Transferable transferable)
throws UnsupportedFlavorException, IOException
{
diff --git a/libjava/java/awt/dnd/DragSource.java b/libjava/java/awt/dnd/DragSource.java
index 740235ac83c..f6083f674f6 100644
--- a/libjava/java/awt/dnd/DragSource.java
+++ b/libjava/java/awt/dnd/DragSource.java
@@ -44,12 +44,20 @@ import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Point;
+import java.awt.Toolkit;
import java.awt.datatransfer.FlavorMap;
+import java.awt.datatransfer.SystemFlavorMap;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.peer.DragSourceContextPeer;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.EventListener;
+/**
+ * @since 1.2
+ */
public class DragSource implements Serializable
{
/**
@@ -64,6 +72,11 @@ public class DragSource implements Serializable
public static final Cursor DefaultMoveNoDrop = null;
public static final Cursor DefaultLinkNoDrop = null;
+ private transient FlavorMap flavorMap = SystemFlavorMap.getDefaultFlavorMap ();
+
+ private transient DragSourceListener dragSourceListener;
+ private transient DragSourceMotionListener dragSourceMotionListener;
+
/**
* Initializes the drag source.
*
@@ -159,51 +172,89 @@ public class DragSource implements Serializable
public FlavorMap getFlavorMap()
{
- return null;
+ return flavorMap;
}
public DragGestureRecognizer
createDragGestureRecognizer(Class recognizer, Component c, int actions,
DragGestureListener dgl)
{
- return null;
+ return Toolkit.getDefaultToolkit ()
+ .createDragGestureRecognizer (recognizer, this, c, actions,
+ dgl);
}
public DragGestureRecognizer
createDefaultDragGestureRecognizer(Component c, int actions,
DragGestureListener dgl)
{
- return null;
+ return createDragGestureRecognizer (MouseDragGestureRecognizer.class, c,
+ actions, dgl);
}
+ /**
+ * @since 1.4
+ */
public void addDragSourceListener(DragSourceListener l)
{
+ DnDEventMulticaster.add (dragSourceListener, l);
}
+ /**
+ * @since 1.4
+ */
public void removeDragSourceListener(DragSourceListener l)
{
+ DnDEventMulticaster.remove (dragSourceListener, l);
}
+ /**
+ * @since 1.4
+ */
public DragSourceListener[] getDragSourceListeners()
{
- return null;
+ return (DragSourceListener[]) getListeners (DragSourceListener.class);
}
+ /**
+ * @since 1.4
+ */
public void addDragSourceMotionListener(DragSourceMotionListener l)
{
+ DnDEventMulticaster.add (dragSourceMotionListener, l);
}
+ /**
+ * @since 1.4
+ */
public void removeDragSourceMotionListener(DragSourceMotionListener l)
{
+ DnDEventMulticaster.remove (dragSourceMotionListener, l);
}
- public DragSourceMotionListener[] getDragSourceMotionListeners()
+ /**
+ * @since 1.4
+ */
+ public DragSourceMotionListener[] getDragSourceMotionListeners ()
{
- return null;
+ return (DragSourceMotionListener[]) getListeners
+ (DragSourceMotionListener.class);
}
- public EventListener[] getListeners(Class type)
+ /**
+ * @since 1.4
+ */
+ public EventListener[] getListeners (Class listenerType)
{
- return null;
+ if (listenerType == DragSourceListener.class)
+ return DnDEventMulticaster.getListeners (dragSourceListener,
+ listenerType);
+
+ if (listenerType == DragSourceMotionListener.class)
+ return DnDEventMulticaster.getListeners (dragSourceMotionListener,
+ listenerType);
+
+ // Return an empty EventListener array.
+ return new EventListener [0];
}
} // class DragSource
diff --git a/libjava/java/awt/dnd/DragSourceContext.java b/libjava/java/awt/dnd/DragSourceContext.java
index 45191d24365..1760cd02065 100644
--- a/libjava/java/awt/dnd/DragSourceContext.java
+++ b/libjava/java/awt/dnd/DragSourceContext.java
@@ -44,12 +44,21 @@ import java.awt.Image;
import java.awt.Point;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.peer.DragSourceContextPeer;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.TooManyListenersException;
+/**
+ * @since 1.2
+ */
public class DragSourceContext
implements DragSourceListener, DragSourceMotionListener, Serializable
{
+ /**
+ * Compatible with JDK 1.2+
+ */
static final long serialVersionUID = -115407898692194719L;
protected static final int DEFAULT = 0;
@@ -57,39 +66,81 @@ public class DragSourceContext
protected static final int OVER = 2;
protected static final int CHANGED = 3;
- public DragSourceContext(DragSourceContextPeer peer, DragGestureEvent dge,
- Cursor cursor, Image image, Point offset,
- Transferable trans, DragSourceListener dsl)
- {
+ private DragSourceContextPeer peer;
+ private Cursor cursor;
+ private Transferable transferable;
+ private DragGestureEvent trigger;
+ private DragSourceListener dragSourceListener;
+ private boolean useCustomCursor; // FIXME: currently unused but needed for serialization.
+ private int sourceActions; // FIXME: currently unused but needed for serialization.
+ private Image image;
+ private Point offset;
+
+ /**
+ * Initializes a drag source context.
+ *
+ * @exception IllegalArgumentException If Component or DragSource of trigger
+ * are null, the drag action for the trigger event is DnDConstants.ACTION_NONE
+ * or if the source actions for the DragGestureRecognizer associated with the
+ * trigger event are equal to DnDConstants.ACTION_NONE.
+ * @exception NullPointerException If peer or trigger is null.
+ */
+ public DragSourceContext (DragSourceContextPeer peer,
+ DragGestureEvent trigger, Cursor cursor,
+ Image image, Point offset, Transferable trans,
+ DragSourceListener dsl)
+ {
+ if (peer == null
+ || trigger == null)
+ throw new NullPointerException ();
+
+ if (trigger.getComponent () == null
+ || trigger.getDragSource () == null
+ || trigger.getDragAction () == DnDConstants.ACTION_NONE
+ || trigger.getSourceAsDragGestureRecognizer ()
+ .getSourceActions () == DnDConstants.ACTION_NONE)
+ throw new IllegalArgumentException ();
+
+ this.peer = peer;
+ this.trigger = trigger;
+ this.cursor = cursor;
+ this.image = image;
+ this.offset = offset;
+ this.transferable = trans;
+ this.dragSourceListener = dsl;
+
+ throw new Error ("not implemented");
}
public DragSource getDragSource()
{
- return null;
+ return trigger.getDragSource ();
}
public Component getComponent()
{
- return null;
+ return trigger.getComponent ();
}
public DragGestureEvent getTrigger()
{
- return null;
+ return trigger;
}
public int getSourceActions()
{
- return 0;
+ return trigger.getSourceAsDragGestureRecognizer ().getSourceActions ();
}
- public void setCursor(Cursor c)
+ public void setCursor (Cursor cursor)
{
+ this.cursor = cursor;
+ // FIXME: Check if we need to do more here
}
public Cursor getCursor()
{
- return null;
+ return cursor;
}
/**
@@ -101,10 +152,16 @@ public class DragSourceContext
public void addDragSourceListener (DragSourceListener dsl)
throws TooManyListenersException
{
+ if (dragSourceListener != null)
+ throw new TooManyListenersException ();
+
+ dragSourceListener = dsl;
}
- public void removeDragSourceListener(DragSourceListener l)
+ public void removeDragSourceListener (DragSourceListener dsl)
{
+ if (dragSourceListener == dsl)
+ dragSourceListener = null;
}
public void transferablesFlavorsChanged()
@@ -137,7 +194,7 @@ public class DragSourceContext
public Transferable getTransferable()
{
- return null;
+ return transferable;
}
protected void updateCurrentCursor(int dropOp, int targetAct, int status)
diff --git a/libjava/java/awt/dnd/DropTarget.java b/libjava/java/awt/dnd/DropTarget.java
index 09c642cf54f..4063e206a2b 100644
--- a/libjava/java/awt/dnd/DropTarget.java
+++ b/libjava/java/awt/dnd/DropTarget.java
@@ -1,5 +1,5 @@
/* DropTarget.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -39,6 +39,8 @@ package java.awt.dnd;
import java.awt.Point;
import java.awt.Component;
+import java.awt.GraphicsEnvironment;
+import java.awt.HeadlessException;
import java.awt.datatransfer.FlavorMap;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -46,7 +48,10 @@ import java.io.Serializable;
import java.util.EventListener;
import java.util.TooManyListenersException;
-/** STUB CLASS ONLY */
+/**
+ * @author Michael Koch
+ * @since 1.2
+ */
public class DropTarget
implements DropTargetListener, EventListener, Serializable
{
@@ -55,15 +60,23 @@ public class DropTarget
*/
private static final long serialVersionUID = -6283860791671019047L;
- protected static class DropTargetAutoScroller
+ /** @specnote According to the online documentation, this is
+ * protected, but in reality it is public. */
+ public static class DropTargetAutoScroller
implements ActionListener
{
+ private Component component;
+ private Point point;
+
protected DropTargetAutoScroller (Component c, Point p)
{
+ component = c;
+ point = p;
}
protected void updateLocation (Point newLocn)
{
+ point = newLocn;
}
protected void stop ()
@@ -74,9 +87,13 @@ public class DropTarget
{
}
}
-
- // FIXME: check the correctness of default value.
- private boolean isActive = false;
+
+ private Component component;
+ private FlavorMap flavorMap;
+ private int actions;
+ private DropTargetContext dropTargetContext;
+ private DropTargetListener dropTargetListener;
+ private boolean active = true;
/**
* Creates a <code>DropTarget</code> object.
@@ -131,6 +148,15 @@ public class DropTarget
public DropTarget (Component c, int i, DropTargetListener dtl, boolean b,
FlavorMap fm)
{
+ if (GraphicsEnvironment.isHeadless ())
+ throw new HeadlessException ();
+
+ component = c;
+ actions = i;
+ dropTargetListener = dtl;
+ flavorMap = fm;
+
+ setActive (b);
}
/**
@@ -138,6 +164,7 @@ public class DropTarget
*/
public void setComponent (Component c)
{
+ component = c;
}
/**
@@ -145,7 +172,7 @@ public class DropTarget
*/
public Component getComponent ()
{
- return null;
+ return component;
}
/**
@@ -153,6 +180,7 @@ public class DropTarget
*/
public void setDefaultActions (int ops)
{
+ actions = ops;
}
/**
@@ -160,17 +188,17 @@ public class DropTarget
*/
public int getDefaultActions ()
{
- return 0;
+ return actions;
}
- public void setActive(boolean isActive)
+ public void setActive (boolean active)
{
- this.isActive = isActive;
+ this.active = active;
}
public boolean isActive()
{
- return this.isActive;
+ return active;
}
/**
@@ -182,10 +210,16 @@ public class DropTarget
public void addDropTargetListener (DropTargetListener dtl)
throws TooManyListenersException
{
+ if (dtl != null)
+ throw new TooManyListenersException ();
+
+ dropTargetListener = dtl;
}
public void removeDropTargetListener(DropTargetListener dtl)
{
+ // FIXME: Do we need to do something with dtl ?
+ dropTargetListener = null;
}
public void dragEnter(DropTargetDragEvent dtde)
@@ -210,11 +244,12 @@ public class DropTarget
public FlavorMap getFlavorMap()
{
- return null;
+ return flavorMap;
}
public void setFlavorMap(FlavorMap fm)
{
+ flavorMap = fm;
}
public void addNotify(java.awt.peer.ComponentPeer peer)
@@ -227,18 +262,21 @@ public class DropTarget
public DropTargetContext getDropTargetContext()
{
- return null;
+ if (dropTargetContext == null)
+ dropTargetContext = createDropTargetContext ();
+
+ return dropTargetContext;
}
protected DropTargetContext createDropTargetContext()
{
- return null;
+ return new DropTargetContext (this);
}
protected DropTarget.DropTargetAutoScroller createDropTargetAutoScroller
(Component c, Point p)
{
- return null;
+ return new DropTarget.DropTargetAutoScroller (c, p);
}
protected void initializeAutoscrolling(Point p)
diff --git a/libjava/java/awt/dnd/DropTargetContext.java b/libjava/java/awt/dnd/DropTargetContext.java
index eca2f6e3763..4301fbccc85 100644
--- a/libjava/java/awt/dnd/DropTargetContext.java
+++ b/libjava/java/awt/dnd/DropTargetContext.java
@@ -1,5 +1,5 @@
/* DropTargetContext.java --
- Copyright (C) 2002 Free Software Foundation
+ Copyright (C) 2002, 2003 Free Software Foundation
This file is part of GNU Classpath.
@@ -44,6 +44,7 @@ import java.awt.Component;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
+import java.util.Arrays;
import java.util.List;
/**
@@ -54,7 +55,9 @@ public class DropTargetContext implements Serializable
{
static final long serialVersionUID = -634158968993743371L;
- protected class TransferableProxy implements Transferable
+ /** @specnote According to the online documentation, this is
+ * protected, but in reality it is public. */
+ public class TransferableProxy implements Transferable
{
protected boolean isLocal;
protected Transferable transferable;
@@ -67,46 +70,49 @@ public class DropTargetContext implements Serializable
public DataFlavor[] getTransferDataFlavors ()
{
- // FIXME: implement this
- return null;
+ return transferable.getTransferDataFlavors ();
}
public boolean isDataFlavorSupported (DataFlavor flavor)
{
- // FIXME: implement this
- return false;
+ return transferable.isDataFlavorSupported (flavor);
}
public Object getTransferData (DataFlavor flavor)
throws UnsupportedFlavorException, IOException
{
- // FIXME: implement this
- return null;
+ return transferable.getTransferData (flavor);
}
}
+ private DropTarget dropTarget;
private int targetActions;
+ private java.awt.dnd.peer.DropTargetContextPeer dtcp;
+
+ // package private
+ DropTargetContext (DropTarget dropTarget)
+ {
+ this.dropTarget = dropTarget;
+ }
public DropTarget getDropTarget ()
{
- // FIXME: implement this
- return null;
+ return dropTarget;
}
public Component getComponent ()
{
- // FIXME: implement this
- return null;
+ return dropTarget.getComponent ();
}
public void addNotify (java.awt.dnd.peer.DropTargetContextPeer dtcp)
{
- // FIXME: implement this
+ this.dtcp = dtcp;
}
public void removeNotify ()
{
- // FIXME: implement this
+ this.dtcp = null;
}
protected void setTargetActions (int actions)
@@ -157,14 +163,12 @@ public class DropTargetContext implements Serializable
protected List getCurrentDataFlavorsAsList ()
{
- // FIXME: implement this
- return null;
+ return Arrays.asList (getCurrentDataFlavors ());
}
protected boolean isDataFlavorSupported (DataFlavor flavor)
{
- // FIXME: implement this
- return false;
+ return getCurrentDataFlavorsAsList ().contains (flavor);
}
/**
diff --git a/libjava/java/awt/dnd/MouseDragGestureRecognizer.java b/libjava/java/awt/dnd/MouseDragGestureRecognizer.java
index d01032433c0..6b21b43c598 100644
--- a/libjava/java/awt/dnd/MouseDragGestureRecognizer.java
+++ b/libjava/java/awt/dnd/MouseDragGestureRecognizer.java
@@ -84,46 +84,48 @@ public abstract class MouseDragGestureRecognizer
protected void registerListeners ()
{
- // FIXME: implement this
+ component.addMouseListener (this);
+ component.addMouseMotionListener (this);
}
protected void unregisterListeners ()
{
- // FIXME: implement this
+ component.removeMouseListener (this);
+ component.removeMouseMotionListener (this);
}
public void mouseClicked (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mousePressed (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mouseReleased (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mouseEntered (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mouseExited (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mouseDragged (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
public void mouseMoved (MouseEvent e)
{
- // FIXME: implement this
+ // Do nothing in here by default.
}
} // class MouseDragGestureRecognizer
diff --git a/libjava/java/awt/event/KeyEvent.java b/libjava/java/awt/event/KeyEvent.java
index 35cac3f1c66..f93bab1dc78 100644
--- a/libjava/java/awt/event/KeyEvent.java
+++ b/libjava/java/awt/event/KeyEvent.java
@@ -1142,6 +1142,8 @@ public class KeyEvent extends InputEvent
* @param keyCode the integer constant for the virtual key type
* @throws IllegalArgumentException if source is null, or if
* id == KEY_TYPED but keyCode != VK_UNDEFINED
+ *
+ * @deprecated
*/
public KeyEvent(Component source, int id, long when, int modifiers,
int keyCode)
@@ -1202,6 +1204,8 @@ public class KeyEvent extends InputEvent
*
* @param modifiers the new modifier value, in either old or new style
* @see InputEvent
+ *
+ * @deprecated
*/
public void setModifiers(int modifiers)
{
diff --git a/libjava/java/awt/font/TextAttribute.java b/libjava/java/awt/font/TextAttribute.java
index ccc8049c62f..c30f5fbe7ae 100644
--- a/libjava/java/awt/font/TextAttribute.java
+++ b/libjava/java/awt/font/TextAttribute.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package java.awt.font;
+import java.io.InvalidObjectException;
import java.text.AttributedCharacterIterator;
public final class TextAttribute extends AttributedCharacterIterator.Attribute
@@ -115,6 +116,7 @@ public final class TextAttribute extends AttributedCharacterIterator.Attribute
}
protected Object readResolve ()
+ throws InvalidObjectException
{
throw new Error ("not implemented");
}
diff --git a/libjava/java/awt/font/TextHitInfo.java b/libjava/java/awt/font/TextHitInfo.java
index 903f1f616b9..daeb7c689b3 100644
--- a/libjava/java/awt/font/TextHitInfo.java
+++ b/libjava/java/awt/font/TextHitInfo.java
@@ -39,76 +39,87 @@ package java.awt.font;
/**
* @author John Leuner <jewel@debian.org>
- *
- *
*/
-
-public final class TextHitInfo {
-
+public final class TextHitInfo
+{
+ private int charIndex;
+ private boolean leadingEdge;
+
+ TextHitInfo (int charIndex, boolean leadingEdge)
+ {
+ this.charIndex = charIndex;
+ this.leadingEdge = leadingEdge;
+ }
+
public int getCharIndex()
{
- return -1;
+ return charIndex;
}
public boolean isLeadingEdge()
{
- return false;
+ return leadingEdge;
}
public int getInsertionIndex()
{
- return -1;
+ return (leadingEdge ? charIndex : charIndex + 1);
}
public int hashCode()
{
- return getCharIndex();
+ return charIndex;
}
public boolean equals(Object obj)
{
if(obj instanceof TextHitInfo)
return this.equals((TextHitInfo) obj);
+
return false;
}
public boolean equals(TextHitInfo hitInfo)
{
- return (getCharIndex() == hitInfo.getCharIndex()) && (isLeadingEdge() == hitInfo.isLeadingEdge());
+ return (charIndex == hitInfo.getCharIndex ())
+ && (leadingEdge == hitInfo.isLeadingEdge ());
}
public static TextHitInfo leading(int charIndex)
{
- return new TextHitInfo();
+ return new TextHitInfo (charIndex, true);
}
public static TextHitInfo trailing(int charIndex)
{
- return new TextHitInfo();
+ return new TextHitInfo (charIndex, false);
}
public static TextHitInfo beforeOffset(int offset)
{
- return new TextHitInfo();
+ return new TextHitInfo (offset, false);
}
public static TextHitInfo afterOffset(int offset)
{
- return new TextHitInfo();
+ return new TextHitInfo (offset, true);
}
public TextHitInfo getOtherHit()
{
- return new TextHitInfo();
+ return (leadingEdge ? trailing (charIndex - 1) : leading (charIndex + 1));
}
public TextHitInfo getOffsetHit(int offset)
{
- return new TextHitInfo();
+ return new TextHitInfo (charIndex + offset, leadingEdge);
}
public String toString()
{
- return "";
+ return "TextHitInfo["
+ + charIndex
+ + (leadingEdge ? "L" : "T" )
+ + "]";
}
}
diff --git a/libjava/java/awt/image/BufferedImage.java b/libjava/java/awt/image/BufferedImage.java
index bf6c45cab99..5d72288f589 100644
--- a/libjava/java/awt/image/BufferedImage.java
+++ b/libjava/java/awt/image/BufferedImage.java
@@ -53,8 +53,8 @@ import gnu.java.awt.ComponentDataBlitOp;
*
* @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
*/
-public class BufferedImage extends java.awt.Image
- //implements java.awt.image.WritableRenderedImage
+public class BufferedImage extends Image
+ implements WritableRenderedImage
{
public static final int TYPE_CUSTOM = 0,
TYPE_INT_RGB = 1,
@@ -88,6 +88,8 @@ public class BufferedImage extends java.awt.Image
0x03e0,
0x001f,
DataBuffer.TYPE_USHORT};
+
+ Vector observers;
public BufferedImage(int w, int h, int type)
{
@@ -569,4 +571,33 @@ public class BufferedImage extends java.awt.Image
// FIXME: implement:
return super.toString();
}
+
+ /**
+ * Adds a tile observer. If the observer is already present, it receives
+ * multiple notifications.
+ *
+ * @param to The TileObserver to add.
+ */
+ public void addTileObserver (TileObserver to)
+ {
+ if (observers == null)
+ observers = new Vector ();
+
+ observers.add (to);
+ }
+
+ /**
+ * Removes a tile observer. If the observer was not registered,
+ * nothing happens. If the observer was registered for multiple
+ * notifications, it is now registered for one fewer notification.
+ *
+ * @param to The TileObserver to remove.
+ */
+ public void removeTileObserver (TileObserver to)
+ {
+ if (observers == null)
+ return;
+
+ observers.remove (to);
+ }
}
diff --git a/libjava/java/beans/Beans.java b/libjava/java/beans/Beans.java
index aa52c03d236..7ee0522f823 100644
--- a/libjava/java/beans/Beans.java
+++ b/libjava/java/beans/Beans.java
@@ -38,9 +38,11 @@ exception statement from your version. */
package java.beans;
-import java.io.*;
-import java.applet.*;
-import gnu.java.io.*;
+import gnu.java.io.ClassLoaderObjectInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.applet.Applet;
/**
* <code>Beans</code> provides some helper methods that allow the basic
diff --git a/libjava/java/beans/FeatureDescriptor.java b/libjava/java/beans/FeatureDescriptor.java
index 90a3c1557f4..32f54a410cb 100644
--- a/libjava/java/beans/FeatureDescriptor.java
+++ b/libjava/java/beans/FeatureDescriptor.java
@@ -66,6 +66,7 @@ public class FeatureDescriptor
String shortDescription;
boolean expert;
boolean hidden;
+ boolean preferred;
Hashtable valueHash;
@@ -177,6 +178,15 @@ public class FeatureDescriptor
this.hidden = hidden;
}
+ public boolean isPreferred ()
+ {
+ return preferred;
+ }
+
+ public void setPreferred (boolean preferred)
+ {
+ this.preferred = preferred;
+ }
/**
* Get an arbitrary value set with setValue().
diff --git a/libjava/java/beans/PropertyEditorManager.java b/libjava/java/beans/PropertyEditorManager.java
index 4bd4a9f7edf..cb03563d50e 100644
--- a/libjava/java/beans/PropertyEditorManager.java
+++ b/libjava/java/beans/PropertyEditorManager.java
@@ -39,6 +39,18 @@ exception statement from your version. */
package java.beans;
import gnu.java.lang.ClassHelper;
+import gnu.java.beans.editors.ColorEditor;
+import gnu.java.beans.editors.FontEditor;
+import gnu.java.beans.editors.NativeBooleanEditor;
+import gnu.java.beans.editors.NativeByteEditor;
+import gnu.java.beans.editors.NativeDoubleEditor;
+import gnu.java.beans.editors.NativeFloatEditor;
+import gnu.java.beans.editors.NativeIntEditor;
+import gnu.java.beans.editors.NativeLongEditor;
+import gnu.java.beans.editors.NativeShortEditor;
+import gnu.java.beans.editors.StringEditor;
+import java.awt.Color;
+import java.awt.Font;
/**
* PropertyEditorManager is used to find property editors
@@ -70,20 +82,21 @@ import gnu.java.lang.ClassHelper;
public class PropertyEditorManager
{
static java.util.Hashtable editors = new java.util.Hashtable();
- static String[] editorSearchPath = {"gnu.java.beans.editors","sun.beans.editors"};
+ static String[] editorSearchPath = { "gnu.java.beans.editors",
+ "sun.beans.editors" };
static
{
- registerEditor(java.lang.Boolean.TYPE, gnu.java.beans.editors.NativeBooleanEditor.class);
- registerEditor(java.lang.Byte.TYPE, gnu.java.beans.editors.NativeByteEditor.class);
- registerEditor(java.lang.Short.TYPE, gnu.java.beans.editors.NativeShortEditor.class);
- registerEditor(java.lang.Integer.TYPE, gnu.java.beans.editors.NativeIntEditor.class);
- registerEditor(java.lang.Long.TYPE, gnu.java.beans.editors.NativeLongEditor.class);
- registerEditor(java.lang.Float.TYPE, gnu.java.beans.editors.NativeFloatEditor.class);
- registerEditor(java.lang.Double.TYPE, gnu.java.beans.editors.NativeDoubleEditor.class);
- registerEditor(java.lang.String.class, gnu.java.beans.editors.StringEditor.class);
- registerEditor(java.awt.Color.class, gnu.java.beans.editors.ColorEditor.class);
- registerEditor(java.awt.Font.class, gnu.java.beans.editors.FontEditor.class);
+ registerEditor(Boolean.TYPE, NativeBooleanEditor.class);
+ registerEditor(Byte.TYPE, NativeByteEditor.class);
+ registerEditor(Short.TYPE, NativeShortEditor.class);
+ registerEditor(Integer.TYPE, NativeIntEditor.class);
+ registerEditor(Long.TYPE, NativeLongEditor.class);
+ registerEditor(Float.TYPE, NativeFloatEditor.class);
+ registerEditor(Double.TYPE, NativeDoubleEditor.class);
+ registerEditor(String.class, StringEditor.class);
+ registerEditor(Color.class, ColorEditor.class);
+ registerEditor(Font.class, FontEditor.class);
}
/**
diff --git a/libjava/java/beans/beancontext/BeanContextChild.java b/libjava/java/beans/beancontext/BeanContextChild.java
index c3f4f003fed..ef2b7b34976 100644
--- a/libjava/java/beans/beancontext/BeanContextChild.java
+++ b/libjava/java/beans/beancontext/BeanContextChild.java
@@ -43,7 +43,8 @@ import java.beans.VetoableChangeListener;
import java.beans.PropertyVetoException;
/**
- * Beans implement this to get information about the execution environment and its services and to be placed in the hierarchy.
+ * Beans implement this to get information about the execution environment and
+ * its services and to be placed in the hierarchy.
* <P>
*
* The difference between a <code>BeanContext</code> and a
diff --git a/libjava/java/beans/beancontext/BeanContextChildSupport.java b/libjava/java/beans/beancontext/BeanContextChildSupport.java
index 270854b2576..ea48cf2ae50 100644
--- a/libjava/java/beans/beancontext/BeanContextChildSupport.java
+++ b/libjava/java/beans/beancontext/BeanContextChildSupport.java
@@ -56,7 +56,7 @@ import java.io.Serializable;
* behavior. If there are problems, let me know.
*
* @author John Keiser
- * @since JDK1.2
+ * @since 1.2
* @see java.beans.beancontext.BeanContextChild
*/
@@ -97,14 +97,14 @@ public class BeanContextChildSupport
*/
protected VetoableChangeSupport vcSupport;
-
/**
* Create a new <code>BeanContextChildSupport</code> with itself as the peer.
* This is meant to be used when you subclass
* <code>BeanContextChildSupport</code> to create your child.
*/
- public BeanContextChildSupport() {
- this(null);
+ public BeanContextChildSupport()
+ {
+ this (null);
};
/**
@@ -112,14 +112,16 @@ public class BeanContextChildSupport
* @param peer the peer to use, or <code>null</code> to specify
* <code>this</code>.
*/
- public BeanContextChildSupport(BeanContextChild peer) {
- if(peer == null) {
- peer = this;
- }
+ public BeanContextChildSupport (BeanContextChild peer)
+ {
+ if (peer == null)
+ {
+ peer = this;
+ }
beanContextChildPeer = peer;
- pcSupport = new PropertyChangeSupport(peer);
- vcSupport = new VetoableChangeSupport(peer);
+ pcSupport = new PropertyChangeSupport (peer);
+ vcSupport = new VetoableChangeSupport (peer);
}
/**
@@ -178,34 +180,42 @@ public class BeanContextChildSupport
* <code>BeanContextChild</code> implementor does not
* wish to have its parent changed.
*/
- public void setBeanContext(BeanContext newBeanContext)
- throws PropertyVetoException {
- synchronized(beanContextChildPeer) {
- if(newBeanContext == beanContext)
- return;
-
- if(!rejectedSetBCOnce) {
- if(!validatePendingSetBeanContext(newBeanContext)) {
- rejectedSetBCOnce = true;
- throw new PropertyVetoException("validatePendingSetBeanContext() rejected change",
- new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext));
- }
- try {
- fireVetoableChange("beanContext", beanContext, newBeanContext);
- } catch(PropertyVetoException e) {
- rejectedSetBCOnce = true;
- throw e;
- }
- }
-
- releaseBeanContextResources();
+ public void setBeanContext(BeanContext newBeanContext)
+ throws PropertyVetoException
+ {
+ synchronized (beanContextChildPeer)
+ {
+ if (newBeanContext == beanContext)
+ return;
+
+ if (!rejectedSetBCOnce)
+ {
+ if (!validatePendingSetBeanContext (newBeanContext))
+ {
+ rejectedSetBCOnce = true;
+ throw new PropertyVetoException ("validatePendingSetBeanContext() rejected change",
+ new PropertyChangeEvent(beanContextChildPeer, "beanContext", beanContext, newBeanContext));
+ }
+
+ try
+ {
+ fireVetoableChange ("beanContext", beanContext, newBeanContext);
+ }
+ catch (PropertyVetoException e)
+ {
+ rejectedSetBCOnce = true;
+ throw e;
+ }
+ }
+
+ releaseBeanContextResources ();
beanContext = newBeanContext;
rejectedSetBCOnce = false;
- firePropertyChange("beanContext", beanContext, newBeanContext);
+ firePropertyChange ("beanContext", beanContext, newBeanContext);
- initializeBeanContextResources();
+ initializeBeanContextResources ();
}
}
@@ -213,7 +223,8 @@ public class BeanContextChildSupport
* Get the parent <code>BeanContext</code>.
* @return the parent <code>BeanContext</code>.
*/
- public BeanContext getBeanContext() {
+ public BeanContext getBeanContext()
+ {
return beanContext;
}
diff --git a/libjava/java/beans/beancontext/BeanContextEvent.java b/libjava/java/beans/beancontext/BeanContextEvent.java
index e6d8cb23f82..1fa68292b1f 100644
--- a/libjava/java/beans/beancontext/BeanContextEvent.java
+++ b/libjava/java/beans/beancontext/BeanContextEvent.java
@@ -44,59 +44,67 @@ import java.util.EventObject;
* Generic superclass for events fired by <code>BeanContext</code>s.
*
* @author John Keiser
- * @since JDK1.2
+ * @since 1.2
*/
-public abstract class BeanContextEvent extends EventObject {
- /**
- * The <code>BeanContext</code> that most recently passed this
- * event on.
- */
- protected BeanContext propagatedFrom;
+public abstract class BeanContextEvent extends EventObject
+{
+ private static final long serialVersionUID = 7267998073569045052L;
+
+ /**
+ * The <code>BeanContext</code> that most recently passed this
+ * event on.
+ */
+ protected BeanContext propagatedFrom;
- /**
- * Create a new event, from the specified <code>BeanContext</code>.
- * <code>propagatedFrom</code> will be initialized to
- * <code>null</code>.
- *
- * @param source the source of the event.
- */
- protected BeanContextEvent(BeanContext source) {
- super(source);
- }
+ /**
+ * Create a new event, from the specified <code>BeanContext</code>.
+ * <code>propagatedFrom</code> will be initialized to
+ * <code>null</code>.
+ *
+ * @param source the source of the event.
+ */
+ protected BeanContextEvent(BeanContext source)
+ {
+ super(source);
+ }
- /**
- * Get the <code>BeanContext</code> that originated this event.
- * @return the originator of this event.
- */
- public BeanContext getBeanContext() {
- return (BeanContext)getSource();
- }
+ /**
+ * Get the <code>BeanContext</code> that originated this event.
+ * @return the originator of this event.
+ */
+ public BeanContext getBeanContext()
+ {
+ return (BeanContext)getSource();
+ }
- /**
- * Get the most recent propagator of this event.
- * If this value is <code>null</code>, you have received the event
- * straight from the source.
- *
- * @return the most recent propagator of this event.
- */
- public BeanContext getPropagatedFrom() {
- return propagatedFrom;
- }
+ /**
+ * Get the most recent propagator of this event.
+ * If this value is <code>null</code>, you have received the event
+ * straight from the source.
+ *
+ * @return the most recent propagator of this event.
+ */
+ public BeanContext getPropagatedFrom()
+ {
+ return propagatedFrom;
+ }
- /**
- * Tell whether this event has been propagated.
- * @return <code>true</code> iff <code>getPropagatedFrom() != null</code>.
- */
- public boolean isPropagated() {
- return propagatedFrom != null;
- }
+ /**
+ * Tell whether this event has been propagated.
+ * @return <code>true</code> iff <code>getPropagatedFrom() != null</code>.
+ */
+ public boolean isPropagated()
+ {
+ return propagatedFrom != null;
+ }
- /**
- * Set the most recent propagator of this event.
- * @param propagator the most recent propagator of this event.
- */
- public void setPropagatedFrom(BeanContext propagator) {
- propagatedFrom = propagator;
- }
+ /**
+ * Set the most recent propagator of this event.
+ * @param propagator the most recent propagator of this event.
+ */
+ public void setPropagatedFrom(BeanContext propagator)
+ {
+ propagatedFrom = propagator;
+ }
}
diff --git a/libjava/java/beans/beancontext/BeanContextServices.java b/libjava/java/beans/beancontext/BeanContextServices.java
index 77ed94deba5..89906aa977d 100644
--- a/libjava/java/beans/beancontext/BeanContextServices.java
+++ b/libjava/java/beans/beancontext/BeanContextServices.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package java.beans.beancontext;
import java.util.Iterator;
+import java.util.TooManyListenersException;
/**
* Allows a <code>BeanContext</code> to provide services to its children.
@@ -46,161 +47,172 @@ import java.util.Iterator;
* @specnote it is unclear whether a <code>BeanContextServices</code>
* should delegate unhandled requests to parents. I assume so.
* @author John Keiser
- * @since JDK1.2
+ * @since 1.2
*/
-public interface BeanContextServices extends BeanContext, BeanContextServicesListener {
- /**
- * Register a service to make it available to others.
- * This class may refuse to add the service based on whatever
- * information it can gather, including whether the service
- * provider is trusted.
- *
- * @param serviceClass the service class.
- * @param provider the factory that will actually provide the service.
- * @return whether the service was added or not.
- */
- public boolean addService(Class serviceClass, BeanContextServiceProvider provider);
-
- /**
- * Make it so that no one else can use this service.
- * <P>
- *
- * If <code>revokeNow</code> is <code>false</code>, the only
- * effect of this method is to make all subsequent calls to
- * <code>getService()</code> on this service class fail.
- * <P>
- *
- * If it is <code>true</code>, a message is also sent out to all
- * listeners on the service and all references to it are released.
- *
- * @param serviceClass the service class to revoke.
- * @param provider the service provider providing the service class.
- * @param revokeNow whether to release all current references to
- * the service.
- */
- public void revokeService(Class serviceClass, BeanContextServiceProvider provider, boolean revokeNow);
-
- /**
- * Release your copy of this service.
- * <P>
- *
- * If all copies of the service's class have been relinquished by
- * the requestor, the <code>BeanContextServiceRevokedListener</code>
- * previously registered by <code>getService()</code> will be
- * unregistered.
- *
- * @param requestorChild the original <code>BeanContextChild</code>
- * requesting the service.
- * @param requestor the original requestor of the service.
- * @param service the service to relinquish
- * @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
- */
- public void releaseService(BeanContextChild requestorChild, Object requestor, Object service);
-
- /**
- * Get a service from this <code>BeanContextServices</code>.
- * <P>
- *
- * The specified listener will be registered to receive a
- * revocation notice for the specified serviceClass. One
- * notification per service class per requestor object will be
- * sent.
- * <P>
- *
- * The listener will be unregistered when all services that were
- * obtained by that requestor for that service class are released.
- * <P>
- *
- * If the requested service class is not available, or if this
- * <code>BeanContextServices</code> object chooses not honor the
- * request because the service class has been revoked or for some
- * other reason, then this method will return <code>null</code>.
- * <P>
- *
- * This method may throw unchecked exceptions, so watch out.
- *
- * @specnote it is not specified what happens when two subsequent
- * calls are made to <code>getService()</code> with the
- * same requestor object and service class but different
- * listeners. Which listener is to be notified?
- *
- * @param requestorChild the <code>BeanContextChild</code>
- * associated with the requestor. Typically this will be
- * the same as the requestor itself, but since any
- * <code>Object</code>, even one outside the hierarchy, may
- * make a request, this parameter is necessary. Only weak
- * references to this will be retained, and it will never
- * be changed, only queried in a read-only manner.
- * @param requestor the actual requestor of the service. Only
- * weak references to this will be retained, and it will
- * never be changed, only queried in a read-only manner.
- * @param serviceClass the <code>Class</code> of the service being
- * requested.
- * @param serviceSelector a parameter to customize the service
- * returned with.
- * @param listener a listener that will be notified if the service
- * being requested is revoked.
- * @return an instance of <code>serviceClass</code> (such that
- * <code>instanceof</code> serviceClass is true), or
- * <code>null</code>.
- */
- public Object getService(BeanContextChild requestorChild, Object requestor, Class serviceClass, Object serviceSelector, BeanContextServiceRevokedListener listener);
-
- /**
- * Get a list of all service classes supported.
- * <P>
- *
- * This method must synchronize on
- * <code>BeanContext.globalHierarchyLock</code>.
- *
- * @return a list of all service classes supported.
- * @see java.beans.beancontext.BeanContext#globalHierarchyLock
- */
- public Iterator getCurrentServiceClasses();
-
- /**
- * Get a list of valid service selectors for the specified service class.
- * <P>
- *
- * If the specified service class does not have a finite number of
- * valid service selectors, it should return <code>null</code>.
- * If it takes a general <code>Integer</code> parameter, for
- * example, you may as well return <code>null</code> or the poor
- * soul who called this method will be iterating all day.
- * <P>
- *
- * If it has no valid service selectors, it should still return an empty
- * <code>Iterator</code>.
- *
- * @param serviceClass the service class to get selectors for.
- * @return a list of valid service selectors for the service
- * class, or <code>null</code>.
- */
- public Iterator getCurrentServiceSelectors(Class serviceClass);
-
- /**
- * Tell whether the specified service class is available.
- * Iff getService() could return a non-null value for the
- * specified service, this method will return <code>true</code>.
- *
- * @param serviceClass the service class to check on.
- * @return whether the specified service class is availabe.
- */
- public boolean hasService(Class serviceClass);
-
- /**
- * Add a listener on all adds and removes of services.
- * @param listener the listener to add.
- */
- public void addBeanContextServicesListener(BeanContextServicesListener listener);
-
- /**
- * Remove a listener on all adds and removes of services.
- * @specnote it is not certain whether this should remove this
- * listener if it was specified in
- * <code>getService()</code>.
- * @param listener the listener to add.
- */
- public void removeBeanContextServicesListener(BeanContextServicesListener listener);
+public interface BeanContextServices
+ extends BeanContext, BeanContextServicesListener
+{
+ /**
+ * Register a service to make it available to others.
+ * This class may refuse to add the service based on whatever
+ * information it can gather, including whether the service
+ * provider is trusted.
+ *
+ * @param serviceClass the service class.
+ * @param provider the factory that will actually provide the service.
+ * @return whether the service was added or not.
+ */
+ public boolean addService (Class serviceClass,
+ BeanContextServiceProvider provider);
+
+ /**
+ * Make it so that no one else can use this service.
+ * <P>
+ *
+ * If <code>revokeNow</code> is <code>false</code>, the only
+ * effect of this method is to make all subsequent calls to
+ * <code>getService()</code> on this service class fail.
+ * <P>
+ *
+ * If it is <code>true</code>, a message is also sent out to all
+ * listeners on the service and all references to it are released.
+ *
+ * @param serviceClass the service class to revoke.
+ * @param provider the service provider providing the service class.
+ * @param revokeNow whether to release all current references to
+ * the service.
+ */
+ public void revokeService (Class serviceClass,
+ BeanContextServiceProvider provider,
+ boolean revokeNow);
+
+ /**
+ * Release your copy of this service.
+ * <P>
+ *
+ * If all copies of the service's class have been relinquished by
+ * the requestor, the <code>BeanContextServiceRevokedListener</code>
+ * previously registered by <code>getService()</code> will be
+ * unregistered.
+ *
+ * @param requestorChild the original <code>BeanContextChild</code>
+ * requesting the service.
+ * @param requestor the original requestor of the service.
+ * @param service the service to relinquish
+ * @see #getService(java.beans.beancontext.BeanContextChild,java.lang.Object,java.lang.Class,java.lang.Object,java.beans.beancontext.BeanContextServiceRevokedListener)
+ */
+ public void releaseService (BeanContextChild requestorChild, Object requestor,
+ Object service);
+
+ /**
+ * Get a service from this <code>BeanContextServices</code>.
+ * <P>
+ *
+ * The specified listener will be registered to receive a
+ * revocation notice for the specified serviceClass. One
+ * notification per service class per requestor object will be
+ * sent.
+ * <P>
+ *
+ * The listener will be unregistered when all services that were
+ * obtained by that requestor for that service class are released.
+ * <P>
+ *
+ * If the requested service class is not available, or if this
+ * <code>BeanContextServices</code> object chooses not honor the
+ * request because the service class has been revoked or for some
+ * other reason, then this method will return <code>null</code>.
+ * <P>
+ *
+ * This method may throw unchecked exceptions, so watch out.
+ *
+ * @specnote it is not specified what happens when two subsequent
+ * calls are made to <code>getService()</code> with the
+ * same requestor object and service class but different
+ * listeners. Which listener is to be notified?
+ *
+ * @param requestorChild the <code>BeanContextChild</code>
+ * associated with the requestor. Typically this will be
+ * the same as the requestor itself, but since any
+ * <code>Object</code>, even one outside the hierarchy, may
+ * make a request, this parameter is necessary. Only weak
+ * references to this will be retained, and it will never
+ * be changed, only queried in a read-only manner.
+ * @param requestor the actual requestor of the service. Only
+ * weak references to this will be retained, and it will
+ * never be changed, only queried in a read-only manner.
+ * @param serviceClass the <code>Class</code> of the service being
+ * requested.
+ * @param serviceSelector a parameter to customize the service
+ * returned with.
+ * @param listener a listener that will be notified if the service
+ * being requested is revoked.
+ * @return an instance of <code>serviceClass</code> (such that
+ * <code>instanceof</code> serviceClass is true), or
+ * <code>null</code>.
+ */
+ public Object getService (BeanContextChild requestorChild, Object requestor,
+ Class serviceClass, Object serviceSelector,
+ BeanContextServiceRevokedListener listener)
+ throws TooManyListenersException;
+
+ /**
+ * Get a list of all service classes supported.
+ * <P>
+ *
+ * This method must synchronize on
+ * <code>BeanContext.globalHierarchyLock</code>.
+ *
+ * @return a list of all service classes supported.
+ * @see java.beans.beancontext.BeanContext#globalHierarchyLock
+ */
+ public Iterator getCurrentServiceClasses ();
+
+ /**
+ * Get a list of valid service selectors for the specified service class.
+ * <P>
+ *
+ * If the specified service class does not have a finite number of
+ * valid service selectors, it should return <code>null</code>.
+ * If it takes a general <code>Integer</code> parameter, for
+ * example, you may as well return <code>null</code> or the poor
+ * soul who called this method will be iterating all day.
+ * <P>
+ *
+ * If it has no valid service selectors, it should still return an empty
+ * <code>Iterator</code>.
+ *
+ * @param serviceClass the service class to get selectors for.
+ * @return a list of valid service selectors for the service
+ * class, or <code>null</code>.
+ */
+ public Iterator getCurrentServiceSelectors (Class serviceClass);
+
+ /**
+ * Tell whether the specified service class is available.
+ * Iff getService() could return a non-null value for the
+ * specified service, this method will return <code>true</code>.
+ *
+ * @param serviceClass the service class to check on.
+ * @return whether the specified service class is available.
+ */
+ public boolean hasService (Class serviceClass);
+
+ /**
+ * Add a listener on all adds and removes of services.
+ * @param listener the listener to add.
+ */
+ public void
+ addBeanContextServicesListener (BeanContextServicesListener listener);
+
+ /**
+ * Remove a listener on all adds and removes of services.
+ * @specnote it is not certain whether this should remove this
+ * listener if it was specified in
+ * <code>getService()</code>.
+ * @param listener the listener to add.
+ */
+ public void
+ removeBeanContextServicesListener (BeanContextServicesListener listener);
}
diff --git a/libjava/java/io/BufferedOutputStream.java b/libjava/java/io/BufferedOutputStream.java
index e324cbcf938..137dec5496c 100644
--- a/libjava/java/io/BufferedOutputStream.java
+++ b/libjava/java/io/BufferedOutputStream.java
@@ -46,189 +46,147 @@ package java.io;
* efficient mechanism for writing versus doing numerous small unbuffered
* writes.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class BufferedOutputStream extends FilterOutputStream
{
-
-/*************************************************************************/
-
-/*
- * Class Variables
- */
-
-/**
- * This is the default buffer size
- */
-private static final int DEFAULT_BUFFER_SIZE = 512;
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the internal byte array used for buffering output before
- * writing it.
- */
-protected byte[] buf;
-
-/**
- * This is the number of bytes that are currently in the buffer and
- * are waiting to be written to the underlying stream. It always points to
- * the index into the buffer where the next byte of data will be stored
- */
-protected int count;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * This method initializes a new <code>BufferedOutputStream</code> instance
- * that will write to the specified subordinate <code>OutputStream</code>
- * and which will use a default buffer size of 512 bytes.
- *
- * @param out The underlying <code>OutputStream</code> to write data to
- */
-public
-BufferedOutputStream(OutputStream out)
-{
- this(out, DEFAULT_BUFFER_SIZE);
-}
-
-/*************************************************************************/
-
-/**
- * This method initializes a new <code>BufferedOutputStream</code> instance
- * that will write to the specified subordinate <code>OutputStream</code>
- * and which will use the specified buffer size
- *
- * @param out The underlying <code>OutputStream</code> to write data to
- * @param size The size of the internal buffer
- */
-public
-BufferedOutputStream(OutputStream out, int size)
-{
- super(out);
-
- buf = new byte[size];
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * This method causes any currently buffered bytes to be immediately
- * written to the underlying output stream.
- *
- * @exception IOException If an error occurs
+ /**
+ * This is the default buffer size
+ */
+ private static final int DEFAULT_BUFFER_SIZE = 512;
+
+ /**
+ * This is the internal byte array used for buffering output before
+ * writing it.
+ */
+ protected byte[] buf;
+
+ /**
+ * This is the number of bytes that are currently in the buffer and
+ * are waiting to be written to the underlying stream. It always points to
+ * the index into the buffer where the next byte of data will be stored
+ */
+ protected int count;
+
+ /**
+ * This method initializes a new <code>BufferedOutputStream</code> instance
+ * that will write to the specified subordinate <code>OutputStream</code>
+ * and which will use a default buffer size of 512 bytes.
+ *
+ * @param out The underlying <code>OutputStream</code> to write data to
+ */
+ public BufferedOutputStream(OutputStream out)
+ {
+ this(out, DEFAULT_BUFFER_SIZE);
+ }
+
+ /**
+ * This method initializes a new <code>BufferedOutputStream</code> instance
+ * that will write to the specified subordinate <code>OutputStream</code>
+ * and which will use the specified buffer size
+ *
+ * @param out The underlying <code>OutputStream</code> to write data to
+ * @param size The size of the internal buffer
+ */
+ public BufferedOutputStream(OutputStream out, int size)
+ {
+ super(out);
+
+ buf = new byte[size];
+ }
+
+ /**
+ * This method causes any currently buffered bytes to be immediately
+ * written to the underlying output stream.
+ *
+ * @exception IOException If an error occurs
+ */
+ public synchronized void flush() throws IOException
+ {
+ if (count == 0)
+ return;
+
+ out.write(buf, 0, count);
+ count = 0;
+ out.flush();
+ }
+
+ /**
+ * This method flushes any remaining buffered bytes then closes the
+ * underlying output stream. Any further attempts to write to this stream
+ * may throw an exception
+ *
+ public synchronized void close() throws IOException
+ {
+ flush();
+ out.close();
+ }
*/
-public synchronized void
-flush() throws IOException
-{
- if (count == 0)
- return;
-
- out.write(buf, 0, count);
- count = 0;
- out.flush();
-}
-
-/*************************************************************************/
-
-/*
- * This method flushes any remaining buffered bytes then closes the
- * underlying output stream. Any further attempts to write to this stream
- * may throw an exception
- *
-public synchronized void
-close() throws IOException
-{
- flush();
- out.close();
-}
-*/
-
-/*************************************************************************/
-
-/*
- * This method runs when the object is garbage collected. It is
- * responsible for ensuring that all buffered bytes are written and
- * for closing the underlying stream.
- *
- * @exception IOException If an error occurs (ignored by the Java runtime)
- *
-protected void
-finalize() throws IOException
-{
- close();
-}
-*/
-/*************************************************************************/
-
-/**
- * This method writes a single byte of data. This will be written to the
- * buffer instead of the underlying data source. However, if the buffer
- * is filled as a result of this write request, it will be flushed to the
- * underlying output stream.
- *
- * @param b The byte of data to be written, passed as an int
- *
- * @exception IOException If an error occurs
+ /**
+ * This method runs when the object is garbage collected. It is
+ * responsible for ensuring that all buffered bytes are written and
+ * for closing the underlying stream.
+ *
+ * @exception IOException If an error occurs (ignored by the Java runtime)
+ *
+ protected void finalize() throws IOException
+ {
+ close();
+ }
*/
-public synchronized void
-write(int b) throws IOException
-{
- if (count == buf.length)
- flush();
-
- buf[count] = (byte)(b & 0xFF);
- ++count;
-}
-
-/*************************************************************************/
-/**
- * This method writes <code>len</code> bytes from the byte array
- * <code>buf</code> starting at position <code>offset</code> in the buffer.
- * These bytes will be written to the internal buffer. However, if this
- * write operation fills the buffer, the buffer will be flushed to the
- * underlying output stream.
- *
- * @param buf The array of bytes to write.
- * @param offset The index into the byte array to start writing from.
- * @param len The number of bytes to write.
- *
- * @exception IOException If an error occurs
- */
-public synchronized void
-write(byte[] buf, int offset, int len) throws IOException
-{
- // Buffer can hold everything. Note that the case where LEN < 0
- // is automatically handled by the downstream write.
- if (len < (this.buf.length - count))
- {
- System.arraycopy(buf, offset, this.buf, count, len);
- count += len;
- }
- else
- {
- // The write was too big. So flush the buffer and write the new
- // bytes directly to the underlying stream, per the JDK 1.2
- // docs.
+ /**
+ * This method writes a single byte of data. This will be written to the
+ * buffer instead of the underlying data source. However, if the buffer
+ * is filled as a result of this write request, it will be flushed to the
+ * underlying output stream.
+ *
+ * @param b The byte of data to be written, passed as an int
+ *
+ * @exception IOException If an error occurs
+ */
+ public synchronized void write(int b) throws IOException
+ {
+ if (count == buf.length)
flush();
- out.write (buf, offset, len);
- }
-}
+
+ buf[count] = (byte)(b & 0xFF);
+ ++count;
+ }
+
+ /**
+ * This method writes <code>len</code> bytes from the byte array
+ * <code>buf</code> starting at position <code>offset</code> in the buffer.
+ * These bytes will be written to the internal buffer. However, if this
+ * write operation fills the buffer, the buffer will be flushed to the
+ * underlying output stream.
+ *
+ * @param buf The array of bytes to write.
+ * @param offset The index into the byte array to start writing from.
+ * @param len The number of bytes to write.
+ *
+ * @exception IOException If an error occurs
+ */
+ public synchronized void write(byte[] buf, int offset, int len)
+ throws IOException
+ {
+ // Buffer can hold everything. Note that the case where LEN < 0
+ // is automatically handled by the downstream write.
+ if (len < (this.buf.length - count))
+ {
+ System.arraycopy(buf, offset, this.buf, count, len);
+ count += len;
+ }
+ else
+ {
+ // The write was too big. So flush the buffer and write the new
+ // bytes directly to the underlying stream, per the JDK 1.2
+ // docs.
+ flush();
+ out.write (buf, offset, len);
+ }
+ }
} // class BufferedOutputStream
+
diff --git a/libjava/java/io/BufferedReader.java b/libjava/java/io/BufferedReader.java
index b4cdb639b43..df53765d0b0 100644
--- a/libjava/java/io/BufferedReader.java
+++ b/libjava/java/io/BufferedReader.java
@@ -44,19 +44,19 @@ package java.io;
*/
/**
- * This subclass of <code>FilterReader</code> buffers input from an
- * underlying implementation to provide a possibly more efficient read
- * mechanism. It maintains the buffer and buffer state in instance
- * variables that are available to subclasses. The default buffer size
- * of 512 chars can be overridden by the creator of the stream.
- * <p>
- * This class also implements mark/reset functionality. It is capable
- * of remembering any number of input chars, to the limits of
- * system memory or the size of <code>Integer.MAX_VALUE</code>
- *
- * @author Per Bothner <bothner@cygnus.com>
- * @author Aaron M. Renn <arenn@urbanophile.com>
- */
+ * This subclass of <code>FilterReader</code> buffers input from an
+ * underlying implementation to provide a possibly more efficient read
+ * mechanism. It maintains the buffer and buffer state in instance
+ * variables that are available to subclasses. The default buffer size
+ * of 512 chars can be overridden by the creator of the stream.
+ * <p>
+ * This class also implements mark/reset functionality. It is capable
+ * of remembering any number of input chars, to the limits of
+ * system memory or the size of <code>Integer.MAX_VALUE</code>
+ *
+ * @author Per Bothner <bothner@cygnus.com>
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ */
public class BufferedReader extends Reader
{
Reader in;
@@ -99,13 +99,13 @@ public class BufferedReader extends Reader
}
/**
- * Create a new <code>BufferedReader</code> that will read from the
- * specified subordinate stream with a buffer size that is specified by the
- * caller.
- *
- * @param in The subordinate stream to read from
- * @param bufsize The buffer size to use
- */
+ * Create a new <code>BufferedReader</code> that will read from the
+ * specified subordinate stream with a buffer size that is specified by the
+ * caller.
+ *
+ * @param in The subordinate stream to read from
+ * @param bufsize The buffer size to use
+ */
public BufferedReader(Reader in, int size)
{
super(in.lock);
@@ -114,10 +114,10 @@ public class BufferedReader extends Reader
}
/**
- * This method closes the stream
- *
- * @exception IOException If an error occurs
- */
+ * This method closes the stream
+ *
+ * @exception IOException If an error occurs
+ */
public void close() throws IOException
{
synchronized (lock)
@@ -130,36 +130,36 @@ public class BufferedReader extends Reader
}
/**
- * Returns <code>true</code> to indicate that this class supports mark/reset
- * functionality.
- *
- * @return <code>true</code>
- */
+ * Returns <code>true</code> to indicate that this class supports mark/reset
+ * functionality.
+ *
+ * @return <code>true</code>
+ */
public boolean markSupported()
{
return true;
}
/**
- * Mark a position in the input to which the stream can be
- * "reset" by calling the <code>reset()</code> method. The parameter
- * <code>readlimit</code> is the number of chars that can be read from the
- * stream after setting the mark before the mark becomes invalid. For
- * example, if <code>mark()</code> is called with a read limit of 10, then
- * when 11 chars of data are read from the stream before the
- * <code>reset()</code> method is called, then the mark is invalid and the
- * stream object instance is not required to remember the mark.
- * <p>
- * Note that the number of chars that can be remembered by this method
- * can be greater than the size of the internal read buffer. It is also
- * not dependent on the subordinate stream supporting mark/reset
- * functionality.
- *
- * @param readlimit The number of chars that can be read before the mark
- * becomes invalid
- *
- * @exception IOException If an error occurs
- */
+ * Mark a position in the input to which the stream can be
+ * "reset" by calling the <code>reset()</code> method. The parameter
+ * <code>readlimit</code> is the number of chars that can be read from the
+ * stream after setting the mark before the mark becomes invalid. For
+ * example, if <code>mark()</code> is called with a read limit of 10, then
+ * when 11 chars of data are read from the stream before the
+ * <code>reset()</code> method is called, then the mark is invalid and the
+ * stream object instance is not required to remember the mark.
+ * <p>
+ * Note that the number of chars that can be remembered by this method
+ * can be greater than the size of the internal read buffer. It is also
+ * not dependent on the subordinate stream supporting mark/reset
+ * functionality.
+ *
+ * @param readlimit The number of chars that can be read before the mark
+ * becomes invalid
+ *
+ * @exception IOException If an error occurs
+ */
public void mark(int readLimit) throws IOException
{
synchronized (lock)
@@ -207,16 +207,16 @@ public class BufferedReader extends Reader
}
/**
- * Reset the stream to the point where the <code>mark()</code> method
- * was called. Any chars that were read after the mark point was set will
- * be re-read during subsequent reads.
- * <p>
- * This method will throw an IOException if the number of chars read from
- * the stream since the call to <code>mark()</code> exceeds the mark limit
- * passed when establishing the mark.
- *
- * @exception IOException If an error occurs;
- */
+ * Reset the stream to the point where the <code>mark()</code> method
+ * was called. Any chars that were read after the mark point was set will
+ * be re-read during subsequent reads.
+ * <p>
+ * This method will throw an IOException if the number of chars read from
+ * the stream since the call to <code>mark()</code> exceeds the mark limit
+ * passed when establishing the mark.
+ *
+ * @exception IOException If an error occurs;
+ */
public void reset() throws IOException
{
synchronized (lock)
@@ -239,14 +239,15 @@ public class BufferedReader extends Reader
}
/**
- * This method determines whether or not a stream is ready to be read. If
- * This method returns <code>false</code> then this stream could (but is
- * not guaranteed to) block on the next read attempt.
- *
- * @return <code>true</code> if this stream is ready to be read, <code>false</code> otherwise
- *
- * @exception IOException If an error occurs
- */
+ * This method determines whether or not a stream is ready to be read. If
+ * This method returns <code>false</code> then this stream could (but is
+ * not guaranteed to) block on the next read attempt.
+ *
+ * @return <code>true</code> if this stream is ready to be read,
+ * <code>false</code> otherwise
+ *
+ * @exception IOException If an error occurs
+ */
public boolean ready() throws IOException
{
synchronized (lock)
@@ -257,23 +258,24 @@ public class BufferedReader extends Reader
}
/**
- * This method read chars from a stream and stores them into a caller
- * supplied buffer. It starts storing the data at index <code>offset</code> into
- * the buffer and attempts to read <code>len</code> chars. This method can
- * return before reading the number of chars requested. The actual number
- * of chars read is returned as an int. A -1 is returned to indicate the
- * end of the stream.
- * <p>
- * This method will block until some data can be read.
- *
- * @param buf The array into which the chars read should be stored
- * @param offset The offset into the array to start storing chars
- * @param count The requested number of chars to read
- *
- * @return The actual number of chars read, or -1 if end of stream.
- *
- * @exception IOException If an error occurs.
- */
+ * This method read chars from a stream and stores them into a caller
+ * supplied buffer. It starts storing the data at index
+ * <code>offset</code> into
+ * the buffer and attempts to read <code>len</code> chars. This method can
+ * return before reading the number of chars requested. The actual number
+ * of chars read is returned as an int. A -1 is returned to indicate the
+ * end of the stream.
+ * <p>
+ * This method will block until some data can be read.
+ *
+ * @param buf The array into which the chars read should be stored
+ * @param offset The offset into the array to start storing chars
+ * @param count The requested number of chars to read
+ *
+ * @return The actual number of chars read, or -1 if end of stream.
+ *
+ * @exception IOException If an error occurs.
+ */
public int read(char[] buf, int offset, int count) throws IOException
{
synchronized (lock)
@@ -394,16 +396,16 @@ public class BufferedReader extends Reader
}
/**
- * This method reads a single line of text from the input stream, returning
- * it as a <code>String</code>. A line is terminated by "\n", a "\r", or
- * an "\r\n" sequence. The system dependent line separator is not used.
- * The line termination characters are not returned in the resulting
- * <code>String</code>.
- *
- * @return The line of text read, or <code>null</code> if end of stream.
- *
- * @exception IOException If an error occurs
- */
+ * This method reads a single line of text from the input stream, returning
+ * it as a <code>String</code>. A line is terminated by "\n", a "\r", or
+ * an "\r\n" sequence. The system dependent line separator is not used.
+ * The line termination characters are not returned in the resulting
+ * <code>String</code>.
+ *
+ * @return The line of text read, or <code>null</code> if end of stream.
+ *
+ * @exception IOException If an error occurs
+ */
public String readLine() throws IOException
{
checkStatus();
@@ -468,19 +470,20 @@ public class BufferedReader extends Reader
}
/**
- * This method skips the specified number of chars in the stream. It
- * returns the actual number of chars skipped, which may be less than the
- * requested amount.
- * <p>
- * This method first discards chars in the buffer, then calls the
- * <code>skip</code> method on the underlying stream to skip the remaining chars.
- *
- * @param num_chars The requested number of chars to skip
- *
- * @return The actual number of chars skipped.
- *
- * @exception IOException If an error occurs
- */
+ * This method skips the specified number of chars in the stream. It
+ * returns the actual number of chars skipped, which may be less than the
+ * requested amount.
+ * <p>
+ * This method first discards chars in the buffer, then calls the
+ * <code>skip</code> method on the underlying stream to skip the
+ * remaining chars.
+ *
+ * @param num_chars The requested number of chars to skip
+ *
+ * @return The actual number of chars skipped.
+ *
+ * @exception IOException If an error occurs
+ */
public long skip(long count) throws IOException
{
synchronized (lock)
diff --git a/libjava/java/io/BufferedWriter.java b/libjava/java/io/BufferedWriter.java
index d5e5bf849d8..b7837843cd3 100644
--- a/libjava/java/io/BufferedWriter.java
+++ b/libjava/java/io/BufferedWriter.java
@@ -51,8 +51,6 @@ package java.io;
* efficient mechanism for writing versus doing numerous small unbuffered
* writes.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@cygnus.com>
* @date September 25, 1998
diff --git a/libjava/java/io/ByteArrayOutputStream.java b/libjava/java/io/ByteArrayOutputStream.java
index a8d8f22d684..3e3e0c20018 100644
--- a/libjava/java/io/ByteArrayOutputStream.java
+++ b/libjava/java/io/ByteArrayOutputStream.java
@@ -65,8 +65,6 @@ package java.io;
* application specified character encoding. Thus it can handle
* multibyte character encodings.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Tom Tromey <tromey@cygnus.com>
* @date September 24, 1998
@@ -120,7 +118,7 @@ public class ByteArrayOutputStream extends OutputStream
*
* @return The number of bytes in the internal buffer
*
- * @see reset
+ * @see #reset()
*/
public int size ()
{
diff --git a/libjava/java/io/CharArrayWriter.java b/libjava/java/io/CharArrayWriter.java
index 6f749b4833c..e9413f04072 100644
--- a/libjava/java/io/CharArrayWriter.java
+++ b/libjava/java/io/CharArrayWriter.java
@@ -130,7 +130,7 @@ public class CharArrayWriter extends Writer
*
* @return The number of chars in the internal buffer
*
- * @see reset
+ * @see #reset()
*/
public int size ()
{
diff --git a/libjava/java/io/DataInput.java b/libjava/java/io/DataInput.java
index 7de140f4827..bf7c478272e 100644
--- a/libjava/java/io/DataInput.java
+++ b/libjava/java/io/DataInput.java
@@ -1,5 +1,5 @@
/* DataInput.java -- Interface for reading data from a stream
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -40,433 +40,407 @@ package java.io;
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
- * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Believed complete and correct.
- */
+ * plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
+ * Status: Believed complete and correct. */
/**
- * This interface is implemented by classes that can data from streams
- * into Java primitive types.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Warren Levy <warrenl@cygnus.com>
- */
+ * This interface is implemented by classes that can data from streams
+ * into Java primitive types.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Warren Levy <warrenl@cygnus.com>
+ */
public interface DataInput
{
-/**
- * This method reads a Java boolean value from an input stream. It does
- * so by reading a single byte of data. If that byte is zero, then the
- * value returned is <code>false</code>. If the byte is non-zero, then
- * the value returned is <code>true</code>.
- * <p>
- * This method can read a <code>boolean</code> written by an object
- * implementing the <code>writeBoolean()</code> method in the
- * <code>DataOutput</code> interface.
- *
- * @return The <code>boolean</code> value read
- *
- * @exception EOFException If end of file is reached before reading the boolean
- * @exception IOException If any other error occurs
- */
-boolean
-readBoolean() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java byte value from an input stream. The value
- * is in the range of -128 to 127.
- * <p>
- * This method can read a <code>byte</code> written by an object
- * implementing the
- * <code>writeByte()</code> method in the <code>DataOutput</code> interface.
- * <p>
- * @return The <code>byte</code> value read
- *
- * @exception EOFException If end of file is reached before reading the byte
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-byte
-readByte() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads 8 unsigned bits into a Java <code>int</code> value from
- * the stream. The value returned is in the range of 0 to 255.
- * <p>
- * This method can read an unsigned byte written by an object implementing the
- * <code>writeUnsignedByte()</code> method in the <code>DataOutput</code>
- * interface.
- *
- * @return The unsigned bytes value read as a Java <code>int</code>.
- *
- * @exception EOFException If end of file is reached before reading the value
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-int
-readUnsignedByte() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java <code>char</code> value from an input stream.
- * It operates by reading two bytes from the stream and converting them to
- * a single 16-bit Java <code>char</code>. The two bytes are stored most
- * significant byte first (i.e., "big endian") regardless of the native
- * host byte ordering.
- * <p>
- * As an example, if <code>byte1</code> and <code>byte2</code> represent the
- * first and second byte read from the stream respectively, they will be
- * transformed to a <code>char</code> in the following manner:
- * <p>
- * <code>(char)((byte1 << 8) + byte2)</code>
- * <p>
- * This method can read a <code>char</code> written by an object implementing
- * the
- * <code>writeChar()</code> method in the <code>DataOutput</code> interface.
- *
- * @return The <code>char</code> value read
- *
- * @exception EOFException If end of file is reached before reading the char
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-char
-readChar() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a signed 16-bit value into a Java in from the stream.
- * It operates by reading two bytes from the stream and converting them to
- * a single 16-bit Java <code>short</code>. The two bytes are stored most
- * significant byte first (i.e., "big endian") regardless of the native
- * host byte ordering.
- * <p>
- * As an example, if <code>byte1</code> and <code>byte2</code> represent the
- * first and second byte read from the stream respectively, they will be
- * transformed to a <code>short</code> in the following manner:
- * <p>
- * <code>(short)((byte1 << 8) + byte2)</code>
- * <p>
- * The value returned is in the range of -32768 to 32767.
- * <p>
- * This method can read a <code>short</code> written by an object implementing
- * the <code>writeShort()</code> method in the <code>DataOutput</code>
- * interface.
- *
- * @return The <code>short</code> value read
- *
- * @exception EOFException If end of file is reached before reading the value
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-short
-readShort() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads 16 unsigned bits into a Java int value from the stream.
- * It operates by reading two bytes from the stream and converting them to
- * a single Java <code>int</code>. The two bytes are stored most
- * significant byte first (i.e., "big endian") regardless of the native
- * host byte ordering.
- * <p>
- * As an example, if <code>byte1</code> and <code>byte2</code> represent the
- * first and second byte read from the stream respectively, they will be
- * transformed to an <code>int</code> in the following manner:
- * <p>
- * <code>(int)((byte1 << 8) + byte2)</code>
- * <p>
- * The value returned is in the range of 0 to 65535.
- * <p>
- * This method can read an unsigned short written by an object implementing
- * the <code>writeUnsignedShort()</code> method in the <code>DataOutput</code>
- * interface.
- *
- * @return The unsigned short value read as a Java <code>int</code>.
- *
- * @exception EOFException If end of file is reached before reading the value
- * @exception IOException If any other error occurs
- */
-int
-readUnsignedShort() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java <code>int</code> value from an input stream
- * It operates by reading four bytes from the stream and converting them to
- * a single Java <code>int</code>. The bytes are stored most
- * significant byte first (i.e., "big endian") regardless of the native
- * host byte ordering.
- * <p>
- * As an example, if <code>byte1</code> through <code>byte4</code> represent
- * the first four bytes read from the stream, they will be
- * transformed to an <code>int</code> in the following manner:
- * <p>
- * <code>(int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4))</code>
- * <p>
- The value returned is in the range of -2147483648 to 2147483647.
- * <p>
- * This method can read an <code>int</code> written by an object implementing
- * the <code>writeInt()</code> method in the <code>DataOutput</code> interface.
- *
- * @return The <code>int</code> value read
- *
- * @exception EOFException If end of file is reached before reading the int
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-int
-readInt() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java <code>long</code> value from an input stream
- * It operates by reading eight bytes from the stream and converting them to
- * a single Java <code>long</code>. The bytes are stored most
- * significant byte first (i.e., "big endian") regardless of the native
- * host byte ordering.
- * <p>
- * As an example, if <code>byte1</code> through <code>byte8</code> represent
- * the first eight bytes read from the stream, they will be
- * transformed to an <code>long</code> in the following manner:
- * <p>
- * <code>(long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) +
- * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9))
- * </code>
- * <p>
- * The value returned is in the range of -9223372036854775808 to
- * 9223372036854775807.
- * <p>
- * This method can read an <code>long</code> written by an object implementing
- * the <code>writeLong()</code> method in the <code>DataOutput</code>
- * interface.
- *
- * @return The <code>long</code> value read
- *
- * @exception EOFException If end of file is reached before reading the long
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-long
-readLong() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java float value from an input stream. It operates
- * by first reading an <code>int</code> value from the stream by calling the
- * <code>readInt()</code> method in this interface, then converts that
- * <code>int</code> to a <code>float</code> using the
- * <code>intBitsToFloat</code> method in the class
- * <code>java.lang.Float</code>.
- * <p>
- * This method can read a <code>float</code> written by an object implementing
- * the <code>writeFloat()</code> method in the <code>DataOutput</code>
- * interface.
- *
- * @return The <code>float</code> value read
- *
- * @exception EOFException If end of file is reached before reading the float
- * @exception IOException If any other error occurs
- *
- * @see java.lang.Float
- * @see DataOutput
- */
-float
-readFloat() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a Java double value from an input stream. It operates
- * by first reading a <code>long</code> value from the stream by calling the
- * <code>readLong()</code> method in this interface, then converts that
- * <code>long</code> to a <code>double</code> using the
- * <code>longBitsToDouble</code> method in the class
- * <code>java.lang.Double</code>.
- * <p>
- * This method can read a <code>double</code> written by an object
- * implementing the <code>writeDouble()</code> method in the
- * <code>DataOutput</code> interface.
- *
- * @return The <code>double</code> value read
- *
- * @exception EOFException If end of file is reached before reading the double
- * @exception IOException If any other error occurs
- *
- * @see java.lang.Double
- * @see DataOutput
- */
-double
-readDouble() throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads the next line of text data from an input stream.
- * It operates by reading bytes and converting those bytes to <code>char</code>
- * values by treating the byte read as the low eight bits of the
- * <code>char</code> and using 0 as the high eight bits. Because of this,
- * it does not support the full 16-bit Unicode character set.
- * <P>
- * The reading of bytes ends when either the end of file or a line terminator
- * is encountered. The bytes read are then returned as a <code>String</code>.
- * A line terminator is a byte sequence consisting of either
- * <code>\r</code>, <code>\n</code> or <code>\r\n</code>. These termination
- * charaters are discarded and are not returned as part of the string.
- * <p>
- * This method can read data that was written by an object implementing the
- * <code>writeLine()</code> method in <code>DataOutput</code>.
- *
- * @return The line read as a <code>String</code>
- *
- * @exception IOException If an error occurs
- *
- * @see DataOutput
- */
-String
-readLine() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads a <code>String</code> from an input stream that is
- * encoded in a modified UTF-8 format. This format has a leading two byte
- * sequence that contains the remaining number of bytes to read. This two byte
- * sequence is read using the <code>readUnsignedShort()</code> method of this
- * interface.
- *
- * After the number of remaining bytes have been determined, these bytes
- * are read an transformed into <code>char</code> values. These
- * <code>char</code> values are encoded in the stream using either a one, two,
- * or three byte format.
- * The particular format in use can be determined by examining the first
- * byte read.
- * <p>
- * If the first byte has a high order bit of 0, then
- * that character consists on only one byte. This character value consists
- * of seven bits that are at positions 0 through 6 of the byte. As an
- * example, if <code>byte1</code> is the byte read from the stream, it would
- * be converted to a <code>char</code> like so:
- * <p>
- * <code>(char)byte1</code>
- * <p>
- * If the first byte has 110 as its high order bits, then the
- * character consists of two bytes. The bits that make up the character
- * value are in positions 0 through 4 of the first byte and bit positions
- * 0 through 5 of the second byte. (The second byte should have
- * 10 as its high order bits). These values are in most significant
- * byte first (i.e., "big endian") order.
- * <p>
- * As an example, if <code>byte1</code> and <code>byte2</code> are the first
- * two bytes read respectively, and the high order bits of them match the
- * patterns which indicate a two byte character encoding, then they would be
- * converted to a Java <code>char</code> like so:
- * <p>
- * <code>(char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F))</code>
- * <p>
- * If the first byte has a 1110 as its high order bits, then the
- * character consists of three bytes. The bits that make up the character
- * value are in positions 0 through 3 of the first byte and bit positions
- * 0 through 5 of the other two bytes. (The second and third bytes should
- * have 10 as their high order bits). These values are in most
- * significant byte first (i.e., "big endian") order.
- * <p>
- * As an example, if <code>byte1</code>, <code>byte2</code>, and
- * <code>byte3</code> are the three bytes read, and the high order bits of
- * them match the patterns which indicate a three byte character encoding,
- * then they would be converted to a Java <code>char</code> like so:
- *
- * <code>
- * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F))
- * </code>
- *
- * Note that all characters are encoded in the method that requires the
- * fewest number of bytes with the exception of the character with the
- * value of <code>\<llll>u0000</code> which is encoded as two bytes. This is
- * a modification of the UTF standard used to prevent C language style
- * <code>NUL</code> values from appearing in the byte stream.
- * <p>
- * This method can read data that was written by an object implementing the
- * <code>writeUTF()</code> method in <code>DataOutput</code>.
- *
- * @returns The <code>String</code> read
- *
- * @exception EOFException If end of file is reached before reading the String
- * @exception UTFDataFormatException If the data is not in UTF-8 format
- * @exception IOException If any other error occurs
- *
- * @see DataOutput
- */
-String
-readUTF() throws EOFException, UTFDataFormatException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads raw bytes into the passed array until the array is
- * full. Note that this method blocks until the data is available and
- * throws an exception if there is not enough data left in the stream to
- * fill the buffer
- *
- * @param buf The buffer into which to read the data
- *
- * @exception EOFException If end of file is reached before filling the buffer
- * @exception IOException If any other error occurs
- */
-void
-readFully(byte[] buf) throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads raw bytes into the passed array <code>buf</code> starting
- * <code>offset</code> bytes into the buffer. The number of bytes read will be
- * exactly <code>len</code>. Note that this method blocks until the data is
- * available and * throws an exception if there is not enough data left in
- * the stream to read <code>len</code> bytes.
- *
- * @param buf The buffer into which to read the data
- * @param offset The offset into the buffer to start storing data
- * @param len The number of bytes to read into the buffer
- *
- * @exception EOFException If end of file is reached before filling the buffer
- * @exception IOException If any other error occurs
- */
-void
-readFully(byte[] buf, int offset, int len) throws EOFException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method skips and discards the specified number of bytes in an
- * input stream
- *
- * @param num_bytes The number of bytes to skip
- *
- * @return The number of bytes actually skipped, which will always be
- * <code>num_bytes</code>
- *
- * @exception EOFException If end of file is reached before all bytes can be
- * skipped
- * @exception IOException If any other error occurs
- */
-int
-skipBytes(int n) throws EOFException, IOException;
+ /**
+ * This method reads a Java boolean value from an input stream. It does
+ * so by reading a single byte of data. If that byte is zero, then the
+ * value returned is <code>false</code>. If the byte is non-zero, then
+ * the value returned is <code>true</code>.
+ * <p>
+ * This method can read a <code>boolean</code> written by an object
+ * implementing the <code>writeBoolean()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The <code>boolean</code> value read
+ *
+ * @exception EOFException If end of file is reached before
+ * reading the boolean
+ * @exception IOException If any other error occurs
+ */
+ boolean readBoolean() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java byte value from an input stream. The value
+ * is in the range of -128 to 127.
+ * <p>
+ * This method can read a <code>byte</code> written by an object
+ * implementing the
+ * <code>writeByte()</code> method in the <code>DataOutput</code> interface.
+ * <p>
+ * @return The <code>byte</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the byte
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ byte readByte() throws EOFException, IOException;
+
+ /**
+ * This method reads 8 unsigned bits into a Java <code>int</code> value from
+ * the stream. The value returned is in the range of 0 to 255.
+ * <p>
+ * This method can read an unsigned byte written by an object
+ * implementing the
+ * <code>writeUnsignedByte()</code> method in the <code>DataOutput</code>
+ * interface.
+ *
+ * @return The unsigned bytes value read as a Java <code>int</code>.
+ *
+ * @exception EOFException If end of file is reached before reading the value
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ int readUnsignedByte() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java <code>char</code> value from an input stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single 16-bit Java <code>char</code>. The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+ * first and second byte read from the stream respectively, they will be
+ * transformed to a <code>char</code> in the following manner:
+ * <p>
+ * <code>(char)((byte1 << 8) + byte2)</code>
+ * <p>
+ * This method can read a <code>char</code> written by an object implementing
+ * the
+ * <code>writeChar()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>char</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the char
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ char readChar() throws EOFException, IOException;
+
+ /**
+ * This method reads a signed 16-bit value into a Java in from the stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single 16-bit Java <code>short</code>. The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+ * first and second byte read from the stream respectively, they will be
+ * transformed to a <code>short</code> in the following manner:
+ * <p>
+ * <code>(short)((byte1 << 8) + byte2)</code>
+ * <p>
+ * The value returned is in the range of -32768 to 32767.
+ * <p>
+ * This method can read a <code>short</code> written by an object
+ * implementing
+ * the <code>writeShort()</code> method in the <code>DataOutput</code>
+ * interface.
+ *
+ * @return The <code>short</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the value
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ short readShort() throws EOFException, IOException;
+
+ /**
+ * This method reads 16 unsigned bits into a Java int value from the stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single Java <code>int</code>. The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code> represent the
+ * first and second byte read from the stream respectively, they will be
+ * transformed to an <code>int</code> in the following manner:
+ * <p>
+ * <code>(int)((byte1 << 8) + byte2)</code>
+ * <p>
+ * The value returned is in the range of 0 to 65535.
+ * <p>
+ * This method can read an unsigned short written by an object implementing
+ * the <code>writeUnsignedShort()</code> method in the
+ * <code>DataOutput</code>
+ * interface.
+ *
+ * @return The unsigned short value read as a Java <code>int</code>.
+ *
+ * @exception EOFException If end of file is reached before reading
+ * the value
+ * @exception IOException If any other error occurs
+ */
+ int readUnsignedShort() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java <code>int</code> value from an input stream
+ * It operates by reading four bytes from the stream and converting them to
+ * a single Java <code>int</code>. The bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> through <code>byte4</code> represent
+ * the first four bytes read from the stream, they will be
+ * transformed to an <code>int</code> in the following manner:
+ * <p>
+ * <code>(int)((byte1 << 24) + (byte2 << 16) + (byte3 << 8) + byte4))</code>
+ * <p>
+ * The value returned is in the range of -2147483648 to 2147483647.
+ * <p>
+ * This method can read an <code>int</code> written by an object
+ * implementing the <code>writeInt()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The <code>int</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the int
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ int readInt() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java <code>long</code> value from an input stream
+ * It operates by reading eight bytes from the stream and converting them to
+ * a single Java <code>long</code>. The bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> through <code>byte8</code> represent
+ * the first eight bytes read from the stream, they will be
+ * transformed to an <code>long</code> in the following manner:
+ * <p>
+ * <code>(long)((byte1 << 56) + (byte2 << 48) + (byte3 << 40) +
+ * (byte4 << 32) + (byte5 << 24) + (byte6 << 16) + (byte7 << 8) + byte9))
+ * </code>
+ * <p>
+ * The value returned is in the range of -9223372036854775808 to
+ * 9223372036854775807.
+ * <p>
+ * This method can read an <code>long</code> written by an object
+ * implementing the <code>writeLong()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The <code>long</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the long
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ long readLong() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java float value from an input stream. It operates
+ * by first reading an <code>int</code> value from the stream by calling the
+ * <code>readInt()</code> method in this interface, then converts that
+ * <code>int</code> to a <code>float</code> using the
+ * <code>intBitsToFloat</code> method in the class
+ * <code>java.lang.Float</code>.
+ * <p>
+ * This method can read a <code>float</code> written by an object
+ * implementing
+ * the <code>writeFloat()</code> method in the <code>DataOutput</code>
+ * interface.
+ *
+ * @return The <code>float</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the
+ * float
+ * @exception IOException If any other error occurs
+ *
+ * @see java.lang.Float
+ * @see DataOutput
+ */
+ float readFloat() throws EOFException, IOException;
+
+ /**
+ * This method reads a Java double value from an input stream. It operates
+ * by first reading a <code>long</code> value from the stream by calling the
+ * <code>readLong()</code> method in this interface, then converts that
+ * <code>long</code> to a <code>double</code> using the
+ * <code>longBitsToDouble</code> method in the class
+ * <code>java.lang.Double</code>.
+ * <p>
+ * This method can read a <code>double</code> written by an object
+ * implementing the <code>writeDouble()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The <code>double</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the
+ * double
+ * @exception IOException If any other error occurs
+ *
+ * @see java.lang.Double
+ * @see DataOutput
+ */
+ double readDouble() throws EOFException, IOException;
+
+ /**
+ * This method reads the next line of text data from an input stream.
+ * It operates by reading bytes and converting those bytes to
+ * <code>char</code>
+ * values by treating the byte read as the low eight bits of the
+ * <code>char</code> and using 0 as the high eight bits. Because of this,
+ * it does not support the full 16-bit Unicode character set.
+ * <P>
+ * The reading of bytes ends when either the end of file or a line terminator
+ * is encountered. The bytes read are then returned as a
+ * <code>String</code>.
+ * A line terminator is a byte sequence consisting of either
+ * <code>\r</code>, <code>\n</code> or <code>\r\n</code>. These termination
+ * charaters are discarded and are not returned as part of the string.
+ * <p>
+ * This method can read data that was written by an object implementing the
+ * <code>writeLine()</code> method in <code>DataOutput</code>.
+ *
+ * @return The line read as a <code>String</code>
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see DataOutput
+ */
+ String readLine() throws IOException;
+
+ /**
+ * This method reads a <code>String</code> from an input stream that is
+ * encoded in a modified UTF-8 format. This format has a leading two byte
+ * sequence that contains the remaining number of bytes to read.
+ * This two byte
+ * sequence is read using the <code>readUnsignedShort()</code> method of this
+ * interface.
+ *
+ * After the number of remaining bytes have been determined, these bytes
+ * are read an transformed into <code>char</code> values. These
+ * <code>char</code> values are encoded in the stream using either a one,
+ * two, or three byte format.
+ * The particular format in use can be determined by examining the first
+ * byte read.
+ * <p>
+ * If the first byte has a high order bit of 0, then
+ * that character consists on only one byte. This character value consists
+ * of seven bits that are at positions 0 through 6 of the byte. As an
+ * example, if <code>byte1</code> is the byte read from the stream, it would
+ * be converted to a <code>char</code> like so:
+ * <p>
+ * <code>(char)byte1</code>
+ * <p>
+ * If the first byte has 110 as its high order bits, then the
+ * character consists of two bytes. The bits that make up the character
+ * value are in positions 0 through 4 of the first byte and bit positions
+ * 0 through 5 of the second byte. (The second byte should have
+ * 10 as its high order bits). These values are in most significant
+ * byte first (i.e., "big endian") order.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code> are the first
+ * two bytes read respectively, and the high order bits of them match the
+ * patterns which indicate a two byte character encoding, then they would be
+ * converted to a Java <code>char</code> like so:
+ * <p>
+ * <code>(char)(((byte1 & 0x1F) << 6) + (byte2 & 0x3F))</code>
+ * <p>
+ * If the first byte has a 1110 as its high order bits, then the
+ * character consists of three bytes. The bits that make up the character
+ * value are in positions 0 through 3 of the first byte and bit positions
+ * 0 through 5 of the other two bytes. (The second and third bytes should
+ * have 10 as their high order bits). These values are in most
+ * significant byte first (i.e., "big endian") order.
+ * <p>
+ * As an example, if <code>byte1</code>, <code>byte2</code>, and
+ * <code>byte3</code> are the three bytes read, and the high order bits of
+ * them match the patterns which indicate a three byte character encoding,
+ * then they would be converted to a Java <code>char</code> like so:
+ *
+ * <code>
+ * (char)(((byte1 & 0x0F) << 12) + ((byte2 & 0x3F) + (byte3 & 0x3F))
+ * </code>
+ *
+ * Note that all characters are encoded in the method that requires the
+ * fewest number of bytes with the exception of the character with the
+ * value of <code>\<llll>u0000</code> which is encoded as two bytes.
+ * This is a modification of the UTF standard used to prevent C language
+ * style <code>NUL</code> values from appearing in the byte stream.
+ * <p>
+ * This method can read data that was written by an object implementing the
+ * <code>writeUTF()</code> method in <code>DataOutput</code>.
+ *
+ * @returns The <code>String</code> read
+ *
+ * @exception EOFException If end of file is reached before reading the
+ * String
+ * @exception UTFDataFormatException If the data is not in UTF-8 format
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ String readUTF() throws EOFException, UTFDataFormatException, IOException;
+
+ /**
+ * This method reads raw bytes into the passed array until the array is
+ * full. Note that this method blocks until the data is available and
+ * throws an exception if there is not enough data left in the stream to
+ * fill the buffer
+ *
+ * @param buf The buffer into which to read the data
+ *
+ * @exception EOFException If end of file is reached before filling the
+ * buffer
+ * @exception IOException If any other error occurs
+ */
+ void readFully(byte[] buf) throws EOFException, IOException;
+
+ /**
+ * This method reads raw bytes into the passed array <code>buf</code>
+ * starting
+ * <code>offset</code> bytes into the buffer. The number of bytes read
+ * will be
+ * exactly <code>len</code>. Note that this method blocks until the data is
+ * available and * throws an exception if there is not enough data left in
+ * the stream to read <code>len</code> bytes.
+ *
+ * @param buf The buffer into which to read the data
+ * @param offset The offset into the buffer to start storing data
+ * @param len The number of bytes to read into the buffer
+ *
+ * @exception EOFException If end of file is reached before filling the
+ * buffer
+ * @exception IOException If any other error occurs
+ */
+ void readFully(byte[] buf, int offset, int len)
+ throws EOFException, IOException;
+
+ /**
+ * This method skips and discards the specified number of bytes in an
+ * input stream
+ *
+ * @param num_bytes The number of bytes to skip
+ *
+ * @return The number of bytes actually skipped, which will always be
+ * <code>num_bytes</code>
+ *
+ * @exception EOFException If end of file is reached before all bytes can be
+ * skipped
+ * @exception IOException If any other error occurs
+ */
+ int skipBytes(int n) throws EOFException, IOException;
} // interface DataInput
diff --git a/libjava/java/io/DataInputStream.java b/libjava/java/io/DataInputStream.java
index 52c0c7a7b82..5f8c541e822 100644
--- a/libjava/java/io/DataInputStream.java
+++ b/libjava/java/io/DataInputStream.java
@@ -1,5 +1,5 @@
/* DataInputStream.java -- FilteredInputStream that implements DataInput
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation
+ Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation
This file is part of GNU Classpath.
@@ -50,8 +50,6 @@ package java.io;
*
* @see DataInput
*
- * @version 0.0
- *
* @author Warren Levy <warrenl@cygnus.com>
* @author Aaron M. Renn (arenn@urbanophile.com)
* @date October 20, 1998.
@@ -598,7 +596,8 @@ public class DataInputStream extends FilterInputStream implements DataInput
* character encoding, then they would be converted to a Java
* <code>char</code> like so:
* <p>
- * <code>(char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) | (byte3 & 0x3F))</code>
+ * <code>(char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) |
+ * (byte3 & 0x3F))</code>
* <p>
* Note that all characters are encoded in the method that requires
* the fewest number of bytes with the exception of the character
@@ -610,7 +609,7 @@ public class DataInputStream extends FilterInputStream implements DataInput
* This method can read data that was written by an object implementing the
* <code>writeUTF()</code> method in <code>DataOutput</code>
*
- * @returns The <code>String</code> read
+ * @return The <code>String</code> read
*
* @exception EOFException If end of file is reached before reading
* the String
diff --git a/libjava/java/io/DataOutput.java b/libjava/java/io/DataOutput.java
index 2538c32efc1..5c626f5e467 100644
--- a/libjava/java/io/DataOutput.java
+++ b/libjava/java/io/DataOutput.java
@@ -44,185 +44,148 @@ package java.io;
*/
/**
- * This interface is implemented by classes that can wrte data to streams
- * from Java primitive types.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Tom Tromey <tromey@cygnus.com>
- */
+ * This interface is implemented by classes that can wrte data to streams
+ * from Java primitive types.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public interface DataOutput
{
-/**
- * This method writes a Java boolean value to an output stream
- *
- * @param value The boolean value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeBoolean(boolean value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java byte value to an output stream
- *
- * @param value The int value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeByte(int value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java char value to an output stream
- *
- * @param value The char value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeChar(int value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java int value to an output stream as a 16 bit value
- *
- * @param value The int value to write as a 16-bit value
- *
- * @exception IOException If an error occurs
- */
-void
-writeShort(int value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java int value to an output stream
- *
- * @param value The int value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeInt(int value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java long value to an output stream
- *
- * @param value The long value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeLong(long value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java float value to an output stream
- *
- * @param value The float value to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeFloat(float value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a Java double value to an output stream
- *
- * @param value The double value to write
- *
- * @exception IOException If any other error occurs
- */
-void
-writeDouble(double value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a String to an output stream as an array of bytes
- *
- * @param value The String to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeBytes(String value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a String to an output stream as an array of char's
- *
- * @param value The String to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeChars(String value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a String to an output stream encoded in
- * UTF-8 format.
- *
- * @param value The String to write
- *
- * @exception IOException If an error occurs
- */
-void
-writeUTF(String value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes an 8-bit value (passed into the method as a Java
- * int) to an output stream.
- *
- * @param value The byte to write to the output stream
- *
- * @exception IOException If an error occurs
- */
-void
-write(int value) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes the raw byte array passed in to the output stream.
- *
- * @param buf The byte array to write
- *
- * @exception IOException If an error occurs
- */
-void
-write(byte[] buf) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes raw bytes from the passed array <code>buf</code> starting
- * <code>offset</code> bytes into the buffer. The number of bytes written will be
- * exactly <code>len</code>.
- *
- * @param buf The buffer from which to write the data
- * @param offset The offset into the buffer to start writing data from
- * @param len The number of bytes to write from the buffer to the output stream
- *
- * @exception IOException If any other error occurs
- */
-void
-write(byte[] buf, int offset, int len) throws IOException;
+ /**
+ * This method writes a Java boolean value to an output stream
+ *
+ * @param value The boolean value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeBoolean(boolean value) throws IOException;
+
+ /**
+ * This method writes a Java byte value to an output stream
+ *
+ * @param value The int value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeByte(int value) throws IOException;
+
+ /**
+ * This method writes a Java char value to an output stream
+ *
+ * @param value The char value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeChar(int value) throws IOException;
+
+ /**
+ * This method writes a Java int value to an output stream as a 16 bit value
+ *
+ * @param value The int value to write as a 16-bit value
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeShort(int value) throws IOException;
+
+ /**
+ * This method writes a Java int value to an output stream
+ *
+ * @param value The int value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeInt(int value) throws IOException;
+
+ /**
+ * This method writes a Java long value to an output stream
+ *
+ * @param value The long value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeLong(long value) throws IOException;
+
+ /**
+ * This method writes a Java float value to an output stream
+ *
+ * @param value The float value to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeFloat(float value) throws IOException;
+
+ /**
+ * This method writes a Java double value to an output stream
+ *
+ * @param value The double value to write
+ *
+ * @exception IOException If any other error occurs
+ */
+ void writeDouble(double value) throws IOException;
+
+ /**
+ * This method writes a String to an output stream as an array of bytes
+ *
+ * @param value The String to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeBytes(String value) throws IOException;
+
+ /**
+ * This method writes a String to an output stream as an array of char's
+ *
+ * @param value The String to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeChars(String value) throws IOException;
+
+ /**
+ * This method writes a String to an output stream encoded in
+ * UTF-8 format.
+ *
+ * @param value The String to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void writeUTF(String value) throws IOException;
+
+ /**
+ * This method writes an 8-bit value (passed into the method as a Java
+ * int) to an output stream.
+ *
+ * @param value The byte to write to the output stream
+ *
+ * @exception IOException If an error occurs
+ */
+ void write(int value) throws IOException;
+
+ /**
+ * This method writes the raw byte array passed in to the output stream.
+ *
+ * @param buf The byte array to write
+ *
+ * @exception IOException If an error occurs
+ */
+ void write(byte[] buf) throws IOException;
+
+ /**
+ * This method writes raw bytes from the passed array <code>buf</code>
+ * starting
+ * <code>offset</code> bytes into the buffer. The number of bytes
+ * written will be * exactly <code>len</code>.
+ *
+ * @param buf The buffer from which to write the data
+ * @param offset The offset into the buffer to start writing data from
+ * @param len The number of bytes to write from the buffer to the output
+ * stream
+ *
+ * @exception IOException If any other error occurs
+ */
+ void write(byte[] buf, int offset, int len) throws IOException;
} // interface DataOutput
+
diff --git a/libjava/java/io/DataOutputStream.java b/libjava/java/io/DataOutputStream.java
index 887761df356..644b5901c33 100644
--- a/libjava/java/io/DataOutputStream.java
+++ b/libjava/java/io/DataOutputStream.java
@@ -1,78 +1,200 @@
-// DataOutputStream.java - Output filter that implements DataOutput
+/* DataOutputStream.java -- Writes primitive Java datatypes to streams
+ Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc.
-/* Copyright (C) 1998, 1999 Free Software Foundation
+This file is part of GNU Classpath.
- This file is part of libgcj.
+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.
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
-package java.io;
+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.
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date September 24, 1998
- */
+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 java.io;
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* Status: Complete to version 1.1.
*/
+/**
+ * This class provides a mechanism for writing primitive Java datatypes
+ * to an <code>OutputStream</code> in a portable way. Data written to
+ * a stream using this class can be read back in using the
+ * <code>DataInputStream</code> class on any platform.
+ *
+ * @see DataInputStream
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public class DataOutputStream extends FilterOutputStream implements DataOutput
{
+ /**
+ * This is the total number of bytes that have been written to the
+ * stream by this object instance.
+ */
+ protected int written;
+
+ /**
+ * This method initializes an instance of <code>DataOutputStream</code> to
+ * write its data to the specified underlying <code>OutputStream</code>
+ *
+ * @param out The subordinate <code>OutputStream</code> to which this
+ * object will write
+ */
public DataOutputStream (OutputStream out)
{
super (out);
written = 0;
}
+ /**
+ * This method flushes any unwritten bytes to the underlying stream.
+ *
+ * @exception IOException If an error occurs.
+ */
public void flush () throws IOException
{
out.flush();
}
+ /**
+ * This method returns the total number of bytes that have been written to
+ * the underlying output stream so far. This is the value of the
+ * <code>written</code> instance variable
+ *
+ * @return The number of bytes written to the stream.
+ */
public final int size ()
{
return written;
}
+ /**
+ * This method writes the specified byte (passed as an <code>int</code>)
+ * to the underlying output stream.
+ *
+ * @param b The byte to write, passed as an <code>int</code>.
+ *
+ * @exception IOException If an error occurs.
+ */
public synchronized void write (int b) throws IOException
{
out.write(b);
++written;
}
- public synchronized void write (byte[] b, int off, int len)
- throws IOException, NullPointerException, IndexOutOfBoundsException
+ /**
+ * This method writes <code>len</code> bytes from the specified byte array
+ * <code>buf</code> starting at position <code>offset</code> into the
+ * buffer to the underlying output stream.
+ *
+ * @param buf The byte array to write from.
+ * @param offset The index into the byte array to start writing from.
+ * @param len The number of bytes to write.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public synchronized void write (byte[] buf, int offset, int len)
+ throws IOException
{
- out.write(b, off, len);
+ out.write(buf, offset, len);
written += len;
}
+ /**
+ * This method writes a Java <code>boolean</code> to the underlying output
+ * stream. For a value of <code>true</code>, 1 is written to the stream.
+ * For a value of <code>false</code>, 0 is written.
+ *
+ * @param b The <code>boolean</code> value to write to the stream
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeBoolean (boolean v) throws IOException
{
write (v ? 1 : 0);
}
+ /**
+ * This method writes a Java <code>byte</code> value to the underlying
+ * output stream.
+ *
+ * @param b The <code>byte</code> to write to the stream, passed as
+ * the low eight bits of an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeByte (int v) throws IOException
{
write (v & 0xff);
}
+ /**
+ * This method writes a Java <code>short</code> to the stream, high byte
+ * first. This method requires two bytes to encode the value.
+ *
+ * @param s The <code>short</code> value to write to the stream,
+ * passed as an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeShort (int v) throws IOException
{
write ((byte) (0xff & (v >> 8)));
write ((byte) (0xff & v));
}
+ /**
+ * This method writes a single <code>char</code> value to the stream,
+ * high byte first.
+ *
+ * @param c The <code>char</code> value to write,
+ * passed as an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeChar (int v) throws IOException
{
write ((byte) (0xff & (v >> 8)));
write ((byte) (0xff & v));
}
+ /**
+ * This method writes a Java <code>int</code> to the stream, high bytes
+ * first. This method requires four bytes to encode the value.
+ *
+ * @param i The <code>int</code> value to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeInt (int v) throws IOException
{
write ((byte) (0xff & (v >> 24)));
@@ -81,6 +203,14 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
write ((byte) (0xff & v));
}
+ /**
+ * This method writes a Java <code>long</code> to the stream, high bytes
+ * first. This method requires eight bytes to encode the value.
+ *
+ * @param l The <code>long</code> value to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeLong (long v) throws IOException
{
write ((byte) (0xff & (v >> 56)));
@@ -93,16 +223,55 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
write ((byte) (0xff & v));
}
+ /**
+ * This method writes a Java <code>float</code> value to the stream. This
+ * value is written by first calling the method
+ * <code>Float.floatToIntBits</code>
+ * to retrieve an <code>int</code> representing the floating point number,
+ * then writing this <code>int</code> value to the stream exactly the same
+ * as the <code>writeInt()</code> method does.
+ *
+ * @param f The floating point number to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see writeInt
+ */
public final void writeFloat (float v) throws IOException
{
writeInt (Float.floatToIntBits(v));
}
+ /**
+ * This method writes a Java <code>double</code> value to the stream. This
+ * value is written by first calling the method
+ * <code>Double.doubleToLongBits</code>
+ * to retrieve an <code>long</code> representing the floating point number,
+ * then writing this <code>long</code> value to the stream exactly the same
+ * as the <code>writeLong()</code> method does.
+ *
+ * @param d The double precision floating point number to write to
+ * the stream.
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see writeLong
+ */
public final void writeDouble (double v) throws IOException
{
writeLong (Double.doubleToLongBits(v));
}
+ /**
+ * This method writes all the bytes in a <code>String</code> out to the
+ * stream. One byte is written for each character in the
+ * <code>String</code>.
+ * The high eight bits of each character are discarded.
+ *
+ * @param s The <code>String</code> to write to the stream
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeBytes (String s) throws IOException
{
int len = s.length();
@@ -110,6 +279,15 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
writeByte (s.charAt(i));
}
+ /**
+ * This method writes all the characters in a <code>String</code> to the
+ * stream. There will be two bytes for each character value. The high
+ * byte of the character will be written first.
+ *
+ * @param s The <code>String</code> to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeChars (String s) throws IOException
{
int len = s.length();
@@ -117,6 +295,33 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
writeChar (s.charAt(i));
}
+ /**
+ * This method writes a Java <code>String</code> to the stream in a modified
+ * UTF-8 format. First, two bytes are written to the stream indicating the
+ * number of bytes to follow. Note that this is the number of bytes in the
+ * encoded <code>String</code> not the <code>String</code> length. Next
+ * come the encoded characters. Each character in the <code>String</code>
+ * is encoded as either one, two or three bytes. For characters in the
+ * range of <code>\u0001</code> to <\u007F>, one byte is used. The character
+ * value goes into bits 0-7 and bit eight is 0. For characters in the range
+ * of <code>\u0080</code> to <code>\u007FF</code>, two bytes are used. Bits
+ * 6-10 of the character value are encoded bits 0-4 of the first byte, with
+ * the high bytes having a value of "110". Bits 0-5 of the character value
+ * are stored in bits 0-5 of the second byte, with the high bits set to
+ * "10". This type of encoding is also done for the null character
+ * <code>\u0000</code>. This eliminates any C style NUL character values
+ * in the output. All remaining characters are stored as three bytes.
+ * Bits 12-15 of the character value are stored in bits 0-3 of the first
+ * byte. The high bits of the first bytes are set to "1110". Bits 6-11
+ * of the character value are stored in bits 0-5 of the second byte. The
+ * high bits of the second byte are set to "10". And bits 0-5 of the
+ * character value are stored in bits 0-5 of byte three, with the high bits
+ * of that byte set to "10".
+ *
+ * @param s The <code>String</code> to write to the output in UTF format
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeUTF (String s) throws IOException
{
int len = s.length();
@@ -160,6 +365,5 @@ public class DataOutputStream extends FilterOutputStream implements DataOutput
}
}
- // Number of bytes written so far.
- protected int written;
-}
+} // class DataOutputStream
+
diff --git a/libjava/java/io/Externalizable.java b/libjava/java/io/Externalizable.java
index 83f1b653ec5..d0d0d4c392e 100644
--- a/libjava/java/io/Externalizable.java
+++ b/libjava/java/io/Externalizable.java
@@ -39,72 +39,73 @@ exception statement from your version. */
package java.io;
/**
- * This interface provides a way that classes can completely control how
- * the data of their object instances are written and read to and from
- * streams. It has two methods which are used to write the data to a stream
- * and to read the data from a stream. The read method must read the data
- * in exactly the way it was written by the write method.
- * <p>
- * Note that classes which implement this interface must take into account
- * that all superclass data must also be written to the stream as well.
- * The class implementing this interface must figure out how to make that
- * happen.
- * <p>
- * This interface can be used to provide object persistence. When an
- * object is to be stored externally, the <code>writeExternal</code> method is
- * called to save state. When the object is restored, an instance is
- * created using the default no-argument constructor and the
- * <code>readExternal</code> method is used to restore the state.
- *
- * @version 0.0
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
+ * This interface provides a way that classes can completely control how
+ * the data of their object instances are written and read to and from
+ * streams. It has two methods which are used to write the data to a stream
+ * and to read the data from a stream. The read method must read the data
+ * in exactly the way it was written by the write method.
+ * <p>
+ * Note that classes which implement this interface must take into account
+ * that all superclass data must also be written to the stream as well.
+ * The class implementing this interface must figure out how to make that
+ * happen.
+ * <p>
+ * This interface can be used to provide object persistence. When an
+ * object is to be stored externally, the <code>writeExternal</code> method is
+ * called to save state. When the object is restored, an instance is
+ * created using the default no-argument constructor and the
+ * <code>readExternal</code> method is used to restore the state.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
public interface Externalizable extends Serializable
{
static final long serialVersionUID = -282491828744381764L;
-/**
- * This method restores an object's state by reading in the instance data
- * for the object from the passed in stream. Note that this stream is not
- * a subclass of <code>InputStream</code>, but rather is a class that implements
- * the <code>ObjectInput</code> interface. That interface provides a mechanism for
- * reading in Java data types from a stream.
- * <p>
- * Note that this method must be compatible with <code>writeExternal</code>.
- * It must read back the exact same types that were written by that
- * method in the exact order they were written.
- * <p>
- * If this method needs to read back an object instance, then the class
- * for that object must be found and loaded. If that operation fails,
- * then this method throws a <code>ClassNotFoundException</code>
- *
- * @param in An <code>ObjectInput</code> instance for reading in the object state
- *
- * @exception ClassNotFoundException If the class of an object being restored cannot be found
- * @exception IOException If any other error occurs
- */
-public abstract void
-readExternal(ObjectInput in) throws ClassNotFoundException, IOException;
-
-/*************************************************************************/
+ /**
+ * This method restores an object's state by reading in the instance data
+ * for the object from the passed in stream. Note that this stream is not
+ * a subclass of <code>InputStream</code>, but rather is a class that
+ * implements
+ * the <code>ObjectInput</code> interface. That interface provides a
+ * mechanism for
+ * reading in Java data types from a stream.
+ * <p>
+ * Note that this method must be compatible with <code>writeExternal</code>.
+ * It must read back the exact same types that were written by that
+ * method in the exact order they were written.
+ * <p>
+ * If this method needs to read back an object instance, then the class
+ * for that object must be found and loaded. If that operation fails,
+ * then this method throws a <code>ClassNotFoundException</code>
+ *
+ * @param in An <code>ObjectInput</code> instance for reading in the object
+ * state
+ *
+ * @exception ClassNotFoundException If the class of an object being
+ * restored cannot be found
+ * @exception IOException If any other error occurs
+ */
+ public abstract void readExternal(ObjectInput in)
+ throws ClassNotFoundException, IOException;
-/**
- * This method is responsible for writing the instance data of an object
- * to the passed in stream. Note that this stream is not a subclass of
- * <code>OutputStream</code>, but rather is a class that implements the
- * <code>ObjectOutput</code> interface. That interface provides a number of methods
- * for writing Java data values to a stream.
- * <p>
- * Not that the implementation of this method must be coordinated with
- * the implementation of <code>readExternal</code>.
- *
- * @param out An <code>ObjectOutput</code> instance for writing the object state
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-writeExternal(ObjectOutput out) throws IOException;
+ /**
+ * This method is responsible for writing the instance data of an object
+ * to the passed in stream. Note that this stream is not a subclass of
+ * <code>OutputStream</code>, but rather is a class that implements the
+ * <code>ObjectOutput</code> interface. That interface provides a
+ * number of methods
+ * for writing Java data values to a stream.
+ * <p>
+ * Not that the implementation of this method must be coordinated with
+ * the implementation of <code>readExternal</code>.
+ *
+ * @param out An <code>ObjectOutput</code> instance for writing the
+ * object state
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void writeExternal(ObjectOutput out) throws IOException;
} // interface Externalizable
diff --git a/libjava/java/io/File.java b/libjava/java/io/File.java
index 0f11bce669d..83e4c2e800d 100644
--- a/libjava/java/io/File.java
+++ b/libjava/java/io/File.java
@@ -1,37 +1,174 @@
-// File.java - File name
+/* File.java -- Class representing a file on disk
+ Copyright (C) 1998, 1999, 2000, 2001, 2003 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
- 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. */
package java.io;
-import java.util.*;
-import java.net.*;
+import java.net.MalformedURLException;
+import java.net.URL;
import gnu.gcj.runtime.FileDeleter;
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date September 24, 1998
- */
-
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* Status: Complete to version 1.3.
*/
+/**
+ * This class represents a file or directory on a local disk. It provides
+ * facilities for dealing with a variety of systems that use various
+ * types of path separators ("/" versus "\", for example). It also
+ * contains method useful for creating and deleting files and directories.
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public class File implements Serializable, Comparable
{
+ private static final long serialVersionUID = 301077366599181567L;
+
+ // QUERY arguments to access function.
+ private final static int READ = 0;
+ private final static int WRITE = 1;
+ private final static int EXISTS = 2;
+
+ // QUERY arguments to stat function.
+ private final static int DIRECTORY = 0;
+ private final static int ISFILE = 1;
+ private final static int ISHIDDEN = 2;
+
+ // QUERY arguments to attr function.
+ private final static int MODIFIED = 0;
+ private final static int LENGTH = 1;
+
+ private final native long attr (int query);
+ // On OSF1 V5.0, `stat' is a macro. It is easiest to use the name
+ // `_stat' instead. We do the same thing for `_access' just in
+ // case.
+ private final native boolean _access (int query);
+ private final native boolean _stat (int query);
+
+ /**
+ * This is the path separator string for the current host. This field
+ * contains the value of the <code>file.separator</code> system property.
+ * An example separator string would be "/" on the GNU system.
+ */
+ public static final String separator = System.getProperty("file.separator");
+
+ /**
+ * This is the first character of the file separator string. On many
+ * hosts (for example, on the GNU system), this represents the entire
+ * separator string. The complete separator string is obtained from the
+ * <code>file.separator</code>system property.
+ */
+ public static final char separatorChar = separator.charAt(0);
+
+ /**
+ * This is the string that is used to separate the host name from the
+ * path name in paths than include the host name. It is the value of
+ * the <code>path.separator</code> system property.
+ */
+ public static final String pathSeparator
+ = System.getProperty("path.separator");
+
+ /**
+ * This is the first character of the string used to separate the host name
+ * from the path name in paths that include a host. The separator string
+ * is taken from the <code>path.separator</code> system property.
+ */
+ public static final char pathSeparatorChar = pathSeparator.charAt(0);
+
+
+ static final String tmpdir = System.getProperty("java.io.tmpdir");
+ static int maxPathLen;
+ static boolean caseSensitive;
+ static String dupSeparator = separator + separator;
+
+ static
+ {
+ init_native();
+ }
+
+ // Native function called at class initialization. This should should
+ // set the maxPathLen and caseSensitive variables.
+ private static native void init_native();
+
+ /**
+ * This is the path to the file set when the object is created. It
+ * may be an absolute or relative path name.
+ */
+ private String path;
+
+ // We keep a counter for use by createTempFile. We choose the first
+ // value randomly to try to avoid clashes with other VMs.
+ private static long counter = Double.doubleToLongBits (Math.random ());
+
+ /**
+ * This method tests whether or not the current thread is allowed to
+ * to read the file pointed to by this object. This will be true if and
+ * and only if 1) the file exists and 2) the <code>SecurityManager</code>
+ * (if any) allows access to the file via it's <code>checkRead</code>
+ * method 3) the file is readable.
+ *
+ * @return <code>true</code> if reading is allowed,
+ * <code>false</code> otherwise
+ *
+ * @exception SecurityException If the <code>SecurityManager</code>
+ * does not allow access to the file
+ */
public boolean canRead ()
{
checkRead();
return _access (READ);
}
+ /**
+ * This method test whether or not the current thread is allowed to
+ * write to this object. This will be true if and only if 1) The
+ * <code>SecurityManager</code> (if any) allows write access to the
+ * file and 2) The file exists and 3) The file is writable. To determine
+ * whether or not a non-existent file can be created, check the parent
+ * directory for write access.
+ *
+ * @return <code>true</code> if writing is allowed, <code>false</code>
+ * otherwise
+ *
+ * @exception SecurityException If the <code>SecurityManager</code>
+ * does not allow access to the file
+ */
public boolean canWrite ()
{
checkWrite();
@@ -40,7 +177,23 @@ public class File implements Serializable, Comparable
private native boolean performCreate() throws IOException;
- /** @since 1.2 */
+ /**
+ * This method creates a new file of zero length with the same name as
+ * the path of this <code>File</code> object if an only if that file
+ * does not already exist.
+ * <p>
+ * A <code>SecurityManager</code>checkWrite</code> check is done prior
+ * to performing this action.
+ *
+ * @return <code>true</code> if the file was created, <code>false</code> if
+ * the file alread existed.
+ *
+ * @exception IOException If an I/O error occurs
+ * @exception SecurityException If the <code>SecurityManager</code> will
+ * not allow this operation to be performed.
+ *
+ * @since 1.2
+ */
public boolean createNewFile() throws IOException
{
checkWrite();
@@ -48,6 +201,16 @@ public class File implements Serializable, Comparable
}
private native boolean performDelete ();
+
+ /**
+ * This method deletes the file represented by this object. If this file
+ * is a directory, it must be empty in order for the delete to succeed.
+ *
+ * @return <code>true</code> if the file was deleted, <code>false</code>
+ * otherwise
+ *
+ * @exception SecurityException If deleting of the file is not allowed
+ */
public boolean delete ()
{
SecurityManager s = System.getSecurityManager();
@@ -57,6 +220,21 @@ public class File implements Serializable, Comparable
return performDelete ();
}
+ /**
+ * This method tests two <code>File</code> objects for equality by
+ * comparing the path of the specified <code>File</code> against the path
+ * of this object. The two objects are equal if an only if 1) The
+ * argument is not null 2) The argument is a <code>File</code> object and
+ * 3) The path of the <code>File</code>argument is equal to the path
+ * of this object.
+ * <p>
+ * The paths of the files are determined by calling the
+ * <code>getPath()</code>
+ * method on each object.
+ *
+ * @return <code>true</code> if the two objects are equal,
+ * <code>false</code> otherwise.
+ */
public boolean equals (Object obj)
{
if (! (obj instanceof File))
@@ -68,15 +246,29 @@ public class File implements Serializable, Comparable
return (path.equalsIgnoreCase(other.path));
}
+ /**
+ * This method tests whether or not the file represented by the object
+ * actually exists on the filesystem.
+ *
+ * @return <code>true</code> if the file exists, <code>false</code>otherwise.
+ *
+ * @exception SecurityException If reading of the file is not permitted
+ */
public boolean exists ()
{
checkRead();
return _access (EXISTS);
}
- public File (String p)
+ /**
+ * This method initializes a new <code>File</code> object to represent
+ * a file with the specified path.
+ *
+ * @param name The path name of the file
+ */
+ public File (String name)
{
- path = normalizePath(p);
+ path = normalizePath (name);
}
// Remove duplicate and redundant separator characters.
@@ -140,7 +332,17 @@ public class File implements Serializable, Comparable
return newpath.toString();
}
-
+
+ /**
+ * This method initializes a new <code>File</code> object to represent
+ * a file in the specified named directory. The path name to the file
+ * will be the directory name plus the separator string plus the file
+ * name. If the directory path name ends in the separator string, another
+ * separator string will still be appended.
+ *
+ * @param dirname The path to the directory the file resides in
+ * @param name The name of the file
+ */
public File (String dirPath, String name)
{
if (name == null)
@@ -158,11 +360,30 @@ public class File implements Serializable, Comparable
path = normalizePath(name);
}
- public File (File dir, String name)
+ /**
+ * This method initializes a new <code>File</code> object to represent
+ * a file in the specified directory. If the <code>directory</code>
+ * argument is <code>null</code>, the file is assumed to be in the
+ * current directory as specified by the <code>user.dir</code> system
+ * property
+ *
+ * @param directory The directory this file resides in
+ * @param name The name of the file
+ */
+ public File (File directory, String name)
{
- this (dir == null ? null : dir.path, name);
+ this (directory == null ? null : directory.path, name);
}
+ /**
+ * This method returns the path of this file as an absolute path name.
+ * If the path name is already absolute, then it is returned. Otherwise
+ * the value returned is the current directory plus the separatory
+ * string plus the path of the file. The current directory is determined
+ * from the <code>user.dir</code> system property.
+ *
+ * @return The absolute path of this file
+ */
public String getAbsolutePath ()
{
if (isAbsolute ())
@@ -179,26 +400,70 @@ public class File implements Serializable, Comparable
return System.getProperty ("user.dir") + separatorChar + path;
}
- /** @since 1.2 */
+ /**
+ * This method returns a <code>File</code> object representing the
+ * absolute path of this object.
+ *
+ * @return A <code>File</code> with the absolute path of the object.
+ *
+ * @since 1.2
+ */
public File getAbsoluteFile ()
{
return new File (getAbsolutePath());
}
+ /**
+ * This method returns a canonical representation of the pathname of
+ * this file. The actual form of the canonical representation is
+ * different. On the GNU system, the canonical form differs from the
+ * absolute form in that all relative file references to "." and ".."
+ * are resolved and removed.
+ * <p>
+ * Note that this method, unlike the other methods which return path
+ * names, can throw an IOException. This is because native method
+ * might be required in order to resolve the canonical path
+ *
+ * @exception IOException If an error occurs
+ */
public native String getCanonicalPath () throws IOException;
- /** @since 1.2 */
+ /**
+ * This method returns a <code>File</code> object representing the
+ * canonical path of this object.
+ *
+ * @return A <code>File</code> instance representing the canonical path of
+ * this object.
+ *
+ * @exception IOException If an error occurs.
+ *
+ * @since 1.2
+ */
public File getCanonicalFile () throws IOException
{
return new File (getCanonicalPath());
}
+ /**
+ * This method returns the name of the file. This is everything in the
+ * complete path of the file after the last instance of the separator
+ * string.
+ *
+ * @return The file name
+ */
public String getName ()
{
int last = path.lastIndexOf(separatorChar);
return path.substring(last + 1);
}
+ /**
+ * This method returns a <code>String</code> the represents this file's
+ * parent. <code>null</code> is returned if the file has no parent. The
+ * parent is determined via a simple operation which removes the
+ *
+ * @return The parent directory of this file
+ */
public String getParent ()
{
int last = path.lastIndexOf(separatorChar);
@@ -210,18 +475,40 @@ public class File implements Serializable, Comparable
return path.substring(0, last);
}
- /** @since 1.2 */
+ /**
+ * This method returns a <code>File</code> object representing the parent
+ * file of this one.
+ *
+ * @param A <code>File</code> for the parent of this object.
+ * <code>null</code>
+ * will be returned if this object does not have a parent.
+ *
+ * @since 1.2
+ */
public File getParentFile ()
{
String parent = getParent ();
return (parent == null ? null : new File (parent));
}
+ /**
+ * Returns the path name that represents this file. May be a relative
+ * or an absolute path name
+ *
+ * @return The pathname of this file
+ */
public String getPath ()
{
return path;
}
+ /**
+ * This method returns a hash code representing this file. It is the
+ * hash code of the path of this file (as returned by <code>getPath()</code>)
+ * exclusived or-ed with the value 1234321.
+ *
+ * @return The hash code for this object
+ */
public int hashCode ()
{
if (caseSensitive)
@@ -230,33 +517,93 @@ public class File implements Serializable, Comparable
return (path.toLowerCase().hashCode() ^ 1234321);
}
+ /**
+ * This method returns true if this object represents an absolute file
+ * path and false if it does not. The definition of an absolute path varies
+ * by system. As an example, on GNU systems, a path is absolute if it starts
+ * with a "/".
+ *
+ * @return <code>true</code> if this object represents an absolute
+ * file name, <code>false</code> otherwise.
+ */
public native boolean isAbsolute ();
+ /**
+ * This method tests whether or not the file represented by this object
+ * is a directory. In order for this method to return <code>true</code>,
+ * the file represented by this object must exist and be a directory.
+ *
+ * @return <code>true</code> if this file is a directory, <code>false</code>
+ * otherwise
+ *
+ * @exception SecurityException If reading of the file is not permitted
+ */
public boolean isDirectory ()
{
checkRead();
return _stat (DIRECTORY);
}
+ /**
+ * This method tests whether or not the file represented by this object
+ * is a "plain" file. A file is a plain file if and only if it 1) Exists,
+ * 2) Is not a directory or other type of special file.
+ *
+ * @return <code>true</code> if this is a plain file, <code>false</code>
+ * otherwise
+ *
+ * @exception SecurityException If reading of the file is not permitted
+ */
public boolean isFile ()
{
checkRead();
return _stat (ISFILE);
}
- /** @since 1.2 */
+ /**
+ * This method tests whether or not this file represents a "hidden" file.
+ * On GNU systems, a file is hidden if its name begins with a "."
+ * character. Files with these names are traditionally not shown with
+ * directory listing tools.
+ *
+ * @return <code>true</code> if the file is hidden, <code>false</code>
+ * otherwise.
+ *
+ * @since 1.2
+ */
public boolean isHidden()
{
checkRead();
return _stat (ISHIDDEN);
}
+ /**
+ * This method returns the last modification time of this file. The
+ * time value returned is an abstract value that should not be interpreted
+ * as a specified time value. It is only useful for comparing to other
+ * such time values returned on the same system. In that case, the larger
+ * value indicates a more recent modification time.
+ * <p>
+ * If the file does not exist, then a value of 0 is returned.
+ *
+ * @return The last modification time of the file
+ *
+ * @exception SecurityException If reading of the file is not permitted
+ */
public long lastModified ()
{
checkRead();
return attr (MODIFIED);
}
+ /**
+ * This method returns the length of the file represented by this object,
+ * or 0 if the specified file does not exist.
+ *
+ * @return The length of the file
+ *
+ * @exception SecurityException If reading of the file is not permitted
+ */
public long length ()
{
checkRead();
@@ -267,44 +614,168 @@ public class File implements Serializable, Comparable
FileFilter fileFilter,
Class result_type);
+ /**
+ * This method returns a array of <code>String</code>'s representing the
+ * list of files is then directory represented by this object. If this
+ * object represents a non-directory file or a non-existent file, then
+ * <code>null</code> is returned. The list of files will not contain
+ * any names such as "." or ".." which indicate the current or parent
+ * directory. Also, the names are not guaranteed to be sorted.
+ * <p>
+ * In this form of the <code>list()</code> method, a filter is specified
+ * that allows the caller to control which files are returned in the
+ * list. The <code>FilenameFilter</code> specified is called for each
+ * file returned to determine whether or not that file should be included
+ * in the list.
+ * <p>
+ * A <code>SecurityManager</code> check is made prior to reading the
+ * directory. If read access to the directory is denied, an exception
+ * will be thrown.
+ *
+ * @param filter An object which will identify files to exclude from
+ * the directory listing.
+ *
+ * @return An array of files in the directory, or <code>null</code>
+ * if this object does not represent a valid directory.
+ *
+ * @exception SecurityException If read access is not allowed to the
+ * directory by the <code>SecurityManager</code>
+ */
public String[] list (FilenameFilter filter)
{
checkRead();
return (String[]) performList (filter, null, String.class);
}
+ /**
+ * This method returns a array of <code>String</code>'s representing the
+ * list of files is then directory represented by this object. If this
+ * object represents a non-directory file or a non-existent file, then
+ * <code>null</code> is returned. The list of files will not contain
+ * any names such as "." or ".." which indicate the current or parent
+ * directory. Also, the names are not guaranteed to be sorted.
+ * <p>
+ * A <code>SecurityManager</code> check is made prior to reading the
+ * directory. If read access to the directory is denied, an exception
+ * will be thrown.
+ *
+ * @return An array of files in the directory, or <code>null</code> if
+ * this object does not represent a valid directory.
+ *
+ * @exception SecurityException If read access is not allowed to the
+ * directory by the <code>SecurityManager</code>
+ */
public String[] list ()
{
checkRead();
return (String[]) performList (null, null, String.class);
}
- /** @since 1.2 */
+ /**
+ * This method returns an array of <code>File</code> objects representing
+ * all the files in the directory represented by this object. If this
+ * object does not represent a directory, <code>null</code> is returned.
+ * Each of the returned <code>File</code> object is constructed with this
+ * object as its parent.
+ * <p>
+ * A <code>SecurityManager</code> check is made prior to reading the
+ * directory. If read access to the directory is denied, an exception
+ * will be thrown.
+ *
+ * @return An array of <code>File</code> objects for this directory.
+ *
+ * @exception SecurityException If the <code>SecurityManager</code> denies
+ * access to this directory.
+ *
+ * @since 1.2
+ */
public File[] listFiles()
{
checkRead();
return (File[]) performList (null, null, File.class);
}
- /** @since 1.2 */
+ /**
+ * This method returns an array of <code>File</code> objects representing
+ * all the files in the directory represented by this object. If this
+ * object does not represent a directory, <code>null</code> is returned.
+ * Each of the returned <code>File</code> object is constructed with this
+ * object as its parent.
+ * <p>
+ * In this form of the <code>listFiles()</code> method, a filter is specified
+ * that allows the caller to control which files are returned in the
+ * list. The <code>FilenameFilter</code> specified is called for each
+ * file returned to determine whether or not that file should be included
+ * in the list.
+ * <p>
+ * A <code>SecurityManager</code> check is made prior to reading the
+ * directory. If read access to the directory is denied, an exception
+ * will be thrown.
+ *
+ * @return An array of <code>File</code> objects for this directory.
+ *
+ * @exception SecurityException If the <code>SecurityManager</code> denies
+ * access to this directory.
+ *
+ * @since 1.2
+ */
public File[] listFiles(FilenameFilter filter)
{
checkRead();
return (File[]) performList (filter, null, File.class);
}
- /** @since 1.2 */
+ /**
+ * This method returns an array of <code>File</code> objects representing
+ * all the files in the directory represented by this object. If this
+ * object does not represent a directory, <code>null</code> is returned.
+ * Each of the returned <code>File</code> object is constructed with this
+ * object as its parent.
+ * <p>
+ * In this form of the <code>listFiles()</code> method, a filter is specified
+ * that allows the caller to control which files are returned in the
+ * list. The <code>FileFilter</code> specified is called for each
+ * file returned to determine whether or not that file should be included
+ * in the list.
+ * <p>
+ * A <code>SecurityManager</code> check is made prior to reading the
+ * directory. If read access to the directory is denied, an exception
+ * will be thrown.
+ *
+ * @return An array of <code>File</code> objects for this directory.
+ *
+ * @exception SecurityException If the <code>SecurityManager</code> denies
+ * access to this directory.
+ *
+ * @since 1.2
+ */
public File[] listFiles(FileFilter filter)
{
checkRead();
return (File[]) performList (null, filter, File.class);
}
+ /**
+ * This method returns a <code>String</code> that is the path name of the
+ * file as returned by <code>getPath</code>.
+ *
+ * @return A <code>String</code> representation of this file
+ */
public String toString ()
{
return path;
}
+ /**
+ * This method returns a <code>URL</code> with the <code>file:</code>
+ * protocol that represents this file. The exact form of this URL is
+ * system dependent.
+ *
+ * @return A <code>URL</code> for this object.
+ *
+ * @exception MalformedURLException If the URL cannot be created
+ * successfully.
+ */
public URL toURL () throws MalformedURLException
{
// On Win32, Sun's JDK returns URLs of the form "file:/c:/foo/bar.txt",
@@ -319,6 +790,14 @@ public class File implements Serializable, Comparable
private final native boolean performMkdir ();
+ /**
+ * This method creates a directory for the path represented by this object.
+ *
+ * @return <code>true</code> if the directory was created,
+ * <code>false</code> otherwise
+ *
+ * @exception SecurityException If write access is not allowed to this file
+ */
public boolean mkdir ()
{
checkWrite();
@@ -341,6 +820,15 @@ public class File implements Serializable, Comparable
return x.mkdir();
}
+ /**
+ * This method creates a directory for the path represented by this file.
+ * It will also create any intervening parent directories if necessary.
+ *
+ * @return <code>true</code> if the directory was created,
+ * <code>false</code> otherwise
+ *
+ * @exception SecurityException If write access is not allowed to this file
+ */
public boolean mkdirs ()
{
checkWrite();
@@ -354,7 +842,36 @@ public class File implements Serializable, Comparable
return Long.toString(counter++, Character.MAX_RADIX);
}
- /** @since 1.2 */
+ /**
+ * This method creates a temporary file in the specified directory. If
+ * the directory name is null, then this method uses the system temporary
+ * directory. The files created are guaranteed not to currently exist and
+ * the same file name will never be used twice in the same virtual
+ * machine instance.
+ * The system temporary directory is determined by examinging the
+ * <code>java.io.tmpdir</code> system property.
+ * <p>
+ * The <code>prefix</code> parameter is a sequence of at least three
+ * characters that are used as the start of the generated filename. The
+ * <code>suffix</code> parameter is a sequence of characters that is used
+ * to terminate the file name. This parameter may be <code>null</code>
+ * and if it is, the suffix defaults to ".tmp".
+ * <p>
+ * If a <code>SecurityManager</code> exists, then its <code>checkWrite</code>
+ * method is used to verify that this operation is permitted.
+ *
+ * @param prefix The character prefix to use in generating the path name.
+ * @param suffix The character suffix to use in generating the path name.
+ * @param directory The directory to create the file in, or
+ * <code>null</code> for the default temporary directory
+ *
+ * @exception IllegalArgumentException If the patterns is not valid
+ * @exception SecurityException If there is no permission to perform
+ * this operation
+ * @exception IOException If an error occurs
+ *
+ * @since 1.2
+ */
public static File createTempFile (String prefix, String suffix,
File directory)
throws IOException
@@ -418,7 +935,20 @@ public class File implements Serializable, Comparable
private native boolean performSetReadOnly();
- /** @since 1.2 */
+ /**
+ * This method sets the file represented by this object to be read only.
+ * A read only file or directory cannot be modified. Please note that
+ * GNU systems allow read only files to be deleted if the directory it
+ * is contained in is writable.
+ *
+ * @return <code>true</code> if the operation succeeded, <code>false</code>
+ * otherwise.
+ *
+ * @exception SecurityException If the <code>SecurityManager</code> does
+ * not allow this operation.
+ *
+ * @since 1.2
+ */
public boolean setReadOnly()
{
checkWrite();
@@ -427,7 +957,17 @@ public class File implements Serializable, Comparable
private static native File[] performListRoots();
- /** @since 1.2 */
+ /**
+ * This method returns an array of filesystem roots. Some operating systems
+ * have volume oriented filesystem. This method provides a mechanism for
+ * determining which volumes exist. GNU systems use a single hierarchical
+ * filesystem, so will have only one "/" filesystem root.
+ *
+ * @return An array of <code>File</code> objects for each filesystem root
+ * available.
+ *
+ * @since 1.2
+ */
public static File[] listRoots()
{
File[] roots = performListRoots();
@@ -464,13 +1004,55 @@ public class File implements Serializable, Comparable
return roots;
}
+ /**
+ * This method creates a temporary file in the system temporary directory.
+ * The files created are guaranteed not to currently exist and the same file
+ * name will never be used twice in the same virtual machine instance. The
+ * system temporary directory is determined by examinging the
+ * <code>java.io.tmpdir</code> system property.
+ * <p>
+ * The <code>prefix</code> parameter is a sequence of at least three
+ * characters that are used as the start of the generated filename. The
+ * <code>suffix</code> parameter is a sequence of characters that is used
+ * to terminate the file name. This parameter may be <code>null</code>
+ * and if it is, the suffix defaults to ".tmp".
+ * <p>
+ * If a <code>SecurityManager</code> exists, then its <code>checkWrite</code>
+ * method is used to verify that this operation is permitted.
+ * <p>
+ * This method is identical to calling
+ * <code>createTempFile(prefix, suffix, null)</code>.
+ *
+ * @param prefix The character prefix to use in generating the path name.
+ * @param suffix The character suffix to use in generating the path name.
+ *
+ * @exception IllegalArgumentException If the prefix or suffix are not valid.
+ * @exception SecurityException If there is no permission to perform
+ * this operation
+ * @exception IOException If an error occurs
+ */
public static File createTempFile (String prefix, String suffix)
throws IOException
{
return createTempFile (prefix, suffix, null);
}
- /** @since 1.2 */
+ /**
+ * This method compares the specified <code>File</code> to this one
+ * to test for equality. It does this by comparing the canonical path names
+ * of the files.
+ * <p>
+ * The canonical paths of the files are determined by calling the
+ * <code>getCanonicalPath</code> method on each object.
+ * <p>
+ * This method returns a 0 if the specified <code>Object</code> is equal
+ * to this one, a negative value if it is less than this one
+ * a positive value if it is greater than this one.
+ *
+ * @return An integer as described above
+ *
+ * @since 1.2
+ */
public int compareTo(File other)
{
if (caseSensitive)
@@ -479,7 +1061,27 @@ public class File implements Serializable, Comparable
return path.compareToIgnoreCase (other.path);
}
- /** @since 1.2 */
+ /**
+ * This method compares the specified <code>Object</code> to this one
+ * to test for equality. It does this by comparing the canonical path names
+ * of the files. This method is identical to <code>compareTo(File)</code>
+ * except that if the <code>Object</code> passed to it is not a
+ * <code>File</code>, it throws a <code>ClassCastException</code>
+ * <p>
+ * The canonical paths of the files are determined by calling the
+ * <code>getCanonicalPath</code> method on each object.
+ * <p>
+ * This method returns a 0 if the specified <code>Object</code> is equal
+ * to this one, a negative value if it is less than this one
+ * a positive value if it is greater than this one.
+ *
+ * @return An integer as described above
+ *
+ * @exception ClassCastException If the passed <code>Object</code> is
+ * not a <code>File</code>
+ *
+ * @since 1.2
+ */
public int compareTo(Object o)
{
File other = (File) o;
@@ -487,6 +1089,19 @@ public class File implements Serializable, Comparable
}
private native boolean performRenameTo (File dest);
+
+ /**
+ * This method renames the file represented by this object to the path
+ * of the file represented by the argument <code>File</code>.
+ *
+ * @param dest The <code>File</code> object representing the target name
+ *
+ * @return <code>true</code> if the rename succeeds, <code>false</code>
+ * otherwise.
+ *
+ * @exception SecurityException If write access is not allowed to the
+ * file by the <code>SecurityMananger</code>.
+ */
public boolean renameTo (File dest)
{
SecurityManager s = System.getSecurityManager();
@@ -501,41 +1116,29 @@ public class File implements Serializable, Comparable
}
private native boolean performSetLastModified(long time);
-
- /** @since 1.2 */
+
+ /**
+ * This method sets the modification time on the file to the specified
+ * value. This is specified as the number of seconds since midnight
+ * on January 1, 1970 GMT.
+ *
+ * @param time The desired modification time.
+ *
+ * @return <code>true</code> if the operation succeeded, <code>false</code>
+ * otherwise.
+ *
+ * @exception IllegalArgumentException If the specified time is negative.
+ * @exception SecurityException If the <code>SecurityManager</code> will
+ * not allow this operation.
+ *
+ * @since 1.2
+ */
public boolean setLastModified(long time)
{
checkWrite();
return performSetLastModified(time);
}
- public static final String pathSeparator
- = System.getProperty("path.separator");
- public static final char pathSeparatorChar = pathSeparator.charAt(0);
- public static final String separator = System.getProperty("file.separator");
- public static final char separatorChar = separator.charAt(0);
-
- static final String tmpdir = System.getProperty("java.io.tmpdir");
- static int maxPathLen;
- static boolean caseSensitive;
- static String dupSeparator = separator + separator;
-
- static
- {
- init_native();
- }
-
- // Native function called at class initialization. This should should
- // set the maxPathLen and caseSensitive variables.
- private static native void init_native();
-
- // The path.
- private String path;
-
- // We keep a counter for use by createTempFile. We choose the first
- // value randomly to try to avoid clashes with other VMs.
- private static long counter = Double.doubleToLongBits (Math.random ());
-
private void checkWrite ()
{
SecurityManager s = System.getSecurityManager();
@@ -584,26 +1187,4 @@ public class File implements Serializable, Comparable
path = path.replace (oldSeparatorChar, separatorChar);
}
- // QUERY arguments to access function.
- private final static int READ = 0;
- private final static int WRITE = 1;
- private final static int EXISTS = 2;
-
- // QUERY arguments to stat function.
- private final static int DIRECTORY = 0;
- private final static int ISFILE = 1;
- private final static int ISHIDDEN = 2;
-
- // QUERY arguments to attr function.
- private final static int MODIFIED = 0;
- private final static int LENGTH = 1;
-
- private final native long attr (int query);
- // On OSF1 V5.0, `stat' is a macro. It is easiest to use the name
- // `_stat' instead. We do the same thing for `_access' just in
- // case.
- private final native boolean _access (int query);
- private final native boolean _stat (int query);
-
- private static final long serialVersionUID = 301077366599181567L;
}
diff --git a/libjava/java/io/FileDescriptor.java b/libjava/java/io/FileDescriptor.java
index f105c6f8ab0..296c37f8b8a 100644
--- a/libjava/java/io/FileDescriptor.java
+++ b/libjava/java/io/FileDescriptor.java
@@ -79,7 +79,7 @@ public final class FileDescriptor
// When collected, close.
- protected void finalize () throws IOException
+ protected void finalize () throws Throwable
{
if (valid ())
close ();
diff --git a/libjava/java/io/FileFilter.java b/libjava/java/io/FileFilter.java
index faa4a7b451f..68950d3b6c9 100644
--- a/libjava/java/io/FileFilter.java
+++ b/libjava/java/io/FileFilter.java
@@ -39,30 +39,28 @@ exception statement from your version. */
package java.io;
/**
- * This interface has one method which is used for filtering pathnames
- * returned in a pathname listing. It is currently used by the
- * <code>File.listFiles()</code> method.
- * <p>
- * The method in this interface determines if a particular pathname should
- * or should not be included in the pathname listing.
- *
- * @version 0.0
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- */
+ * This interface has one method which is used for filtering pathnames
+ * returned in a pathname listing. It is currently used by the
+ * <code>File.listFiles()</code> method.
+ * <p>
+ * The method in this interface determines if a particular pathname should
+ * or should not be included in the pathname listing.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
public interface FileFilter
{
-/**
- * This method determines whether or not a given pathname should be included
- * in a pathname listing.
- *
- * @param pathname The pathname to test
- *
- * @return <code>true</code> if the path should be included in the list, <code>false</code> otherwise.
- */
-public abstract boolean
-accept(File pathname);
+ /**
+ * This method determines whether or not a given pathname should be included
+ * in a pathname listing.
+ *
+ * @param pathname The pathname to test
+ *
+ * @return <code>true</code> if the path should be included in the list,
+ * <code>false</code> otherwise.
+ */
+ public abstract boolean accept(File pathname);
} // interface FileFilter
diff --git a/libjava/java/io/FileInputStream.java b/libjava/java/io/FileInputStream.java
index 85d7bbe0879..b49922ed17a 100644
--- a/libjava/java/io/FileInputStream.java
+++ b/libjava/java/io/FileInputStream.java
@@ -1,32 +1,82 @@
-/* Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation
+/* FileInputStream.java -- An input stream that reads from disk files.
+ Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
- This file is part of libgcj.
+This file is part of GNU Classpath.
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
+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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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 java.io;
import java.nio.channels.FileChannel;
+import gnu.java.nio.FileChannelImpl;
-/**
- * @author Warren Levy <warrenl@cygnus.com>
- * @date October 28, 1998.
- */
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
* Status: Believed complete and correct.
*/
+/**
+ * This class is a stream that reads its bytes from a file.
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Warren Levy <warrenl@cygnus.com>
+ */
public class FileInputStream extends InputStream
{
- /* Contains the file descriptor for referencing the actual file. */
+ /**
+ * This is the native file handle for the file this stream is reading from
+ */
private FileDescriptor fd;
- private FileChannel ch;
+ private FileChannel ch; /* cached associated file-channel */
+ /**
+ * This method initializes a <code>FileInputStream</code> to read from the
+ * specified named file. A security check is first made to determine
+ * whether or not access to this file is allowed. This is done by
+ * calling the <code>checkRead()</code> method of the
+ * <code>SecurityManager</code>
+ * (if one exists) with the name of this file. An exception is thrown
+ * if reading is not allowed. If the file does not exist, an exception
+ * is also thrown.
+ *
+ * @param name The name of the file this stream should read from
+ *
+ * @exception SecurityException If read access to the file is not allowed
+ * @exception FileNotFoundException If the file does not exist.
+ */
public FileInputStream(String name) throws FileNotFoundException
{
SecurityManager s = System.getSecurityManager();
@@ -35,24 +85,83 @@ public class FileInputStream extends InputStream
fd = new FileDescriptor(name, FileDescriptor.READ);
}
+ /**
+ * This method initializes a <code>FileInputStream</code> to read from the
+ * specified <code>File</code> object. A security check is first
+ * made to determine
+ * whether or not access to this file is allowed. This is done by
+ * calling the <code>checkRead()</code> method of the
+ * <code>SecurityManager</code>
+ * (if one exists) with the name of this file. An exception is thrown
+ * if reading is not allowed. If the file does not exist, an exception
+ * is also thrown.
+ *
+ * @param file The <code>File</code> object this stream should read from
+ *
+ * @exception SecurityException If read access to the file is not allowed
+ * @exception FileNotFoundException If the file does not exist.
+ */
public FileInputStream(File file) throws FileNotFoundException
{
this(file.getPath());
}
+ /**
+ * This method initializes a <code>FileInputStream</code> to read from the
+ * specified <code>FileDescriptor</code> object. A security
+ * check is first made to
+ * determine whether or not access to this file is allowed. This is done by
+ * calling the <code>checkRead()</code> method of the
+ * <code>SecurityManager</code>
+ * (if one exists) with the specified <code>FileDescriptor</code>
+ * An exception is
+ * thrown if reading is not allowed.
+ *
+ * @param fd The <code>FileDescriptor</code> object this stream
+ * should read from
+ *
+ * @exception SecurityException If read access to the file is not allowed
+ */
public FileInputStream(FileDescriptor fdObj)
{
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkRead(fdObj);
+
fd = fdObj;
}
+ /**
+ * This method returns the number of bytes that can be read from this
+ * stream before a read can block. A return of 0 indicates that blocking
+ * might (or might not) occur on the very next read attempt.
+ * <p>
+ * This method returns the number of unread bytes remaining in the file if
+ * the descriptor being read from is an actual file. If this method is
+ * reading from a ''special'' file such a the standard input, this method
+ * will return the appropriate value for the stream being read.
+ * <p>
+ * Be aware that reads on plain files that do not reside locally might
+ * possibly block even if this method says they should not. For example,
+ * a remote server might crash, preventing an NFS mounted file from being
+ * read.
+ *
+ * @return The number of bytes that can be read before blocking could occur
+ *
+ * @exception IOException If an error occurs
+ */
public int available() throws IOException
{
return fd.available();
}
+ /**
+ * This method closes the stream. Any futher attempts to read from the
+ * stream will likely generate an IOException since the underlying file
+ * will be closed.
+ *
+ * @exception IOException If an error occurs.
+ */
public void close() throws IOException
{
if (fd.valid())
@@ -65,6 +174,15 @@ public class FileInputStream extends InputStream
// mentioned in the JCL.
}
+ /**
+ * This method returns a <code>FileDescriptor</code> object representing the
+ * underlying native file handle of the file this stream is reading
+ * from
+ *
+ * @return A <code>FileDescriptor</code> for this stream
+ *
+ * @exception IOException If an error occurs
+ */
public final FileDescriptor getFD() throws IOException
{
if (!fd.valid())
@@ -72,33 +190,111 @@ public class FileInputStream extends InputStream
return fd;
}
+ /**
+ * This method reads an unsigned byte from the input stream and returns it
+ * as an int in the range of 0-255. This method also will return -1 if
+ * the end of the stream has been reached.
+ * <p>
+ * This method will block until the byte can be read.
+ *
+ * @return The byte read or -1 if end of stream
+ *
+ * @exception IOException If an error occurs
+ */
public int read() throws IOException
{
return fd.read();
}
- public int read(byte[] b) throws IOException
+ /**
+ * This method reads bytes from a stream and stores them into a caller
+ * supplied buffer. This method attempts to completely fill the buffer,
+ * but can return before doing so. The actual number of bytes read is
+ * returned as an int. A -1 is returned to indicate the end of the stream.
+ * <p>
+ * This method will block until some data can be read.
+ * <p>
+ * This method operates by calling an overloaded read method like so:
+ * <code>read(buf, 0, buf.length)</code>
+ *
+ * @param buf The buffer into which the bytes read will be stored.
+ *
+ * @return The number of bytes read or -1 if end of stream.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public int read(byte[] buf) throws IOException
{
- return fd.read(b, 0, b.length);
+ return read(buf, 0, buf.length);
}
- public int read(byte[] b, int off, int len) throws IOException
+ /**
+ * This method read bytes from a stream and stores them into a caller
+ * supplied buffer. It starts storing the data at index
+ * <code>offset</code> into
+ * the buffer and attempts to read <code>len</code> bytes. This method can
+ * return before reading the number of bytes requested. The actual number
+ * of bytes read is returned as an int. A -1 is returned to indicate the
+ * end of the stream.
+ * <p>
+ * This method will block until some data can be read.
+ *
+ * @param buf The array into which the bytes read should be stored
+ * @param offset The offset into the array to start storing bytes
+ * @param len The requested number of bytes to read
+ *
+ * @return The actual number of bytes read, or -1 if end of stream.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public int read(byte[] buf, int offset, int len) throws IOException
{
- if (off < 0 || len < 0 || off + len > b.length)
+ if (offset < 0
+ || len < 0
+ || offset + len > buf.length)
throw new ArrayIndexOutOfBoundsException();
- return fd.read(b, off, len);
+ return fd.read(buf, offset, len);
}
- public long skip(long n) throws IOException
+ /**
+ * This method skips the specified number of bytes in the stream. It
+ * returns the actual number of bytes skipped, which may be less than the
+ * requested amount.
+ * <p>
+ * @param numBytes The requested number of bytes to skip
+ *
+ * @return The actual number of bytes skipped.
+ *
+ * @exception IOException If an error occurs
+ */
+ public long skip (long numBytes) throws IOException
{
- long startPos = fd.getFilePointer();
- long endPos = fd.seek(n, FileDescriptor.CUR, true);
- return endPos - startPos;
+ if (numBytes < 0)
+ throw new IllegalArgumentException ( "Can't skip negative bytes: " +
+ numBytes);
+
+ if (numBytes == 0)
+ return 0;
+
+ long curPos = fd.getFilePointer ();
+ long newPos = fd.seek (numBytes, FileDescriptor.CUR, true);
+ return newPos - curPos;
}
- public FileChannel getChannel ()
+ /**
+ * This method creates a java.nio.channels.FileChannel.
+ * Nio does not allow one to create a file channel directly.
+ * A file channel must be created by first creating an instance of
+ * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+ */
+ public synchronized FileChannel getChannel ()
{
+ if (ch == null)
+ ch = new FileChannelImpl (fd, false, this);
+
return ch;
}
-}
+
+} // class FileInputStream
+
diff --git a/libjava/java/io/FileOutputStream.java b/libjava/java/io/FileOutputStream.java
index 5ea24e5dfcf..1c75ccd04cd 100644
--- a/libjava/java/io/FileOutputStream.java
+++ b/libjava/java/io/FileOutputStream.java
@@ -1,29 +1,83 @@
-// FileOutputStream.java - Write bytes to a file.
+/* FileOutputStream.java -- Writes to a file on disk.
+ Copyright (C) 1998, 2001, 2003 Free Software Foundation, Inc.
-/* Copyright (C) 1998, 1999, 2001 Free Software Foundation
+This file is part of GNU Classpath.
- This file is part of libgcj.
+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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
package java.io;
import java.nio.channels.FileChannel;
-
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date September 24, 1998
- */
+import gnu.java.nio.FileChannelImpl;
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* Status: Complete to version 1.1.
*/
+/**
+ * This classes allows a stream of data to be written to a disk file or
+ * any open <code>FileDescriptor</code>.
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public class FileOutputStream extends OutputStream
{
+ private FileDescriptor fd;
+
+ private FileChannel ch; /* cached associated file-channel */
+
+ /**
+ * This method initializes a <code>FileOutputStream</code> object to write
+ * to the named file. The file is created if it does not exist, and
+ * the bytes written are written starting at the beginning of the file if
+ * the <code>append</code> argument is <code>false</code> or at the end
+ * of the file if the <code>append</code> argument is true.
+ * <p>
+ * Before opening a file, a security check is performed by calling the
+ * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+ * one exists) with the name of the file to be opened. An exception is
+ * thrown if writing is not allowed.
+ *
+ * @param name The name of the file this stream should write to
+ * @param append <code>true</code> to append bytes to the end of the file,
+ * or <code>false</code> to write bytes to the beginning
+ *
+ * @exception SecurityException If write access to the file is not allowed
+ * @exception FileNotFoundException If a non-security error occurs
+ */
public FileOutputStream (String path, boolean append)
throws SecurityException, FileNotFoundException
{
@@ -35,24 +89,103 @@ public class FileOutputStream extends OutputStream
: FileDescriptor.WRITE));
}
+ /**
+ * This method initializes a <code>FileOutputStream</code> object to write
+ * to the named file. The file is created if it does not exist, and
+ * the bytes written are written starting at the beginning of the file.
+ * <p>
+ * Before opening a file, a security check is performed by calling the
+ * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+ * one exists) with the name of the file to be opened. An exception is
+ * thrown if writing is not allowed.
+ *
+ * @param name The name of the file this stream should write to
+ *
+ * @exception SecurityException If write access to the file is not allowed
+ * @exception FileNotFoundException If a non-security error occurs
+ */
public FileOutputStream (String path)
throws SecurityException, FileNotFoundException
{
this (path, false);
}
+ /**
+ * This method initializes a <code>FileOutputStream</code> object to write
+ * to the specified <code>File</code> object. The file is created if it
+ * does not exist, and the bytes written are written starting at the
+ * beginning of the file.
+ * <p>
+ * Before opening a file, a security check is performed by calling the
+ * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+ * one exists) with the name of the file to be opened. An exception is
+ * thrown if writing is not allowed.
+ *
+ * @param file The <code>File</code> object this stream should write to
+ *
+ * @exception SecurityException If write access to the file is not allowed
+ * @exception FileNotFoundException If a non-security error occurs
+ */
public FileOutputStream (File file)
throws SecurityException, FileNotFoundException
{
this (file.getPath(), false);
}
+ /**
+ * This method initializes a <code>FileOutputStream</code> object to write
+ * to the specified <code>File</code> object. The file is created if it
+ * does not exist, and the bytes written are written starting at the
+ * beginning of the file if the <code>append</code> parameter is
+ * <code>false</code>. Otherwise bytes are written at the end of the
+ * file.
+ * <p>
+ * Before opening a file, a security check is performed by calling the
+ * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+ * one exists) with the name of the file to be opened. An exception is
+ * thrown if writing is not allowed.
+ *
+ * @param file The <code>File</code> object this stream should write to
+ * @param append <code>true</code> to append bytes to the end of the file,
+ * or <code>false</code> to write bytes to the beginning
+ *
+ * @exception SecurityException If write access to the file is not allowed
+ * @exception FileNotFoundException If a non-security error occurs
+ */
+ public FileOutputStream (File file, boolean append)
+ throws FileNotFoundException
+ {
+ this (file.getPath(), append);
+ }
+
+ /**
+ * This method initializes a <code>FileOutputStream</code> object to write
+ * to the file represented by the specified <code>FileDescriptor</code>
+ * object. This method does not create any underlying disk file or
+ * reposition the file pointer of the given descriptor. It assumes that
+ * this descriptor is ready for writing as is.
+ * <p>
+ * Before opening a file, a security check is performed by calling the
+ * <code>checkWrite</code> method of the <code>SecurityManager</code> (if
+ * one exists) with the specified <code>FileDescriptor</code> as an argument.
+ * An exception is thrown if writing is not allowed.
+ *
+ * @param file The <code>FileDescriptor</code> this stream should write to
+ *
+ * @exception SecurityException If write access to the file is not allowed
+ */
public FileOutputStream (FileDescriptor fdObj)
throws SecurityException
{
+ // Hmm, no other exception but this one to throw, but if the descriptor
+ // isn't valid, we surely don't have "permission" to write to it.
+ if (!fdObj.valid())
+ throw new SecurityException("Invalid FileDescriptor");
+
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkWrite(fdObj);
+
fd = fdObj;
}
@@ -62,6 +195,14 @@ public class FileOutputStream extends OutputStream
// mentioned in the JCL.
}
+ /**
+ * This method returns a <code>FileDescriptor</code> object representing
+ * the file that is currently being written to
+ *
+ * @return A <code>FileDescriptor</code> object for this stream
+ *
+ * @exception IOException If an error occurs
+ */
public final FileDescriptor getFD () throws IOException
{
if (! fd.valid())
@@ -69,35 +210,79 @@ public class FileOutputStream extends OutputStream
return fd;
}
+ /**
+ * This method writes a single byte of data to the file.
+ *
+ * @param b The byte of data to write, passed as an <code>int</code>
+ *
+ * @exception IOException If an error occurs
+ */
public void write (int b) throws IOException
{
fd.write (b);
}
- public void write (byte[] b) throws IOException, NullPointerException
+ /**
+ * This method writes all the bytes in the specified array to the
+ * file.
+ *
+ * @param buf The array of bytes to write to the file
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write (byte[] buf)
+ throws IOException
{
- fd.write (b, 0, b.length);
+ fd.write (buf, 0, buf.length);
}
- public void write (byte[] b, int off, int len)
- throws IOException, NullPointerException, IndexOutOfBoundsException
+ /**
+ * This method writes <code>len</code> bytes from the byte array
+ * <code>buf</code> to the file starting at index <code>offset</code>.
+ *
+ * @param buf The array of bytes to write to the file
+ * @param offset The offset into the array to start writing bytes from
+ * @param len The number of bytes to write to the file
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write (byte[] buf, int offset, int len)
+ throws IOException
{
- if (off < 0 || len < 0 || off + len > b.length)
+ if (offset < 0
+ || len < 0
+ || offset + len > buf.length)
throw new ArrayIndexOutOfBoundsException ();
- fd.write (b, off, len);
+
+ fd.write (buf, offset, len);
}
+ /**
+ * This method closes the underlying file. Any further attempts to
+ * write to this stream will likely generate an exception since the
+ * file is closed.
+ *
+ * @exception IOException If an error occurs
+ */
public void close () throws IOException
{
if (fd.valid())
fd.close();
}
- // Instance variables.
- private FileDescriptor fd;
-
- public FileChannel getChannel ()
+ /**
+ * This method creates a java.nio.channels.FileChannel.
+ * Nio does not allow one to create a file channel directly.
+ * A file channel must be created by first creating an instance of
+ * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+ */
+ public synchronized FileChannel getChannel()
{
- return null;
+ if (ch == null)
+ ch = new FileChannelImpl (fd, true, this);
+
+ return ch;
}
-}
+
+} // class FileOutputStream
+
diff --git a/libjava/java/io/FilePermission.java b/libjava/java/io/FilePermission.java
index 0fc06c91473..a86c7c9ff99 100644
--- a/libjava/java/io/FilePermission.java
+++ b/libjava/java/io/FilePermission.java
@@ -1,5 +1,5 @@
/* java.lang.FilePermission
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,7 +45,8 @@ public final class FilePermission extends Permission implements Serializable
{
static final long serialVersionUID = 7930732926638008763L;
- private static final String CURRENT_DIRECTORY = System.getProperty("user.dir");
+ private static final String CURRENT_DIRECTORY =
+ System.getProperty("user.dir");
private boolean usingPerms = false;
private boolean readPerm = false;
private boolean writePerm = false;
@@ -53,26 +54,28 @@ public final class FilePermission extends Permission implements Serializable
private boolean deletePerm = false;
private String actionsString;
- private void cachePerms() {
+ private void cachePerms()
+ {
// While race conditions could occur, they don't matter at all.
String action;
int i = actionsString.indexOf(',');
int startI = 0;
- while(i != -1) {
- action = actionsString.substring(startI,i);
- if(action.equals("read"))
- readPerm = true;
- else if(action.equals("write"))
- writePerm = true;
- else if(action.equals("execute"))
- executePerm = true;
- else if(action.equals("delete"))
- deletePerm = true;
+ while(i != -1)
+ {
+ action = actionsString.substring(startI,i);
+ if(action.equals("read"))
+ readPerm = true;
+ else if(action.equals("write"))
+ writePerm = true;
+ else if(action.equals("execute"))
+ executePerm = true;
+ else if(action.equals("delete"))
+ deletePerm = true;
- startI = i+1;
- i = actionsString.indexOf(',',startI);
- }
+ startI = i+1;
+ i = actionsString.indexOf(',',startI);
+ }
action = actionsString.substring(startI);
if(action.equals("read"))
@@ -90,28 +93,32 @@ public final class FilePermission extends Permission implements Serializable
** permission represents.
** @param actionsString a comma-separated list of the actions this
** permission represents.
- ** @XXX what to do when the file string is malformed?
+ ** FIXME: what to do when the file string is malformed?
**/
public FilePermission(String pathExpression, String actionsString)
- {
- super(pathExpression);
- this.actionsString = actionsString;
- }
+ {
+ super(pathExpression);
+ this.actionsString = actionsString;
+ }
/** Get the actions this FilePermission supports.
** @return the String representing the actions this FilePermission supports.
**/
- public String getActions() {
+ public String getActions()
+ {
return actionsString;
}
/** Get the hash code for this Object.<P>
- ** FilePermission's hash code is calculated as the exclusive or of the target
+ ** FilePermission's hash code is calculated as the exclusive or of the
+ ** target
** String's hash code and the action String's hash code.
- ** @specnote Sun did not specify how to calculate the hash code; I made this up.
+ ** @specnote Sun did not specify how to calculate the hash code;
+ ** I made this up.
** @return the hash code for this Object.
**/
- public int hashCode() {
+ public int hashCode()
+ {
return getName().hashCode() ^ actionsString.hashCode();
}
@@ -121,7 +128,8 @@ public final class FilePermission extends Permission implements Serializable
** @param o the Object to compare to.
** @return whether the Objects are semantically equivalent.
**/
- public boolean equals(Object o) {
+ public boolean equals(Object o)
+ {
if(!(o instanceof FilePermission))
return false;
FilePermission p = (FilePermission)o;
@@ -136,23 +144,32 @@ public final class FilePermission extends Permission implements Serializable
/* Compare names, taking into account if they refer to a
* directory and one has a separator and the other does not.
*/
- if(f1.charAt(f1.length()) == File.separatorChar) {
- if(f2.charAt(f2.length()) == File.separatorChar) {
- if(!f2.equals(f1))
- return false;
- } else {
- if(!f2.equals(f1.substring(0,f1.length()-1)))
- return false;
- }
- } else {
- if(f2.charAt(f2.length()) == File.separatorChar) {
- if(!f1.equals(f2.substring(0,f2.length()-1)))
- return false;
- } else {
- if(!f1.equals(f2))
- return false;
- }
- }
+ if(f1.charAt(f1.length()) == File.separatorChar)
+ {
+ if(f2.charAt(f2.length()) == File.separatorChar)
+ {
+ if(!f2.equals(f1))
+ return false;
+ }
+ else
+ {
+ if(!f2.equals(f1.substring(0,f1.length()-1)))
+ return false;
+ }
+ }
+ else
+ {
+ if(f2.charAt(f2.length()) == File.separatorChar)
+ {
+ if(!f1.equals(f2.substring(0,f2.length()-1)))
+ return false;
+ }
+ else
+ {
+ if(!f1.equals(f2))
+ return false;
+ }
+ }
return readPerm == p.readPerm && writePerm == p.writePerm && executePerm == p.executePerm && deletePerm == p.deletePerm;
}
@@ -160,13 +177,15 @@ public final class FilePermission extends Permission implements Serializable
** Permission A implies permission B if these things are all true:
** <OL>
** <LI>A and B are both FilePermissions.</LI>
- ** <LI>All possible files in B are included in A (possibly more are in A).</LI>
+ ** <LI>All possible files in B are included in A
+ ** (possibly more are in A).</LI>
** <LI>All actions B supports, A also supports.</LI>
** </OL>
** @param p the Permission to compare against.
** @return whether this Permission implies p
**/
- public boolean implies(Permission p) {
+ public boolean implies(Permission p)
+ {
FilePermission fp;
if(!(p instanceof FilePermission))
return false;
@@ -174,48 +193,67 @@ public final class FilePermission extends Permission implements Serializable
String f1 = getName();
String f2 = fp.getName();
- if(f1.charAt(0) != File.separatorChar) {
- f1 = CURRENT_DIRECTORY + f1;
- }
- if(f2.charAt(0) != File.separatorChar) {
- f2 = CURRENT_DIRECTORY + f2;
- }
+ if(f1.charAt(0) != File.separatorChar)
+ {
+ f1 = CURRENT_DIRECTORY + f1;
+ }
+ if(f2.charAt(0) != File.separatorChar)
+ {
+ f2 = CURRENT_DIRECTORY + f2;
+ }
String sub1, sub2a, sub2b;
- switch(f1.charAt(f1.length() - 1)) {
- case '*':
- sub1 = f1.substring(0,f1.length() - 1); // chop off "*"
- if(f2.length() <= sub1.length()) {
- /* If it's smaller, there is no way it could be part of this directory.
- * If it's the same (or length - 1), it could be the same directory but
- * specifies access to the directory rather than the files in it.
- */
- return false;
- } else if(f2.charAt(sub1.length() - 1) == File.separatorChar) {
- /* Make sure the part before the "/" is the same */
- if(!f2.substring(0,sub1.length()).equals(sub1))
- return false;
- /* Make sure there are no subdirectories specified underneath this one */
- String sub2 = f2.substring(sub1.length()+1);
- if(f2.substring(sub1.length()+1).indexOf(File.separatorChar) != -1)
- return false;
- } else {
- /* Obviously not equal: f2 is either not a directory or is not
- * the same directory (its name continues further than we want)
- */
- return false;
- }
- break;
- case '-':
- sub1 = f1.substring(0,f1.length() - 2); // chop off "/-"
- if(f2.length() < sub1.length()) {
- /* If it's smaller, there is no way it could be part of this directory. */
- return false;
- } else if(f2.length() > sub1.length() && f2.charAt(sub1.length()) != File.separatorChar) {
- return false;
- } else if(!f2.substring(0,sub1.length()).equals(sub1))
- return false;
- break;
+ switch(f1.charAt(f1.length() - 1))
+ {
+ case '*':
+ sub1 = f1.substring(0,f1.length() - 1); // chop off "*"
+ if(f2.length() <= sub1.length())
+ {
+ /* If it's smaller, there is no way it could be part of this
+ * directory.
+ * If it's the same (or length - 1), it could be the same
+ * directory but
+ * specifies access to the directory rather than the files in it.
+ */
+ return false;
+ }
+ else if(f2.charAt(sub1.length() - 1) == File.separatorChar)
+ {
+ /* Make sure the part before the "/" is the same */
+ if(!f2.substring(0,sub1.length()).equals(sub1))
+ return false;
+ /* Make sure there are no subdirectories specified
+ underneath this one */
+ String sub2 = f2.substring(sub1.length()+1);
+ if(f2.substring(sub1.length()+1).indexOf(File.separatorChar)
+ != -1)
+ return false;
+ }
+ else
+ {
+ /* Obviously not equal: f2 is either not a directory or is not
+ * the same directory (its name continues further than we want)
+ */
+ return false;
+ }
+ break;
+ case '-':
+ sub1 = f1.substring(0,f1.length() - 2); // chop off "/-"
+ if(f2.length() < sub1.length())
+ {
+ /* If it's smaller, there is no way it could be part of
+ * this directory. */
+ return false;
+ }
+ else if(f2.length() > sub1.length() && f2.charAt(sub1.length())
+ != File.separatorChar)
+ {
+ return false;
+
+ }
+ else if(!f2.substring(0,sub1.length()).equals(sub1))
+ return false;
+ break;
/* Looks redundant with default case and won't compile anyway - arenn
case File.separatorChar:
if(f2.charAt(f2.length()) == File.separatorChar) {
@@ -227,16 +265,19 @@ public final class FilePermission extends Permission implements Serializable
}
break;
*/
- default:
- if(f2.charAt(f2.length()) == File.separatorChar) {
- if(!f1.equals(f2.substring(0,f2.length()-1)))
- return false;
- } else {
- if(!f1.equals(f2))
- return false;
+ default:
+ if(f2.charAt(f2.length()) == File.separatorChar)
+ {
+ if(!f1.equals(f2.substring(0,f2.length()-1)))
+ return false;
+ }
+ else
+ {
+ if(!f1.equals(f2))
+ return false;
+ }
+ break;
}
- break;
- }
if(!usingPerms)
cachePerms();
@@ -254,4 +295,5 @@ public final class FilePermission extends Permission implements Serializable
return true;
}
-}
+} // class FilePermission
+
diff --git a/libjava/java/io/FileReader.java b/libjava/java/io/FileReader.java
index 9bd271cfe04..c18613852ab 100644
--- a/libjava/java/io/FileReader.java
+++ b/libjava/java/io/FileReader.java
@@ -1,5 +1,5 @@
/* FileReader.java -- Convenience class for reading characters from a file
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,8 +46,6 @@ package java.io;
* to read from files using the default character encoding. Use
* <code>InputStreamReader</code> directly to use a non-default encoding.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public class FileReader extends InputStreamReader
@@ -90,4 +88,5 @@ public class FileReader extends InputStreamReader
{
super(new FileInputStream(name));
}
-}
+} // class FileReader
+
diff --git a/libjava/java/io/FileWriter.java b/libjava/java/io/FileWriter.java
index 265f31cce64..44db08c535c 100644
--- a/libjava/java/io/FileWriter.java
+++ b/libjava/java/io/FileWriter.java
@@ -1,5 +1,5 @@
/* FileWriter.java -- Convenience class for writing to files.
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -54,84 +54,91 @@ package java.io;
public class FileWriter extends OutputStreamWriter
{
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * This method initializes a new <code>FileWriter</code> object to write
- * to the specified <code>File</code> object.
- *
- * @param file The <code>File</code> object to write to.
- *
- * @param SecurityException If writing to this file is forbidden by the
- * <code>SecurityManager</code>.
- * @param IOException If any other error occurs
- */
-public
-FileWriter(File file) throws SecurityException, IOException
-{
- super(new FileOutputStream(file));
-}
-
-/*************************************************************************/
-
-/**
- * This method initializes a new <code>FileWriter</code> object to write
- * to the specified <code>FileDescriptor</code> object.
- *
- * @param fd The <code>FileDescriptor</code> object to write to
- *
- * @param SecurityException If writing to this file is forbidden by the
- * <code>SecurityManager</code>.
- */
-public
-FileWriter(FileDescriptor fd) throws SecurityException
-{
- super(new FileOutputStream(fd));
-}
-
-/*************************************************************************/
-
-/**
- * This method intializes a new <code>FileWriter</code> object to write to the
- * specified named file.
- *
- * @param name The name of the file to write to
- *
- * @param SecurityException If writing to this file is forbidden by the
- * <code>SecurityManager</code>.
- * @param IOException If any other error occurs
- */
-public
-FileWriter(String name) throws IOException
-{
- super(new FileOutputStream(name));
-}
-
-/*************************************************************************/
-
-/**
- * This method intializes a new <code>FileWriter</code> object to write to the
- * specified named file. This form of the constructor allows the caller
- * to determin whether data should be written starting at the beginning or
- * the end of the file.
- *
- * @param name The name of the file to write to
- * @param append <code>true</code> to start adding data at the end of the
- * file, <code>false</code> otherwise.
- *
- * @param SecurityException If writing to this file is forbidden by the
- * <code>SecurityManager</code>.
- * @param IOException If any other error occurs
- */
-public
-FileWriter(String name, boolean append) throws IOException
-{
- super(new FileOutputStream(name, append));
-}
+ /*
+ * Constructors
+ */
+
+ /**
+ * This method initializes a new <code>FileWriter</code> object to write
+ * to the specified <code>File</code> object.
+ *
+ * @param file The <code>File</code> object to write to.
+ *
+ * @param SecurityException If writing to this file is forbidden by the
+ * <code>SecurityManager</code>.
+ * @param IOException If any other error occurs
+ */
+ public FileWriter(File file) throws SecurityException, IOException
+ {
+ super(new FileOutputStream(file));
+ }
+
+ /**
+ * This method initializes a new <code>FileWriter</code> object to write
+ * to the specified <code>File</code> object.
+ *
+ * @param file The <code>File</code> object to write to.
+ * @param append <code>true</code> to start adding data at the end of the
+ * file, <code>false</code> otherwise.
+ *
+ * @param SecurityException If writing to this file is forbidden by the
+ * <code>SecurityManager</code>.
+ * @param IOException If any other error occurs
+ */
+ public FileWriter(File file, boolean append) throws IOException
+ {
+ super(new FileOutputStream(file, append));
+ }
+
+ /**
+ * This method initializes a new <code>FileWriter</code> object to write
+ * to the specified <code>FileDescriptor</code> object.
+ *
+ * @param fd The <code>FileDescriptor</code> object to write to
+ *
+ * @param SecurityException If writing to this file is forbidden by the
+ * <code>SecurityManager</code>.
+ */
+ public FileWriter(FileDescriptor fd) throws SecurityException
+ {
+ super(new FileOutputStream(fd));
+ }
+
+ /**
+ * This method intializes a new <code>FileWriter</code> object to
+ * write to the
+ * specified named file.
+ *
+ * @param name The name of the file to write to
+ *
+ * @param SecurityException If writing to this file is forbidden by the
+ * <code>SecurityManager</code>.
+ * @param IOException If any other error occurs
+ */
+ public FileWriter(String name) throws IOException
+ {
+ super(new FileOutputStream(name));
+ }
+
+ /**
+ * This method intializes a new <code>FileWriter</code> object to
+ * write to the
+ * specified named file. This form of the constructor allows the caller
+ * to determin whether data should be written starting at the beginning or
+ * the end of the file.
+ *
+ * @param name The name of the file to write to
+ * @param append <code>true</code> to start adding data at the end of the
+ * file, <code>false</code> otherwise.
+ *
+ * @param SecurityException If writing to this file is forbidden by the
+ * <code>SecurityManager</code>.
+ * @param IOException If any other error occurs
+ */
+ public FileWriter(String name, boolean append) throws IOException
+ {
+ super(new FileOutputStream(name, append));
+ }
} // class FileWriter
diff --git a/libjava/java/io/FilenameFilter.java b/libjava/java/io/FilenameFilter.java
index 68ff6a363b1..9e95b1e4987 100644
--- a/libjava/java/io/FilenameFilter.java
+++ b/libjava/java/io/FilenameFilter.java
@@ -44,30 +44,30 @@ package java.io;
*/
/**
- * This interface has one method which is used for filtering filenames
- * returned in a directory listing. It is currently used by the
- * <code>File.list()</code> method and by the filename dialog in AWT.
- * <p>
- * The method in this interface determines if a particular file should
- * or should not be included in the file listing.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Tom Tromey <tromey@cygnus.com>
- */
+ * This interface has one method which is used for filtering filenames
+ * returned in a directory listing. It is currently used by the
+ * <code>File.list()</code> method and by the filename dialog in AWT.
+ * <p>
+ * The method in this interface determines if a particular file should
+ * or should not be included in the file listing.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public interface FilenameFilter
{
-/**
- * This method determines whether or not a given file should be included
- * in a directory listing.
- *
- * @param dir The <code>File</code> instance for the directory being read
- * @param name The name of the file to test
- *
- * @return <code>true</code> if the file should be included in the list,
- * <code>false</code> otherwise.
- */
-boolean
-accept(File dir, String name);
+ /**
+ * This method determines whether or not a given file should be included
+ * in a directory listing.
+ *
+ * @param dir The <code>File</code> instance for the directory being read
+ * @param name The name of the file to test
+ *
+ * @return <code>true</code> if the file should be included in the list,
+ * <code>false</code> otherwise.
+ */
+ boolean accept(File dir, String name);
} // interface FilenameFilter
+
diff --git a/libjava/java/io/FilterInputStream.java b/libjava/java/io/FilterInputStream.java
index 7176b596423..fe45d33e368 100644
--- a/libjava/java/io/FilterInputStream.java
+++ b/libjava/java/io/FilterInputStream.java
@@ -69,180 +69,137 @@ package java.io;
*/
public class FilterInputStream extends InputStream
{
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the subordinate <code>InputStream</code> to which method calls
- * are redirected
- */
-protected InputStream in;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * Create a <code>FilterInputStream</code> with the specified subordinate
- * <code>InputStream</code>.
- *
- * @param in The subordinate <code>InputStream</code>
- */
-protected
-FilterInputStream(InputStream in)
-{
- this.in = in;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * Calls the <code>in.mark(int)</code> method.
- *
- * @param readlimit The parameter passed to <code>in.mark(int)</code>
- */
-public void
-mark(int readlimit)
-{
- in.mark(readlimit);
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.markSupported()</code> method.
- *
- * @return <code>true</code> if mark/reset is supported, <code>false</code>
- * otherwise
- */
-public boolean
-markSupported()
-{
- return(in.markSupported());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.reset()</code> method.
- *
- * @exception IOException If an error occurs
- */
-public void
-reset() throws IOException
-{
- in.reset();
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.available()</code> method.
- *
- * @return The value returned from <code>in.available()</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-available() throws IOException
-{
- return(in.available());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.skip(long)</code> method
- *
- * @param The requested number of bytes to skip.
- *
- * @return The value returned from <code>in.skip(long)</code>
- *
- * @exception IOException If an error occurs
- */
-public long
-skip(long num_bytes) throws IOException
-{
- return(in.skip(num_bytes));
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.read()</code> method
- *
- * @return The value returned from <code>in.read()</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-read() throws IOException
-{
- return(in.read());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>read(byte[], int, int)</code> overloaded method. Note that
- * this method does not redirect its call directly to a corresponding
- * method in <code>in</code>. This allows subclasses to override only the
- * three argument version of <code>read</code>.
- *
- * @param buf The buffer to read bytes into
- *
- * @return The value retured from <code>in.read(byte[], int, int)</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-read(byte[] buf) throws IOException
-{
- return(read(buf, 0, buf.length));
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.read(byte[], int, int)</code> method.
- *
- * @param buf The buffer to read bytes into
- * @param offset The index into the buffer to start storing bytes
- * @param len The maximum number of bytes to read.
- *
- * @return The value retured from <code>in.read(byte[], int, int)</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-read(byte[] buf, int offset, int len) throws IOException
-{
- return(in.read(buf, offset, len));
-}
-
-/*************************************************************************/
-
-/**
- * This method closes the input stream by closing the input stream that
- * this object is filtering. Future attempts to access this stream may
- * throw an exception.
- *
- * @exception IOException If an error occurs
- */
-public void
-close() throws IOException
-{
- in.close();
-}
+ /**
+ * This is the subordinate <code>InputStream</code> to which method calls
+ * are redirected
+ */
+ protected InputStream in;
+
+ /**
+ * Create a <code>FilterInputStream</code> with the specified subordinate
+ * <code>InputStream</code>.
+ *
+ * @param in The subordinate <code>InputStream</code>
+ */
+ protected FilterInputStream(InputStream in)
+ {
+ this.in = in;
+ }
+
+ /**
+ * Calls the <code>in.mark(int)</code> method.
+ *
+ * @param readlimit The parameter passed to <code>in.mark(int)</code>
+ */
+ public void mark(int readlimit)
+ {
+ in.mark(readlimit);
+ }
+
+ /**
+ * Calls the <code>in.markSupported()</code> method.
+ *
+ * @return <code>true</code> if mark/reset is supported, <code>false</code>
+ * otherwise
+ */
+ public boolean markSupported()
+ {
+ return(in.markSupported());
+ }
+
+ /**
+ * Calls the <code>in.reset()</code> method.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void reset() throws IOException
+ {
+ in.reset();
+ }
+
+ /**
+ * Calls the <code>in.available()</code> method.
+ *
+ * @return The value returned from <code>in.available()</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int available() throws IOException
+ {
+ return(in.available());
+ }
+
+ /**
+ * Calls the <code>in.skip(long)</code> method
+ *
+ * @param numBytes The requested number of bytes to skip.
+ *
+ * @return The value returned from <code>in.skip(long)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public long skip(long num_bytes) throws IOException
+ {
+ return(in.skip(num_bytes));
+ }
+
+ /**
+ * Calls the <code>in.read()</code> method
+ *
+ * @return The value returned from <code>in.read()</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read() throws IOException
+ {
+ return(in.read());
+ }
+
+ /**
+ * Calls the <code>read(byte[], int, int)</code> overloaded method.
+ * Note that
+ * this method does not redirect its call directly to a corresponding
+ * method in <code>in</code>. This allows subclasses to override only the
+ * three argument version of <code>read</code>.
+ *
+ * @param buf The buffer to read bytes into
+ *
+ * @return The value retured from <code>in.read(byte[], int, int)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read(byte[] buf) throws IOException
+ {
+ return(read(buf, 0, buf.length));
+ }
+
+ /**
+ * Calls the <code>in.read(byte[], int, int)</code> method.
+ *
+ * @param buf The buffer to read bytes into
+ * @param offset The index into the buffer to start storing bytes
+ * @param len The maximum number of bytes to read.
+ *
+ * @return The value retured from <code>in.read(byte[], int, int)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read(byte[] buf, int offset, int len) throws IOException
+ {
+ return(in.read(buf, offset, len));
+ }
+
+ /**
+ * This method closes the input stream by closing the input stream that
+ * this object is filtering. Future attempts to access this stream may
+ * throw an exception.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void close() throws IOException
+ {
+ in.close();
+ }
} // class FilterInputStream
+
diff --git a/libjava/java/io/FilterOutputStream.java b/libjava/java/io/FilterOutputStream.java
index d6d67c063c7..2144213f0e1 100644
--- a/libjava/java/io/FilterOutputStream.java
+++ b/libjava/java/io/FilterOutputStream.java
@@ -1,5 +1,5 @@
/* FilterOutputStream.java -- Parent class for output streams that filter
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -56,127 +56,95 @@ package java.io;
*/
public class FilterOutputStream extends OutputStream
{
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the subordinate <code>OutputStream</code> that this class
- * redirects its method calls to.
- */
-protected OutputStream out;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * This method initializes an instance of <code>FilterOutputStream</code>
- * to write to the specified subordinate <code>OutputStream</code>.
- *
- * @param out The <code>OutputStream</code> to write to
- */
-public
-FilterOutputStream(OutputStream out)
-{
- this.out = out;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * This method closes the underlying <code>OutputStream</code>. Any
- * further attempts to write to this stream may throw an exception.
- *
- * @exception IOException If an error occurs
- */
-public void
-close() throws IOException
-{
- flush();
- out.close();
-}
-
-/*************************************************************************/
-
-/**
- * This method attempt to flush all buffered output to be written to the
- * underlying output sink.
- *
- * @exception IOException If an error occurs
- */
-public void
-flush() throws IOException
-{
- out.flush();
-}
-
-/*************************************************************************/
-
-/**
- * This method writes a single byte of output to the underlying
- * <code>OutputStream</code>.
- *
- * @param b The byte to write, passed as an int.
- *
- * @exception IOException If an error occurs
- */
-public void
-write(int b) throws IOException
-{
- out.write(b);
-}
-
-/*************************************************************************/
-
-/**
- * This method writes all the bytes in the specified array to the underlying
- * <code>OutputStream</code>. It does this by calling the three parameter
- * version of this method - <code>write(byte[], int, int)</code> in this
- * class instead of writing to the underlying <code>OutputStream</code>
- * directly. This allows most subclasses to avoid overriding this method.
- *
- * @param buf The byte array to write bytes from
- *
- * @exception IOException If an error occurs
- */
-public void
-write(byte[] buf) throws IOException
-{
- // Don't do checking here, per Java Lang Spec.
- write(buf, 0, buf.length);
-}
-
-/*************************************************************************/
-
-/**
- * This method calls the <code>write(int)</code> method <code>len</code>
- * times for all bytes from the array <code>buf</code> starting at index
- * <code>offset</code>. Subclasses should overwrite this method to get a
- * more efficient implementation.
- *
- * @param buf The byte array to write bytes from
- * @param offset The index into the array to start writing bytes from
- * @param len The number of bytes to write
- *
- * @exception IOException If an error occurs
- */
-public void
-write(byte[] buf, int offset, int len) throws IOException
-{
- // Don't do checking here, per Java Lang Spec.
- for (int i=0; i < len; i++)
- write(buf[offset + i]);
-
-}
+ /**
+ * This is the subordinate <code>OutputStream</code> that this class
+ * redirects its method calls to.
+ */
+ protected OutputStream out;
+
+ /**
+ * This method initializes an instance of <code>FilterOutputStream</code>
+ * to write to the specified subordinate <code>OutputStream</code>.
+ *
+ * @param out The <code>OutputStream</code> to write to
+ */
+ public FilterOutputStream(OutputStream out)
+ {
+ this.out = out;
+ }
+
+ /**
+ * This method closes the underlying <code>OutputStream</code>. Any
+ * further attempts to write to this stream may throw an exception.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void close() throws IOException
+ {
+ flush();
+ out.close();
+ }
+
+ /**
+ * This method attempt to flush all buffered output to be written to the
+ * underlying output sink.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void flush() throws IOException
+ {
+ out.flush();
+ }
+
+ /**
+ * This method writes a single byte of output to the underlying
+ * <code>OutputStream</code>.
+ *
+ * @param b The byte to write, passed as an int.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(int b) throws IOException
+ {
+ out.write(b);
+ }
+
+ /**
+ * This method writes all the bytes in the specified array to the underlying
+ * <code>OutputStream</code>. It does this by calling the three parameter
+ * version of this method - <code>write(byte[], int, int)</code> in this
+ * class instead of writing to the underlying <code>OutputStream</code>
+ * directly. This allows most subclasses to avoid overriding this method.
+ *
+ * @param buf The byte array to write bytes from
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(byte[] buf) throws IOException
+ {
+ // Don't do checking here, per Java Lang Spec.
+ write(buf, 0, buf.length);
+ }
+
+ /**
+ * This method calls the <code>write(int)</code> method <code>len</code>
+ * times for all bytes from the array <code>buf</code> starting at index
+ * <code>offset</code>. Subclasses should overwrite this method to get a
+ * more efficient implementation.
+ *
+ * @param buf The byte array to write bytes from
+ * @param offset The index into the array to start writing bytes from
+ * @param len The number of bytes to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(byte[] buf, int offset, int len) throws IOException
+ {
+ // Don't do checking here, per Java Lang Spec.
+ for (int i=0; i < len; i++)
+ write(buf[offset + i]);
+
+ }
} // class FilterOutputStream
+
diff --git a/libjava/java/io/FilterReader.java b/libjava/java/io/FilterReader.java
index 3ccc83d9bc3..caf102b082a 100644
--- a/libjava/java/io/FilterReader.java
+++ b/libjava/java/io/FilterReader.java
@@ -1,5 +1,5 @@
/* FilterReader.java -- Base class for char stream classes that filter input
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -63,163 +63,123 @@ package java.io;
*/
public abstract class FilterReader extends Reader
{
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the subordinate <code>Reader</code> to which method calls
- * are redirected
- */
-protected Reader in;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * Create a <code>FilterReader</code> with the specified subordinate
- * <code>Reader</code>.
- * The <code>lock</code> of the new <code>FilterReader</code> will be set
- * to <code>in.lock</code>.
- *
- * @param in The subordinate <code>Reader</code>
- */
-protected
-FilterReader(Reader in)
-{
- super(in.lock);
- this.in = in;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * Calls the <code>in.mark(int)</code> method.
- *
- * @param readlimit The parameter passed to <code>in.mark(int)</code>
- *
- * @exception IOException If an error occurs
- */
-public void
-mark(int readlimit) throws IOException
-{
- in.mark(readlimit);
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.markSupported()</code> method.
- *
- * @return <code>true</code> if mark/reset is supported, <code>false</code> otherwise
- */
-public boolean
-markSupported()
-{
- return(in.markSupported());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.reset()</code> method.
- *
- * @exception IOException If an error occurs
- */
-public void
-reset() throws IOException
-{
- in.reset();
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.read()</code> method.
- *
- * @return The value returned from <code>in.available()</code>
- *
- * @exception IOException If an error occurs
- */
-public boolean
-ready() throws IOException
-{
- return(in.ready());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.skip(long)</code> method
- *
- * @param The requested number of chars to skip.
- *
- * @return The value returned from <code>in.skip(long)</code>
- *
- * @exception IOException If an error occurs
- */
-public long
-skip(long num_chars) throws IOException
-{
- return(in.skip(num_chars));
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.read()</code> method
- *
- * @return The value returned from <code>in.read()</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-read() throws IOException
-{
- return(in.read());
-}
-
-/*************************************************************************/
-
-/**
- * Calls the <code>in.read(char[], int, int)</code> method.
- *
- * @param buf The buffer to read chars into
- * @param offset The index into the buffer to start storing chars
- * @param len The maximum number of chars to read.
- *
- * @return The value retured from <code>in.read(char[], int, int)</code>
- *
- * @exception IOException If an error occurs
- */
-public int
-read(char[] buf, int offset, int len) throws IOException
-{
- return(in.read(buf, offset, len));
-}
-
-/*************************************************************************/
-
-/**
- * This method closes the stream by calling the <code>close()</code> method
- * of the underlying stream.
- *
- * @exception IOException If an error occurs
- */
-public void
-close() throws IOException
-{
- in.close();
-}
+ /**
+ * This is the subordinate <code>Reader</code> to which method calls
+ * are redirected
+ */
+ protected Reader in;
+
+ /**
+ * Create a <code>FilterReader</code> with the specified subordinate
+ * <code>Reader</code>.
+ * The <code>lock</code> of the new <code>FilterReader</code> will be set
+ * to <code>in.lock</code>.
+ *
+ * @param in The subordinate <code>Reader</code>
+ */
+ protected FilterReader(Reader in)
+ {
+ super(in.lock);
+ this.in = in;
+ }
+
+ /**
+ * Calls the <code>in.mark(int)</code> method.
+ *
+ * @param readlimit The parameter passed to <code>in.mark(int)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public void mark(int readlimit) throws IOException
+ {
+ in.mark(readlimit);
+ }
+
+ /**
+ * Calls the <code>in.markSupported()</code> method.
+ *
+ * @return <code>true</code> if mark/reset is supported,
+ * <code>false</code> otherwise
+ */
+ public boolean markSupported()
+ {
+ return(in.markSupported());
+ }
+
+ /**
+ * Calls the <code>in.reset()</code> method.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void reset() throws IOException
+ {
+ in.reset();
+ }
+
+ /**
+ * Calls the <code>in.read()</code> method.
+ *
+ * @return The value returned from <code>in.available()</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public boolean ready() throws IOException
+ {
+ return(in.ready());
+ }
+
+ /**
+ * Calls the <code>in.skip(long)</code> method
+ *
+ * @param numBytes The requested number of chars to skip.
+ *
+ * @return The value returned from <code>in.skip(long)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public long skip(long num_chars) throws IOException
+ {
+ return(in.skip(num_chars));
+ }
+
+ /**
+ * Calls the <code>in.read()</code> method
+ *
+ * @return The value returned from <code>in.read()</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read() throws IOException
+ {
+ return(in.read());
+ }
+
+ /**
+ * Calls the <code>in.read(char[], int, int)</code> method.
+ *
+ * @param buf The buffer to read chars into
+ * @param offset The index into the buffer to start storing chars
+ * @param len The maximum number of chars to read.
+ *
+ * @return The value retured from <code>in.read(char[], int, int)</code>
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read(char[] buf, int offset, int len) throws IOException
+ {
+ return(in.read(buf, offset, len));
+ }
+
+ /**
+ * This method closes the stream by calling the <code>close()</code> method
+ * of the underlying stream.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void close() throws IOException
+ {
+ in.close();
+ }
} // class FilterReader
+
diff --git a/libjava/java/io/FilterWriter.java b/libjava/java/io/FilterWriter.java
index f94d9955a3d..87bae4f0bd8 100644
--- a/libjava/java/io/FilterWriter.java
+++ b/libjava/java/io/FilterWriter.java
@@ -1,5 +1,5 @@
/* FilterWriter.java -- Parent class for output streams that filter
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -52,128 +52,96 @@ package java.io;
* underlying stream. Subclasses provide actual filtering.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Tom Tromey <tromey@cygnus.com>
+ * @author Tom Tromey <tromey@cygnus.com>
*/
public abstract class FilterWriter extends Writer
{
-
-/*************************************************************************/
-
-/*
- * Instance Variables
- */
-
-/**
- * This is the subordinate <code>Writer</code> that this class
- * redirects its method calls to.
- */
-protected Writer out;
-
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * This method initializes an instance of <code>FilterWriter</code>
- * to write to the specified subordinate <code>Writer</code>.
- * The given <code>Writer</code> will be used as <code>lock</code> for
- * the newly created <code>FilterWriter</code>.
- *
- * @param out The <code>Writer</code> to write to
- */
-protected
-FilterWriter(Writer out)
-{
- super(out);
- this.out = out;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * This method closes the underlying <code>Writer</code>. Any
- * further attempts to write to this stream may throw an exception.
- *
- * @exception IOException If an error occurs
- */
-public void
-close() throws IOException
-{
- out.close();
-}
-
-/*************************************************************************/
-
-/**
- * This method attempt to flush all buffered output to be written to the
- * underlying output sink.
- *
- * @exception IOException If an error occurs
- */
-public void
-flush() throws IOException
-{
- out.flush();
-}
-
-/*************************************************************************/
-
-/**
- * This method writes a single char of output to the underlying
- * <code>Writer</code>.
- *
- * @param b The char to write, passed as an int.
- *
- * @exception IOException If an error occurs
- */
-public void
-write(int b) throws IOException
-{
- out.write(b);
-}
-
-/*************************************************************************/
-
-/**
- * This method writes <code>len</code> chars from the array <code>buf</code>
- * starting at index <code>offset</code> to the underlying
- * <code>Writer</code>.
- *
- * @param buf The char array to write chars from
- * @param offset The index into the array to start writing chars from
- * @param len The number of chars to write
- *
- * @exception IOException If an error occurs
- */
-public void
-write(char[] buf, int offset, int len) throws IOException
-{
- out.write(buf, offset, len);
-}
-
-/*************************************************************************/
-
-/**
- * This method writes <code>len</code> chars from the <code>String</code>
- * starting at position <code>offset</code>.
- *
- * @param str The <code>String</code> that is to be written
- * @param offset The character offset into the <code>String</code> to start writing from
- * @param len The number of chars to write
- *
- * @exception IOException If an error occurs
- */
-public void
-write(String str, int offset, int len) throws IOException
-{
- out.write(str, offset, len);
-}
+ /**
+ * This is the subordinate <code>Writer</code> that this class
+ * redirects its method calls to.
+ */
+ protected Writer out;
+
+ /**
+ * This method initializes an instance of <code>FilterWriter</code>
+ * to write to the specified subordinate <code>Writer</code>.
+ * The given <code>Writer</code> will be used as <code>lock</code> for
+ * the newly created <code>FilterWriter</code>.
+ *
+ * @param out The <code>Writer</code> to write to
+ */
+ protected FilterWriter(Writer out)
+ {
+ super(out);
+ this.out = out;
+ }
+
+ /**
+ * This method closes the underlying <code>Writer</code>. Any
+ * further attempts to write to this stream may throw an exception.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void close() throws IOException
+ {
+ out.close();
+ }
+
+ /**
+ * This method attempt to flush all buffered output to be written to the
+ * underlying output sink.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void flush() throws IOException
+ {
+ out.flush();
+ }
+
+ /**
+ * This method writes a single char of output to the underlying
+ * <code>Writer</code>.
+ *
+ * @param b The char to write, passed as an int.
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(int b) throws IOException
+ {
+ out.write(b);
+ }
+
+ /**
+ * This method writes <code>len</code> chars from the array <code>buf</code>
+ * starting at index <code>offset</code> to the underlying
+ * <code>Writer</code>.
+ *
+ * @param buf The char array to write chars from
+ * @param offset The index into the array to start writing chars from
+ * @param len The number of chars to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(char[] buf, int offset, int len) throws IOException
+ {
+ out.write(buf, offset, len);
+ }
+
+ /**
+ * This method writes <code>len</code> chars from the <code>String</code>
+ * starting at position <code>offset</code>.
+ *
+ * @param str The <code>String</code> that is to be written
+ * @param offset The character offset into the <code>String</code>
+ * to start writing from
+ * @param len The number of chars to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(String str, int offset, int len) throws IOException
+ {
+ out.write(str, offset, len);
+ }
} // class FilterWriter
diff --git a/libjava/java/io/InputStreamReader.java b/libjava/java/io/InputStreamReader.java
index 80272d01a22..70213b5f843 100644
--- a/libjava/java/io/InputStreamReader.java
+++ b/libjava/java/io/InputStreamReader.java
@@ -1,11 +1,41 @@
-/* Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation
+/* InputStreamReader.java -- Reader than transforms bytes to chars
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
- This file is part of libgcj.
+This file is part of GNU Classpath.
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
+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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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 java.io;
import gnu.gcj.convert.*;
@@ -36,10 +66,10 @@ public class InputStreamReader extends Reader
this(in, BytesToUnicode.getDefaultDecoder());
}
- public InputStreamReader(InputStream in, String enc)
+ public InputStreamReader(InputStream in, String encoding_name)
throws UnsupportedEncodingException
{
- this(in, BytesToUnicode.getDecoder(enc));
+ this(in, BytesToUnicode.getDecoder(encoding_name));
}
private InputStreamReader(InputStream in, BytesToUnicode decoder)
@@ -58,6 +88,12 @@ public class InputStreamReader extends Reader
converter.setInput(this.in.buf, 0, 0);
}
+ /**
+ * This method closes this stream, as well as the underlying
+ * <code>InputStream</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public void close() throws IOException
{
synchronized (lock)
@@ -70,11 +106,29 @@ public class InputStreamReader extends Reader
}
}
+ /**
+ * This method returns the name of the encoding that is currently in use
+ * by this object. If the stream has been closed, this method is allowed
+ * to return <code>null</code>.
+ *
+ * @param The current encoding name
+ */
public String getEncoding()
{
return in != null ? converter.getName() : null;
}
+ /**
+ * This method checks to see if the stream is read to be read. It
+ * will return <code>true</code> if is, or <code>false</code> if it is not.
+ * If the stream is not ready to be read, it could (although is not required
+ * to) block on the next read attempt.
+ *
+ * @return <code>true</code> if the stream is ready to be read,
+ * <code>false</code> otherwise
+ *
+ * @exception IOException If an error occurs
+ */
public boolean ready() throws IOException
{
synchronized (lock)
@@ -119,6 +173,13 @@ public class InputStreamReader extends Reader
}
}
+ /**
+ * This method reads a single character of data from the stream.
+ *
+ * @return The char read, as an int, or -1 if end of stream.
+ *
+ * @exception IOException If an error occurs
+ */
public int read() throws IOException
{
synchronized (lock)
@@ -168,4 +229,6 @@ public class InputStreamReader extends Reader
}
}
}
-}
+
+} // class InputStreamReader
+
diff --git a/libjava/java/io/LineNumberInputStream.java b/libjava/java/io/LineNumberInputStream.java
index 4a4d68a3d70..ee0ce2c799e 100644
--- a/libjava/java/io/LineNumberInputStream.java
+++ b/libjava/java/io/LineNumberInputStream.java
@@ -57,7 +57,7 @@ package java.io;
* stream, it has the same mark/reset functionality as the underlying
* stream. The <code>mark()</code> and <code>reset()</code> methods
* in this class handle line numbers correctly. Calling
- * @code{reset()} resets the line number to the point at which
+ * <code>reset()</code> resets the line number to the point at which
* <code>mark()</code> was called if the subordinate stream supports
* that functionality.
* <p>
@@ -119,7 +119,7 @@ public class LineNumberInputStream extends FilterInputStream
/**
* This method returns the current line number
*
- * @returns The current line number
+ * @return The current line number
*/
public int getLineNumber()
{
diff --git a/libjava/java/io/LineNumberReader.java b/libjava/java/io/LineNumberReader.java
index 1c57fe120f3..9d80745d2fa 100644
--- a/libjava/java/io/LineNumberReader.java
+++ b/libjava/java/io/LineNumberReader.java
@@ -1,15 +1,59 @@
-/* Copyright (C) 1998, 1999, 2001 Free Software Foundation
+/* LineNumberReader.java -- A character input stream which counts line numbers
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
- This file is part of libgcj.
+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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
package java.io;
/**
+ * This class functions like a standard <code>Reader</code> except that it
+ * counts line numbers, and canonicalizes newline characters. As data
+ * is read, whenever the char sequences "\r", "\n", or "\r\n" are encountered,
+ * the running line count is incremeted by one. Additionally, the whatever
+ * line termination sequence was encountered will be converted to a "\n"
+ * char. Note that this class numbers lines from 0. When the first
+ * line terminator is encountered, the line number is incremented to 1, and
+ * so on. Also note that actual "\r" and "\n" characters are looked for.
+ * The system dependent line separator sequence is ignored.
+ * <p>
+ * This class counts only line termination characters. If the last line
+ * read from the stream does not end in a line termination sequence, it
+ * will not be counted as a line.
+ *
* @author Per Bothner <bothner@cygnus.com>
+ * @author Aaron M. Renn (arenn@urbanophile.com)
* @date April 22, 1998.
*/
/* Written using "Java Class Libraries", 2nd edition, plus online
@@ -23,27 +67,51 @@ package java.io;
*
* This implementation is also minimal in the number of fields it uses.
*/
-
public class LineNumberReader extends BufferedReader
{
/** The current line number. */
- int lineNumber;
+ private int lineNumber;
+ /**
+ * Create a new <code>LineNumberReader</code> that reads from the
+ * specified subordinate <code>Reader</code>. A default 8K char sized
+ * buffer will be used for reads.
+ *
+ * @param in The subordinate <code>Reader</code> to read from
+ */
public LineNumberReader(Reader in)
{
- super(in, 8192);
+ super(in, DEFAULT_BUFFER_SIZE);
}
+ /**
+ * This method initializes a new <code>LineNumberReader</code> to read
+ * from the specified subordinate <code>Reader</code> using the specified
+ * read buffer size.
+ *
+ * @param in The subordinate <code>Reader</code> to read from
+ * @param size The buffer size to use for reading
+ */
public LineNumberReader(Reader in, int size)
{
super(in, size);
}
+ /**
+ * This method returns the current line number
+ *
+ * @return The current line number
+ */
public int getLineNumber()
{
return lineNumber;
}
+ /**
+ * This method sets the current line number to the specified value.
+ *
+ * @param line_number The new line number
+ */
public void setLineNumber(int lineNumber)
{
this.lineNumber = lineNumber;
@@ -63,6 +131,28 @@ public class LineNumberReader extends BufferedReader
return count;
}
+ /**
+ * This method marks a position in the input to which the stream can be
+ * "reset" char calling the <code>reset()</code> method. The parameter
+ * <code>readlimit</code> is the number of chars that can be read from the
+ * stream after setting the mark before the mark becomes invalid. For
+ * example, if <code>mark()</code> is called with a read limit of 10,
+ * then when
+ * 11 chars of data are read from the stream before the <code>reset()</code>
+ * method is called, then the mark is invalid and the stream object
+ * instance is not required to remember the mark.
+ * <p>
+ * In this class, this method will remember the current line number as well
+ * as the current position in the stream. When the <code>reset()</code>
+ * method
+ * is called, the line number will be restored to the saved line number in
+ * addition to the stream position.
+ *
+ * @param readlimit The number of chars that can be read before the
+ * mark becomes invalid
+ *
+ * @exception IOException If an error occurs
+ */
public void mark(int readLimit) throws IOException
{
synchronized (lock)
@@ -85,6 +175,17 @@ public class LineNumberReader extends BufferedReader
}
}
+ /**
+ * This method resets a stream to the point where the <code>mark()</code>
+ * method
+ * was called. Any chars that were read after the mark point was set will
+ * be re-read during subsequent reads.
+ * <p>
+ * In this class, this method will also restore the line number that was
+ * current when the <code>mark()</code> method was called.
+ *
+ * @exception IOException If an error occurs
+ */
public void reset() throws IOException
{
synchronized (lock)
@@ -99,6 +200,24 @@ public class LineNumberReader extends BufferedReader
}
}
+ /**
+ * This method reads an unsigned char from the input stream and returns it
+ * as an int in the range of 0-65535. This method will return -1 if the
+ * end of the stream has been reached.
+ * <p>
+ * Note that if a line termination sequence is encountered (ie, "\r",
+ * "\n", or "\r\n") then that line termination sequence is converted to
+ * a single "\n" value which is returned from this method. This means
+ * that it is possible this method reads two chars from the subordinate
+ * stream instead of just one.
+ * <p>
+ * Note that this method will block until a char of data is available
+ * to be read.
+ *
+ * @return The char read or -1 if end of stream
+ *
+ * @exception IOException If an error occurs
+ */
public int read() throws IOException
{
synchronized (lock)
@@ -125,6 +244,28 @@ public class LineNumberReader extends BufferedReader
}
}
+ /**
+ * This method reads chars from a stream and stores them into a caller
+ * supplied buffer. It starts storing data at index <code>offset</code> into * the buffer and attemps to read <code>len</code> chars. This method can
+ * return before reading the number of chars requested. The actual number
+ * of chars read is returned as an int. A -1 is returned to indicated the
+ * end of the stream.
+ * <p>
+ * This method will block until some data can be read.
+ * <p>
+ * Note that if a line termination sequence is encountered (ie, "\r",
+ * "\n", or "\r\n") then that line termination sequence is converted to
+ * a single "\n" value which is stored in the buffer. Only a single
+ * char is counted towards the number of chars read in this case.
+ *
+ * @param buf The array into which the chars read should be stored
+ * @param offset The offset into the array to start storing chars
+ * @param len The requested number of chars to read
+ *
+ * @return The actual number of chars read, or -1 if end of stream
+ *
+ * @exception IOException If an error occurs.
+ */
public int read(char[] buf, int offset, int count) throws IOException
{
if (count <= 0)
@@ -184,6 +325,17 @@ public class LineNumberReader extends BufferedReader
}
}
+ /**
+ * This method reads a line of text from the input stream and returns
+ * it as a <code>String</code>. A line is considered to be terminated
+ * by a "\r", "\n", or "\r\n" sequence, not by the system dependent line
+ * separator.
+ *
+ * @return The line read as a <code>String</code> or <code>null</code>
+ * if end of stream.
+ *
+ * @exception IOException If an error occurs
+ */
public String readLine() throws IOException
{
// BufferedReader.readLine already does this. Shouldn't need to keep
@@ -210,6 +362,18 @@ public class LineNumberReader extends BufferedReader
return str;
}
+ /**
+ * This method skips over characters in the stream. This method will
+ * skip the specified number of characters if possible, but is not required
+ * to skip them all. The actual number of characters skipped is returned.
+ * This method returns 0 if the specified number of chars is less than 1.
+ *
+ * @param count The specified number of chars to skip.
+ *
+ * @return The actual number of chars skipped.
+ *
+ * @exception IOException If an error occurs
+ */
public long skip(long count) throws IOException
{
if (count <= 0)
@@ -243,3 +407,4 @@ public class LineNumberReader extends BufferedReader
return count - to_do;
}
}
+
diff --git a/libjava/java/io/ObjectInput.java b/libjava/java/io/ObjectInput.java
index 4b10cf9c3ad..831203a14a4 100644
--- a/libjava/java/io/ObjectInput.java
+++ b/libjava/java/io/ObjectInput.java
@@ -1,5 +1,5 @@
/* ObjectInput.java -- Read object data from a stream
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998,2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,115 +44,96 @@ package java.io;
* also has methods that allow input to be done in a manner similar to
* <code>InputStream</code>
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface ObjectInput extends DataInput
{
-
-/**
- * This method returns the number of bytes that can be read without
- * blocking.
- *
- * @return The number of bytes available before blocking
- *
- * @exception IOException If an error occurs
- */
-public abstract int
-available() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method reading a byte of data from a stream. It returns that byte
- * as an int. This method blocks if no data is available to be read.
- *
- * @return The byte of data read
- *
- * @exception IOException If an error occurs
- */
-public abstract int
-read() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads raw bytes and stores them them a byte array buffer.
- * Note that this method will block if no data is available. However,
- * it will not necessarily block until it fills the entire buffer. That is,
- * a "short count" is possible.
- *
- * @param buf The byte array to receive the data read
- *
- * @return The actual number fo bytes read or -1 if end of stream
- *
- * @exception IOException If an error occurs
- */
-public abstract int
-read(byte[] buf) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method reads raw bytes and stores them in a byte array buffer
- * <code>buf</code> starting at position <code>offset</code> into the buffer. A
- * maximum of <code>len</code> bytes will be read. Note that this method
- * blocks if no data is available, but will not necessarily block until
- * it can read <code>len</code> bytes of data. That is, a "short count" is
- * possible.
- *
- * @param buf The byte array to receive the data read
- * @param offset The offset into @code{buf} to start storing data
- * @param len The maximum number of bytes to read
- *
- * @return The actual number fo bytes read or -1 if end of stream
- *
- * @exception IOException If an error occurs
- */
-public abstract int
-read(byte[] buf, int offset, int len) throws IOException;
-
-/*************************************************************************/
-
-/**
- * Reads an object instance and returns it. If the class for the object
- * being read cannot be found, then a ClassNotFoundException will
- * be thrown.
- *
- * @return The object instance that was read
- *
- * @exception ClassNotFoundException If a class for the object cannot be found
- * @exception IOException If an error occurs
- */
-public abstract Object
-readObject() throws ClassNotFoundException, IOException;
-
-/*************************************************************************/
-
-/**
- * This method causes the specified number of bytes to be read and
- * discarded. It is possible that fewer than the requested number of bytes
- * will actually be skipped.
- *
- * @param num_bytes The number of bytes to skip
- *
- * @return The actual number of bytes skipped
- *
- * @exception IOException If an error occurs
- */
-public abstract long
-skip(long num_bytes) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method closes the input source
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-close() throws IOException;
+ /**
+ * This method returns the number of bytes that can be read without
+ * blocking.
+ *
+ * @return The number of bytes available before blocking
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract int available() throws IOException;
+
+ /**
+ * This method reading a byte of data from a stream. It returns that byte
+ * as an int. This method blocks if no data is available to be read.
+ *
+ * @return The byte of data read
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract int read() throws IOException;
+
+ /**
+ * This method reads raw bytes and stores them them a byte array buffer.
+ * Note that this method will block if no data is available. However,
+ * it will not necessarily block until it fills the entire buffer. That is,
+ * a "short count" is possible.
+ *
+ * @param buf The byte array to receive the data read
+ *
+ * @return The actual number fo bytes read or -1 if end of stream
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract int read(byte[] buf) throws IOException;
+
+ /**
+ * This method reads raw bytes and stores them in a byte array buffer
+ * <code>buf</code> starting at position <code>offset</code> into the
+ * buffer. A
+ * maximum of <code>len</code> bytes will be read. Note that this method
+ * blocks if no data is available, but will not necessarily block until
+ * it can read <code>len</code> bytes of data. That is, a "short count" is
+ * possible.
+ *
+ * @param buf The byte array to receive the data read
+ * @param offset The offset into @code{buf} to start storing data
+ * @param len The maximum number of bytes to read
+ *
+ * @return The actual number fo bytes read or -1 if end of stream
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract int read(byte[] buf, int offset, int len) throws IOException;
+
+ /**
+ * Reads an object instance and returns it. If the class for the object
+ * being read cannot be found, then a ClassNotFoundException will
+ * be thrown.
+ *
+ * @return The object instance that was read
+ *
+ * @exception ClassNotFoundException If a class for the object cannot be
+ * found
+ * @exception IOException If an error occurs
+ */
+ public abstract Object readObject()
+ throws ClassNotFoundException, IOException;
+
+ /**
+ * This method causes the specified number of bytes to be read and
+ * discarded. It is possible that fewer than the requested number of bytes
+ * will actually be skipped.
+ *
+ * @param numBytes The number of bytes to skip
+ *
+ * @return The actual number of bytes skipped
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract long skip(long num_bytes) throws IOException;
+
+ /**
+ * This method closes the input source
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void close() throws IOException;
} // interface ObjectInput
diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java
index 38c790a0ca1..2302609837e 100644
--- a/libjava/java/io/ObjectInputStream.java
+++ b/libjava/java/io/ObjectInputStream.java
@@ -57,19 +57,19 @@ public class ObjectInputStream extends InputStream
implements ObjectInput, ObjectStreamConstants
{
/**
- Creates a new <code>ObjectInputStream</code> that will do all of
- its reading from <code>in</code>. This method also checks
- the stream by reading the header information (stream magic number
- and stream version).
-
- @exception IOException Reading stream header from underlying
- stream cannot be completed.
-
- @exception StreamCorruptedException An invalid stream magic
- number or stream version was read from the stream.
-
- @see readStreamHeader ()
- */
+ * Creates a new <code>ObjectInputStream</code> that will do all of
+ * its reading from <code>in</code>. This method also checks
+ * the stream by reading the header information (stream magic number
+ * and stream version).
+ *
+ * @exception IOException Reading stream header from underlying
+ * stream cannot be completed.
+ *
+ * @exception StreamCorruptedException An invalid stream magic
+ * number or stream version was read from the stream.
+ *
+ * @see #readStreamHeader()
+ */
public ObjectInputStream (InputStream in)
throws IOException, StreamCorruptedException
{
@@ -104,20 +104,20 @@ public class ObjectInputStream extends InputStream
/**
- Returns the next deserialized object read from the underlying stream.
-
- This method can be overriden by a class by implementing
- <code>private void readObject (ObjectInputStream)</code>.
-
- If an exception is thrown from this method, the stream is left in
- an undefined state.
-
- @exception ClassNotFoundException The class that an object being
- read in belongs to cannot be found.
-
- @exception IOException Exception from underlying
- <code>InputStream</code>.
- */
+ * Returns the next deserialized object read from the underlying stream.
+ *
+ * This method can be overriden by a class by implementing
+ * <code>private void readObject (ObjectInputStream)</code>.
+ *
+ * If an exception is thrown from this method, the stream is left in
+ * an undefined state.
+ *
+ * @exception ClassNotFoundException The class that an object being
+ * read in belongs to cannot be found.
+ *
+ * @exception IOException Exception from underlying
+ * <code>InputStream</code>.
+ */
public final Object readObject () throws ClassNotFoundException, IOException
{
if (this.useSubclassMethod)
@@ -368,35 +368,24 @@ public class ObjectInputStream extends InputStream
ObjectStreamClass[] hierarchy =
ObjectStreamClass.getObjectStreamClasses (clazz);
- boolean has_read;
for (int i=0; i < hierarchy.length; i++)
{
this.currentObjectStreamClass = hierarchy[i];
dumpElementln ("Reading fields of "
+ this.currentObjectStreamClass.getName ());
-
- has_read = true;
-
- try
- {
- this.currentObjectStreamClass.forClass ().
- getDeclaredMethod ("readObject", readObjectParams);
- }
- catch (NoSuchMethodException e)
- {
- has_read = false;
- }
// XXX: should initialize fields in classes in the hierarchy
// that aren't in the stream
// should skip over classes in the stream that aren't in the
// real classes hierarchy
- readFields (obj, this.currentObjectStreamClass.fields,
- has_read, this.currentObjectStreamClass);
-
- if (has_read)
+
+ if (this.currentObjectStreamClass.hasReadMethod())
{
+ fieldsAlreadyRead = false;
+ boolean oldmode = setBlockDataMode (true);
+ callReadMethod (obj, this.currentObjectStreamClass);
+ setBlockDataMode (oldmode);
dumpElement ("ENDBLOCKDATA? ");
try
{
@@ -415,6 +404,10 @@ public class ObjectInputStream extends InputStream
dumpElementln ("no, got IOException");
}
}
+ else
+ {
+ readFields (obj, currentObjectStreamClass);
+ }
}
this.currentObject = null;
@@ -459,24 +452,24 @@ public class ObjectInputStream extends InputStream
}
/**
- Reads the current objects non-transient, non-static fields from
- the current class from the underlying output stream.
-
- This method is intended to be called from within a object's
- <code>private void readObject (ObjectInputStream)</code>
- method.
-
- @exception ClassNotFoundException The class that an object being
- read in belongs to cannot be found.
-
- @exception NotActiveException This method was called from a
- context other than from the current object's and current class's
- <code>private void readObject (ObjectInputStream)</code>
- method.
-
- @exception IOException Exception from underlying
- <code>OutputStream</code>.
- */
+ * Reads the current objects non-transient, non-static fields from
+ * the current class from the underlying output stream.
+ *
+ * This method is intended to be called from within a object's
+ * <code>private void readObject (ObjectInputStream)</code>
+ * method.
+ *
+ * @exception ClassNotFoundException The class that an object being
+ * read in belongs to cannot be found.
+ *
+ * @exception NotActiveException This method was called from a
+ * context other than from the current object's and current class's
+ * <code>private void readObject (ObjectInputStream)</code>
+ * method.
+ *
+ * @exception IOException Exception from underlying
+ * <code>OutputStream</code>.
+ */
public void defaultReadObject ()
throws ClassNotFoundException, IOException, NotActiveException
{
@@ -487,9 +480,7 @@ public class ObjectInputStream extends InputStream
throw new NotActiveException ("defaultReadObject called but fields already read from stream (by defaultReadObject or readFields)");
boolean oldmode = setBlockDataMode(false);
- readFields (this.currentObject,
- this.currentObjectStreamClass.fields,
- false, this.currentObjectStreamClass);
+ readFields (this.currentObject, this.currentObjectStreamClass);
setBlockDataMode(oldmode);
fieldsAlreadyRead = true;
@@ -497,23 +488,23 @@ public class ObjectInputStream extends InputStream
/**
- Registers a <code>ObjectInputValidation</code> to be carried out
- on the object graph currently being deserialized before it is
- returned to the original caller of <code>readObject ()</code>.
- The order of validation for multiple
- <code>ObjectInputValidation</code>s can be controled using
- <code>priority</code>. Validators with higher priorities are
- called first.
-
- @see java.io.ObjectInputValidation
-
- @exception InvalidObjectException <code>validator</code> is
- <code>null</code>
-
- @exception NotActiveException an attempt was made to add a
- validator outside of the <code>readObject</code> method of the
- object currently being deserialized
- */
+ * Registers a <code>ObjectInputValidation</code> to be carried out
+ * on the object graph currently being deserialized before it is
+ * returned to the original caller of <code>readObject ()</code>.
+ * The order of validation for multiple
+ * <code>ObjectInputValidation</code>s can be controled using
+ * <code>priority</code>. Validators with higher priorities are
+ * called first.
+ *
+ * @see java.io.ObjectInputValidation
+ *
+ * @exception InvalidObjectException <code>validator</code> is
+ * <code>null</code>
+ *
+ * @exception NotActiveException an attempt was made to add a
+ * validator outside of the <code>readObject</code> method of the
+ * object currently being deserialized
+ */
public void registerValidation (ObjectInputValidation validator,
int priority)
throws InvalidObjectException, NotActiveException
@@ -530,21 +521,21 @@ public class ObjectInputStream extends InputStream
/**
- Called when a class is being deserialized. This is a hook to
- allow subclasses to read in information written by the
- <code>annotateClass (Class)</code> method of an
- <code>ObjectOutputStream</code>.
-
- This implementation looks up the active call stack for a
- <code>ClassLoader</code>; if a <code>ClassLoader</code> is found,
- it is used to load the class associated with <code>osc</code>,
- otherwise, the default system <code>ClassLoader</code> is used.
-
- @exception IOException Exception from underlying
- <code>OutputStream</code>.
-
- @see java.io.ObjectOutputStream#annotateClass (java.lang.Class)
- */
+ * Called when a class is being deserialized. This is a hook to
+ * allow subclasses to read in information written by the
+ * <code>annotateClass (Class)</code> method of an
+ * <code>ObjectOutputStream</code>.
+ *
+ * This implementation looks up the active call stack for a
+ * <code>ClassLoader</code>; if a <code>ClassLoader</code> is found,
+ * it is used to load the class associated with <code>osc</code>,
+ * otherwise, the default system <code>ClassLoader</code> is used.
+ *
+ * @exception IOException Exception from underlying
+ * <code>OutputStream</code>.
+ *
+ * @see java.io.ObjectOutputStream#annotateClass (java.lang.Class)
+ */
protected Class resolveClass (ObjectStreamClass osc)
throws ClassNotFoundException, IOException
{
@@ -564,18 +555,18 @@ public class ObjectInputStream extends InputStream
}
/**
- Allows subclasses to resolve objects that are read from the
- stream with other objects to be returned in their place. This
- method is called the first time each object is encountered.
-
- This method must be enabled before it will be called in the
- serialization process.
-
- @exception IOException Exception from underlying
- <code>OutputStream</code>.
-
- @see enableResolveObject (boolean)
- */
+ * Allows subclasses to resolve objects that are read from the
+ * stream with other objects to be returned in their place. This
+ * method is called the first time each object is encountered.
+ *
+ * This method must be enabled before it will be called in the
+ * serialization process.
+ *
+ * @exception IOException Exception from underlying
+ * <code>OutputStream</code>.
+ *
+ * @see #enableResolveObject(boolean)
+ */
protected Object resolveObject (Object obj) throws IOException
{
return obj;
@@ -609,13 +600,13 @@ public class ObjectInputStream extends InputStream
}
/**
- If <code>enable</code> is <code>true</code> and this object is
- trusted, then <code>resolveObject (Object)</code> will be called
- in subsequent calls to <code>readObject (Object)</code>.
- Otherwise, <code>resolveObject (Object)</code> will not be called.
-
- @exception SecurityException This class is not trusted.
- */
+ * If <code>enable</code> is <code>true</code> and this object is
+ * trusted, then <code>resolveObject (Object)</code> will be called
+ * in subsequent calls to <code>readObject (Object)</code>.
+ * Otherwise, <code>resolveObject (Object)</code> will not be called.
+ *
+ * @exception SecurityException This class is not trusted.
+ */
protected boolean enableResolveObject (boolean enable)
throws SecurityException
{
@@ -631,16 +622,15 @@ public class ObjectInputStream extends InputStream
return old_val;
}
-
/**
- Reads stream magic and stream version information from the
- underlying stream.
-
- @exception IOException Exception from underlying stream.
-
- @exception StreamCorruptedException An invalid stream magic
- number or stream version was read from the stream.
- */
+ * Reads stream magic and stream version information from the
+ * underlying stream.
+ *
+ * @exception IOException Exception from underlying stream.
+ *
+ * @exception StreamCorruptedException An invalid stream magic
+ * number or stream version was read from the stream.
+ */
protected void readStreamHeader ()
throws IOException, StreamCorruptedException
{
@@ -653,7 +643,6 @@ public class ObjectInputStream extends InputStream
throw new StreamCorruptedException ("Invalid stream version number");
}
-
public int read () throws IOException
{
if (this.readDataFromBlock)
@@ -778,9 +767,9 @@ public class ObjectInputStream extends InputStream
}
/**
- @deprecated
- @see java.io.DataInputStream#readLine ()
- */
+ * @deprecated
+ * @see java.io.DataInputStream#readLine ()
+ */
public String readLine () throws IOException
{
return this.dataInputStream.readLine ();
@@ -791,13 +780,12 @@ public class ObjectInputStream extends InputStream
return this.dataInputStream.readUTF ();
}
-
/**
- This class allows a class to specify exactly which fields should
- be read, and what values should be read for these fields.
-
- XXX: finish up comments
- */
+ * This class allows a class to specify exactly which fields should
+ * be read, and what values should be read for these fields.
+ *
+ * XXX: finish up comments
+ */
public static abstract class GetField
{
public abstract ObjectStreamClass getObjectStreamClass ();
@@ -1027,18 +1015,17 @@ public class ObjectInputStream extends InputStream
}
-
/**
- Protected constructor that allows subclasses to override
- deserialization. This constructor should be called by subclasses
- that wish to override <code>readObject (Object)</code>. This
- method does a security check <i>NOTE: currently not
- implemented</i>, then sets a flag that informs
- <code>readObject (Object)</code> to call the subclasses
- <code>readObjectOverride (Object)</code> method.
-
- @see readObjectOverride (Object)
- */
+ * Protected constructor that allows subclasses to override
+ * deserialization. This constructor should be called by subclasses
+ * that wish to override <code>readObject (Object)</code>. This
+ * method does a security check <i>NOTE: currently not
+ * implemented</i>, then sets a flag that informs
+ * <code>readObject (Object)</code> to call the subclasses
+ * <code>readObjectOverride (Object)</code> method.
+ *
+ * @see #readObjectOverride()
+ */
protected ObjectInputStream ()
throws IOException, SecurityException
{
@@ -1048,23 +1035,21 @@ public class ObjectInputStream extends InputStream
this.useSubclassMethod = true;
}
-
/**
- This method allows subclasses to override the default
- de serialization mechanism provided by
- <code>ObjectInputStream</code>. To make this method be used for
- writing objects, subclasses must invoke the 0-argument
- constructor on this class from their constructor.
-
- @see ObjectInputStream ()
- */
+ * This method allows subclasses to override the default
+ * de serialization mechanism provided by
+ * <code>ObjectInputStream</code>. To make this method be used for
+ * writing objects, subclasses must invoke the 0-argument
+ * constructor on this class from their constructor.
+ *
+ * @see #ObjectInputStream()
+ */
protected Object readObjectOverride ()
throws ClassNotFoundException, IOException, OptionalDataException
{
throw new IOException ("Subclass of ObjectInputStream must implement readObjectOverride");
}
-
// assigns the next availible handle to OBJ
private int assignNewHandle (Object obj)
{
@@ -1073,7 +1058,6 @@ public class ObjectInputStream extends InputStream
return this.nextOID++;
}
-
private Object processResolution (Object obj, int handle)
throws IOException
{
@@ -1108,20 +1092,17 @@ public class ObjectInputStream extends InputStream
return obj;
}
-
private void clearHandles ()
{
this.objectLookupTable.clear ();
this.nextOID = baseWireHandle;
}
-
private void readNextBlock () throws IOException
{
readNextBlock (this.realInputStream.readByte ());
}
-
private void readNextBlock (byte marker) throws IOException
{
if (marker == TC_BLOCKDATA)
@@ -1148,7 +1129,6 @@ public class ObjectInputStream extends InputStream
this.blockDataPosition = 0;
}
-
private void readArrayElements (Object array, Class clazz)
throws ClassNotFoundException, IOException
{
@@ -1219,21 +1199,10 @@ public class ObjectInputStream extends InputStream
}
}
-
- private void readFields (Object obj, ObjectStreamField[] stream_fields,
- boolean call_read_method,
- ObjectStreamClass stream_osc)
+ private void readFields (Object obj, ObjectStreamClass stream_osc)
throws ClassNotFoundException, IOException
{
- if (call_read_method)
- {
- fieldsAlreadyRead = false;
- boolean oldmode = setBlockDataMode (true);
- callReadMethod (obj, stream_osc.forClass ());
- setBlockDataMode (oldmode);
- return;
- }
-
+ ObjectStreamField[] stream_fields = stream_osc.fields;
ObjectStreamField[] real_fields =
ObjectStreamClass.lookup (stream_osc.forClass ()).fields;
@@ -1299,7 +1268,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setBooleanField (obj, field_name, value);
+ setBooleanField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Byte.TYPE)
{
@@ -1308,7 +1277,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setByteField (obj, field_name, value);
+ setByteField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Character.TYPE)
{
@@ -1317,7 +1286,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setCharField (obj, field_name, value);
+ setCharField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Double.TYPE)
{
@@ -1326,7 +1295,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setDoubleField (obj, field_name, value);
+ setDoubleField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Float.TYPE)
{
@@ -1335,7 +1304,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setFloatField (obj, field_name, value);
+ setFloatField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Integer.TYPE)
{
@@ -1344,7 +1313,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setIntField (obj, field_name, value);
+ setIntField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Long.TYPE)
{
@@ -1353,7 +1322,7 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setLongField (obj, field_name, value);
+ setLongField (obj, stream_osc.forClass (), field_name, value);
}
else if (type == Short.TYPE)
{
@@ -1362,14 +1331,14 @@ public class ObjectInputStream extends InputStream
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
- setShortField (obj, field_name, value);
+ setShortField (obj, stream_osc.forClass (), field_name, value);
}
else
{
Object value =
default_initialize ? null : readObject ();
if (set_value)
- setObjectField (obj, field_name,
+ setObjectField (obj, stream_osc.forClass (), field_name,
real_field.getTypeString (), value);
}
}
@@ -1393,7 +1362,6 @@ public class ObjectInputStream extends InputStream
return oldmode;
}
-
// returns a new instance of REAL_CLASS that has been constructed
// only to the level of CONSTRUCTOR_CLASS (a super class of REAL_CLASS)
private Object newObject (Class real_class, Class constructor_class)
@@ -1410,7 +1378,6 @@ public class ObjectInputStream extends InputStream
}
}
-
// runs all registered ObjectInputValidations in prioritized order
// on OBJ
private void invokeValidators () throws InvalidObjectException
@@ -1430,7 +1397,6 @@ public class ObjectInputStream extends InputStream
}
}
-
// this native method is used to get access to the protected method
// of the same name in SecurityManger
private static ClassLoader currentClassLoader (SecurityManager sm)
@@ -1451,8 +1417,9 @@ public class ObjectInputStream extends InputStream
return klass.getDeclaredMethod(name, args);
}
- private void callReadMethod (Object obj, Class klass) throws IOException
+ private void callReadMethod (Object obj, ObjectStreamClass osc) throws IOException
{
+ Class klass = osc.forClass();
try
{
Class classArgs[] = {ObjectInputStream.class};
@@ -1486,12 +1453,11 @@ public class ObjectInputStream extends InputStream
private native void callConstructor (Class clazz, Object obj);
- private void setBooleanField (Object obj, String field_name,
+ private void setBooleanField (Object obj, Class klass, String field_name,
boolean val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setBoolean (obj, val);
@@ -1501,12 +1467,11 @@ public class ObjectInputStream extends InputStream
}
}
- private void setByteField (Object obj, String field_name,
+ private void setByteField (Object obj, Class klass, String field_name,
byte val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setByte (obj, val);
@@ -1516,12 +1481,11 @@ public class ObjectInputStream extends InputStream
}
}
- private void setCharField (Object obj, String field_name,
+ private void setCharField (Object obj, Class klass, String field_name,
char val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setChar (obj, val);
@@ -1531,12 +1495,11 @@ public class ObjectInputStream extends InputStream
}
}
- private void setDoubleField (Object obj, String field_name,
+ private void setDoubleField (Object obj, Class klass, String field_name,
double val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setDouble (obj, val);
@@ -1546,12 +1509,11 @@ public class ObjectInputStream extends InputStream
}
}
- private void setFloatField (Object obj, String field_name,
+ private void setFloatField (Object obj, Class klass, String field_name,
float val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setFloat (obj, val);
@@ -1561,12 +1523,11 @@ public class ObjectInputStream extends InputStream
}
}
- private void setIntField (Object obj, String field_name,
+ private void setIntField (Object obj, Class klass, String field_name,
int val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setInt (obj, val);
@@ -1577,12 +1538,11 @@ public class ObjectInputStream extends InputStream
}
- private void setLongField (Object obj, String field_name,
+ private void setLongField (Object obj, Class klass, String field_name,
long val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setLong (obj, val);
@@ -1593,12 +1553,11 @@ public class ObjectInputStream extends InputStream
}
- private void setShortField (Object obj, String field_name,
+ private void setShortField (Object obj, Class klass, String field_name,
short val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
f.setShort (obj, val);
@@ -1609,12 +1568,11 @@ public class ObjectInputStream extends InputStream
}
- private void setObjectField (Object obj, String field_name, String type_code,
+ private void setObjectField (Object obj, Class klass, String field_name, String type_code,
Object val)
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
f.setAccessible(true);
// FIXME: We should check the type_code here
diff --git a/libjava/java/io/ObjectInputValidation.java b/libjava/java/io/ObjectInputValidation.java
index 5433f123c3f..2259eb83285 100644
--- a/libjava/java/io/ObjectInputValidation.java
+++ b/libjava/java/io/ObjectInputValidation.java
@@ -1,5 +1,5 @@
/* ObjectInputValidation.java -- Validate an object
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,21 +41,18 @@ package java.io;
/**
* What does this interface really do?
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface ObjectInputValidation
{
-/**
- * This method is called to validate an object. If the object is invalid
- * an exception is thrown.
- *
- * @exception InvalidObjectException If the object is invalid
- */
-public abstract void
-validateObject() throws InvalidObjectException;
+ /**
+ * This method is called to validate an object. If the object is invalid
+ * an exception is thrown.
+ *
+ * @exception InvalidObjectException If the object is invalid
+ */
+ public abstract void validateObject() throws InvalidObjectException;
} // interface ObjectInputValidation
diff --git a/libjava/java/io/ObjectOutput.java b/libjava/java/io/ObjectOutput.java
index 7da0640b6c4..f9e923b19b9 100644
--- a/libjava/java/io/ObjectOutput.java
+++ b/libjava/java/io/ObjectOutput.java
@@ -1,5 +1,5 @@
/* ObjectOutput.java -- Interface for writing objects to a stream
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,87 +41,70 @@ package java.io;
/**
* This interface extends <code>DataOutput</code> to provide the additional
* facility of writing object instances to a stream. It also adds some
- * additional methods to make the interface more <code>OutputStream</code> like.
- *
- * @version 0.0
+ * additional methods to make the interface more
+ * <code>OutputStream</code> like.
*
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public interface ObjectOutput extends DataOutput
{
-
-/**
- * This method writes the specified byte to the output stream.
- *
- * @param b The byte to write.
- *
- * @exception IOException If an error occurs.
- */
-public abstract void
-write(int b) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes all the bytes in the specified byte array to the
- * output stream.
- *
- * @param buf The array of bytes to write.
- *
- * @exception IOException If an error occurs.
- */
-public abstract void
-write(byte[] buf) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes <code>len</code> bytes from the specified array
- * starting at index <code>offset</code> into that array.
- *
- * @param buf The byte array to write from.
- * @param offset The index into the byte array to start writing from.
- * @param len The number of bytes to write.
- *
- * @exception IOException If an error occurs.
- */
-public abstract void
-write(byte[] buf, int offset, int len) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a object instance to a stream. The format of the
- * data written is determined by the actual implementation of this method
- *
- * @param obj The object to write
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-writeObject(Object obj) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method causes any buffered data to be flushed out to the underlying
- * stream
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-flush() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method closes the underlying stream.
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-close() throws IOException;
+ /**
+ * This method writes the specified byte to the output stream.
+ *
+ * @param b The byte to write.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public abstract void write(int b) throws IOException;
+
+ /**
+ * This method writes all the bytes in the specified byte array to the
+ * output stream.
+ *
+ * @param buf The array of bytes to write.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public abstract void write(byte[] buf) throws IOException;
+
+ /**
+ * This method writes <code>len</code> bytes from the specified array
+ * starting at index <code>offset</code> into that array.
+ *
+ * @param buf The byte array to write from.
+ * @param offset The index into the byte array to start writing from.
+ * @param len The number of bytes to write.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public abstract void write(byte[] buf, int offset, int len)
+ throws IOException;
+
+ /**
+ * This method writes a object instance to a stream. The format of the
+ * data written is determined by the actual implementation of this method
+ *
+ * @param obj The object to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void writeObject(Object obj) throws IOException;
+
+ /**
+ * This method causes any buffered data to be flushed out to the underlying
+ * stream
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void flush() throws IOException;
+
+ /**
+ * This method closes the underlying stream.
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void close() throws IOException;
} // interface ObjectOutput
diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java
index 69f789abbf8..cb461231b33 100644
--- a/libjava/java/io/ObjectOutputStream.java
+++ b/libjava/java/io/ObjectOutputStream.java
@@ -49,86 +49,85 @@ import gnu.java.lang.reflect.TypeSignature;
import gnu.classpath.Configuration;
/**
- An <code>ObjectOutputStream</code> can be used to write objects
- as well as primitive data in a platform-independent manner to an
- <code>OutputStream</code>.
-
- The data produced by an <code>ObjectOutputStream</code> can be read
- and reconstituted by an <code>ObjectInputStream</code>.
-
- <code>writeObject (Object)</code> is used to write Objects, the
- <code>write&lt;type&gt;</code> methods are used to write primitive
- data (as in <code>DataOutputStream</code>). Strings can be written
- as objects or as primitive data.
-
- Not all objects can be written out using an
- <code>ObjectOutputStream</code>. Only those objects that are an
- instance of <code>java.io.Serializable</code> can be written.
-
- Using default serialization, information about the class of an
- object is written, all of the non-transient, non-static fields of
- the object are written, if any of these fields are objects, they are
- written out in the same manner.
-
- An object is only written out the first time it is encountered. If
- the object is encountered later, a reference to it is written to
- the underlying stream. Thus writing circular object graphs
- does not present a problem, nor are relationships between objects
- in a graph lost.
-
- Example usage:
- <pre>
- Hashtable map = new Hashtable ();
- map.put ("one", new Integer (1));
- map.put ("two", new Integer (2));
-
- ObjectOutputStream oos =
- new ObjectOutputStream (new FileOutputStream ("numbers"));
- oos.writeObject (map);
- oos.close ();
-
- ObjectInputStream ois =
- new ObjectInputStream (new FileInputStream ("numbers"));
- Hashtable newmap = (Hashtable)ois.readObject ();
-
- System.out.println (newmap);
- </pre>
-
- The default serialization can be overriden in two ways.
-
- By defining a method <code>private void
- writeObject (ObjectOutputStream)</code>, a class can dictate exactly
- how information about itself is written.
- <code>defaultWriteObject ()</code> may be called from this method to
- carry out default serialization. This method is not
- responsible for dealing with fields of super-classes or subclasses.
-
- By implementing <code>java.io.Externalizable</code>. This gives
- the class complete control over the way it is written to the
- stream. If this approach is used the burden of writing superclass
- and subclass data is transfered to the class implementing
- <code>java.io.Externalizable</code>.
-
- @see java.io.DataOutputStream
- @see java.io.Externalizable
- @see java.io.ObjectInputStream
- @see java.io.Serializable
- @see XXX: java serialization spec
-*/
+ * An <code>ObjectOutputStream</code> can be used to write objects
+ * as well as primitive data in a platform-independent manner to an
+ * <code>OutputStream</code>.
+ *
+ * The data produced by an <code>ObjectOutputStream</code> can be read
+ * and reconstituted by an <code>ObjectInputStream</code>.
+ *
+ * <code>writeObject (Object)</code> is used to write Objects, the
+ * <code>write&lt;type&gt;</code> methods are used to write primitive
+ * data (as in <code>DataOutputStream</code>). Strings can be written
+ * as objects or as primitive data.
+ *
+ * Not all objects can be written out using an
+ * <code>ObjectOutputStream</code>. Only those objects that are an
+ * instance of <code>java.io.Serializable</code> can be written.
+ *
+ * Using default serialization, information about the class of an
+ * object is written, all of the non-transient, non-static fields of
+ * the object are written, if any of these fields are objects, they are
+ * written out in the same manner.
+ *
+ * An object is only written out the first time it is encountered. If
+ * the object is encountered later, a reference to it is written to
+ * the underlying stream. Thus writing circular object graphs
+ * does not present a problem, nor are relationships between objects
+ * in a graph lost.
+ *
+ * Example usage:
+ * <pre>
+ * Hashtable map = new Hashtable ();
+ * map.put ("one", new Integer (1));
+ * map.put ("two", new Integer (2));
+ *
+ * ObjectOutputStream oos =
+ * new ObjectOutputStream (new FileOutputStream ("numbers"));
+ * oos.writeObject (map);
+ * oos.close ();
+ *
+ * ObjectInputStream ois =
+ * new ObjectInputStream (new FileInputStream ("numbers"));
+ * Hashtable newmap = (Hashtable)ois.readObject ();
+ *
+ * System.out.println (newmap);
+ * </pre>
+ *
+ * The default serialization can be overriden in two ways.
+ *
+ * By defining a method <code>private void
+ * writeObject (ObjectOutputStream)</code>, a class can dictate exactly
+ * how information about itself is written.
+ * <code>defaultWriteObject ()</code> may be called from this method to
+ * carry out default serialization. This method is not
+ * responsible for dealing with fields of super-classes or subclasses.
+ *
+ * By implementing <code>java.io.Externalizable</code>. This gives
+ * the class complete control over the way it is written to the
+ * stream. If this approach is used the burden of writing superclass
+ * and subclass data is transfered to the class implementing
+ * <code>java.io.Externalizable</code>.
+ *
+ * @see java.io.DataOutputStream
+ * @see java.io.Externalizable
+ * @see java.io.ObjectInputStream
+ * @see java.io.Serializable
+ */
public class ObjectOutputStream extends OutputStream
implements ObjectOutput, ObjectStreamConstants
{
/**
- Creates a new <code>ObjectOutputStream</code> that will do all of
- its writing onto <code>out</code>. This method also initializes
- the stream by writing the header information (stream magic number
- and stream version).
-
- @exception IOException Writing stream header to underlying
- stream cannot be completed.
-
- @see writeStreamHeader ()
- */
+ * Creates a new <code>ObjectOutputStream</code> that will do all of
+ * its writing onto <code>out</code>. This method also initializes
+ * the stream by writing the header information (stream magic number
+ * and stream version).
+ *
+ * @exception IOException Writing stream header to underlying
+ * stream cannot be completed.
+ *
+ * @see #writeStreamHeader()
+ */
public ObjectOutputStream (OutputStream out) throws IOException
{
realOutput = new DataOutputStream (out);
@@ -145,26 +144,25 @@ public class ObjectOutputStream extends OutputStream
writeStreamHeader ();
}
-
/**
- Writes a representation of <code>obj</code> to the underlying
- output stream by writing out information about its class, then
- writing out each of the objects non-transient, non-static
- fields. If any of these fields are other objects,
- they are written out in the same manner.
-
- This method can be overriden by a class by implementing
- <code>private void writeObject (ObjectOutputStream)</code>.
-
- If an exception is thrown from this method, the stream is left in
- an undefined state.
-
- @exception NotSerializableException An attempt was made to
- serialize an <code>Object</code> that is not serializable.
-
- @exception IOException Exception from underlying
- <code>OutputStream</code>.
- */
+ * Writes a representation of <code>obj</code> to the underlying
+ * output stream by writing out information about its class, then
+ * writing out each of the objects non-transient, non-static
+ * fields. If any of these fields are other objects,
+ * they are written out in the same manner.
+ *
+ * This method can be overriden by a class by implementing
+ * <code>private void writeObject (ObjectOutputStream)</code>.
+ *
+ * If an exception is thrown from this method, the stream is left in
+ * an undefined state.
+ *
+ * @exception NotSerializableException An attempt was made to
+ * serialize an <code>Object</code> that is not serializable.
+ *
+ * @exception IOException Exception from underlying
+ * <code>OutputStream</code>.
+ */
public final void writeObject (Object obj) throws IOException
{
if (useSubclassMethod)
@@ -354,16 +352,20 @@ public class ObjectOutputStream extends OutputStream
ObjectStreamClass[] hierarchy =
ObjectStreamClass.getObjectStreamClasses (clazz);
- boolean has_write;
for (int i=0; i < hierarchy.length; i++)
{
currentObjectStreamClass = hierarchy[i];
fieldsAlreadyWritten = false;
- has_write = currentObjectStreamClass.hasWriteMethod ();
-
- writeFields (obj, currentObjectStreamClass.fields,
- has_write);
+ if (currentObjectStreamClass.hasWriteMethod ())
+ {
+ setBlockDataMode (true);
+ callWriteMethod (obj, currentObjectStreamClass);
+ setBlockDataMode (false);
+ realOutput.writeByte (TC_ENDBLOCKDATA);
+ }
+ else
+ writeFields (obj, currentObjectStreamClass);
}
currentObject = null;
@@ -424,7 +426,7 @@ public class ObjectOutputStream extends OutputStream
throws IOException, NotActiveException
{
markFieldsWritten ();
- writeFields (currentObject, currentObjectStreamClass.fields, false);
+ writeFields (currentObject, currentObjectStreamClass);
}
@@ -490,7 +492,7 @@ public class ObjectOutputStream extends OutputStream
@exception IOException if <code>version</code> is not a valid
protocol
- @see setDefaultProtocolVersion (int)
+ @see #setDefaultProtocolVersion(int)
*/
public void useProtocolVersion (int version) throws IOException
{
@@ -513,7 +515,7 @@ public class ObjectOutputStream extends OutputStream
@exception IOException if <code>version</code> is not a valid
protocol
- @see useProtocolVersion (int)
+ @see #useProtocolVersion(int)
*/
public static void setDefaultProtocolVersion (int version)
throws IOException
@@ -534,7 +536,7 @@ public class ObjectOutputStream extends OutputStream
@exception IOException Exception from underlying
<code>OutputStream</code>.
- @see java.io.ObjectInputStream#resolveClass (java.io.ObjectStreamClass)
+ @see ObjectInputStream#resolveClass(java.io.ObjectStreamClass)
*/
protected void annotateClass (Class cl) throws IOException
{}
@@ -554,7 +556,7 @@ public class ObjectOutputStream extends OutputStream
@exception IOException Exception from underlying
<code>OutputStream</code>.
- @see enableReplaceObject (boolean)
+ @see #enableReplaceObject(boolean)
*/
protected Object replaceObject (Object obj) throws IOException
{
@@ -602,16 +604,16 @@ public class ObjectOutputStream extends OutputStream
/**
- Protected constructor that allows subclasses to override
- serialization. This constructor should be called by subclasses
- that wish to override <code>writeObject (Object)</code>. This
- method does a security check <i>NOTE: currently not
- implemented</i>, then sets a flag that informs
- <code>writeObject (Object)</code> to call the subclasses
- <code>writeObjectOverride (Object)</code> method.
-
- @see writeObjectOverride (Object)
- */
+ * Protected constructor that allows subclasses to override
+ * serialization. This constructor should be called by subclasses
+ * that wish to override <code>writeObject (Object)</code>. This
+ * method does a security check <i>NOTE: currently not
+ * implemented</i>, then sets a flag that informs
+ * <code>writeObject (Object)</code> to call the subclasses
+ * <code>writeObjectOverride (Object)</code> method.
+ *
+ * @see #writeObjectOverride(Object)
+ */
protected ObjectOutputStream () throws IOException, SecurityException
{
SecurityManager sec_man = System.getSecurityManager ();
@@ -622,17 +624,17 @@ public class ObjectOutputStream extends OutputStream
/**
- This method allows subclasses to override the default
- serialization mechanism provided by
- <code>ObjectOutputStream</code>. To make this method be used for
- writing objects, subclasses must invoke the 0-argument
- constructor on this class from there constructor.
-
- @see ObjectOutputStream ()
-
- @exception NotActiveException Subclass has arranged for this
- method to be called, but did not implement this method.
- */
+ * This method allows subclasses to override the default
+ * serialization mechanism provided by
+ * <code>ObjectOutputStream</code>. To make this method be used for
+ * writing objects, subclasses must invoke the 0-argument
+ * constructor on this class from there constructor.
+ *
+ * @see #ObjectOutputStream()
+ *
+ * @exception NotActiveException Subclass has arranged for this
+ * method to be called, but did not implement this method.
+ */
protected void writeObjectOverride (Object obj) throws NotActiveException,
IOException
{
@@ -641,8 +643,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#write (int)
- */
+ * @see DataOutputStream#write(int)
+ */
public void write (int data) throws IOException
{
if (writeDataAsBlocks)
@@ -658,8 +660,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#write (byte[])
- */
+ * @see DataOutputStream#write(byte[])
+ */
public void write (byte[] b) throws IOException
{
write (b, 0, b.length);
@@ -667,8 +669,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#write (byte[],int,int)
- */
+ * @see DataOutputStream#write(byte[],int,int)
+ */
public void write (byte[] b, int off, int len) throws IOException
{
if (writeDataAsBlocks)
@@ -694,8 +696,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#flush ()
- */
+ * @see DataOutputStream#flush()
+ */
public void flush () throws IOException
{
drain ();
@@ -704,12 +706,12 @@ public class ObjectOutputStream extends OutputStream
/**
- Causes the block-data buffer to be written to the underlying
- stream, but does not flush underlying stream.
-
- @exception IOException Exception from underlying
- <code>OutputStream</code>.
- */
+ * Causes the block-data buffer to be written to the underlying
+ * stream, but does not flush underlying stream.
+ *
+ * @exception IOException Exception from underlying
+ * <code>OutputStream</code>.
+ */
protected void drain () throws IOException
{
if (blockDataCount == 0)
@@ -723,8 +725,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#close ()
- */
+ * @see java.io.DataOutputStream#close ()
+ */
public void close () throws IOException
{
flush ();
@@ -733,8 +735,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeBoolean (boolean)
- */
+ * @see java.io.DataOutputStream#writeBoolean (boolean)
+ */
public void writeBoolean (boolean data) throws IOException
{
blockDataOutput.writeBoolean (data);
@@ -742,8 +744,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeByte (int)
- */
+ * @see java.io.DataOutputStream#writeByte (int)
+ */
public void writeByte (int data) throws IOException
{
blockDataOutput.writeByte (data);
@@ -751,8 +753,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeShort (int)
- */
+ * @see java.io.DataOutputStream#writeShort (int)
+ */
public void writeShort (int data) throws IOException
{
blockDataOutput.writeShort (data);
@@ -760,8 +762,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeChar (int)
- */
+ * @see java.io.DataOutputStream#writeChar (int)
+ */
public void writeChar (int data) throws IOException
{
blockDataOutput.writeChar (data);
@@ -769,8 +771,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeInt (int)
- */
+ * @see java.io.DataOutputStream#writeInt (int)
+ */
public void writeInt (int data) throws IOException
{
blockDataOutput.writeInt (data);
@@ -778,8 +780,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeLong (long)
- */
+ * @see java.io.DataOutputStream#writeLong (long)
+ */
public void writeLong (long data) throws IOException
{
blockDataOutput.writeLong (data);
@@ -787,8 +789,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeFloat (float)
- */
+ * @see java.io.DataOutputStream#writeFloat (float)
+ */
public void writeFloat (float data) throws IOException
{
blockDataOutput.writeFloat (data);
@@ -796,8 +798,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeDouble (double)
- */
+ * @see java.io.DataOutputStream#writeDouble (double)
+ */
public void writeDouble (double data) throws IOException
{
blockDataOutput.writeDouble (data);
@@ -805,8 +807,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeBytes (java.lang.String)
- */
+ * @see java.io.DataOutputStream#writeBytes (java.lang.String)
+ */
public void writeBytes (String data) throws IOException
{
blockDataOutput.writeBytes (data);
@@ -814,8 +816,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeChars (java.lang.String)
- */
+ * @see java.io.DataOutputStream#writeChars (java.lang.String)
+ */
public void writeChars (String data) throws IOException
{
dataOutput.writeChars (data);
@@ -823,8 +825,8 @@ public class ObjectOutputStream extends OutputStream
/**
- @see java.io.DataOutputStream#writeUTF (java.lang.String)
- */
+ * @see java.io.DataOutputStream#writeUTF (java.lang.String)
+ */
public void writeUTF (String data) throws IOException
{
dataOutput.writeUTF (data);
@@ -832,35 +834,29 @@ public class ObjectOutputStream extends OutputStream
/**
- This class allows a class to specify exactly which fields should
- be written, and what values should be written for these fields.
-
- XXX: finish up comments
- */
+ * This class allows a class to specify exactly which fields should
+ * be written, and what values should be written for these fields.
+ *
+ * XXX: finish up comments
+ */
public static abstract class PutField
{
- public abstract void put (String name, boolean value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, byte value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, char value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, double value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, float value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, int value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, long value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, short value)
- throws IOException, IllegalArgumentException;
- public abstract void put (String name, Object value)
- throws IOException, IllegalArgumentException;
+ public abstract void put (String name, boolean value);
+ public abstract void put (String name, byte value);
+ public abstract void put (String name, char value);
+ public abstract void put (String name, double value);
+ public abstract void put (String name, float value);
+ public abstract void put (String name, int value);
+ public abstract void put (String name, long value);
+ public abstract void put (String name, short value);
+ public abstract void put (String name, Object value);
+
+ /**
+ * @deprecated
+ */
public abstract void write (ObjectOutput out) throws IOException;
}
-
public PutField putFields () throws IOException
{
markFieldsWritten ();
@@ -873,7 +869,6 @@ public class ObjectOutputStream extends OutputStream
= new Object[currentObjectStreamClass.objectFieldCount];
public void put (String name, boolean value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -882,7 +877,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, byte value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -891,7 +885,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, char value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -902,7 +895,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, double value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -920,7 +912,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, float value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -934,7 +925,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, int value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -947,7 +937,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, long value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -964,7 +953,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, short value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -975,7 +963,6 @@ public class ObjectOutputStream extends OutputStream
}
public void put (String name, Object value)
- throws IOException, IllegalArgumentException
{
ObjectStreamField field
= currentObjectStreamClass.getField (name);
@@ -1145,22 +1132,12 @@ public class ObjectOutputStream extends OutputStream
}
- // writes out FIELDS of OBJECT. If CALL_WRITE_METHOD is true, use
- // object's writeObject (ObjectOutputStream), otherwise use default
- // serialization. FIELDS are already in canonical order.
- private void writeFields (Object obj,
- ObjectStreamField[] fields,
- boolean call_write_method) throws IOException
+ // writes out FIELDS of OBJECT for the specified ObjectStreamClass.
+ // FIELDS are already in canonical order.
+ private void writeFields (Object obj, ObjectStreamClass osc)
+ throws IOException
{
- if (call_write_method)
- {
- setBlockDataMode (true);
- callWriteMethod (obj);
- setBlockDataMode (false);
- realOutput.writeByte (TC_ENDBLOCKDATA);
- return;
- }
-
+ ObjectStreamField[] fields = osc.fields;
boolean oldmode = setBlockDataMode (false);
String field_name;
Class type;
@@ -1170,23 +1147,23 @@ public class ObjectOutputStream extends OutputStream
type = fields[i].getType ();
if (type == Boolean.TYPE)
- realOutput.writeBoolean (getBooleanField (obj, field_name));
+ realOutput.writeBoolean (getBooleanField (obj, osc.forClass(), field_name));
else if (type == Byte.TYPE)
- realOutput.writeByte (getByteField (obj, field_name));
+ realOutput.writeByte (getByteField (obj, osc.forClass(), field_name));
else if (type == Character.TYPE)
- realOutput.writeChar (getCharField (obj, field_name));
+ realOutput.writeChar (getCharField (obj, osc.forClass(), field_name));
else if (type == Double.TYPE)
- realOutput.writeDouble (getDoubleField (obj, field_name));
+ realOutput.writeDouble (getDoubleField (obj, osc.forClass(), field_name));
else if (type == Float.TYPE)
- realOutput.writeFloat (getFloatField (obj, field_name));
+ realOutput.writeFloat (getFloatField (obj, osc.forClass(), field_name));
else if (type == Integer.TYPE)
- realOutput.writeInt (getIntField (obj, field_name));
+ realOutput.writeInt (getIntField (obj, osc.forClass(), field_name));
else if (type == Long.TYPE)
- realOutput.writeLong (getLongField (obj, field_name));
+ realOutput.writeLong (getLongField (obj, osc.forClass(), field_name));
else if (type == Short.TYPE)
- realOutput.writeShort (getShortField (obj, field_name));
+ realOutput.writeShort (getShortField (obj, osc.forClass(), field_name));
else
- writeObject (getObjectField (obj, field_name,
+ writeObject (getObjectField (obj, osc.forClass(), field_name,
fields[i].getTypeString ()));
}
setBlockDataMode (oldmode);
@@ -1212,9 +1189,9 @@ public class ObjectOutputStream extends OutputStream
}
- private void callWriteMethod (Object obj) throws IOException
+ private void callWriteMethod (Object obj, ObjectStreamClass osc) throws IOException
{
- Class klass = obj.getClass ();
+ Class klass = osc.forClass();
try
{
Class classArgs[] = {ObjectOutputStream.class};
@@ -1243,12 +1220,11 @@ public class ObjectOutputStream extends OutputStream
}
}
- private boolean getBooleanField (Object obj, String field_name)
+ private boolean getBooleanField (Object obj, Class klass, String field_name)
throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
boolean b = f.getBoolean (obj);
return b;
@@ -1259,11 +1235,10 @@ public class ObjectOutputStream extends OutputStream
}
}
- private byte getByteField (Object obj, String field_name) throws IOException
+ private byte getByteField (Object obj, Class klass, String field_name) throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
byte b = f.getByte (obj);
return b;
@@ -1274,11 +1249,10 @@ public class ObjectOutputStream extends OutputStream
}
}
- private char getCharField (Object obj, String field_name) throws IOException
+ private char getCharField (Object obj, Class klass, String field_name) throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
char b = f.getChar (obj);
return b;
@@ -1289,12 +1263,11 @@ public class ObjectOutputStream extends OutputStream
}
}
- private double getDoubleField (Object obj, String field_name)
+ private double getDoubleField (Object obj, Class klass, String field_name)
throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
double b = f.getDouble (obj);
return b;
@@ -1305,12 +1278,11 @@ public class ObjectOutputStream extends OutputStream
}
}
- private float getFloatField (Object obj, String field_name)
+ private float getFloatField (Object obj, Class klass, String field_name)
throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
float b = f.getFloat (obj);
return b;
@@ -1321,11 +1293,10 @@ public class ObjectOutputStream extends OutputStream
}
}
- private int getIntField (Object obj, String field_name) throws IOException
+ private int getIntField (Object obj, Class klass, String field_name) throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
int b = f.getInt (obj);
return b;
@@ -1336,11 +1307,10 @@ public class ObjectOutputStream extends OutputStream
}
}
- private long getLongField (Object obj, String field_name) throws IOException
+ private long getLongField (Object obj, Class klass, String field_name) throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
long b = f.getLong (obj);
return b;
@@ -1351,12 +1321,11 @@ public class ObjectOutputStream extends OutputStream
}
}
- private short getShortField (Object obj, String field_name)
+ private short getShortField (Object obj, Class klass, String field_name)
throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
short b = f.getShort (obj);
return b;
@@ -1367,12 +1336,11 @@ public class ObjectOutputStream extends OutputStream
}
}
- private Object getObjectField (Object obj, String field_name,
+ private Object getObjectField (Object obj, Class klass, String field_name,
String type_code) throws IOException
{
try
{
- Class klass = obj.getClass ();
Field f = getField (klass, field_name);
Object o = f.get (obj);
// FIXME: We should check the type_code here
diff --git a/libjava/java/io/ObjectStreamClass.java b/libjava/java/io/ObjectStreamClass.java
index 2111635525a..ab233f166d0 100644
--- a/libjava/java/io/ObjectStreamClass.java
+++ b/libjava/java/io/ObjectStreamClass.java
@@ -166,14 +166,14 @@ public class ObjectStreamClass implements Serializable
/**
- Returns a textual representation of this
- <code>ObjectStreamClass</code> object including the name of the
- class it represents as well as that class's serial version
- stream-unique identifier.
-
- @see getSerialVersionUID ()
- @see getName ()
- */
+ * Returns a textual representation of this
+ * <code>ObjectStreamClass</code> object including the name of the
+ * class it represents as well as that class's serial version
+ * stream-unique identifier.
+ *
+ * @see #getSerialVersionUID()
+ * @see #getName()
+ */
public String toString ()
{
return "java.io.ObjectStreamClass< " + name + ", " + uid + " >";
@@ -194,6 +194,28 @@ public class ObjectStreamClass implements Serializable
// Returns true iff the class that this ObjectStreamClass represents
+ // has the following method:
+ //
+ // private void readObject (ObjectOutputStream)
+ //
+ // This method is used by the class to override default
+ // serialization behavior.
+ boolean hasReadMethod ()
+ {
+ try
+ {
+ Class[] readObjectParams = { ObjectInputStream.class };
+ forClass ().getDeclaredMethod ("readObject", readObjectParams);
+ return true;
+ }
+ catch (NoSuchMethodException e)
+ {
+ return false;
+ }
+ }
+
+
+ // Returns true iff the class that this ObjectStreamClass represents
// implements Serializable but does *not* implement Externalizable.
boolean isSerializable ()
{
diff --git a/libjava/java/io/ObjectStreamField.java b/libjava/java/io/ObjectStreamField.java
index bb78a786c1f..56f0d1aa872 100644
--- a/libjava/java/io/ObjectStreamField.java
+++ b/libjava/java/io/ObjectStreamField.java
@@ -1,5 +1,5 @@
/* ObjectStreamField.java -- Class used to store name and class of fields
- Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -51,17 +51,21 @@ public class ObjectStreamField implements java.lang.Comparable
}
/**
- * There're many cases you can't get java.lang.Class from typename if your context
+ * There're many cases you can't get java.lang.Class from typename
+ * if your context
* class loader can't load it, then use typename to construct the field
*/
ObjectStreamField (String name, String typename){
this.name = name;
this.typename = typename;
- try{
- type = TypeSignature.getClassForEncoding(typename);
- }catch(ClassNotFoundException e){
- type = Object.class; //??
- }
+ try
+ {
+ type = TypeSignature.getClassForEncoding(typename);
+ }
+ catch(ClassNotFoundException e)
+ {
+ type = Object.class; //FIXME: ???
+ }
}
public String getName ()
@@ -125,3 +129,4 @@ public class ObjectStreamField implements java.lang.Comparable
private String typename;
private int offset = -1; // XXX make sure this is correct
}
+
diff --git a/libjava/java/io/OutputStreamWriter.java b/libjava/java/io/OutputStreamWriter.java
index d49e104773a..1d63d5650d1 100644
--- a/libjava/java/io/OutputStreamWriter.java
+++ b/libjava/java/io/OutputStreamWriter.java
@@ -1,10 +1,40 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation
+/* OutputStreamWriter.java -- Writer that converts chars to bytes
+ Copyright (C) 1998, 1999, 2000, 2001, 2003 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
- 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. */
package java.io;
import gnu.gcj.convert.UnicodeToBytes;
@@ -17,7 +47,6 @@ import gnu.gcj.convert.UnicodeToBytes;
* API docs for JDK 1.2 beta from http://www.javasoft.com.
* Status: Believed complete and correct, but only supports 8859_1.
*/
-
public class OutputStreamWriter extends Writer
{
BufferedOutputStream out;
@@ -28,11 +57,6 @@ public class OutputStreamWriter extends Writer
private char[] work;
private int wcount;
- public String getEncoding()
- {
- return out != null ? converter.getName() : null;
- }
-
private OutputStreamWriter(OutputStream out, UnicodeToBytes encoder)
{
this.out = out instanceof BufferedOutputStream
@@ -43,17 +67,29 @@ public class OutputStreamWriter extends Writer
this.converter = encoder;
}
- public OutputStreamWriter(OutputStream out, String enc)
+ public OutputStreamWriter(OutputStream out, String encoding_scheme)
throws UnsupportedEncodingException
{
- this(out, UnicodeToBytes.getEncoder(enc));
+ this(out, UnicodeToBytes.getEncoder(encoding_scheme));
}
+ /**
+ * This method initializes a new instance of <code>OutputStreamWriter</code>
+ * to write to the specified stream using the default encoding.
+ *
+ * @param out The <code>OutputStream</code> to write to
+ */
public OutputStreamWriter(OutputStream out)
{
this(out, UnicodeToBytes.getDefaultEncoder());
}
+ /**
+ * This method closes this stream, and the underlying
+ * <code>OutputStream</code>
+ *
+ * @exception IOException If an error occurs
+ */
public void close() throws IOException
{
synchronized (lock)
@@ -68,6 +104,23 @@ public class OutputStreamWriter extends Writer
}
}
+ /**
+ * This method returns the name of the character encoding scheme currently
+ * in use by this stream. If the stream has been closed, then this method
+ * may return <code>null</code>.
+ *
+ * @return The encoding scheme name
+ */
+ public String getEncoding()
+ {
+ return out != null ? converter.getName() : null;
+ }
+
+ /**
+ * This method flushes any buffered bytes to the underlying output sink.
+ *
+ * @exception IOException If an error occurs
+ */
public void flush() throws IOException
{
synchronized (lock)
@@ -157,6 +210,13 @@ public class OutputStreamWriter extends Writer
}
}
+ /**
+ * This method writes a single character to the output stream.
+ *
+ * @param c The char to write, passed as an int.
+ *
+ * @exception IOException If an error occurs
+ */
public void write(int ch) throws IOException
{
synchronized (lock)
@@ -174,4 +234,6 @@ public class OutputStreamWriter extends Writer
work[wcount++] = (char) ch;
}
}
-}
+
+} // class OutputStreamWriter
+
diff --git a/libjava/java/io/PipedInputStream.java b/libjava/java/io/PipedInputStream.java
index 4816ce6f79b..bf7730a85c4 100644
--- a/libjava/java/io/PipedInputStream.java
+++ b/libjava/java/io/PipedInputStream.java
@@ -1,5 +1,5 @@
/* PipedInputStream.java -- Read portion of piped streams.
- Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -46,7 +46,8 @@ package java.io;
* to which it is connected.
* <p>
* Data is read and written to an internal buffer. It is highly recommended
- * that the <code>PipedInputStream</code> and connected <code>PipedOutputStream</code>
+ * that the <code>PipedInputStream</code> and connected
+ * <code>PipedOutputStream</code>
* be part of different threads. If they are not, the read and write
* operations could deadlock their thread.
*
@@ -113,7 +114,8 @@ public class PipedInputStream extends InputStream
* it to the passed in <code>PipedOutputStream</code>. The stream is then
* ready for reading.
*
- * @param source The <code>PipedOutputStream</code> to connect this stream to
+ * @param source The <code>PipedOutputStream</code> to connect this
+ * stream to
*
* @exception IOException If <code>source</code> is already connected.
*/
@@ -123,7 +125,8 @@ public class PipedInputStream extends InputStream
}
/**
- * This method connects this stream to the passed in <code>PipedOutputStream</code>.
+ * This method connects this stream to the passed in
+ * <code>PipedOutputStream</code>.
* This stream is then ready for reading. If this stream is already
* connected or has been previously closed, then an exception is thrown
*
@@ -224,9 +227,12 @@ public class PipedInputStream extends InputStream
/**
* This method reads bytes from the stream into a caller supplied buffer.
- * It starts storing bytes at position <code>offset</code> into the buffer and
- * reads a maximum of <code>len</code> bytes. Note that this method can actually
- * read fewer than <code>len</code> bytes. The actual number of bytes read is
+ * It starts storing bytes at position <code>offset</code> into the
+ * buffer and
+ * reads a maximum of <code>len</code> bytes. Note that this method
+ * can actually
+ * read fewer than <code>len</code> bytes. The actual number of bytes
+ * read is
* returned. A -1 is returned to indicated that no bytes can be read
* because the end of the stream was reached. If the stream is already
* closed, a -1 will again be returned to indicate the end of the stream.
@@ -255,9 +261,12 @@ public class PipedInputStream extends InputStream
/**
* This method reads bytes from the stream into a caller supplied buffer.
- * It starts storing bytes at position <code>offset</code> into the buffer and
- * reads a maximum of <code>len</code> bytes. Note that this method can actually
- * read fewer than <code>len</code> bytes. The actual number of bytes read is
+ * It starts storing bytes at position <code>offset</code> into the
+ * buffer and
+ * reads a maximum of <code>len</code> bytes. Note that this method
+ * can actually
+ * read fewer than <code>len</code> bytes. The actual number of bytes
+ * read is
* returned. A -1 is returned to indicated that no bytes can be read
* because the end of the stream was reached - ie close() was called on the
* connected PipedOutputStream.
@@ -371,3 +380,4 @@ public class PipedInputStream extends InputStream
notifyAll();
}
}
+
diff --git a/libjava/java/io/PipedReader.java b/libjava/java/io/PipedReader.java
index 64233a8d350..ec135427d09 100644
--- a/libjava/java/io/PipedReader.java
+++ b/libjava/java/io/PipedReader.java
@@ -118,7 +118,8 @@ public class PipedReader extends Reader
}
/**
- * This method connects this stream to the passed in <code>PipedWriter</code>.
+ * This method connects this stream to the passed in
+ * <code>PipedWriter</code>.
* This stream is then ready for reading. If this stream is already
* connected or has been previously closed, then an exception is thrown
*
@@ -207,9 +208,12 @@ public class PipedReader extends Reader
/**
* This method reads chars from the stream into a caller supplied buffer.
- * It starts storing chars at position <code>offset</code> into the buffer and
- * reads a maximum of <code>len</code> chars. Note that this method can actually
- * read fewer than <code>len</code> chars. The actual number of chars read is
+ * It starts storing chars at position <code>offset</code> into the
+ * buffer and
+ * reads a maximum of <code>len</code> chars. Note that this method
+ * can actually
+ * read fewer than <code>len</code> chars. The actual number of chars
+ * read is
* returned. A -1 is returned to indicated that no chars can be read
* because the end of the stream was reached. If the stream is already
* closed, a -1 will again be returned to indicate the end of the stream.
@@ -237,10 +241,11 @@ public class PipedReader extends Reader
}
/**
- * This method reads characters from the stream into a caller supplied buffer.
- * It starts storing chars at position <code>offset</code> into the buffer and
- * reads a maximum of <code>len</code> chars. Note that this method can actually
- * read fewer than <code>len</code> chars. The actual number of chars read is
+ * This method reads characters from the stream into a caller supplied
+ * buffer. It starts storing chars at position <code>offset</code> into
+ * the buffer and reads a maximum of <code>len</code> chars. Note that
+ * this method can actually read fewer than <code>len</code> chars.
+ * The actual number of chars read is
* returned. A -1 is returned to indicated that no chars can be read
* because the end of the stream was reached - ie close() was called on the
* connected PipedWriter.
@@ -361,3 +366,4 @@ public class PipedReader extends Reader
}
}
}
+
diff --git a/libjava/java/io/PrintStream.java b/libjava/java/io/PrintStream.java
index 621778da9d5..418d7f2cbd5 100644
--- a/libjava/java/io/PrintStream.java
+++ b/libjava/java/io/PrintStream.java
@@ -1,38 +1,159 @@
-// PrintStream.java - Print string representations
+/* PrintStream.java -- OutputStream for printing output
+ Copyright (C) 1998,2003 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1998, 1999, 2001 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. */
package java.io;
-import gnu.gcj.convert.UnicodeToBytes;
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date September 24, 1998
- */
+import gnu.gcj.convert.UnicodeToBytes;
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* Status: Believed complete and correct to 1.3
*/
+/**
+ * This class prints Java primitive values and object to a stream as
+ * text. None of the methods in this class throw an exception. However,
+ * errors can be detected by calling the <code>checkError()</code> method.
+ * Additionally, this stream can be designated as "autoflush" when
+ * created so that any writes are automatically flushed to the underlying
+ * output sink when the current line is terminated.
+ * <p>
+ * <b>Note that this class is deprecated</b>. It exists for backward
+ * compatibility only. New code should be written to use
+ * <code>PrintWriter</code> instead.
+ * <p>
+ * This class converts char's into byte's using the system default encoding.
+ *
+ * @deprecated
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public class PrintStream extends FilterOutputStream
{
/* Notice the implementation is quite similar to OutputStreamWriter.
* This leads to some minor duplication, because neither inherits
* from the other, and we want to maximize performance. */
+ // Line separator string.
+ private static final char[] line_separator
+ = System.getProperty("line.separator").toCharArray();
+
+ UnicodeToBytes converter;
+
+ // Work buffer of characters for converter.
+ char[] work = new char[100];
+ // Work buffer of bytes where we temporarily keep converter output.
+ byte[] work_bytes = new byte[100];
+
+ // True if error occurred.
+ private boolean error;
+ // True if auto-flush.
+ /**
+ * This is <code>true</code> if auto-flush is enabled,
+ * <code>false</code> otherwise
+ */
+ private boolean auto_flush;
+
+ /**
+ * This method intializes a new <code>PrintStream</code> object to write
+ * to the specified output sink. Note that this class is deprecated in
+ * favor of <code>PrintWriter</code>.
+ *
+ * @param out The <code>OutputStream</code> to write to.
+ *
+ * @deprecated
+ */
+ public PrintStream (OutputStream out)
+ {
+ this(out, false);
+ }
+
+ /**
+ * This method intializes a new <code>PrintStream</code> object to write
+ * to the specified output sink. This constructor also allows "auto-flush"
+ * functionality to be specified where the stream will be flushed after
+ * every line is terminated or newline character is written.
+ * <p>
+ * Note that this class is deprecated in favor of <code>PrintWriter</code>.
+ *
+ * @param out The <code>OutputStream</code> to write to.
+ * @param auto_flush <code>true</code> to flush the stream after every
+ * line, <code>false</code> otherwise
+ *
+ * @deprecated
+ */
+ public PrintStream (OutputStream out, boolean auto_flush)
+ {
+ super(out);
+
+ converter = UnicodeToBytes.getDefaultEncoder();
+ error = false;
+ this.auto_flush = auto_flush;
+ }
+
+ /**
+ * This method checks to see if an error has occurred on this stream. Note
+ * that once an error has occurred, this method will continue to report
+ * <code>true</code> forever for this stream. Before checking for an
+ * error condition, this method flushes the stream.
+ *
+ * @return <code>true</code> if an error has occurred,
+ * <code>false</code> otherwise
+ */
public boolean checkError ()
{
flush();
return error;
}
+ /**
+ * This method can be called by subclasses to indicate that an error
+ * has occurred and should be reported by <code>checkError</code>.
+ */
+ protected void setError ()
+ {
+ error = true;
+ }
+
+ /**
+ * This method closes this stream and all underlying streams.
+ */
public void close ()
{
try
@@ -50,6 +171,10 @@ public class PrintStream extends FilterOutputStream
}
}
+ /**
+ * This method flushes any buffered bytes to the underlying stream and
+ * then flushes that stream as well.
+ */
public void flush ()
{
try
@@ -133,121 +258,245 @@ public class PrintStream extends FilterOutputStream
}
}
+ /**
+ * This methods prints a boolean value to the stream. <code>true</code>
+ * values are printed as "true" and <code>false</code> values are printed
+ * as "false".
+ *
+ * @param b The <code>boolean</code> value to print
+ */
public void print (boolean bool)
{
print(String.valueOf(bool), false);
}
+ /**
+ * This method prints an integer to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ *
+ * @param inum The <code>int</code> value to be printed
+ */
public void print (int inum)
{
print(String.valueOf(inum), false);
}
+ /**
+ * This method prints a long to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ *
+ * @param lnum The <code>long</code> value to be printed
+ */
public void print (long lnum)
{
print(String.valueOf(lnum), false);
}
+ /**
+ * This method prints a float to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ *
+ * @param fnum The <code>float</code> value to be printed
+ */
public void print (float fnum)
{
print(String.valueOf(fnum), false);
}
+ /**
+ * This method prints a double to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ *
+ * @param dnum The <code>double</code> value to be printed
+ */
public void print (double dnum)
{
print(String.valueOf(dnum), false);
}
+ /**
+ * This method prints an <code>Object</code> to the stream. The actual
+ * value printed is determined by calling the <code>String.valueOf()</code>
+ * method.
+ *
+ * @param obj The <code>Object</code> to print.
+ */
public void print (Object obj)
{
print(obj == null ? "null" : obj.toString(), false);
}
+ /**
+ * This method prints a <code>String</code> to the stream. The actual
+ * value printed depends on the system default encoding.
+ *
+ * @param str The <code>String</code> to print.
+ */
public void print (String str)
{
print(str == null ? "null" : str, false);
}
+ /**
+ * This method prints a char to the stream. The actual value printed is
+ * determined by the character encoding in use.
+ *
+ * @param ch The <code>char</code> value to be printed
+ */
public synchronized void print (char ch)
{
work[0] = ch;
print(work, 0, 1, false);
}
+ /**
+ * This method prints an array of characters to the stream. The actual
+ * value printed depends on the system default encoding.
+ *
+ * @param s The array of characters to print.
+ */
public void print (char[] charArray)
{
print(charArray, 0, charArray.length, false);
}
+ /**
+ * This method prints a line separator sequence to the stream. The value
+ * printed is determined by the system property <xmp>line.separator</xmp>
+ * and is not necessarily the Unix '\n' newline character.
+ */
public void println ()
{
print(line_separator, 0, line_separator.length, false);
}
+ /**
+ * This methods prints a boolean value to the stream. <code>true</code>
+ * values are printed as "true" and <code>false</code> values are printed
+ * as "false".
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param b The <code>boolean</code> value to print
+ */
public void println (boolean bool)
{
print(String.valueOf(bool), true);
}
+ /**
+ * This method prints an integer to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param inum The <code>int</code> value to be printed
+ */
public void println (int inum)
{
print(String.valueOf(inum), true);
}
+ /**
+ * This method prints a long to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param lnum The <code>long</code> value to be printed
+ */
public void println (long lnum)
{
print(String.valueOf(lnum), true);
}
+ /**
+ * This method prints a float to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param fnum The <code>float</code> value to be printed
+ */
public void println (float fnum)
{
print(String.valueOf(fnum), true);
}
+ /**
+ * This method prints a double to the stream. The value printed is
+ * determined using the <code>String.valueOf()</code> method.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param dnum The <code>double</code> value to be printed
+ */
public void println (double dnum)
{
print(String.valueOf(dnum), true);
}
+ /**
+ * This method prints an <code>Object</code> to the stream. The actual
+ * value printed is determined by calling the <code>String.valueOf()</code>
+ * method.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param obj The <code>Object</code> to print.
+ */
public void println (Object obj)
{
print(obj == null ? "null" : obj.toString(), true);
}
+ /**
+ * This method prints a <code>String</code> to the stream. The actual
+ * value printed depends on the system default encoding.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param str The <code>String</code> to print.
+ */
public void println (String str)
{
print (str == null ? "null" : str, true);
}
+ /**
+ * This method prints a char to the stream. The actual value printed is
+ * determined by the character encoding in use.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param ch The <code>char</code> value to be printed
+ */
public synchronized void println (char ch)
{
work[0] = ch;
print(work, 0, 1, true);
}
+ /**
+ * This method prints an array of characters to the stream. The actual
+ * value printed depends on the system default encoding.
+ * <p>
+ * This method prints a line termination sequence after printing the value.
+ *
+ * @param s The array of characters to print.
+ */
public void println (char[] charArray)
{
print(charArray, 0, charArray.length, true);
}
- public PrintStream (OutputStream out)
- {
- this(out, false);
- }
-
- public PrintStream (OutputStream out, boolean af)
- {
- super(out);
- converter = UnicodeToBytes.getDefaultEncoder();
- error = false;
- auto_flush = af;
- }
-
- protected void setError ()
- {
- error = true;
- }
-
+ /**
+ * This method writes a byte of data to the stream. If auto-flush is
+ * enabled, printing a newline character will cause the stream to be
+ * flushed after the character is written.
+ *
+ * @param b The byte to be written
+ */
public void write (int oneByte)
{
try
@@ -266,11 +515,20 @@ public class PrintStream extends FilterOutputStream
}
}
- public void write (byte[] buffer, int offset, int count)
+ /**
+ * This method writes <code>len</code> bytes from the specified array
+ * starting at index <code>offset</code> into the array.
+ *
+ * @param buffer The array of bytes to write
+ * @param offset The index into the array to start writing from
+ * @param len The number of bytes to write
+ */
+ public void write (byte[] buffer, int offset, int len)
{
try
{
- out.write(buffer, offset, count);
+ out.write (buffer, offset, len);
+
if (auto_flush)
flush();
}
@@ -284,19 +542,5 @@ public class PrintStream extends FilterOutputStream
}
}
- UnicodeToBytes converter;
-
- // Work buffer of characters for converter.
- char[] work = new char[100];
- // Work buffer of bytes where we temporarily keep converter output.
- byte[] work_bytes = new byte[100];
-
- // True if error occurred.
- private boolean error;
- // True if auto-flush.
- private boolean auto_flush;
+} // class PrintStream
- // Line separator string.
- private static final char[] line_separator
- = System.getProperty("line.separator").toCharArray();
-}
diff --git a/libjava/java/io/PrintWriter.java b/libjava/java/io/PrintWriter.java
index 78a56dd0b41..acc6ae46e3d 100644
--- a/libjava/java/io/PrintWriter.java
+++ b/libjava/java/io/PrintWriter.java
@@ -48,8 +48,6 @@ package java.io;
* class which also auto-flushes when it encounters a newline character
* in the chars written).
*
- * @version 0.0
- *
* @author Per Bothner <bothner@cygnus.com>
* @author Aaron M. Renn (arenn@urbanophile.com)
* @date April 17, 1998.
@@ -99,7 +97,8 @@ public class PrintWriter extends Writer
* every line is terminated or newline character is written.
*
* @param wr The <code>Writer</code> to write to.
- * @param autoflush <code>true</code> to flush the stream after every line, <code>false</code> otherwise
+ * @param autoflush <code>true</code> to flush the stream after every
+ * line, <code>false</code> otherwise
*/
public PrintWriter(Writer wr, boolean autoflush)
{
@@ -130,7 +129,8 @@ public class PrintWriter extends Writer
* constructor allows auto-flush functionality to be enabled if desired
*
* @param out The <code>OutputStream</code> to write to
- * @param autoflush <code>true</code> to flush the stream after every <code>println</code> call, <code>false</code> otherwise.
+ * @param autoflush <code>true</code> to flush the stream after every
+ * <code>println</code> call, <code>false</code> otherwise.
*/
public PrintWriter(OutputStream out, boolean autoflush)
{
@@ -153,7 +153,8 @@ public class PrintWriter extends Writer
* <code>true</code> forever for this stream. Before checking for an
* error condition, this method flushes the stream.
*
- * @return <code>true</code> if an error has occurred, <code>false</code> otherwise
+ * @return <code>true</code> if an error has occurred,
+ * <code>false</code> otherwise
*/
public boolean checkError()
{
@@ -309,7 +310,7 @@ public class PrintWriter extends Writer
* This is the system dependent line separator
*/
private static final char[] line_separator
- = System.getProperty("line.separator").toCharArray();
+ = System.getProperty("line.separator").toCharArray();
/**
* This method prints a line separator sequence to the stream. The value
@@ -567,3 +568,4 @@ public class PrintWriter extends Writer
write(str, 0, str.length());
}
}
+
diff --git a/libjava/java/io/PushbackReader.java b/libjava/java/io/PushbackReader.java
index 80e949a170a..4b442e52c6f 100644
--- a/libjava/java/io/PushbackReader.java
+++ b/libjava/java/io/PushbackReader.java
@@ -1,5 +1,5 @@
/* PushbackReader.java -- An character stream that can unread chars
- Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -48,8 +48,6 @@ package java.io;
* The default pushback buffer size one char, but this can be overridden
* by the creator of the stream.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Warren Levy <warrenl@cygnus.com>
*/
@@ -79,7 +77,7 @@ public class PushbackReader extends FilterReader
* specified subordinate <code>Reader</code> with a default pushback buffer
* size of 1.
*
- * @code in The subordinate stream to read from
+ * @param in The subordinate stream to read from
*/
public PushbackReader(Reader in)
{
@@ -136,7 +134,8 @@ public class PushbackReader extends FilterReader
* This method returns <code>false</code> to indicate that it does not support
* mark/reset functionality.
*
- * @return This method returns <code>false</code> to indicate that this class does not support mark/reset functionality
+ * @return This method returns <code>false</code> to indicate that this
+ * class does not support mark/reset functionality
*
*/
public boolean markSupported()
@@ -165,7 +164,8 @@ public class PushbackReader extends FilterReader
* read in the pushback buffer or if the underlying stream is ready to
* be read.
*
- * @return <code>true</code> if this stream is ready to be read, <code>false</code> otherwise
+ * @return <code>true</code> if this stream is ready to be read,
+ * <code>false</code> otherwise
*
* @exception IOException If an error occurs
*/
@@ -252,7 +252,8 @@ public class PushbackReader extends FilterReader
/**
* This method read chars from a stream and stores them into a caller
- * supplied buffer. It starts storing the data at index <code>offset</code> into
+ * supplied buffer. It starts storing the data at index <code>offset</code>
+ * into
* the buffer and attempts to read <code>len</code> chars. This method can
* return before reading the number of chars requested. The actual number
* of chars read is returned as an int. A -1 is returned to indicate the
@@ -302,8 +303,8 @@ public class PushbackReader extends FilterReader
* <p>
* If the pushback buffer is full, this method throws an exception.
* <p>
- * The argument to this method is an <code>int</code>. Only the low eight bits
- * of this value are pushed back.
+ * The argument to this method is an <code>int</code>. Only the low eight
+ * bits of this value are pushed back.
*
* @param b The char to be pushed back, passed as an int
*
@@ -343,7 +344,8 @@ public class PushbackReader extends FilterReader
/**
* This method pushed back chars from the passed in array into the pushback
- * buffer. The chars from <code>buf[offset]</code> to <code>buf[offset + len]</code>
+ * buffer. The chars from <code>buf[offset]</code> to
+ * <code>buf[offset + len]</code>
* are pushed in reverse order so that the next char read from the stream
* after this operation will be <code>buf[offset]</code> followed by
* <code>buf[offset + 1]</code>, etc.
@@ -378,3 +380,4 @@ public class PushbackReader extends FilterReader
}
}
}
+
diff --git a/libjava/java/io/RandomAccessFile.java b/libjava/java/io/RandomAccessFile.java
index 1d30f1f3772..990b2dcb5bd 100644
--- a/libjava/java/io/RandomAccessFile.java
+++ b/libjava/java/io/RandomAccessFile.java
@@ -1,57 +1,125 @@
-// RandomAccessFile.java
+/* RandomAccessFile.java -- Class supporting random file I/O
+ Copyright (C) 1998, 1999, 2001, 2002, 2003 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1998, 1999, 2001, 2002 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. */
package java.io;
-/**
- * @author Tom Tromey <tromey@cygnus.com>
- * @date September 25, 1998
- */
+import java.nio.channels.FileChannel;
+import gnu.java.nio.FileChannelImpl;
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
* "The Java Language Specification", ISBN 0-201-63451-1
* Status: Believe complete and correct to 1.1.
*/
+/**
+ * This class allows reading and writing of files at random locations.
+ * Most Java I/O classes are either pure sequential input or output. This
+ * class fulfills the need to be able to read the bytes of a file in an
+ * arbitrary order. In addition, this class implements the
+ * <code>DataInput</code> and <code>DataOutput</code> interfaces to allow
+ * the reading and writing of Java primitives.
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Tom Tromey <tromey@cygnus.com>
+ */
public class RandomAccessFile implements DataOutput, DataInput
{
- public void close () throws IOException
- {
- if (fd.valid())
- fd.close();
- }
-
- public final FileDescriptor getFD () throws IOException
- {
- if (! fd.valid())
- throw new IOException ();
- return fd;
- }
-
- public long getFilePointer () throws IOException
- {
- return fd.getFilePointer();
- }
-
- public void setLength (long pos) throws IOException
- {
- fd.setLength(pos);
- }
- public long length () throws IOException
+ // The underlying file.
+ private FileDescriptor fd;
+ // The corresponding input and output streams.
+ private DataOutputStream out;
+ private DataInputStream in;
+
+ private FileChannel ch; /* cached associated file-channel */
+
+ /**
+ * This method initializes a new instance of <code>RandomAccessFile</code>
+ * to read from the specified <code>File</code> object with the specified
+ * access mode. The access mode is either "r" for read only access or "rw"
+ * for read-write access.
+ * <p>
+ * Note that a <code>SecurityManager</code> check is made prior to
+ * opening the file to determine whether or not this file is allowed to
+ * be read or written.
+ *
+ * @param file The <code>File</code> object to read and/or write.
+ * @param mode "r" for read only or "rw" for read-write access to the file
+ *
+ * @exception IllegalArgumentException If <code>mode</code> has an
+ * illegal value
+ * @exception SecurityException If the requested access to the file
+ * is not allowed
+ * @exception IOException If any other error occurs
+ */
+ public RandomAccessFile (File file, String mode)
+ throws FileNotFoundException
{
- return fd.length();
+ this (file.getPath(), mode);
}
- public RandomAccessFile (String fileName, String mode) throws IOException
- {
+ /**
+ * This method initializes a new instance of <code>RandomAccessFile</code>
+ * to read from the specified file name with the specified access mode.
+ * The access mode is either "r" for read only access or "rw" for read
+ * write access.
+ * <p>
+ * Note that a <code>SecurityManager</code> check is made prior to
+ * opening the file to determine whether or not this file is allowed to
+ * be read or written.
+ *
+ * @param fileName The name of the file to read and/or write
+ * @param mode "r" for read only or "rw" for read-write access to the file
+ *
+ * @exception IllegalArgumentException If <code>mode</code> has an
+ * illegal value
+ * @exception SecurityException If the requested access to the file
+ * is not allowed
+ * @exception FileNotFoundException If any other error occurs
+ */
+ public RandomAccessFile (String fileName, String mode)
+ throws FileNotFoundException
+ {
+ // Check the mode
+ if (!mode.equals("r") && !mode.equals("rw") && !mode.equals("rws") &&
+ !mode.equals("rwd"))
+ throw new IllegalArgumentException("Bad mode value: " + mode);
+
int fdmode;
if (mode.compareTo ("r") == 0)
fdmode = FileDescriptor.READ;
@@ -60,12 +128,14 @@ public class RandomAccessFile implements DataOutput, DataInput
else
throw new IllegalArgumentException ("invalid mode: " + mode);
+ // The obligatory SecurityManager stuff
SecurityManager s = System.getSecurityManager();
if (s != null)
{
- s.checkRead(fileName);
- if ((fdmode & FileDescriptor.WRITE) != 0)
- s.checkWrite(fileName);
+ s.checkRead(fileName);
+
+ if ((fdmode & FileDescriptor.WRITE) != 0)
+ s.checkWrite(fileName);
}
fd = new FileDescriptor (fileName, fdmode);
@@ -73,185 +143,825 @@ public class RandomAccessFile implements DataOutput, DataInput
in = new DataInputStream (new FileInputStream (fd));
}
- public RandomAccessFile (File file, String mode) throws IOException
+ /**
+ * This method closes the file and frees up all file related system
+ * resources. Since most operating systems put a limit on how many files
+ * may be opened at any given time, it is a good idea to close all files
+ * when no longer needed to avoid hitting this limit
+ */
+ public void close () throws IOException
{
- this (file.getPath(), mode);
+ if (fd.valid())
+ fd.close();
}
- public int read () throws IOException
+ /**
+ * This method returns a <code>FileDescriptor</code> object that
+ * represents the native file handle for this file.
+ *
+ * @return The <code>FileDescriptor</code> object for this file
+ *
+ * @exception IOException If an error occurs
+ */
+ public final FileDescriptor getFD () throws IOException
{
- return in.read();
+ if (! fd.valid())
+ throw new IOException ();
+
+ return fd;
}
- public int read (byte[] buffer) throws IOException
+ /**
+ * This method returns the current offset in the file at which the next
+ * read or write will occur
+ *
+ * @return The current file position
+ *
+ * @exception IOException If an error occurs
+ */
+ public long getFilePointer () throws IOException
{
- return in.read(buffer);
+ return fd.getFilePointer();
}
- public int read (byte[] buffer, int offset, int count) throws IOException
+ /**
+ * This method sets the length of the file to the specified length. If
+ * the currently length of the file is longer than the specified length,
+ * then the file is truncated to the specified length. If the current
+ * length of the file is shorter than the specified length, the file
+ * is extended with bytes of an undefined value.
+ * <p>
+ * The file must be open for write access for this operation to succeed.
+ *
+ * @param newlen The new length of the file
+ *
+ * @exception IOException If an error occurs
+ */
+ public void setLength (long pos) throws IOException
{
- return in.read(buffer, offset, count);
+ fd.setLength(pos);
}
- public final boolean readBoolean () throws IOException
+ /**
+ * This method returns the length of the file in bytes
+ *
+ * @return The length of the file
+ *
+ * @exception IOException If an error occurs
+ */
+ public long length () throws IOException
{
- return in.readBoolean();
+ return fd.length();
}
- public final byte readByte () throws IOException
+ /**
+ * This method reads a single byte of data from the file and returns it
+ * as an integer.
+ *
+ * @return The byte read as an int, or -1 if the end of the file was reached.
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read () throws IOException
{
- return in.readByte();
+ return in.read();
}
+ /**
+ * This method reads bytes from the file into the specified array. The
+ * bytes are stored starting at the beginning of the array and up to
+ * <code>buf.length</code> bytes can be read.
+ *
+ * @param buf The buffer to read bytes from the file into
+ *
+ * @return The actual number of bytes read or -1 if end of file
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read (byte[] buffer) throws IOException
+ {
+ return in.read (buffer);
+ }
+
+ /**
+ * This methods reads up to <code>len</code> bytes from the file into the
+ * specified array starting at position <code>offset</code> into the array.
+ *
+ * @param buf The array to read the bytes into
+ * @param offset The index into the array to start storing bytes
+ * @param len The requested number of bytes to read
+ *
+ * @return The actual number of bytes read, or -1 if end of file
+ *
+ * @exception IOException If an error occurs
+ */
+ public int read (byte[] buffer, int offset, int len) throws IOException
+ {
+ return in.read (buffer, offset, len);
+ }
+
+ /**
+ * This method reads a Java boolean value from an input stream. It does
+ * so by reading a single byte of data. If that byte is zero, then the
+ * value returned is <code>false</code> If the byte is non-zero, then
+ * the value returned is <code>true</code>
+ * <p>
+ * This method can read a <code>boolean</code> written by an object
+ * implementing the
+ * <code>writeBoolean()</code> method in the <code>DataOutput</code>
+ * interface.
+ *
+ * @return The <code>boolean</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the
+ * boolean
+ * @exception IOException If any other error occurs
+ */
+ public final boolean readBoolean () throws IOException
+ {
+ return in.readBoolean ();
+ }
+
+ /**
+ * This method reads a Java byte value from an input stream. The value
+ * is in the range of -128 to 127.
+ * <p>
+ * This method can read a <code>byte</code> written by an object
+ * implementing the
+ * <code>writeByte()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>byte</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the byte
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
+ public final byte readByte () throws IOException
+ {
+ return in.readByte ();
+ }
+
+ /**
+ * This method reads a Java <code>char</code> value from an input stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single 16-bit Java <code>char</code> The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and code{byte2</code> represent
+ * the first
+ * and second byte read from the stream respectively, they will be
+ * transformed to a <code>char</code> in the following manner:
+ * <p>
+ * <code>(char)(((byte1 & 0xFF) << 8) | (byte2 & 0xFF)</code>
+ * <p>
+ * This method can read a <code>char</code> written by an object
+ * implementing the
+ * <code>writeChar()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>char</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the char
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final char readChar () throws IOException
{
return in.readChar();
}
+ /**
+ * This method reads a Java double value from an input stream. It operates
+ * by first reading a <code>logn</code> value from the stream by calling the
+ * <code>readLong()</code> method in this interface, then
+ * converts that <code>long</code>
+ * to a <code>double</code> using the <code>longBitsToDouble</code>
+ * method in the class <code>java.lang.Double</code>
+ * <p>
+ * This method can read a <code>double</code> written by an object
+ * implementing the
+ * <code>writeDouble()</code> method in the <code>DataOutput</code>
+ * interface.
+ *
+ * @return The <code>double</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading
+ * the double
+ * @exception IOException If any other error occurs
+ *
+ * @see java.lang.Double
+ * @see DataOutput
+ */
public final double readDouble () throws IOException
{
- return in.readDouble();
- }
-
+ return in.readDouble ();
+ }
+
+ /**
+ * This method reads a Java float value from an input stream. It operates
+ * by first reading an <code>int</code> value from the stream by calling the
+ * <code>readInt()</code> method in this interface, then converts
+ * that <code>int</code>
+ * to a <code>float</code> using the <code>intBitsToFloat</code> method in
+ * the class <code>java.lang.Float</code>
+ * <p>
+ * This method can read a <code>float</code> written by an object
+ * implementing the
+ * <code>writeFloat()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>float</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the float
+ * @exception IOException If any other error occurs
+ *
+ * @see java.lang.Float
+ * @see DataOutput
+ */
public final float readFloat () throws IOException
{
return in.readFloat();
}
+ /**
+ * This method reads raw bytes into the passed array until the array is
+ * full. Note that this method blocks until the data is available and
+ * throws an exception if there is not enough data left in the stream to
+ * fill the buffer
+ *
+ * @param buf The buffer into which to read the data
+ *
+ * @exception EOFException If end of file is reached before filling the
+ * buffer
+ * @exception IOException If any other error occurs
+ */
public final void readFully (byte[] buffer) throws IOException
{
in.readFully(buffer);
}
+ /**
+ * This method reads raw bytes into the passed array <code>buf</code>
+ * starting
+ * <code>offset</code> bytes into the buffer. The number of bytes read
+ * will be
+ * exactly <code>len</code> Note that this method blocks until the data is
+ * available and throws an exception if there is not enough data left in
+ * the stream to read <code>len</code> bytes.
+ *
+ * @param buf The buffer into which to read the data
+ * @param offset The offset into the buffer to start storing data
+ * @param len The number of bytes to read into the buffer
+ *
+ * @exception EOFException If end of file is reached before filling
+ * the buffer
+ * @exception IOException If any other error occurs
+ */
public final void readFully (byte[] buffer, int offset, int count)
throws IOException
{
- in.readFully(buffer, offset, count);
- }
-
+ in.readFully (buffer, offset, count);
+ }
+
+ /**
+ * This method reads a Java <code>int</code> value from an input stream
+ * It operates by reading four bytes from the stream and converting them to
+ * a single Java <code>int</code> The bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> through <code>byte4</code>
+ * represent the first
+ * four bytes read from the stream, they will be
+ * transformed to an <code>int</code> in the following manner:
+ * <p>
+ * <code>(int)(((byte1 & 0xFF) << 24) + ((byte2 & 0xFF) << 16) +
+ * ((byte3 & 0xFF) << 8) + (byte4 & 0xFF)))</code>
+ * <p>
+ * The value returned is in the range of 0 to 65535.
+ * <p>
+ * This method can read an <code>int</code> written by an object
+ * implementing the
+ * <code>writeInt()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>int</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the int
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final int readInt () throws IOException
{
return in.readInt();
}
+ /**
+ * This method reads the next line of text data from an input stream.
+ * It operates by reading bytes and converting those bytes to
+ * <code>char</code>
+ * values by treating the byte read as the low eight bits of the
+ * <code>char</code>
+ * and using <code>0</code> as the high eight bits. Because of this, it does
+ * not support the full 16-bit Unicode character set.
+ * <p>
+ * The reading of bytes ends when either the end of file or a line terminator
+ * is encountered. The bytes read are then returned as a <code>String</code>
+ * A line terminator is a byte sequence consisting of either
+ * <code>\r</code> <code>\n</code> or <code>\r\n</code> These
+ * termination charaters are
+ * discarded and are not returned as part of the string.
+ * <p>
+ * This method can read data that was written by an object implementing the
+ * <code>writeLine()</code> method in <code>DataOutput</code>
+ *
+ * @return The line read as a <code>String</code>
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see DataOutput
+ *
+ * @deprecated
+ */
public final String readLine () throws IOException
{
- return in.readLine();
- }
-
+ return in.readLine ();
+ }
+
+ /**
+ * This method reads a Java long value from an input stream
+ * It operates by reading eight bytes from the stream and converting them to
+ * a single Java <code>long</code> The bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> through <code>byte8</code>
+ * represent the first
+ * eight bytes read from the stream, they will be
+ * transformed to an <code>long</code> in the following manner:
+ * <p>
+ * <code>
+ * (long)((((long)byte1 & 0xFF) << 56) + (((long)byte2 & 0xFF) << 48) +
+ * (((long)byte3 & 0xFF) << 40) + (((long)byte4 & 0xFF) << 32) +
+ * (((long)byte5 & 0xFF) << 24) + (((long)byte6 & 0xFF) << 16) +
+ * (((long)byte7 & 0xFF) << 8) + ((long)byte9 & 0xFF)))</code>
+ * <p>
+ * The value returned is in the range of 0 to 65535.
+ * <p>
+ * This method can read an <code>long</code> written by an object
+ * implementing the
+ * <code>writeLong()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>long</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the long
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final long readLong () throws IOException
{
return in.readLong();
}
+ /**
+ * This method reads a signed 16-bit value into a Java in from the stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single 16-bit Java <code>short</code> The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and code{byte2</code>
+ * represent the first
+ * and second byte read from the stream respectively, they will be
+ * transformed to a <code>short</code> in the following manner:
+ * <p>
+ * <code>(short)(((byte1 & 0xFF) << 8) | (byte2 & 0xFF)</code>
+ * <p>
+ * The value returned is in the range of -32768 to 32767.
+ * <p>
+ * This method can read a <code>short</code> written by an object
+ * implementing the
+ * <code>writeShort()</code> method in the <code>DataOutput</code> interface.
+ *
+ * @return The <code>short</code> value read
+ *
+ * @exception EOFException If end of file is reached before reading the value
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final short readShort () throws IOException
{
return in.readShort();
}
+ /**
+ * This method reads 8 unsigned bits into a Java <code>int</code> value
+ * from the
+ * stream. The value returned is in the range of 0 to 255.
+ * <p>
+ * This method can read an unsigned byte written by an object implementing
+ * the <code>writeUnsignedByte()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The unsigned bytes value read as a Java <code>int</code>
+ *
+ * @exception EOFException If end of file is reached before reading the value
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final int readUnsignedByte () throws IOException
{
return in.readUnsignedByte();
}
+ /**
+ * This method reads 16 unsigned bits into a Java int value from the stream.
+ * It operates by reading two bytes from the stream and converting them to
+ * a single Java <code>int</code> The two bytes are stored most
+ * significant byte first (i.e., "big endian") regardless of the native
+ * host byte ordering.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code>
+ * represent the first
+ * and second byte read from the stream respectively, they will be
+ * transformed to an <code>int</code> in the following manner:
+ * <p>
+ * <code>(int)(((byte1 & 0xFF) << 8) + (byte2 & 0xFF))</code>
+ * <p>
+ * The value returned is in the range of 0 to 65535.
+ * <p>
+ * This method can read an unsigned short written by an object implementing
+ * the <code>writeUnsignedShort()</code> method in the
+ * <code>DataOutput</code> interface.
+ *
+ * @return The unsigned short value read as a Java <code>int</code>
+ *
+ * @exception EOFException If end of file is reached before reading the value
+ * @exception IOException If any other error occurs
+ */
public final int readUnsignedShort () throws IOException
{
return in.readUnsignedShort();
}
+ /**
+ * This method reads a <code>String</code> from an input stream that
+ * is encoded in
+ * a modified UTF-8 format. This format has a leading two byte sequence
+ * that contains the remaining number of bytes to read. This two byte
+ * sequence is read using the <code>readUnsignedShort()</code> method of this
+ * interface.
+ * <p>
+ * After the number of remaining bytes have been determined, these bytes
+ * are read an transformed into <code>char</code> values.
+ * These <code>char</code> values
+ * are encoded in the stream using either a one, two, or three byte format.
+ * The particular format in use can be determined by examining the first
+ * byte read.
+ * <p>
+ * If the first byte has a high order bit of 0 then
+ * that character consists on only one byte. This character value consists
+ * of seven bits that are at positions 0 through 6 of the byte. As an
+ * example, if <code>byte1</code> is the byte read from the stream, it would
+ * be converted to a <code>char</code> like so:
+ * <p>
+ * <code>(char)byte1</code>
+ * <p>
+ * If the first byte has <code>110</code> as its high order bits, then the
+ * character consists of two bytes. The bits that make up the character
+ * value are in positions 0 through 4 of the first byte and bit positions
+ * 0 through 5 of the second byte. (The second byte should have
+ * 10 as its high order bits). These values are in most significant
+ * byte first (i.e., "big endian") order.
+ * <p>
+ * As an example, if <code>byte1</code> and <code>byte2</code>
+ * are the first two bytes
+ * read respectively, and the high order bits of them match the patterns
+ * which indicate a two byte character encoding, then they would be
+ * converted to a Java <code>char</code> like so:
+ * <p>
+ * <code>(char)(((byte1 & 0x1F) << 6) | (byte2 & 0x3F))</code>
+ * <p>
+ * If the first byte has a <code>1110</code> as its high order bits, then the
+ * character consists of three bytes. The bits that make up the character
+ * value are in positions 0 through 3 of the first byte and bit positions
+ * 0 through 5 of the other two bytes. (The second and third bytes should
+ * have <code>10</code> as their high order bits). These values are in most
+ * significant byte first (i.e., "big endian") order.
+ * <p>
+ * As an example, if <code>byte1</code> <code>byte2</code>
+ * and <code>byte3</code> are the
+ * three bytes read, and the high order bits of them match the patterns
+ * which indicate a three byte character encoding, then they would be
+ * converted to a Java <code>char</code> like so:
+ * <p>
+ * <code>(char)(((byte1 & 0x0F) << 12) | ((byte2 & 0x3F) << 6) |
+ * (byte3 & 0x3F))</code>
+ * <p>
+ * Note that all characters are encoded in the method that requires the
+ * fewest number of bytes with the exception of the character with the
+ * value of <code>&#92;u0000</code> which is encoded as two bytes. This is
+ * a modification of the UTF standard used to prevent C language style
+ * <code>NUL</code> values from appearing in the byte stream.
+ * <p>
+ * This method can read data that was written by an object implementing the
+ * <code>writeUTF()</code> method in <code>DataOutput</code>
+ *
+ * @return The <code>String</code> read
+ *
+ * @exception EOFException If end of file is reached before reading the
+ * String
+ * @exception UTFDataFormatException If the data is not in UTF-8 format
+ * @exception IOException If any other error occurs
+ *
+ * @see DataOutput
+ */
public final String readUTF () throws IOException
{
return in.readUTF();
}
+ /**
+ * This method sets the current file position to the specified offset
+ * from the beginning of the file. Note that some operating systems will
+ * allow the file pointer to be set past the current end of the file.
+ *
+ * @param pos The offset from the beginning of the file at which to set
+ * the file pointer
+ *
+ * @exception IOException If an error occurs
+ */
public void seek (long pos) throws IOException
{
- fd.seek(pos, FileDescriptor.SET, false);
- }
-
- public int skipBytes (int count) throws IOException
- {
- if (count <= 0)
+ fd.seek (pos, FileDescriptor.SET, false);
+ }
+
+ /**
+ * This method attempts to skip and discard the specified number of bytes
+ * in the input stream. It may actually skip fewer bytes than requested.
+ * The actual number of bytes skipped is returned. This method will not
+ * skip any bytes if passed a negative number of bytes to skip.
+ *
+ * @param numBytes The requested number of bytes to skip.
+ *
+ * @return The number of bytes actually skipped.
+ *
+ * @exception IOException If an error occurs.
+ */
+ public int skipBytes (int numBytes) throws IOException
+ {
+ if (numBytes < 0)
+ throw new IllegalArgumentException ("Can't skip negative bytes: " +
+ numBytes);
+
+ if (numBytes == 0)
return 0;
- long startPos = fd.getFilePointer();
- long endPos = fd.seek(count, FileDescriptor.CUR, true);
- return (int) (endPos - startPos);
- }
-
+
+ long curPos = fd.getFilePointer ();
+ long newPos = fd.seek (numBytes, FileDescriptor.CUR, true);
+
+ return (int) (newPos - curPos);
+ }
+
+ /**
+ * This method writes a single byte of data to the file. The file must
+ * be open for read-write in order for this operation to succeed.
+ *
+ * @param The byte of data to write, passed as an int.
+ *
+ * @exception IOException If an error occurs
+ */
public void write (int oneByte) throws IOException
{
out.write(oneByte);
}
+ /**
+ * This method writes all the bytes in the specified array to the file.
+ * The file must be open read-write in order for this operation to succeed.
+ *
+ * @param buf The array of bytes to write to the file
+ */
public void write (byte[] buffer) throws IOException
{
out.write(buffer);
}
- public void write (byte[] buffer, int offset, int count) throws IOException
- {
- out.write(buffer, offset, count);
- }
-
+ /**
+ * This method writes <code>len</code> bytes to the file from the specified
+ * array starting at index <code>offset</code> into the array.
+ *
+ * @param buf The array of bytes to write to the file
+ * @param offset The index into the array to start writing file
+ * @param len The number of bytes to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write (byte[] buffer, int offset, int len) throws IOException
+ {
+ out.write (buffer, offset, len);
+ }
+
+ /**
+ * This method writes a Java <code>boolean</code> to the underlying output
+ * stream. For a value of <code>true</code>, 1 is written to the stream.
+ * For a value of <code>false</code>, 0 is written.
+ *
+ * @param b The <code>boolean</code> value to write to the stream
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeBoolean (boolean val) throws IOException
{
out.writeBoolean(val);
}
+ /**
+ * This method writes a Java <code>byte</code> value to the underlying
+ * output stream.
+ *
+ * @param b The <code>byte</code> to write to the stream, passed
+ * as an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeByte (int v) throws IOException
{
out.writeByte(v);
}
+ /**
+ * This method writes a Java <code>short</code> to the stream, high byte
+ * first. This method requires two bytes to encode the value.
+ *
+ * @param s The <code>short</code> value to write to the stream,
+ * passed as an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeShort (int v) throws IOException
{
out.writeShort(v);
}
+ /**
+ * This method writes a single <code>char</code> value to the stream,
+ * high byte first.
+ *
+ * @param v The <code>char</code> value to write, passed as
+ * an <code>int</code>.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeChar (int v) throws IOException
{
out.writeChar(v);
}
+ /**
+ * This method writes a Java <code>int</code> to the stream, high bytes
+ * first. This method requires four bytes to encode the value.
+ *
+ * @param v The <code>int</code> value to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeInt (int v) throws IOException
{
out.writeInt(v);
}
+ /**
+ * This method writes a Java <code>long</code> to the stream, high bytes
+ * first. This method requires eight bytes to encode the value.
+ *
+ * @param v The <code>long</code> value to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeLong (long v) throws IOException
{
out.writeLong(v);
}
+ /**
+ * This method writes a Java <code>float</code> value to the stream. This
+ * value is written by first calling the method
+ * <code>Float.floatToIntBits</code>
+ * to retrieve an <code>int</code> representing the floating point number,
+ * then writing this <code>int</code> value to the stream exactly the same
+ * as the <code>writeInt()</code> method does.
+ *
+ * @param v The floating point number to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see #writeInt(int)
+ */
public final void writeFloat (float v) throws IOException
{
out.writeFloat(v);
}
+ /**
+ * This method writes a Java <code>double</code> value to the stream. This
+ * value is written by first calling the method
+ * <code>Double.doubleToLongBits</code>
+ * to retrieve an <code>long</code> representing the floating point number,
+ * then writing this <code>long</code> value to the stream exactly the same
+ * as the <code>writeLong()</code> method does.
+ *
+ * @param v The double precision floating point number to write to the
+ * stream.
+ *
+ * @exception IOException If an error occurs
+ *
+ * @see #writeLong(long)
+ */
public final void writeDouble (double v) throws IOException
{
out.writeDouble(v);
}
+ /**
+ * This method writes all the bytes in a <code>String</code> out to the
+ * stream. One byte is written for each character in the <code>String</code>.
+ * The high eight bits of each character are discarded.
+ *
+ * @param s The <code>String</code> to write to the stream
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeBytes (String s) throws IOException
{
out.writeBytes(s);
}
-
+
+ /**
+ * This method writes all the characters in a <code>String</code> to the
+ * stream. There will be two bytes for each character value. The high
+ * byte of the character will be written first.
+ *
+ * @param s The <code>String</code> to write to the stream.
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeChars (String s) throws IOException
{
out.writeChars(s);
}
+ /**
+ * This method writes a Java <code>String</code> to the stream in a modified
+ * UTF-8 format. First, two bytes are written to the stream indicating the
+ * number of bytes to follow. Note that this is the number of bytes in the
+ * encoded <code>String</code> not the <code>String</code> length. Next
+ * come the encoded characters. Each character in the <code>String</code>
+ * is encoded as either one, two or three bytes. For characters in the
+ * range of <code>&#92;u0001</code> to <code>&#92;u007F</code>,
+ * one byte is used. The character
+ * value goes into bits 0-7 and bit eight is 0. For characters in the range
+ * of <code>&#92;u0080</code> to <code>&#92;u007FF</code>, two
+ * bytes are used. Bits
+ * 6-10 of the character value are encoded bits 0-4 of the first byte, with
+ * the high bytes having a value of "110". Bits 0-5 of the character value
+ * are stored in bits 0-5 of the second byte, with the high bits set to
+ * "10". This type of encoding is also done for the null character
+ * <code>&#92;u0000</code>. This eliminates any C style NUL character values
+ * in the output. All remaining characters are stored as three bytes.
+ * Bits 12-15 of the character value are stored in bits 0-3 of the first
+ * byte. The high bits of the first bytes are set to "1110". Bits 6-11
+ * of the character value are stored in bits 0-5 of the second byte. The
+ * high bits of the second byte are set to "10". And bits 0-5 of the
+ * character value are stored in bits 0-5 of byte three, with the high bits
+ * of that byte set to "10".
+ *
+ * @param s The <code>String</code> to write to the output in UTF format
+ *
+ * @exception IOException If an error occurs
+ */
public final void writeUTF (String s) throws IOException
{
out.writeUTF(s);
}
+
+ /**
+ * This method creates a java.nio.channels.FileChannel.
+ * Nio does not allow one to create a file channel directly.
+ * A file channel must be created by first creating an instance of
+ * Input/Output/RandomAccessFile and invoking the getChannel() method on it.
+ */
+ public synchronized FileChannel getChannel ()
+ {
+ if (ch == null)
+ ch = new FileChannelImpl (fd, true, this);
+
+ return ch;
+ }
+} // class RandomAccessFile
- // The underlying file.
- private FileDescriptor fd;
- // The corresponding input and output streams.
- private DataOutputStream out;
- private DataInputStream in;
-}
diff --git a/libjava/java/io/Reader.java b/libjava/java/io/Reader.java
index ffa3dbbd640..be8794928fd 100644
--- a/libjava/java/io/Reader.java
+++ b/libjava/java/io/Reader.java
@@ -1,5 +1,5 @@
/* Reader.java -- base class of classes that read input as a stream of chars
- Copyright (C) 1998, 1999, 2000 Free Software Foundation
+ Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation
This file is part of GNU Classpath.
@@ -222,7 +222,8 @@ public abstract class Reader
* <p>
* This method always returns <code>false</code> in this class
*
- * @return <code>true</code> if the stream is ready to be read, <code>false</code> otherwise.
+ * @return <code>true</code> if the stream is ready to be read,
+ * <code>false</code> otherwise.
*
* @exception IOException If an error occurs
*/
diff --git a/libjava/java/io/SerializablePermission.java b/libjava/java/io/SerializablePermission.java
index d9dc3dd924a..d27dcf42667 100644
--- a/libjava/java/io/SerializablePermission.java
+++ b/libjava/java/io/SerializablePermission.java
@@ -1,5 +1,5 @@
/* SerializablePermission.java -- Basic permissions related to serialization.
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -55,64 +55,59 @@ import java.security.BasicPermission;
*
* @see java.security.BasicPermission
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
*/
public final class SerializablePermission extends BasicPermission
{
static final long serialVersionUID = 8537212141160296410L;
-/*
- * Class Variables
- */
-
-private static final String[] legal_names = { "enableSubclassImplementation",
- "enableSubstitution" };
-/*************************************************************************/
-
-/*
- * Constructors
- */
-
-/**
- * This method initializes a new instance of <code>SerializablePermission</code>
- * that has the specified name.
- *
- * @param name The name of the permission.
- *
- * @exception IllegalArgumentException If the name is not valid for this class.
- */
-public
-SerializablePermission(String name)
-{
- this(name, null);
-}
-
-/*************************************************************************/
-
-/**
- * This method initializes a new instance of <code>SerializablePermission</code>
- * that has the specified name and action list. Note that the action list
- * is unused in this class.
- *
- * @param name The name of the permission.
- * @param actions The action list (unused).
- *
- * @exception IllegalArgumentException If the name is not valid for this class.
- */
-public
-SerializablePermission(String name, String actions)
-{
- super(name, actions);
-
- for (int i = 0; i < legal_names.length; i++)
- if (legal_names[i].equals(name))
- return;
-
- throw new IllegalArgumentException("Bad permission name: " + name);
-}
-
+ /*
+ * Class Variables
+ */
+
+ private static final String[] legal_names = { "enableSubclassImplementation",
+ "enableSubstitution" };
+ /*
+ * Constructors
+ */
+
+ /**
+ * This method initializes a new instance of
+ * <code>SerializablePermission</code>
+ * that has the specified name.
+ *
+ * @param name The name of the permission.
+ *
+ * @exception IllegalArgumentException If the name is not valid for
+ * this class.
+ */
+ public SerializablePermission(String name)
+ {
+ this(name, null);
+ }
+
+ /**
+ * This method initializes a new instance of
+ * <code>SerializablePermission</code>
+ * that has the specified name and action list. Note that the action list
+ * is unused in this class.
+ *
+ * @param name The name of the permission.
+ * @param actions The action list (unused).
+ *
+ * @exception IllegalArgumentException If the name is not valid for
+ * this class.
+ */
+ public SerializablePermission(String name, String actions)
+ {
+ super(name, actions);
+
+ for (int i = 0; i < legal_names.length; i++)
+ if (legal_names[i].equals(name))
+ return;
+
+ throw new IllegalArgumentException("Bad permission name: " + name);
+ }
} // class SerializablePermission
diff --git a/libjava/java/io/StreamTokenizer.java b/libjava/java/io/StreamTokenizer.java
index 5b3533b633d..94341fa7620 100644
--- a/libjava/java/io/StreamTokenizer.java
+++ b/libjava/java/io/StreamTokenizer.java
@@ -580,7 +580,7 @@ public class StreamTokenizer
* quote, and comment) from all characters. It is equivalent to calling
* <code>ordinaryChars(0x00, 0xFF)</code>.
*
- * @see ordinaryChars
+ * @see #ordinaryChars(int, int)
*/
public void resetSyntax()
{
diff --git a/libjava/java/io/StringReader.java b/libjava/java/io/StringReader.java
index 98a7c4b78e1..8153d80d91b 100644
--- a/libjava/java/io/StringReader.java
+++ b/libjava/java/io/StringReader.java
@@ -1,5 +1,5 @@
/* StringReader.java -- permits a String to be read as a character input stream
- Copyright (C) 1998, 1999, 2000 Free Software Foundation
+ Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation
This file is part of GNU Classpath.
@@ -51,8 +51,6 @@ package java.io;
* normal. If no mark has been set, then calling the <code>reset()</code>
* method rewinds the read pointer to the beginning of the <code>String</code>.
*
- * @version 0.0
- *
* @author Aaron M. Renn (arenn@urbanophile.com)
* @author Warren Levy <warrenl@cygnus.com>
* @date October 19, 1998.
@@ -73,8 +71,8 @@ public class StringReader extends Reader
/**
* Create a new <code>StringReader</code> that will read chars from the
- * passed in <code>String</code>. This stream will read from the beginning to the
- * end of the <code>String</code>.
+ * passed in <code>String</code>. This stream will read from the beginning
+ * to the end of the <code>String</code>.
*
* @param s The <code>String</code> this stream will read from.
*/
@@ -208,3 +206,4 @@ public class StringReader extends Reader
}
}
}
+
diff --git a/libjava/java/io/Writer.java b/libjava/java/io/Writer.java
index b86e9c8b538..f3d6eaa7392 100644
--- a/libjava/java/io/Writer.java
+++ b/libjava/java/io/Writer.java
@@ -1,5 +1,5 @@
/* Writer.java -- Base class for character output streams
- Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,179 +44,146 @@ package java.io;
*/
/**
- * This abstract class forms the base of the hierarchy of classes that
- * write output as a stream of chars. It provides a common set of methods
- * for writing chars to stream. Subclasses implement and/or extend these
- * methods to write chars in a particular manner or to a particular
- * destination such as a file on disk or network connection.
- *
- * @author Aaron M. Renn (arenn@urbanophile.com)
- * @author Per Bothner <bothner@cygnus.com>
- */
-public abstract class Writer
-{
-
-/*************************************************************************/
-
-/**
- * This is the object used to synchronize criticial code sections for
- * thread safety. Subclasses should use this field instead of using
- * synchronized methods or explicity synchronizations on <code>this</code>
- */
-protected Object lock;
-
-/*************************************************************************/
-
-/*
- * Constructors
+ * This abstract class forms the base of the hierarchy of classes that
+ * write output as a stream of chars. It provides a common set of methods
+ * for writing chars to stream. Subclasses implement and/or extend these
+ * methods to write chars in a particular manner or to a particular
+ * destination such as a file on disk or network connection.
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ * @author Per Bothner <bothner@cygnus.com>
*/
-
-/**
- * This is the default no-argument constructor for this class. This method
- * will set up the class to synchronize criticial sections on itself.
- */
-protected
-Writer()
-{
- lock = this;
-}
-
-/*************************************************************************/
-
-/**
- * This method initializes a <code>Writer</code> that will synchronize
- * on the specified <code>Object</code>.
- *
- * @param obj The <code>Object</code> to use for synchronizing critical
- * sections
- */
-protected
-Writer(Object lock)
-{
- this.lock = lock;
-}
-
-/*************************************************************************/
-
-/*
- * Instance Methods
- */
-
-/**
- * This method forces any data that may have been buffered to be written
- * to the underlying output device. Please note that the host environment
- * might perform its own buffering unbeknowst to Java. In that case, a
- * write made (for example, to a disk drive) might be cached in OS
- * buffers instead of actually being written to disk.
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-flush() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method closes the stream. Any internal or native resources associated
- * with this stream are freed. Any subsequent attempt to access the stream
- * might throw an exception.
- * <p>
- * This method in this class does nothing.
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-close() throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes a single char to the output stream.
- *
- * @param b The char to be written to the output stream, passed as an int
- *
- * @exception IOException If an error occurs
- */
-public void
-write(int b) throws IOException
-{
- char[] buf = new char[1];
-
- buf[0] = (char)b;
- write(buf, 0, buf.length);
-}
-
-/*************************************************************************/
-
-/**
- * This method all the writes char from the passed array to the output stream.
- * This method is equivalent to <code>write(buf, 0, buf.length)</code> which
- * is exactly how it is implemented in this class.
- *
- * @param buf The array of char to write
- *
- * @exception IOException If an error occurs
- */
-public void
-write(char[] buf) throws IOException
-{
- write(buf, 0, buf.length);
-}
-
-/*************************************************************************/
-
-/**
- * This method writes <code>len</code> char from the specified array
- * <code>buf</code> starting at index <code>offset</code> into the array.
- * <p>
- * Subclasses must provide an implementation of this abstract method.
- *
- * @param buf The array of char to write from
- * @param offset The index into the array to start writing from
- * @param len The number of char to write
- *
- * @exception IOException If an error occurs
- */
-public abstract void
-write(char[] buf, int offset, int len) throws IOException;
-
-/*************************************************************************/
-
-/**
- * This method writes all the characters in a <code>String</code> to the
- * output.
- *
- * @param str The <code>String</code> whose chars are to be written.
- *
- * @param IOException If an error occurs
- */
-public void
-write(String str) throws IOException
-{
- write(str, 0, str.length());
-}
-
-/*************************************************************************/
-
-/**
- * This method writes <code>len</code> chars from the <code>String</code>
- * starting at position <code>offset</code>.
- *
- * @param str The <code>String</code> that is to be written
- * @param offset The character offset into the <code>String</code> to start
- * writing from
- * @param len The number of chars to write
- *
- * @exception IOException If an error occurs
- */
-public void
-write(String str, int offset, int len) throws IOException
+public abstract class Writer
{
- // FIXME - for libgcj re-write using native code to not require copied buffer.
- char[] buf = new char[len];
-
- str.getChars(offset, offset + len, buf, 0);
- write(buf, 0, len);
-}
+ /**
+ * This is the object used to synchronize criticial code sections for
+ * thread safety. Subclasses should use this field instead of using
+ * synchronized methods or explicity synchronizations on <code>this</code>
+ */
+ protected Object lock;
+
+ /**
+ * This is the default no-argument constructor for this class. This method
+ * will set up the class to synchronize criticial sections on itself.
+ */
+ protected Writer()
+ {
+ lock = this;
+ }
+
+ /**
+ * This method initializes a <code>Writer</code> that will synchronize
+ * on the specified <code>Object</code>.
+ *
+ * @param obj The <code>Object</code> to use for synchronizing critical
+ * sections
+ */
+ protected Writer(Object lock)
+ {
+ this.lock = lock;
+ }
+
+ /**
+ * This method forces any data that may have been buffered to be written
+ * to the underlying output device. Please note that the host environment
+ * might perform its own buffering unbeknowst to Java. In that case, a
+ * write made (for example, to a disk drive) might be cached in OS
+ * buffers instead of actually being written to disk.
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void flush() throws IOException;
+
+ /**
+ * This method closes the stream. Any internal or native resources
+ * associated
+ * with this stream are freed. Any subsequent attempt to access the stream
+ * might throw an exception.
+ * <p>
+ * This method in this class does nothing.
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void close() throws IOException;
+
+ /**
+ * This method writes a single char to the output stream.
+ *
+ * @param b The char to be written to the output stream, passed as an int
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(int b) throws IOException
+ {
+ char[] buf = new char[1];
+
+ buf[0] = (char)b;
+ write(buf, 0, buf.length);
+ }
+
+ /**
+ * This method all the writes char from the passed array to the output
+ * stream. This method is equivalent to
+ * <code>write(buf, 0, buf.length)</code> which
+ * is exactly how it is implemented in this class.
+ *
+ * @param buf The array of char to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(char[] buf) throws IOException
+ {
+ write(buf, 0, buf.length);
+ }
+
+ /**
+ * This method writes <code>len</code> char from the specified array
+ * <code>buf</code> starting at index <code>offset</code> into the array.
+ * <p>
+ * Subclasses must provide an implementation of this abstract method.
+ *
+ * @param buf The array of char to write from
+ * @param offset The index into the array to start writing from
+ * @param len The number of char to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public abstract void write(char[] buf, int offset, int len)
+ throws IOException;
+
+ /**
+ * This method writes all the characters in a <code>String</code> to the
+ * output.
+ *
+ * @param str The <code>String</code> whose chars are to be written.
+ *
+ * @param IOException If an error occurs
+ */
+ public void write(String str) throws IOException
+ {
+ write(str, 0, str.length());
+ }
+
+ /**
+ * This method writes <code>len</code> chars from the <code>String</code>
+ * starting at position <code>offset</code>.
+ *
+ * @param str The <code>String</code> that is to be written
+ * @param offset The character offset into the <code>String</code> to start
+ * writing from
+ * @param len The number of chars to write
+ *
+ * @exception IOException If an error occurs
+ */
+ public void write(String str, int offset, int len) throws IOException
+ {
+ // FIXME - for libgcj re-write using native code to not require
+ // copied buffer.
+ char[] buf = new char[len];
+
+ str.getChars(offset, offset + len, buf, 0);
+ write(buf, 0, len);
+ }
} // class Writer
+
diff --git a/libjava/java/io/natFileDescriptorPosix.cc b/libjava/java/io/natFileDescriptorPosix.cc
index e8ec9a7e733..ad1dcc49c32 100644
--- a/libjava/java/io/natFileDescriptorPosix.cc
+++ b/libjava/java/io/natFileDescriptorPosix.cc
@@ -371,7 +371,7 @@ java::io::FileDescriptor::available (void)
off_t where = 0;
if (fstat (fd, &sb) != -1
&& S_ISREG (sb.st_mode)
- && (where = lseek (fd, SEEK_CUR, 0)) != (off_t) -1)
+ && (where = lseek (fd, 0, SEEK_CUR)) != (off_t) -1)
{
num = (long) (sb.st_size - where);
num_set = true;
@@ -397,6 +397,6 @@ java::io::FileDescriptor::available (void)
return (jint) num;
#else
- throw new IOException (JvNewStringLatin1 ("unimplemented"));
+ return 0;
#endif
}
diff --git a/libjava/java/lang/Package.java b/libjava/java/lang/Package.java
index 57dff64546d..f09814b6764 100644
--- a/libjava/java/lang/Package.java
+++ b/libjava/java/lang/Package.java
@@ -1,5 +1,5 @@
-/* java.lang.Package - Everything you ever wanted to know about a package.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Package.java -- information about a package
+ Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -49,8 +49,8 @@ import java.util.StringTokenizer;
* section of the
* <a href="http://java.sun.com/products/jdk/1.3/docs/guide/versioning/spec/VersioningSpecification.html">Product Versioning Specification</a>.
* It also allows packages to be sealed with respect to the originating URL.
- * <p>
- * The most useful method is the <code>isCompatibleWith()</code> method that
+ *
+ * <p>The most useful method is the <code>isCompatibleWith()</code> method that
* compares a desired version of a specification with the version of the
* specification as implemented by a package. A package is considered
* compatible with another version if the version of the specification is
@@ -63,8 +63,11 @@ import java.util.StringTokenizer;
* then the other version, etc. (If a version has no minor, micro, etc numbers
* then they are considered the be 0.)
*
+ * @author Mark Wielaard <mark@klomp.org>
+ * @see ClassLoader#definePackage(String, String, String, String, String,
+ * String, String, URL)
* @since 1.2
- * @author Mark Wielaard (mark@klomp.org)
+ * @status updated to 1.4
*/
public class Package
{
@@ -73,26 +76,29 @@ public class Package
/** The name if the implementation */
final private String implTitle;
+
/** The vendor that wrote this implementation */
final private String implVendor;
+
/** The version of this implementation */
final private String implVersion;
/** The name of the specification */
final private String specTitle;
+
/** The name of the specification designer */
final private String specVendor;
+
/** The version of this specification */
final private String specVersion;
/** If sealed the origin of the package classes, otherwise null */
final private URL sealed;
- /**
- * A package local constructor for the Package class.
- * All parameters except the <code>name</code> of the package may be
- * <code>null</code>.
- * There are no public constructors defined for Package this is a package
+ /**
+ * A package local constructor for the Package class. All parameters except
+ * the <code>name</code> of the package may be <code>null</code>.
+ * There are no public constructors defined for Package; this is a package
* local constructor that is used by java.lang.Classloader.definePackage().
*
* @param name The name of the Package
@@ -112,87 +118,102 @@ public class Package
throw new IllegalArgumentException("null Package name");
this.name = name;
-
this.implTitle = implTitle;
this.implVendor = implVendor;
this.implVersion = implVersion;
-
this.specTitle = specTitle;
this.specVendor = specVendor;
this.specVersion = specVersion;
-
this.sealed = sealed;
}
- /**
- * Returns the Package name.
+ /**
+ * Returns the Package name in dot-notation.
+ *
+ * @return the non-null package name
*/
public String getName()
{
return name;
}
- /**
- * Returns the name of the implementation or null if unknown.
+ /**
+ * Returns the name of the specification, or null if unknown.
+ *
+ * @return the specification title
*/
- public String getImplementationTitle()
+ public String getSpecificationTitle()
{
- return implTitle;
+ return specTitle;
}
- /**
- * Returns the vendor that wrote this implementation or null if unknown.
+ /**
+ * Returns the version of the specification, or null if unknown.
+ *
+ * @return the specification version
*/
- public String getImplementationVendor()
+ public String getSpecificationVersion()
{
- return implVendor;
+ return specVersion;
}
- /**
- * Returns the version of this implementation or null if unknown.
+ /**
+ * Returns the name of the specification designer, or null if unknown.
+ *
+ * @return the specification vendor
*/
- public String getImplementationVersion()
+ public String getSpecificationVendor()
{
- return implVersion;
+ return specVendor;
}
- /**
- * Returns the name of the specification or null if unknown.
+ /**
+ * Returns the name of the implementation, or null if unknown.
+ *
+ * @return the implementation title
*/
- public String getSpecificationTitle()
+ public String getImplementationTitle()
{
- return specTitle;
+ return implTitle;
}
- /**
- * Returns the name of the specification designer or null if unknown.
+ /**
+ * Returns the version of this implementation, or null if unknown.
+ *
+ * @return the implementation version
*/
- public String getSpecificationVendor()
+ public String getImplementationVersion()
{
- return specVendor;
+ return implVersion;
}
- /**
- * Returns the version of the specification or null if unknown.
+ /**
+ * Returns the vendor that wrote this implementation, or null if unknown.
+ *
+ * @return the implementation vendor
*/
- public String getSpecificationVersion()
+ public String getImplementationVendor()
{
- return specVersion;
+ return implVendor;
}
- /**
+ /**
* Returns true if this Package is sealed.
+ *
+ * @return true if the package is sealed
*/
public boolean isSealed()
{
- return (sealed != null);
+ return sealed != null;
}
- /**
+ /**
* Returns true if this Package is sealed and the origin of the classes is
* the given URL.
- *
- * @param url
+ *
+ * @param url the URL to test
+ * @return true if the package is sealed by this URL
+ * @throws NullPointerException if url is null
*/
public boolean isSealed(URL url)
{
@@ -201,36 +222,36 @@ public class Package
/**
* Checks if the version of the specification is higher or at least as high
- * as the desired version.
+ * as the desired version. Comparison is done by sequentially comparing
+ * dotted decimal numbers from the parameter and from
+ * <code>getSpecificationVersion</code>.
+ *
* @param version the (minimal) desired version of the specification
- * @exception NumberFormatException when either version or the
- * specification version is not a correctly formatted version number
- * @exception NullPointerException if the supplied version or the
- * Package specification version is null.
+ * @throws NumberFormatException if either version string is invalid
+ * @throws NullPointerException if either version string is null
*/
- public boolean isCompatibleWith(String version) throws NumberFormatException
+ public boolean isCompatibleWith(String version)
{
StringTokenizer versionTokens = new StringTokenizer(version, ".");
StringTokenizer specTokens = new StringTokenizer(specVersion, ".");
try
{
- while (versionTokens.hasMoreElements())
- {
- int vers = Integer.parseInt(versionTokens.nextToken());
- int spec = Integer.parseInt(specTokens.nextToken());
- if (spec < vers)
- return false;
- else if (spec > vers)
- return true;
- // They must be equal, next Token please!
- }
+ while (versionTokens.hasMoreElements())
+ {
+ int vers = Integer.parseInt(versionTokens.nextToken());
+ int spec = Integer.parseInt(specTokens.nextToken());
+ if (spec < vers)
+ return false;
+ else if (spec > vers)
+ return true;
+ // They must be equal, next Token please!
+ }
}
catch (NoSuchElementException e)
{
- // this must have been thrown by spec.netToken() so return false
- return false;
+ // This must have been thrown by spec.nextToken() so return false.
+ return false;
}
-
// They must have been exactly the same version.
// Or the specVersion has more subversions. That is also good.
return true;
@@ -241,58 +262,56 @@ public class Package
* It may return null if the package is unknown, when there is no
* information on that particular package available or when the callers
* classloader is null.
+ *
* @param name the name of the desired package
+ * @return the package by that name in the current ClassLoader
*/
public static Package getPackage(String name)
{
// Get the caller's classloader
- SecurityManager sm = System.getSecurityManager();
- Class c = sm.getClassContext()[1];
+ Class c = VMSecurityManager.getClassContext()[1];
ClassLoader cl = c.getClassLoader();
-
- if (cl != null)
- return cl.getPackage(name);
- else
- return null;
+ return cl != null ? cl.getPackage(name) : null;
}
/**
* Returns all the packages that are known to the callers class loader.
* It may return an empty array if the classloader of the caller is null.
+ *
+ * @return an array of all known packages
*/
public static Package[] getPackages()
{
// Get the caller's classloader
- SecurityManager sm = System.getSecurityManager();
- Class c = sm.getClassContext()[1];
+ Class c = VMSecurityManager.getClassContext()[1];
ClassLoader cl = c.getClassLoader();
-
- if (cl != null)
- return cl.getPackages();
- else
- return new Package[0];
+ // Sun's implementation returns the packages loaded by the bootstrap
+ // classloader if cl is null, but right now our bootstrap classloader
+ // does not create any Packages.
+ return cl != null ? cl.getPackages() : new Package[0];
}
- /**
+ /**
* Returns the hashCode of the name of this package.
+ *
+ * @return the hash code
*/
public int hashCode()
{
return name.hashCode();
}
- /**
- * Returns a string representation of this package name, specification,
- * implementation and class origin if sealed.
+ /**
+ * Returns a string representation of this package. It is specified to
+ * be <code>"package " + getName() + (getSpecificationTitle() == null
+ * ? "" : ", " + getSpecificationTitle()) + (getSpecificationVersion()
+ * == null ? "" : ", version " + getSpecificationVersion())</code>.
+ *
+ * @return the string representation of the package
*/
public String toString()
{
- return "package: " + name +
- " spec: " + specTitle +
- " version: " + specVersion +
- " vendor: " + specVendor +
- " implementation: " + implTitle +
- " version: " + implVersion +
- " vendor: " + implVendor + " sealed: " + sealed;
+ return ("package " + name + (specTitle == null ? "" : ", " + specTitle)
+ + (specVersion == null ? "" : ", version " + specVersion));
}
-}
+} // class Package
diff --git a/libjava/java/lang/Process.java b/libjava/java/lang/Process.java
index e5df4173292..1d1861d2491 100644
--- a/libjava/java/lang/Process.java
+++ b/libjava/java/lang/Process.java
@@ -1,5 +1,5 @@
/* Process.java - Represent spawned system process
- Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -107,7 +107,7 @@ public abstract class Process
* immediately returns with the exit value of the subprocess.
*
* @return the subprocess exit value; 0 conventionally denotes success
- * @throws InterruptedException if another thread interrups the blocked one
+ * @throws InterruptedException if another thread interrupts the blocked one
*/
public abstract int waitFor() throws InterruptedException;
diff --git a/libjava/java/lang/String.java b/libjava/java/lang/String.java
index 2c814e1f797..fe00b9100cc 100644
--- a/libjava/java/lang/String.java
+++ b/libjava/java/lang/String.java
@@ -1,53 +1,139 @@
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
+/* String.java -- immutable character sequences; the object of string literals
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
+ 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
- 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. */
package java.lang;
+
import java.io.UnsupportedEncodingException;
import java.io.Serializable;
import java.lang.Comparable;
import java.util.Comparator;
import java.util.Locale;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
/**
+ * Strings represent an immutable set of characters. All String literals
+ * are instances of this class, and two string literals with the same contents
+ * refer to the same String object.
+ *
+ * <p>This class also includes a number of methods for manipulating the
+ * contents of strings (of course, creating a new object if there are any
+ * changes, as String is immutable). Case mapping relies on Unicode 3.0.0
+ * standards, where some character sequences have a different number of
+ * characters in the uppercase version than the lower case.
+ *
+ * <p>Strings are special, in that they are the only object with an overloaded
+ * operator. When you use '+' with at least one String argument, both
+ * arguments have String conversion performed on them, and another String (not
+ * guaranteed to be unique) results.
+ *
+ * <p>String is special-cased when doing data serialization - rather than
+ * listing the fields of this class, a String object is converted to a string
+ * literal in the object stream.
+ *
+ * @author Paul N. Fisher
+ * @author Eric Blake <ebb9@email.byu.edu>
* @author Per Bothner <bothner@cygnus.com>
- * @date September 4, 1998.
- */
-/* Written using "Java Class Libraries", 2nd edition, plus online
- * API docs for JDK 1.2 beta from http://www.javasoft.com.
- * Status: Complete to 1.3.
+ * @since 1.0
+ * @status updated to 1.4
*/
-
public final class String implements Serializable, Comparable, CharSequence
{
- private Object data;
- private int boffset; // Note this is a byte offset - don't use in Java code!
- private int count;
+ // WARNING: String is a CORE class in the bootstrap cycle. See the comments
+ // in vm/reference/java/lang/Runtime for implications of this fact.
- // This is probably not necessary because this class is special cased already
- // but it will avoid showing up as a discrepancy when comparing SUIDs.
+ /**
+ * This is probably not necessary because this class is special cased already
+ * but it will avoid showing up as a discrepancy when comparing SUIDs.
+ */
private static final long serialVersionUID = -6849794470754667710L;
/**
+ * This is the object that holds the characters that make up the
+ * String. It might be a char[], or it could be String. It could
+ * even be `this'. The actual characters can't be located using
+ * pure Java code.
+ * @see #boffset
+ */
+ private Object data;
+
+ /**
+ * This is a <emph>byte</emph> offset of the actual characters from
+ * the start of the character-holding object. Don't use this field
+ * in Java code.
+ */
+ private int boffset;
+
+ /**
+ * Holds the number of characters in value. Package visible for use
+ * by trusted code.
+ */
+ int count;
+
+ /**
+ * Caches the result of hashCode(). If this value is zero, the hashcode
+ * is considered uncached (even if 0 is the correct hash value).
+ */
+ private int cachedHashCode;
+
+ /**
* An implementation for {@link CASE_INSENSITIVE_ORDER}.
- * This must be {@link Serializable}.
+ * This must be {@link Serializable}. The class name is dictated by
+ * compatibility with Sun's JDK.
*/
private static final class CaseInsensitiveComparator
implements Comparator, Serializable
{
/**
- * The default private constructor generates unnecessary overhead
+ * Compatible with JDK 1.2.
+ */
+ private static final long serialVersionUID = 8575799808933029326L;
+
+ /**
+ * The default private constructor generates unnecessary overhead.
*/
CaseInsensitiveComparator() {}
/**
- * Compares two Strings, using
+ * Compares to Strings, using
* <code>String.compareToIgnoreCase(String)</code>.
- *
+ *
* @param o1 the first string
* @param o2 the second string
* @return &lt; 0, 0, or &gt; 0 depending on the case-insensitive
@@ -60,74 +146,202 @@ public final class String implements Serializable, Comparable, CharSequence
{
return ((String) o1).compareToIgnoreCase((String) o2);
}
- }
+ } // class CaseInsensitiveComparator
/**
* A Comparator that uses <code>String.compareToIgnoreCase(String)</code>.
- * This comparator is {@link Serializable}.
+ * This comparator is {@link Serializable}. Note that it ignores Locale,
+ * for that, you want a Collator.
*
+ * @see Collator#compare(String, String)
* @since 1.2
*/
public static final Comparator CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator();
- public String ()
+ /**
+ * Creates an empty String (length 0). Unless you really need a new object,
+ * consider using <code>""</code> instead.
+ */
+ public String()
{
- init();
+ data = "".data;
+ boffset = 0;
+ count = 0;
}
- public String (String value)
+ /**
+ * Copies the contents of a String to a new String. Since Strings are
+ * immutable, only a shallow copy is performed.
+ *
+ * @param str String to copy
+ * @throws NullPointerException if value is null
+ */
+ public String(String str)
{
- data = value.data;
- boffset = value.boffset;
- count = value.count;
+ data = str.data;
+ boffset = str.boffset;
+ count = str.count;
+ cachedHashCode = str.cachedHashCode;
}
- public String (StringBuffer buffer)
+ /**
+ * Creates a new String using the character sequence of the char array.
+ * Subsequent changes to data do not affect the String.
+ *
+ * @param data char array to copy
+ * @throws NullPointerException if data is null
+ */
+ public String(char[] data)
{
- synchronized (buffer)
- {
- buffer.shared = true;
- init (buffer.value, 0, buffer.count, true);
- }
+ init(data, 0, data.length, false);
}
- // This is used by gnu.gcj.runtime.StringBuffer, so it must have
- // package-private protection. It is accessed via CNI and so avoids
- // ordinary protection mechanisms.
- String (gnu.gcj.runtime.StringBuffer buffer)
+ /**
+ * Creates a new String using the character sequence of a subarray of
+ * characters. The string starts at offset, and copies count chars.
+ * Subsequent changes to data do not affect the String.
+ *
+ * @param data char array to copy
+ * @param offset position (base 0) to start copying out of data
+ * @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 > data.length)
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ */
+ public String(char[] data, int offset, int count)
{
- // No need to synchronize or mark the buffer, since we know it is
- // only used once.
- init (buffer.value, 0, buffer.count, true);
+ init(data, offset, count, false);
}
- public String (char[] data)
+ /**
+ * Creates a new String using an 8-bit array of integer values, starting at
+ * an offset, and copying up to the count. Each character c, using
+ * corresponding byte b, is created in the new String as if by performing:
+ *
+ * <pre>
+ * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
+ * </pre>
+ *
+ * @param ascii array of integer values
+ * @param hibyte top byte of each Unicode character
+ * @param offset position (base 0) to start copying out of ascii
+ * @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 > ascii.length)
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ * @see #String(byte[])
+ * @see #String(byte[], String)
+ * @see #String(byte[], int, int)
+ * @see #String(byte[], int, int, String)
+ * @deprecated use {@link #String(byte[], int, int, String)} to perform
+ * correct encoding
+ */
+ public String(byte[] ascii, int hibyte, int offset, int count)
{
- init(data, 0, data.length, false);
+ init(ascii, hibyte, offset, count);
}
- public String (char[] data, int offset, int count)
+ /**
+ * Creates a new String using an 8-bit array of integer values. Each
+ * character c, using corresponding byte b, is created in the new String
+ * as if by performing:
+ *
+ * <pre>
+ * c = (char) (((hibyte & 0xff) << 8) | (b & 0xff))
+ * </pre>
+ *
+ * @param ascii array of integer values
+ * @param hibyte top byte of each Unicode character
+ * @throws NullPointerException if ascii is null
+ * @see #String(byte[])
+ * @see #String(byte[], String)
+ * @see #String(byte[], int, int)
+ * @see #String(byte[], int, int, String)
+ * @see #String(byte[], int, int, int)
+ * @deprecated use {@link #String(byte[], String)} to perform
+ * correct encoding
+ */
+ public String(byte[] ascii, int hibyte)
{
- init(data, offset, count, false);
+ init(ascii, hibyte, 0, ascii.length);
}
- // This is used by Integer.toString(int,int).
- String (char[] data, int offset, int count, boolean dont_copy)
+ /**
+ * Creates a new String using the portion of the byte array starting at the
+ * offset and ending at offset + count. Uses the specified encoding type
+ * to decode the byte array, so the resulting string may be longer or
+ * shorter than the byte array. For more decoding control, use
+ * {@link java.nio.charset.CharsetDecoder}, and for valid character sets,
+ * see {@link java.nio.charset.Charset}. The behavior is not specified if
+ * the decoder encounters invalid characters; this implementation throws
+ * an Error.
+ *
+ * @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 encoding the name of the encoding to use
+ * @throws NullPointerException if data or encoding is null
+ * @throws IndexOutOfBoundsException if offset or count is incorrect
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ * @throws UnsupportedEncodingException if encoding is not found
+ * @throws Error if the decoding fails
+ * @since 1.1
+ */
+ public String(byte[] data, int offset, int count, String encoding)
+ throws UnsupportedEncodingException
{
- init(data, offset, count, dont_copy);
+ init (data, offset, count, encoding);
}
- public String (byte[] byteArray)
+ /**
+ * Creates a new String using the byte array. Uses the specified encoding
+ * type to decode the byte array, so the resulting string may be longer or
+ * shorter than the byte array. For more decoding control, use
+ * {@link java.nio.charset.CharsetDecoder}, and for valid character sets,
+ * see {@link java.nio.charset.Charset}. The behavior is not specified if
+ * the decoder encounters invalid characters; this implementation throws
+ * an Error.
+ *
+ * @param data byte array to copy
+ * @param encoding the name of the encoding to use
+ * @throws NullPointerException if data or encoding is null
+ * @throws UnsupportedEncodingException if encoding is not found
+ * @throws Error if the decoding fails
+ * @see #String(byte[], int, int, String)
+ * @since 1.1
+ */
+ public String(byte[] data, String encoding)
+ throws UnsupportedEncodingException
{
- this (byteArray, 0, byteArray.length);
+ this(data, 0, data.length, encoding);
}
- public String (byte[] byteArray, int offset, int count)
+ /**
+ * Creates a new String using the portion of the byte array starting at the
+ * offset and ending at offset + count. Uses the encoding of the platform's
+ * default charset, so the resulting string may be longer or shorter than
+ * the byte array. For more decoding control, use
+ * {@link java.nio.charset.CharsetDecoder}. The behavior is not specified
+ * if the decoder encounters invalid characters; this implementation throws
+ * an Error.
+ *
+ * @param data byte array to copy
+ * @param offset the offset to start at
+ * @param count the number of characters 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
+ * @see #String(byte[], int, int, String)
+ * @since 1.1
+ */
+ public String(byte[] data, int offset, int count)
{
try
{
- init (byteArray, offset, count,
+ init (data, offset, count,
System.getProperty("file.encoding", "8859_1"));
}
catch (UnsupportedEncodingException x1)
@@ -135,7 +349,7 @@ public final class String implements Serializable, Comparable, CharSequence
// Maybe the default encoding is bad.
try
{
- init (byteArray, offset, count, "8859_1");
+ init (data, offset, count, "8859_1");
}
catch (UnsupportedEncodingException x2)
{
@@ -144,62 +358,157 @@ public final class String implements Serializable, Comparable, CharSequence
}
}
- public String (byte[] byteArray, String enc)
- throws UnsupportedEncodingException
- {
- this (byteArray, 0, byteArray.length, enc);
- }
-
- public String (byte[] byteArray, int offset, int count, String enc)
- throws UnsupportedEncodingException
- {
- init (byteArray, offset, count, enc);
- }
-
- public static String copyValueOf(char[] data)
+ /**
+ * Creates a new String using the byte array. Uses the encoding of the
+ * platform's default charset, so the resulting string may be longer or
+ * shorter than the byte array. For more decoding control, use
+ * {@link java.nio.charset.CharsetDecoder}. The behavior is not specified
+ * if the decoder encounters invalid characters; this implementation throws
+ * an Error.
+ *
+ * @param data byte array to copy
+ * @throws NullPointerException if data is null
+ * @throws Error if the decoding fails
+ * @see #String(byte[], int, int)
+ * @see #String(byte[], int, int, String)
+ * @since 1.1
+ */
+ public String(byte[] data)
{
- return copyValueOf (data, 0, data.length);
+ this(data, 0, data.length);
}
- public static String copyValueOf(char[] data, int offset, int count)
+ /**
+ * Creates a new String using the character sequence represented by
+ * the StringBuffer. Subsequent changes to buf do not affect the String.
+ *
+ * @param buffer StringBuffer to copy
+ * @throws NullPointerException if buffer is null
+ */
+ public String(StringBuffer buffer)
{
- String r = new String ();
- r.init(data, offset, count, false);
- return r;
+ synchronized (buffer)
+ {
+ // Share unless buffer is 3/4 empty.
+ boolean should_copy = ((buffer.count << 2) < buffer.value.length);
+ if (! should_copy)
+ buffer.shared = true;
+ init (buffer.value, 0, buffer.count, ! should_copy);
+ }
}
- /** @deprecated */
- public String (byte[] ascii, int hibyte)
+ /**
+ * Special constructor which can share an array when safe to do so.
+ *
+ * @param data the characters to copy
+ * @param offset the location to start from
+ * @param count the number of characters to use
+ * @param dont_copy true if the array is trusted, and need not be copied
+ * @throws NullPointerException if chars is null
+ * @throws StringIndexOutOfBoundsException if bounds check fails
+ */
+ String(char[] data, int offset, int count, boolean dont_copy)
{
- init(ascii, hibyte, 0, ascii.length);
+ init(data, offset, count, dont_copy);
}
- /** @deprecated */
- public String (byte[] ascii, int hibyte, int offset, int count)
+ // This is used by gnu.gcj.runtime.StringBuffer, so it must have
+ // package-private protection. It is accessed via CNI and so avoids
+ // ordinary protection mechanisms.
+ String(gnu.gcj.runtime.StringBuffer buffer)
{
- init(ascii, hibyte, offset, count);
+ // No need to synchronize or mark the buffer, since we know it is
+ // only used once.
+ init (buffer.value, 0, buffer.count, true);
}
- public String toString ()
+ /**
+ * Returns the number of characters contained in this String.
+ *
+ * @return the length of this String
+ */
+ public int length()
{
- return this;
+ return count;
}
- public native boolean equals (Object anObject);
-
- public native int hashCode ();
+ /**
+ * Returns the character located at the specified index within this String.
+ *
+ * @param index position of character to return (base 0)
+ * @return character located at position index
+ * @throws IndexOutOfBoundsException if index &lt; 0 || index &gt;= length()
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ */
+ public native char charAt(int index);
- public int length ()
- {
- return count;
- }
+ /**
+ * Copies characters from this String starting at a specified start index,
+ * ending at a specified stop index, to a character array starting at
+ * a specified destination begin index.
+ *
+ * @param srcBegin index to begin copying characters from this String
+ * @param srcEnd index after the last character to be copied from this String
+ * @param dst character array which this String is copied into
+ * @param dstBegin index to start writing characters into dst
+ * @throws NullPointerException if dst is null
+ * @throws IndexOutOfBoundsException if any indices are out of bounds
+ * (while unspecified, source problems cause a
+ * StringIndexOutOfBoundsException, and dst problems cause an
+ * ArrayIndexOutOfBoundsException)
+ */
+ public native void getChars(int srcBegin, int srcEnd,
+ char[] dst, int dstBegin);
- public native char charAt (int index);
+ /**
+ * Copies the low byte of each character from this String starting at a
+ * specified start index, ending at a specified stop index, to a byte array
+ * starting at a specified destination begin index.
+ *
+ * @param srcBegin index to being copying characters from this String
+ * @param srcEnd index after the last character to be copied from this String
+ * @param dst byte array which each low byte of this String is copied into
+ * @param dstBegin index to start writing characters into dst
+ * @throws NullPointerException if dst is null and copy length is non-zero
+ * @throws IndexOutOfBoundsException if any indices are out of bounds
+ * (while unspecified, source problems cause a
+ * StringIndexOutOfBoundsException, and dst problems cause an
+ * ArrayIndexOutOfBoundsException)
+ * @see #getBytes()
+ * @see #getBytes(String)
+ * @deprecated use {@link #getBytes()}, which uses a char to byte encoder
+ */
+ public native void getBytes(int srcBegin, int srcEnd,
+ byte[] dst, int dstBegin);
- public native void getChars (int srcBegin, int srcEnd,
- char[] dst, int dstBegin);
+ /**
+ * Converts the Unicode characters in this String to a byte array. Uses the
+ * specified encoding method, so the result may be longer or shorter than
+ * the String. For more encoding control, use
+ * {@link java.nio.charset.CharsetEncoder}, and for valid character sets,
+ * see {@link java.nio.charset.Charset}. The behavior is not specified if
+ * the encoder encounters a problem; this implementation returns null.
+ *
+ * @param enc encoding name
+ * @return the resulting byte array, or null on a problem
+ * @throws NullPointerException if enc is null
+ * @throws UnsupportedEncodingException if encoding is not supported
+ * @since 1.1
+ */
+ public native byte[] getBytes(String enc)
+ throws UnsupportedEncodingException;
- public byte[] getBytes ()
+ /**
+ * Converts the Unicode characters in this String to a byte array. Uses the
+ * encoding of the platform's default charset, so the result may be longer
+ * or shorter than the String. For more encoding control, use
+ * {@link java.nio.charset.CharsetEncoder}. The behavior is not specified if
+ * the encoder encounters a problem; this implementation returns null.
+ *
+ * @return the resulting byte array, or null on a problem
+ * @since 1.1
+ */
+ public byte[] getBytes()
{
try
{
@@ -222,85 +531,281 @@ public final class String implements Serializable, Comparable, CharSequence
}
}
- public native byte[] getBytes (String enc)
- throws UnsupportedEncodingException;
-
- /** @deprecated */
- public native void getBytes (int srcBegin, int srcEnd,
- byte[] dst, int dstBegin);
+ /**
+ * Predicate which compares anObject to this. This is true only for Strings
+ * with the same character sequence.
+ *
+ * @param anObject the object to compare
+ * @return true if anObject is semantically equal to this
+ * @see #compareTo(String)
+ * @see #equalsIgnoreCase(String)
+ */
+ public native boolean equals(Object anObject);
- public native char[] toCharArray ();
+ /**
+ * Compares the given StringBuffer to this String. This is true if the
+ * StringBuffer has the same content as this String at this moment.
+ *
+ * @param buffer the StringBuffer to compare to
+ * @return true if StringBuffer has the same character sequence
+ * @throws NullPointerException if the given StringBuffer is null
+ * @since 1.4
+ */
+ public native boolean contentEquals(StringBuffer buffer);
- public native boolean equalsIgnoreCase (String anotherString);
+ /**
+ * Compares a String to this String, ignoring case. This does not handle
+ * multi-character capitalization exceptions; instead the comparison is
+ * made on a character-by-character basis, and is true if:<br><ul>
+ * <li><code>c1 == c2</code></li>
+ * <li><code>Character.toUpperCase(c1)
+ * == Character.toUpperCase(c2)</code></li>
+ * <li><code>Character.toLowerCase(c1)
+ * == Character.toLowerCase(c2)</code></li>
+ * </ul>
+ *
+ * @param anotherString String to compare to this String
+ * @return true if anotherString is equal, ignoring case
+ * @see #equals(Object)
+ * @see Character#toUpperCase(char)
+ * @see Character#toLowerCase(char)
+ */
+ public native boolean equalsIgnoreCase(String anotherString);
- public native int compareTo (String anotherString);
+ /**
+ * Compares this String and another String (case sensitive,
+ * lexicographically). The result is less than 0 if this string sorts
+ * before the other, 0 if they are equal, and greater than 0 otherwise.
+ * After any common starting sequence is skipped, the result is
+ * <code>this.charAt(k) - anotherString.charAt(k)</code> if both strings
+ * have characters remaining, or
+ * <code>this.length() - anotherString.length()</code> if one string is
+ * a subsequence of the other.
+ *
+ * @param anotherString the String to compare against
+ * @return the comparison
+ * @throws NullPointerException if anotherString is null
+ */
+ public native int compareTo(String anotherString);
- public int compareTo (Object obj)
+ /**
+ * 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
+ */
+ public int compareTo(Object o)
{
- return compareTo ((String)obj);
+ return compareTo((String) o);
}
-
- public int compareToIgnoreCase (String str)
+
+ /**
+ * Compares this String and another String (case insensitive). This
+ * comparison is <em>similar</em> to equalsIgnoreCase, in that it ignores
+ * locale and multi-characater capitalization, and compares characters
+ * after performing
+ * <code>Character.toLowerCase(Character.toUpperCase(c))</code> on each
+ * character of the string. This is unsatisfactory for locale-based
+ * comparison, in which case you should use {@link java.text.Collator}.
+ *
+ * @param s the string to compare against
+ * @return the comparison
+ * @see Collator#compare(String, String)
+ * @since 1.2
+ */
+ public int compareToIgnoreCase(String str)
{
return this.toUpperCase().toLowerCase().compareTo(
str.toUpperCase().toLowerCase());
}
- public native boolean regionMatches (int toffset,
- String other, int ooffset, int len);
+ /**
+ * Predicate which determines if this String matches another String
+ * starting at a specified offset for each String and continuing
+ * for a specified length. Indices out of bounds are harmless, and give
+ * a false result.
+ *
+ * @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 len number of characters to compare
+ * @return true if regions match (case sensitive)
+ * @throws NullPointerException if other is null
+ */
+ public native boolean regionMatches(int toffset,
+ String other, int ooffset, int len);
- public native boolean regionMatches (boolean ignoreCase, int toffset,
- String other, int ooffset, int len);
+ /**
+ * Predicate which determines if this String matches another String
+ * starting at a specified offset for each String and continuing
+ * for a specified length, optionally ignoring case. Indices out of bounds
+ * are harmless, and give a false result. Case comparisons are based on
+ * <code>Character.toLowerCase()</code> and
+ * <code>Character.toUpperCase()</code>, not on multi-character
+ * capitalization expansions.
+ *
+ * @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 len number of characters to compare
+ * @return true if regions match, false otherwise
+ * @throws NullPointerException if other is null
+ */
+ public native boolean regionMatches(boolean ignoreCase, int toffset,
+ String other, int ooffset, int len);
- public boolean startsWith (String prefix)
+ /**
+ * Predicate which determines if this String contains the given prefix,
+ * beginning comparison at toffset. The result is false if toffset is
+ * negative or greater than this.length(), otherwise it is the same as
+ * <code>this.subString(toffset).startsWith(prefix)</code>.
+ *
+ * @param prefix String to compare
+ * @param toffset offset for this String where comparison starts
+ * @return true if this String starts with prefix
+ * @throws NullPointerException if prefix is null
+ * @see #regionMatches(boolean, int, String, int, int)
+ */
+ public native boolean startsWith(String prefix, int toffset);
+
+ /**
+ * Predicate which determines if this String starts with a given prefix.
+ * If the prefix is an empty String, true is returned.
+ *
+ * @param prefex String to compare
+ * @return true if this String starts with the prefix
+ * @throws NullPointerException if prefix is null
+ * @see #startsWith(String, int)
+ */
+ public boolean startsWith(String prefix)
{
return startsWith (prefix, 0);
}
- public native boolean startsWith (String prefix, int toffset);
-
- public boolean endsWith (String suffix)
+ /**
+ * Predicate which determines if this String ends with a given suffix.
+ * If the suffix is an empty String, true is returned.
+ *
+ * @param suffix String to compare
+ * @return true if this String ends with the suffix
+ * @throws NullPointerException if suffix is null
+ * @see #regionMatches(boolean, int, String, int, int)
+ */
+ public boolean endsWith(String suffix)
{
return regionMatches (this.count - suffix.count, suffix, 0, suffix.count);
}
- // No such method specified in the doc, including JDK 1.2.
- // public boolean endsWith (String suffix, int toffset)
- // {
- // return regionMatches (toffset, suffix, 0, suffix.count);
- // }
-
- // The Language Specification, and the JDK 1.2 API docs say that
- // index and lastIndex take an int, while the Class Libraries
- // say they take a char. The former wins ...
+ /**
+ * Computes the hashcode for this String. This is done with int arithmetic,
+ * where ** represents exponentiation, by this formula:<br>
+ * <code>s[0]*31**(n-1) + s[1]*31**(n-2) + ... + s[n-1]</code>.
+ *
+ * @return hashcode value of this String
+ */
+ public native int hashCode();
- public int indexOf (int ch)
+ /**
+ * Finds the first instance of a character in this String.
+ *
+ * @param ch character to find
+ * @return location (base 0) of the character, or -1 if not found
+ */
+ public int indexOf(int ch)
{
- return indexOf (ch, 0);
+ return indexOf(ch, 0);
}
- public native int indexOf (int ch, int fromIndex);
+ /**
+ * Finds the first instance of a character in this String, starting at
+ * a given index. If starting index is less than 0, the search
+ * starts at the beginning of this String. If the starting index
+ * is greater than the length of this String, -1 is returned.
+ *
+ * @param ch character to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the character, or -1 if not found
+ */
+ public native int indexOf(int ch, int fromIndex);
- public int indexOf (String str)
+ /**
+ * Finds the last instance of a character in this String.
+ *
+ * @param ch character to find
+ * @return location (base 0) of the character, or -1 if not found
+ */
+ public int lastIndexOf(int ch)
{
- return indexOf (str, 0);
+ return lastIndexOf(ch, count - 1);
}
- public native int indexOf (String str, int fromIndex);
+ /**
+ * Finds the last instance of a character in this String, starting at
+ * a given index. If starting index is greater than the maximum valid
+ * index, then the search begins at the end of this String. If the
+ * starting index is less than zero, -1 is returned.
+ *
+ * @param ch character to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the character, or -1 if not found
+ */
+ public native int lastIndexOf(int ch, int fromIndex);
- public int lastIndexOf (int ch)
+ /**
+ * Finds the first instance of a String in this String.
+ *
+ * @param str String to find
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ */
+ public int indexOf(String str)
{
- return lastIndexOf (ch, count - 1);
+ return indexOf(str, 0);
}
- public native int lastIndexOf (int ch, int fromIndex);
+ /**
+ * Finds the first instance of a String in this String, starting at
+ * a given index. If starting index is less than 0, the search
+ * starts at the beginning of this String. If the starting index
+ * is greater than the length of this String, -1 is returned.
+ *
+ * @param str String to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ */
+ public native int indexOf(String str, int fromIndex);
- public int lastIndexOf (String str)
+ /**
+ * Finds the last instance of a String in this String.
+ *
+ * @param str String to find
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ */
+ public int lastIndexOf(String str)
{
- return lastIndexOf (str, count - str.count);
+ return lastIndexOf(str, count - str.count);
}
- public int lastIndexOf (String str, int fromIndex)
+ /**
+ * Finds the last instance of a String in this String, starting at
+ * a given index. If starting index is greater than the maximum valid
+ * index, then the search begins at the end of this String. If the
+ * starting index is less than zero, -1 is returned.
+ *
+ * @param str String to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ */
+ public int lastIndexOf(String str, int fromIndex)
{
if (fromIndex >= count)
fromIndex = count - str.count;
@@ -315,41 +820,209 @@ public final class String implements Serializable, Comparable, CharSequence
/**
* Creates a substring of this String, starting at a specified index
+ * and ending at the end of this String.
+ *
+ * @param begin index to start substring (base 0)
+ * @return new String which is a substring of this String
+ * @throws IndexOutOfBoundsException if begin &lt; 0 || begin &gt; length()
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ */
+ public String substring(int begin)
+ {
+ return substring(begin, count);
+ }
+
+ /**
+ * Creates a substring of this String, starting at a specified index
* and ending at one character before a specified index.
- * <p>
- * To implement <code>CharSequence</code>.
- * Calls <code>substring(beginIndex, endIndex)</code>.
- *
- * @param beginIndex index to start substring (base 0)
- * @param endIndex index after the last character to be
- * copied into the substring
- *
+ *
+ * @param begin index to start substring (inclusive, base 0)
+ * @param end index to end at (exclusive)
* @return new String which is a substring of this String
+ * @throws IndexOutOfBoundsException if begin &lt; 0 || end &gt; length()
+ * || begin > end (while unspecified, this is a
+ * StringIndexOutOfBoundsException)
+ */
+ public native String substring(int beginIndex, int endIndex);
+
+ /**
+ * Creates a substring of this String, starting at a specified index
+ * and ending at one character before a specified index. This behaves like
+ * <code>substring(beginIndex, endIndex)</code>.
*
- * @exception StringIndexOutOfBoundsException
- * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+ * @param beginIndex index to start substring (inclusive, base 0)
+ * @param endIndex index to end at (exclusive)
+ * @return new String which is a substring of this String
+ * @throws IndexOutOfBoundsException if begin &lt; 0 || end &gt; length()
+ * || begin > end
+ * @since 1.4
*/
public CharSequence subSequence(int beginIndex, int endIndex)
- throws IndexOutOfBoundsException
{
return substring(beginIndex, endIndex);
}
- public String substring (int beginIndex)
+ /**
+ * Concatenates a String to this String. This results in a new string unless
+ * one of the two originals is "".
+ *
+ * @param str String to append to this String
+ * @return newly concatenated String
+ * @throws NullPointerException if str is null
+ */
+ public native String concat(String str);
+
+ /**
+ * Replaces every instance of a character in this String with a new
+ * character. If no replacements occur, this is returned.
+ *
+ * @param oldChar the old character to replace
+ * @param newChar the new character
+ * @return new String with all instances of oldChar replaced with newChar
+ */
+ public native String replace(char oldChar, char newChar);
+
+ /**
+ * Test if this String matches a regular expression. This is shorthand for
+ * <code>{@link Pattern}.matches(regex, this)</code>.
+ *
+ * @param regex the pattern to match
+ * @return true if the pattern matches
+ * @throws NullPointerException if regex is null
+ * @throws PatternSyntaxException if regex is invalid
+ * @see Pattern#matches(String, CharSequence)
+ * @since 1.4
+ */
+ public boolean matches(String regex)
{
- return substring (beginIndex, count);
+ return Pattern.matches(regex, this);
}
- public native String substring (int beginIndex, int endIndex);
+ /**
+ * Replaces the first substring match of the regular expression with a
+ * given replacement. This is shorthand for <code>{@link Pattern}
+ * .compile(regex).matcher(this).replaceFirst(replacement)</code>.
+ *
+ * @param regex the pattern to match
+ * @param replacement the replacement string
+ * @return the modified string
+ * @throws NullPointerException if regex or replacement is null
+ * @throws PatternSyntaxException if regex is invalid
+ * @see #replaceAll(String, String)
+ * @see Pattern#compile(String)
+ * @see Pattern#matcher(CharSequence)
+ * @see Matcher#replaceFirst(String)
+ * @since 1.4
+ */
+ public String replaceFirst(String regex, String replacement)
+ {
+ return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
+ }
- public native String concat (String str);
+ /**
+ * Replaces all matching substrings of the regular expression with a
+ * given replacement. This is shorthand for <code>{@link Pattern}
+ * .compile(regex).matcher(this).replaceAll(replacement)</code>.
+ *
+ * @param regex the pattern to match
+ * @param replacement the replacement string
+ * @return the modified string
+ * @throws NullPointerException if regex or replacement is null
+ * @throws PatternSyntaxException if regex is invalid
+ * @see #replaceFirst(String, String)
+ * @see Pattern#compile(String)
+ * @see Pattern#matcher(CharSequence)
+ * @see Matcher#replaceAll(String)
+ * @since 1.4
+ */
+ public String replaceAll(String regex, String replacement)
+ {
+ return Pattern.compile(regex).matcher(this).replaceAll(replacement);
+ }
- public native String replace (char oldChar, char newChar);
+ /**
+ * Split this string around the matches of a regular expression. Each
+ * element of the returned array is the largest block of characters not
+ * terminated by the regular expression, in the order the matches are found.
+ *
+ * <p>The limit affects the length of the array. If it is positive, the
+ * array will contain at most n elements (n - 1 pattern matches). If
+ * negative, the array length is unlimited, but there can be trailing empty
+ * entries. if 0, the array length is unlimited, and trailing empty entries
+ * are discarded.
+ *
+ * <p>For example, splitting "boo:and:foo" yields:<br>
+ * <table border=0>
+ * <th><td>Regex</td> <td>Limit</td> <td>Result</td></th>
+ * <tr><td>":"</td> <td>2</td> <td>{ "boo", "and:foo" }</td></tr>
+ * <tr><td>":"</td> <td>t</td> <td>{ "boo", "and", "foo" }</td></tr>
+ * <tr><td>":"</td> <td>-2</td> <td>{ "boo", "and", "foo" }</td></tr>
+ * <tr><td>"o"</td> <td>5</td> <td>{ "b", "", ":and:f", "", "" }</td></tr>
+ * <tr><td>"o"</td> <td>-2</td> <td>{ "b", "", ":and:f", "", "" }</td></tr>
+ * <tr><td>"o"</td> <td>0</td> <td>{ "b", "", ":and:f" }</td></tr>
+ * </table>
+ *
+ * <p>This is shorthand for
+ * <code>{@link Pattern}.compile(regex).split(this, limit)</code>.
+ *
+ * @param regex the pattern to match
+ * @param limit the limit threshold
+ * @return the array of split strings
+ * @throws NullPointerException if regex or replacement is null
+ * @throws PatternSyntaxException if regex is invalid
+ * @see Pattern#compile(String)
+ * @see Pattern#split(CharSequence, int)
+ * @since 1.4
+ */
+ public String[] split(String regex, int limit)
+ {
+ return Pattern.compile(regex).split(this, limit);
+ }
- public native String toLowerCase (Locale locale);
- public native String toUpperCase (Locale locale);
+ /**
+ * Split this string around the matches of a regular expression. Each
+ * element of the returned array is the largest block of characters not
+ * terminated by the regular expression, in the order the matches are found.
+ * The array length is unlimited, and trailing empty entries are discarded,
+ * as though calling <code>split(regex, 0)</code>.
+ *
+ * @param regex the pattern to match
+ * @return the array of split strings
+ * @throws NullPointerException if regex or replacement is null
+ * @throws PatternSyntaxException if regex is invalid
+ * @see #split(String, int)
+ * @see Pattern#compile(String)
+ * @see Pattern#split(CharSequence, int)
+ * @since 1.4
+ */
+ public String[] split(String regex)
+ {
+ return Pattern.compile(regex).split(this, 0);
+ }
+
+ /**
+ * Lowercases this String according to a particular locale. This uses
+ * Unicode's special case mappings, as applied to the given Locale, so the
+ * resulting string may be a different length.
+ *
+ * @param loc locale to use
+ * @return new lowercased String, or this if no characters were lowercased
+ * @throws NullPointerException if loc is null
+ * @see #toUpperCase(Locale)
+ * @since 1.1
+ */
+ public native String toLowerCase(Locale locale);
- public String toLowerCase ()
+ /**
+ * Lowercases this String. This uses Unicode's special case mappings, as
+ * applied to the platform's default Locale, so the resulting string may
+ * be a different length.
+ *
+ * @return new lowercased String, or this if no characters were lowercased
+ * @see #toLowerCase(Locale)
+ * @see #toUpperCase()
+ */
+ public String toLowerCase()
{
// The JDK is a bit confused about what to do here. If we pass in
// the default Locale then special Locale handling might be
@@ -358,7 +1031,29 @@ public final class String implements Serializable, Comparable, CharSequence
return toLowerCase (null);
}
- public String toUpperCase ()
+ /**
+ * Uppercases this String according to a particular locale. This uses
+ * Unicode's special case mappings, as applied to the given Locale, so the
+ * resulting string may be a different length.
+ *
+ * @param loc locale to use
+ * @return new uppercased String, or this if no characters were uppercased
+ * @throws NullPointerException if loc is null
+ * @see #toLowerCase(Locale)
+ * @since 1.1
+ */
+ public native String toUpperCase(Locale locale);
+
+ /**
+ * Uppercases this String. This uses Unicode's special case mappings, as
+ * applied to the platform's default Locale, so the resulting string may
+ * be a different length.
+ *
+ * @return new uppercased String, or this if no characters were uppercased
+ * @see #toUpperCase(Locale)
+ * @see #toLowerCase()
+ */
+ public String toUpperCase()
{
// The JDK is a bit confused about what to do here. If we pass in
// the default Locale then special Locale handling might be
@@ -367,51 +1062,196 @@ public final class String implements Serializable, Comparable, CharSequence
return toUpperCase (null);
}
- public native String trim ();
+ /**
+ * 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)}.
+ *
+ * @return new trimmed String, or this if nothing trimmed
+ */
+ public native String trim();
+
+ /**
+ * Returns this, as it is already a String!
+ *
+ * @return this
+ */
+ public String toString()
+ {
+ return this;
+ }
+
+ /**
+ * Copies the contents of this String into a character array. Subsequent
+ * changes to the array do not affect the String.
+ *
+ * @return character array copying the String
+ */
+ public native char[] toCharArray();
- public static String valueOf (Object obj)
+ /**
+ * Returns a String representation of an Object. This is "null" if the
+ * object is null, otherwise it is <code>obj.toString()</code> (which
+ * can be null).
+ *
+ * @param obj the Object
+ * @return the string conversion of obj
+ */
+ public static String valueOf(Object obj)
{
return obj == null ? "null" : obj.toString();
}
- public static String valueOf (char[] data)
+ /**
+ * Returns a String representation of a character array. Subsequent
+ * changes to the array do not affect the String.
+ *
+ * @param data the character array
+ * @return a String containing the same character sequence as data
+ * @throws NullPointerException if data is null
+ * @see #valueOf(char[], int, int)
+ * @see #String(char[])
+ */
+ public static String valueOf(char[] data)
{
return valueOf (data, 0, data.length);
}
- public static native String valueOf (char[] data, int offset, int count);
+ /**
+ * Returns a String representing the character sequence of the char array,
+ * starting at the specified offset, and copying chars up to the specified
+ * count. Subsequent changes to the array do not affect the String.
+ *
+ * @param data character array
+ * @param offset position (base 0) to start copying out of data
+ * @param count the number of characters from data to copy
+ * @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 > data.length)
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ * @see #String(char[], int, int)
+ */
+ public static native String valueOf(char[] data, int offset, int count);
+
+ /**
+ * Returns a String representing the character sequence of the char array,
+ * starting at the specified offset, and copying chars up to the specified
+ * count. Subsequent changes to the array do not affect the String.
+ *
+ * @param data character array
+ * @param offset position (base 0) to start copying out of data
+ * @param count the number of characters from data to copy
+ * @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 > data.length)
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ * @see #String(char[], int, int)
+ */
+ public static String copyValueOf(char[] data, int offset, int count)
+ {
+ String r = new String ();
+ r.init(data, offset, count, false);
+ return r;
+ }
+
+ /**
+ * Returns a String representation of a character array. Subsequent
+ * changes to the array do not affect the String.
+ *
+ * @param data the character array
+ * @return a String containing the same character sequence as data
+ * @throws NullPointerException if data is null
+ * @see #copyValueOf(char[], int, int)
+ * @see #String(char[])
+ */
+ public static String copyValueOf(char[] data)
+ {
+ return copyValueOf (data, 0, data.length);
+ }
- public static String valueOf (boolean b)
+ /**
+ * Returns a String representing a boolean.
+ *
+ * @param b the boolean
+ * @return "true" if b is true, else "false"
+ */
+ public static String valueOf(boolean b)
{
return b ? "true" : "false";
}
- public static native String valueOf (char c);
+ /**
+ * Returns a String representing a character.
+ *
+ * @param c the character
+ * @return String containing the single character c
+ */
+ public static native String valueOf(char c);
- public static native String valueOf (int i);
+ /**
+ * Returns a String representing an integer.
+ *
+ * @param i the integer
+ * @return String containing the integer in base 10
+ * @see Integer#toString(int)
+ */
+ public static native String valueOf(int i);
- public static String valueOf (long l)
+ /**
+ * Returns a String representing a long.
+ *
+ * @param l the long
+ * @return String containing the long in base 10
+ * @see Long#toString(long)
+ */
+ public static String valueOf(long l)
{
return Long.toString(l);
}
- public static String valueOf (float f)
+ /**
+ * Returns a String representing a float.
+ *
+ * @param f the float
+ * @return String containing the float
+ * @see Float#toString(float)
+ */
+ public static String valueOf(float f)
{
return Float.toString(f);
}
- public static String valueOf (double d)
+ /**
+ * Returns a String representing a double.
+ *
+ * @param d the double
+ * @return String containing the double
+ * @see Double#toString(double)
+ */
+ public static String valueOf(double d)
{
return Double.toString(d);
}
- public native String intern ();
+ /**
+ * 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
+ */
+ public native String intern();
+
- private native void init ();
- private native void init (char[] chars, int offset, int count,
- boolean dont_copy);
- private native void init (byte[] chars, int hibyte, int offset, int count);
- private native void init (byte[] chars, int offset, int count, String enc)
+ private native void init(char[] chars, int offset, int count,
+ boolean dont_copy);
+ private native void init(byte[] chars, int hibyte, int offset, int count);
+ private native void init(byte[] chars, int offset, int count, String enc)
throws UnsupportedEncodingException;
- private static native void rehash ();
+ private static native void rehash();
}
diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java
index 922d6bb6d24..fac7892524e 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 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -7,7 +7,7 @@ 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
@@ -36,276 +36,194 @@ 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.Serializable;
-/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
- * Updated using online JDK 1.2 docs.
- * Believed complete and correct to JDK 1.2.
- * Merged with Classpath.
- */
+import java.io.Serializable;
/**
* <code>StringBuffer</code> represents a changeable <code>String</code>.
* It provides the operations required to modify the
- * <code>StringBuffer</code> including insert, replace, delete, append,
- * and reverse.
- * <P>
+ * <code>StringBuffer</code>, including insert, replace, delete, append,
+ * and reverse. It is thread-safe; meaning that all modifications to a buffer
+ * are in synchronized methods.
*
- * <code>StringBuffer</code>s are variable-length in nature, so even if
+ * <p><code>StringBuffer</code>s are variable-length in nature, so even if
* you initialize them to a certain size, they can still grow larger than
- * that. <EM>Capacity</EM> indicates the number of characters the
+ * that. <em>Capacity</em> indicates the number of characters the
* <code>StringBuffer</code> can have in it before it has to grow (growing
* the char array is an expensive operation involving <code>new</code>).
- * <P>
*
- * Incidentally, the String operator "+" actually is turned into a
- * <code>StringBuffer</code> operation:
- * <BR>
- * <code>a + b</code>
- * <BR>
- * is the same as
- * <BR>
- * <code>new StringBuffer(a).append(b).toString()</code>.
+ * <p>Incidentally, compilers often implement the String operator "+"
+ * by using a <code>StringBuffer</code> operation:<br>
+ * <code>a + b</code><br>
+ * is the same as<br>
+ * <code>new StringBuffer().append(a).append(b).toString()</code>.
*
- * @implnote Classpath's StringBuffer is capable of sharing memory with
- * Strings for efficiency. This will help in two instances:
- * first, when a StringBuffer is created from a String but is
- * never changed, and second, when a StringBuffer is converted
- * to a String and the StringBuffer is not changed after that.
+ * <p>Classpath's StringBuffer is capable of sharing memory with Strings for
+ * efficiency. This will help when a StringBuffer is converted to a String
+ * and the StringBuffer is not changed after that (quite common when performing
+ * string concatenation).
*
- * @since JDK1.0
* @author Paul Fisher
* @author John Keiser
* @author Tom Tromey
- * @see java.lang.String
+ * @author Eric Blake <ebb9@email.byu.edu>
+ * @see String
+ * @since 1.0
+ * @status updated to 1.4
*/
public final class StringBuffer implements Serializable, CharSequence
{
- /** 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>.
- * @param bool the <code>boolean</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(boolean)
+ /**
+ * Compatible with JDK 1.0+.
*/
- public StringBuffer append (boolean bool)
- {
- return append (String.valueOf(bool));
- }
+ private static final long serialVersionUID = 3388685877147921107L;
- /** Append the <code>char</code> to this <code>StringBuffer</code>.
- * @param c the <code>char</code> to append.
- * @return this <code>StringBuffer</code>.
+ /**
+ * Index of next available character (and thus the size of the current
+ * string contents). Note that this has permissions set this way so that
+ * String can get the value.
+ *
+ * @serial the number of characters in the buffer
*/
- public synchronized StringBuffer append (char ch)
- {
- ensureCapacity_unsynchronized (count + 1);
- value[count++] = ch;
- return this;
- }
+ int count;
- /** 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>.
- * @param inum the <code>int</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(int)
+ /**
+ * The buffer. Note that this has permissions set this way so that String
+ * can get the value.
+ *
+ * @serial the buffer
*/
- public native StringBuffer append (int inum);
+ char[] value;
- /** 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>.
- * @param lnum the <code>long</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(long)
+ /**
+ * True if the buffer is shared with another object (StringBuffer or
+ * String); this means the buffer must be copied before writing to it again.
+ * Note that this has permissions set this way so that String can get the
+ * value.
+ *
+ * @serial whether the buffer is shared
*/
- public StringBuffer append (long lnum)
- {
- return append (String.valueOf(lnum));
- }
+ boolean shared;
- /** 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>.
- * @param fnum the <code>float</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(float)
+ /**
+ * The default capacity of a buffer.
*/
- public StringBuffer append (float fnum)
- {
- return append (String.valueOf(fnum));
- }
+ private final static int DEFAULT_CAPACITY = 16;
- /** 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>.
- * @param dnum the <code>double</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(double)
+ /**
+ * Create a new StringBuffer with default capacity 16.
*/
- public StringBuffer append (double dnum)
+ public StringBuffer()
{
- return append (String.valueOf(dnum));
+ this(DEFAULT_CAPACITY);
}
- /** 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>.
- * @param obj the <code>Object</code> to convert and append.
- * @return this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(java.lang.Object)
+ /**
+ * Create an empty <code>StringBuffer</code> with the specified initial
+ * capacity.
+ *
+ * @param capacity the initial capacity
+ * @throws NegativeArraySizeException if capacity is negative
*/
- public StringBuffer append (Object obj)
+ public StringBuffer(int capacity)
{
- return append (String.valueOf(obj));
+ value = new char[capacity];
}
- /** Append the <code>String</code> to this <code>StringBuffer</code>.
- * @param str the <code>String</code> to append.
- * @return this <code>StringBuffer</code>.
+ /**
+ * Create a new <code>StringBuffer</code> with the characters in the
+ * specified <code>String</code>. Initial capacity will be the size of the
+ * String plus 16.
+ *
+ * @param str the <code>String</code> to convert
+ * @throws NullPointerException if str is null
*/
- public synchronized StringBuffer append (String str)
+ public StringBuffer(String str)
{
- if (str == null)
- str = "null";
- int len = str.length();
- ensureCapacity_unsynchronized (count + len);
- str.getChars(0, len, value, count);
- count += len;
- return this;
+ // Unfortunately, because the size is 16 larger, we cannot share.
+ count = str.count;
+ value = new char[count + DEFAULT_CAPACITY];
+ str.getChars(0, count, value, 0);
}
- /** Append the <code>char</code> array to this <code>StringBuffer</code>.
- * @param data the <code>char[]</code> to append.
- * @return this <code>StringBuffer</code>.
- * @exception NullPointerException if <code>str</code> is <code>null</code>.
+ /**
+ * Get the length of the <code>String</code> this <code>StringBuffer</code>
+ * would create. Not to be confused with the <em>capacity</em> of the
+ * <code>StringBuffer</code>.
+ *
+ * @return the length of this <code>StringBuffer</code>
+ * @see #capacity()
+ * @see #setLength(int)
*/
- public StringBuffer append (char[] data)
+ public synchronized int length()
{
- return append (data, 0, data.length);
+ return count;
}
- /** Append the <code>char</code> array to this <code>StringBuffer</code>.
- * @param data the <code>char[]</code> to append.
- * @param offset the place to start grabbing characters from
- * <code>str</code>.
- * @param count the number of characters to get from <code>str</code>.
- * @return this <code>StringBuffer</code>.
- * @exception NullPointerException if <code>str</code> is <code>null</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> or
- * <code>offset+len</code> is out of range.
- */
- public synchronized StringBuffer append (char[] data, int offset, int count)
- {
- ensureCapacity_unsynchronized (this.count + count);
- System.arraycopy(data, offset, value, this.count, count);
- this.count += count;
- return this;
- }
-
- /** Get the total number of characters this <code>StringBuffer</code>
- * can support before it must be grown. Not to be confused with
- * <em>length</em>.
- * @return the capacity of this <code>StringBuffer</code>
- * @see #length()
- * @see #ensureCapacity(int)
+ /**
+ * Get the total number of characters this <code>StringBuffer</code> can
+ * support before it must be grown. Not to be confused with <em>length</em>.
+ *
+ * @return the capacity of this <code>StringBuffer</code>
+ * @see #length()
+ * @see #ensureCapacity(int)
*/
- public int capacity ()
+ public synchronized int capacity()
{
return value.length;
}
- /** Get the character at the specified index.
- * @param index the index of the character to get, starting at 0.
- * @return the character at the specified index.
- * @exception IndexOutOfBoundsException if the desired character index
- * is negative or greater then length() - 1.
+ /**
+ * Increase the capacity of this <code>StringBuffer</code>. This will
+ * ensure that an expensive growing operation will not occur until
+ * <code>minimumCapacity</code> is reached. The buffer is grown to the
+ * larger of <code>minimumCapacity</code> and
+ * <code>capacity() * 2 + 2</code>, if it is not already large enough.
+ *
+ * @param minimumCapacity the new capacity
+ * @see #capacity()
*/
- public synchronized char charAt (int index)
+ public synchronized void ensureCapacity(int minimumCapacity)
{
- if (index >= count)
- throw new StringIndexOutOfBoundsException (index);
- return value[index];
+ ensureCapacity_unsynchronized(minimumCapacity);
}
- /** Delete characters from this <code>StringBuffer</code>.
- * <code>delete(10, 12)</code> will delete 10 and 11, but not 12.
- * @param start the first character to delete.
- * @param end the index after the last character to delete.
- * @return this <code>StringBuffer</code>.
- * @exception StringIndexOutOfBoundsException if <code>start</code>
- * or <code>end-1</code> are out of bounds, or if
- * <code>start > end</code>.
+ /**
+ * Set the length of this StringBuffer. If the new length is greater than
+ * the current length, all the new characters are set to '\0'. If the new
+ * length is less than the current length, the first <code>newLength</code>
+ * characters of the old array will be preserved, and the remaining
+ * characters are truncated.
+ *
+ * @param newLength the new length
+ * @throws IndexOutOfBoundsException if the new length is negative
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
+ * @see #length()
*/
- public synchronized StringBuffer delete (int start, int end)
+ public synchronized void setLength(int newLength)
{
- if (start < 0 || start > count || start > end)
- throw new StringIndexOutOfBoundsException (start);
- if (end > count)
- end = count;
- // This will unshare if required.
- ensureCapacity_unsynchronized (count);
- if (count - end != 0)
- System.arraycopy (value, end, value, start, count - end);
- count -= (end - start);
- return this;
- }
+ if (newLength < 0)
+ throw new StringIndexOutOfBoundsException(newLength);
- /** Delete a character from this <code>StringBuffer</code>.
- * @param index the index of the character to delete.
- * @return this <code>StringBuffer</code>.
- * @exception StringIndexOutOfBoundsException if <code>index</code>
- * is out of bounds.
- */
- public StringBuffer deleteCharAt(int index)
- {
- return delete (index, index + 1);
+ ensureCapacity_unsynchronized(newLength);
+ while (count < newLength)
+ value[count++] = '\0';
+ count = newLength;
}
- /** Increase the capacity of this <code>StringBuffer</code>.
- * This will ensure that an expensive growing operation will not occur
- * until <code>minimumCapacity</code> is reached.
- * If the capacity is actually already greater than <code>minimumCapacity</code>
- * @param minimumCapacity the new capacity.
- * @see #capacity()
+ /**
+ * Get the character at the specified index.
+ *
+ * @param index the index of the character to get, starting at 0
+ * @return the character at the specified index
+ * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
*/
- public synchronized void ensureCapacity (int minimumCapacity)
+ public synchronized char charAt(int index)
{
- if (shared || minimumCapacity > value.length)
- {
- // We don't want to make a larger vector when `shared' is
- // set. If we do, then setLength becomes very inefficient
- // when repeatedly reusing a StringBuffer in a loop.
- int max = (minimumCapacity > value.length
- ? value.length*2+2
- : value.length);
- minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
- char[] nb = new char[minimumCapacity];
- System.arraycopy(value, 0, nb, 0, count);
- value = nb;
- shared = false;
- }
- }
-
- // ensureCapacity is used by several synchronized methods in StringBuffer.
- // There's no need to synchronize again.
- private void ensureCapacity_unsynchronized (int minimumCapacity)
- {
- if (shared || minimumCapacity > value.length)
- {
- // We don't want to make a larger vector when `shared' is
- // set. If we do, then setLength becomes very inefficient
- // when repeatedly reusing a StringBuffer in a loop.
- int max = (minimumCapacity > value.length
- ? value.length*2+2
- : value.length);
- minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
- char[] nb = new char[minimumCapacity];
- System.arraycopy(value, 0, nb, 0, count);
- value = nb;
- shared = false;
- }
+ if (index < 0 || index >= count)
+ throw new StringIndexOutOfBoundsException(index);
+ return value[index];
}
/**
@@ -332,397 +250,652 @@ public final class StringBuffer implements Serializable, CharSequence
System.arraycopy(value, srcOffset, dst, dstOffset, todo);
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param bool the <code>boolean</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(boolean)
+ /**
+ * Set the character at the specified index.
+ *
+ * @param index the index of the character to set starting at 0
+ * @param ch the value to set that character to
+ * @throws IndexOutOfBoundsException if index is negative or &gt;= length()
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
*/
- public StringBuffer insert (int offset, boolean bool)
+ public synchronized void setCharAt(int index, char ch)
{
- return insert (offset, bool ? "true" : "false");
+ if (index < 0 || index >= count)
+ throw new StringIndexOutOfBoundsException(index);
+ // Call ensureCapacity to enforce copy-on-write.
+ ensureCapacity_unsynchronized(count);
+ value[index] = ch;
}
- /** Insert the <code>char</code> argument into this <code>StringBuffer</code>.
- * @param offset the place to insert.
- * @param ch the <code>char</code> to insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
+ /**
+ * 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>.
+ *
+ * @param obj the <code>Object</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(Object)
+ * @see #append(String)
*/
- public synchronized StringBuffer insert (int offset, char ch)
+ public StringBuffer append(Object obj)
{
- if (offset < 0 || offset > count)
- throw new StringIndexOutOfBoundsException (offset);
- ensureCapacity_unsynchronized (count+1);
- System.arraycopy(value, offset, value, offset+1, count-offset);
- value[offset] = ch;
- count++;
- return this;
+ return append(obj == null ? "null" : obj.toString());
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param inum the <code>int</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(int)
+ /**
+ * Append the <code>String</code> to this <code>StringBuffer</code>. If
+ * str is null, the String "null" is appended.
+ *
+ * @param str the <code>String</code> to append
+ * @return this <code>StringBuffer</code>
*/
- public StringBuffer insert (int offset, int inum)
+ public synchronized StringBuffer append(String str)
{
- return insert (offset, String.valueOf(inum));
+ if (str == null)
+ str = "null";
+ int len = str.count;
+ ensureCapacity_unsynchronized(count + len);
+ str.getChars(0, len, value, count);
+ count += len;
+ return this;
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param lnum the <code>long</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(long)
+ /**
+ * Append the <code>StringBuffer</code> value of the argument to this
+ * <code>StringBuffer</code>. This behaves the same as
+ * <code>append((Object) stringBuffer)</code>, except it is more efficient.
+ *
+ * @param stringBuffer the <code>StringBuffer</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see #append(Object)
+ * @since 1.4
*/
- public StringBuffer insert (int offset, long lnum)
+ public synchronized StringBuffer append(StringBuffer stringBuffer)
{
- return insert (offset, String.valueOf(lnum));
+ if (stringBuffer == null)
+ return append("null");
+ synchronized (stringBuffer)
+ {
+ int len = stringBuffer.count;
+ ensureCapacity_unsynchronized(count + len);
+ System.arraycopy(stringBuffer.value, 0, value, count, len);
+ count += len;
+ }
+ return this;
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param fnum the <code>float</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(float)
+ /**
+ * 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.
+ *
+ * @param data the <code>char[]</code> to append
+ * @return this <code>StringBuffer</code>
+ * @throws NullPointerException if <code>str</code> is <code>null</code>
+ * @see #append(char[], int, int)
*/
- public StringBuffer insert (int offset, float fnum)
+ public StringBuffer append(char[] data)
{
- return insert (offset, String.valueOf(fnum));
+ return append(data, 0, data.length);
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param dnum the <code>double</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(double)
+ /**
+ * Append part of the <code>char</code> array to this
+ * <code>StringBuffer</code>. This is similar (but more efficient) than
+ * <code>append(new String(data, offset, count))</code>, except in the case
+ * of null.
+ *
+ * @param data the <code>char[]</code> to append
+ * @param offset the start location in <code>str</code>
+ * @param count the number of characters to get from <code>str</code>
+ * @return this <code>StringBuffer</code>
+ * @throws NullPointerException if <code>str</code> is <code>null</code>
+ * @throws IndexOutOfBoundsException if offset or count is out of range
+ * (while unspecified, this is a StringIndexOutOfBoundsException)
*/
- public StringBuffer insert (int offset, double dnum)
+ public synchronized StringBuffer append(char[] data, int offset, int count)
{
- return insert (offset, String.valueOf(dnum));
+ ensureCapacity_unsynchronized(this.count + count);
+ System.arraycopy(data, offset, value, this.count, count);
+ this.count += count;
+ return this;
}
- /** Insert the <code>String</code> value of the argument into this <code>StringBuffer</code>.
- * Uses <code>String.valueOf()</code> to convert to
- * <code>String</code>.
- * @param offset the place to insert.
- * @param obj the <code>Object</code> to convert and insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- * @see java.lang.String#valueOf(java.lang.Object)
+ /**
+ * 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>.
+ *
+ * @param bool the <code>boolean</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(boolean)
*/
- public StringBuffer insert (int offset, Object obj)
+ public StringBuffer append(boolean bool)
{
- return insert (offset, String.valueOf(obj));
+ return append(bool ? "true" : "false");
}
- /** Insert the <code>String</code> argument into this <code>StringBuffer</code>.
- * @param offset the place to insert.
- * @param str the <code>String</code> to insert.
- * @return this <code>StringBuffer</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
+ /**
+ * Append the <code>char</code> to this <code>StringBuffer</code>.
+ *
+ * @param c the <code>char</code> to append
+ * @return this <code>StringBuffer</code>
*/
- public synchronized StringBuffer insert (int offset, String str)
+ public synchronized StringBuffer append(char ch)
{
- if (offset < 0 || offset > count)
- throw new StringIndexOutOfBoundsException (offset);
- // Note that using `null' is from JDK 1.2.
- if (str == null)
- str = "null";
- int len = str.length();
- ensureCapacity_unsynchronized (count+len);
- System.arraycopy(value, offset, value, offset+len, count-offset);
- str.getChars(0, len, value, offset);
- count += len;
+ ensureCapacity_unsynchronized(count + 1);
+ value[count++] = ch;
return this;
}
- /** Insert the <code>char[]</code> argument into this
- * <code>StringBuffer</code>.
- * @param offset the place to insert.
- * @param data the <code>char[]</code> to insert.
- * @return this <code>StringBuffer</code>.
- * @exception NullPointerException if <code>data</code> is
- * <code>null</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range for this <code>StringBuffer</code>.
- */
- public StringBuffer insert (int offset, char[] data)
- {
- // One could check if offset is invalid here instead of making sure that
- // data isn't null before dereferencing, but this works just as well.
- return insert (offset, data, 0, data == null ? 0 : data.length);
- }
-
- /** Insert the <code>char[]</code> argument into this
- * <code>StringBuffer</code>.
- * @param offset the place to insert.
- * @param str the <code>char[]</code> to insert.
- * @param str_offset the index in <code>str</code> to start inserting
- * from.
- * @param len the number of characters to insert.
- * @return this <code>StringBuffer</code>.
- * @exception NullPointerException if <code>str</code> is <code>null</code>.
- * @exception IndexOutOfBoundsException if <code>offset</code> is out
- * of range, for this <code>StringBuffer</code>, or if
- * <code>str_offset</code> or <code>str_offset+len</code>
- * are out of range for <code>str</code>.
- */
- public synchronized StringBuffer insert(int offset, char[] str,
- int str_offset, int len)
+ /**
+ * 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>.
+ *
+ * @param inum the <code>int</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(int)
+ */
+ // GCJ LOCAL: this is native for efficiency.
+ public native StringBuffer append (int inum);
+
+ /**
+ * 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>.
+ *
+ * @param lnum the <code>long</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(long)
+ */
+ public StringBuffer append(long lnum)
{
- if (offset < 0 || offset > count)
- throw new StringIndexOutOfBoundsException (offset);
- if (len < 0)
- throw new StringIndexOutOfBoundsException (len);
- if (str_offset < 0 || str_offset + len > str.length)
- throw new StringIndexOutOfBoundsException (str_offset);
- ensureCapacity_unsynchronized (count + len);
- System.arraycopy(value, offset, value, offset + len, count - offset);
- System.arraycopy(str, str_offset, value, offset, len);
- count += len;
+ return append(Long.toString(lnum, 10));
+ }
+
+ /**
+ * 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>.
+ *
+ * @param fnum the <code>float</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(float)
+ */
+ public StringBuffer append(float fnum)
+ {
+ return append(Float.toString(fnum));
+ }
+
+ /**
+ * 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>.
+ *
+ * @param dnum the <code>double</code> to convert and append
+ * @return this <code>StringBuffer</code>
+ * @see String#valueOf(double)
+ */
+ public StringBuffer append(double dnum)
+ {
+ return append(Double.toString(dnum));
+ }
+
+ /**
+ * Delete characters from this <code>StringBuffer</code>.
+ * <code>delete(10, 12)</code> will delete 10 and 11, but not 12. It is
+ * harmless for end to be larger than length().
+ *
+ * @param start the first character to delete
+ * @param end the index after the last character to delete
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+ * @since 1.2
+ */
+ public synchronized StringBuffer delete(int start, int end)
+ {
+ if (start < 0 || start > count || start > end)
+ throw new StringIndexOutOfBoundsException(start);
+ if (end > count)
+ end = count;
+ // This will unshare if required.
+ ensureCapacity_unsynchronized(count);
+ if (count - end != 0)
+ System.arraycopy(value, end, value, start, count - end);
+ count -= end - start;
return this;
}
- /** Get the length of the <code>String</code> this
- * <code>StringBuffer</code> would create. Not to be confused with the
- * <em>capacity</em> of the <code>StringBuffer</code>.
- * @return the length of this <code>StringBuffer</code>.
- * @see #capacity()
- * @see #setLength(int)
+ /**
+ * Delete a character from this <code>StringBuffer</code>.
+ *
+ * @param index the index of the character to delete
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if index is out of bounds
+ * @since 1.2
*/
- public int length ()
+ public StringBuffer deleteCharAt(int index)
{
- return count;
+ return delete(index, index + 1);
}
- /** Replace characters between index <code>start</code> (inclusive) and
- * <code>end</code> (exclusive) with <code>str</code>. If <code>end</code>
- * is larger than the size of this StringBuffer, all characters after
- * <code>start</code> are replaced.
- * @param start the beginning index of characters to delete (inclusive).
- * @param end the ending index of characters to delete (exclusive).
- * @param str the new <code>String</code> to insert.
- * @return this <code>StringBuffer</code>.
+ /**
+ * Replace characters between index <code>start</code> (inclusive) and
+ * <code>end</code> (exclusive) with <code>str</code>. If <code>end</code>
+ * is larger than the size of this StringBuffer, all characters after
+ * <code>start</code> are replaced.
+ *
+ * @param start the beginning index of characters to delete (inclusive)
+ * @param end the ending index of characters to delete (exclusive)
+ * @param str the new <code>String</code> to insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if start or end are out of bounds
+ * @throws NullPointerException if str is null
+ * @since 1.2
*/
- public synchronized StringBuffer replace (int start, int end, String str)
+ public synchronized StringBuffer replace(int start, int end, String str)
{
if (start < 0 || start > count || start > end)
- throw new StringIndexOutOfBoundsException (start);
-
- int len = str.length();
+ throw new StringIndexOutOfBoundsException(start);
+
+ int len = str.count;
// Calculate the difference in 'count' after the replace.
- int delta = len - ((end > count ? count : end) - start);
- ensureCapacity_unsynchronized (count + delta);
-
+ int delta = len - (end > count ? count : end) + start;
+ ensureCapacity_unsynchronized(count + delta);
+
if (delta != 0 && end < count)
System.arraycopy(value, end, value, end + delta, count - end);
-
- str.getChars (0, len, value, start);
- count += delta;
- return this;
+
+ str.getChars(0, len, value, start);
+ count += delta;
+ return this;
}
- /** Reverse the characters in this StringBuffer.
- * @return this <code>StringBuffer</code>.
+ /**
+ * Creates a substring of this StringBuffer, starting at a specified index
+ * and ending at the end of this StringBuffer.
+ *
+ * @param beginIndex index to start substring (base 0)
+ * @return new String which is a substring of this StringBuffer
+ * @throws StringIndexOutOfBoundsException if beginIndex is out of bounds
+ * @see #substring(int, int)
+ * @since 1.2
*/
- public synchronized StringBuffer reverse ()
+ public String substring(int beginIndex)
{
- // Call ensureCapacity to enforce copy-on-write.
- ensureCapacity_unsynchronized (count);
- for (int i = 0; i < count / 2; ++i)
- {
- char c = value[i];
- value[i] = value[count - i - 1];
- value[count - i - 1] = c;
- }
- return this;
+ return substring(beginIndex, count);
}
- /** Set the character at the specified index.
- * @param index the index of the character to set starting at 0.
- * @param ch the value to set that character to.
- * @exception IndexOutOfBoundsException if the specified character
- * index is not between 0 and length() - 1 (inclusive).
+ /**
+ * Creates a substring of this StringBuffer, starting at a specified index
+ * and ending at one character before a specified index. This is implemented
+ * the same as <code>substring(beginIndex, endIndex)</code>, to satisfy
+ * the CharSequence interface.
+ *
+ * @param beginIndex index to start at (inclusive, base 0)
+ * @param endIndex index to end at (exclusive)
+ * @return new String which is a substring of this StringBuffer
+ * @throws IndexOutOfBoundsException if beginIndex or endIndex is out of
+ * bounds
+ * @see #substring(int, int)
+ * @since 1.4
*/
- public synchronized void setCharAt (int index, char ch)
+ public CharSequence subSequence(int beginIndex, int endIndex)
{
- if (index < 0 || index >= count)
- throw new StringIndexOutOfBoundsException (index);
- // Call ensureCapacity to enforce copy-on-write.
- ensureCapacity_unsynchronized (count);
- value[index] = ch;
+ return substring(beginIndex, endIndex);
}
- /** Set the length of this StringBuffer.
- * <P>
- * If the new length is greater than the current length, all the new
- * characters are set to '\0'.
- * <P>
- * If the new length is less than the current length, the first
- * <code>newLength</code> characters of the old array will be
- * @param newLength the new length
- * @exception IndexOutOfBoundsException if the new length is
- * negative.
- * @see #length()
+ /**
+ * Creates a substring of this StringBuffer, starting at a specified index
+ * and ending at one character before a specified index.
+ *
+ * @param beginIndex index to start at (inclusive, base 0)
+ * @param endIndex index to end at (exclusive)
+ * @return new String which is a substring of this StringBuffer
+ * @throws StringIndexOutOfBoundsException if beginIndex or endIndex is out
+ * of bounds
+ * @since 1.2
*/
- public synchronized void setLength (int newLength)
+ public synchronized String substring(int beginIndex, int endIndex)
{
- if (newLength < 0)
- throw new StringIndexOutOfBoundsException (newLength);
+ int len = endIndex - beginIndex;
+ if (beginIndex < 0 || endIndex > count || len < 0)
+ throw new StringIndexOutOfBoundsException();
+ if (len == 0)
+ return "";
+ // Share the char[] unless 3/4 empty.
+ shared = (len << 2) >= value.length;
+ // Package constructor avoids an array copy.
+ return new String(value, beginIndex, len, shared);
+ }
- ensureCapacity_unsynchronized (newLength);
- for (int i = count; i < newLength; ++i)
- value[i] = '\0';
- count = newLength;
+ /**
+ * Insert a subarray of the <code>char[]</code> argument into this
+ * <code>StringBuffer</code>.
+ *
+ * @param offset the place to insert in this buffer
+ * @param str the <code>char[]</code> to insert
+ * @param str_offset the index in <code>str</code> to start inserting from
+ * @param len the number of characters to insert
+ * @return this <code>StringBuffer</code>
+ * @throws NullPointerException if <code>str</code> is <code>null</code>
+ * @throws StringIndexOutOfBoundsException if any index is out of bounds
+ * @since 1.2
+ */
+ public synchronized StringBuffer insert(int offset,
+ char[] str, int str_offset, int len)
+ {
+ if (offset < 0 || offset > count || len < 0
+ || str_offset < 0 || str_offset + len > str.length)
+ throw new StringIndexOutOfBoundsException();
+ ensureCapacity_unsynchronized(count + len);
+ System.arraycopy(value, offset, value, offset + len, count - offset);
+ System.arraycopy(str, str_offset, value, offset, len);
+ count += len;
+ return this;
}
- /** Create a new StringBuffer with default capacity 16.
- * @see JLS 20.13.1
+ /**
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
+ *
+ * @param offset the place to insert in this buffer
+ * @param obj the <code>Object</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @exception StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(Object)
*/
- public StringBuffer ()
+ public StringBuffer insert(int offset, Object obj)
{
- this (DEFAULT_CAPACITY);
+ return insert(offset, obj == null ? "null" : obj.toString());
}
- /** Create an empty <code>StringBuffer</code> with the specified initial capacity.
- * @param capacity the initial capacity.
+ /**
+ * Insert the <code>String</code> argument into this
+ * <code>StringBuffer</code>. If str is null, the String "null" is used
+ * instead.
+ *
+ * @param offset the place to insert in this buffer
+ * @param str the <code>String</code> to insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
*/
- public StringBuffer (int capacity)
+ public synchronized StringBuffer insert(int offset, String str)
{
- count = 0;
- value = new char[capacity];
- shared = false;
+ if (offset < 0 || offset > count)
+ throw new StringIndexOutOfBoundsException(offset);
+ if (str == null)
+ str = "null";
+ int len = str.count;
+ ensureCapacity_unsynchronized(count + len);
+ System.arraycopy(value, offset, value, offset + len, count - offset);
+ str.getChars(0, len, value, offset);
+ count += len;
+ return this;
}
- /** Create a new <code>StringBuffer</code> with the characters in the specified <code>String</code>.
- * Initial capacity will be the size of the String plus 16.
- * @param str the <code>String</code> to make a <code>StringBuffer</code> out of.
- * @XXX optimize for sharing.
+ /**
+ * Insert the <code>char[]</code> argument into this
+ * <code>StringBuffer</code>.
+ *
+ * @param offset the place to insert in this buffer
+ * @param data the <code>char[]</code> to insert
+ * @return this <code>StringBuffer</code>
+ * @throws NullPointerException if <code>data</code> is <code>null</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see #insert(int, char[], int, int)
*/
- public StringBuffer (String str)
+ public StringBuffer insert(int offset, char[] data)
{
- // The documentation is not clear, but experimentation with
- // other implementations indicates that StringBuffer(null)
- // should throw a NullPointerException.
- count = str.length();
- // JLS: The initial capacity of the string buffer is 16 plus the
- // length of the argument string.
- value = new char[count + DEFAULT_CAPACITY];
- str.getChars(0, count, value, 0);
- shared = false;
+ return insert(offset, data, 0, data.length);
}
/**
- * Creates a substring of this StringBuffer, starting at a specified index
- * and ending at the end of this StringBuffer.
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
*
- * @param beginIndex index to start substring (base 0)
- *
- * @return new String which is a substring of this StringBuffer
+ * @param offset the place to insert in this buffer
+ * @param bool the <code>boolean</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(boolean)
+ */
+ public StringBuffer insert(int offset, boolean bool)
+ {
+ return insert(offset, bool ? "true" : "false");
+ }
+
+ /**
+ * Insert the <code>char</code> argument into this <code>StringBuffer</code>.
*
- * @exception StringIndexOutOfBoundsException
- * if (beginIndex < 0 || beginIndex > this.length())
+ * @param offset the place to insert in this buffer
+ * @param ch the <code>char</code> to insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
*/
- public String substring (int beginIndex)
+ public synchronized StringBuffer insert(int offset, char ch)
{
- return substring (beginIndex, count);
+ if (offset < 0 || offset > count)
+ throw new StringIndexOutOfBoundsException(offset);
+ ensureCapacity_unsynchronized(count + 1);
+ System.arraycopy(value, offset, value, offset + 1, count - offset);
+ value[offset] = ch;
+ count++;
+ return this;
}
/**
- * Creates a substring of this StringBuffer, starting at a specified index
- * and ending at one character before a specified index.
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
*
- * @param beginIndex index to start substring (base 0)
- * @param endIndex index after the last character to be
- * copied into the substring
- *
- * @return new String which is a substring of this StringBuffer
+ * @param offset the place to insert in this buffer
+ * @param inum the <code>int</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(int)
+ */
+ public StringBuffer insert(int offset, int inum)
+ {
+ return insert(offset, String.valueOf(inum));
+ }
+
+ /**
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
*
- * @exception StringIndexOutOfBoundsException
- * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+ * @param offset the place to insert in this buffer
+ * @param lnum the <code>long</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(long)
*/
- public synchronized String substring (int beginIndex, int endIndex)
+ public StringBuffer insert(int offset, long lnum)
{
- if (beginIndex < 0 || endIndex > count || beginIndex > endIndex)
- throw new StringIndexOutOfBoundsException ();
- // FIXME: for libgcj it would be possible, and more efficient, to
- // enable sharing here.
- return new String (value, beginIndex, endIndex - beginIndex);
+ return insert(offset, Long.toString(lnum, 10));
}
/**
- * Creates a substring of this StringBuffer, starting at a specified index
- * and ending at one character before a specified index.
- * <p>
- * To implement <code>CharSequence</code>.
- * Calls <code>substring(beginIndex, endIndex)</code>.
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
*
- * @param beginIndex index to start substring (base 0)
- * @param endIndex index after the last character to be
- * copied into the substring
- *
- * @return new String which is a substring of this StringBuffer
+ * @param offset the place to insert in this buffer
+ * @param fnum the <code>float</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(float)
+ */
+ public StringBuffer insert(int offset, float fnum)
+ {
+ return insert(offset, Float.toString(fnum));
+ }
+
+ /**
+ * Insert the <code>String</code> value of the argument into this
+ * <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
+ * to <code>String</code>.
*
- * @exception StringIndexOutOfBoundsException
- * if (beginIndex < 0 || endIndex > this.length() || beginIndex > endIndex)
+ * @param offset the place to insert in this buffer
+ * @param dnum the <code>double</code> to convert and insert
+ * @return this <code>StringBuffer</code>
+ * @throws StringIndexOutOfBoundsException if offset is out of bounds
+ * @see String#valueOf(double)
*/
- public CharSequence subSequence (int beginIndex, int endIndex)
+ public StringBuffer insert(int offset, double dnum)
{
- return substring(beginIndex, endIndex);
+ return insert(offset, Double.toString(dnum));
}
+ /**
+ * Finds the first instance of a substring in this StringBuffer.
+ *
+ * @param str String to find
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ * @see #indexOf(String, int)
+ * @since 1.4
+ */
+ public int indexOf(String str)
+ {
+ return indexOf(str, 0);
+ }
- /** Convert this <code>StringBuffer</code> to a <code>String</code>.
- * @return the characters in this StringBuffer
+ /**
+ * Finds the first instance of a String in this StringBuffer, starting at
+ * a given index. If starting index is less than 0, the search starts at
+ * the beginning of this String. If the starting index is greater than the
+ * length of this String, or the substring is not found, -1 is returned.
+ *
+ * @param str String to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ * @since 1.4
*/
- public String toString ()
+ public synchronized int indexOf(String str, int fromIndex)
{
- // Note: in libgcj this causes the StringBuffer to be shared. In
- // Classpath it does not.
- return new String (this);
+ if (fromIndex < 0)
+ fromIndex = 0;
+ int limit = count - str.count;
+ for ( ; fromIndex <= limit; fromIndex++)
+ if (regionMatches(fromIndex, str))
+ return fromIndex;
+ return -1;
}
- // Index of next available character. Note that this has
- // permissions set this way so that String can get the value.
- int count;
+ /**
+ * Finds the last instance of a substring in this StringBuffer.
+ *
+ * @param str String to find
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ * @see #lastIndexOf(String, int)
+ * @since 1.4
+ */
+ public int lastIndexOf(String str)
+ {
+ return lastIndexOf(str, count - str.count);
+ }
- // The buffer. Note that this has permissions set this way so that
- // String can get the value.
- char[] value;
+ /**
+ * Finds the last instance of a String in this StringBuffer, starting at a
+ * given index. If starting index is greater than the maximum valid index,
+ * then the search begins at the end of this String. If the starting index
+ * is less than zero, or the substring is not found, -1 is returned.
+ *
+ * @param str String to find
+ * @param fromIndex index to start the search
+ * @return location (base 0) of the String, or -1 if not found
+ * @throws NullPointerException if str is null
+ * @since 1.4
+ */
+ public synchronized int lastIndexOf(String str, int fromIndex)
+ {
+ fromIndex = Math.min(fromIndex, count - str.count);
+ for ( ; fromIndex >= 0; fromIndex--)
+ if (regionMatches(fromIndex, str))
+ return fromIndex;
+ return -1;
+ }
- // True if we need to copy the buffer before writing to it again.
- // FIXME: JDK 1.2 doesn't specify this. The new buffer-growing
- // semantics make this less useful in that case, too. Note that
- // this has permissions set this way so that String can get the
- // value.
- boolean shared;
+ /**
+ * Reverse the characters in this StringBuffer. The same sequence of
+ * characters exists, but in the reverse index ordering.
+ *
+ * @return this <code>StringBuffer</code>
+ */
+ public synchronized StringBuffer reverse()
+ {
+ // Call ensureCapacity to enforce copy-on-write.
+ ensureCapacity_unsynchronized(count);
+ for (int i = count >> 1, j = count - i; --i >= 0; ++j)
+ {
+ char c = value[i];
+ value[i] = value[j];
+ value[j] = c;
+ }
+ return this;
+ }
+
+ /**
+ * Convert this <code>StringBuffer</code> to a <code>String</code>. The
+ * String is composed of the characters currently in this StringBuffer. Note
+ * that the result is a copy, and that future modifications to this buffer
+ * do not affect the String.
+ *
+ * @return the characters in this StringBuffer
+ */
+ public String toString()
+ {
+ // The string will set this.shared = true.
+ return new String(this);
+ }
+
+ /**
+ * An unsynchronized version of ensureCapacity, used internally to avoid
+ * the cost of a second lock on the same object. This also has the side
+ * effect of duplicating the array, if it was shared (to form copy-on-write
+ * semantics).
+ *
+ * @param minimumCapacity the minimum capacity
+ * @see #ensureCapacity(int)
+ */
+ private void ensureCapacity_unsynchronized(int minimumCapacity)
+ {
+ if (shared || minimumCapacity > value.length)
+ {
+ // We don't want to make a larger vector when `shared' is
+ // set. If we do, then setLength becomes very inefficient
+ // when repeatedly reusing a StringBuffer in a loop.
+ int max = (minimumCapacity > value.length
+ ? value.length * 2 + 2
+ : value.length);
+ minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
+ char[] nb = new char[minimumCapacity];
+ System.arraycopy(value, 0, nb, 0, count);
+ value = nb;
+ shared = false;
+ }
+ }
- static final long serialVersionUID = 3388685877147921107L;
- private final static int DEFAULT_CAPACITY = 16; // JLS 20.13.1
+ /**
+ * Predicate which determines if a substring of this matches another String
+ * starting at a specified offset for each String and continuing for a
+ * specified length. This is more efficient than creating a String to call
+ * indexOf on.
+ *
+ * @param toffset index to start comparison at for this String
+ * @param other non-null String to compare to region of this
+ * @return true if regions match, false otherwise
+ * @see #indexOf(String, int)
+ * @see #lastIndexOf(String, int)
+ * @see String#regionMatches(boolean, int, String, int, int)
+ */
+ // GCJ LOCAL: native for gcj.
+ private native boolean regionMatches(int toffset, String other);
}
diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc
index 7fea278dbe5..417c059ed59 100644
--- a/libjava/java/lang/natClass.cc
+++ b/libjava/java/lang/natClass.cc
@@ -1,6 +1,6 @@
// natClass.cc - Implementation of java.lang.Class native methods.
-/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation
This file is part of libgcj.
@@ -157,7 +157,7 @@ java::lang::Class::getConstructor (JArray<jclass> *param_types)
return cons;
}
}
- throw new java::lang::NoSuchMethodException;
+ throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name));
}
JArray<java::lang::reflect::Constructor *> *
@@ -224,7 +224,7 @@ java::lang::Class::getDeclaredConstructor (JArray<jclass> *param_types)
return cons;
}
}
- throw new java::lang::NoSuchMethodException;
+ throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name));
}
java::lang::reflect::Field *
@@ -707,13 +707,13 @@ java::lang::Class::newInstance (void)
|| isInterface ()
|| isArray ()
|| java::lang::reflect::Modifier::isAbstract(accflags))
- throw new java::lang::InstantiationException;
+ throw new java::lang::InstantiationException (getName ());
_Jv_InitClass (this);
_Jv_Method *meth = _Jv_GetMethodLocal (this, init_name, void_signature);
if (! meth)
- throw new java::lang::NoSuchMethodException;
+ throw new java::lang::NoSuchMethodException (_Jv_NewStringUtf8Const (init_name));
jobject r = JvAllocObject (this);
((void (*) (jobject)) meth->ncode) (r);
@@ -1504,7 +1504,7 @@ java::lang::Class::getPrivateMethod (jstring name, JArray<jclass> *param_types)
}
}
}
- throw new java::lang::NoSuchMethodException;
+ throw new java::lang::NoSuchMethodException (name);
}
// Private accessor method for Java code to retrieve the protection domain.
diff --git a/libjava/java/lang/natObject.cc b/libjava/java/lang/natObject.cc
index e9c74fdb285..24faf29e51e 100644
--- a/libjava/java/lang/natObject.cc
+++ b/libjava/java/lang/natObject.cc
@@ -351,7 +351,7 @@ struct heavy_lock {
obj_addr_t address; // Object to which this lock corresponds.
// Should not be traced by GC.
// Cleared as heavy_lock is destroyed.
- // Together with the rest of the hevy lock
+ // Together with the rest of the heavy lock
// chain, this is protected by the lock
// bit in the hash table entry to which
// the chain is attached.
@@ -457,12 +457,12 @@ struct hash_entry {
};
#ifndef JV_SYNC_TABLE_SZ
-# define JV_SYNC_TABLE_SZ 2048
+# define JV_SYNC_TABLE_SZ 2048 // Must be power of 2.
#endif
hash_entry light_locks[JV_SYNC_TABLE_SZ];
-#define JV_SYNC_HASH(p) (((long)p ^ ((long)p >> 10)) % JV_SYNC_TABLE_SZ)
+#define JV_SYNC_HASH(p) (((long)p ^ ((long)p >> 10)) & (JV_SYNC_TABLE_SZ-1))
// Note that the light_locks table is scanned conservatively by the
// collector. It is essential the the heavy_locks field is scanned.
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc
index dee95114538..2cf312ea862 100644
--- a/libjava/java/lang/natRuntime.cc
+++ b/libjava/java/lang/natRuntime.cc
@@ -108,6 +108,10 @@ _Jv_SetDLLSearchPath (const char *)
+extern int _Jv_argc;
+extern const char **_Jv_argv;
+ // our process' command line arguments
+
void
java::lang::Runtime::exitInternal (jint status)
{
@@ -136,6 +140,11 @@ java::lang::Runtime::gc (void)
_Jv_RunGC ();
}
+#ifdef USE_LTDL
+// List of names for JNI_OnLoad.
+static const char *onload_names[] = _Jv_platform_onload_names;
+#endif
+
void
java::lang::Runtime::_load (jstring path, jboolean do_search)
{
@@ -217,19 +226,16 @@ java::lang::Runtime::_load (jstring path, jboolean do_search)
throw new UnsatisfiedLinkError (str);
}
- void *onload = lt_dlsym (h, "JNI_OnLoad");
-
-#ifdef WIN32
- // On Win32, JNI_OnLoad is an "stdcall" function taking two pointers
- // (8 bytes) as arguments. It could also have been exported as
- // "JNI_OnLoad@8" (MinGW) or "_JNI_OnLoad@8" (MSVC).
- if (onload == NULL)
+ // Search for JNI_OnLoad function.
+ void *onload = NULL;
+ const char **name = onload_names;
+ while (*name != NULL)
{
- onload = lt_dlsym (h, "JNI_OnLoad@8");
- if (onload == NULL)
- onload = lt_dlsym (h, "_JNI_OnLoad@8");
+ onload = lt_dlsym (h, *name);
+ if (onload != NULL)
+ break;
+ ++name;
}
-#endif /* WIN32 */
if (onload != NULL)
{
@@ -416,6 +422,12 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
// redefine `java.home' with `-D' if necessary.
SET ("java.home", PREFIX);
SET ("gnu.classpath.home", PREFIX);
+ // This is set to $(libdir) because we use this to find .security
+ // files at runtime.
+ char val2[sizeof ("file://") + sizeof (LIBDIR) + 1];
+ strcpy (val2, "file://");
+ strcat (val2, LIBDIR);
+ SET ("gnu.classpath.home.url", val2);
SET ("file.encoding", default_file_encoding);
@@ -566,11 +578,7 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
if (classpath)
{
sb->append (JvNewStringLatin1 (classpath));
-#ifdef WIN32
- sb->append ((jchar) ';');
-#else
- sb->append ((jchar) ':');
-#endif
+ sb->append (_Jv_platform_path_separator);
}
if (cp != NULL)
sb->append (cp);
@@ -582,7 +590,7 @@ java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
}
// The name used to invoke this process (argv[0] in C).
- SET ("gnu.gcj.progname", _Jv_ThisExecutable());
+ SET ("gnu.gcj.progname", _Jv_argv[0]);
// Allow platform specific settings and overrides.
_Jv_platform_initProperties (newprops);
@@ -628,14 +636,7 @@ java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname)
java::lang::StringBuffer *sb = new java::lang::StringBuffer ();
sb->append(pathname);
if (pathname->length() > 0)
- {
- // FIXME: use platform function here.
-#ifdef WIN32
- sb->append ((jchar) '\\');
-#else
- sb->append ((jchar) '/');
-#endif
- }
+ sb->append (_Jv_platform_file_separator);
sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix));
sb->append(libname);
diff --git a/libjava/java/lang/natString.cc b/libjava/java/lang/natString.cc
index 0d30a35af51..6514d816a02 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 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation
This file is part of libgcj.
@@ -20,6 +20,7 @@ details. */
#include <java/lang/ArrayIndexOutOfBoundsException.h>
#include <java/lang/StringIndexOutOfBoundsException.h>
#include <java/lang/NullPointerException.h>
+#include <java/lang/StringBuffer.h>
#include <java/io/ByteArrayOutputStream.h>
#include <java/io/OutputStreamWriter.h>
#include <java/io/ByteArrayInputStream.h>
@@ -102,7 +103,9 @@ hashChars (jchar* ptr, jint length)
jint
java::lang::String::hashCode()
{
- return hashChars(JvGetStringChars(this), length());
+ if (cachedHashCode == 0)
+ cachedHashCode = hashChars(JvGetStringChars(this), length());
+ return cachedHashCode;
}
jstring*
@@ -429,14 +432,6 @@ _Jv_NewStringLatin1(const char *bytes, jsize len)
}
void
-java::lang::String::init ()
-{
- count = 0;
- boffset = sizeof(java::lang::String);
- data = this;
-}
-
-void
java::lang::String::init(jcharArray chars, jint offset, jint count,
jboolean dont_copy)
{
@@ -552,11 +547,30 @@ java::lang::String::equals(jobject anObject)
return true;
}
+jboolean
+java::lang::String::contentEquals(java::lang::StringBuffer* buffer)
+{
+ if (buffer == NULL)
+ throw new NullPointerException;
+ JvSynchronize sync(buffer);
+ if (count != buffer->count)
+ return false;
+ if (data == buffer->value)
+ return true; // Possible if shared.
+ jint i = count;
+ jchar *xptr = JvGetStringChars(this);
+ jchar *yptr = elements(buffer->value);
+ while (--i >= 0)
+ if (*xptr++ != *yptr++)
+ return false;
+ return true;
+}
+
jchar
java::lang::String::charAt(jint i)
{
if (i < 0 || i >= count)
- throw new java::lang::StringIndexOutOfBoundsException;
+ throw new java::lang::StringIndexOutOfBoundsException(i);
return JvGetStringChars(this)[i];
}
diff --git a/libjava/java/lang/natStringBuffer.cc b/libjava/java/lang/natStringBuffer.cc
index bc70f67f25a..8fbb8dfbc3c 100644
--- a/libjava/java/lang/natStringBuffer.cc
+++ b/libjava/java/lang/natStringBuffer.cc
@@ -1,6 +1,6 @@
// natStringBuffer.cc - Implementation of java.lang.StringBuffer native methods.
-/* Copyright (C) 2001 Free Software Foundation
+/* Copyright (C) 2001, 2003 Free Software Foundation
This file is part of libgcj.
@@ -28,3 +28,15 @@ java::lang::StringBuffer::append (jint num)
count = needed;
return this;
}
+
+jboolean
+java::lang::StringBuffer::regionMatches(jint toffset, jstring other)
+{
+ jint len = other->count;
+ jchar *tptr = elements(value) + toffset;
+ jchar *optr = JvGetStringChars(other);
+ while (--len >= 0)
+ if (*tptr++ != *optr++)
+ return false;
+ return true;
+}
diff --git a/libjava/java/lang/reflect/Proxy.java b/libjava/java/lang/reflect/Proxy.java
index 82cf3722263..e327f44664b 100644
--- a/libjava/java/lang/reflect/Proxy.java
+++ b/libjava/java/lang/reflect/Proxy.java
@@ -185,7 +185,7 @@ public class Proxy implements Serializable
* Proxy.
* @serial invocation handler associated with this proxy instance
*/
- protected final InvocationHandler h;
+ protected InvocationHandler h;
/**
* Constructs a new Proxy from a subclass (usually a proxy class),
diff --git a/libjava/java/net/DatagramSocket.java b/libjava/java/net/DatagramSocket.java
index 334083a6f35..45c15fdb6e0 100644
--- a/libjava/java/net/DatagramSocket.java
+++ b/libjava/java/net/DatagramSocket.java
@@ -89,6 +89,11 @@ public class DatagramSocket
private int remotePort = -1;
/**
+ * Indicates when the socket is closed.
+ */
+ private boolean closed = false;
+
+ /**
* Creates a DatagramSocket from a specified DatagramSocketImpl instance
*
* @param impl The DatagramSocketImpl the socket will be created from
@@ -201,9 +206,13 @@ public class DatagramSocket
*/
public void close()
{
- impl.close();
- remoteAddress = null;
- remotePort = -1;
+ if (!closed)
+ {
+ impl.close();
+ remoteAddress = null;
+ remotePort = -1;
+ closed = true;
+ }
}
/**
@@ -217,9 +226,6 @@ public class DatagramSocket
*/
public InetAddress getInetAddress()
{
- if (!isConnected ())
- return null;
-
return remoteAddress;
}
@@ -234,9 +240,6 @@ public class DatagramSocket
*/
public int getPort()
{
- if (!isConnected ())
- return -1;
-
return remotePort;
}
@@ -265,7 +268,7 @@ public class DatagramSocket
// s.checkConnect("localhost", -1);
try
{
- return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
+ return (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
}
catch (SocketException ex)
{
@@ -273,12 +276,11 @@ public class DatagramSocket
try
{
- return InetAddress.getLocalHost();
+ return InetAddress.getLocalHost();
}
catch (UnknownHostException ex)
{
- // FIXME: This should never happen, so how can we avoid this construct?
- return null;
+ return null;
}
}
@@ -464,12 +466,13 @@ public class DatagramSocket
}
catch (SocketException e)
{
+ // This means simply not connected or connect not implemented.
}
}
/**
* This method disconnects this socket from the address/port it was
- * conencted to. If the socket was not connected in the first place,
+ * connected to. If the socket was not connected in the first place,
* this method does nothing.
*
* @since 1.2
@@ -477,6 +480,8 @@ public class DatagramSocket
public void disconnect()
{
impl.disconnect();
+ remoteAddress = null;
+ remotePort = -1;
}
/**
@@ -484,9 +489,9 @@ public class DatagramSocket
* will block until a packet is received from the network. On return,
* the passed in <code>DatagramPacket</code> is populated with the data
* received and all the other information about the packet.
- *
- * @param p The datagram packet to put the incoming data into.
- *
+ *
+ * @param p A <code>DatagramPacket</code> for storing the data
+ *
* @exception IOException If an error occurs.
* @exception SocketTimeoutException If setSoTimeout was previously called
* and the timeout has expired.
@@ -596,7 +601,7 @@ public class DatagramSocket
*/
public boolean isClosed()
{
- return !impl.getFileDescriptor().valid();
+ return closed;
}
/**
@@ -776,7 +781,7 @@ public class DatagramSocket
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If tc value is illegal
*
- * @see DatagramSocket:getTrafficClass
+ * @see DatagramSocket#getTrafficClass()
*
* @since 1.4
*/
@@ -795,7 +800,7 @@ public class DatagramSocket
/**
* Returns the current traffic class
*
- * @see DatagramSocket:setTrafficClass
+ * @see DatagramSocket#setTrafficClass(int tc)
*
* @exception SocketException If an error occurs
*
diff --git a/libjava/java/net/HttpURLConnection.java b/libjava/java/net/HttpURLConnection.java
index ebc0f8175f4..4cdeaf19712 100644
--- a/libjava/java/net/HttpURLConnection.java
+++ b/libjava/java/net/HttpURLConnection.java
@@ -242,6 +242,8 @@ public abstract class HttpURLConnection extends URLConnection
/**
* This error code indicates that some sort of server error occurred.
+ *
+ * @deprecated
*/
public static final int HTTP_SERVER_ERROR = 500;
diff --git a/libjava/java/net/InetAddress.java b/libjava/java/net/InetAddress.java
index 4a32352b481..4cbcb1a751b 100644
--- a/libjava/java/net/InetAddress.java
+++ b/libjava/java/net/InetAddress.java
@@ -1,12 +1,40 @@
-// INetAddress.java -- An Internet Protocol (IP) address.
+/* InetAddress.java -- Class to model an Internet address
+ Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1998, 1999, 2000, 2002 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. */
package java.net;
diff --git a/libjava/java/net/JarURLConnection.java b/libjava/java/net/JarURLConnection.java
index 6f4cd1fe7ea..ed7426512f6 100644
--- a/libjava/java/net/JarURLConnection.java
+++ b/libjava/java/net/JarURLConnection.java
@@ -1,10 +1,40 @@
-/* Copyright (C) 1999, 2000, 2002 Free Software Foundation
+/* JarURLConnection.java -- Class for manipulating remote jar files
+ Copyright (C) 1998 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
- 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. */
package java.net;
diff --git a/libjava/java/net/MulticastSocket.java b/libjava/java/net/MulticastSocket.java
index dca1a85678b..a6dca948c8b 100644
--- a/libjava/java/net/MulticastSocket.java
+++ b/libjava/java/net/MulticastSocket.java
@@ -136,7 +136,7 @@ public class MulticastSocket extends DatagramSocket
*
* @deprecated 1.2 Replaced by getTimeToLive()
*
- * @see Multicastsocket:getTimeToLive
+ * @see MulticastSocket#getTimeToLive()
*/
public byte getTTL() throws IOException
{
@@ -182,7 +182,7 @@ public class MulticastSocket extends DatagramSocket
*
* @exception SocketException If an error occurs
*
- * @see MulticastSocket:getNetworkInterface
+ * @see MulticastSocket#getNetworkInterface()
*
* @since 1.4
*/
@@ -209,7 +209,7 @@ public class MulticastSocket extends DatagramSocket
*
* @exception SocketException If an error occurs
*
- * @see MulticastSocket:setNetworkInterface
+ * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
*
* @since 1.4
*/
@@ -277,7 +277,7 @@ public class MulticastSocket extends DatagramSocket
*
* @deprecated 1.2 Replaced by <code>setTimeToLive</code>
*
- * @see MulticastSocket:setTimeToLive
+ * @see MulticastSocket#setTimeToLive(int ttl)
*/
public void setTTL(byte ttl) throws IOException
{
@@ -360,8 +360,8 @@ public class MulticastSocket extends DatagramSocket
* @exception SecurityException If a security manager exists and its
* checkMulticast method doesn't allow the operation
*
- * @see MulticastSocket:setInterface
- * @see MulticastSocket:setNetworkInterface
+ * @see MulticastSocket#setInterface(InetAddress addr)
+ * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
*
* @since 1.4
*/
@@ -395,8 +395,8 @@ public class MulticastSocket extends DatagramSocket
* @exception SecurityException If a security manager exists and its
* checkMulticast method doesn't allow the operation
*
- * @see MulticastSocket:setInterface
- * @see MulticastSocket:setNetworkInterface
+ * @see MulticastSocket#setInterface(InetAddress addr)
+ * @see MulticastSocket#setNetworkInterface(NetworkInterface netIf)
*
* @since 1.4
*/
@@ -426,17 +426,21 @@ public class MulticastSocket extends DatagramSocket
* @exception IOException If an error occurs
* @exception SecurityException If a security manager exists and its
* checkConnect or checkMulticast method doesn't allow the operation
+ *
+ * @deprecated
*/
public synchronized void send(DatagramPacket p, byte ttl) throws IOException
{
SecurityManager s = System.getSecurityManager();
if (s != null)
{
- InetAddress addr = p.getAddress();
- if (addr.isMulticastAddress())
- s.checkMulticast(addr, ttl);
- else
- s.checkConnect(addr.getHostAddress(), p.getPort());
+ InetAddress addr = p.getAddress();
+ if (addr.isMulticastAddress())
+ s.checkPermission (new SocketPermission
+ (addr.getHostName () + p.getPort (),
+ "accept,connect"));
+ else
+ s.checkConnect(addr.getHostAddress(), p.getPort());
}
int oldttl = impl.getTimeToLive();
diff --git a/libjava/java/net/NetPermission.java b/libjava/java/net/NetPermission.java
index 1807d457d6c..593b63504a8 100644
--- a/libjava/java/net/NetPermission.java
+++ b/libjava/java/net/NetPermission.java
@@ -1,5 +1,5 @@
/* NetPermission.java -- A class for basic miscellaneous network permission
- Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2000, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
diff --git a/libjava/java/net/NetworkInterface.java b/libjava/java/net/NetworkInterface.java
index 32c2cd53db0..9f8e8242963 100644
--- a/libjava/java/net/NetworkInterface.java
+++ b/libjava/java/net/NetworkInterface.java
@@ -1,5 +1,5 @@
/* NetworkInterface.java
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -200,7 +200,6 @@ public final class NetworkInterface
return false;
NetworkInterface tmp = (NetworkInterface) obj;
-
return (name.equals (tmp.name)
&& inetAddresses.equals (tmp.inetAddresses));
}
diff --git a/libjava/java/net/PlainDatagramSocketImpl.java b/libjava/java/net/PlainDatagramSocketImpl.java
index 118021d189f..a526aca31d3 100644
--- a/libjava/java/net/PlainDatagramSocketImpl.java
+++ b/libjava/java/net/PlainDatagramSocketImpl.java
@@ -1,12 +1,40 @@
-// PlainDatagramSocketImpl.java - Implementation of DatagramSocketImpl.
+/* PlainDatagramSocketImpl.java -- Default DatagramSocket implementation
+ Copyright (C) 1998, 1999, 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1999, 2002 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. */
package java.net;
import java.io.IOException;
diff --git a/libjava/java/net/PlainSocketImpl.java b/libjava/java/net/PlainSocketImpl.java
index 788795d4c6a..ed63b57bc43 100644
--- a/libjava/java/net/PlainSocketImpl.java
+++ b/libjava/java/net/PlainSocketImpl.java
@@ -1,12 +1,40 @@
-// PlainSocketImpl.java - Implementation of SocketImpl.
+/* PlainSocketImpl.java -- Default socket implementation
+ Copyright (C) 1998, 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1999 , 2002 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. */
package java.net;
diff --git a/libjava/java/net/Socket.java b/libjava/java/net/Socket.java
index 005fd0461b2..7070838c7e8 100644
--- a/libjava/java/net/Socket.java
+++ b/libjava/java/net/Socket.java
@@ -692,10 +692,10 @@ public class Socket
* this option implies that there is no timeout (ie, operations will
* block forever). On systems that have separate read and write timeout
* values, this method returns the read timeout. This
- * value is in thousandths of a second (****????*****)
+ * value is in milliseconds.
*
- * @param timeout The length of the timeout in thousandth's of a second or
- * 0 if not set
+ * @param timeout The length of the timeout in milliseconds, or
+ * 0 to indicate no timeout.
*
* @exception SocketException If an error occurs or Socket not connected
*
@@ -1017,7 +1017,7 @@ public class Socket
*
* @exception SocketException If an error occurs
*
- * @see Socket:setTrafficClass
+ * @see Socket#setTrafficClass(int tc)
*
* @since 1.4
*/
@@ -1042,7 +1042,7 @@ public class Socket
* @exception SocketException If an error occurs
* @exception IllegalArgumentException If tc value is illegal
*
- * @see Socket:getTrafficClass
+ * @see Socket#getTrafficClass()
*
* @since 1.4
*/
diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java
index 98e7d5f7c31..33e42ef9a7d 100644
--- a/libjava/java/net/URL.java
+++ b/libjava/java/net/URL.java
@@ -472,8 +472,8 @@ public final class URL implements Serializable
*/
public String getPath()
{
- int quest = file.indexOf('?');
- return quest < 0 ? file : file.substring(0, quest);
+ int quest = (file == null) ? -1 : file.indexOf('?');
+ return quest < 0 ? getFile() : file.substring(0, quest);
}
/**
@@ -544,7 +544,7 @@ public final class URL implements Serializable
*/
public String getUserInfo ()
{
- int at = host.indexOf('@');
+ int at = (host == null) ? -1 : host.indexOf('@');
return at < 0 ? null : host.substring(0, at);
}
@@ -552,11 +552,11 @@ public final class URL implements Serializable
* Returns the query of the URL. This is the part of the file before the
* '?'.
*
- * @ return the query part of the file, or null when there is no query part.
+ * @return the query part of the file, or null when there is no query part.
*/
public String getQuery ()
{
- int quest = file.indexOf('?');
+ int quest = (file == null) ? -1 : file.indexOf('?');
return quest < 0 ? null : file.substring(quest + 1, file.length());
}
diff --git a/libjava/java/net/URLConnection.java b/libjava/java/net/URLConnection.java
index 0b39fe88ea6..98204308b9e 100644
--- a/libjava/java/net/URLConnection.java
+++ b/libjava/java/net/URLConnection.java
@@ -1,17 +1,48 @@
-// URLConnection.java - Superclass of all communications links between
-// an application and a URL.
+/* URLConnection.java -- Abstract superclass for reading from URL's
+ Copyright (C) 1998, 2002 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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. */
-/* Copyright (C) 1999, 2000 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. */
package java.net;
-import java.io.*;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.security.Permission;
+import java.security.AllPermission;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -19,31 +50,48 @@ import java.util.Locale;
import java.util.Hashtable;
import java.util.Map;
import java.util.StringTokenizer;
-import java.security.Permission;
-import java.security.AllPermission;
import gnu.gcj.io.MimeTypes;
/**
- * @author Warren Levy <warrenl@cygnus.com>
- * @date March 5, 1999.
- */
-
-/**
* Written using on-line Java Platform 1.2 API Specification, as well
* as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998).
* Status: One guessContentTypeFrom... methods not implemented.
* getContent method assumes content type from response; see comment there.
*/
+/**
+ * This class models a connection that retrieves the information pointed
+ * to by a URL object. This is typically a connection to a remote node
+ * on the network, but could be a simple disk read.
+ * <p>
+ * A URLConnection object is normally created by calling the openConnection()
+ * method of a URL object. This method is somewhat misnamed because it does
+ * not actually open the connection. Instead, it return an unconnected
+ * instance of this object. The caller then has the opportunity to set
+ * various connection options prior to calling the actual connect() method.
+ * <p>
+ * After the connection has been opened, there are a number of methods in
+ * this class that access various attributes of the data, typically
+ * represented by headers sent in advance of the actual data itself.
+ * <p>
+ * Also of note are the getInputStream and getContent() methods which allow
+ * the caller to retrieve the actual data from the connection. Note that
+ * for some types of connections, writing is also allowed. The setDoOutput()
+ * method must be called prior to connecing in order to enable this, then
+ * the getOutputStream method called after the connection in order to
+ * obtain a stream to write the output to.
+ * <p>
+ * The getContent() method is of particular note. This method returns an
+ * Object that encapsulates the data returned. There is no way do determine
+ * the type of object that will be returned in advance. This is determined
+ * by the actual content handlers as described in the description of that
+ * method.
+ *
+ * @author Aaron M. Renn <arenn@urbanophile.com>
+ * @author Warren Levy <warrenl@cygnus.com>
+ */
public abstract class URLConnection
{
- protected URL url;
- protected boolean doInput = true;
- protected boolean doOutput = false;
- protected boolean allowUserInteraction;
- protected boolean useCaches;
- protected long ifModifiedSince = 0L;
- protected boolean connected = false;
private static boolean defaultAllowUserInteraction = false;
private static boolean defaultUseCaches = true;
private static FileNameMap fileNameMap; // Set by the URLConnection subclass.
@@ -55,12 +103,56 @@ public abstract class URLConnection
private static boolean dateformats_initialized = false;
/**
+ * This is the URL associated with this connection
+ */
+ protected URL url;
+
+ /**
+ * Indicates whether or not input can be read from this URL
+ */
+ protected boolean doInput = true;
+
+ /**
+ * Indicates whether or not output can be sent to this URL
+ */
+ protected boolean doOutput = false;
+
+ protected boolean allowUserInteraction;
+
+ /**
+ * If this flag is set, the protocol is allowed to cache data whenever
+ * it can (caching is not guaranteed). If it is not set, the protocol
+ * must a get a fresh copy of the data.
+ * <p>
+ * This field is set by the setUseCaches method and returned by the
+ * getUseCaches method.
+ *
+ * Its default value is that determined by the last invocation of
+ * setDefaultUseCaches
+ */
+ protected boolean useCaches;
+
+ /**
+ * If this value is non-zero, then the connection will only attempt to
+ * fetch the document pointed to by the URL if the document has been
+ * modified more recently than the date set in this variable. That date
+ * should be specified as the number of seconds since 1/1/1970 GMT.
+ */
+ protected long ifModifiedSince = 0L;
+
+ /**
+ * Indicates whether or not a connection has been established to the
+ * destination specified in the URL
+ */
+ protected boolean connected = false;
+
+ /**
* Creates a URL connection to a given URL. A real connection is not made.
* Use #connect to do this.
*
* @param url The Object to create the URL connection to
*
- * @see URLConnection:connect
+ * @see URLConnection#connect()
*/
protected URLConnection(URL url)
{
@@ -472,8 +564,8 @@ public abstract class URLConnection
* @exception IllegalStateException If already connected
* @exception NullPointerException If key is null
*
- * @see URLConnection:getRequestProperty(String key)
- * @see URLConnection:addRequestProperty(String key, String value)
+ * @see URLConnection#getRequestProperty(String key)
+ * @see URLConnection#addRequestProperty(String key, String value)
*/
public void setRequestProperty(String key, String value)
{
@@ -494,8 +586,8 @@ public abstract class URLConnection
* @exception IllegalStateException If already connected
* @exception NullPointerException If key is null
*
- * @see URLConnection:getRequestProperty(String key)
- * @see URLConnection:setRequestProperty(String key, String value)
+ * @see URLConnection#getRequestProperty(String key)
+ * @see URLConnection#setRequestProperty(String key, String value)
*
* @since 1.4
*/
@@ -517,8 +609,8 @@ public abstract class URLConnection
*
* @exception IllegalStateException If already connected
*
- * @see URLConnection:setRequestProperty(String key, String value)
- * @see URLConnection:addRequestProperty(String key, String value)
+ * @see URLConnection#setRequestProperty(String key, String value)
+ * @see URLConnection#addRequestProperty(String key, String value)
*
* @return Value of the property.
*/
@@ -554,7 +646,7 @@ public abstract class URLConnection
*
* @deprecated 1.3 The method setRequestProperty should be used instead
*
- * @see URLConnection:setRequestProperty
+ * @see URLConnectionr#setRequestProperty(String key, String value)
*/
public static void setDefaultRequestProperty(String key, String value)
{
@@ -571,7 +663,7 @@ public abstract class URLConnection
*
* @deprecated 1.3 The method getRequestProperty should be used instead
*
- * @see URLConnection:getRequestProperty
+ * @see URLConnection#getRequestProperty(String key)
*/
public static String getDefaultRequestProperty(String key)
{
diff --git a/libjava/java/net/URLDecoder.java b/libjava/java/net/URLDecoder.java
index 0a9067160b2..4fe77d3c933 100644
--- a/libjava/java/net/URLDecoder.java
+++ b/libjava/java/net/URLDecoder.java
@@ -77,6 +77,8 @@ public class URLDecoder
* @param s the String to convert
*
* @return the converted String
+ *
+ * @deprecated
*/
public static String decode(String s)
{
diff --git a/libjava/java/net/URLEncoder.java b/libjava/java/net/URLEncoder.java
index 0f106e820de..f03b8a1d8f8 100644
--- a/libjava/java/net/URLEncoder.java
+++ b/libjava/java/net/URLEncoder.java
@@ -71,6 +71,8 @@ public class URLEncoder
* @param s The String to convert
*
* @return The converted String
+ *
+ * @deprecated
*/
public static String encode(String s)
{
diff --git a/libjava/java/net/URLStreamHandler.java b/libjava/java/net/URLStreamHandler.java
index d3dd3ccf0f7..37183b9633e 100644
--- a/libjava/java/net/URLStreamHandler.java
+++ b/libjava/java/net/URLStreamHandler.java
@@ -176,7 +176,7 @@ public abstract class URLStreamHandler
}
else if (start < end)
{
- // Context is available, but only override it if there is a new file.
+ // Context is available, but only override it if there is a new file.
char sepChar = '/';
int lastSlash = file.lastIndexOf (sepChar);
if (lastSlash < 0 && File.separatorChar != sepChar
@@ -451,8 +451,11 @@ public abstract class URLStreamHandler
int size = protocol.length() + host.length() + file.length() + 24;
StringBuffer sb = new StringBuffer(size);
- sb.append(protocol);
- sb.append(':');
+ if (protocol != null && protocol.length() > 0)
+ {
+ sb.append(protocol);
+ sb.append(":");
+ }
if (host.length() != 0)
sb.append("//").append(host);
diff --git a/libjava/java/net/natInetAddress.cc b/libjava/java/net/natInetAddress.cc
deleted file mode 100644
index c0083714287..00000000000
--- a/libjava/java/net/natInetAddress.cc
+++ /dev/null
@@ -1,357 +0,0 @@
-// natInetAddress.cc
-
-/* Copyright (C) 1998, 1999, 2000 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>
-
-#ifdef WIN32
-
-#include <windows.h>
-#include <winsock.h>
-#undef STRICT
-
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 64
-#endif /* MAXHOSTNAMELEN */
-
-#else /* WIN32 */
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-
-#include <sys/param.h>
-#include <sys/types.h>
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#endif /* WIN32 */
-
-#include <gcj/cni.h>
-#include <jvm.h>
-#include <java/net/InetAddress.h>
-#include <java/net/UnknownHostException.h>
-#include <java/lang/SecurityException.h>
-
-#if defined(HAVE_UNAME) && ! defined(HAVE_GETHOSTNAME)
-#include <sys/utsname.h>
-#endif
-
-#ifndef HAVE_GETHOSTNAME_DECL
-extern "C" int gethostname (char *name, int namelen);
-#endif
-
-#ifdef DISABLE_JAVA_NET
-
-jbyteArray
-java::net::InetAddress::aton (jstring)
-{
- return NULL;
-}
-
-jint
-java::net::InetAddress::getFamily (jbyteArray bytes)
-{
- return 0;
-}
-
-JArray<java::net::InetAddress*> *
-java::net::InetAddress::lookup (jstring, java::net::InetAddress *, jboolean)
-{
- return NULL;
-}
-
-jstring
-java::net::InetAddress::getLocalHostname ()
-{
- return NULL;
-}
-
-#else /* DISABLE_JAVA_NET */
-
-jbyteArray
-java::net::InetAddress::aton (jstring host)
-{
- char *hostname;
- char buf[100];
- int len = JvGetStringUTFLength(host);
- if (len < 100)
- hostname = buf;
- else
- hostname = (char*) _Jv_AllocBytes (len+1);
- JvGetStringUTFRegion (host, 0, host->length(), hostname);
- buf[len] = '\0';
- char* bytes = NULL;
- int blen = 0;
-#ifdef HAVE_INET_ATON
- struct in_addr laddr;
- if (inet_aton (hostname, &laddr))
- {
- bytes = (char*) &laddr;
- blen = 4;
- }
-#elif defined(HAVE_INET_ADDR)
-#if ! HAVE_IN_ADDR_T
- typedef jint in_addr_t;
-#endif
- in_addr_t laddr = inet_addr (hostname);
- if (laddr != (in_addr_t)(-1))
- {
- bytes = (char*) &laddr;
- blen = 4;
- }
-#endif
-#if defined (HAVE_INET_PTON) && defined (HAVE_INET6)
- char inet6_addr[16];
- if (len != 0 && inet_pton (AF_INET6, hostname, inet6_addr) > 0)
- {
- bytes = inet6_addr;
- blen = 16;
- }
-#endif
- if (blen == 0)
- return NULL;
- jbyteArray result = JvNewByteArray (blen);
- memcpy (elements (result), bytes, blen);
- return result;
-}
-
-jint
-java::net::InetAddress::getFamily (jbyteArray bytes)
-{
- int len = bytes->length;
- if (len == 4)
- return AF_INET;
-#ifdef HAVE_INET6
- else if (len == 16)
- return AF_INET6;
-#endif /* HAVE_INET6 */
- else
- JvFail ("unrecognized size");
-}
-
-
-JArray<java::net::InetAddress*> *
-java::net::InetAddress::lookup (jstring host, java::net::InetAddress* iaddr,
- jboolean all)
-{
- struct hostent *hptr = NULL;
-#if defined (HAVE_GETHOSTBYNAME_R) || defined (HAVE_GETHOSTBYADDR_R)
- struct hostent hent_r;
-#if HAVE_STRUCT_HOSTENT_DATA
- struct hostent_data fixed_buffer, *buffer_r = &fixed_buffer;
-#else
-#if defined (__GLIBC__)
- // FIXME: in glibc, gethostbyname_r returns NETDB_INTERNAL to herr and
- // ERANGE to errno if the buffer size is too small, rather than what is
- // expected here. We work around this by setting a bigger buffer size and
- // hoping that it is big enough.
- char fixed_buffer[1024];
-#else
- char fixed_buffer[200];
-#endif
- char *buffer_r = fixed_buffer;
- int size_r = sizeof (fixed_buffer);
-#endif
-#endif
-
- if (host != NULL)
- {
- char *hostname;
- char buf[100];
- int len = JvGetStringUTFLength(host);
- if (len < 100)
- hostname = buf;
- else
- hostname = (char*) _Jv_AllocBytes (len+1);
- JvGetStringUTFRegion (host, 0, host->length(), hostname);
- buf[len] = '\0';
-#ifdef HAVE_GETHOSTBYNAME_R
- while (true)
- {
- int ok;
-#if HAVE_STRUCT_HOSTENT_DATA
- ok = ! gethostbyname_r (hostname, &hent_r, buffer_r);
-#else
- int herr = 0;
-#ifdef GETHOSTBYNAME_R_RETURNS_INT
- ok = ! gethostbyname_r (hostname, &hent_r, buffer_r, size_r,
- &hptr, &herr);
-#else
- hptr = gethostbyname_r (hostname, &hent_r, buffer_r, size_r, &herr);
- ok = hptr != NULL;
-#endif /* GETHOSTNAME_R_RETURNS_INT */
- if (! ok && herr == ERANGE)
- {
- size_r *= 2;
- buffer_r = (char *) _Jv_AllocBytes (size_r);
- }
- else
-#endif /* HAVE_STRUCT_HOSTENT_DATA */
- break;
- }
-#else
- // FIXME: this is insufficient if some other piece of code calls
- // this gethostbyname.
- JvSynchronize sync (java::net::InetAddress::localhostAddress);
- hptr = gethostbyname (hostname);
-#endif /* HAVE_GETHOSTBYNAME_R */
- }
- else
- {
- jbyteArray bytes = iaddr->addr;
- char *chars = (char*) elements (bytes);
- int len = bytes->length;
- int type;
- char *val;
- if (len == 4)
- {
- val = chars;
- type = iaddr->family = AF_INET;
- }
-#ifdef HAVE_INET6
- else if (len == 16)
- {
- val = (char *) &chars;
- type = iaddr->family = AF_INET6;
- }
-#endif /* HAVE_INET6 */
- else
- JvFail ("unrecognized size");
-
-#ifdef HAVE_GETHOSTBYADDR_R
- while (true)
- {
- int ok;
-#if HAVE_STRUCT_HOSTENT_DATA
- ok = ! gethostbyaddr_r (val, len, type, &hent_r, buffer_r);
-#else
- int herr = 0;
-#ifdef GETHOSTBYADDR_R_RETURNS_INT
- ok = ! gethostbyaddr_r (val, len, type, &hent_r,
- buffer_r, size_r, &hptr, &herr);
-#else
- hptr = gethostbyaddr_r (val, len, type, &hent_r,
- buffer_r, size_r, &herr);
- ok = hptr != NULL;
-#endif /* GETHOSTBYADDR_R_RETURNS_INT */
- if (! ok && herr == ERANGE)
- {
- size_r *= 2;
- buffer_r = (char *) _Jv_AllocBytes (size_r);
- }
- else
-#endif /* HAVE_STRUCT_HOSTENT_DATA */
- break;
- }
-#else /* HAVE_GETHOSTBYADDR_R */
- // FIXME: this is insufficient if some other piece of code calls
- // this gethostbyaddr.
- JvSynchronize sync (java::net::InetAddress::localhostAddress);
- hptr = gethostbyaddr (val, len, type);
-#endif /* HAVE_GETHOSTBYADDR_R */
- }
- if (hptr != NULL)
- {
- if (!all)
- host = JvNewStringUTF (hptr->h_name);
- java::lang::SecurityException *ex = checkConnect (host);
- if (ex != NULL)
- {
- if (iaddr == NULL || iaddr->addr == NULL)
- throw ex;
- hptr = NULL;
- }
- }
- if (hptr == NULL)
- {
- if (iaddr != NULL && iaddr->addr != NULL)
- {
- iaddr->hostName = iaddr->getHostAddress();
- return NULL;
- }
- else
- throw new java::net::UnknownHostException(host);
- }
- int count;
- if (all)
- {
- char** ptr = hptr->h_addr_list;
- count = 0;
- while (*ptr++) count++;
- }
- else
- count = 1;
- JArray<java::net::InetAddress*> *result;
- java::net::InetAddress** iaddrs;
- if (all)
- {
- result = java::net::InetAddress::allocArray (count);
- iaddrs = elements (result);
- }
- else
- {
- result = NULL;
- iaddrs = &iaddr;
- }
-
- for (int i = 0; i < count; i++)
- {
- if (iaddrs[i] == NULL)
- iaddrs[i] = new java::net::InetAddress (NULL, NULL);
- if (iaddrs[i]->hostName == NULL)
- iaddrs[i]->hostName = host;
- if (iaddrs[i]->addr == NULL)
- {
- char *bytes = hptr->h_addr_list[i];
- iaddrs[i]->addr = JvNewByteArray (hptr->h_length);
- iaddrs[i]->family = getFamily (iaddrs[i]->addr);
- memcpy (elements (iaddrs[i]->addr), bytes, hptr->h_length);
- }
- }
- return result;
-}
-
-jstring
-java::net::InetAddress::getLocalHostname ()
-{
- char *chars;
-#ifdef HAVE_GETHOSTNAME
- char buffer[MAXHOSTNAMELEN];
- if (gethostname (buffer, MAXHOSTNAMELEN))
- return NULL;
- chars = buffer;
-#elif HAVE_UNAME
- struct utsname stuff;
- if (uname (&stuff) != 0)
- return NULL;
- chars = stuff.nodename;
-#else
- return NULL;
-#endif
- // It is admittedly non-optimal to convert the hostname to Unicode
- // only to convert it back in getByName, but simplicity wins. Note
- // that unless there is a SecurityManager, we only get called once
- // anyway, thanks to the InetAddress.localhost cache.
- return JvNewStringUTF (chars);
-}
-
-#endif /* DISABLE_JAVA_NET */
diff --git a/libjava/java/net/natNetworkInterface.cc b/libjava/java/net/natNetworkInterface.cc
deleted file mode 100644
index 65bcf16a2c5..00000000000
--- a/libjava/java/net/natNetworkInterface.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// natNetworkInterface.cc
-
-/* Copyright (C) 2002 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 <platform.h>
-
-#ifdef WIN32
-
-#include <windows.h>
-#include <winsock.h>
-#undef STRICT
-
-#else /* WIN32 */
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#include <sys/param.h>
-#include <sys/types.h>
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#define BSD_COMP /* Get FIONREAD on Solaris2. */
-#include <sys/ioctl.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-
-#endif /* WIN32 */
-
-#include <gcj/cni.h>
-#include <jvm.h>
-#include <java/net/NetworkInterface.h>
-#include <java/net/Inet4Address.h>
-#include <java/net/SocketException.h>
-#include <java/util/Vector.h>
-
-#ifdef DISABLE_JAVA_NET
-
-::java::util::Vector*
-java::net::NetworkInterface::getRealNetworkInterfaces ()
-{
- ::java::util::Vector* ht = new ::java::util::Vector();
- return ht;
-}
-
-#else /* DISABLE_JAVA_NET */
-
-::java::util::Vector*
-java::net::NetworkInterface::getRealNetworkInterfaces ()
-{
-#ifdef WIN32
- throw new ::java::net::SocketException;
-#else
- int fd;
- int num_interfaces = 0;
- struct ifconf if_data;
- struct ifreq* if_record;
- ::java::util::Vector* ht = new ::java::util::Vector ();
-
- if_data.ifc_len = 0;
- if_data.ifc_buf = NULL;
-
- // Open a (random) socket to have a file descriptor for the ioctl calls.
- fd = _Jv_socket (PF_INET, SOCK_DGRAM, htons (IPPROTO_IP));
-
- if (fd < 0)
- throw new ::java::net::SocketException;
-
- // Get all interfaces. If not enough buffers are available try it
- // with a bigger buffer size.
- do
- {
- num_interfaces += 16;
-
- if_data.ifc_len = sizeof (struct ifreq) * num_interfaces;
- if_data.ifc_buf =
- (char*) _Jv_Realloc (if_data.ifc_buf, if_data.ifc_len);
-
- // Try to get all local interfaces.
- if (::ioctl (fd, SIOCGIFCONF, &if_data) < 0)
- throw new java::net::SocketException;
- }
- while (if_data.ifc_len >= (sizeof (struct ifreq) * num_interfaces));
-
- // Get addresses of all interfaces.
- if_record = if_data.ifc_req;
-
- for (int n = 0; n < if_data.ifc_len; n += sizeof (struct ifreq))
- {
- struct ifreq ifr;
-
- memset (&ifr, 0, sizeof (ifr));
- strcpy (ifr.ifr_name, if_record->ifr_name);
-
- // Try to get the IPv4-address of the local interface
- if (::ioctl (fd, SIOCGIFADDR, &ifr) < 0)
- throw new java::net::SocketException;
-
- int len = 4;
- struct sockaddr_in sa = *((sockaddr_in*) &(ifr.ifr_addr));
-
- jbyteArray baddr = JvNewByteArray (len);
- memcpy (elements (baddr), &(sa.sin_addr), len);
- jstring if_name = JvNewStringLatin1 (if_record->ifr_name);
- Inet4Address* address =
- new java::net::Inet4Address (baddr, JvNewStringLatin1 (""));
- ht->add (new NetworkInterface (if_name, address));
- if_record++;
- }
-
-#ifdef HAVE_INET6
- // FIXME: read /proc/net/if_inet6 (on Linux 2.4)
-#endif
-
- _Jv_Free (if_data.ifc_buf);
-
- if (fd >= 0)
- _Jv_close (fd);
-
- return ht;
-#endif /* WIN32 */
-}
-
-#endif // DISABLE_JAVA_NET //
diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc
deleted file mode 100644
index 5546061c503..00000000000
--- a/libjava/java/net/natPlainDatagramSocketImpl.cc
+++ /dev/null
@@ -1,872 +0,0 @@
-/* Copyright (C) 1999, 2000, 2002 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 <platform.h>
-
-#ifdef WIN32
-
-#include <errno.h>
-#include <string.h>
-
-#else /* WIN32 */
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#include <errno.h>
-#include <string.h>
-
-#endif /* WIN32 */
-
-#if HAVE_BSTRING_H
-// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2
-#include <bstring.h>
-#endif
-
-#include <gcj/cni.h>
-#include <java/io/IOException.h>
-#include <java/io/InterruptedIOException.h>
-#include <java/net/BindException.h>
-#include <java/net/SocketException.h>
-#include <java/net/PlainDatagramSocketImpl.h>
-#include <java/net/InetAddress.h>
-#include <java/net/NetworkInterface.h>
-#include <java/net/DatagramPacket.h>
-#include <java/net/PortUnreachableException.h>
-#include <java/lang/InternalError.h>
-#include <java/lang/Object.h>
-#include <java/lang/Boolean.h>
-#include <java/lang/Integer.h>
-
-#ifdef DISABLE_JAVA_NET
-
-void
-java::net::PlainDatagramSocketImpl::create ()
-{
- throw new SocketException (
- JvNewStringLatin1 ("DatagramSocketImpl.create: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::bind (jint, java::net::InetAddress *)
-{
- throw new BindException (
- JvNewStringLatin1 ("DatagramSocketImpl.bind: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint)
-{
- throw new SocketException (
- JvNewStringLatin1 ("DatagramSocketImpl.connect: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::disconnect ()
-{
- throw new SocketException (
- JvNewStringLatin1 ("DatagramSocketImpl.disconnect: unimplemented"));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.peek: unimplemented"));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.peekData: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::close ()
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.close: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.send: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.receive: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::setTimeToLive (jint)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.setTimeToLive: unimplemented"));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::getTimeToLive ()
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.getTimeToLive: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *,
- java::net::NetworkInterface *,
- jboolean)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("DatagramSocketImpl.mcastGrp: unimplemented"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::setOption (jint, java::lang::Object *)
-{
- throw new SocketException (
- JvNewStringLatin1 ("DatagramSocketImpl.setOption: unimplemented"));
-}
-
-java::lang::Object *
-java::net::PlainDatagramSocketImpl::getOption (jint)
-{
- throw new SocketException (
- JvNewStringLatin1 ("DatagramSocketImpl.getOption: unimplemented"));
-}
-
-#else /* DISABLE_JAVA_NET */
-
-
-union SockAddr
-{
- struct sockaddr_in address;
-#ifdef HAVE_INET6
- struct sockaddr_in6 address6;
-#endif
-};
-
-union McastReq
-{
-#if HAVE_STRUCT_IP_MREQ
- struct ip_mreq mreq;
-#endif
-#if HAVE_STRUCT_IPV6_MREQ
- struct ipv6_mreq mreq6;
-#endif
-};
-
-union InAddr
-{
- struct in_addr addr;
-#ifdef HAVE_INET6
- struct in6_addr addr6;
-#endif
-};
-
-
-// FIXME: routines here and/or in natPlainSocketImpl.cc could throw
-// NoRouteToHostException; also consider UnknownHostException, ConnectException.
-
-void
-java::net::PlainDatagramSocketImpl::create ()
-{
- int sock = _Jv_socket (AF_INET, SOCK_DGRAM, 0);
-
- if (sock < 0)
- {
- char* strerr = strerror (errno);
- throw new java::net::SocketException (JvNewStringUTF (strerr));
- }
-
- _Jv_platform_close_on_exec (sock);
-
- // We use fnum in place of fd here. From leaving fd null we avoid
- // the double close problem in FileDescriptor.finalize.
- fnum = sock;
-}
-
-void
-java::net::PlainDatagramSocketImpl::bind (jint lport,
- java::net::InetAddress *host)
-{
- union SockAddr u;
- struct sockaddr *ptr = (struct sockaddr *) &u.address;
- // FIXME: Use getaddrinfo() to get actual protocol instead of assuming ipv4.
- jbyteArray haddress = host->addr;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
-
- if (len == 4)
- {
- u.address.sin_family = AF_INET;
-
- if (host != NULL)
- memcpy (&u.address.sin_addr, bytes, len);
- else
- u.address.sin_addr.s_addr = htonl (INADDR_ANY);
-
- len = sizeof (struct sockaddr_in);
- u.address.sin_port = htons (lport);
- }
-#ifdef HAVE_INET6
- else if (len == 16)
- {
- u.address6.sin6_family = AF_INET6;
- memcpy (&u.address6.sin6_addr, bytes, len);
- len = sizeof (struct sockaddr_in6);
- u.address6.sin6_port = htons (lport);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
- if (_Jv_bind (fnum, ptr, len) == 0)
- {
- socklen_t addrlen = sizeof(u);
-
- if (lport != 0)
- localPort = lport;
- else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0)
- localPort = ntohs (u.address.sin_port);
- else
- goto error;
-
- /* Allow broadcast by default. */
- int broadcast = 1;
- if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &broadcast,
- sizeof (broadcast)) != 0)
- goto error;
-
- return;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::BindException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainDatagramSocketImpl::connect (java::net::InetAddress *, jint)
-{
- throw new ::java::lang::InternalError (JvNewStringLatin1 (
- "PlainDatagramSocketImpl::connect: not implemented yet"));
-}
-
-void
-java::net::PlainDatagramSocketImpl::disconnect ()
-{
- throw new ::java::lang::InternalError (JvNewStringLatin1 (
- "PlainDatagramSocketImpl::disconnect: not implemented yet"));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::peek (java::net::InetAddress *i)
-{
- // FIXME: Deal with Multicast and if the socket is connected.
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- ssize_t retlen =
- ::recvfrom (fnum, (char *) NULL, 0, MSG_PEEK, (sockaddr*) &u,
- &addrlen);
- if (retlen < 0)
- goto error;
- // FIXME: Deal with Multicast addressing and if the socket is connected.
- jbyteArray raddr;
- jint rport;
- if (u.address.sin_family == AF_INET)
- {
- raddr = JvNewByteArray (4);
- memcpy (elements (raddr), &u.address.sin_addr, 4);
- rport = ntohs (u.address.sin_port);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- raddr = JvNewByteArray (16);
- memcpy (elements (raddr), &u.address6.sin6_addr, 16);
- rport = ntohs (u.address6.sin6_port);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid family"));
-
- i->addr = raddr;
- return rport;
- error:
- char* strerr = strerror (errno);
-
- if (errno == ECONNREFUSED)
- throw new PortUnreachableException (JvNewStringUTF (strerr));
-
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::peekData(java::net::DatagramPacket *p)
-{
- // FIXME: Deal with Multicast and if the socket is connected.
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- jbyte *dbytes = elements (p->getData());
- ssize_t retlen = 0;
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- // Do timeouts via select since SO_RCVTIMEO is not always available.
- if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE)
- {
- fd_set rset;
- struct timeval tv;
- FD_ZERO(&rset);
- FD_SET(fnum, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
- int retval;
- if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
- goto error;
- else if (retval == 0)
- throw new java::io::InterruptedIOException ();
- }
-#endif /* WIN32 */
-
- retlen =
- ::recvfrom (fnum, (char *) dbytes, p->getLength(), MSG_PEEK, (sockaddr*) &u,
- &addrlen);
- if (retlen < 0)
- goto error;
- // FIXME: Deal with Multicast addressing and if the socket is connected.
- jbyteArray raddr;
- jint rport;
- if (u.address.sin_family == AF_INET)
- {
- raddr = JvNewByteArray (4);
- memcpy (elements (raddr), &u.address.sin_addr, 4);
- rport = ntohs (u.address.sin_port);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- raddr = JvNewByteArray (16);
- memcpy (elements (raddr), &u.address6.sin6_addr, 16);
- rport = ntohs (u.address6.sin6_port);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid family"));
-
- p->setAddress (new InetAddress (raddr, NULL));
- p->setPort (rport);
- p->setLength ((jint) retlen);
- return rport;
-
- error:
- char* strerr = strerror (errno);
-
- if (errno == ECONNREFUSED)
- throw new PortUnreachableException (JvNewStringUTF (strerr));
-
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-// Close(shutdown) the socket.
-void
-java::net::PlainDatagramSocketImpl::close ()
-{
- // Avoid races from asynchronous finalization.
- JvSynchronize sync (this);
-
- // The method isn't declared to throw anything, so we disregard
- // the return value.
- _Jv_close (fnum);
- fnum = -1;
- timeout = 0;
-}
-
-void
-java::net::PlainDatagramSocketImpl::send (java::net::DatagramPacket *p)
-{
- // FIXME: Deal with Multicast and if the socket is connected.
- jint rport = p->getPort();
- union SockAddr u;
- jbyteArray haddress = p->getAddress()->addr;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
- struct sockaddr *ptr = (struct sockaddr *) &u.address;
- jbyte *dbytes = elements (p->getData());
- if (len == 4)
- {
- u.address.sin_family = AF_INET;
- memcpy (&u.address.sin_addr, bytes, len);
- len = sizeof (struct sockaddr_in);
- u.address.sin_port = htons (rport);
- }
-#ifdef HAVE_INET6
- else if (len == 16)
- {
- u.address6.sin6_family = AF_INET6;
- memcpy (&u.address6.sin6_addr, bytes, len);
- len = sizeof (struct sockaddr_in6);
- u.address6.sin6_port = htons (rport);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
- if (::sendto (fnum, (char *) dbytes, p->getLength(), 0, ptr, len) >= 0)
- return;
-
- char* strerr = strerror (errno);
-
- if (errno == ECONNREFUSED)
- throw new PortUnreachableException (JvNewStringUTF (strerr));
-
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainDatagramSocketImpl::receive (java::net::DatagramPacket *p)
-{
- // FIXME: Deal with Multicast and if the socket is connected.
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- jbyte *dbytes = elements (p->getData());
- ssize_t retlen = 0;
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- // Do timeouts via select since SO_RCVTIMEO is not always available.
- if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE)
- {
- fd_set rset;
- struct timeval tv;
- FD_ZERO(&rset);
- FD_SET(fnum, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
- int retval;
- if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
- goto error;
- else if (retval == 0)
- throw new java::io::InterruptedIOException ();
- }
-#endif /* WIN32 */
-
- retlen =
- ::recvfrom (fnum, (char *) dbytes, p->getLength(), 0, (sockaddr*) &u,
- &addrlen);
- if (retlen < 0)
- goto error;
- // FIXME: Deal with Multicast addressing and if the socket is connected.
- jbyteArray raddr;
- jint rport;
- if (u.address.sin_family == AF_INET)
- {
- raddr = JvNewByteArray (4);
- memcpy (elements (raddr), &u.address.sin_addr, 4);
- rport = ntohs (u.address.sin_port);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- raddr = JvNewByteArray (16);
- memcpy (elements (raddr), &u.address6.sin6_addr, 16);
- rport = ntohs (u.address6.sin6_port);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid family"));
-
- p->setAddress (new InetAddress (raddr, NULL));
- p->setPort (rport);
- p->setLength ((jint) retlen);
- return;
-
- error:
- char* strerr = strerror (errno);
-
- if (errno == ECONNREFUSED)
- throw new PortUnreachableException (JvNewStringUTF (strerr));
-
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainDatagramSocketImpl::setTimeToLive (jint ttl)
-{
- // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4.
- char val = (char) ttl;
- socklen_t val_len = sizeof(val);
-
- if (::setsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, val_len) == 0)
- return;
-
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-jint
-java::net::PlainDatagramSocketImpl::getTimeToLive ()
-{
- // Assumes IPPROTO_IP rather than IPPROTO_IPV6 since socket created is IPv4.
- char val;
- socklen_t val_len = sizeof(val);
-
- if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_TTL, &val, &val_len) == 0)
- return ((int) val) & 0xFF;
-
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr,
- java::net::NetworkInterface *,
- jboolean join)
-{
- // FIXME: implement use of NetworkInterface
-
- union McastReq u;
- jbyteArray haddress = inetaddr->addr;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
- int level, opname;
- const char *ptr;
- if (0)
- ;
-#if HAVE_STRUCT_IP_MREQ
- else if (len == 4)
- {
- level = IPPROTO_IP;
- opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP;
- memcpy (&u.mreq.imr_multiaddr, bytes, len);
- // FIXME: If a non-default interface is set, use it; see Stevens p. 501.
- // Maybe not, see note in last paragraph at bottom of Stevens p. 497.
- u.mreq.imr_interface.s_addr = htonl (INADDR_ANY);
- len = sizeof (struct ip_mreq);
- ptr = (const char *) &u.mreq;
- }
-#endif
-#if HAVE_STRUCT_IPV6_MREQ
- else if (len == 16)
- {
- level = IPPROTO_IPV6;
-
- /* Prefer new RFC 2553 names. */
-#ifndef IPV6_JOIN_GROUP
-#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
-#endif
-#ifndef IPV6_LEAVE_GROUP
-#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
-#endif
-
- opname = join ? IPV6_JOIN_GROUP : IPV6_LEAVE_GROUP;
- memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len);
- // FIXME: If a non-default interface is set, use it; see Stevens p. 501.
- // Maybe not, see note in last paragraph at bottom of Stevens p. 497.
- u.mreq6.ipv6mr_interface = 0;
- len = sizeof (struct ipv6_mreq);
- ptr = (const char *) &u.mreq6;
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
- if (::setsockopt (fnum, level, opname, ptr, len) == 0)
- return;
-
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainDatagramSocketImpl::setOption (jint optID,
- java::lang::Object *value)
-{
- int val;
- socklen_t val_len = sizeof (val);
-
- if (fnum < 0)
- throw new java::net::SocketException (JvNewStringUTF ("Socket closed"));
-
- if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$))
- {
- java::lang::Boolean *boolobj =
- static_cast<java::lang::Boolean *> (value);
- val = boolobj->booleanValue() ? 1 : 0;
- }
- else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$))
- {
- java::lang::Integer *intobj =
- static_cast<java::lang::Integer *> (value);
- val = (int) intobj->intValue();
- }
- // Else assume value to be an InetAddress for use with IP_MULTICAST_IF.
-
- switch (optID)
- {
- case _Jv_TCP_NODELAY_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("TCP_NODELAY not valid for UDP"));
- return;
- case _Jv_SO_LINGER_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_LINGER not valid for UDP"));
- return;
- case _Jv_SO_KEEPALIVE_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_KEEPALIVE not valid for UDP"));
- return;
-
- case _Jv_SO_BROADCAST_ :
- if (::setsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val,
- val_len) != 0)
- goto error;
- break;
-
- case _Jv_SO_OOBINLINE_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_OOBINLINE: not valid for UDP"));
- break;
-
- case _Jv_SO_SNDBUF_ :
- case _Jv_SO_RCVBUF_ :
-#if defined(SO_SNDBUF) && defined(SO_RCVBUF)
- int opt;
- optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF;
- if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0)
- goto error;
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported"));
-#endif
- return;
- case _Jv_SO_REUSEADDR_ :
-#if defined(SO_REUSEADDR)
- if (::setsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val,
- val_len) != 0)
- goto error;
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_REUSEADDR not supported"));
-#endif
- return;
- case _Jv_SO_BINDADDR_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_BINDADDR: read only option"));
- return;
- case _Jv_IP_MULTICAST_IF_ :
- union InAddr u;
- jbyteArray haddress;
- jbyte *bytes;
- int len;
- int level, opname;
- const char *ptr;
-
- haddress = ((java::net::InetAddress *) value)->addr;
- bytes = elements (haddress);
- len = haddress->length;
- if (len == 4)
- {
- level = IPPROTO_IP;
- opname = IP_MULTICAST_IF;
- memcpy (&u.addr, bytes, len);
- len = sizeof (struct in_addr);
- ptr = (const char *) &u.addr;
- }
-// Tru64 UNIX V5.0 has struct sockaddr_in6, but no IPV6_MULTICAST_IF
-#if defined (HAVE_INET6) && defined (IPV6_MULTICAST_IF)
- else if (len == 16)
- {
- level = IPPROTO_IPV6;
- opname = IPV6_MULTICAST_IF;
- memcpy (&u.addr6, bytes, len);
- len = sizeof (struct in6_addr);
- ptr = (const char *) &u.addr6;
- }
-#endif
- else
- throw
- new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
- if (::setsockopt (fnum, level, opname, ptr, len) != 0)
- goto error;
- return;
-
- case _Jv_IP_MULTICAST_IF2_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented"));
- break;
-
- case _Jv_IP_MULTICAST_LOOP_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented"));
- break;
-
- case _Jv_IP_TOS_ :
- if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val,
- val_len) != 0)
- goto error;
- return;
-
- case _Jv_SO_TIMEOUT_ :
- timeout = val;
- return;
- default :
- errno = ENOPROTOOPT;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::SocketException (JvNewStringUTF (strerr));
-}
-
-java::lang::Object *
-java::net::PlainDatagramSocketImpl::getOption (jint optID)
-{
- int val;
- socklen_t val_len = sizeof(val);
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
-
- switch (optID)
- {
- case _Jv_TCP_NODELAY_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("TCP_NODELAY not valid for UDP"));
- break;
- case _Jv_SO_LINGER_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_LINGER not valid for UDP"));
- break;
- case _Jv_SO_KEEPALIVE_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_KEEPALIVE not valid for UDP"));
- break;
-
- case _Jv_SO_BROADCAST_ :
- if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Boolean (val != 0);
-
- case _Jv_SO_OOBINLINE_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_OOBINLINE not valid for UDP"));
- break;
-
- case _Jv_SO_RCVBUF_ :
- case _Jv_SO_SNDBUF_ :
-#if defined(SO_SNDBUF) && defined(SO_RCVBUF)
- int opt;
- optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF;
- if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0)
- goto error;
- else
- return new java::lang::Integer (val);
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported"));
-#endif
- break;
- case _Jv_SO_BINDADDR_:
- // cache the local address
- if (localAddress == NULL)
- {
- jbyteArray laddr;
- if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
- goto error;
- if (u.address.sin_family == AF_INET)
- {
- laddr = JvNewByteArray (4);
- memcpy (elements (laddr), &u.address.sin_addr, 4);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- laddr = JvNewByteArray (16);
- memcpy (elements (laddr), &u.address6.sin6_addr, 16);
- }
-#endif
- else
- throw new java::net::SocketException (
- JvNewStringUTF ("invalid family"));
- localAddress = new java::net::InetAddress (laddr, NULL);
- }
- return localAddress;
- break;
- case _Jv_SO_REUSEADDR_ :
-#if defined(SO_REUSEADDR)
- if (::getsockopt (fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Boolean (val != 0);
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_REUSEADDR not supported"));
-#endif
- break;
- case _Jv_IP_MULTICAST_IF_ :
-#ifdef HAVE_INET_NTOA
- struct in_addr inaddr;
- socklen_t inaddr_len;
- char *bytes;
-
- inaddr_len = sizeof(inaddr);
- if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr,
- &inaddr_len) != 0)
- goto error;
-
- bytes = inet_ntoa (inaddr);
-
- return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes));
-#else
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()"));
-#endif
- break;
- case _Jv_SO_TIMEOUT_ :
- return new java::lang::Integer (timeout);
- break;
-
- case _Jv_IP_MULTICAST_IF2_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_IF2: not yet implemented"));
- break;
-
- case _Jv_IP_MULTICAST_LOOP_ :
- if (::getsockopt (fnum, SOL_SOCKET, IP_MULTICAST_LOOP, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Boolean (val != 0);
-
- case _Jv_IP_TOS_ :
- if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Integer (val);
-
- default :
- errno = ENOPROTOOPT;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::SocketException (JvNewStringUTF (strerr));
-}
-
-#endif /* DISABLE_JAVA_NET */
diff --git a/libjava/java/net/natPlainSocketImpl.cc b/libjava/java/net/natPlainSocketImpl.cc
deleted file mode 100644
index 114c2102ac5..00000000000
--- a/libjava/java/net/natPlainSocketImpl.cc
+++ /dev/null
@@ -1,1019 +0,0 @@
-/* Copyright (C) 1998, 1999, 2000, 2002 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 <platform.h>
-
-#ifndef DISABLE_JAVA_NET
-
-#ifdef WIN32
-
-#include <windows.h>
-#include <winsock.h>
-#include <errno.h>
-#include <string.h>
-#undef STRICT
-#undef MAX_PRIORITY
-#undef MIN_PRIORITY
-#undef FIONREAD
-
-// These functions make the Win32 socket API look more POSIXy
-static inline int
-write(int s, void *buf, int len)
-{
- return send(s, (char*)buf, len, 0);
-}
-
-static inline int
-read(int s, void *buf, int len)
-{
- return recv(s, (char*)buf, len, 0);
-}
-
-// these errors cannot occur on Win32
-#else /* WIN32 */
-
-#ifdef HAVE_SYS_IOCTL_H
-#define BSD_COMP /* Get FIONREAD on Solaris2. */
-#include <sys/ioctl.h>
-#endif
-
-// Pick up FIONREAD on Solaris 2.5.
-#ifdef HAVE_SYS_FILIO_H
-#include <sys/filio.h>
-#endif
-
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <errno.h>
-#include <string.h>
-
-#endif /* WIN32 */
-#endif /* DISABLE_JAVA_NET */
-
-#if HAVE_BSTRING_H
-// Needed for bzero, implicitly used by FD_ZERO on IRIX 5.2
-#include <bstring.h>
-#endif
-
-
-#include <gcj/cni.h>
-#include <gcj/javaprims.h>
-#include <java/io/IOException.h>
-#include <java/io/InterruptedIOException.h>
-#include <java/net/BindException.h>
-#include <java/net/ConnectException.h>
-#include <java/net/PlainSocketImpl.h>
-#include <java/net/InetAddress.h>
-#include <java/net/InetSocketAddress.h>
-#include <java/net/SocketException.h>
-#include <java/net/SocketTimeoutException.h>
-#include <java/lang/InternalError.h>
-#include <java/lang/Object.h>
-#include <java/lang/Boolean.h>
-#include <java/lang/Class.h>
-#include <java/lang/Integer.h>
-#include <java/lang/Thread.h>
-#include <java/lang/NullPointerException.h>
-#include <java/lang/ArrayIndexOutOfBoundsException.h>
-#include <java/lang/IllegalArgumentException.h>
-
-#ifdef DISABLE_JAVA_NET
-
-void
-java::net::PlainSocketImpl::create (jboolean)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("SocketImpl.create: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::bind (java::net::InetAddress *, jint)
-{
- throw new BindException (
- JvNewStringLatin1 ("SocketImpl.bind: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::connect (java::net::SocketAddress *, jint)
-{
- throw new ConnectException (
- JvNewStringLatin1 ("SocketImpl.connect: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::listen (jint)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("SocketImpl.listen: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *)
-{
- throw new java::io::IOException (
- JvNewStringLatin1 ("SocketImpl.accept: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::setOption (jint, java::lang::Object *)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.setOption: unimplemented"));
-}
-
-java::lang::Object *
-java::net::PlainSocketImpl::getOption (jint)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.getOption: unimplemented"));
-}
-
-jint
-java::net::PlainSocketImpl::read(void)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.read: unimplemented"));
-}
-
-jint
-java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.read: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::write(jint b)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.write: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.write: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::sendUrgentData(jint data)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.sendUrgentData: unimplemented"));
-}
-
-jint
-java::net::PlainSocketImpl::available(void)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.available: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::close(void)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.close: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::shutdownInput (void)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.shutdownInput: unimplemented"));
-}
-
-void
-java::net::PlainSocketImpl::shutdownOutput (void)
-{
- throw new SocketException (
- JvNewStringLatin1 ("SocketImpl.shutdownOutput: unimplemented"));
-}
-
-#else /* DISABLE_JAVA_NET */
-
-union SockAddr
-{
- struct sockaddr_in address;
-#ifdef HAVE_INET6
- struct sockaddr_in6 address6;
-#endif
-};
-
-void
-java::net::PlainSocketImpl::create (jboolean stream)
-{
- int sock = _Jv_socket (AF_INET, stream ? SOCK_STREAM : SOCK_DGRAM, 0);
-
- if (sock < 0)
- {
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
- }
-
- _Jv_platform_close_on_exec (sock);
-
- // We use fnum in place of fd here. From leaving fd null we avoid
- // the double close problem in FileDescriptor.finalize.
- fnum = sock;
-}
-
-void
-java::net::PlainSocketImpl::bind (java::net::InetAddress *host, jint lport)
-{
- union SockAddr u;
- struct sockaddr *ptr = (struct sockaddr *) &u.address;
- jbyteArray haddress = host->addr;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
- int i = 1;
-
- if (len == 4)
- {
- u.address.sin_family = AF_INET;
-
- if (host != NULL)
- memcpy (&u.address.sin_addr, bytes, len);
- else
- u.address.sin_addr.s_addr = htonl (INADDR_ANY);
-
- len = sizeof (struct sockaddr_in);
- u.address.sin_port = htons (lport);
- }
-#ifdef HAVE_INET6
- else if (len == 16)
- {
- u.address6.sin6_family = AF_INET6;
- memcpy (&u.address6.sin6_addr, bytes, len);
- len = sizeof (struct sockaddr_in6);
- u.address6.sin6_port = htons (lport);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
- // Enable SO_REUSEADDR, so that servers can reuse ports left in TIME_WAIT.
- ::setsockopt(fnum, SOL_SOCKET, SO_REUSEADDR, (char *) &i, sizeof(i));
-
- if (_Jv_bind (fnum, ptr, len) == 0)
- {
- address = host;
- socklen_t addrlen = sizeof(u);
-
- if (lport != 0)
- localport = lport;
- else if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0)
- localport = ntohs (u.address.sin_port);
- else
- goto error;
-
- return;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::BindException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainSocketImpl::connect (java::net::SocketAddress *addr,
- jint timeout)
-{
- java::net::InetSocketAddress *tmp = (java::net::InetSocketAddress*) addr;
- java::net::InetAddress *host = tmp->getAddress();
- jint rport = tmp->getPort();
-
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- jbyteArray haddress = host->addr;
- jbyte *bytes = elements (haddress);
- int len = haddress->length;
- struct sockaddr *ptr = (struct sockaddr *) &u.address;
- if (len == 4)
- {
- u.address.sin_family = AF_INET;
- memcpy (&u.address.sin_addr, bytes, len);
- len = sizeof (struct sockaddr_in);
- u.address.sin_port = htons (rport);
- }
-#ifdef HAVE_INET6
- else if (len == 16)
- {
- u.address6.sin6_family = AF_INET6;
- memcpy (&u.address6.sin6_addr, bytes, len);
- len = sizeof (struct sockaddr_in6);
- u.address6.sin6_port = htons (rport);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid length"));
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- if (timeout > 0)
- {
- int flags = ::fcntl (fnum, F_GETFL);
- ::fcntl (fnum, F_SETFL, flags | O_NONBLOCK);
-
- if ((_Jv_connect (fnum, ptr, len) != 0) && (errno != EINPROGRESS))
- goto error;
-
- fd_set rset;
- struct timeval tv;
- FD_ZERO(&rset);
- FD_SET(fnum, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
- int retval;
-
- if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
- goto error;
- else if (retval == 0)
- throw new java::net::SocketTimeoutException
- (JvNewStringUTF ("Connect timed out"));
- }
- else
-#endif
- {
- if (_Jv_connect (fnum, ptr, len) != 0)
- goto error;
- }
-
- address = host;
- port = rport;
-
- // A bind may not have been done on this socket; if so, set localport now.
- if (localport == 0)
- {
- if (::getsockname (fnum, (sockaddr*) &u, &addrlen) == 0)
- localport = ntohs (u.address.sin_port);
- else
- goto error;
- }
-
- return;
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::ConnectException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainSocketImpl::listen (jint backlog)
-{
- if (::listen (fnum, backlog) != 0)
- {
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
- }
-}
-
-void
-java::net::PlainSocketImpl::accept (java::net::PlainSocketImpl *s)
-{
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- int new_socket = 0;
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- // Do timeouts via select since SO_RCVTIMEO is not always available.
- if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE)
- {
- fd_set rset;
- struct timeval tv;
- FD_ZERO(&rset);
- FD_SET(fnum, &rset);
- tv.tv_sec = timeout / 1000;
- tv.tv_usec = (timeout % 1000) * 1000;
- int retval;
- if ((retval = _Jv_select (fnum + 1, &rset, NULL, NULL, &tv)) < 0)
- goto error;
- else if (retval == 0)
- throw new java::io::InterruptedIOException (
- JvNewStringUTF("Accept timed out"));
- }
-#endif /* WIN32 */
-
- new_socket = _Jv_accept (fnum, (sockaddr*) &u, &addrlen);
-
- if (new_socket < 0)
- goto error;
-
- _Jv_platform_close_on_exec (new_socket);
-
- jbyteArray raddr;
- jint rport;
- if (u.address.sin_family == AF_INET)
- {
- raddr = JvNewByteArray (4);
- memcpy (elements (raddr), &u.address.sin_addr, 4);
- rport = ntohs (u.address.sin_port);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- raddr = JvNewByteArray (16);
- memcpy (elements (raddr), &u.address6.sin6_addr, 16);
- rport = ntohs (u.address6.sin6_port);
- }
-#endif
- else
- throw new java::net::SocketException (JvNewStringUTF ("invalid family"));
-
- s->fnum = new_socket;
- s->localport = localport;
- s->address = new InetAddress (raddr, NULL);
- s->port = rport;
- return;
-
- error:
- char* strerr = strerror (errno);
- throw new java::io::IOException (JvNewStringUTF (strerr));
-}
-
-// Close(shutdown) the socket.
-void
-java::net::PlainSocketImpl::close()
-{
- // Avoid races from asynchronous finalization.
- JvSynchronize sync (this);
-
- // should we use shutdown here? how would that effect so_linger?
- int res = _Jv_close (fnum);
-
- if (res == -1)
- {
- // These three errors are not errors according to tests performed
- // on the reference implementation.
- if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF)
- throw new java::io::IOException (JvNewStringUTF (strerror (errno)));
- }
- // Safe place to reset the file pointer.
- fnum = -1;
- timeout = 0;
-}
-
-// Write a byte to the socket.
-void
-java::net::PlainSocketImpl::write(jint b)
-{
- jbyte d =(jbyte) b;
- int r = 0;
-
- while (r != 1)
- {
- r = _Jv_write (fnum, &d, 1);
- if (r == -1)
- {
- if (java::lang::Thread::interrupted())
- {
- java::io::InterruptedIOException *iioe
- = new java::io::InterruptedIOException
- (JvNewStringLatin1 (strerror (errno)));
- iioe->bytesTransferred = 0;
- throw iioe;
- }
- // Some errors should not cause exceptions.
- if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF)
- throw new java::io::IOException (JvNewStringUTF (strerror (errno)));
- break;
- }
- }
-}
-
-// Write some bytes to the socket.
-void
-java::net::PlainSocketImpl::write(jbyteArray b, jint offset, jint len)
-{
- if (! b)
- throw new java::lang::NullPointerException;
- if (offset < 0 || len < 0 || offset + len > JvGetArrayLength (b))
- throw new java::lang::ArrayIndexOutOfBoundsException;
-
- jbyte *bytes = elements (b) + offset;
- int written = 0;
-
- while (len > 0)
- {
- int r = _Jv_write (fnum, bytes, len);
-
- if (r == -1)
- {
- if (java::lang::Thread::interrupted())
- {
- java::io::InterruptedIOException *iioe
- = new java::io::InterruptedIOException
- (JvNewStringLatin1 (strerror (errno)));
- iioe->bytesTransferred = written;
- throw iioe;
- }
- // Some errors should not cause exceptions.
- if (errno != ENOTCONN && errno != ECONNRESET && errno != EBADF)
- throw new java::io::IOException (JvNewStringUTF (strerror (errno)));
- break;
- }
-
- written += r;
- len -= r;
- bytes += r;
- }
-}
-
-void
-java::net::PlainSocketImpl::sendUrgentData (jint)
-{
- throw new SocketException (JvNewStringLatin1 (
- "PlainSocketImpl: sending of urgent data not supported by this socket"));
-}
-
-// Read a single byte from the socket.
-jint
-java::net::PlainSocketImpl::read(void)
-{
- jbyte b;
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- // Do timeouts via select.
- if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE)
- {
- // Create the file descriptor set.
- fd_set read_fds;
- FD_ZERO (&read_fds);
- FD_SET (fnum,&read_fds);
- // Create the timeout struct based on our internal timeout value.
- struct timeval timeout_value;
- timeout_value.tv_sec = timeout / 1000;
- timeout_value.tv_usec = (timeout % 1000) * 1000;
- // Select on the fds.
- int sel_retval =
- _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value);
- // If select returns 0 we've waited without getting data...
- // that means we've timed out.
- if (sel_retval == 0)
- throw new java::io::InterruptedIOException
- (JvNewStringUTF ("read timed out") );
- // If select returns ok we know we either got signalled or read some data...
- // either way we need to try to read.
- }
-#endif /* WIN32 */
-
- int r = _Jv_read (fnum, &b, 1);
-
- if (r == 0)
- return -1;
-
- if (java::lang::Thread::interrupted())
- {
- java::io::InterruptedIOException *iioe =
- new java::io::InterruptedIOException
- (JvNewStringUTF("read interrupted"));
- iioe->bytesTransferred = r == -1 ? 0 : r;
- throw iioe;
- }
- else if (r == -1)
- {
- // Some errors cause us to return end of stream...
- if (errno == ENOTCONN)
- return -1;
-
- // Other errors need to be signalled.
- throw new java::io::IOException (JvNewStringUTF (strerror (errno)));
- }
-
- return b & 0xFF;
-}
-
-// Read count bytes into the buffer, starting at offset.
-jint
-java::net::PlainSocketImpl::read(jbyteArray buffer, jint offset, jint count)
-{
- if (! buffer)
- throw new java::lang::NullPointerException;
-
- jsize bsize = JvGetArrayLength (buffer);
-
- if (offset < 0 || count < 0 || offset + count > bsize)
- throw new java::lang::ArrayIndexOutOfBoundsException;
-
- jbyte *bytes = elements (buffer) + offset;
-
-// FIXME: implement timeout support for Win32
-#ifndef WIN32
- // Do timeouts via select.
- if (timeout > 0 && fnum >= 0 && fnum < FD_SETSIZE)
- {
- // Create the file descriptor set.
- fd_set read_fds;
- FD_ZERO (&read_fds);
- FD_SET (fnum, &read_fds);
- // Create the timeout struct based on our internal timeout value.
- struct timeval timeout_value;
- timeout_value.tv_sec = timeout / 1000;
- timeout_value.tv_usec =(timeout % 1000) * 1000;
- // Select on the fds.
- int sel_retval =
- _Jv_select (fnum + 1, &read_fds, NULL, NULL, &timeout_value);
- // We're only interested in the 0 return.
- // error returns still require us to try to read
- // the socket to see what happened.
- if (sel_retval == 0)
- {
- java::io::InterruptedIOException *iioe =
- new java::io::InterruptedIOException
- (JvNewStringUTF ("read interrupted"));
- iioe->bytesTransferred = 0;
- throw iioe;
- }
- }
-#endif
-
- // Read the socket.
- int r = ::recv (fnum, (char *) bytes, count, 0);
-
- if (r == 0)
- return -1;
-
- if (java::lang::Thread::interrupted())
- {
- java::io::InterruptedIOException *iioe =
- new java::io::InterruptedIOException
- (JvNewStringUTF ("read interrupted"));
- iioe->bytesTransferred = r == -1 ? 0 : r;
- throw iioe;
- }
- else if (r == -1)
- {
- // Some errors cause us to return end of stream...
- if (errno == ENOTCONN)
- return -1;
-
- // Other errors need to be signalled.
- throw new java::io::IOException (JvNewStringUTF (strerror (errno)));
- }
-
- return r;
-}
-
-// How many bytes are available?
-jint
-java::net::PlainSocketImpl::available(void)
-{
-#if defined(FIONREAD) || defined(HAVE_SELECT)
- long num = 0;
- int r = 0;
- bool num_set = false;
-
-#if defined(FIONREAD)
- r = ::ioctl (fnum, FIONREAD, &num);
-
- if (r == -1 && errno == ENOTTY)
- {
- // If the ioctl doesn't work, we don't care.
- r = 0;
- num = 0;
- }
- else
- num_set = true;
-#elif defined(HAVE_SELECT)
- if (fnum < 0)
- {
- errno = EBADF;
- r = -1;
- }
-#endif
-
- if (r == -1)
- {
- posix_error:
- throw new java::io::IOException(JvNewStringUTF(strerror(errno)));
- }
-
- // If we didn't get anything we can use select.
-
-#if defined(HAVE_SELECT)
- if (! num_set)
- if (! num_set && fnum >= 0 && fnum < FD_SETSIZE)
- {
- fd_set rd;
- FD_ZERO (&rd);
- FD_SET (fnum, &rd);
- struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- r = _Jv_select (fnum + 1, &rd, NULL, NULL, &tv);
- if(r == -1)
- goto posix_error;
- num = r == 0 ? 0 : 1;
- }
-#endif /* HAVE_SELECT */
-
- return (jint) num;
-#else
- throw new java::io::IOException (JvNewStringUTF ("unimplemented"));
-#endif
-}
-
-void
-java::net::PlainSocketImpl::setOption (jint optID, java::lang::Object *value)
-{
- int val;
- socklen_t val_len = sizeof (val);
-
- if (fnum < 0)
- throw new java::net::SocketException (JvNewStringUTF ("Socket closed"));
-
- if (_Jv_IsInstanceOf (value, &java::lang::Boolean::class$))
- {
- java::lang::Boolean *boolobj =
- static_cast<java::lang::Boolean *> (value);
- if (boolobj->booleanValue())
- val = 1;
- else
- {
- if (optID == _Jv_SO_LINGER_)
- val = -1;
- else
- val = 0;
- }
- }
- else if (_Jv_IsInstanceOf (value, &java::lang::Integer::class$))
- {
- java::lang::Integer *intobj =
- static_cast<java::lang::Integer *> (value);
- val = (int) intobj->intValue();
- }
- else
- {
- throw new java::lang::IllegalArgumentException (
- JvNewStringLatin1 ("`value' must be Boolean or Integer"));
- }
-
- switch (optID)
- {
- case _Jv_TCP_NODELAY_ :
-#ifdef TCP_NODELAY
- if (::setsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val,
- val_len) != 0)
- goto error;
-#else
- throw new java::lang::InternalError
- (JvNewStringUTF ("TCP_NODELAY not supported"));
-#endif /* TCP_NODELAY */
- return;
-
- case _Jv_SO_KEEPALIVE_ :
- if (::setsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val,
- val_len) != 0)
- goto error;
- break;
-
- case _Jv_SO_BROADCAST_ :
- throw new java::net::SocketException
- (JvNewStringUTF ("SO_BROADCAST not valid for TCP"));
- break;
-
- case _Jv_SO_OOBINLINE_ :
- if (::setsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val,
- val_len) != 0)
- goto error;
- break;
-
- case _Jv_SO_LINGER_ :
-#ifdef SO_LINGER
- struct linger l_val;
- l_val.l_onoff = (val != -1);
- l_val.l_linger = val;
-
- if (::setsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val,
- sizeof(l_val)) != 0)
- goto error;
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_LINGER not supported"));
-#endif /* SO_LINGER */
- return;
-
- case _Jv_SO_SNDBUF_ :
- case _Jv_SO_RCVBUF_ :
-#if defined(SO_SNDBUF) && defined(SO_RCVBUF)
- int opt;
- optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF;
- if (::setsockopt (fnum, SOL_SOCKET, opt, (char *) &val, val_len) != 0)
- goto error;
-#else
- throw new java::lang::InternalError (
- JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported"));
-#endif
- return;
-
- case _Jv_SO_BINDADDR_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_BINDADDR: read only option"));
- return;
-
- case _Jv_IP_MULTICAST_IF_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP"));
- return;
-
- case _Jv_IP_MULTICAST_IF2_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP"));
- break;
-
- case _Jv_IP_MULTICAST_LOOP_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP"));
- break;
-
- case _Jv_IP_TOS_ :
- if (::setsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val,
- val_len) != 0)
- goto error;
- break;
-
- case _Jv_SO_REUSEADDR_ :
- throw new java::net::SocketException (
- JvNewStringUTF ("SO_REUSEADDR: not valid for TCP"));
- return;
-
- case _Jv_SO_TIMEOUT_ :
- timeout = val;
- return;
-
- default :
- errno = ENOPROTOOPT;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::SocketException (JvNewStringUTF (strerr));
-}
-
-java::lang::Object *
-java::net::PlainSocketImpl::getOption (jint optID)
-{
- int val;
- socklen_t val_len = sizeof(val);
- union SockAddr u;
- socklen_t addrlen = sizeof(u);
- struct linger l_val;
- socklen_t l_val_len = sizeof(l_val);
-
- switch (optID)
- {
-#ifdef TCP_NODELAY
- case _Jv_TCP_NODELAY_ :
- if (::getsockopt (fnum, IPPROTO_TCP, TCP_NODELAY, (char *) &val,
- &val_len) != 0)
- goto error;
- else
- return new java::lang::Boolean (val != 0);
-#else
- throw new java::lang::InternalError
- (JvNewStringUTF ("TCP_NODELAY not supported"));
-#endif
- break;
-
- case _Jv_SO_LINGER_ :
-#ifdef SO_LINGER
- if (::getsockopt (fnum, SOL_SOCKET, SO_LINGER, (char *) &l_val,
- &l_val_len) != 0)
- goto error;
-
- if (l_val.l_onoff)
- return new java::lang::Integer (l_val.l_linger);
- else
- return new java::lang::Boolean ((jboolean)false);
-#else
- throw new java::lang::InternalError
- (JvNewStringUTF ("SO_LINGER not supported"));
-#endif
- break;
-
- case _Jv_SO_KEEPALIVE_ :
- if (::getsockopt (fnum, SOL_SOCKET, SO_KEEPALIVE, (char *) &val,
- &val_len) != 0)
- goto error;
- else
- return new java::lang::Boolean (val != 0);
-
- case _Jv_SO_BROADCAST_ :
- if (::getsockopt (fnum, SOL_SOCKET, SO_BROADCAST, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Boolean ((jboolean)val);
-
- case _Jv_SO_OOBINLINE_ :
- if (::getsockopt (fnum, SOL_SOCKET, SO_OOBINLINE, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Boolean ((jboolean)val);
-
- case _Jv_SO_RCVBUF_ :
- case _Jv_SO_SNDBUF_ :
-#if defined(SO_SNDBUF) && defined(SO_RCVBUF)
- int opt;
- optID == _Jv_SO_SNDBUF_ ? opt = SO_SNDBUF : opt = SO_RCVBUF;
- if (::getsockopt (fnum, SOL_SOCKET, opt, (char *) &val, &val_len) != 0)
- goto error;
- else
- return new java::lang::Integer (val);
-#else
- throw new java::lang::InternalError
- (JvNewStringUTF ("SO_RCVBUF/SO_SNDBUF not supported"));
-#endif
- break;
- case _Jv_SO_BINDADDR_:
- // cache the local address
- if (localAddress == NULL)
- {
- jbyteArray laddr;
-
- if (::getsockname (fnum, (sockaddr*) &u, &addrlen) != 0)
- goto error;
-
- if (u.address.sin_family == AF_INET)
- {
- laddr = JvNewByteArray (4);
- memcpy (elements (laddr), &u.address.sin_addr, 4);
- }
-#ifdef HAVE_INET6
- else if (u.address.sin_family == AF_INET6)
- {
- laddr = JvNewByteArray (16);
- memcpy (elements (laddr), &u.address6.sin6_addr, 16);
- }
-#endif
- else
- throw new java::net::SocketException
- (JvNewStringUTF ("invalid family"));
- localAddress = new java::net::InetAddress (laddr, NULL);
- }
-
- return localAddress;
- break;
- case _Jv_IP_MULTICAST_IF_ :
- throw new java::net::SocketException
- (JvNewStringUTF ("IP_MULTICAST_IF: not valid for TCP"));
- break;
-
- case _Jv_IP_MULTICAST_IF2_ :
- throw new java::net::SocketException
- (JvNewStringUTF ("IP_MULTICAST_IF2: not valid for TCP"));
- break;
-
- case _Jv_IP_MULTICAST_LOOP_ :
- throw new java::net::SocketException
- (JvNewStringUTF ("IP_MULTICAST_LOOP: not valid for TCP"));
- break;
-
- case _Jv_IP_TOS_ :
- if (::getsockopt (fnum, SOL_SOCKET, IP_TOS, (char *) &val,
- &val_len) != 0)
- goto error;
- return new java::lang::Integer (val);
- break;
-
- case _Jv_SO_REUSEADDR_ :
- throw new java::net::SocketException
- (JvNewStringUTF ("SO_REUSEADDR: not valid for TCP"));
- break;
-
- case _Jv_SO_TIMEOUT_ :
- return new java::lang::Integer (timeout);
- break;
-
- default :
- errno = ENOPROTOOPT;
- }
-
- error:
- char* strerr = strerror (errno);
- throw new java::net::SocketException (JvNewStringUTF (strerr));
-}
-
-void
-java::net::PlainSocketImpl::shutdownInput (void)
-{
- if (::shutdown (fnum, 0))
- throw new SocketException (JvNewStringUTF (strerror (errno)));
-}
-
-void
-java::net::PlainSocketImpl::shutdownOutput (void)
-{
- if (::shutdown (fnum, 1))
- throw new SocketException (JvNewStringUTF (strerror (errno)));
-}
-
-#endif /* DISABLE_JAVA_NET */
diff --git a/libjava/java/nio/ByteBuffer.java b/libjava/java/nio/ByteBuffer.java
index 8b7c6013019..b3e72aaf689 100644
--- a/libjava/java/nio/ByteBuffer.java
+++ b/libjava/java/nio/ByteBuffer.java
@@ -199,7 +199,7 @@ public abstract class ByteBuffer extends Buffer implements Comparable
}
/**
- * Tells whether or not this buffer is backed by an accessible byte array.
+ * Tells whether or not this buffer is backed by an accessible array.
*/
public final boolean hasArray ()
{
@@ -247,6 +247,15 @@ public abstract class ByteBuffer extends Buffer implements Comparable
}
/**
+ * Returns the current hash code of this buffer.
+ */
+ public int hashCode()
+ {
+ // FIXME: Check what SUN calcs here
+ return super.hashCode();
+ }
+
+ /**
* Tells whether or not this buffer is equal to another object.
*/
public boolean equals (Object obj)
diff --git a/libjava/java/nio/ByteOrder.java b/libjava/java/nio/ByteOrder.java
index 010fa29d0b6..f1001a33b71 100644
--- a/libjava/java/nio/ByteOrder.java
+++ b/libjava/java/nio/ByteOrder.java
@@ -35,19 +35,30 @@ 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.nio;
+package java.nio;
+/**
+ * @author Michael Koch
+ * @since 1.4
+ */
public final class ByteOrder
{
public static final ByteOrder BIG_ENDIAN = new ByteOrder();
public static final ByteOrder LITTLE_ENDIAN = new ByteOrder();
- public static ByteOrder nativeOrder()
+ /**
+ * Returns the native byte order of the platform currently running.
+ */
+ public static ByteOrder nativeOrder ()
{
- return BIG_ENDIAN;
+ return (System.getProperty ("gnu.cpu.endian") == "big"
+ ? BIG_ENDIAN : LITTLE_ENDIAN);
}
+ /**
+ * Returns a string representation of the byte order.
+ */
public String toString()
{
return this == BIG_ENDIAN ? "BIG_ENDIAN" : "LITTLE_ENDIAN";
diff --git a/libjava/java/nio/CharBuffer.java b/libjava/java/nio/CharBuffer.java
index e2996023047..e5b31b44075 100644
--- a/libjava/java/nio/CharBuffer.java
+++ b/libjava/java/nio/CharBuffer.java
@@ -45,6 +45,7 @@ import gnu.java.nio.CharBufferImpl;
public abstract class CharBuffer extends Buffer
implements Comparable, CharSequence
{
+ protected int array_offset = 0;
protected char [] backing_buffer;
/**
@@ -201,7 +202,7 @@ public abstract class CharBuffer extends Buffer
}
/**
- * Tells wether this is buffer is backed by an array or not.
+ * Tells wether this is buffer is backed by an accessible array or not.
*/
public final boolean hasArray ()
{
@@ -242,7 +243,7 @@ public abstract class CharBuffer extends Buffer
if (isReadOnly ())
throw new ReadOnlyBufferException ();
- return 0;
+ return array_offset;
}
/**
diff --git a/libjava/java/rmi/RMISecurityManager.java b/libjava/java/rmi/RMISecurityManager.java
index 8870ef75c50..5ec70f70a48 100644
--- a/libjava/java/rmi/RMISecurityManager.java
+++ b/libjava/java/rmi/RMISecurityManager.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,113 +37,12 @@ exception statement from your version. */
package java.rmi;
-import java.io.FileDescriptor;
-import java.lang.Thread;
-import java.lang.Class;
-import java.lang.SecurityManager;
-import java.net.InetAddress;
-import java.security.Permission;
-
-public class RMISecurityManager extends SecurityManager {
-
-public RMISecurityManager() {
-}
-
-public void checkAccept(String host, int port) {
-}
-
-public void checkAccess(Thread g) {
-}
-
-public void checkAccess(ThreadGroup g) {
-}
-
-public void checkAwtEventQueueAccess() {
-}
-
-public void checkConnect(String host, int port) {
-}
-
-public void checkConnect(String host, int port, Object context) {
-}
-
-public void checkCreateClassLoader() {
-}
-
-public void checkDelete(String file) {
-}
-
-public void checkExec(String cmd) {
-}
-
-public void checkExit(int status) {
-}
-
-public void checkLink(String lib) {
-}
-
-public void checkListen(int port) {
-}
-
-public void checkMemberAccess ( Class clazz, int which ) {
-}
-
-public void checkMulticast(InetAddress maddr) {
-}
-
-public void checkMulticast(InetAddress maddr, byte ttl) {
-}
-
-public void checkPackageAccess(String pkg) {
-}
-
-public void checkPackageDefinition(String pkg) {
-}
-
-public void checkPermission(Permission perm) {
-}
-
-public void checkPermission(Permission perm, Object context) {
-}
-
-public void checkPrintJobAccess() {
-}
-
-public void checkPropertiesAccess() {
-}
-
-public void checkPropertyAccess(String key) {
-}
-
-/* public void checkPropertyAccess(String key, String def) {
-}*/
-
-public void checkRead(FileDescriptor fd) {
-}
-
-public void checkRead(String file) {
-}
-
-public void checkRead(String file, Object context) {
-}
-
-public void checkSecurityAccess(String action) {
-}
-
-public void checkSetFactory() {
-}
-
-public void checkSystemClipboardAccess() {
-}
-
-public boolean checkTopLevelWindow(Object window) {
- return (true);
-}
-
-public void checkWrite(FileDescriptor fd) {
-}
-
-public void checkWrite(String file) {
-}
-
+/**
+ * @since 1.1
+ */
+public class RMISecurityManager extends SecurityManager
+{
+ public RMISecurityManager()
+ {
+ }
}
diff --git a/libjava/java/rmi/activation/Activatable.java b/libjava/java/rmi/activation/Activatable.java
index 5985cc3ff00..95913199f09 100644
--- a/libjava/java/rmi/activation/Activatable.java
+++ b/libjava/java/rmi/activation/Activatable.java
@@ -48,6 +48,8 @@ import java.rmi.MarshalledObject;
public abstract class Activatable
extends RemoteServer {
+static final long serialVersionUID = -3120617863591563455L;
+
protected Activatable(String location, MarshalledObject data, boolean restart, int port) throws ActivationException, RemoteException {
throw new Error("Not implemented");
}
diff --git a/libjava/java/rmi/activation/ActivationGroup.java b/libjava/java/rmi/activation/ActivationGroup.java
index b19686d0e1e..e9cd472113b 100644
--- a/libjava/java/rmi/activation/ActivationGroup.java
+++ b/libjava/java/rmi/activation/ActivationGroup.java
@@ -46,6 +46,8 @@ public abstract class ActivationGroup
extends UnicastRemoteObject
implements ActivationInstantiator {
+static final long serialVersionUID = -7696947875314805420L;
+
protected ActivationGroup(ActivationGroupID groupID) throws RemoteException {
throw new Error("Not implemented");
}
diff --git a/libjava/java/rmi/activation/ActivationGroupDesc.java b/libjava/java/rmi/activation/ActivationGroupDesc.java
index 1c627e4d7b0..2afb8440b0b 100644
--- a/libjava/java/rmi/activation/ActivationGroupDesc.java
+++ b/libjava/java/rmi/activation/ActivationGroupDesc.java
@@ -48,6 +48,8 @@ public final class ActivationGroupDesc implements Serializable
public static class CommandEnvironment
implements Serializable {
+static final long serialVersionUID = 6165754737887770191L;
+
private String cmdpath;
private String[] argv;
diff --git a/libjava/java/rmi/activation/ActivationInstantiator.java b/libjava/java/rmi/activation/ActivationInstantiator.java
index d019ed50ce3..76cbd21befe 100644
--- a/libjava/java/rmi/activation/ActivationInstantiator.java
+++ b/libjava/java/rmi/activation/ActivationInstantiator.java
@@ -42,8 +42,8 @@ import java.rmi.RemoteException;
import java.rmi.MarshalledObject;
public interface ActivationInstantiator
- extends Remote {
-
-public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, RemoteException;
-
+ extends Remote
+{
+ public MarshalledObject newInstance (ActivationID id, ActivationDesc desc)
+ throws ActivationException, RemoteException;
}
diff --git a/libjava/java/rmi/activation/Activator.java b/libjava/java/rmi/activation/Activator.java
index df337c3bc9e..4c8391b09e2 100644
--- a/libjava/java/rmi/activation/Activator.java
+++ b/libjava/java/rmi/activation/Activator.java
@@ -42,8 +42,8 @@ import java.rmi.RemoteException;
import java.rmi.MarshalledObject;
public interface Activator
- extends Remote {
-
-public MarshalledObject activate(ActivationID id, boolean force) throws ActivationException, UnknownObjectException, RemoteException;
-
+ extends Remote
+{
+ public MarshalledObject activate(ActivationID id, boolean force)
+ throws ActivationException, UnknownObjectException, RemoteException;
}
diff --git a/libjava/java/rmi/dgc/VMID.java b/libjava/java/rmi/dgc/VMID.java
index 408f365c513..a29a02836eb 100644
--- a/libjava/java/rmi/dgc/VMID.java
+++ b/libjava/java/rmi/dgc/VMID.java
@@ -38,79 +38,101 @@ exception statement from your version. */
package java.rmi.dgc;
import java.io.Serializable;
-import java.rmi.server.UID;
import java.net.InetAddress;
import java.net.UnknownHostException;
+import java.rmi.server.UID;
-public final class VMID
- implements Serializable {
-
-static final long serialVersionUID = -538642295484486218L;
-static final boolean areWeUnique;
-static byte[] localAddr;
-
-private byte[] addr;
-private UID uid;
-
-static {
- byte[] addr;
- boolean awu = true;
- try {
- addr = InetAddress.getLocalHost().getAddress();
- if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) {
- awu = false;
- }
- }
- catch (UnknownHostException _) {
- addr = new byte[]{ 127, 0, 0, 1 };
- awu = false;
- }
- localAddr = addr;
- areWeUnique = awu;
-}
-
-public VMID() {
- addr = localAddr;
- uid = new UID();
-}
-
-public static boolean isUnique() {
- return (areWeUnique);
-}
-
-public int hashCode() {
- return (super.hashCode());
-}
-
-public boolean equals(Object obj) {
- if (!(obj instanceof VMID)) {
- return (false);
- }
- VMID other = (VMID)obj;
- if (addr.length != other.addr.length) {
- return (false);
- }
- for (int i = addr.length - 1; i >= 0; i--) {
- if (addr[i] != other.addr[i]) {
- return (false);
- }
- }
- return (uid.equals(other.uid));
-}
-
-public String toString() {
- StringBuffer buf = new StringBuffer("[VMID: ");
- for (int i = 0; i < addr.length; i++) {
- if (i > 0) {
- buf.append(".");
- }
- buf.append(Integer.toString(addr[i]));
- }
- buf.append(" ");
- buf.append(uid.toString());
- buf.append("]");
-
- return (buf.toString());
-}
-
+public final class VMID implements Serializable
+{
+ static final long serialVersionUID = -538642295484486218L;
+
+ static final boolean areWeUnique;
+
+ static byte[] localAddr;
+
+ private byte[] addr;
+
+ private UID uid;
+
+ static
+ {
+ byte[] addr;
+ boolean awu = true;
+ try {
+ addr = InetAddress.getLocalHost().getAddress();
+ if (addr[0] == 127 && addr[1] == 0 && addr[2] == 0 && addr[3] == 1) {
+ awu = false;
+ }
+ }
+ catch (UnknownHostException _) {
+ addr = new byte[]{ 127, 0, 0, 1 };
+ awu = false;
+ }
+ localAddr = addr;
+ areWeUnique = awu;
+ }
+
+ public VMID()
+ {
+ addr = localAddr;
+ uid = new UID();
+ }
+
+ /**
+ * @deprecated
+ */
+ public static boolean isUnique ()
+ {
+ return areWeUnique;
+ }
+
+ public int hashCode ()
+ {
+ return super.hashCode();
+ }
+
+ public boolean equals (Object obj)
+ {
+ if (!(obj instanceof VMID))
+ {
+ return false;
+ }
+
+ VMID other = (VMID) obj;
+ if (addr.length != other.addr.length)
+ {
+ return false;
+ }
+
+ for (int i = addr.length - 1; i >= 0; i--)
+ {
+ if (addr[i] != other.addr[i])
+ {
+ return false;
+ }
+ }
+
+ return uid.equals(other.uid);
+ }
+
+ public String toString ()
+ {
+ StringBuffer buf = new StringBuffer ("[VMID: ");
+
+ for (int i = 0; i < addr.length; i++)
+ {
+ if (i > 0)
+ {
+ buf.append (".");
+ }
+
+ buf.append (Integer.toString (addr [i]));
+ }
+
+ buf.append (" ");
+ buf.append (uid.toString ());
+ buf.append ("]");
+
+ return buf.toString();
+ }
}
diff --git a/libjava/java/rmi/registry/Registry.java b/libjava/java/rmi/registry/Registry.java
index b69bceaef72..203da118c53 100644
--- a/libjava/java/rmi/registry/Registry.java
+++ b/libjava/java/rmi/registry/Registry.java
@@ -43,19 +43,22 @@ import java.rmi.AccessException;
import java.rmi.AlreadyBoundException;
import java.rmi.Remote;
-public interface Registry
- extends Remote {
+public interface Registry extends Remote
+{
+ public static final int REGISTRY_PORT = 1099;
-public static int REGISTRY_PORT = 1099;
+ public Remote lookup(String name)
+ throws RemoteException, NotBoundException, AccessException;
-public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException;
+ public void bind(String name, Remote obj)
+ throws RemoteException, AlreadyBoundException, AccessException;
-public void bind(String name, Remote obj) throws RemoteException, AlreadyBoundException, AccessException;
+ public void unbind(String name)
+ throws RemoteException, NotBoundException, AccessException;
-public void unbind(String name) throws RemoteException, NotBoundException, AccessException;
-
-public void rebind(String name, Remote obj) throws RemoteException, AccessException;
-
-public String[] list() throws RemoteException, AccessException;
+ public void rebind(String name, Remote obj)
+ throws RemoteException, AccessException;
+ public String[] list()
+ throws RemoteException, AccessException;
}
diff --git a/libjava/java/rmi/registry/RegistryHandler.java b/libjava/java/rmi/registry/RegistryHandler.java
index 018ec332119..bf89b6a397c 100644
--- a/libjava/java/rmi/registry/RegistryHandler.java
+++ b/libjava/java/rmi/registry/RegistryHandler.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 1996, 1997, 1998, 1999, 2003 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,15 +41,18 @@ import java.rmi.RemoteException;
import java.rmi.UnknownHostException;
/**
- * An internal interface that should no longer be used.
* @deprecated
*/
-public interface RegistryHandler {
-
-/** @deprecated */
-public Registry registryStub(String host, int port) throws RemoteException, UnknownHostException;
-
-/** @deprecated */
-public Registry registryImpl(int port) throws RemoteException;
-
+public interface RegistryHandler
+{
+ /**
+ * @deprecated
+ */
+ public Registry registryStub (String host, int port)
+ throws RemoteException, UnknownHostException;
+
+ /**
+ * @deprecated
+ */
+ public Registry registryImpl (int port) throws RemoteException;
}
diff --git a/libjava/java/rmi/server/LoaderHandler.java b/libjava/java/rmi/server/LoaderHandler.java
index 105ef5b798a..872585d4c55 100644
--- a/libjava/java/rmi/server/LoaderHandler.java
+++ b/libjava/java/rmi/server/LoaderHandler.java
@@ -40,15 +40,27 @@ package java.rmi.server;
import java.net.MalformedURLException;
import java.net.URL;
+/**
+ * @deprecated
+ */
+public interface LoaderHandler
+{
+ public static final String packagePrefix = "";
-public interface LoaderHandler {
+ /**
+ * @deprecated
+ */
+ public Class loadClass(String name)
+ throws MalformedURLException, ClassNotFoundException;
-public static final String packagePrefix = "";
-
-public Class loadClass(String name) throws MalformedURLException, ClassNotFoundException;
-
-public Class loadClass(URL codebase, String name) throws MalformedURLException, ClassNotFoundException;
-
-public Object getSecurityContext(ClassLoader loader);
+ /**
+ * @deprecated
+ */
+ public Class loadClass(URL codebase, String name)
+ throws MalformedURLException, ClassNotFoundException;
+ /**
+ * @deprecated
+ */
+ public Object getSecurityContext(ClassLoader loader);
}
diff --git a/libjava/java/rmi/server/LogStream.java b/libjava/java/rmi/server/LogStream.java
index ffbd3f67e71..5bf0689413b 100644
--- a/libjava/java/rmi/server/LogStream.java
+++ b/libjava/java/rmi/server/LogStream.java
@@ -41,62 +41,106 @@ import java.io.PrintStream;
import java.io.OutputStream;
import java.io.IOException;
-public class LogStream
- extends PrintStream {
-
-public static final int SILENT = 0;
-public static final int BRIEF = 10;
-public static final int VERBOSE = 20;
-
-private static PrintStream defStream;
-
-private LogStream(OutputStream s) {
- super(s);
-}
-
-public static LogStream log(String name) {
- throw new Error("Not implemented");
-}
-
-public static PrintStream getDefaultStream() {
- return (defStream);
-}
-
-public static void setDefaultStream(PrintStream s) {
- defStream = s;
-}
-
-public OutputStream getOutputStream() {
- return (out);
-}
-
-public void setOutputStream(OutputStream s) {
- out = s;
-}
-
-public void write(int b) {
- super.write(b);
-}
-
-public void write(byte[] b, int off, int len) {
- super.write(b, off, len);
-}
-
-public String toString() {
- throw new Error("Not implemented");
-}
-
-public static int parseLevel(String s) {
- if (s.equalsIgnoreCase("silent")) {
- return (SILENT);
- }
- if (s.equalsIgnoreCase("brief")) {
- return (BRIEF);
- }
- if (s.equalsIgnoreCase("verbose")) {
- return (VERBOSE);
- }
- return (SILENT);
-}
-
+/**
+ * @deprecated
+ */
+public class LogStream extends PrintStream
+{
+ public static final int SILENT = 0;
+ public static final int BRIEF = 10;
+ public static final int VERBOSE = 20;
+
+ private static PrintStream defStream;
+
+ private LogStream (OutputStream s)
+ {
+ super (s);
+ }
+
+ /**
+ * @deprecated
+ */
+ public static LogStream log (String name)
+ {
+ throw new Error ("Not implemented");
+ }
+
+ /**
+ * @deprecated
+ */
+ public static PrintStream getDefaultStream ()
+ {
+ return defStream;
+ }
+
+ /**
+ * @deprecated
+ */
+ public static void setDefaultStream (PrintStream s)
+ {
+ defStream = s;
+ }
+
+ /**
+ * @deprecated
+ */
+ public OutputStream getOutputStream ()
+ {
+ return out;
+ }
+
+ /**
+ * @deprecated
+ */
+ public void setOutputStream (OutputStream s)
+ {
+ out = s;
+ }
+
+ /**
+ * @deprecated
+ */
+ public void write (int buffer)
+ {
+ super.write (buffer);
+ }
+
+ /**
+ * @deprecated
+ */
+ public void write (byte[] buffer, int offset, int len)
+ {
+ super.write (buffer, offset, len);
+ }
+
+ /**
+ * @deprecated
+ */
+ public String toString ()
+ {
+ throw new Error ("Not implemented");
+ }
+
+ /**
+ * @deprecated
+ */
+ public static int parseLevel (String s)
+ {
+ if (s.equalsIgnoreCase ("silent"))
+ {
+ return SILENT;
+ }
+
+ if (s.equalsIgnoreCase ("brief"))
+ {
+ return BRIEF;
+ }
+
+ if (s.equalsIgnoreCase ("verbose"))
+ {
+ return VERBOSE;
+ }
+
+ return SILENT;
+ }
}
diff --git a/libjava/java/rmi/server/Operation.java b/libjava/java/rmi/server/Operation.java
index ab1a8d2721f..477446cbbeb 100644
--- a/libjava/java/rmi/server/Operation.java
+++ b/libjava/java/rmi/server/Operation.java
@@ -37,20 +37,34 @@ exception statement from your version. */
package java.rmi.server;
-public class Operation {
+/**
+ * @deprecated
+ */
+public class Operation
+{
+ private String operation;
-private String operation;
+ /**
+ * @deprecated
+ */
+ public Operation (String op)
+ {
+ operation = op;
+ }
-public Operation(String op) {
- operation = op;
-}
-
-public String getOperation() {
- return (operation);
-}
-
-public String toString() {
- return (operation);
-}
+ /**
+ * @deprecated
+ */
+ public String getOperation ()
+ {
+ return operation;
+ }
+ /**
+ * @deprecated
+ */
+ public String toString ()
+ {
+ return operation;
+ }
}
diff --git a/libjava/java/rmi/server/RMIFailureHandler.java b/libjava/java/rmi/server/RMIFailureHandler.java
index 4447c1f317d..dace6fa1b09 100644
--- a/libjava/java/rmi/server/RMIFailureHandler.java
+++ b/libjava/java/rmi/server/RMIFailureHandler.java
@@ -37,8 +37,10 @@ exception statement from your version. */
package java.rmi.server;
-public interface RMIFailureHandler {
-
-public boolean failure(Exception ex);
-
+public interface RMIFailureHandler
+{
+ /**
+ * @exception IOException If an error occurs
+ */
+ public boolean failure (Exception ex);
}
diff --git a/libjava/java/rmi/server/RMISocketFactory.java b/libjava/java/rmi/server/RMISocketFactory.java
index 95ff750ac68..544b1250660 100644
--- a/libjava/java/rmi/server/RMISocketFactory.java
+++ b/libjava/java/rmi/server/RMISocketFactory.java
@@ -43,42 +43,64 @@ import java.io.IOException;
import gnu.java.rmi.server.RMIDefaultSocketFactory;
public abstract class RMISocketFactory
- implements RMIClientSocketFactory, RMIServerSocketFactory {
-
-static private RMISocketFactory defaultFactory;
-static private RMISocketFactory currentFactory;
-static private RMIFailureHandler currentHandler;
-
-static {
- defaultFactory = new RMIDefaultSocketFactory();
- currentFactory = defaultFactory;
-}
-
-public RMISocketFactory() {
-}
-
-public abstract Socket createSocket(String host, int port) throws IOException;
-
-public abstract ServerSocket createServerSocket(int port) throws IOException;
-
-public static void setSocketFactory(RMISocketFactory fac) throws IOException {
- currentFactory = fac;
-}
-
-public static RMISocketFactory getSocketFactory() {
- return (currentFactory);
-}
-
-public static RMISocketFactory getDefaultSocketFactory() {
- return (defaultFactory);
-}
-
-public static void setFailureHandler(RMIFailureHandler fh) {
- currentHandler = fh;
-}
-
-public static RMIFailureHandler getFailureHandler() {
- return (currentHandler);
-}
-
+ implements RMIClientSocketFactory, RMIServerSocketFactory
+{
+ static private RMISocketFactory defaultFactory;
+ static private RMISocketFactory currentFactory;
+ static private RMIFailureHandler currentHandler;
+
+ static
+ {
+ defaultFactory = new RMIDefaultSocketFactory();
+ currentFactory = defaultFactory;
+ }
+
+ public RMISocketFactory ()
+ {
+ }
+
+ /**
+ * @exception IOException If an error occurs
+ */
+ public abstract Socket createSocket (String host, int port)
+ throws IOException;
+
+ /**
+ * @exception IOException If an error occurs
+ */
+ public abstract ServerSocket createServerSocket (int port)
+ throws IOException;
+
+ /**
+ * @exception IOException If an error occurs
+ * @exception SecurityException FIXME
+ */
+ public static void setSocketFactory (RMISocketFactory fac)
+ throws IOException
+ {
+ currentFactory = fac;
+ }
+
+ public static RMISocketFactory getSocketFactory ()
+ {
+ return currentFactory;
+ }
+
+ public static RMISocketFactory getDefaultSocketFactory ()
+ {
+ return defaultFactory;
+ }
+
+ /**
+ * @exception SecurityException FIXME
+ */
+ public static void setFailureHandler (RMIFailureHandler fh)
+ {
+ currentHandler = fh;
+ }
+
+ public static RMIFailureHandler getFailureHandler ()
+ {
+ return currentHandler;
+ }
}
diff --git a/libjava/java/rmi/server/RemoteCall.java b/libjava/java/rmi/server/RemoteCall.java
index 59deeb0a4af..bccbaf1be15 100644
--- a/libjava/java/rmi/server/RemoteCall.java
+++ b/libjava/java/rmi/server/RemoteCall.java
@@ -43,14 +43,44 @@ import java.io.ObjectOutput;
import java.io.ObjectInput;
import java.io.StreamCorruptedException;
-public interface RemoteCall {
+/**
+ * @deprecated
+ */
+public interface RemoteCall
+{
+ /**
+ * @deprecated
+ */
+ public ObjectOutput getOutputStream () throws IOException;
-public ObjectOutput getOutputStream() throws IOException;
-public void releaseOutputStream() throws IOException;
-public ObjectInput getInputStream() throws IOException;
-public void releaseInputStream() throws IOException;
-public ObjectOutput getResultStream(boolean success) throws IOException, StreamCorruptedException;
-public void executeCall() throws Exception;
-public void done() throws IOException;
+ /**
+ * @deprecated
+ */
+ public void releaseOutputStream () throws IOException;
+ /**
+ * @deprecated
+ */
+ public ObjectInput getInputStream () throws IOException;
+
+ /**
+ * @deprecated
+ */
+ public void releaseInputStream () throws IOException;
+
+ /**
+ * @deprecated
+ */
+ public ObjectOutput getResultStream (boolean success)
+ throws IOException, StreamCorruptedException;
+
+ /**
+ * @deprecated
+ */
+ public void executeCall () throws Exception;
+
+ /**
+ * @deprecated
+ */
+ public void done () throws IOException;
}
diff --git a/libjava/java/rmi/server/RemoteRef.java b/libjava/java/rmi/server/RemoteRef.java
index 4abf6e10165..c9abfd67242 100644
--- a/libjava/java/rmi/server/RemoteRef.java
+++ b/libjava/java/rmi/server/RemoteRef.java
@@ -43,19 +43,37 @@ import java.rmi.Remote;
import java.rmi.RemoteException;
import java.io.ObjectOutput;
-public interface RemoteRef
- extends Externalizable {
+public interface RemoteRef extends Externalizable
+{
+ public static final long serialVersionUID = 0;
+
+ public static final String packagePrefix = "gnu.java.rmi.server";
-public static final long serialVersionUID = 0;
-public static final String packagePrefix = "gnu.java.rmi.server";
-
-public void invoke(RemoteCall call) throws Exception;
-public Object invoke(Remote obj, Method method, Object[] params, long opnum) throws Exception;
-public RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException;
-public void done(RemoteCall call) throws RemoteException;
-public boolean remoteEquals(RemoteRef ref);
-public int remoteHashCode();
-public String getRefClass(ObjectOutput out);
-public String remoteToString();
+ /**
+ * @deprecated
+ */
+ public void invoke(RemoteCall call) throws Exception;
+
+ public Object invoke (Remote obj, Method method, Object[] params, long opnum)
+ throws Exception;
+
+ /**
+ * @deprecated
+ */
+ public RemoteCall newCall (RemoteObject obj, Operation[] op, int opnum,
+ long hash)
+ throws RemoteException;
+ /**
+ * @deprecated
+ */
+ public void done (RemoteCall call) throws RemoteException;
+
+ public boolean remoteEquals (RemoteRef ref);
+
+ public int remoteHashCode ();
+
+ public String getRefClass (ObjectOutput out);
+
+ public String remoteToString ();
}
diff --git a/libjava/java/rmi/server/RemoteStub.java b/libjava/java/rmi/server/RemoteStub.java
index f0123e96c48..07b61d64a00 100644
--- a/libjava/java/rmi/server/RemoteStub.java
+++ b/libjava/java/rmi/server/RemoteStub.java
@@ -1,5 +1,5 @@
/*
- Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (c) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,21 +37,25 @@ exception statement from your version. */
package java.rmi.server;
-public abstract class RemoteStub
- extends RemoteObject {
-
-public static final long serialVersionUID = -1585587260594494182l;
-
-protected RemoteStub() {
- super();
-}
-
-protected RemoteStub(RemoteRef ref) {
- super(ref);
-}
-
-protected static void setRef(RemoteStub stub, RemoteRef ref) {
- stub.ref = ref;
-}
-
-}
+public abstract class RemoteStub extends RemoteObject
+{
+ static final long serialVersionUID = -1585587260594494182l;
+
+ protected RemoteStub ()
+ {
+ super ();
+ }
+
+ protected RemoteStub (RemoteRef ref)
+ {
+ super (ref);
+ }
+
+ /**
+ * @deprecated
+ */
+ protected static void setRef (RemoteStub stub, RemoteRef ref)
+ {
+ stub.ref = ref;
+ }
+} // class RemoteSub
diff --git a/libjava/java/rmi/server/Skeleton.java b/libjava/java/rmi/server/Skeleton.java
index 9555f6b523e..751639430dc 100644
--- a/libjava/java/rmi/server/Skeleton.java
+++ b/libjava/java/rmi/server/Skeleton.java
@@ -38,12 +38,21 @@ exception statement from your version. */
package java.rmi.server;
import java.rmi.Remote;
-import java.lang.Exception;
import java.rmi.server.RemoteCall;
-public interface Skeleton {
-
-public void dispatch(Remote obj, RemoteCall theCall, int opnum, long hash) throws Exception;
-public Operation[] getOperations();
-
+/**
+ * @deprecated
+ */
+public interface Skeleton
+{
+ /**
+ * @deprecated
+ */
+ public void dispatch (Remote obj, RemoteCall theCall, int opnum, long hash)
+ throws Exception;
+
+ /**
+ * @deprecated
+ */
+ public Operation[] getOperations();
}
diff --git a/libjava/java/sql/Date.java b/libjava/java/sql/Date.java
index 59c8f1a3fc3..360376c2518 100644
--- a/libjava/java/sql/Date.java
+++ b/libjava/java/sql/Date.java
@@ -86,9 +86,11 @@ public class Date extends java.util.Date
* date in JDBC format into a Java date.
*
* @param str The string to parse.
- * @return The resulting <code>java.sql.Date</code> value.
+ * @return The resulting <code>java.sql.Date</code> value.
+ *
+ * @deprecated
*/
- public static Date valueOf(String str)
+ public static Date valueOf (String str)
{
try
{
@@ -105,9 +107,11 @@ public class Date extends java.util.Date
* This method returns this date in JDBC format.
*
* @return This date as a string.
+ *
+ * @deprecated
*/
public String toString()
{
- return(sdf.format(this));
+ return sdf.format(this);
}
}
diff --git a/libjava/java/sql/Time.java b/libjava/java/sql/Time.java
index 81f5d8cbf7b..7d515c25c3b 100644
--- a/libjava/java/sql/Time.java
+++ b/libjava/java/sql/Time.java
@@ -61,9 +61,11 @@ public class Time extends java.util.Date
* date in JDBC format into a Java date.
*
* @param str The string to parse.
- * @return The resulting <code>java.sql.Time</code> value.
+ * @return The resulting <code>java.sql.Time</code> value.
+ *
+ * @deprecated
*/
- public static Time valueOf(String str)
+ public static Time valueOf (String str)
{
try
{
@@ -110,11 +112,12 @@ public class Time extends java.util.Date
* This method returns this date in JDBC format.
*
* @return This date as a string.
+ *
+ * @deprecated
*/
- public String
- toString()
+ public String toString ()
{
- return sdf.format(this);
+ return sdf.format (this);
}
}
diff --git a/libjava/java/text/AttributedCharacterIterator.java b/libjava/java/text/AttributedCharacterIterator.java
index 3b8fb1bc0b5..ba976b7de84 100644
--- a/libjava/java/text/AttributedCharacterIterator.java
+++ b/libjava/java/text/AttributedCharacterIterator.java
@@ -70,6 +70,8 @@ public interface AttributedCharacterIterator extends CharacterIterator
public static class Attribute implements Serializable
{
+ private static final long serialVersionUID = -9142742483513960612L;
+
/*************************************************************************/
/*
diff --git a/libjava/java/text/MessageFormat.java b/libjava/java/text/MessageFormat.java
index f5ee3492974..caeb7265f46 100644
--- a/libjava/java/text/MessageFormat.java
+++ b/libjava/java/text/MessageFormat.java
@@ -143,6 +143,8 @@ final class MessageFormatElement
public class MessageFormat extends Format
{
+ private static final long serialVersionUID = 6479157306784022952L;
+
// Helper that returns the text up to the next format opener. The
// text is put into BUFFER. Returns index of character after end of
// string. Throws IllegalArgumentException on error.
diff --git a/libjava/java/util/Date.java b/libjava/java/util/Date.java
index 5bd531d5626..e81d24aaeb6 100644
--- a/libjava/java/util/Date.java
+++ b/libjava/java/util/Date.java
@@ -108,7 +108,7 @@ public class Date implements Cloneable, Comparable, java.io.Serializable
min).getTimeInMillis();
}
- /*
+ /**
* Creates a new Date Object representing the given time.
* @deprecated use <code>new GregorianCalendar(year+1900, month,
* day)</code> instead.
diff --git a/libjava/java/util/Properties.java b/libjava/java/util/Properties.java
index 279cf1e7b82..52ca144cb70 100644
--- a/libjava/java/util/Properties.java
+++ b/libjava/java/util/Properties.java
@@ -188,13 +188,17 @@ label = Name:\\u0020</pre>
{
char c = 0;
int pos = 0;
+ // If empty line or begins with a comment character, skip this line.
+ if (line.length() == 0
+ || line.charAt(0) == '#' || line.charAt(0) == '!')
+ continue;
+
while (pos < line.length()
&& Character.isWhitespace(c = line.charAt(pos)))
pos++;
- // If line is empty or begins with a comment character,
- // skip this line.
- if (pos == line.length() || c == '#' || c == '!')
+ // If line is empty skip this line.
+ if (pos == line.length())
continue;
// The characters up to the next Whitespace, ':', or '='
diff --git a/libjava/java/util/regex/Pattern.java b/libjava/java/util/regex/Pattern.java
index 0ea1bfb1c5a..39a01ba1864 100644
--- a/libjava/java/util/regex/Pattern.java
+++ b/libjava/java/util/regex/Pattern.java
@@ -38,7 +38,9 @@ exception statement from your version. */
// Stub class until java.util.regex is implemented.
package java.util.regex;
-public class Pattern
+import java.io.Serializable;
+
+public class Pattern implements Serializable
{
public static Pattern compile(String regex)
{
diff --git a/libjava/java/util/regex/PatternSyntaxException.java b/libjava/java/util/regex/PatternSyntaxException.java
index fc40d341862..e0487522321 100644
--- a/libjava/java/util/regex/PatternSyntaxException.java
+++ b/libjava/java/util/regex/PatternSyntaxException.java
@@ -44,6 +44,7 @@ package java.util.regex;
*/
public class PatternSyntaxException extends IllegalArgumentException
{
+ private static final long serialVersionUID = -3864639126226059218L;
/**
* Human readable escription of the syntax error.
diff --git a/libjava/javax/swing/AbstractAction.java b/libjava/javax/swing/AbstractAction.java
index fb81c503b48..cf9308d0685 100644
--- a/libjava/javax/swing/AbstractAction.java
+++ b/libjava/javax/swing/AbstractAction.java
@@ -49,7 +49,10 @@ import java.util.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public abstract class AbstractAction implements Action, Cloneable, Serializable {
+public abstract class AbstractAction
+ implements Action, Cloneable, Serializable
+{
+ static final long serialVersionUID = -6803159439231523484L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/AbstractCellEditor.java b/libjava/javax/swing/AbstractCellEditor.java
index 098aa990134..e25e97b18b3 100644
--- a/libjava/javax/swing/AbstractCellEditor.java
+++ b/libjava/javax/swing/AbstractCellEditor.java
@@ -47,7 +47,10 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public abstract class AbstractCellEditor implements CellEditor, Serializable {
+public abstract class AbstractCellEditor
+ implements CellEditor, Serializable
+{
+ static final long serialVersionUID = -1048006551406220959L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/AbstractListModel.java b/libjava/javax/swing/AbstractListModel.java
index f1033cf9781..4f7e8271c32 100644
--- a/libjava/javax/swing/AbstractListModel.java
+++ b/libjava/javax/swing/AbstractListModel.java
@@ -48,7 +48,10 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public abstract class AbstractListModel implements ListModel, Serializable {
+public abstract class AbstractListModel
+ implements ListModel, Serializable
+{
+ static final long serialVersionUID = -3285184064379168730L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/Action.java b/libjava/javax/swing/Action.java
index e9fbc762b1f..c091a261e15 100644
--- a/libjava/javax/swing/Action.java
+++ b/libjava/javax/swing/Action.java
@@ -78,6 +78,21 @@ public interface Action extends ActionListener {
*/
public static final String SMALL_ICON = "SmallIcon";
+ /**
+ * ACCELERATOR_KEY
+ */
+ public static final String ACCELERATOR_KEY = "AcceleratorKey";
+
+ /**
+ * ACTION_COMMAND_KEY
+ */
+ public static final String ACTION_COMMAND_KEY = "ActionCommandKey";
+
+ /**
+ * MNEMONIC_KEY
+ */
+ public static final String MNEMONIC_KEY = "MnemonicKey";
+
//-------------------------------------------------------------
// Interface: Action ------------------------------------------
diff --git a/libjava/javax/swing/ActionMap.java b/libjava/javax/swing/ActionMap.java
index b95144de4f6..ea9e0aa362d 100644
--- a/libjava/javax/swing/ActionMap.java
+++ b/libjava/javax/swing/ActionMap.java
@@ -46,7 +46,9 @@ import java.util.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class ActionMap implements Serializable {
+public class ActionMap implements Serializable
+{
+ static final long serialVersionUID = -6277518704513986346L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/BorderFactory.java b/libjava/javax/swing/BorderFactory.java
index 4a4433c7bff..808144fdd7a 100644
--- a/libjava/javax/swing/BorderFactory.java
+++ b/libjava/javax/swing/BorderFactory.java
@@ -1,3 +1,41 @@
+/* BorderFactory.java
+ Copyright (C) 2002 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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 javax.swing;
import java.awt.*;
diff --git a/libjava/javax/swing/ButtonGroup.java b/libjava/javax/swing/ButtonGroup.java
index 2301e5194ef..502d0840933 100644
--- a/libjava/javax/swing/ButtonGroup.java
+++ b/libjava/javax/swing/ButtonGroup.java
@@ -44,6 +44,8 @@ import javax.swing.event.*;
public class ButtonGroup implements Serializable
{
+ static final long serialVersionUID = 4259076101881721375L;
+
Vector v = new Vector();
ButtonModel sel;
diff --git a/libjava/javax/swing/DefaultBoundedRangeModel.java b/libjava/javax/swing/DefaultBoundedRangeModel.java
index a0b1abd618d..c6ea1d03177 100644
--- a/libjava/javax/swing/DefaultBoundedRangeModel.java
+++ b/libjava/javax/swing/DefaultBoundedRangeModel.java
@@ -47,7 +47,10 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class DefaultBoundedRangeModel implements BoundedRangeModel, Serializable {
+public class DefaultBoundedRangeModel
+ implements BoundedRangeModel, Serializable
+{
+ static final long serialVersionUID = 5034068491295259790L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/DefaultButtonModel.java b/libjava/javax/swing/DefaultButtonModel.java
index 1dc0c8c97b6..9d6f4089da7 100644
--- a/libjava/javax/swing/DefaultButtonModel.java
+++ b/libjava/javax/swing/DefaultButtonModel.java
@@ -42,9 +42,11 @@ import java.awt.event.*;
import java.awt.*;
import javax.swing.event.*;
-public
-class DefaultButtonModel implements ButtonModel, java.io.Serializable
+public class DefaultButtonModel
+ implements ButtonModel, java.io.Serializable
{
+ static final long serialVersionUID = -5342609566534980231L;
+
Vector actions = new Vector();
Vector items = new Vector();
diff --git a/libjava/javax/swing/DefaultCellEditor.java b/libjava/javax/swing/DefaultCellEditor.java
index 3f9442e08d1..5e35701ff5e 100644
--- a/libjava/javax/swing/DefaultCellEditor.java
+++ b/libjava/javax/swing/DefaultCellEditor.java
@@ -50,7 +50,11 @@ import javax.swing.tree.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor {
+public class DefaultCellEditor
+ extends AbstractCellEditor
+ implements TableCellEditor, TreeCellEditor
+{
+ static final long serialVersionUID = 3564035141373880027L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/DefaultComboBoxModel.java b/libjava/javax/swing/DefaultComboBoxModel.java
index 2ceb15a6573..5c8361a2dee 100644
--- a/libjava/javax/swing/DefaultComboBoxModel.java
+++ b/libjava/javax/swing/DefaultComboBoxModel.java
@@ -47,7 +47,9 @@ import java.util.*;
* @version 1.0
*/
public class DefaultComboBoxModel extends AbstractListModel
- implements MutableComboBoxModel, Serializable {
+ implements MutableComboBoxModel, Serializable
+{
+ static final long serialVersionUID = 6698657703676921904L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/DefaultDesktopManager.java b/libjava/javax/swing/DefaultDesktopManager.java
index 5581e580c4b..132fb61920c 100644
--- a/libjava/javax/swing/DefaultDesktopManager.java
+++ b/libjava/javax/swing/DefaultDesktopManager.java
@@ -46,7 +46,9 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class DefaultDesktopManager implements DesktopManager, Serializable {
+public class DefaultDesktopManager implements DesktopManager, Serializable
+{
+ static final long serialVersionUID = 4657624909838017887L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/DefaultListCellRenderer.java b/libjava/javax/swing/DefaultListCellRenderer.java
index c6f8809e743..204c4ec23bf 100644
--- a/libjava/javax/swing/DefaultListCellRenderer.java
+++ b/libjava/javax/swing/DefaultListCellRenderer.java
@@ -49,7 +49,9 @@ import javax.swing.plaf.*;
* @version 1.0
*/
public class DefaultListCellRenderer extends JLabel
- implements ListCellRenderer, Serializable {
+ implements ListCellRenderer, Serializable
+{
+ static final long serialVersionUID = 7708947179685189462L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/DefaultSingleSelectionModel.java b/libjava/javax/swing/DefaultSingleSelectionModel.java
index a55c911c3a8..0f6e280c951 100644
--- a/libjava/javax/swing/DefaultSingleSelectionModel.java
+++ b/libjava/javax/swing/DefaultSingleSelectionModel.java
@@ -48,7 +48,9 @@ import javax.swing.event.*;
* @version 1.0
*/
public class DefaultSingleSelectionModel implements
- SingleSelectionModel, Serializable {
+ SingleSelectionModel, Serializable
+{
+ static final long serialVersionUID = 3676229404753786004L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/InputMap.java b/libjava/javax/swing/InputMap.java
index 9f81121c5a9..861fe57ea84 100644
--- a/libjava/javax/swing/InputMap.java
+++ b/libjava/javax/swing/InputMap.java
@@ -46,7 +46,9 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class InputMap implements Serializable {
+public class InputMap implements Serializable
+{
+ static final long serialVersionUID = -5429059542008604257L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/JComponent.java b/libjava/javax/swing/JComponent.java
index fad7b6cb2a5..119e3859193 100644
--- a/libjava/javax/swing/JComponent.java
+++ b/libjava/javax/swing/JComponent.java
@@ -61,6 +61,7 @@ import javax.accessibility.*;
*/
public abstract class JComponent extends Container implements Serializable
{
+ static final long serialVersionUID = -5242478962609715464L;
/**
* accessibleContext
*/
diff --git a/libjava/javax/swing/JMenu.java b/libjava/javax/swing/JMenu.java
index 0d4d8686300..961d8025e70 100644
--- a/libjava/javax/swing/JMenu.java
+++ b/libjava/javax/swing/JMenu.java
@@ -51,7 +51,11 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class JMenu extends JMenuItem implements Accessible, MenuElement {
+public class JMenu
+ extends JMenuItem
+ implements Accessible, MenuElement
+{
+ static final long serialVersionUID = 4227225638931828014L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/JSlider.java b/libjava/javax/swing/JSlider.java
index e0588288d60..58475b67f16 100644
--- a/libjava/javax/swing/JSlider.java
+++ b/libjava/javax/swing/JSlider.java
@@ -49,7 +49,11 @@ import javax.swing.plaf.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class JSlider extends JComponent implements SwingConstants, Accessible {
+public class JSlider
+ extends JComponent
+ implements SwingConstants, Accessible
+{
+ static final long serialVersionUID = -1441275936141218479L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/KeyStroke.java b/libjava/javax/swing/KeyStroke.java
index b2687cdc18c..7fe06995a9f 100644
--- a/libjava/javax/swing/KeyStroke.java
+++ b/libjava/javax/swing/KeyStroke.java
@@ -46,7 +46,9 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class KeyStroke implements Serializable {
+public class KeyStroke implements Serializable
+{
+ static final long serialVersionUID = -9060180771037902530L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/OverlayLayout.java b/libjava/javax/swing/OverlayLayout.java
index a238a436a47..4698e10bf45 100644
--- a/libjava/javax/swing/OverlayLayout.java
+++ b/libjava/javax/swing/OverlayLayout.java
@@ -46,7 +46,10 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class OverlayLayout implements LayoutManager2, Serializable {
+public class OverlayLayout
+ implements LayoutManager2, Serializable
+{
+ static final long serialVersionUID = 18082829169631543L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/ScrollPaneLayout.java b/libjava/javax/swing/ScrollPaneLayout.java
index 503113e4545..bd65471d05f 100644
--- a/libjava/javax/swing/ScrollPaneLayout.java
+++ b/libjava/javax/swing/ScrollPaneLayout.java
@@ -47,7 +47,10 @@ import javax.swing.plaf.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class ScrollPaneLayout implements LayoutManager, ScrollPaneConstants, Serializable {
+public class ScrollPaneLayout
+ implements LayoutManager, ScrollPaneConstants, Serializable
+{
+ static final long serialVersionUID = -4480022884523193743L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/SizeRequirements.java b/libjava/javax/swing/SizeRequirements.java
index 4b5edf56a7e..da6d1129d0f 100644
--- a/libjava/javax/swing/SizeRequirements.java
+++ b/libjava/javax/swing/SizeRequirements.java
@@ -45,7 +45,9 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class SizeRequirements implements Serializable {
+public class SizeRequirements implements Serializable
+{
+ static final long serialVersionUID = 9217749429906736553L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/UIManager.java b/libjava/javax/swing/UIManager.java
index 18eebe35839..8feaccf30e3 100644
--- a/libjava/javax/swing/UIManager.java
+++ b/libjava/javax/swing/UIManager.java
@@ -51,6 +51,8 @@ import java.beans.*;
public class UIManager implements Serializable
{
+ static final long serialVersionUID = -5547433830339189365L;
+
static class LookAndFeelInfo
{
String name, clazz;
diff --git a/libjava/javax/swing/UnsupportedLookAndFeelException.java b/libjava/javax/swing/UnsupportedLookAndFeelException.java
index 18488648dea..2e032cd94fc 100644
--- a/libjava/javax/swing/UnsupportedLookAndFeelException.java
+++ b/libjava/javax/swing/UnsupportedLookAndFeelException.java
@@ -40,7 +40,7 @@ package javax.swing;
public class UnsupportedLookAndFeelException extends Exception
{
- UnsupportedLookAndFeelException(String a)
+ public UnsupportedLookAndFeelException(String a)
{
super(a);
}
diff --git a/libjava/javax/swing/ViewportLayout.java b/libjava/javax/swing/ViewportLayout.java
index f5beb76db13..f735fe6207d 100644
--- a/libjava/javax/swing/ViewportLayout.java
+++ b/libjava/javax/swing/ViewportLayout.java
@@ -46,7 +46,9 @@ import java.io.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class ViewportLayout implements LayoutManager, Serializable {
+public class ViewportLayout implements LayoutManager, Serializable
+{
+ static final long serialVersionUID = -788225906076097229L;
//-------------------------------------------------------------
// Initialization ---------------------------------------------
diff --git a/libjava/javax/swing/WindowConstants.java b/libjava/javax/swing/WindowConstants.java
index ca501c0d6c4..1eec7f6bb0f 100644
--- a/libjava/javax/swing/WindowConstants.java
+++ b/libjava/javax/swing/WindowConstants.java
@@ -63,5 +63,10 @@ public interface WindowConstants {
*/
public static final int DISPOSE_ON_CLOSE = 2;
+ /**
+ * EXIT_ON_CLOSE
+ */
+ public static final int EXIT_ON_CLOSE =3;
+
} // WindowConstants
diff --git a/libjava/javax/swing/border/AbstractBorder.java b/libjava/javax/swing/border/AbstractBorder.java
index 971665414b6..d0285b33a5c 100644
--- a/libjava/javax/swing/border/AbstractBorder.java
+++ b/libjava/javax/swing/border/AbstractBorder.java
@@ -42,6 +42,8 @@ import java.awt.*;
public abstract class AbstractBorder implements Border, Serializable
{
+ static final long serialVersionUID = -545885975315191844L;
+
AbstractBorder()
{
}
diff --git a/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java b/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
index 74bf0642a07..1df4e325e94 100644
--- a/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
+++ b/libjava/javax/swing/colorchooser/DefaultColorSelectionModel.java
@@ -48,7 +48,9 @@ import javax.swing.event.*;
* @version 1.0
*/
public class DefaultColorSelectionModel
- implements ColorSelectionModel, Serializable {
+ implements ColorSelectionModel, Serializable
+{
+ static final long serialVersionUID = 580150227676302096L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/event/EventListenerList.java b/libjava/javax/swing/event/EventListenerList.java
index 5017aa54336..1197ccb353a 100644
--- a/libjava/javax/swing/event/EventListenerList.java
+++ b/libjava/javax/swing/event/EventListenerList.java
@@ -45,8 +45,9 @@ import java.util.EventListener;
* EventListenerList
* @author Andrew Selkirk
*/
-public class EventListenerList extends Object
- implements Serializable {
+public class EventListenerList extends Object implements Serializable
+{
+ static final long serialVersionUID = -5677132037850737084L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/plaf/BorderUIResource.java b/libjava/javax/swing/plaf/BorderUIResource.java
index 2ec1fe59d0d..6e8a8291d74 100644
--- a/libjava/javax/swing/plaf/BorderUIResource.java
+++ b/libjava/javax/swing/plaf/BorderUIResource.java
@@ -55,6 +55,8 @@ public class BorderUIResource
extends Object
implements Border, UIResource, Serializable
{
+ static final long serialVersionUID = -3440553684010079691L;
+
private Border delegate;
/**
diff --git a/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java b/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
index 7655ea3b23a..c9e0c798e4e 100644
--- a/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
+++ b/libjava/javax/swing/plaf/basic/BasicLookAndFeel.java
@@ -64,6 +64,8 @@ import javax.swing.text.JTextComponent;
public abstract class BasicLookAndFeel extends LookAndFeel
implements Serializable
{
+ static final long serialVersionUID = 5484702182266873258L;
+
/**
* Constructor BasicLookAndFeel
*/
diff --git a/libjava/javax/swing/table/AbstractTableModel.java b/libjava/javax/swing/table/AbstractTableModel.java
index 790568f88b4..08eeb829a74 100644
--- a/libjava/javax/swing/table/AbstractTableModel.java
+++ b/libjava/javax/swing/table/AbstractTableModel.java
@@ -46,7 +46,9 @@ import javax.swing.event.*;
* AbstractTableModel
* @author Andrew Selkirk
*/
-public abstract class AbstractTableModel implements TableModel, Serializable {
+public abstract class AbstractTableModel implements TableModel, Serializable
+{
+ static final long serialVersionUID = -5798593159423650347L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/table/DefaultTableCellRenderer.java b/libjava/javax/swing/table/DefaultTableCellRenderer.java
index 63c8db2c252..a7bcc5c36b7 100644
--- a/libjava/javax/swing/table/DefaultTableCellRenderer.java
+++ b/libjava/javax/swing/table/DefaultTableCellRenderer.java
@@ -1,3 +1,41 @@
+/* DefaultTableCellRenderer.java
+ Copyright (C) 2002 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., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 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 javax.swing.table;
import java.awt.Component;
import java.io.Serializable;
@@ -9,6 +47,8 @@ import javax.swing.JTable;
public class DefaultTableCellRenderer extends JLabel
implements TableCellRenderer, Serializable
{
+ static final long serialVersionUID = 7878911414715528324L;
+
public static class UIResource extends DefaultTableCellRenderer
implements javax.swing.plaf.UIResource
{
diff --git a/libjava/javax/swing/table/DefaultTableColumnModel.java b/libjava/javax/swing/table/DefaultTableColumnModel.java
index 0ead6bd9ee6..9ab2fff8116 100644
--- a/libjava/javax/swing/table/DefaultTableColumnModel.java
+++ b/libjava/javax/swing/table/DefaultTableColumnModel.java
@@ -49,7 +49,11 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class DefaultTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, Serializable {
+public class DefaultTableColumnModel
+ implements TableColumnModel, PropertyChangeListener,
+ ListSelectionListener, Serializable
+{
+ static final long serialVersionUID = 6580012493508960512L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/table/DefaultTableModel.java b/libjava/javax/swing/table/DefaultTableModel.java
index 3815bb98c04..1587310856e 100644
--- a/libjava/javax/swing/table/DefaultTableModel.java
+++ b/libjava/javax/swing/table/DefaultTableModel.java
@@ -46,7 +46,10 @@ import javax.swing.event.*;
* DefaultTableModel
* @author Andrew Selkirk
*/
-public class DefaultTableModel extends AbstractTableModel implements Serializable {
+public class DefaultTableModel extends AbstractTableModel
+ implements Serializable
+{
+ static final long serialVersionUID = 6680042567037222321L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/table/TableColumn.java b/libjava/javax/swing/table/TableColumn.java
index 8be7c19233f..f5ace625675 100644
--- a/libjava/javax/swing/table/TableColumn.java
+++ b/libjava/javax/swing/table/TableColumn.java
@@ -47,7 +47,9 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class TableColumn implements Serializable {
+public class TableColumn implements Serializable
+{
+ static final long serialVersionUID = -6113660025878112608L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/text/BadLocationException.java b/libjava/javax/swing/text/BadLocationException.java
index 81e6cc8dc03..d62ad5465f9 100644
--- a/libjava/javax/swing/text/BadLocationException.java
+++ b/libjava/javax/swing/text/BadLocationException.java
@@ -40,7 +40,25 @@ package javax.swing.text;
public class BadLocationException extends Exception
{
- BadLocationException()
- {
- }
+ int offset;
+
+ /**
+ * Constructs a <code>BadLocationException</code>
+ *
+ * @param str A string indicating what was wrong with the arguments
+ * @param offset Offset within the document that was requested &gt;= 0
+ */
+ public BadLocationException (String str, int offset)
+ {
+ super (str);
+ this.offset = offset;
+ }
+
+ /**
+ * Returns the offset into the document that was not legal
+ */
+ public int offsetRequested ()
+ {
+ return offset;
+ }
}
diff --git a/libjava/javax/swing/text/Caret.java b/libjava/javax/swing/text/Caret.java
index 69f63edf68d..f78f24edf1d 100644
--- a/libjava/javax/swing/text/Caret.java
+++ b/libjava/javax/swing/text/Caret.java
@@ -42,21 +42,37 @@ import javax.swing.event.*;
public interface Caret
{
- void addChangeListener(ChangeListener l);
- void deinstall(JTextComponent c);
- int getBlinkRate();
- int getDot();
- Point getMagicaretPosition();
- int getMark();
- void install(JTextComponent c);
- boolean isSelectionVisible();
- boolean isVisible();
- void moveDot(int dot);
- void paint(Graphics g);
- void removeChangeListener(ChangeListener l);
- void setBlinkRate(int rate);
- void setDot(int dot);
- void setMagicCaretPosition(Point p);
- void setSelectionVisible(boolean v);
- void setVisible(boolean v);
+ void addChangeListener(ChangeListener l);
+
+ void deinstall(JTextComponent c);
+
+ int getBlinkRate();
+
+ int getDot();
+
+ Point getMagicCaretPosition();
+
+ int getMark();
+
+ void install(JTextComponent c);
+
+ boolean isSelectionVisible();
+
+ boolean isVisible();
+
+ void moveDot(int dot);
+
+ void paint(Graphics g);
+
+ void removeChangeListener(ChangeListener l);
+
+ void setBlinkRate(int rate);
+
+ void setDot(int dot);
+
+ void setMagicCaretPosition(Point p);
+
+ void setSelectionVisible(boolean v);
+
+ void setVisible(boolean v);
}
diff --git a/libjava/javax/swing/text/ComponentView.java b/libjava/javax/swing/text/ComponentView.java
index 220ba0c8185..77a222cdb08 100644
--- a/libjava/javax/swing/text/ComponentView.java
+++ b/libjava/javax/swing/text/ComponentView.java
@@ -46,7 +46,6 @@ public class ComponentView extends View
super(elem);
}
-
protected Component createComponent()
{
return null;
@@ -57,7 +56,7 @@ public class ComponentView extends View
return 0;
}
- public Component getComponent()
+ public final Component getComponent()
{
return null;
}
diff --git a/libjava/javax/swing/text/DefaultCaret.java b/libjava/javax/swing/text/DefaultCaret.java
index 7fb7f945262..7fa94a4615a 100644
--- a/libjava/javax/swing/text/DefaultCaret.java
+++ b/libjava/javax/swing/text/DefaultCaret.java
@@ -104,7 +104,7 @@ public class DefaultCaret extends Rectangle implements Caret, FocusListener, Mou
Point magic = null;
public void setMagicCaretPosition(Point p)
{ magic = p; }
- public Point getMagicaretPosition()
+ public Point getMagicCaretPosition()
{ return magic; }
@@ -167,6 +167,3 @@ public class DefaultCaret extends Rectangle implements Caret, FocusListener, Mou
repaint();
}
}
-
-
-
diff --git a/libjava/javax/swing/text/Document.java b/libjava/javax/swing/text/Document.java
index 398030f0849..fa7b1ce2817 100644
--- a/libjava/javax/swing/text/Document.java
+++ b/libjava/javax/swing/text/Document.java
@@ -42,21 +42,25 @@ import javax.swing.event.*;
public interface Document
{
- void addDocumentListener(DocumentListener listener);
- void addUndoableEditListener(UndoableEditListener listener);
- Position createPosition(int offs);
- Element getDefaultRootElement();
- Position getEndPosition();
- int getLength();
- Object getProperty(Object key);
- Element[] getRootElements();
- Position getStartPosition();
- String getText(int offset, int length);
- void getText(int offset, int length, Segment txt);
- void insertString(int offset, String str, AttributeSet a);
- void putProperty(Object key, Object value);
- void remove(int offs, int len);
- void removeDocumentListener(DocumentListener listener);
- void removeUndoableEditListener(UndoableEditListener listener);
- void render(Runnable r);
+ public static final String StreamDescriptionProperty = "stream";
+
+ public static final String TitleProperty = "text";
+
+ void addDocumentListener(DocumentListener listener);
+ void addUndoableEditListener(UndoableEditListener listener);
+ Position createPosition(int offs);
+ Element getDefaultRootElement();
+ Position getEndPosition();
+ int getLength();
+ Object getProperty(Object key);
+ Element[] getRootElements();
+ Position getStartPosition();
+ String getText(int offset, int length);
+ void getText(int offset, int length, Segment txt);
+ void insertString(int offset, String str, AttributeSet a);
+ void putProperty(Object key, Object value);
+ void remove(int offs, int len);
+ void removeDocumentListener(DocumentListener listener);
+ void removeUndoableEditListener(UndoableEditListener listener);
+ void render(Runnable r);
}
diff --git a/libjava/javax/swing/text/StyledEditorKit.java b/libjava/javax/swing/text/StyledEditorKit.java
index 84b27bd11a0..16af630456a 100644
--- a/libjava/javax/swing/text/StyledEditorKit.java
+++ b/libjava/javax/swing/text/StyledEditorKit.java
@@ -50,7 +50,9 @@ import javax.swing.event.*;
* @author Andrew Selkirk
* @version 1.0
*/
-public class StyledEditorKit extends DefaultEditorKit {
+public class StyledEditorKit extends DefaultEditorKit
+{
+ static final long serialVersionUID = 7002391892985555948L;
//-------------------------------------------------------------
// Classes ----------------------------------------------------
diff --git a/libjava/javax/swing/tree/DefaultMutableTreeNode.java b/libjava/javax/swing/tree/DefaultMutableTreeNode.java
index 288b0edc1c9..0c2b5459f99 100644
--- a/libjava/javax/swing/tree/DefaultMutableTreeNode.java
+++ b/libjava/javax/swing/tree/DefaultMutableTreeNode.java
@@ -45,7 +45,10 @@ import java.util.*;
* DefaultMutableTreeNode
* @author Andrew Selkirk
*/
-public class DefaultMutableTreeNode implements Cloneable, MutableTreeNode, Serializable {
+public class DefaultMutableTreeNode
+ implements Cloneable, MutableTreeNode, Serializable
+{
+ static final long serialVersionUID = -4298474751201349152L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/tree/DefaultTreeCellRenderer.java b/libjava/javax/swing/tree/DefaultTreeCellRenderer.java
index ab534be96a4..6de55deae32 100644
--- a/libjava/javax/swing/tree/DefaultTreeCellRenderer.java
+++ b/libjava/javax/swing/tree/DefaultTreeCellRenderer.java
@@ -45,8 +45,10 @@ import javax.swing.*;
* DefaultTreeCellRenderer
* @author Andrew Selkirk
*/
-public class DefaultTreeCellRenderer extends JLabel implements TreeCellRenderer {
-
+public class DefaultTreeCellRenderer
+ extends JLabel
+ implements TreeCellRenderer
+{
//-------------------------------------------------------------
// Variables --------------------------------------------------
//-------------------------------------------------------------
diff --git a/libjava/javax/swing/tree/DefaultTreeModel.java b/libjava/javax/swing/tree/DefaultTreeModel.java
index daf3f1100b5..d905be96cb8 100644
--- a/libjava/javax/swing/tree/DefaultTreeModel.java
+++ b/libjava/javax/swing/tree/DefaultTreeModel.java
@@ -46,7 +46,9 @@ import javax.swing.event.*;
* DefaultTreeModel
* @author Andrew Selkirk
*/
-public class DefaultTreeModel implements Serializable, TreeModel {
+public class DefaultTreeModel implements Serializable, TreeModel
+{
+ static final long serialVersionUID = -2621068368932566998L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/tree/DefaultTreeSelectionModel.java b/libjava/javax/swing/tree/DefaultTreeSelectionModel.java
index f772c188c13..9b5358241bd 100644
--- a/libjava/javax/swing/tree/DefaultTreeSelectionModel.java
+++ b/libjava/javax/swing/tree/DefaultTreeSelectionModel.java
@@ -48,7 +48,10 @@ import javax.swing.event.*;
* DefaultTreeSelectionModel
* @author Andrew Selkirk
*/
-public class DefaultTreeSelectionModel implements Cloneable, Serializable, TreeSelectionModel {
+public class DefaultTreeSelectionModel
+ implements Cloneable, Serializable, TreeSelectionModel
+{
+ static final long serialVersionUID = 3288129636638950196L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/tree/TreePath.java b/libjava/javax/swing/tree/TreePath.java
index 56899cf9280..77627db77b1 100644
--- a/libjava/javax/swing/tree/TreePath.java
+++ b/libjava/javax/swing/tree/TreePath.java
@@ -44,7 +44,9 @@ import java.io.*;
* TreePath
* @author Andrew Selkirk
*/
-public class TreePath implements Serializable {
+public class TreePath implements Serializable
+{
+ static final long serialVersionUID = 4380036194768077479L;
//-------------------------------------------------------------
// Variables --------------------------------------------------
diff --git a/libjava/javax/swing/undo/AbstractUndoableEdit.java b/libjava/javax/swing/undo/AbstractUndoableEdit.java
index e98b87cb3ae..68c28130e0f 100644
--- a/libjava/javax/swing/undo/AbstractUndoableEdit.java
+++ b/libjava/javax/swing/undo/AbstractUndoableEdit.java
@@ -1,5 +1,5 @@
/* AbstractTableModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,171 +44,175 @@ import java.io.Serializable;
* AbstractUndoableEdit
* @author Andrew Selkirk
*/
-public class AbstractUndoableEdit extends Object
- implements UndoableEdit,
- Serializable {
-
- //-------------------------------------------------------------
- // Constants --------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * String returned by getRedoPresentationName()
- */
- protected static String RedoName = "Redo";
-
- /**
- * String returned by getUndoPresentationName()
- */
- protected static String UndoName = "Undo";
-
-
- //-------------------------------------------------------------
- // Variables --------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * TODO
- */
- private boolean hasBeenDone = false;
-
- /**
- * The edit is alive
- */
- private boolean alive = true;
-
-
- //-------------------------------------------------------------
- // Initialization ---------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * Create new AbstractUndoableEdit
- */
- public AbstractUndoableEdit() {
- } // AbstractUndoableEdit()
-
-
- //-------------------------------------------------------------
- // Interface: UndoableEdit ------------------------------------
- //-------------------------------------------------------------
-
- /**
- * addEdit
- * @param anEdit TODO
- * @returns TODO
- */
- public boolean addEdit(UndoableEdit anEdit) {
- return false;
- } // addEdit()
-
- /**
- * canRedo()
- * @returns true if redoable, false otherwise
- */
- public boolean canRedo() {
- if (alive == true && hasBeenDone == false) {
- return true;
- } // if
- return false;
- } // canRedo()
-
- /**
- * canUndo()
- * @returns true if undoable, false otherwise
- */
- public boolean canUndo() {
- if (alive == true && hasBeenDone == true) {
- return true;
- } // if
- return false;
- } // canUndo()
-
- /**
- * die
- */
- public void die() {
- alive = false;
- } // die()
-
- /**
- * getPresentation
- * @returns TODO
- */
- public String getPresentationName() {
- return "";
- } // getPresentationName()
-
- /**
- * getRedoPresentationName
- * @returns TODO
- */
- public String getRedoPresentationName() {
- if (getPresentationName().equals("") == true) {
- return RedoName;
- } else {
- return RedoName + " " + getPresentationName();
- }
- } // getRedoPresentationName()
-
- /**
- * getUndoPresentationName
- * @returns TODO
- */
- public String getUndoPresentationName() {
- if (getPresentationName().equals("") == true) {
- return UndoName;
- } else {
- return UndoName + " " + getPresentationName();
- }
- } // getUndoPresentationName()
-
- /**
- * isSignificant
- * @returns true
- */
- public boolean isSignificant() {
- return true;
- } // isSignificant()
-
- /**
- * redo
- * @throws CannotRedoException TODO
- */
- public void redo() throws CannotRedoException {
- if (canRedo() == false) {
- throw new CannotRedoException();
- }
- hasBeenDone = true;
- } // redo()
-
- /**
- * replaceEdit
- * @param anEdit TODO
- * @returns TODO
- */
- public boolean replaceEdit(UndoableEdit anEdit) {
- return false;
- } // replaceEdit()
-
- /**
- * String representation
- * @returns String representation
- */
- public String toString() {
- return null; // TODO
- } // toString()
-
- /**
- * undo
- * @throws CannotUndoException TODO
- */
- public void undo() throws CannotUndoException {
- if (canUndo() == false) {
- throw new CannotUndoException();
- }
- hasBeenDone = false;
- } // undo()
-
-
+public class AbstractUndoableEdit implements UndoableEdit, Serializable
+{
+ static final long serialVersionUID = 580150227676302096L;
+
+ //-------------------------------------------------------------
+ // Constants --------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * String returned by getRedoPresentationName()
+ */
+ protected static final String RedoName = "Redo";
+
+ /**
+ * String returned by getUndoPresentationName()
+ */
+ protected static final String UndoName = "Undo";
+
+
+ //-------------------------------------------------------------
+ // Variables --------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * TODO
+ */
+ private boolean hasBeenDone = false;
+
+ /**
+ * The edit is alive
+ */
+ private boolean alive = true;
+
+
+ //-------------------------------------------------------------
+ // Initialization ---------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * Create new AbstractUndoableEdit
+ */
+ public AbstractUndoableEdit()
+ {
+ } // AbstractUndoableEdit()
+
+
+ //-------------------------------------------------------------
+ // Interface: UndoableEdit ------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * addEdit
+ * @param anEdit TODO
+ * @returns TODO
+ */
+ public boolean addEdit(UndoableEdit anEdit)
+ {
+ return false;
+ } // addEdit()
+
+ /**
+ * canRedo()
+ * @returns true if redoable, false otherwise
+ */
+ public boolean canRedo()
+ {
+ if (alive == true && hasBeenDone == false)
+ return true;
+ return false;
+ } // canRedo()
+
+ /**
+ * canUndo()
+ * @returns true if undoable, false otherwise
+ */
+ public boolean canUndo()
+ {
+ if (alive == true && hasBeenDone == true)
+ return true;
+ return false;
+ } // canUndo()
+
+ /**
+ * die
+ */
+ public void die()
+ {
+ alive = false;
+ } // die()
+
+ /**
+ * getPresentation
+ * @returns TODO
+ */
+ public String getPresentationName()
+ {
+ return "";
+ } // getPresentationName()
+
+ /**
+ * getRedoPresentationName
+ * @returns TODO
+ */
+ public String getRedoPresentationName()
+ {
+ if (getPresentationName().equals(""))
+ return RedoName;
+ return RedoName + " " + getPresentationName();
+ } // getRedoPresentationName()
+
+ /**
+ * getUndoPresentationName
+ * @returns TODO
+ */
+ public String getUndoPresentationName()
+ {
+ if (getPresentationName().equals(""))
+ return UndoName;
+ return UndoName + " " + getPresentationName();
+ } // getUndoPresentationName()
+
+ /**
+ * isSignificant
+ * @returns true
+ */
+ public boolean isSignificant()
+ {
+ return true;
+ } // isSignificant()
+
+ /**
+ * redo
+ * @throws CannotRedoException TODO
+ */
+ public void redo() throws CannotRedoException
+ {
+ if (! canRedo())
+ throw new CannotRedoException();
+ hasBeenDone = true;
+ } // redo()
+
+ /**
+ * replaceEdit
+ * @param anEdit TODO
+ * @returns TODO
+ */
+ public boolean replaceEdit(UndoableEdit anEdit)
+ {
+ return false;
+ } // replaceEdit()
+
+ /**
+ * String representation
+ * @returns String representation
+ */
+ public String toString()
+ {
+ return (super.toString() + " hasBeenDone: " + hasBeenDone
+ + " alive: " + alive);
+ }
+
+ /**
+ * undo
+ * @throws CannotUndoException TODO
+ */
+ public void undo() throws CannotUndoException
+ {
+ if (! canUndo())
+ throw new CannotUndoException();
+ hasBeenDone = false;
+ } // undo()
} // AbstractUndoableEdit
diff --git a/libjava/javax/swing/undo/StateEdit.java b/libjava/javax/swing/undo/StateEdit.java
index a56564b45fd..f617bc3a455 100644
--- a/libjava/javax/swing/undo/StateEdit.java
+++ b/libjava/javax/swing/undo/StateEdit.java
@@ -1,5 +1,5 @@
-/* AbstractTableModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* StateEdit.java --
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,108 +44,133 @@ import java.util.*;
* StateEdit
* @author Andrew Selkirk
*/
-public class StateEdit extends AbstractUndoableEdit {
-
- //-------------------------------------------------------------
- // Variables --------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * RCSID
- */
- protected static final String RCSID = ""; // TODO
-
- /**
- * object
- */
- protected StateEditable object;
-
- /**
- * preState
- */
- protected Hashtable preState;
-
- /**
- * postState
- */
- protected Hashtable postState;
-
- /**
- * undoRedoName
- */
- protected String undoRedoName;
-
-
- //-------------------------------------------------------------
- // Initialization ---------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * Constructor StateEdit
- * @param value0 TODO
- */
- public StateEdit(StateEditable value0) {
- // TODO
- } // StateEdit()
-
- /**
- * Constructor StateEdit
- * @param value0 TODO
- * @param value1 TODO
- */
- public StateEdit(StateEditable value0, String value1) {
- // TODO
- } // StateEdit()
-
-
- //-------------------------------------------------------------
- // Methods ----------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * init
- * @param value0 TODO
- * @param value1 TODO
- */
- protected void init(StateEditable value0, String value1) {
- // TODO
- } // init()
-
- /**
- * end
- */
- public void end() {
- // TODO
- } // end()
-
- /**
- * undo
- */
- public void undo() {
- // TODO
- } // undo()
-
- /**
- * redo
- */
- public void redo() {
- // TODO
- } // redo()
-
- /**
- * getPresentationName
- * @returns String
- */
- public String getPresentationName() {
- return null; // TODO
- } // getPresentationName()
-
- /**
- * removeRedundantState
- */
- protected void removeRedundantState() {
- // TODO
- } // removeRedundantState()
-
-
-} // StateEdit
+public class StateEdit extends AbstractUndoableEdit
+{
+
+ //-------------------------------------------------------------
+ // Variables --------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * RCSID
+ */
+ protected static final String RCSID = ""; // TODO
+
+ /**
+ * object
+ */
+ protected StateEditable object;
+
+ /**
+ * preState
+ */
+ protected Hashtable preState;
+
+ /**
+ * postState
+ */
+ protected Hashtable postState;
+
+ /**
+ * undoRedoName
+ */
+ protected String undoRedoName;
+
+
+ //-------------------------------------------------------------
+ // Initialization ---------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * Constructor StateEdit
+ * @param obj Object to edit
+ */
+ public StateEdit(StateEditable obj)
+ {
+ init(obj, null);
+ }
+
+ /**
+ * Constructor StateEdit
+ * @param obj Object to edit
+ * @param name Presentation name
+ */
+ public StateEdit(StateEditable obj, String name)
+ {
+ init(obj, name);
+ }
+
+
+ //-------------------------------------------------------------
+ // Methods ----------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * Initialize this object.
+ * @param obj Object to edit
+ * @param name Presentation name
+ */
+ protected void init(StateEditable obj, String name)
+ {
+ object = obj;
+ undoRedoName = name;
+ preState = new Hashtable();
+ postState = new Hashtable();
+ obj.storeState(preState);
+ }
+
+ /**
+ * Indicate that all edits are finished, and update this object
+ * with final state.
+ */
+ public void end()
+ {
+ object.storeState(postState);
+ removeRedundantState();
+ }
+
+ /**
+ * Undo this edit by applying the initial state to the edited object.
+ */
+ public void undo()
+ {
+ object.restoreState(preState);
+ }
+
+ /**
+ * Undo this edit by applying the final state to the edited object.
+ */
+ public void redo()
+ {
+ object.restoreState(postState);
+ }
+
+ /**
+ * Return the presentation name of this object.
+ * @returns The name, or null if not set
+ */
+ public String getPresentationName()
+ {
+ return undoRedoName;
+ }
+
+ /**
+ * removeRedundantState
+ */
+ protected void removeRedundantState()
+ {
+ Iterator i = preState.keySet().iterator();
+ while (i.hasNext())
+ {
+ Object key = i.next();
+ if (postState.containsKey(key))
+ {
+ if (preState.get(key).equals(postState.get(key)))
+ {
+ i.remove();
+ postState.remove(key);
+ }
+ }
+ }
+ }
+}
diff --git a/libjava/javax/swing/undo/StateEditable.java b/libjava/javax/swing/undo/StateEditable.java
index 1d3eaa29ead..d757438ff73 100644
--- a/libjava/javax/swing/undo/StateEditable.java
+++ b/libjava/javax/swing/undo/StateEditable.java
@@ -1,5 +1,5 @@
-/* AbstractTableModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* StateEditable.java --
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -44,19 +44,22 @@ import java.util.Hashtable;
* StateEditable interface
* @author Andrew Selkirk
*/
-public interface StateEditable {
-
- /**
- * Restore State
- * @param state State
- */
- public void restoreState(Hashtable state);
-
- /**
- * Store State
- * @param state State
- */
- public void storeState(Hashtable state);
+public interface StateEditable
+{
+ /**
+ * Restore State
+ * @param state State
+ */
+ public void restoreState(Hashtable state);
+ /**
+ * Store State
+ * @param state State
+ */
+ public void storeState(Hashtable state);
+ /**
+ * For some reason, Sun made the RCS IDs visible.
+ */
+ public static final String RCSID = "We aren't compatible";
} // StateEditable
diff --git a/libjava/javax/swing/undo/UndoableEditSupport.java b/libjava/javax/swing/undo/UndoableEditSupport.java
index 6f873988e5f..f09f3ffad4b 100644
--- a/libjava/javax/swing/undo/UndoableEditSupport.java
+++ b/libjava/javax/swing/undo/UndoableEditSupport.java
@@ -1,5 +1,5 @@
-/* AbstractTableModel.java --
- Copyright (C) 2002 Free Software Foundation, Inc.
+/* UndoableEditSupport.java --
+ Copyright (C) 2002, 2003 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -45,126 +45,169 @@ import javax.swing.event.*;
* UndoableEditSupport
* @author Andrew Selkirk
*/
-public class UndoableEditSupport {
-
- //-------------------------------------------------------------
- // Variables --------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * updateLevel
- */
- protected int updateLevel;
-
- /**
- * compoundEdit
- */
- protected CompoundEdit compoundEdit;
-
- /**
- * listeners
- */
- protected Vector listeners = new Vector();
-
- /**
- * realSource
- */
- protected Object realSource;
-
-
- //-------------------------------------------------------------
- // Initialization ---------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * Constructor UndoableEditSupport
- */
- public UndoableEditSupport() {
- // TODO
- } // UndoableEditSupport()
-
- /**
- * Constructor UndoableEditSupport
- * @param object TODO
- */
- public UndoableEditSupport(Object object) {
- realSource = object;
- } // UndoableEditSupport()
-
-
- //-------------------------------------------------------------
- // Methods ----------------------------------------------------
- //-------------------------------------------------------------
-
- /**
- * toString
- * @returns String
- */
- public String toString() {
- return null; // TODO
- } // toString()
-
- /**
- * addUndoableEditListener
- * @param value0 TODO
- */
- public synchronized void addUndoableEditListener(UndoableEditListener value0) {
- // TODO
- } // addUndoableEditListener()
-
- /**
- * removeUndoableEditListener
- * @param value0 TODO
- */
- public synchronized void removeUndoableEditListener(UndoableEditListener value0) {
- // TODO
- } // removeUndoableEditListener()
-
- /**
- * _postEdit
- * @param value0 TODO
- */
- protected void _postEdit(UndoableEdit value0) {
- // TODO
- } // _postEdit()
-
- /**
- * postEdit
- * @param value0 TODO
- */
- public synchronized void postEdit(UndoableEdit value0) {
- // TODO
- } // postEdit()
-
- /**
- * getUpdateLevel
- * @returns int
- */
- public int getUpdateLevel() {
- return 0; // TODO
- } // getUpdateLevel()
-
- /**
- * beginUpdate
- */
- public synchronized void beginUpdate() {
- // TODO
- } // beginUpdate()
-
- /**
- * createCompoundEdit
- * @returns CompoundEdit
- */
- protected CompoundEdit createCompoundEdit() {
- return null; // TODO
- } // createCompoundEdit()
-
- /**
- * endUpdate
- */
- public synchronized void endUpdate() {
- // TODO
- } // endUpdate()
-
-
-} // UndoableEditSupport
+public class UndoableEditSupport
+{
+
+ //-------------------------------------------------------------
+ // Variables --------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * updateLevel
+ */
+ protected int updateLevel;
+
+ /**
+ * compoundEdit
+ */
+ protected CompoundEdit compoundEdit;
+
+ /**
+ * listeners
+ */
+ protected Vector listeners = new Vector();
+
+ /**
+ * realSource
+ */
+ protected Object realSource;
+
+
+ //-------------------------------------------------------------
+ // Initialization ---------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * Constructor UndoableEditSupport
+ */
+ public UndoableEditSupport()
+ {
+ }
+
+ /**
+ * Constructor UndoableEditSupport
+ * @param object TODO
+ */
+ public UndoableEditSupport(Object object)
+ {
+ realSource = object;
+ }
+
+
+ //-------------------------------------------------------------
+ // Methods ----------------------------------------------------
+ //-------------------------------------------------------------
+
+ /**
+ * toString
+ * @returns String
+ */
+ public String toString()
+ {
+ return (super.toString() + " realSource: " + realSource
+ + " updateLevel: " + updateLevel);
+ }
+
+ /**
+ * Add a listener.
+ * @param val the listener
+ */
+ public synchronized void addUndoableEditListener(UndoableEditListener val)
+ {
+ listeners.add(val);
+ }
+
+ /**
+ * Remove a listener.
+ * @param val the listener
+ */
+ public synchronized void removeUndoableEditListener(UndoableEditListener val)
+ {
+ listeners.removeElement(val);
+ }
+
+ /**
+ * Return an array of all listeners.
+ * @returns all the listeners
+ */
+ public synchronized UndoableEditListener[] getUndoableEditListeners()
+ {
+ UndoableEditListener[] result = new UndoableEditListener[listeners.size()];
+ return (UndoableEditListener[]) listeners.toArray(result);
+ }
+
+ /**
+ * _postEdit
+ * @param value0 TODO
+ */
+ protected void _postEdit(UndoableEdit edit)
+ {
+ UndoableEditEvent event = new UndoableEditEvent(realSource, edit);
+ int max = listeners.size();
+ for (int i = 0; i < max; ++i)
+ {
+ UndoableEditListener l
+ = (UndoableEditListener) (listeners.elementAt(i));
+ l.undoableEditHappened(event);
+ }
+ }
+
+ /**
+ * postEdit
+ * @param value0 TODO
+ */
+ public synchronized void postEdit(UndoableEdit edit)
+ {
+ if (compoundEdit == null)
+ compoundEdit.addEdit(edit);
+ else
+ _postEdit(edit);
+ }
+
+ /**
+ * getUpdateLevel
+ * @returns int
+ */
+ public int getUpdateLevel()
+ {
+ return updateLevel;
+ }
+
+ /**
+ * beginUpdate
+ */
+ public synchronized void beginUpdate()
+ {
+ if (compoundEdit != null)
+ {
+ // FIXME: what? We can't push a new one. This isn't even
+ // documented anyway.
+ endUpdate();
+ }
+
+ compoundEdit = createCompoundEdit();
+ ++updateLevel;
+ }
+
+ /**
+ * createCompoundEdit
+ * @returns CompoundEdit
+ */
+ protected CompoundEdit createCompoundEdit()
+ {
+ return new CompoundEdit();
+ }
+
+ /**
+ * endUpdate
+ */
+ public synchronized void endUpdate()
+ {
+ // FIXME: assert updateLevel == 1;
+ compoundEdit.end();
+ CompoundEdit c = compoundEdit;
+ compoundEdit = null;
+ --updateLevel;
+ _postEdit(c);
+ }
+}
diff --git a/libjava/posix.cc b/libjava/posix.cc
index ebff1c9ec79..2f808334d7c 100644
--- a/libjava/posix.cc
+++ b/libjava/posix.cc
@@ -25,6 +25,26 @@ details. */
extern "C" unsigned long long _clock (void);
#endif
+// platform-specific executable name
+extern const char **_Jv_argv;
+
+#if defined(HAVE_PROC_SELF_EXE)
+static char exec_name[20];
+ // initialized in _Jv_platform_initialize()
+#endif
+
+const char *_Jv_ThisExecutable (void)
+{
+#if defined(DISABLE_MAIN_ARGS)
+ return "[Embedded App]";
+#elif defined(HAVE_PROC_SELF_EXE)
+ return exec_name;
+ // initialized in _Jv_platform_initialize()
+#else
+ return _Jv_argv[0];
+#endif
+}
+
// gettimeofday implementation.
jlong
_Jv_platform_gettimeofday ()
@@ -62,6 +82,11 @@ _Jv_platform_initialize (void)
#else
signal (SIGPIPE, SIG_IGN);
#endif
+
+#if defined (HAVE_PROC_SELF_EXE)
+ // Compute our executable name
+ sprintf (exec_name, "/proc/%d/exe", getpid ());
+#endif
}
// Set platform-specific System properties.
diff --git a/libjava/prims.cc b/libjava/prims.cc
index 61c66540831..dc05d4b96ff 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -86,9 +86,6 @@ const char *_Jv_Jar_Class_Path;
property_pair *_Jv_Environment_Properties;
#endif
-// The name of this executable.
-static char *_Jv_execName;
-
// Stash the argv pointer to benefit native libraries that need it.
const char **_Jv_argv;
int _Jv_argc;
@@ -707,22 +704,6 @@ static JArray<jstring> *arg_vec;
// The primary thread.
static java::lang::Thread *main_thread;
-char *
-_Jv_ThisExecutable (void)
-{
- return _Jv_execName;
-}
-
-void
-_Jv_ThisExecutable (const char *name)
-{
- if (name)
- {
- _Jv_execName = (char *) _Jv_Malloc (strlen (name) + 1);
- strcpy (_Jv_execName, name);
- }
-}
-
#ifndef DISABLE_GETENV_PROPERTIES
static char *
@@ -960,19 +941,6 @@ _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv,
java::lang::Runtime *runtime = NULL;
-
-#ifdef DISABLE_MAIN_ARGS
- _Jv_ThisExecutable ("[Embedded App]");
-#else
-#ifdef HAVE_PROC_SELF_EXE
- char exec_name[20];
- sprintf (exec_name, "/proc/%d/exe", getpid ());
- _Jv_ThisExecutable (exec_name);
-#else
- _Jv_ThisExecutable (argv[0]);
-#endif /* HAVE_PROC_SELF_EXE */
-#endif /* DISABLE_MAIN_ARGS */
-
try
{
// Set this very early so that it is seen when java.lang.System
diff --git a/libjava/resolve.cc b/libjava/resolve.cc
index aa17ea9c5f0..ea506452d58 100644
--- a/libjava/resolve.cc
+++ b/libjava/resolve.cc
@@ -11,6 +11,7 @@ details. */
/* Author: Kresten Krab Thorup <krab@gnu.org> */
#include <config.h>
+#include <platform.h>
#include <java-interp.h>
@@ -1003,14 +1004,7 @@ _Jv_JNIMethod::ncode ()
memcpy (&jni_arg_types[offset], &closure->arg_types[0],
arg_count * sizeof (ffi_type *));
- // NOTE: This must agree with the JNICALL definition in jni.h
-#ifdef WIN32
-#define FFI_JNI_ABI FFI_STDCALL
-#else
-#define FFI_JNI_ABI FFI_DEFAULT_ABI
-#endif
-
- if (ffi_prep_cif (&jni_cif, FFI_JNI_ABI,
+ if (ffi_prep_cif (&jni_cif, _Jv_platform_ffi_abi,
extra_args + arg_count, rtype,
jni_arg_types) != FFI_OK)
throw_internal_error ("ffi_prep_cif failed for JNI function");
diff --git a/libjava/sysdep/ia64/locks.h b/libjava/sysdep/ia64/locks.h
index 6edee83ea99..bde43b420fb 100644
--- a/libjava/sysdep/ia64/locks.h
+++ b/libjava/sysdep/ia64/locks.h
@@ -11,6 +11,8 @@ details. */
#ifndef __SYSDEP_LOCKS_H__
#define __SYSDEP_LOCKS_H__
+#include <ia64intrin.h>
+
typedef size_t obj_addr_t; /* Integer type big enough for object */
/* address. */
@@ -19,11 +21,7 @@ compare_and_swap(volatile obj_addr_t *addr,
obj_addr_t old,
obj_addr_t new_val)
{
- unsigned long oldval;
- __asm__ __volatile__("mov ar.ccv=%4 ;; cmpxchg8.acq %0=%1,%2,ar.ccv"
- : "=r"(oldval), "=m"(*addr)
- : "r"(new_val), "1"(*addr), "r"(old) : "memory");
- return (oldval == old);
+ return __sync_bool_compare_and_swap (addr, old, new_val);
}
// The fact that *addr is volatile should cause the compiler to
@@ -31,7 +29,7 @@ compare_and_swap(volatile obj_addr_t *addr,
inline static void
release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
{
- __asm__ __volatile__(" " : : : "memory");
+ __asm__ __volatile__("" : : : "memory");
*(addr) = new_val;
}
@@ -40,11 +38,12 @@ compare_and_swap_release(volatile obj_addr_t *addr,
obj_addr_t old,
obj_addr_t new_val)
{
- unsigned long oldval;
- __asm__ __volatile__("mov ar.ccv=%4 ;; cmpxchg8.rel %0=%1,%2,ar.ccv"
- : "=r"(oldval), "=m"(*addr)
- : "r"(new_val), "1"(*addr), "r"(old) : "memory");
- return (oldval == old);
+ register unsigned long ar_ccv __asm__("ar.ccv") = old;
+ unsigned long out;
+ __asm__ __volatile__("cmpxchg8.rel %0=%1,%2,%4"
+ : "=r"(out), "=m"(*addr)
+ : "r"(new_val), "m"(*addr), "d"(ar_ccv) : "memory");
+ return (out == old);
}
#endif
diff --git a/libjava/testsuite/ChangeLog b/libjava/testsuite/ChangeLog
index 62cf1d224ba..2ad8cf79c23 100644
--- a/libjava/testsuite/ChangeLog
+++ b/libjava/testsuite/ChangeLog
@@ -1,3 +1,39 @@
+2003-03-22 Andreas Tobler <a.tobler@schweiz.ch>
+
+ * libjava.jni/jni.exp: Add compilation/link fix dor darwin dylibs.
+
+2003-03-22 Tom Tromey <tromey@redhat.com>
+
+ * lib/libjava.exp (gcj_invoke): Moved...
+ * libjava.jni/jni.exp: ...from here.
+
+ * libjava.cni/shortfield.out: New file.
+ * libjava.cni/shortfield.java: New file.
+ * libjava.cni/natshortfield.cc: New file.
+ * libjava.cni/natlongfield.cc: New file.
+ * libjava.cni/longfield.out: New file.
+ * libjava.cni/longfield.java: New file.
+
+ * libjava.cni/cni.exp: New file.
+
+2003-03-11 Tom Tromey <tromey@redhat.com>
+
+ * libjava.lang/initfield.java: New file.
+ * libjava.lang/initfield.out: New file.
+
+2003-03-08 Tom Tromey <tromey@redhat.com>
+
+ * libjava.lang/initfield.java: New file.
+ * libjava.lang/initfield.out: New file.
+
+2003-03-10 Tom Tromey <tromey@redhat.com>
+
+ * libjava.jacks/jacks.xfail: Updated to reflect reality.
+
+2003-03-02 Mark Wielaard <mark@klomp.org>
+
+ * libjava.mauve/xfails: Remove all AcuniaPropertiesTest failures
+
2003-02-23 Tom Tromey <tromey@redhat.com>
* libjava.jacks/jacks.xfail: Most 4.7.10 tests pass now.
diff --git a/libjava/testsuite/lib/libjava.exp b/libjava/testsuite/lib/libjava.exp
index 6be5ec67662..972b7be64cc 100644
--- a/libjava/testsuite/lib/libjava.exp
+++ b/libjava/testsuite/lib/libjava.exp
@@ -457,6 +457,50 @@ proc gcj_link {program main files {options {}}} {
return 1
}
+# Invoke the program and see what happens. Return 0 on failure.
+proc gcj_invoke {program expectFile ld_library_additions} {
+ global env
+ set lib_path $env(LD_LIBRARY_PATH)
+
+ set newval .
+ if {[llength $ld_library_additions] > 0} {
+ append newval :[join $ld_library_additions :]
+ }
+ append newval :$lib_path
+
+ setenv LD_LIBRARY_PATH $newval
+ setenv SHLIB_PATH $newval
+
+ verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
+
+ set result [libjava_load ./$program]
+ set status [lindex $result 0]
+ set output [lindex $result 1]
+
+ # Restore setting
+ setenv LD_LIBRARY_PATH $lib_path
+ setenv SHLIB_PATH $lib_path
+
+ if {$status != "pass"} {
+ verbose "got $output"
+ fail "$program run"
+ untested "$program output"
+ return 0
+ }
+
+ set id [open $expectFile r]
+ set expected [read $id]
+ close $id
+
+ if {! [string compare $output $expected]} {
+ pass "$program output"
+ return 1
+ } else {
+ fail "$program output"
+ return 0
+ }
+}
+
# Invoke a program and check its output. EXECUTABLE is the program;
# ARGS are the arguments to the program. Returns 1 if tests passed
# (or things were left untested), 0 otherwise.
diff --git a/libjava/testsuite/libjava.jacks/jacks.xfail b/libjava/testsuite/libjava.jacks/jacks.xfail
index da306e279c6..df8d5b94dab 100644
--- a/libjava/testsuite/libjava.jacks/jacks.xfail
+++ b/libjava/testsuite/libjava.jacks/jacks.xfail
@@ -7,7 +7,6 @@
14.7-shadow-3
14.3-1
14.3-scope-2
-14.3-scope-3
14.3-scope-4
14.3-scope-5
14.3-scope-9
@@ -167,7 +166,7 @@
8.8.5.1-qualified-15
8.8.7-inaccessible-default-constructor-toplevel-2
8.8.7-accessible-default-constructor-inner-18
-8.8.7-accessible-default-constructor-inner-20
+8.8.7-accessible-default-constructor-inner-26
8.3-inheritance-1
8.3-inheritance-2
8.3-inheritance-3
@@ -427,13 +426,19 @@
15.9.5.1-exception-3
15.9.5.1-exception-4
15.9.3-choosing-4
+15.9.1-unqualified-anonymous-2
+15.9.1-unqualified-anonymous-4
+15.9.1-unqualified-anonymous-5
+15.9.1-unqualified-anonymous-12
+15.9.1-unqualified-anonymous-14
+15.9.1-unqualified-anonymous-15
15.9.1-unqualified-anonymous-23
-15.9.1-unqualified-anonymous-25
+15.9.1-unqualified-anonymous-24
15.9.1-unqualified-anonymous-26
15.9.1-unqualified-anonymous-27
15.9.1-qualified-anonymous-2
-15.9.1-qualified-anonymous-6
-15.9.1-qualified-anonymous-7
+15.9.1-qualified-anonymous-4
+15.9.1-qualified-anonymous-5
15.9.1-qualified-anonymous-10
15.9.1-qualified-anonymous-12
15.9.1-qualified-anonymous-13
@@ -444,12 +449,14 @@
15.9.1-qualified-anonymous-22
15.9.1-qualified-anonymous-26
15.9.1-qualified-anonymous-28
-15.9.1-unqualified-concrete-6
-15.9.1-unqualified-concrete-7
+15.9.1-unqualified-concrete-2
+15.9.1-unqualified-concrete-4
+15.9.1-unqualified-concrete-5
15.9.1-unqualified-concrete-10
15.9.1-unqualified-concrete-14
-15.9.1-qualified-concrete-6
-15.9.1-qualified-concrete-7
+15.9.1-unqualified-concrete-15
+15.9.1-qualified-concrete-4
+15.9.1-qualified-concrete-5
15.9.1-qualified-concrete-10
15.9.1-qualified-concrete-12
15.9.1-qualified-concrete-14
@@ -573,6 +580,7 @@
15.14.2-final-3
15.14.1-final-2
15.14.1-final-3
+15.8.2-synthetic-1
15.8.2-type-11
15.8.2-type-12
15.8.2-type-13
@@ -664,13 +672,14 @@
6.5.4.1-simple-11
6.5.1-type-15
6.5.1-type-16
-6.5.1-type-19
6.5.1-typeorpackage-2
6.5.5.2-type-4
6.5.5.2-type-5
6.5.5.2-type-6
6.5.5.2-type-7
6.5.5.2-type-8
+6.5.5.1-import-2
+6.5.5.1-import-3
6.5.5.1-nested-4
6.5.5.1-nested-7
6.5.5.1-nested-8
@@ -683,17 +692,27 @@
6.5.5.1-nested-21
6.5.5.1-nested-23
6.3-1
-7.4.2-subpackage-1
-7.4.2-subpackage-2
+7.4.2-2
7.5.1-canonical-3
-7.5.1-accessible-1
+7.5.1-accessible-4
+7.5.1-accessible-5
7.5.1-duplicate-4
+7.5.1-shadow-2
+7.5.2-canonical-2
7.5.2-canonical-3
7.5.2-accessible-1
7.5.2-accessible-3
+7.5.2-accessible-4
+7.5.2-duplicate-1
+7.5.2-duplicate-2
7.5.2-duplicate-3
+7.5.2-duplicate-4
+7.1-named-5
+7.1-named-6
7.1-named-7
+7.6-optional-restrictions-1
7.6-unnamed-scope-1
+7.6-unnamed-scope-2
4.5.4-static-1
4.5.4-static-5
4.5.4-parameter-2
@@ -720,6 +739,7 @@ non-jls-zip-2
13.1-runtime-constant-1
13.1-runtime-constant-3
13.1-runtime-field-1
+13.4.8-constant-runtime-1
14-runtime-jump-1
14-runtime-jump-2
14.3.1-runtime-3
@@ -763,3 +783,4 @@ non-jls-zip-2
15.20-2-runtime-1
15.15-runtime-3
15.15-runtime-4
+14.19.2-runtime-try-1
diff --git a/libjava/testsuite/libjava.jni/jni.exp b/libjava/testsuite/libjava.jni/jni.exp
index 2aec4c9bf8b..7dad519d415 100644
--- a/libjava/testsuite/libjava.jni/jni.exp
+++ b/libjava/testsuite/libjava.jni/jni.exp
@@ -5,11 +5,26 @@
# success.
proc gcj_jni_compile_c_to_so {file {options {}}} {
global srcdir
-
+ global host_triplet
+ verbose "options: $options"
+ set options_cxx $options
+ set options ""
+
+# apple uses a different extension for shared/dynamic libraries
+# so we check against powerpc-apple-darwin and set them to
+# dylib, else we assume it's .so
+
+ if { [ regexp {powerpc-apple-darwin} $host_triplet] } {
+ set so_extension "dylib"
+ set so_flag "-dynamiclib"
+ } else {
+ set so_extension "so"
+ set so_flag "-shared"
+ }
set name [file rootname [file tail $file]]
- set soname lib${name}.so
+ set soname lib${name}.${so_extension}
- lappend options "additional_flags=-shared -fPIC"
+ lappend options "additional_flags=${so_flag} -fPIC"
# Find the generated header.
lappend options "additional_flags=-I. -I.."
# Find jni.h.
@@ -43,53 +58,20 @@ proc gcj_jni_build_header {file} {
return 1
}
-# Invoke the program and see what happens. Return 0 on failure.
-proc gcj_invoke {program expectFile ld_library_additions} {
- global env
- set lib_path $env(LD_LIBRARY_PATH)
-
- set newval .
- if {[llength $ld_library_additions] > 0} {
- append newval :[join $ld_library_additions :]
- }
- append newval :$lib_path
-
- setenv LD_LIBRARY_PATH $newval
- setenv SHLIB_PATH $newval
-
- verbose "LD_LIBRARY_PATH=$env(LD_LIBRARY_PATH)"
-
- set result [libjava_load ./$program]
- set status [lindex $result 0]
- set output [lindex $result 1]
-
- # Restore setting
- setenv LD_LIBRARY_PATH $lib_path
- setenv SHLIB_PATH $lib_path
-
- if {$status != "pass"} {
- verbose "got $output"
- fail "$program run"
- untested "$program output"
- return 0
- }
+# Do all the work for a single JNI test. Return 0 on failure.
+proc gcj_jni_test_one {file} {
+ global runtests
+ global host_triplet
- set id [open $expectFile r]
- set expected [read $id]
- close $id
+# apple uses a different extension for shared/dynamic libraries
+# so we check against powerpc-apple-darwin and set them to
+# dylib, else we assume it's .so
- if {! [string compare $output $expected]} {
- pass "$program output"
- return 1
+ if { [ regexp {powerpc-apple-darwin} $host_triplet] } {
+ set so_extension "dylib"
} else {
- fail "$program output"
- return 0
+ set so_extension "so"
}
-}
-
-# Do all the work for a single JNI test. Return 0 on failure.
-proc gcj_jni_test_one {file} {
- global runtests
# The base name. We use it for several purposes.
set main [file rootname [file tail $file]]
@@ -156,7 +138,7 @@ proc gcj_jni_test_one {file} {
}
# When we succeed we remove all our clutter.
- eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.so]
+ eval gcj_cleanup [glob -nocomplain -- ${main}.*] [list $main lib${main}.${so_extension}]
return 1
}
diff --git a/libjava/testsuite/libjava.mauve/xfails b/libjava/testsuite/libjava.mauve/xfails
index dda740eee44..cf82adeeb57 100644
--- a/libjava/testsuite/libjava.mauve/xfails
+++ b/libjava/testsuite/libjava.mauve/xfails
@@ -100,10 +100,3 @@ FAIL: gnu.testlet.java.net.URL.URLTest: new URL(string) (number 18)
FAIL: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file) (number 26)
FAIL: gnu.testlet.java.net.URL.URLTest: new URL(protocol, host, file) (number 54)
FAIL: gnu.testlet.java.net.MulticastSocket.MulticastSocketTest: joinGroup() twice. (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: should throw NullPointerException -- 1 (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: v does not contain:$longvalue=I'mtryingtogiveavaluelongerthen40characters$ (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: should throw NullPointerException -- 1 (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: all elements are the same (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: checkvalue -- got:$ents=$ (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: checkvalue -- got:$dog=nocat $ (number 1)
-FAIL: gnu.testlet.java.util.Properties.AcuniaPropertiesTest: check if all elements were found -- got: [dog=no\cat ] (number 1)
diff --git a/libjava/verify.cc b/libjava/verify.cc
index dcb003dfb22..8f8c1df9eb1 100644
--- a/libjava/verify.cc
+++ b/libjava/verify.cc
@@ -1526,6 +1526,12 @@ private:
for (subr_info *subr = jsr_ptrs[csub]; subr != NULL; subr = subr->next)
{
+ // We might be returning to a `jsr' that is at the end of the
+ // bytecode. This is ok if we never return from the called
+ // subroutine, but if we see this here it is an error.
+ if (subr->pc >= current_method->code_length)
+ verify_fail ("fell off end");
+
// Temporarily modify the current state so it looks like we're
// in the enclosing context.
current_state->subroutine = get_subroutine (subr->pc);
@@ -1575,16 +1581,15 @@ private:
// the local variable state across the jsr, but the subroutine
// might change the stack depth, so we can't make any assumptions
// about it. So we have yet another special case. We know that
- // at this point PC points to the instruction after the jsr.
-
- // FIXME: what if we have a jsr at the end of the code, but that
- // jsr has no corresponding ret? Is this verifiable, or is it
- // not? If it is then we need a special case here.
- if (PC >= current_method->code_length)
- verify_fail ("fell off end");
-
- current_state->stacktop = state::NO_STACK;
- push_jump_merge (PC, current_state);
+ // at this point PC points to the instruction after the jsr. Note
+ // that it is ok to have a `jsr' at the end of the bytecode,
+ // provided that the called subroutine never returns. So, we have
+ // a special case here and another one when we handle the ret.
+ if (PC < current_method->code_length)
+ {
+ current_state->stacktop = state::NO_STACK;
+ push_jump_merge (PC, current_state);
+ }
invalidate_pc ();
}
diff --git a/libjava/win32.cc b/libjava/win32.cc
index 59c3be244b6..6fc2de08760 100644
--- a/libjava/win32.cc
+++ b/libjava/win32.cc
@@ -28,6 +28,15 @@ win32_exception_handler (LPEXCEPTION_POINTERS e)
return EXCEPTION_CONTINUE_SEARCH;
}
+// Platform-specific executable name
+static char exec_name[MAX_PATH];
+ // initialized in _Jv_platform_initialize()
+
+const char *_Jv_ThisExecutable (void)
+{
+ return exec_name;
+}
+
// Platform-specific VM initialization.
void
_Jv_platform_initialize (void)
@@ -37,8 +46,12 @@ _Jv_platform_initialize (void)
if (WSAStartup (MAKEWORD (1, 1), &data))
MessageBox (NULL, "Error initialising winsock library.", "Error",
MB_OK | MB_ICONEXCLAMATION);
+
// Install exception handler
SetUnhandledExceptionFilter (win32_exception_handler);
+
+ // Initialize our executable name
+ GetModuleFileName(NULL, exec_name, sizeof(exec_name));
}
// gettimeofday implementation.
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index bf528e6721d..87ba69fa3fd 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * aclocal.m4 (GLIBCPP_EXPORT_INSTALL_INFO): Avoid trailing /. in
+ glibcpp_toolexeclibdir.
+ * configure: Rebuilt.
+
2003-02-20 Alexandre Oliva <aoliva@redhat.com>
* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
diff --git a/libobjc/aclocal.m4 b/libobjc/aclocal.m4
index ed643f6038c..83707ce099e 100644
--- a/libobjc/aclocal.m4
+++ b/libobjc/aclocal.m4
@@ -212,7 +212,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
AC_SUBST(glibcpp_prefixdir)
diff --git a/libobjc/configure b/libobjc/configure
index 08d0b0ff02d..40ea71e970e 100755
--- a/libobjc/configure
+++ b/libobjc/configure
@@ -1270,7 +1270,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
@@ -1364,7 +1368,7 @@ ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1368: checking for ld used by GCC" >&5
+echo "configure:1372: checking for ld used by GCC" >&5
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -1394,10 +1398,10 @@ echo "configure:1368: checking for ld used by GCC" >&5
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1398: checking for GNU ld" >&5
+echo "configure:1402: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1401: checking for non-GNU ld" >&5
+echo "configure:1405: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1432,7 +1436,7 @@ else
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1436: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1440: checking if the linker ($LD) is GNU ld" >&5
if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1449,7 +1453,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1453: checking for $LD option to reload object files" >&5
+echo "configure:1457: checking for $LD option to reload object files" >&5
if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1461,7 +1465,7 @@ reload_flag=$lt_cv_ld_reload_flag
test -n "$reload_flag" && reload_flag=" $reload_flag"
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1465: checking for BSD-compatible nm" >&5
+echo "configure:1469: checking for BSD-compatible nm" >&5
if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1499,7 +1503,7 @@ NM="$lt_cv_path_NM"
echo "$ac_t""$NM" 1>&6
echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1503: checking how to recognise dependant libraries" >&5
+echo "configure:1507: checking how to recognise dependant libraries" >&5
if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1672,13 +1676,13 @@ file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1676: checking for object suffix" >&5
+echo "configure:1680: checking for object suffix" >&5
if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
for ac_file in conftest.*; do
case $ac_file in
*.c) ;;
@@ -1702,7 +1706,7 @@ case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:1706: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1710: checking for ${ac_tool_prefix}file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1764,7 +1768,7 @@ fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:1768: checking for file" >&5
+echo "configure:1772: checking for file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1835,7 +1839,7 @@ esac
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1839: checking for $ac_word" >&5
+echo "configure:1843: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1867,7 +1871,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1871: checking for $ac_word" >&5
+echo "configure:1875: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1902,7 +1906,7 @@ fi
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1906: checking for $ac_word" >&5
+echo "configure:1910: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1934,7 +1938,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1938: checking for $ac_word" >&5
+echo "configure:1942: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2001,8 +2005,8 @@ 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 2005 "configure"' > conftest.$ac_ext
- if { (eval echo configure:2006: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ echo '#line 2009 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:2010: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if test "$lt_cv_prog_gnu_ld" = yes; then
case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
@@ -2035,7 +2039,7 @@ case $host in
ia64-*-hpux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*ELF-32*)
HPUX_IA64_MODE="32"
@@ -2051,7 +2055,7 @@ ia64-*-hpux*)
x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*32-bit*)
case $host in
@@ -2095,7 +2099,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2099: checking whether the C compiler needs -belf" >&5
+echo "configure:2103: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2108,14 +2112,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2112 "configure"
+#line 2116 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2119: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
@@ -2145,7 +2149,7 @@ echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
# Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
set dummy ${ac_tool_prefix}dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2149: checking for $ac_word" >&5
+echo "configure:2153: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2177,7 +2181,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "dlltool", so it can be a program name with args.
set dummy dlltool; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2181: checking for $ac_word" >&5
+echo "configure:2185: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_DLLTOOL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2212,7 +2216,7 @@ fi
# Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
set dummy ${ac_tool_prefix}as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2216: checking for $ac_word" >&5
+echo "configure:2220: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2244,7 +2248,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "as", so it can be a program name with args.
set dummy as; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2248: checking for $ac_word" >&5
+echo "configure:2252: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2279,7 +2283,7 @@ fi
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2283: checking for $ac_word" >&5
+echo "configure:2287: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2311,7 +2315,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "objdump", so it can be a program name with args.
set dummy objdump; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2315: checking for $ac_word" >&5
+echo "configure:2319: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_OBJDUMP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2347,12 +2351,12 @@ fi
# recent cygwin and mingw systems supply a stub DllMain which the user
# can override, but on older systems we have to supply one
echo $ac_n "checking if libtool should supply DllMain function""... $ac_c" 1>&6
-echo "configure:2351: checking if libtool should supply DllMain function" >&5
+echo "configure:2355: checking if libtool should supply DllMain function" >&5
if eval "test \"`echo '$''{'lt_cv_need_dllmain'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2356 "configure"
+#line 2360 "configure"
#include "confdefs.h"
int main() {
@@ -2360,7 +2364,7 @@ extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
DllMain (0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:2364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2368: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_need_dllmain=no
else
@@ -2381,19 +2385,19 @@ echo "$ac_t""$lt_cv_need_dllmain" 1>&6
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -mdll"
echo $ac_n "checking how to link DLLs""... $ac_c" 1>&6
-echo "configure:2385: checking how to link DLLs" >&5
+echo "configure:2389: checking how to link DLLs" >&5
if eval "test \"`echo '$''{'lt_cv_cc_dll_switch'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2390 "configure"
+#line 2394 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_dll_switch=-mdll
else
@@ -2511,7 +2515,7 @@ else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2515: checking for $ac_word" >&5
+echo "configure:2519: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2551,7 +2555,7 @@ fi
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2555: checking for a BSD compatible install" >&5
+echo "configure:2559: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2604,7 +2608,7 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:2608: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:2612: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2633,7 +2637,7 @@ fi
# Sanity check for the cross-compilation case:
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2637: checking how to run the C preprocessor" >&5
+echo "configure:2641: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2648,13 +2652,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2652 "configure"
+#line 2656 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2665,13 +2669,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2669 "configure"
+#line 2673 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2682,13 +2686,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2686 "configure"
+#line 2690 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2692: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2696: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2714,17 +2718,17 @@ echo "$ac_t""$CPP" 1>&6
ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for stdio.h""... $ac_c" 1>&6
-echo "configure:2718: checking for stdio.h" >&5
+echo "configure:2722: checking for stdio.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2723 "configure"
+#line 2727 "configure"
#include "confdefs.h"
#include <stdio.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2728: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2752,12 +2756,12 @@ fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2756: checking for ANSI C header files" >&5
+echo "configure:2760: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2761 "configure"
+#line 2765 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -2765,7 +2769,7 @@ else
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2769: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2782,7 +2786,7 @@ rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2786 "configure"
+#line 2790 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -2800,7 +2804,7 @@ fi
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 2804 "configure"
+#line 2808 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -2821,7 +2825,7 @@ if test "$cross_compiling" = yes; then
:
else
cat > conftest.$ac_ext <<EOF
-#line 2825 "configure"
+#line 2829 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2832,7 +2836,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
exit (0); }
EOF
-if { (eval echo configure:2836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -2860,17 +2864,17 @@ for ac_hdr in sched.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2864: checking for $ac_hdr" >&5
+echo "configure:2868: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2869 "configure"
+#line 2873 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2900,7 +2904,7 @@ done
# Determine CFLAGS for gthread.
echo $ac_n "checking for gthread cflags""... $ac_c" 1>&6
-echo "configure:2904: checking for gthread cflags" >&5
+echo "configure:2908: checking for gthread cflags" >&5
if eval "test \"`echo '$''{'objc_cv_gthread_flags'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 04feaa8838d..c4b62933d16 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,610 @@
+2003-04-04 Jerry Quinn <jlquinn@optonline.net>
+
+ PR libstdc++/10276
+ * src/ios.cc (ios_base::_M_init): Remove _M_callbacks
+ initialization.
+
+2003-03-31 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/std/std_streambuf.h (_M_out_buf_size()): Remove.
+ * include/bits/fstream.tcc (_M_allocate_internal_buffer):
+ Don't set _M_out_end.
+ (basic_filebuf::overflow): Replace _M_out_buf_size() with
+ this->_M_out_cur && this->_M_out_cur < this->_M_out_end.
+ * include/bits/sstream.tcc (basic_stringbuf::overflow):
+ Replace _M_out_buf_size() with this->_M_out_cur < this->_M_out_end;
+ * include/bits/streambuf.tcc (basic_streambuf::sputc):
+ Replace _M_out_buf_size() with _M_out_cur && _M_out_cur < _M_out_end.
+ (basic_streambuf::xsputn): Replace _M_out_buf_size() with
+ _M_out_end - _M_out_cur.
+ (__copy_streambufs): Likewise.
+ * include/std/std_fstream.h (_M_set_determinate): Set
+ _M_out_end here.
+
+2003-03-30 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/bits/fstream.tcc (basic_filebuf::showmanyc,
+ _M_convert_to_external, _M_really_overflow, seekoff): Fix
+ test for synced buffer.
+ * include/std/std_fstream.h (sync): Likewise.
+ * src/fstream.cc (basic_filebuf<char>::_M_underflow_common,
+ basic_filebuf<wchar_t>::_M_underflow_common): Likewise.
+
+2003-03-28 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/std/std_sstream.h (basic_istringstream): Adjust
+ initialization.
+ (basic_ostringstream): Same.
+ (basic_stringstream): Same.
+ * include/std/std_fstream.h (basic_ifstream): Adjust initialization.
+ (basic_ofstream): Same.
+ (basic_fstream): Same.
+ * include/std/std_ostream.h (basic_ostrem): Add protected ctor
+ that does not call init.
+ * include/std/std_istream.h (basic_istream): Same.
+ (basic_iostream): Construct istream, ostream uninitialized, use
+ init to initialize just once. Add protected ctor that does not
+ call init.
+
+2003-03-28 Paolo Carlini <pcarlini@unitus.it>
+ Nathan Myers <ncm@cantrip.org>
+
+ PR libstdc++/9533
+ * include/bits/fstream.tcc (basic_filebuf<>::open): Don't
+ call underflow().
+ (basic_filebuf<>::showmanyc): Use the information provided
+ by codecvt and __basic_file<>::showmanyc_helper to implement
+ a non-trivial showmanyc.
+ * config/io/basic_file_stdio.h
+ (__basic_file<>::showmanyc_helper): New, declare.
+ * config/io/basic_file_stdio.cc
+ (__basic_file<>::showmanyc_helper): Define.
+ (__basic_file<>::_M_open_mode): Don't set O_NONBLOCK.
+ (__basic_file<char>::open): Don't call fcntl().
+ * acinclude.m4 (GLIBCPP_CHECK_S_ISREG_OR_S_IFREG,
+ GLIBCPP_CHECK_POLL): New macros.
+ * configure.in: Call here.
+ * acconfig.h: Add #undefs for the corresponding symbols.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+ * config.h.in: Regenerate.
+
+2003-03-24 Benjamin Kosnik <bkoz@redhat.com>
+
+ * config/linker-map.gnu: Remove string export restrictions.
+
+2003-03-24 Paolo Carlini <pcarlini@unitus.it>
+
+ * testsuite/21_strings/basic_string/find/char/1.cc: Remove
+ find_first_of, find_last_of and find_last_not_of tests.
+ * testsuite/21_strings/basic_string/find/char/2.cc: find_first_of
+ tests here, new file.
+ * testsuite/21_strings/basic_string/find/wchar_t/1.cc: Likewise,
+ remove wchar_t find_first_of, find_last_of and find_last_not_of tests.
+ * testsuite/21_strings/basic_string/find/wchar_t/2.cc: Likewise,
+ wchar_t find_first_of tests here, new file.
+ * testsuite/21_strings/basic_string/rfind/char/2.cc: find_last_of
+ tests here.
+ * testsuite/21_strings/basic_string/rfind/char/3.cc: find_last_not_of
+ tests here.
+ * testsuite/21_strings/basic_string/rfind/wchar_t/2.cc: likewise,
+ wchar_t find_last_of tests here.
+ * testsuite/21_strings/basic_string/rfind/wchar_t/3.cc: likewise,
+ wchar_t find_last_not_of tests here.
+
+2003-03-22 Loren J. Rittle <ljrittle@acm.org>
+
+ * config/os/hpux/ctype_noninline.h (ctype<char>::classic_table):
+ Correct return value.
+
+2003-03-21 Jerry Quinn <jlquinn@optonline.net>
+
+ PR libstdc++/5730
+ * include/bits/c++config (_GLIBCPP_FAST_MATH): Define.
+ * include/std/std_complex.h (norm): Use faster,
+ less accurate computation for builtin float types under --fast-math.
+
+2003-03-21 Magnus Fromreide <gnats@magfr.user.lysator.liu.se>
+
+ * testsuite/testsuite_hooks.h: Fix warning nits.
+
+2003-03-19 Alexandre Oliva <aoliva@redhat.com>
+
+ * config/cpu/mips/atomicity.h (__exchange_and_add, __atomic_add):
+ Only .set mips2 for the o32 ABI.
+
+2003-03-19 Paolo Carlini <pcarlini@unitus.it>
+
+ * testsuite/21_strings/char_traits/requirements/char/1.cc:
+ Test char not wchar_t.
+
+2003-03-18 Paolo Carlini <pcarlini@unitus.it>
+
+ * testsuite/21_strings/basic_string/append/wchar_t/1.cc:
+ Correct size, taking into account sizeof(wchar_t).
+
+2003-03-18 Paolo Carlini <pcarlini@unitus.it>
+
+ Reshuffle 21_strings testsuite.
+ * testsuite/21_strings/append.cc, c_strings.cc, invariants.cc,
+ assign.cc, ctor_copy_dtor.cc, nonmember.cc, capacity.cc,
+ element_access.cc, operations.cc, char_traits_requirements.cc,
+ find.cc, replace.cc, char_traits_typedefs.cc, insert.cc, rfind.cc,
+ compare.cc, inserters_extractors.cc, substr.cc: Split up, add
+ wchar_t tests as follows.
+ * 21_strings/basic_string/append/char/1.cc: New.
+ * 21_strings/basic_string/append/wchar_t/1.cc: New.
+ * 21_strings/basic_string/assign/char/1.cc: New.
+ * 21_strings/basic_string/assign/char/2.cc: New.
+ * 21_strings/basic_string/assign/char/3.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/1.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/2.cc: New.
+ * 21_strings/basic_string/assign/wchar_t/3.cc: New.
+ * 21_strings/basic_string/capacity/1.cc: New.
+ * 21_strings/basic_string/capacity/char/1.cc: New.
+ * 21_strings/basic_string/capacity/char/2.cc: New.
+ * 21_strings/basic_string/capacity/wchar_t/1.cc: New.
+ * 21_strings/basic_string/capacity/wchar_t/2.cc: New.
+ * 21_strings/basic_string/compare/char/1.cc: New.
+ * 21_strings/basic_string/compare/wchar_t/1.cc: New.
+ * 21_strings/basic_string/cons/char/1.cc: New.
+ * 21_strings/basic_string/cons/char/2.cc: New.
+ * 21_strings/basic_string/cons/char/3.cc: New.
+ * 21_strings/basic_string/cons/char/4.cc: New.
+ * 21_strings/basic_string/cons/char/5.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/1.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/2.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/3.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/4.cc: New.
+ * 21_strings/basic_string/cons/wchar_t/5.cc: New.
+ * 21_strings/basic_string/element_access/char/1.cc: New.
+ * 21_strings/basic_string/element_access/char/2.cc: New.
+ * 21_strings/basic_string/element_access/char/3.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/1.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/2.cc: New.
+ * 21_strings/basic_string/element_access/wchar_t/3.cc: New.
+ * 21_strings/basic_string/find/char/1.cc: New.
+ * 21_strings/basic_string/find/wchar_t/1.cc: New.
+ * 21_strings/basic_string/insert/char/1.cc: New.
+ * 21_strings/basic_string/insert/char/2.cc: New.
+ * 21_strings/basic_string/insert/wchar_t/1.cc: New.
+ * 21_strings/basic_string/insert/wchar_t/2.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/1.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/4.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/5.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/6.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/7.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/8.cc: New.
+ * 21_strings/basic_string/inserters_extractors/char/9.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/1.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/4.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/5.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/6.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/7.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/8.cc: New.
+ * 21_strings/basic_string/inserters_extractors/wchar_t/9.cc: New.
+ * 21_strings/basic_string/operators/char/1.cc: New.
+ * 21_strings/basic_string/operators/char/2.cc: New.
+ * 21_strings/basic_string/operators/wchar_t/1.cc: New.
+ * 21_strings/basic_string/operators/wchar_t/2.cc: New.
+ * 21_strings/basic_string/replace/char/1.cc: New.
+ * 21_strings/basic_string/replace/char/2.cc: New.
+ * 21_strings/basic_string/replace/char/3.cc: New.
+ * 21_strings/basic_string/replace/char/4.cc: New.
+ * 21_strings/basic_string/replace/char/5.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/1.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/2.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/3.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/4.cc: New.
+ * 21_strings/basic_string/replace/wchar_t/5.cc: New.
+ * 21_strings/basic_string/rfind/char/1.cc: New.
+ * 21_strings/basic_string/rfind/char/2.cc: New.
+ * 21_strings/basic_string/rfind/char/3.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/1.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/2.cc: New.
+ * 21_strings/basic_string/rfind/wchar_t/3.cc: New.
+ * 21_strings/basic_string/substr/char/1.cc: New.
+ * 21_strings/basic_string/substr/wchar_t/1.cc: New.
+ * 21_strings/c_strings/char/1.cc: New.
+ * 21_strings/c_strings/char/2.cc: New.
+ * 21_strings/c_strings/wchar_t/1.cc: New.
+ * 21_strings/c_strings/wchar_t/2.cc: New.
+ * 21_strings/char_traits/requirements/char/1.cc: New.
+ * 21_strings/char_traits/requirements/wchar_t/1.cc: New.
+ * 21_strings/char_traits/typedefs/char/1.cc: New.
+
+2003-03-17 Paolo Carlini <pcarlini@unitus.it>
+ Petur Runolfsson <peturr02@ru.is>
+
+ PR libstdc++/10097
+ * src/fstream.cc (basic_filebuf<char>::_M_underflow_common,
+ basic_filebuf<wchar_t>::_M_underflow_common):
+ if (gptr() < egptr()) return *gptr().
+ * testsuite/27_io/filebuf_virtuals.cc (test16): Add.
+
+ * testsuite/27_io/filebuf_members.cc (test_04): Minor
+ changes: unlink fifo before making it, fix spelling error.
+
+2003-03-17 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/Makefile.am (CLEANFILES): Add tmp*.
+ * testsuite/Makefile.in: Regenerate.
+ * testsuite/27_io/filebuf_members.cc: Consistently name tmp files.
+ Cleanups.
+
+2003-03-17 Petur Runolfsson <peturr02@ru.is>
+
+ PR libstdc++/9964
+ * include/bits/fstream.tcc (basic_filebuf::close):
+ Always close file, even when write fails.
+ * testsuite/27_io/filebuf_members.cc (test_07): New test.
+
+2003-03-17 Danny Smith <dannysmith@users.sourceforge.net>
+
+ * libsupc++/Makefile.am (C_COMPILE): Remove.
+ (LTCOMPILE): Likewise.
+ * libsupc++/Makefile.in: Regenerate.
+
+2003-03-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/23_containers/bitset_members.cc: Add test variable.
+ * testsuite/23_containers/map_insert.cc: Same.
+ * testsuite/22_locale/ctype/cons/char/1.cc: Same.
+ * testsuite/22_locale/codecvt/max_length/wchar_t/1.cc: Same.
+ * testsuite/22_locale/codecvt/max_length/wchar_t/2.cc: Same.
+ * testsuite/22_locale/codecvt/max_length/wchar_t/3.cc: Same.
+ * testsuite/22_locale/codecvt/max_length/wchar_t/4.cc: Same.
+ * testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc: Same.
+ * testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc: Same.
+ * testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc: Same.
+ * testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc: Same.
+ * testsuite/27_io/istream_exception.cc: Same.
+ * testsuite/27_io/filebuf_virtuals.cc: Same.
+ * testsuite/27_io/stringbuf_virtuals.cc: Same.
+ * testsuite/27_io/ostream_inserter_arith.cc: Same.
+ * testsuite/26_numerics/valarray_operators.cc: Same.
+ * testsuite/26_numerics/slice.cc: Same.
+ * testsuite/26_numerics/slice_array_assignment.cc: Same.
+ * testsuite/24_iterators/istream_iterator.cc: Same.
+ * mkcheck.in (TESTS_FILE): Use dejagnu-generated file if possible.
+
+2003-03-14 Petur Runolfsson <peturr02@ru.is>
+
+ PR libstdc++/9581
+ PR libstdc++/9870
+ * config/locale/generic/ctype_members.cc,
+ * config/locale/gnu/ctype_members.cc
+ (ctype<wchar_t>::do_widen(char)): Cast argument to
+ unsigned char before passing to btowc.
+ (ctype<wchar_t>::do_widen(const char*, const char*, wchar_t*)):
+ Convert characters with btowc instead of mbsrtowcs.
+ (ctype<wchar_t>::do_narrow(const wchar_t*, const wchar_t*,
+ char, char*):
+ Convert characters with wctob instead of wcsrtombs.
+ * testsuite/22_locale/ctype/narrow/wchar_t/3.cc: New test.
+ * testsuite/22_locale/ctype/widen/wchar_t/2.cc: New test.
+ * testsuite/22_locale/ctype/widen/wchar_t/3.cc: New test.
+
+2003-03-14 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/stdc++.h: New.
+ * libsupc++/exception_defines.h (__EXCEPTION_DEFINES_H): Add guard.
+ * include/Makefile.am (stamp-std-precompile): Generate stdc++.h.gch
+ * include/Makefile.in: Regenerate.
+ * testsuite_flags.in (--build-cxx): Add, but don't use PCHFLAGS.
+ (--cxxflags): Put -g -O2 here.
+ * testsuite/libstdc++-v3.dg/dg.exp: Remove -g -O2 here.
+
+2003-03-14 Loren J. Rittle <ljrittle@acm.org>
+
+ * testsuite/testsuite_hooks.h: Suppress runtime exception thrown by
+ missing named locale.
+
+2003-03-14 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Only append to makefiles that are newly created to
+ avoid multiple multi-do/multi-clean rules.
+ * configure: Rebuilt.
+
+2003-03-13 Jonathan Wakely <redi@gcc.gnu.org>
+
+ * docs/html/configopts.html, docs/html/documentation.html,
+ docs/html/explanations.html, docs/html/install.html,
+ docs/html/19_diagnostics/howto.html, docs/html/faq/index.html: Fix
+ invalid XHTML and make page header style consistent.
+
+2003-03-12 Jonathan Wakely <redi@gcc.gnu.org>
+
+ * docs/html/faq/index.html: Explain memory "leaks" due to allocators.
+ * docs/html/faq/index.txt: Regenerate.
+ * docs/html/debug.html: Add a bit to allocator text and fix XHTML.
+
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * acinclude.m4 (GLIBCPP_EXPORT_INSTALL_INFO): Avoid trailing /. in
+ glibcpp_toolexeclibdir.
+ * aclocal.m4, configure: Rebuilt.
+
+2003-03-11 Jonathan Wakely <redi@gcc.gnu.org>
+
+ * docs/html/faq/index.html: Update text about location of headers.
+ * docs/html/faq/index.txt: Regenerate.
+
+2003-03-11 Carlo Wood <carlo@alinoe.com>
+
+ * include/bits/demangle.h: Prepend accessors of
+ class qualifier with 'get_' in order to fix warnings
+ when compiling with -Wshadow.
+
+2003-03-11 Loren J. Rittle <ljrittle@acm.org>
+
+ * config/os/bsd/freebsd/ctype_inline.h: Support _M_table
+ when so installed.
+ * testsuite/22_locale/ctype/cons/char/1.cc: Fix typo.
+
+ * testsuite/testsuite_hooks.h (run_tests_wrapped_env): Do not
+ report lack of setenv().
+
+2003-03-09 Paolo Carlini <pcarlini@unitus.it>
+
+ * config/io/basic_file_stdio.cc: include <unistd.h>.
+
+2003-03-09 Paolo Carlini <pcarlini@unitus.it>
+ Nathan Myers <ncm@cantrip.org>
+
+ PR libstdc++/7744
+ * config/io/basic_file_stdio.h (__basic_file<>::xsgetn, xsputn,
+ seekoff, seekpos): Add a boolean parameter __stdio.
+ * config/io/basic_file_stdio.cc (__basic_file<>::xsgetn, xsputn,
+ seekoff, seekpos): If __stdio == true, use fread (fwrite, fseek/ftell,
+ fseek/ftell, respectively), otherwise read (write, lseek, lseek,
+ respectively).
+ * include/bits/fstream.tcc (basic_filebuf<>::_M_convert_to_external,
+ _M_really_overflow, seekoff): Use the boolean parameter in the calls.
+ * include/std/std_fstream.h (sync): Likewise.
+ * src/fstream.cc (basic_filebuf<>::_M_underflow_common): Likewise.
+ * src/ios.cc (ios_base::Init::_S_ios_create(bool)): Revert
+ libstdc++/8399 commit involving isatty(0).
+ * acinclude.m4 (GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1): Remove.
+ (GLIBCPP_CHECK_UNISTD_SUPPORT): Remove
+ * configure.in: Remove call.
+ * aclocal.m4: Regenerate.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * testsuite/27_io/narrow_stream_objects.cc (test11): Add.
+
+2003-03-09 Paolo Carlini <pcarlini@unitus.it>
+
+ PR libstdc++/9988
+ * include/bits/fstream.tcc (overflow): don't write EOF to file.
+ * testsuite/27_io/filebuf_virtuals.cc (test15): Add.
+
+2003-03-08 Jerry Quinn <jlquinn@optonline.net>
+
+ PR libstdc++/9561
+ * include/bits/basic_ios.h (_M_setstate): New.
+ * include/bits/ostream.tcc (operator<<): Use it.
+ * include/bits/istream.tcc (operator>>): Use it.
+ * include/std/std_ostream.h (operator<<): Make friends.
+ * include/std/std_istream.h (operator>>): Make friends.
+ * testsuite/27_io/ostream_exception.cc,
+ testsuite/27_io/istream_exception.cc: New tests.
+
+2003-03-08 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/bits/locale_facets.tcc: Fix typo.
+
+2003-03-08 Loren J. Rittle <ljrittle@acm.org>
+
+ * testsuite/26_numerics/c99_classification_macros_c.cc: Tweak test.
+
+ * config/locale/generic/c_locale.cc
+ (locale::facet::_S_create_c_locale): Throw runtime exception when
+ unsupported language is specified.
+ * testsuite/testsuite_hooks.h
+ (run_test_wrapped_generic_locale_exception_catcher): New function.
+ * testsuite/testsuite_hooks.cc (run_tests_wrapped_locale):
+ Suppress runtime exception thrown by generic implementation.
+ (run_tests_wrapped_env): Likewise.
+ (run_test_wrapped_generic_locale_exception_catcher): New function.
+ * testsuite/22_locale/collate/compare/char/1.cc: New test wrap.
+ * testsuite/22_locale/collate/compare/char/2.cc: New test wrap.
+ * testsuite/22_locale/collate/compare/char/3.cc: New test wrap.
+ * testsuite/22_locale/collate/hash/char/2.cc: New test wrap.
+ * testsuite/22_locale/collate/transform/char/2.cc: New test wrap.
+ * testsuite/22_locale/collate/transform/char/3.cc: New test wrap.
+ * testsuite/22_locale/collate_byname/1.cc: New test wrap.
+ * testsuite/22_locale/ctype/is/char/2.cc: New test wrap.
+ * testsuite/22_locale/facet/2.cc: New test wrap.
+ * testsuite/22_locale/locale/cons/4.cc: New test wrap.
+ * testsuite/22_locale/locale/cons/5.cc: New test wrap.
+ * testsuite/22_locale/locale/cons/7.cc: New test wrap.
+ * testsuite/22_locale/messages/members/char/1.cc: New test wrap.
+ * testsuite/22_locale/messages/members/char/2.cc: New test wrap.
+ * testsuite/22_locale/messages/members/char/3.cc: New test wrap.
+ * testsuite/22_locale/messages_byname/1.cc: New test wrap.
+ * testsuite/22_locale/money_get/get/char/1.cc: New test wrap.
+ * testsuite/22_locale/money_get/get/char/2.cc: New test wrap.
+ * testsuite/22_locale/money_get/get/char/3.cc: New test wrap.
+ * testsuite/22_locale/money_get/get/char/4.cc: New test wrap.
+ * testsuite/22_locale/money_put/put/char/1.cc: New test wrap.
+ * testsuite/22_locale/money_put/put/char/2.cc: New test wrap.
+ * testsuite/22_locale/money_put/put/char/3.cc: New test wrap.
+ * testsuite/22_locale/moneypunct/members/char/2.cc: New test wrap.
+ * testsuite/22_locale/moneypunct_byname/1.cc: New test wrap.
+ * testsuite/22_locale/num_get/get/char/1.cc: New test wrap.
+ * testsuite/22_locale/num_get/get/char/2.cc: New test wrap.
+ * testsuite/22_locale/num_get/get/char/3.cc: New test wrap.
+ * testsuite/22_locale/num_get/get/char/5.cc: New test wrap.
+ * testsuite/22_locale/num_get/get/char/6.cc: New test wrap.
+ * testsuite/22_locale/num_put/put/char/1.cc: New test wrap.
+ * testsuite/22_locale/num_put/put/char/2.cc: New test wrap.
+ * testsuite/22_locale/num_put/put/char/3.cc: New test wrap.
+ * testsuite/22_locale/num_put/put/char/5.cc: New test wrap.
+ * testsuite/22_locale/numpunct/members/char/1.cc: New test wrap.
+ * testsuite/22_locale/numpunct/members/char/2.cc: New test wrap.
+ * testsuite/22_locale/numpunct_byname/1.cc: New test wrap.
+ * testsuite/22_locale/numpunct_byname/2.cc: New test wrap.
+ * testsuite/22_locale/time_get/date_order/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_date/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_date/char/2.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_monthname/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_monthname/char/2.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_time/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_time/char/2.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_weekday/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_weekday/char/2.cc: New test wrap.
+ * testsuite/22_locale/time_get/get_year/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/1.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/2.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/3.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/4.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/5.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/6.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/7.cc: New test wrap.
+ * testsuite/22_locale/time_put/put/char/8.cc: New test wrap.
+ * testsuite/27_io/filebuf_virtuals.cc: New test wrap.
+ * testsuite/27_io/ios_members.cc: New test wrap.
+ * testsuite/27_io/ostream_inserter_arith.cc (test02): Make void.
+ New test wrap.
+ * testsuite/27_io/streambuf_members.cc: New test wrap.
+ * testsuite/27_io/stringbuf_virtuals.cc: New test wrap.
+
+2003-03-08 Paolo Carlini <pcarlini@unitus.it>
+ Petur Runolfsson <peturr02@ru.is>
+
+ PR libstdc++/9424
+ * include/bits/streambuf.tcc (__copy_streambufs): Use
+ sgetn-sputn only when sputn cannot fail, otherwise fall back
+ to safe snextc-sputc.
+ * testsuite/27_io/streambuf_members.cc (test11, test12): Add.
+
+2003-03-08 Jerry Quinn <jlquinn@optonline.net>
+
+ * include/bits/locale_facets.tcc (num_put::do_put(bool)): Use
+ locale cache for truename and falsename.
+
+2003-03-08 Jerry Quinn <jlquinn@optonline.net>
+
+ * src/ios.cc (ios_base::ios_base): Correct order of _M_word and
+ _M_word_size initialization.
+
+2003-03-07 Paolo Carlini <pcarlini@unitus.it>
+
+ * include/bits/fstream.tcc (_M_convert_to_external):
+ Set __elen to zero if codecvt::out eventually fails.
+
+2003-03-07 Paolo Carlini <pcarlini@unitus.it>
+
+ PR libstdc++/9182
+ * include/bits/fstream.tcc (_M_really_overflow): Check
+ for _M_convert_to_external possible failures.
+ * include/std/std_fstream.h (sync): Check _M_really_overflow
+ return value and return -1 in case of failure.
+ * testsuite/27_io/filebuf_virtuals.cc (test13, test14): Add.
+
+2003-03-07 Paolo Carlini <pcarlini@unitus.it>
+
+ PR libstdc++/9826
+ * include/bits/istream.tcc (operator>>(_CharT*),
+ operator>>(basic_string&), ws): Pass a char_type to __ctype.is.
+ * testsuite/27_io/stringstream.cc (test02): Add.
+
+ * include/bits/istream.tcc (operator>>(_CharT*)):
+ Assign a char_type to *__s.
+
+2003-03-07 Petur Runolfsson <peturr02@ru.is>
+
+ PR libstdc++/9817
+ * include/bits/locale_facets.tcc
+ (collate::do_compare, collate::do_transform):
+ Handle nul characters in input.
+ * testsuite/22_locale/collate/compare/char/3.cc: New test.
+ * testsuite/22_locale/collate/compare/wchar_t/3.cc: New test.
+ * testsuite/22_locale/collate/transform/char/3.cc: New test.
+ * testsuite/22_locale/collate/transform/wchar_t/3.cc: New test.
+
+2003-03-07 Jerry Quinn <jlquinn@optonline.net>
+
+ * include/bits/streambuf_iterator.h (_M_put): Set _M_failed if
+ sputn fails.
+ * testsuite/27_io/ostream_fail.cc: New test.
+
+2003-03-07 Matthias Klose <doko@debian.org>
+
+ * Makefile.am (AM_MAKEFLAGS): Also pass gxx_include_dir.
+ FLAGS_TO_PASS: Set to AM_MAKEFLAGS
+ * Makefile.in: Regenerate.
+ * libsupc++/Makefile.am: Express glibcppinstalldir in terms
+ of gxx_include_dir.
+ AM_MAKEFLAGS: Pass gxx_include_dir.
+ * libsupc++/Makefile.in: Regenerate.
+
+2003-03-06 Jerry Quinn <jlquinn@optonline.net>
+
+ * testsuite/27_io/ios_base_storage.cc (test02): Set exception
+ mask. Test setting small-numbered pword and iword slots. Test
+ behavior at limit of numeric_limits::max. Check that values are
+ still good after failures.
+
+2003-03-06 Jerry Quinn <jlquinn@optonline.net>
+
+ * src/ios.cc (ios_base::_M_init): Remove _M_word_size.
+ (ios_base::ios_base): Set _M_word, _M_word_size.
+ (ios_base::~ios_base): Remove redundant test.
+ * testsuite/27_io/ios_base_storage.cc (test03): New.
+
+2003-03-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * src/strstream.cc, include/bits/basic_string.tcc: Remove
+ incorrect whitespace added in my previous change.
+
+2003-03-05 Carlo Wood <carlo@alinoe.com>
+
+ * include/bits/ios_base.h(ios_base::Init::_S_initialized()): Added
+ _S_initialized() in order to allow debugging libraries to detect
+ when the std streams are initialized from an overloaded operator
+ new.
+
+2003-03-05 Benjamin Kosnik <bkoz@redhat.com>
+
+ * libsupc++/demangle.h: Move to..
+ * include/bits/demangle.h: ...here.
+ * src/demangle.cc: Adjust include.
+ * include/Makefile.am (bits_headers): Add.
+ * include/Makefile.in: Regenerate.
+
+2003-03-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * src/globals.cc: Clarify comments, remove c_locale_imp_compat.
+
+ * config/linker-map.gnu: Filter typeinfo and vtable info.
+
+2003-03-04 Jerry Quinn <jlquinn@optonline.net>
+
+ * src/ios.cc (ios_base::_M_grow_words): Don't delete _M_word on
+ new failure. Throw exception if badbit and exception mask when ix
+ >= numeric_limits<int>::max().
+
+2003-03-04 Alexandre Oliva <aoliva@redhat.com>
+
+ * src/strstream.cc (strstreambuf::overflow): Make sure operands of
+ min and max have the same type.
+ * include/bits/basic_string.tcc (append, rfind, compare): Likewise.
+
+2003-03-04 Benjamin Kosnik <bkoz@redhat.com>
+
+ * include/Makefile.am (allstamps): Remove stamp-std-precompile.
+ * include/Makefile.in: Regenerate.
+
+2003-03-03 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/abi_check.cc (report_symbol_info): Add version info.
+
+ * config/linker-map.gnu: Hide more stuff.
+ * include/Makefile.am: Cleanups.
+ * include/Makefile.in: Regenerate.
+
2003-02-27 Jerry Quinn <jlquinn@optonline.net>
* config/locale/generic/messages_members.h (messages::messages):
@@ -800,7 +1407,7 @@
global_templates.cc time_get_members_wchar_t.cc, members.cc,
time_put.cc, messages_byname.cc, time_put_members_char.cc,
messages.cc, time_put_members_wchar_t.cc, messages_members_char.cc):
- Splint up into individual test cases...
+ Split up into individual test cases...
* 22_locale/codecvt/1.cc: New.
* 22_locale/codecvt/2.cc: New.
* 22_locale/codecvt/always_noconv/char/1.cc: New.
diff --git a/libstdc++-v3/Makefile.am b/libstdc++-v3/Makefile.am
index f75a0fcd147..97fcfa85499 100644
--- a/libstdc++-v3/Makefile.am
+++ b/libstdc++-v3/Makefile.am
@@ -156,6 +156,7 @@ AM_MAKEFLAGS = \
"includedir=$(includedir)" \
"prefix=$(prefix)" \
"tooldir=$(tooldir)" \
+ "gxx_include_dir=$(gxx_include_dir)" \
"AR=$(AR)" \
"AS=$(AS)" \
"LD=$(LD)" \
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index 698a1f1384f..7ab94c68d54 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -1,6 +1,6 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -170,44 +170,7 @@ MULTICLEAN = true
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
# friends when we are called from the top level Makefile.
-AM_MAKEFLAGS = \
- "AR_FLAGS=$(AR_FLAGS)" \
- "CC_FOR_BUILD=$(CC_FOR_BUILD)" \
- "CC_FOR_TARGET=$(CC_FOR_TARGET)" \
- "CFLAGS=$(CFLAGS)" \
- "CXXFLAGS=$(CXXFLAGS)" \
- "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
- "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
- "INSTALL=$(INSTALL)" \
- "INSTALL_DATA=$(INSTALL_DATA)" \
- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
- "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
- "LDFLAGS=$(LDFLAGS)" \
- "LIBCFLAGS=$(LIBCFLAGS)" \
- "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
- "MAKE=$(MAKE)" \
- "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
- "PICFLAG=$(PICFLAG)" \
- "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
- "SHELL=$(SHELL)" \
- "RUNTESTFLAGS=$(RUNTESTFLAGS)" \
- "exec_prefix=$(exec_prefix)" \
- "infodir=$(infodir)" \
- "libdir=$(libdir)" \
- "includedir=$(includedir)" \
- "prefix=$(prefix)" \
- "tooldir=$(tooldir)" \
- "AR=$(AR)" \
- "AS=$(AS)" \
- "LD=$(LD)" \
- "LIBCFLAGS=$(LIBCFLAGS)" \
- "PICFLAG=$(PICFLAG)" \
- "RANLIB=$(RANLIB)" \
- "NM=$(NM)" \
- "NM_FOR_BUILD=$(NM_FOR_BUILD)" \
- "NM_FOR_TARGET=$(NM_FOR_TARGET)" \
- "DESTDIR=$(DESTDIR)" \
- "WERROR=$(WERROR)"
+AM_MAKEFLAGS = "AR_FLAGS=$(AR_FLAGS)" "CC_FOR_BUILD=$(CC_FOR_BUILD)" "CC_FOR_TARGET=$(CC_FOR_TARGET)" "CFLAGS=$(CFLAGS)" "CXXFLAGS=$(CXXFLAGS)" "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" "CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" "INSTALL=$(INSTALL)" "INSTALL_DATA=$(INSTALL_DATA)" "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" "LDFLAGS=$(LDFLAGS)" "LIBCFLAGS=$(LIBCFLAGS)" "LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" "MAKE=$(MAKE)" "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" "PICFLAG=$(PICFLAG)" "PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" "SHELL=$(SHELL)" "RUNTESTFLAGS=$(RUNTESTFLAGS)" "exec_prefix=$(exec_prefix)" "infodir=$(infodir)" "libdir=$(libdir)" "includedir=$(includedir)" "prefix=$(prefix)" "tooldir=$(tooldir)" "gxx_include_dir=$(gxx_include_dir)" "AR=$(AR)" "AS=$(AS)" "LD=$(LD)" "LIBCFLAGS=$(LIBCFLAGS)" "PICFLAG=$(PICFLAG)" "RANLIB=$(RANLIB)" "NM=$(NM)" "NM_FOR_BUILD=$(NM_FOR_BUILD)" "NM_FOR_TARGET=$(NM_FOR_TARGET)" "DESTDIR=$(DESTDIR)" "WERROR=$(WERROR)"
# Subdir rules rely on $(FLAGS_TO_PASS)
@@ -222,7 +185,7 @@ mkcheck.in testsuite_flags.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
all: all-redirect
.SUFFIXES:
@@ -236,7 +199,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4
cd $(srcdir) && $(ACLOCAL)
-config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
@@ -309,7 +272,7 @@ maintainer-clean-recursive:
dot_seen=no; \
rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
rev="$$subdir $$rev"; \
- test "$$subdir" != "." || dot_seen=yes; \
+ test "$$subdir" = "." && dot_seen=yes; \
done; \
test "$$dot_seen" = "no" && rev=". $$rev"; \
target=`echo $@ | sed s/-recursive//`; \
diff --git a/libstdc++-v3/acconfig.h b/libstdc++-v3/acconfig.h
index 4d18634889f..91af8fa31ae 100644
--- a/libstdc++-v3/acconfig.h
+++ b/libstdc++-v3/acconfig.h
@@ -135,6 +135,15 @@
// Define if the compiler/host combination has __builtin_sqrtl
#undef HAVE___BUILTIN_SQRTL
+// Define if poll is available in <poll.h>.
+#undef HAVE_POLL
+
+// Define if S_ISREG (Posix) is available in <sys/stat.h>.
+#undef HAVE_S_ISREG
+
+// Define if S_IFREG is available in <sys/stat.h>.
+#undef HAVE_S_IFREG
+
// Define if LC_MESSAGES is available in <locale.h>.
#undef HAVE_LC_MESSAGES
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index c7f69c82051..4f72efaf8cd 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -591,34 +591,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
])
dnl
-dnl Check to see if the (unistd function) argument passed is
-dnl 1) declared when using the c++ compiler
-dnl 2) has "C" linkage
-dnl
-dnl argument 1 is name of function to check
-dnl
-dnl ASSUMES argument is a function with ONE parameter
-dnl
-dnl GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1
-AC_DEFUN(GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1, [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcpp_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <unistd.h>],
- [ $1(0);],
- [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcpp_cv_func_$1_use)
- if test x$glibcpp_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
-])
-
-dnl
dnl Because the builtins are picky picky picky about the arguments they take,
dnl do an explict linkage tests here.
dnl Check to see if the (math function) argument passed is
@@ -753,26 +725,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
])
dnl
-dnl Check to see what the underlying c library is like
-dnl These checks need to do two things:
-dnl 1) make sure the name is declared when using the c++ compiler
-dnl 2) make sure the name has "C" linkage
-dnl This might seem like overkill but experience has shown that it's not...
-dnl
-dnl Define HAVE_ISATTY if "isatty" is declared and links
-dnl
-dnl GLIBCPP_CHECK_UNISTD_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_UNISTD_SUPPORT, [
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
-
- GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1(isatty)
-
- CXXFLAGS="$ac_save_CXXFLAGS"
-])
-
-dnl
dnl Check to see what the underlying c library or math library is like.
dnl These checks need to do two things:
dnl 1) make sure the name is declared when using the c++ compiler
@@ -1968,7 +1920,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
AC_MSG_CHECKING([for install location])
@@ -2150,6 +2106,45 @@ AC_DEFUN([AC_LIBTOOL_DLOPEN])
AC_DEFUN([AC_PROG_LD])
])
+dnl
+dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
+dnl
+
+AC_DEFUN(GLIBCPP_CHECK_S_ISREG_OR_S_IFREG, [
+ AC_CACHE_VAL(glibcpp_cv_S_ISREG, [
+ AC_TRY_LINK([#include <sys/stat.h>],
+ [struct stat buffer; fstat(0, &buffer); S_ISREG(buffer.st_mode); ],
+ [glibcpp_cv_S_ISREG=yes],
+ [glibcpp_cv_S_ISREG=no])
+ ])
+ AC_CACHE_VAL(glibcpp_cv_S_IFREG, [
+ AC_TRY_LINK([#include <sys/stat.h>],
+ [struct stat buffer; fstat(0, &buffer); S_IFREG & buffer.st_mode; ],
+ [glibcpp_cv_S_IFREG=yes],
+ [glibcpp_cv_S_IFREG=no])
+ ])
+ if test x$glibcpp_cv_S_ISREG = xyes; then
+ AC_DEFINE(HAVE_S_ISREG)
+ elif test x$glibcpp_cv_S_IFREG = xyes; then
+ AC_DEFINE(HAVE_S_IFREG)
+ fi
+])
+
+dnl
+dnl Check whether poll is available in <poll.h>.
+dnl
+
+AC_DEFUN(GLIBCPP_CHECK_POLL, [
+ AC_CACHE_VAL(glibcpp_cv_POLL, [
+ AC_TRY_COMPILE([#include <poll.h>],
+ [struct pollfd pfd[1]; pfd[0].events = POLLIN; poll(pfd, 1, 0); ],
+ [glibcpp_cv_POLL=yes],
+ [glibcpp_cv_POLL=no])
+ ])
+ if test x$glibcpp_cv_POLL = xyes; then
+ AC_DEFINE(HAVE_POLL)
+ fi
+])
# Check whether LC_MESSAGES is available in <locale.h>.
# Ulrich Drepper <drepper@cygnus.com>, 1995.
diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4
index f7fde740a71..167212ce675 100644
--- a/libstdc++-v3/aclocal.m4
+++ b/libstdc++-v3/aclocal.m4
@@ -1,4 +1,4 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p5
+dnl aclocal.m4 generated automatically by aclocal 1.4-p6
dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
@@ -603,34 +603,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_DECL_AND_LINKAGE_3, [
])
dnl
-dnl Check to see if the (unistd function) argument passed is
-dnl 1) declared when using the c++ compiler
-dnl 2) has "C" linkage
-dnl
-dnl argument 1 is name of function to check
-dnl
-dnl ASSUMES argument is a function with ONE parameter
-dnl
-dnl GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1
-AC_DEFUN(GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1, [
- AC_MSG_CHECKING([for $1 declaration])
- if test x${glibcpp_cv_func_$1_use+set} != xset; then
- AC_CACHE_VAL(glibcpp_cv_func_$1_use, [
- AC_LANG_SAVE
- AC_LANG_CPLUSPLUS
- AC_TRY_COMPILE([#include <unistd.h>],
- [ $1(0);],
- [glibcpp_cv_func_$1_use=yes], [glibcpp_cv_func_$1_use=no])
- AC_LANG_RESTORE
- ])
- fi
- AC_MSG_RESULT($glibcpp_cv_func_$1_use)
- if test x$glibcpp_cv_func_$1_use = x"yes"; then
- AC_CHECK_FUNCS($1)
- fi
-])
-
-dnl
dnl Because the builtins are picky picky picky about the arguments they take,
dnl do an explict linkage tests here.
dnl Check to see if the (math function) argument passed is
@@ -765,26 +737,6 @@ AC_DEFUN(GLIBCPP_CHECK_STDLIB_SUPPORT, [
])
dnl
-dnl Check to see what the underlying c library is like
-dnl These checks need to do two things:
-dnl 1) make sure the name is declared when using the c++ compiler
-dnl 2) make sure the name has "C" linkage
-dnl This might seem like overkill but experience has shown that it's not...
-dnl
-dnl Define HAVE_ISATTY if "isatty" is declared and links
-dnl
-dnl GLIBCPP_CHECK_UNISTD_SUPPORT
-AC_DEFUN(GLIBCPP_CHECK_UNISTD_SUPPORT, [
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
-
- GLIBCPP_CHECK_UNISTD_DECL_AND_LINKAGE_1(isatty)
-
- CXXFLAGS="$ac_save_CXXFLAGS"
-])
-
-dnl
dnl Check to see what the underlying c library or math library is like.
dnl These checks need to do two things:
dnl 1) make sure the name is declared when using the c++ compiler
@@ -1980,7 +1932,11 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
AC_MSG_CHECKING([for install location])
@@ -2162,6 +2118,45 @@ AC_DEFUN([AC_LIBTOOL_DLOPEN])
AC_DEFUN([AC_PROG_LD])
])
+dnl
+dnl Check whether S_ISREG (Posix) or S_IFREG is available in <sys/stat.h>.
+dnl
+
+AC_DEFUN(GLIBCPP_CHECK_S_ISREG_OR_S_IFREG, [
+ AC_CACHE_VAL(glibcpp_cv_S_ISREG, [
+ AC_TRY_LINK([#include <sys/stat.h>],
+ [struct stat buffer; fstat(0, &buffer); S_ISREG(buffer.st_mode); ],
+ [glibcpp_cv_S_ISREG=yes],
+ [glibcpp_cv_S_ISREG=no])
+ ])
+ AC_CACHE_VAL(glibcpp_cv_S_IFREG, [
+ AC_TRY_LINK([#include <sys/stat.h>],
+ [struct stat buffer; fstat(0, &buffer); S_IFREG & buffer.st_mode; ],
+ [glibcpp_cv_S_IFREG=yes],
+ [glibcpp_cv_S_IFREG=no])
+ ])
+ if test x$glibcpp_cv_S_ISREG = xyes; then
+ AC_DEFINE(HAVE_S_ISREG)
+ elif test x$glibcpp_cv_S_IFREG = xyes; then
+ AC_DEFINE(HAVE_S_IFREG)
+ fi
+])
+
+dnl
+dnl Check whether poll is available in <poll.h>.
+dnl
+
+AC_DEFUN(GLIBCPP_CHECK_POLL, [
+ AC_CACHE_VAL(glibcpp_cv_POLL, [
+ AC_TRY_COMPILE([#include <poll.h>],
+ [struct pollfd pfd[1]; pfd[0].events = POLLIN; poll(pfd, 1, 0); ],
+ [glibcpp_cv_POLL=yes],
+ [glibcpp_cv_POLL=no])
+ ])
+ if test x$glibcpp_cv_POLL = xyes; then
+ AC_DEFINE(HAVE_POLL)
+ fi
+])
# Check whether LC_MESSAGES is available in <locale.h>.
# Ulrich Drepper <drepper@cygnus.com>, 1995.
@@ -2313,7 +2308,7 @@ AC_MSG_RESULT($enable_symvers)
])
-# isc-posix.m4 serial 1 (gettext-0.10.40)
+# isc-posix.m4 serial 2 (gettext-0.11.2)
dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
dnl This file is free software, distributed under the terms of the GNU
dnl General Public License. As a special exception to the GNU General
@@ -2321,6 +2316,8 @@ dnl Public License, this file may be distributed as part of a program
dnl that contains a configuration script generated by Autoconf, under
dnl the same distribution terms as the rest of that program.
+# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
+
# This test replaces the one in autoconf.
# Currently this macro should have the same name as the autoconf macro
# because gettext's gettext.m4 (distributed in the automake package)
@@ -2381,7 +2378,8 @@ dnl Usage:
dnl AM_INIT_AUTOMAKE(package,version, [no-define])
AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_REQUIRE([AC_PROG_INSTALL])
+[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])
PACKAGE=[$1]
AC_SUBST(PACKAGE)
VERSION=[$2]
@@ -2397,13 +2395,42 @@ AC_REQUIRE([AM_SANITY_CHECK])
AC_REQUIRE([AC_ARG_PROGRAM])
dnl FIXME This is truly gross.
missing_dir=`cd $ac_aux_dir && pwd`
-AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
-AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir)
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
AC_REQUIRE([AC_PROG_MAKE_SET])])
+# Copyright 2002 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, 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., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.4-p6])])
+
#
# Check to make sure that the build environment is sane.
#
diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in
index 6ac56fdae35..f0b34c82a17 100644
--- a/libstdc++-v3/config.h.in
+++ b/libstdc++-v3/config.h.in
@@ -113,6 +113,15 @@
// Define if the compiler/host combination has __builtin_sqrtl
#undef HAVE___BUILTIN_SQRTL
+// Define if poll is available in <poll.h>.
+#undef HAVE_POLL
+
+// Define if S_ISREG (Posix) is available in <sys/stat.h>.
+#undef HAVE_S_ISREG
+
+// Define if S_IFREG is available in <sys/stat.h>.
+#undef HAVE_S_IFREG
+
// Define if LC_MESSAGES is available in <locale.h>.
#undef HAVE_LC_MESSAGES
@@ -461,9 +470,6 @@
/* Define if you have the iconv_open function. */
#undef HAVE_ICONV_OPEN
-/* Define if you have the isatty function. */
-#undef HAVE_ISATTY
-
/* Define if you have the isinf function. */
#undef HAVE_ISINF
@@ -743,6 +749,12 @@
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
/* Define if you have the <sys/isa_defs.h> header file. */
#undef HAVE_SYS_ISA_DEFS_H
diff --git a/libstdc++-v3/config/cpu/mips/atomicity.h b/libstdc++-v3/config/cpu/mips/atomicity.h
index 447355b7a6d..098d06309ac 100644
--- a/libstdc++-v3/config/cpu/mips/atomicity.h
+++ b/libstdc++-v3/config/cpu/mips/atomicity.h
@@ -1,6 +1,6 @@
// Low-level functions for atomic operations.
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 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,7 +42,9 @@ __exchange_and_add (volatile _Atomic_word *__mem, int __val)
("/* Inline exchange & add */\n\t"
"1:\n\t"
".set push\n\t"
+#if _MIPS_SIM == _MIPS_SIM_ABI32
".set mips2\n\t"
+#endif
"ll %0,%3\n\t"
"addu %1,%4,%0\n\t"
"sc %1,%2\n\t"
@@ -66,7 +68,9 @@ __atomic_add (volatile _Atomic_word *__mem, int __val)
("/* Inline atomic add */\n\t"
"1:\n\t"
".set push\n\t"
+#if _MIPS_SIM == _MIPS_SIM_ABI32
".set mips2\n\t"
+#endif
"ll %0,%2\n\t"
"addu %0,%3,%0\n\t"
"sc %0,%1\n\t"
diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc
index 961523b0dcd..b2287b24f7f 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.cc
+++ b/libstdc++-v3/config/io/basic_file_stdio.cc
@@ -1,6 +1,6 @@
// Wrapper of C-language FILE struct -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003 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,6 +33,31 @@
#include <bits/basic_file.h>
#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#ifdef _GLIBCPP_HAVE_SYS_IOCTL_H
+#define BSD_COMP /* Get FIONREAD on Solaris2. */
+#include <sys/ioctl.h>
+#endif
+
+// Pick up FIONREAD on Solaris 2.5.
+#ifdef _GLIBCPP_HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+
+#ifdef _GLIBCPP_HAVE_POLL
+#include <poll.h>
+#endif
+
+#if defined(_GLIBCPP_HAVE_S_ISREG) || defined(_GLIBCPP_HAVE_S_IFREG)
+# include <sys/stat.h>
+# ifdef _GLIBCPP_HAVE_S_ISREG
+# define _GLIBCPP_ISREG(x) S_ISREG(x)
+# else
+# define _GLIBCPP_ISREG(x) (((x) & S_IFMT) == S_IFREG)
+# endif
+#endif
namespace std
{
@@ -74,11 +99,7 @@ namespace std
if (__testi && !__testo && !__testt && !__testa)
{
strcpy(__c_mode, "r");
-#if defined (O_NONBLOCK)
- __p_mode |= O_RDONLY | O_NONBLOCK;
-#else
__p_mode |= O_RDONLY;
-#endif
}
if (__testi && __testo && !__testt && !__testa)
{
@@ -154,13 +175,6 @@ namespace std
if ((_M_cfile = fopen(__name, __c_mode)))
{
_M_cfile_created = true;
-
-#if defined (F_SETFL) && defined (O_NONBLOCK)
- // Set input to nonblocking for fifos.
- if (__mode & ios_base::in)
- fcntl(this->fd(), F_SETFL, O_NONBLOCK);
-#endif
-
__ret = this;
}
}
@@ -191,36 +205,106 @@ namespace std
return __retval;
}
+ // In the next four functions we want to use stdio functions only
+ // when synced with stdio (_M_buf_size == 1): I/O primitives do not
+ // block until the asked number of bytes are available.
streamsize
- __basic_file<char>::xsgetn(char* __s, streamsize __n)
- { return fread(__s, 1, __n, _M_cfile); }
-
+ __basic_file<char>::xsgetn(char* __s, streamsize __n, bool __stdio)
+ {
+ if (__stdio)
+ return fread(__s, 1, __n, _M_cfile);
+ else
+ {
+ streamsize __ret;
+ do
+ __ret = read(this->fd(), __s, __n);
+ while (__ret == -1L && errno == EINTR);
+ return __ret;
+ }
+ }
+
streamsize
- __basic_file<char>::xsputn(const char* __s, streamsize __n)
- { return fwrite(__s, 1, __n, _M_cfile); }
+ __basic_file<char>::xsputn(const char* __s, streamsize __n, bool __stdio)
+ {
+ if (__stdio)
+ return fwrite(__s, 1, __n, _M_cfile);
+ else
+ {
+ streamsize __ret;
+ do
+ __ret = write(this->fd(), __s, __n);
+ while (__ret == -1L && errno == EINTR);
+ return __ret;
+ }
+ }
streamoff
__basic_file<char>::seekoff(streamoff __off, ios_base::seekdir __way,
- ios_base::openmode /*__mode*/)
+ bool __stdio, ios_base::openmode /*__mode*/)
{
- if (!fseek(_M_cfile, __off, __way))
- return ftell(_M_cfile);
+ if (!__stdio)
+ return lseek(this->fd(), __off, __way);
else
- // Fseek failed.
- return -1L;
+ {
+ if (!fseek(_M_cfile, __off, __way))
+ return ftell(_M_cfile);
+ else
+ // Fseek failed.
+ return -1L;
+ }
}
streamoff
- __basic_file<char>::seekpos(streamoff __pos, ios_base::openmode /*__mode*/)
+ __basic_file<char>::seekpos(streamoff __pos, bool __stdio,
+ ios_base::openmode /*__mode*/)
{
- if (!fseek(_M_cfile, __pos, ios_base::beg))
- return ftell(_M_cfile);
+ if (!__stdio)
+ return lseek(this->fd(), __pos, ios_base::beg);
else
- // Fseek failed.
- return -1L;
+ {
+ if (!fseek(_M_cfile, __pos, ios_base::beg))
+ return ftell(_M_cfile);
+ else
+ // Fseek failed.
+ return -1L;
+ }
}
int
__basic_file<char>::sync()
{ return fflush(_M_cfile); }
+
+ streamsize
+ __basic_file<char>::showmanyc_helper(bool __stdio)
+ {
+#ifdef FIONREAD
+ // Pipes and sockets.
+ int __num = 0;
+ int __r = ioctl(this->fd(), FIONREAD, &__num);
+ if (!__r && __num >= 0)
+ return __num;
+#endif
+
+#ifdef _GLIBCPP_HAVE_POLL
+ // Cheap test.
+ struct pollfd __pfd[1];
+ __pfd[0].fd = this->fd();
+ __pfd[0].events = POLLIN;
+ if (poll(__pfd, 1, 0) <= 0)
+ return 0;
+#endif
+
+#if defined(_GLIBCPP_HAVE_S_ISREG) || defined(_GLIBCPP_HAVE_S_IFREG)
+ // Regular files.
+ struct stat __buffer;
+ int __ret = fstat(this->fd(), &__buffer);
+ if (!__ret && _GLIBCPP_ISREG(__buffer.st_mode))
+ if (__stdio)
+ return __buffer.st_size - ftell(_M_cfile);
+ else
+ return __buffer.st_size - lseek(this->fd(), 0, ios_base::cur);
+#endif
+ return 0;
+ }
+
} // namespace std
diff --git a/libstdc++-v3/config/io/basic_file_stdio.h b/libstdc++-v3/config/io/basic_file_stdio.h
index fe6edbb7058..b6a05697612 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.h
+++ b/libstdc++-v3/config/io/basic_file_stdio.h
@@ -93,21 +93,24 @@ namespace std
~__basic_file();
streamsize
- xsputn(const char* __s, streamsize __n);
+ xsputn(const char* __s, streamsize __n, bool __stdio);
streamsize
- xsgetn(char* __s, streamsize __n);
+ xsgetn(char* __s, streamsize __n, bool __stdio);
streamoff
- seekoff(streamoff __off, ios_base::seekdir __way,
+ seekoff(streamoff __off, ios_base::seekdir __way, bool __stdio,
ios_base::openmode __mode = ios_base::in | ios_base::out);
streamoff
- seekpos(streamoff __pos,
+ seekpos(streamoff __pos, bool __stdio,
ios_base::openmode __mode = ios_base::in | ios_base::out);
int
sync();
+
+ streamsize
+ showmanyc_helper(bool __stdio);
};
} // namespace std
diff --git a/libstdc++-v3/config/linker-map.gnu b/libstdc++-v3/config/linker-map.gnu
index 72e37a125d3..6f87a0b9967 100644
--- a/libstdc++-v3/config/linker-map.gnu
+++ b/libstdc++-v3/config/linker-map.gnu
@@ -28,21 +28,11 @@ GLIBCPP_3.4 {
# All but the last are terminated with a semicolon.
extern "C++"
{
- std::[A-Za]*;
- std::ba[a-r]*;
- std::basic_[a-r]*;
- std::basic_streambuf*;
- std::basic_stringbuf*;
- std::basic_stringstream*;
- std::basic_[t-z]*;
- std::ba[t-z]*;
- std::b[b-z]*;
- std::[A-Zc-k]*;
+ std::[A-Za-k]*;
std::length_error*;
std::logic_error*;
std::locale::[A-Za-e]*;
std::locale::facet::[A-Za-z]*;
- std::locale::facet::_M*;
std::locale::facet::_S_c_locale;
std::locale::facet::_S_clone_c_locale*;
std::locale::facet::_S_create_c_locale*;
@@ -60,9 +50,12 @@ GLIBCPP_3.4 {
std::[A-Zm-z]*;
std::__throw_*;
std::__basic_file*;
- std::__num_base*;
std::__timepunct*;
std::__numeric_limits_base*;
+ std::__num_base::_S_format_float*;
+ std::__num_base::_S_format_int*;
+ std::__num_base::_S_atoms_in;
+ std::__num_base::_S_atoms_out;
# Needed only when generic cpu's atomicity.h is in use.
__gnu_cxx::_Atomic_add_mutex;
@@ -85,19 +78,6 @@ GLIBCPP_3.4 {
# bool has_facet
_ZSt9has_facet*;
- # std::string, std::wstring minus static data members
- _ZNKS[sb]*;
- _ZNS[sb]D*;
- _ZNS[sb]C*;
- _ZStplI[cw]St11char_traitsI[cw]ESaI[cw]EESbIT_T0_T1_EPKS3_RKS6_;
- _ZStplI[cw]St11char_traitsI[cw]ESaI[cw]EESbIT_T0_T1_ES3_RKS6_;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE[A-Ra-z]*;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9][A-Ra-z]*;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9][0-9][A-Ra-z]*;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9]_[A-Ra-z]*;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE[0-9][0-9]_[A-Ra-z]*;
- _ZNS[sb]I[cw]St11char_traitsI[cw]ESaI[cw]EE20_S_empty_rep_storageE;
-
# std::__pool_alloc
_ZNSt12__pool_allocILb1ELi0EE10deallocateEPv[jm]*;
_ZNSt12__pool_allocILb1ELi0EE8allocateE[jm]*;
@@ -128,12 +108,48 @@ GLIBCPP_3.4 {
_ZdaPvRKSt9nothrow_t;
# vtable
- _ZTV*;
- _ZTT*;
+ _ZTVN9__gnu_cxx*;
+ _ZTVNSt8ios_base7failureE;
+ _ZTVNSt6locale5facetE;
+ _ZTVS[a-z];
+ _ZTVSt[0-9][A-Za-z]*;
+ _ZTVSt[0-9][0-9][A-Za-z]*;
+ _ZTVSt11__timepunctI[cw]E;
+ _ZTVSt23__codecvt_abstract_baseI[cw]c11__mbstate_tE;
+ _ZTVSt21__ctype_abstract_baseI[cw]E;
+
+ _ZTTS[a-z];
+ _ZTTSt[0-9][A-Za-z]*;
+ _ZTTSt[0-9][0-9][A-Za-z]*;
# typeinfo
- _ZTI*;
- _ZTS*;
+ _ZTI[a-z];
+ _ZTINSt8ios_base7failureE;
+ _ZTINSt6locale5facetE;
+ _ZTIN9__gnu_cxx*;
+ _ZTIP[a-z];
+ _ZTIPK[a-z];
+ _ZTIS[a-z];
+ _ZTISt[0-9][A-Za-z]*;
+ _ZTISt[0-9][0-9][A-Za-z]*;
+ _ZTISt11__timepunctI[cw]E;
+ _ZTISt10__num_base;
+ _ZTISt21__ctype_abstract_baseI[cw]E;
+ _ZTISt23__codecvt_abstract_baseI[cw]c11__mbstate_tE;
+
+ _ZTS[a-z];
+ _ZTSNSt8ios_base7failureE;
+ _ZTSNSt6locale5facetE;
+ _ZTSN9__gnu_cxx*;
+ _ZTSP[a-z];
+ _ZTSPK[a-z];
+ _ZTSS[a-z];
+ _ZTSSt[0-9][A-Za-z]*;
+ _ZTSSt[0-9][0-9][A-Za-z]*;
+ _ZTSSt11__timepunctI[cw]E;
+ _ZTSSt10__num_base;
+ _ZTSSt21__ctype_abstract_baseI[cw]E;
+ _ZTSSt23__codecvt_abstract_baseI[cw]c11__mbstate_tE;
# function-scope static objects requires a guard variable.
_ZGV*;
@@ -223,6 +239,13 @@ CXXABI_1.3 {
# __gnu_cxx::_verbose_terminate_handler()
_ZN9__gnu_cxx27__verbose_terminate_handlerEv;
+ # typeinfo
+ _ZTIN10__cxxabi*;
+ _ZTSN10__cxxabi*;
+
+ # vtable
+ _ZTVN10__cxxabi*;
+
local:
*;
};
diff --git a/libstdc++-v3/config/locale/generic/c_locale.cc b/libstdc++-v3/config/locale/generic/c_locale.cc
index 23f79121cca..13bc21aa046 100644
--- a/libstdc++-v3/config/locale/generic/c_locale.cc
+++ b/libstdc++-v3/config/locale/generic/c_locale.cc
@@ -212,9 +212,13 @@ namespace std
}
void
- locale::facet::_S_create_c_locale(__c_locale& __cloc, const char*,
+ locale::facet::_S_create_c_locale(__c_locale& __cloc, const char* __s,
__c_locale)
- { __cloc = NULL; }
+ {
+ __cloc = NULL;
+ if (strcmp (__s, "C"))
+ __throw_runtime_error("attempt to create locale from unhandled name in generic implementation; see http://gcc.gnu.org/ml/libstdc++/2003-02/msg00345.html");
+ }
void
locale::facet::_S_destroy_c_locale(__c_locale& __cloc)
diff --git a/libstdc++-v3/config/locale/generic/ctype_members.cc b/libstdc++-v3/config/locale/generic/ctype_members.cc
index f147983c6a2..6b5a603583f 100644
--- a/libstdc++-v3/config/locale/generic/ctype_members.cc
+++ b/libstdc++-v3/config/locale/generic/ctype_members.cc
@@ -158,15 +158,18 @@ namespace std
wchar_t
ctype<wchar_t>::
do_widen(char __c) const
- { return btowc(__c); }
+ { return btowc(static_cast<unsigned char>(__c)); }
const char*
ctype<wchar_t>::
do_widen(const char* __lo, const char* __hi, wchar_t* __dest) const
{
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
+ while (__lo < __hi)
+ {
+ *__dest = btowc(static_cast<unsigned char>(*__lo));
+ ++__lo;
+ ++__dest;
+ }
return __hi;
}
@@ -183,22 +186,12 @@ namespace std
do_narrow(const wchar_t* __lo, const wchar_t* __hi, char __dfault,
char* __dest) const
{
- size_t __offset = 0;
- while (true)
+ while (__lo < __hi)
{
- const wchar_t* __start = __lo + __offset;
- size_t __len = __hi - __start;
-
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
- if (__con != __len && __start != 0)
- {
- __offset = __start - __lo;
- __dest[__offset++] = __dfault;
- }
- else
- break;
+ int __c = wctob(*__lo);
+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
+ ++__lo;
+ ++__dest;
}
return __hi;
}
diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc
index 8bc2559096e..34c79be0ca3 100644
--- a/libstdc++-v3/config/locale/gnu/ctype_members.cc
+++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc
@@ -169,7 +169,7 @@ namespace std
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__c_locale __old = __uselocale(_M_c_locale_ctype);
#endif
- wchar_t __ret = btowc(__c);
+ wchar_t __ret = btowc(static_cast<unsigned char>(__c));
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#endif
@@ -183,9 +183,12 @@ namespace std
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__c_locale __old = __uselocale(_M_c_locale_ctype);
#endif
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- mbsrtowcs(__dest, &__lo, __hi - __lo, &__state);
+ while (__lo < __hi)
+ {
+ *__dest = btowc(static_cast<unsigned char>(*__lo));
+ ++__lo;
+ ++__dest;
+ }
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
#endif
@@ -214,22 +217,12 @@ namespace std
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__c_locale __old = __uselocale(_M_c_locale_ctype);
#endif
- size_t __offset = 0;
- while (true)
+ while (__lo < __hi)
{
- const wchar_t* __start = __lo + __offset;
- size_t __len = __hi - __start;
-
- mbstate_t __state;
- memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
- size_t __con = wcsrtombs(__dest + __offset, &__start, __len, &__state);
- if (__con != __len && __start != 0)
- {
- __offset = __start - __lo;
- __dest[__offset++] = __dfault;
- }
- else
- break;
+ int __c = wctob(*__lo);
+ *__dest = (__c == EOF ? __dfault : static_cast<char>(__c));
+ ++__lo;
+ ++__dest;
}
#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
__uselocale(__old);
diff --git a/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h b/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
index b4ba03f30f5..d69324ad572 100644
--- a/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
+++ b/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h
@@ -1,6 +1,6 @@
// Locale support -*- C++ -*-
-// Copyright (C) 2000 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2003 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,35 +38,42 @@
ctype<char>::
is(mask __m, char __c) const
{
- return __istype(__c, __m);
+ if (_M_table)
+ return _M_table[static_cast<unsigned char>(__c)] & __m;
+ else
+ return __istype(__c, __m);
}
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
- for (;__low < __high; ++__vec, ++__low)
- {
+ if (_M_table)
+ while (__low < __high)
+ *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+ else
+ for (;__low < __high; ++__vec, ++__low)
+ {
#if defined (_CTYPE_S) || defined (__istype)
- *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
- | space | print | graph | cntrl | punct | alnum);
+ *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit
+ | space | print | graph | cntrl | punct | alnum);
#else
- mask __m = 0;
- if (this->is(upper, *__low)) __m |= upper;
- if (this->is(lower, *__low)) __m |= lower;
- if (this->is(alpha, *__low)) __m |= alpha;
- if (this->is(digit, *__low)) __m |= digit;
- if (this->is(xdigit, *__low)) __m |= xdigit;
- if (this->is(space, *__low)) __m |= space;
- if (this->is(print, *__low)) __m |= print;
- if (this->is(graph, *__low)) __m |= graph;
- if (this->is(cntrl, *__low)) __m |= cntrl;
- if (this->is(punct, *__low)) __m |= punct;
- // Do not include explicit line for alnum mask since it is a
- // pure composite of masks on FreeBSD.
- *__vec = __m;
+ mask __m = 0;
+ if (this->is(upper, *__low)) __m |= upper;
+ if (this->is(lower, *__low)) __m |= lower;
+ if (this->is(alpha, *__low)) __m |= alpha;
+ if (this->is(digit, *__low)) __m |= digit;
+ if (this->is(xdigit, *__low)) __m |= xdigit;
+ if (this->is(space, *__low)) __m |= space;
+ if (this->is(print, *__low)) __m |= print;
+ if (this->is(graph, *__low)) __m |= graph;
+ if (this->is(cntrl, *__low)) __m |= cntrl;
+ if (this->is(punct, *__low)) __m |= punct;
+ // Do not include explicit line for alnum mask since it is a
+ // pure composite of masks on FreeBSD.
+ *__vec = __m;
#endif
- }
+ }
return __high;
}
@@ -74,8 +81,13 @@
ctype<char>::
scan_is(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high && !this->is(__m, *__low))
- ++__low;
+ if (_M_table)
+ while (__low < __high
+ && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+ ++__low;
+ else
+ while (__low < __high && !this->is(__m, *__low))
+ ++__low;
return __low;
}
@@ -83,12 +95,12 @@
ctype<char>::
scan_not(mask __m, const char* __low, const char* __high) const
{
- while (__low < __high && this->is(__m, *__low) != 0)
- ++__low;
+ if (_M_table)
+ while (__low < __high
+ && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+ ++__low;
+ else
+ while (__low < __high && this->is(__m, *__low) != 0)
+ ++__low;
return __low;
}
-
-
-
-
-
diff --git a/libstdc++-v3/config/os/hpux/ctype_noninline.h b/libstdc++-v3/config/os/hpux/ctype_noninline.h
index 7ec3b30ed9c..a85bc9cff82 100644
--- a/libstdc++-v3/config/os/hpux/ctype_noninline.h
+++ b/libstdc++-v3/config/os/hpux/ctype_noninline.h
@@ -36,7 +36,7 @@
const ctype_base::mask*
ctype<char>::classic_table() throw()
- { return 0; }
+ { return __SB_masks; }
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 7d82d91f5c1..c4722cfadb6 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -840,7 +840,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
- for ac_prog in gawk mawk nawk awk
+ for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -1501,8 +1501,9 @@ ac_exeext=$EXEEXT
+am__api_version="1.4"
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:1506: checking whether build environment is sane" >&5
+echo "configure:1507: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -1559,7 +1560,7 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1563: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1564: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1604,21 +1605,21 @@ EOF
missing_dir=`cd $ac_aux_dir && pwd`
-echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:1609: checking for working aclocal" >&5
+echo $ac_n "checking for working aclocal-${am__api_version}""... $ac_c" 1>&6
+echo "configure:1610: checking for working aclocal-${am__api_version}" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
-if (aclocal --version) < /dev/null > /dev/null 2>&1; then
- ACLOCAL=aclocal
+if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal-${am__api_version}
echo "$ac_t""found" 1>&6
else
- ACLOCAL="$missing_dir/missing aclocal"
+ ACLOCAL="$missing_dir/missing aclocal-${am__api_version}"
echo "$ac_t""missing" 1>&6
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:1622: checking for working autoconf" >&5
+echo "configure:1623: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -1630,21 +1631,21 @@ else
echo "$ac_t""missing" 1>&6
fi
-echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:1635: checking for working automake" >&5
+echo $ac_n "checking for working automake-${am__api_version}""... $ac_c" 1>&6
+echo "configure:1636: checking for working automake-${am__api_version}" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
-if (automake --version) < /dev/null > /dev/null 2>&1; then
- AUTOMAKE=automake
+if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake-${am__api_version}
echo "$ac_t""found" 1>&6
else
- AUTOMAKE="$missing_dir/missing automake"
+ AUTOMAKE="$missing_dir/missing automake-${am__api_version}"
echo "$ac_t""missing" 1>&6
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:1648: checking for working autoheader" >&5
+echo "configure:1649: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -1657,7 +1658,7 @@ else
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:1661: checking for working makeinfo" >&5
+echo "configure:1662: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -1756,7 +1757,7 @@ ac_prog=ld
if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1760: checking for ld used by GCC" >&5
+echo "configure:1761: checking for ld used by GCC" >&5
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
@@ -1786,10 +1787,10 @@ echo "configure:1760: checking for ld used by GCC" >&5
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1790: checking for GNU ld" >&5
+echo "configure:1791: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1793: checking for non-GNU ld" >&5
+echo "configure:1794: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1824,7 +1825,7 @@ else
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1828: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1829: checking if the linker ($LD) is GNU ld" >&5
if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1841,7 +1842,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1845: checking for $LD option to reload object files" >&5
+echo "configure:1846: checking for $LD option to reload object files" >&5
if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1853,7 +1854,7 @@ reload_flag=$lt_cv_ld_reload_flag
test -n "$reload_flag" && reload_flag=" $reload_flag"
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1857: checking for BSD-compatible nm" >&5
+echo "configure:1858: checking for BSD-compatible nm" >&5
if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1891,7 +1892,7 @@ NM="$lt_cv_path_NM"
echo "$ac_t""$NM" 1>&6
echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1895: checking how to recognise dependant libraries" >&5
+echo "configure:1896: checking how to recognise dependant libraries" >&5
if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2064,13 +2065,13 @@ file_magic_cmd=$lt_cv_file_magic_cmd
deplibs_check_method=$lt_cv_deplibs_check_method
echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:2068: checking for object suffix" >&5
+echo "configure:2069: checking for object suffix" >&5
if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:2074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
for ac_file in conftest.*; do
case $ac_file in
*.c) ;;
@@ -2094,7 +2095,7 @@ case $deplibs_check_method in
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:2098: checking for ${ac_tool_prefix}file" >&5
+echo "configure:2099: checking for ${ac_tool_prefix}file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2156,7 +2157,7 @@ fi
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:2160: checking for file" >&5
+echo "configure:2161: checking for file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2227,7 +2228,7 @@ esac
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2231: checking for $ac_word" >&5
+echo "configure:2232: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2259,7 +2260,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2263: checking for $ac_word" >&5
+echo "configure:2264: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2294,7 +2295,7 @@ fi
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2298: checking for $ac_word" >&5
+echo "configure:2299: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2326,7 +2327,7 @@ if test -n "$ac_tool_prefix"; then
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2330: checking for $ac_word" >&5
+echo "configure:2331: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2393,8 +2394,21 @@ 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 2397 "configure"' > conftest.$ac_ext
- if { (eval echo configure:2398: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ echo '#line 2398 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:2399: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
@@ -2406,6 +2420,7 @@ case $host in
LD="${LD-ld} -64"
;;
esac
+ fi
fi
rm -rf conftest*
;;
@@ -2413,7 +2428,7 @@ case $host in
ia64-*-hpux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*ELF-32*)
HPUX_IA64_MODE="32"
@@ -2429,7 +2444,7 @@ ia64-*-hpux*)
x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
- if { (eval echo configure:2433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:2448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*32-bit*)
case $host in
@@ -2473,7 +2488,7 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:2477: checking whether the C compiler needs -belf" >&5
+echo "configure:2492: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2486,14 +2501,14 @@ ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$a
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2490 "configure"
+#line 2505 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2497: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
@@ -2523,7 +2538,7 @@ echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
esac
echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:2527: checking how to run the C++ preprocessor" >&5
+echo "configure:2542: checking how to run the C++ preprocessor" >&5
if test -z "$CXXCPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2536,12 +2551,12 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
CXXCPP="${CXX-g++} -E"
cat > conftest.$ac_ext <<EOF
-#line 2540 "configure"
+#line 2555 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2545: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2560: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2679,7 +2694,7 @@ exec 5>>./config.log
# Check for c++ or library specific bits that don't require linking.
#GLIBCPP_CHECK_COMPILER_VERSION
echo $ac_n "checking for GNU make""... $ac_c" 1>&6
-echo "configure:2683: checking for GNU make" >&5
+echo "configure:2698: checking for GNU make" >&5
if eval "test \"`echo '$''{'_cv_gnu_make_command'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2705,7 +2720,7 @@ echo "$ac_t""$_cv_gnu_make_command" 1>&6 ;
# Enable all the variable C++ stuff. C_MBCHAR must come early.
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2709: checking how to run the C preprocessor" >&5
+echo "configure:2724: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
@@ -2720,13 +2735,13 @@ else
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 2724 "configure"
+#line 2739 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2745: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2737,13 +2752,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 2741 "configure"
+#line 2756 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2747: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2762: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2754,13 +2769,13 @@ else
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 2758 "configure"
+#line 2773 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2764: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2779: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
@@ -2786,7 +2801,7 @@ echo "$ac_t""$CPP" 1>&6
echo $ac_n "checking for cstdio to use""... $ac_c" 1>&6
-echo "configure:2790: checking for cstdio to use" >&5
+echo "configure:2805: checking for cstdio to use" >&5
# Check whether --enable-cstdio or --disable-cstdio was given.
if test "${enable_cstdio+set}" = set; then
enableval="$enable_cstdio"
@@ -2810,17 +2825,17 @@ fi
# see if we are on a system with libio native (ie, linux)
ac_safe=`echo "libio.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libio.h""... $ac_c" 1>&6
-echo "configure:2814: checking for libio.h" >&5
+echo "configure:2829: checking for libio.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2819 "configure"
+#line 2834 "configure"
#include "confdefs.h"
#include <libio.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2839: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2850,9 +2865,9 @@ fi
case "$target" in
*-*-linux*)
echo $ac_n "checking for glibc version >= 2.2""... $ac_c" 1>&6
-echo "configure:2854: checking for glibc version >= 2.2" >&5
+echo "configure:2869: checking for glibc version >= 2.2" >&5
cat > conftest.$ac_ext <<EOF
-#line 2856 "configure"
+#line 2871 "configure"
#include "confdefs.h"
#include <features.h>
@@ -2966,7 +2981,7 @@ fi
echo $ac_n "checking for clocale to use""... $ac_c" 1>&6
-echo "configure:2970: checking for clocale to use" >&5
+echo "configure:2985: checking for clocale to use" >&5
# Check whether --enable-clocale or --disable-clocale was given.
if test "${enable_clocale+set}" = set; then
enableval="$enable_clocale"
@@ -2984,7 +2999,7 @@ fi
case x${target_os} in
xlinux* | xgnu*)
cat > conftest.$ac_ext <<EOF
-#line 2988 "configure"
+#line 3003 "configure"
#include "confdefs.h"
#include <features.h>
@@ -3010,7 +3025,7 @@ rm -f conftest*
enable_clocale_flag=generic
else
cat > conftest.$ac_ext <<EOF
-#line 3014 "configure"
+#line 3029 "configure"
#include "confdefs.h"
#define _GNU_SOURCE 1
@@ -3037,7 +3052,7 @@ else
}
EOF
-if { (eval echo configure:3041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
enable_clocale_flag=gnu
else
@@ -3099,7 +3114,7 @@ fi
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3103: checking for $ac_word" >&5
+echo "configure:3118: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_check_msgfmt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -3195,7 +3210,7 @@ fi
echo $ac_n "checking for c header strategy to use""... $ac_c" 1>&6
-echo "configure:3199: checking for c header strategy to use" >&5
+echo "configure:3214: checking for c header strategy to use" >&5
# Check whether --enable-cheaders or --disable-cheaders was given.
if test "${enable_cheaders+set}" = set; then
enableval="$enable_cheaders"
@@ -3291,16 +3306,16 @@ cross_compiling=$ac_cv_prog_cxx_cross
# Check for the existence of <math.h> functions used if C99 is enabled.
ac_c99_math=yes;
echo $ac_n "checking for ISO C99 support in <math.h>""... $ac_c" 1>&6
-echo "configure:3295: checking for ISO C99 support in <math.h>" >&5
+echo "configure:3310: checking for ISO C99 support in <math.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 3297 "configure"
+#line 3312 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
fpclassify(0.0);
; return 0; }
EOF
-if { (eval echo configure:3304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3310,14 +3325,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3314 "configure"
+#line 3329 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isfinite(0.0);
; return 0; }
EOF
-if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3327,14 +3342,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3331 "configure"
+#line 3346 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isinf(0.0);
; return 0; }
EOF
-if { (eval echo configure:3338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3344,14 +3359,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3348 "configure"
+#line 3363 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isnan(0.0);
; return 0; }
EOF
-if { (eval echo configure:3355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3361,14 +3376,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3365 "configure"
+#line 3380 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isnormal(0.0);
; return 0; }
EOF
-if { (eval echo configure:3372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3378,14 +3393,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3382 "configure"
+#line 3397 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
signbit(0.0);
; return 0; }
EOF
-if { (eval echo configure:3389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3404: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3395,14 +3410,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3399 "configure"
+#line 3414 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isgreater(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3406: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3421: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3412,14 +3427,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3416 "configure"
+#line 3431 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isgreaterequal(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3429,14 +3444,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3433 "configure"
+#line 3448 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isless(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3455: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3446,14 +3461,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3450 "configure"
+#line 3465 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
islessequal(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3457: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3472: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3463,14 +3478,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3467 "configure"
+#line 3482 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
islessgreater(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3489: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3480,14 +3495,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3484 "configure"
+#line 3499 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
isunordered(0.0,0.0);
; return 0; }
EOF
-if { (eval echo configure:3491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3506: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3501,16 +3516,16 @@ rm -f conftest*
# Check for the existence in <stdio.h> of vscanf, et. al.
ac_c99_stdio=yes;
echo $ac_n "checking for ISO C99 support in <stdio.h>""... $ac_c" 1>&6
-echo "configure:3505: checking for ISO C99 support in <stdio.h>" >&5
+echo "configure:3520: checking for ISO C99 support in <stdio.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 3507 "configure"
+#line 3522 "configure"
#include "confdefs.h"
#include <stdio.h>
int main() {
snprintf("12", 0, "%i");
; return 0; }
EOF
-if { (eval echo configure:3514: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3529: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3520,7 +3535,7 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3524 "configure"
+#line 3539 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <stdarg.h>
@@ -3531,7 +3546,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:3535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3541,7 +3556,7 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3545 "configure"
+#line 3560 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <stdarg.h>
@@ -3552,7 +3567,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:3556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3562,7 +3577,7 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3566 "configure"
+#line 3581 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <stdarg.h>
@@ -3573,7 +3588,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:3577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3592: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3583,7 +3598,7 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3587 "configure"
+#line 3602 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <stdarg.h>
@@ -3594,7 +3609,7 @@ int main() {
; return 0; }
EOF
-if { (eval echo configure:3598: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3613: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3608,20 +3623,20 @@ rm -f conftest*
# Check for the existence in <stdlib.h> of lldiv_t, et. al.
ac_c99_stdlib=yes;
echo $ac_n "checking for lldiv_t declaration""... $ac_c" 1>&6
-echo "configure:3612: checking for lldiv_t declaration" >&5
+echo "configure:3627: checking for lldiv_t declaration" >&5
if eval "test \"`echo '$''{'ac_c99_lldiv_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3618 "configure"
+#line 3633 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
lldiv_t mydivt;
; return 0; }
EOF
-if { (eval echo configure:3625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_c99_lldiv_t=yes
else
@@ -3637,16 +3652,16 @@ fi
echo "$ac_t""$ac_c99_lldiv_t" 1>&6
echo $ac_n "checking for ISO C99 support in <stdlib.h>""... $ac_c" 1>&6
-echo "configure:3641: checking for ISO C99 support in <stdlib.h>" >&5
+echo "configure:3656: checking for ISO C99 support in <stdlib.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 3643 "configure"
+#line 3658 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
char* tmp; strtof("gnu", &tmp);
; return 0; }
EOF
-if { (eval echo configure:3650: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3665: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3656,14 +3671,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3660 "configure"
+#line 3675 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
char* tmp; strtold("gnu", &tmp);
; return 0; }
EOF
-if { (eval echo configure:3667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3673,14 +3688,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3677 "configure"
+#line 3692 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
llabs(10);
; return 0; }
EOF
-if { (eval echo configure:3684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3699: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3690,14 +3705,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3694 "configure"
+#line 3709 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
lldiv(10,1);
; return 0; }
EOF
-if { (eval echo configure:3701: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3716: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3707,14 +3722,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3711 "configure"
+#line 3726 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
atoll("10");
; return 0; }
EOF
-if { (eval echo configure:3718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3733: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3724,14 +3739,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3728 "configure"
+#line 3743 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
_Exit(0);
; return 0; }
EOF
-if { (eval echo configure:3735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3749,16 +3764,16 @@ rm -f conftest*
# XXX the wchar.h checks should be rolled into the general C99 bits.
ac_c99_wchar=yes;
echo $ac_n "checking for additional ISO C99 support in <wchar.h>""... $ac_c" 1>&6
-echo "configure:3753: checking for additional ISO C99 support in <wchar.h>" >&5
+echo "configure:3768: checking for additional ISO C99 support in <wchar.h>" >&5
cat > conftest.$ac_ext <<EOF
-#line 3755 "configure"
+#line 3770 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
wcstold(L"10.0", NULL);
; return 0; }
EOF
-if { (eval echo configure:3762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3768,14 +3783,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3772 "configure"
+#line 3787 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
wcstoll(L"10", NULL, 10);
; return 0; }
EOF
-if { (eval echo configure:3779: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3785,14 +3800,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3789 "configure"
+#line 3804 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
wcstoull(L"10", NULL, 10);
; return 0; }
EOF
-if { (eval echo configure:3796: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3811: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3804,7 +3819,7 @@ rm -f conftest*
echo "$ac_t""$ac_c99_wchar" 1>&6
echo $ac_n "checking for enabled ISO C99 support""... $ac_c" 1>&6
-echo "configure:3808: checking for enabled ISO C99 support" >&5
+echo "configure:3823: checking for enabled ISO C99 support" >&5
if test x"$ac_c99_math" = x"no" ||
test x"$ac_c99_stdio" = x"no" ||
test x"$ac_c99_stdlib" = x"no" ||
@@ -3852,17 +3867,17 @@ cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking for enabled long long I/O support""... $ac_c" 1>&6
-echo "configure:3856: checking for enabled long long I/O support" >&5
+echo "configure:3871: checking for enabled long long I/O support" >&5
# iostreams require strtoll, strtoull to compile
cat > conftest.$ac_ext <<EOF
-#line 3859 "configure"
+#line 3874 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
char* tmp; strtoll("gnu", &tmp, 10);
; return 0; }
EOF
-if { (eval echo configure:3866: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3872,14 +3887,14 @@ else
fi
rm -f conftest*
cat > conftest.$ac_ext <<EOF
-#line 3876 "configure"
+#line 3891 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
char* tmp; strtoull("gnu", &tmp, 10);
; return 0; }
EOF
-if { (eval echo configure:3883: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3898: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
:
else
echo "configure: failed program was:" >&5
@@ -3908,7 +3923,7 @@ cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6
-echo "configure:3912: checking for thread model used by GCC" >&5
+echo "configure:3927: checking for thread model used by GCC" >&5
target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
echo "$ac_t""$target_thread_file" 1>&6
@@ -3928,7 +3943,7 @@ EOF
echo $ac_n "checking for exception model to use""... $ac_c" 1>&6
-echo "configure:3932: checking for exception model to use" >&5
+echo "configure:3947: checking for exception model to use" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -3943,7 +3958,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then
:
else
cat > conftest.$ac_ext << EOF
-#line 3947 "configure"
+#line 3962 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -3954,7 +3969,7 @@ void foo()
EOF
old_CXXFLAGS="$CXXFLAGS"
CXXFLAGS=-S
- if { (eval echo configure:3958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:3973: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _Unwind_SjLj_Resume conftest.s >/dev/null 2>&1 ; then
enable_sjlj_exceptions=yes
elif grep _Unwind_Resume conftest.s >/dev/null 2>&1 ; then
@@ -3987,7 +4002,7 @@ cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking for use of libunwind""... $ac_c" 1>&6
-echo "configure:3991: checking for use of libunwind" >&5
+echo "configure:4006: checking for use of libunwind" >&5
# Check whether --enable-libunwind-exceptions or --disable-libunwind-exceptions was given.
if test "${enable_libunwind_exceptions+set}" = set; then
enableval="$enable_libunwind_exceptions"
@@ -4023,7 +4038,7 @@ EOF
fi
echo $ac_n "checking for extra compiler flags for building""... $ac_c" 1>&6
-echo "configure:4027: checking for extra compiler flags for building" >&5
+echo "configure:4042: checking for extra compiler flags for building" >&5
# Check whether --enable-cxx_flags or --disable-cxx_flags was given.
if test "${enable_cxx_flags+set}" = set; then
enableval="$enable_cxx_flags"
@@ -4066,7 +4081,7 @@ else
enable_debug=no
fi
echo $ac_n "checking for additional debug build""... $ac_c" 1>&6
-echo "configure:4070: checking for additional debug build" >&5
+echo "configure:4085: checking for additional debug build" >&5
echo "$ac_t""$enable_debug" 1>&6
@@ -4106,7 +4121,7 @@ esac
echo $ac_n "checking for debug build flags""... $ac_c" 1>&6
-echo "configure:4110: checking for debug build flags" >&5
+echo "configure:4125: checking for debug build flags" >&5
echo "$ac_t""$DEBUG_FLAGS" 1>&6
@@ -4115,17 +4130,17 @@ for ac_hdr in string.h stdlib.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4119: checking for $ac_hdr" >&5
+echo "configure:4134: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4124 "configure"
+#line 4139 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4206,17 +4221,17 @@ if test -n "$with_cross_host" || test x"$build" != x"$host"; then
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4210: checking for $ac_hdr" >&5
+echo "configure:4225: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4215 "configure"
+#line 4230 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4294,12 +4309,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:4298: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:4313: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 4303 "configure"
+#line 4318 "configure"
#include "confdefs.h"
int main(void)
@@ -4310,7 +4325,7 @@ else
}
EOF
-if { (eval echo configure:4314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -4344,7 +4359,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:4348: checking for main in -lm" >&5
+echo "configure:4363: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -4352,14 +4367,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4356 "configure"
+#line 4371 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:4363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -4389,12 +4404,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4393: checking for $ac_func" >&5
+echo "configure:4408: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4398 "configure"
+#line 4413 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4417,7 +4432,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4446,12 +4461,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4450: checking for $ac_func" >&5
+echo "configure:4465: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4455 "configure"
+#line 4470 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4474,7 +4489,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4502,12 +4517,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4506: checking for $ac_func" >&5
+echo "configure:4521: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4511 "configure"
+#line 4526 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4530,7 +4545,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4560,12 +4575,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4564: checking for $ac_func" >&5
+echo "configure:4579: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4569 "configure"
+#line 4584 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4588,7 +4603,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4633,16 +4648,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:4637: checking for mbstate_t" >&5
+echo "configure:4652: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 4639 "configure"
+#line 4654 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:4646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -4664,17 +4679,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4668: checking for $ac_hdr" >&5
+echo "configure:4683: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4673 "configure"
+#line 4688 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4705,17 +4720,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4709: checking for $ac_hdr" >&5
+echo "configure:4724: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4714 "configure"
+#line 4729 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4748,16 +4763,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:4752: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:4767: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 4754 "configure"
+#line 4769 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:4761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -4770,9 +4785,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:4774: checking for WEOF" >&5
+echo "configure:4789: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 4776 "configure"
+#line 4791 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -4781,7 +4796,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:4785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -4797,12 +4812,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4801: checking for $ac_func" >&5
+echo "configure:4816: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4806 "configure"
+#line 4821 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4825,7 +4840,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4860,12 +4875,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4864: checking for $ac_func" >&5
+echo "configure:4879: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4869 "configure"
+#line 4884 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -4888,7 +4903,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:4892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -4916,7 +4931,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:4920: checking for ISO C99 wchar_t support" >&5
+echo "configure:4935: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -4928,17 +4943,17 @@ echo "configure:4920: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:4932: checking for iconv.h" >&5
+echo "configure:4947: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4937 "configure"
+#line 4952 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4962,17 +4977,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:4966: checking for langinfo.h" >&5
+echo "configure:4981: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4971 "configure"
+#line 4986 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -4996,7 +5011,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:5000: checking for iconv in -liconv" >&5
+echo "configure:5015: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5004,7 +5019,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5008 "configure"
+#line 5023 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -5015,7 +5030,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:5019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5041,12 +5056,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5045: checking for $ac_func" >&5
+echo "configure:5060: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5050 "configure"
+#line 5065 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5069,7 +5084,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5099,7 +5114,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:5103: checking for XPG2 wchar_t support" >&5
+echo "configure:5118: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -5119,7 +5134,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:5123: checking for enabled wchar_t specializations" >&5
+echo "configure:5138: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -5206,17 +5221,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5210: checking for $ac_hdr" >&5
+echo "configure:5225: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5215 "configure"
+#line 5230 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5294,12 +5309,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:5298: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:5313: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 5303 "configure"
+#line 5318 "configure"
#include "confdefs.h"
int main(void)
@@ -5310,7 +5325,7 @@ else
}
EOF
-if { (eval echo configure:5314: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -5344,7 +5359,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5348: checking for main in -lm" >&5
+echo "configure:5363: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -5352,14 +5367,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5356 "configure"
+#line 5371 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -5389,12 +5404,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5393: checking for $ac_func" >&5
+echo "configure:5408: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5398 "configure"
+#line 5413 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5417,7 +5432,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5446,12 +5461,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5450: checking for $ac_func" >&5
+echo "configure:5465: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5455 "configure"
+#line 5470 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5474,7 +5489,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5502,12 +5517,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5506: checking for $ac_func" >&5
+echo "configure:5521: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5511 "configure"
+#line 5526 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5530,7 +5545,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5560,12 +5575,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5564: checking for $ac_func" >&5
+echo "configure:5579: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5569 "configure"
+#line 5584 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5588,7 +5603,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5633,16 +5648,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:5637: checking for mbstate_t" >&5
+echo "configure:5652: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 5639 "configure"
+#line 5654 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:5646: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5661: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -5664,17 +5679,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5668: checking for $ac_hdr" >&5
+echo "configure:5683: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5673 "configure"
+#line 5688 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5705,17 +5720,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5709: checking for $ac_hdr" >&5
+echo "configure:5724: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5714 "configure"
+#line 5729 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5748,16 +5763,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:5752: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:5767: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 5754 "configure"
+#line 5769 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:5761: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5776: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -5770,9 +5785,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:5774: checking for WEOF" >&5
+echo "configure:5789: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 5776 "configure"
+#line 5791 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -5781,7 +5796,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:5785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -5797,12 +5812,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5801: checking for $ac_func" >&5
+echo "configure:5816: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5806 "configure"
+#line 5821 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5825,7 +5840,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5860,12 +5875,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5864: checking for $ac_func" >&5
+echo "configure:5879: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5869 "configure"
+#line 5884 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -5888,7 +5903,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:5892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -5916,7 +5931,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:5920: checking for ISO C99 wchar_t support" >&5
+echo "configure:5935: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -5928,17 +5943,17 @@ echo "configure:5920: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:5932: checking for iconv.h" >&5
+echo "configure:5947: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5937 "configure"
+#line 5952 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5957: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5962,17 +5977,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:5966: checking for langinfo.h" >&5
+echo "configure:5981: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5971 "configure"
+#line 5986 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5991: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -5996,7 +6011,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:6000: checking for iconv in -liconv" >&5
+echo "configure:6015: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6004,7 +6019,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6008 "configure"
+#line 6023 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6015,7 +6030,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:6019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6041,12 +6056,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6045: checking for $ac_func" >&5
+echo "configure:6060: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6050 "configure"
+#line 6065 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6069,7 +6084,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6099,7 +6114,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:6103: checking for XPG2 wchar_t support" >&5
+echo "configure:6118: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -6119,7 +6134,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:6123: checking for enabled wchar_t specializations" >&5
+echo "configure:6138: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -6186,17 +6201,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6190: checking for $ac_hdr" >&5
+echo "configure:6205: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6195 "configure"
+#line 6210 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6274,12 +6289,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:6278: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:6293: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 6283 "configure"
+#line 6298 "configure"
#include "confdefs.h"
int main(void)
@@ -6290,7 +6305,7 @@ else
}
EOF
-if { (eval echo configure:6294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -6324,7 +6339,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:6328: checking for main in -lm" >&5
+echo "configure:6343: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6332,14 +6347,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6336 "configure"
+#line 6351 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:6343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -6369,12 +6384,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6373: checking for $ac_func" >&5
+echo "configure:6388: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6378 "configure"
+#line 6393 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6397,7 +6412,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6426,12 +6441,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6430: checking for $ac_func" >&5
+echo "configure:6445: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6435 "configure"
+#line 6450 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6454,7 +6469,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6482,12 +6497,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6486: checking for $ac_func" >&5
+echo "configure:6501: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6491 "configure"
+#line 6506 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6510,7 +6525,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6540,12 +6555,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6544: checking for $ac_func" >&5
+echo "configure:6559: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6549 "configure"
+#line 6564 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6568,7 +6583,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6613,16 +6628,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:6617: checking for mbstate_t" >&5
+echo "configure:6632: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 6619 "configure"
+#line 6634 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:6626: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6641: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -6644,17 +6659,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6648: checking for $ac_hdr" >&5
+echo "configure:6663: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6653 "configure"
+#line 6668 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6673: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6685,17 +6700,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6689: checking for $ac_hdr" >&5
+echo "configure:6704: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6694 "configure"
+#line 6709 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6699: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6714: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6728,16 +6743,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:6732: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:6747: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 6734 "configure"
+#line 6749 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:6741: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -6750,9 +6765,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:6754: checking for WEOF" >&5
+echo "configure:6769: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 6756 "configure"
+#line 6771 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -6761,7 +6776,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:6765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -6777,12 +6792,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6781: checking for $ac_func" >&5
+echo "configure:6796: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6786 "configure"
+#line 6801 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6805,7 +6820,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6840,12 +6855,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6844: checking for $ac_func" >&5
+echo "configure:6859: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6849 "configure"
+#line 6864 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -6868,7 +6883,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:6872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6887: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -6896,7 +6911,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:6900: checking for ISO C99 wchar_t support" >&5
+echo "configure:6915: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -6908,17 +6923,17 @@ echo "configure:6900: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:6912: checking for iconv.h" >&5
+echo "configure:6927: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6917 "configure"
+#line 6932 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6922: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6942,17 +6957,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:6946: checking for langinfo.h" >&5
+echo "configure:6961: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6951 "configure"
+#line 6966 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -6976,7 +6991,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:6980: checking for iconv in -liconv" >&5
+echo "configure:6995: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -6984,7 +6999,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 6988 "configure"
+#line 7003 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -6995,7 +7010,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:6999: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7021,12 +7036,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7025: checking for $ac_func" >&5
+echo "configure:7040: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7030 "configure"
+#line 7045 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7049,7 +7064,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7053: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7079,7 +7094,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:7083: checking for XPG2 wchar_t support" >&5
+echo "configure:7098: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -7099,7 +7114,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:7103: checking for enabled wchar_t specializations" >&5
+echo "configure:7118: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -7176,17 +7191,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7180: checking for $ac_hdr" >&5
+echo "configure:7195: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7185 "configure"
+#line 7200 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7190: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7264,12 +7279,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:7268: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:7283: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 7273 "configure"
+#line 7288 "configure"
#include "confdefs.h"
int main(void)
@@ -7280,7 +7295,7 @@ else
}
EOF
-if { (eval echo configure:7284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -7314,7 +7329,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:7318: checking for main in -lm" >&5
+echo "configure:7333: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7322,14 +7337,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7326 "configure"
+#line 7341 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:7333: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7348: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -7359,12 +7374,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7363: checking for $ac_func" >&5
+echo "configure:7378: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7368 "configure"
+#line 7383 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7387,7 +7402,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7391: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7416,12 +7431,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7420: checking for $ac_func" >&5
+echo "configure:7435: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7425 "configure"
+#line 7440 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7444,7 +7459,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7472,12 +7487,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7476: checking for $ac_func" >&5
+echo "configure:7491: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7481 "configure"
+#line 7496 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7500,7 +7515,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7530,12 +7545,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7534: checking for $ac_func" >&5
+echo "configure:7549: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7539 "configure"
+#line 7554 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7558,7 +7573,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7562: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7603,16 +7618,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:7607: checking for mbstate_t" >&5
+echo "configure:7622: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 7609 "configure"
+#line 7624 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:7616: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7631: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -7634,17 +7649,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7638: checking for $ac_hdr" >&5
+echo "configure:7653: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7643 "configure"
+#line 7658 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7675,17 +7690,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7679: checking for $ac_hdr" >&5
+echo "configure:7694: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7684 "configure"
+#line 7699 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7689: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7704: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7718,16 +7733,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:7722: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:7737: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 7724 "configure"
+#line 7739 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:7731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7746: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -7740,9 +7755,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:7744: checking for WEOF" >&5
+echo "configure:7759: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 7746 "configure"
+#line 7761 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -7751,7 +7766,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:7755: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -7767,12 +7782,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7771: checking for $ac_func" >&5
+echo "configure:7786: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7776 "configure"
+#line 7791 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7795,7 +7810,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7799: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7830,12 +7845,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:7834: checking for $ac_func" >&5
+echo "configure:7849: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7839 "configure"
+#line 7854 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -7858,7 +7873,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:7862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -7886,7 +7901,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:7890: checking for ISO C99 wchar_t support" >&5
+echo "configure:7905: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -7898,17 +7913,17 @@ echo "configure:7890: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:7902: checking for iconv.h" >&5
+echo "configure:7917: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7907 "configure"
+#line 7922 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7927: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7932,17 +7947,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:7936: checking for langinfo.h" >&5
+echo "configure:7951: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 7941 "configure"
+#line 7956 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7961: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -7966,7 +7981,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:7970: checking for iconv in -liconv" >&5
+echo "configure:7985: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -7974,7 +7989,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 7978 "configure"
+#line 7993 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -7985,7 +8000,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:7989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8011,12 +8026,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8015: checking for $ac_func" >&5
+echo "configure:8030: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8020 "configure"
+#line 8035 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8039,7 +8054,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8069,7 +8084,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:8073: checking for XPG2 wchar_t support" >&5
+echo "configure:8088: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -8089,7 +8104,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:8093: checking for enabled wchar_t specializations" >&5
+echo "configure:8108: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -8182,17 +8197,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8186: checking for $ac_hdr" >&5
+echo "configure:8201: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8191 "configure"
+#line 8206 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8268,12 +8283,12 @@ done
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:8272: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:8287: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 8277 "configure"
+#line 8292 "configure"
#include "confdefs.h"
int main(void)
@@ -8284,7 +8299,7 @@ else
}
EOF
-if { (eval echo configure:8288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:8303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -8318,7 +8333,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:8322: checking for main in -lm" >&5
+echo "configure:8337: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8326,14 +8341,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8330 "configure"
+#line 8345 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:8337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -8363,12 +8378,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8367: checking for $ac_func" >&5
+echo "configure:8382: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8372 "configure"
+#line 8387 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8391,7 +8406,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8420,12 +8435,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8424: checking for $ac_func" >&5
+echo "configure:8439: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8429 "configure"
+#line 8444 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8448,7 +8463,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8476,12 +8491,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8480: checking for $ac_func" >&5
+echo "configure:8495: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8485 "configure"
+#line 8500 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8504,7 +8519,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8508: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8534,12 +8549,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8538: checking for $ac_func" >&5
+echo "configure:8553: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8543 "configure"
+#line 8558 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8562,7 +8577,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8607,16 +8622,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:8611: checking for mbstate_t" >&5
+echo "configure:8626: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 8613 "configure"
+#line 8628 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:8620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8635: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -8638,17 +8653,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8642: checking for $ac_hdr" >&5
+echo "configure:8657: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8647 "configure"
+#line 8662 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8667: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8679,17 +8694,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8683: checking for $ac_hdr" >&5
+echo "configure:8698: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8688 "configure"
+#line 8703 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8693: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8708: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8722,16 +8737,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:8726: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:8741: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 8728 "configure"
+#line 8743 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:8735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -8744,9 +8759,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:8748: checking for WEOF" >&5
+echo "configure:8763: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 8750 "configure"
+#line 8765 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -8755,7 +8770,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:8759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:8774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -8771,12 +8786,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8775: checking for $ac_func" >&5
+echo "configure:8790: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8780 "configure"
+#line 8795 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8799,7 +8814,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8834,12 +8849,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8838: checking for $ac_func" >&5
+echo "configure:8853: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8843 "configure"
+#line 8858 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -8862,7 +8877,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:8866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8881: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -8890,7 +8905,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:8894: checking for ISO C99 wchar_t support" >&5
+echo "configure:8909: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -8902,17 +8917,17 @@ echo "configure:8894: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:8906: checking for iconv.h" >&5
+echo "configure:8921: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8911 "configure"
+#line 8926 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8916: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8936,17 +8951,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:8940: checking for langinfo.h" >&5
+echo "configure:8955: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 8945 "configure"
+#line 8960 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8965: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -8970,7 +8985,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:8974: checking for iconv in -liconv" >&5
+echo "configure:8989: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -8978,7 +8993,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 8982 "configure"
+#line 8997 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -8989,7 +9004,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:8993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -9015,12 +9030,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9019: checking for $ac_func" >&5
+echo "configure:9034: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9024 "configure"
+#line 9039 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9043,7 +9058,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9073,7 +9088,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:9077: checking for XPG2 wchar_t support" >&5
+echo "configure:9092: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -9093,7 +9108,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:9097: checking for enabled wchar_t specializations" >&5
+echo "configure:9112: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -9163,12 +9178,12 @@ fi
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:9167: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:9182: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 9172 "configure"
+#line 9187 "configure"
#include "confdefs.h"
int main(void)
@@ -9179,7 +9194,7 @@ else
}
EOF
-if { (eval echo configure:9183: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -9213,7 +9228,7 @@ fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:9217: checking for main in -lm" >&5
+echo "configure:9232: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9221,14 +9236,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 9225 "configure"
+#line 9240 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:9232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -9258,12 +9273,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9262: checking for $ac_func" >&5
+echo "configure:9277: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9267 "configure"
+#line 9282 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9286,7 +9301,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9315,12 +9330,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9319: checking for $ac_func" >&5
+echo "configure:9334: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9324 "configure"
+#line 9339 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9343,7 +9358,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9347: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9371,12 +9386,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9375: checking for $ac_func" >&5
+echo "configure:9390: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9380 "configure"
+#line 9395 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9399,7 +9414,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9429,12 +9444,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9433: checking for $ac_func" >&5
+echo "configure:9448: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9438 "configure"
+#line 9453 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9457,7 +9472,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9502,16 +9517,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:9506: checking for mbstate_t" >&5
+echo "configure:9521: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 9508 "configure"
+#line 9523 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:9515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9530: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -9533,17 +9548,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9537: checking for $ac_hdr" >&5
+echo "configure:9552: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9542 "configure"
+#line 9557 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9562: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9574,17 +9589,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9578: checking for $ac_hdr" >&5
+echo "configure:9593: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9583 "configure"
+#line 9598 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9603: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9617,16 +9632,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:9621: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:9636: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 9623 "configure"
+#line 9638 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:9630: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9645: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -9639,9 +9654,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:9643: checking for WEOF" >&5
+echo "configure:9658: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 9645 "configure"
+#line 9660 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -9650,7 +9665,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:9654: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9669: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -9666,12 +9681,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9670: checking for $ac_func" >&5
+echo "configure:9685: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9675 "configure"
+#line 9690 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9694,7 +9709,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9729,12 +9744,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9733: checking for $ac_func" >&5
+echo "configure:9748: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9738 "configure"
+#line 9753 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9757,7 +9772,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9785,7 +9800,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:9789: checking for ISO C99 wchar_t support" >&5
+echo "configure:9804: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -9797,17 +9812,17 @@ echo "configure:9789: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:9801: checking for iconv.h" >&5
+echo "configure:9816: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9806 "configure"
+#line 9821 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9831,17 +9846,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:9835: checking for langinfo.h" >&5
+echo "configure:9850: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9840 "configure"
+#line 9855 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9845: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -9865,7 +9880,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:9869: checking for iconv in -liconv" >&5
+echo "configure:9884: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -9873,7 +9888,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 9877 "configure"
+#line 9892 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -9884,7 +9899,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:9888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -9910,12 +9925,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:9914: checking for $ac_func" >&5
+echo "configure:9929: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 9919 "configure"
+#line 9934 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -9938,7 +9953,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:9942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -9968,7 +9983,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:9972: checking for XPG2 wchar_t support" >&5
+echo "configure:9987: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -9988,7 +10003,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:9992: checking for enabled wchar_t specializations" >&5
+echo "configure:10007: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -10494,17 +10509,17 @@ else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10498: checking for $ac_hdr" >&5
+echo "configure:10513: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10503 "configure"
+#line 10518 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10508: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10523: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -10555,10 +10570,10 @@ cross_compiling=$ac_cv_prog_cxx_cross
# Check for -ffunction-sections -fdata-sections
echo $ac_n "checking for g++ that supports -ffunction-sections -fdata-sections""... $ac_c" 1>&6
-echo "configure:10559: checking for g++ that supports -ffunction-sections -fdata-sections" >&5
+echo "configure:10574: checking for g++ that supports -ffunction-sections -fdata-sections" >&5
CXXFLAGS='-Werror -ffunction-sections -fdata-sections'
cat > conftest.$ac_ext <<EOF
-#line 10562 "configure"
+#line 10577 "configure"
#include "confdefs.h"
int main() {
@@ -10566,7 +10581,7 @@ int foo;
; return 0; }
EOF
-if { (eval echo configure:10570: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_fdsections=yes
else
@@ -10647,12 +10662,12 @@ cross_compiling=$ac_cv_prog_cc_cross
# used sections, first .eh_frame and now some of the glibc sections for
# iconv). Bzzzzt. Thanks for playing, maybe next time.
echo $ac_n "checking for ld that supports -Wl,--gc-sections""... $ac_c" 1>&6
-echo "configure:10651: checking for ld that supports -Wl,--gc-sections" >&5
+echo "configure:10666: checking for ld that supports -Wl,--gc-sections" >&5
if test "$cross_compiling" = yes; then
ac_sectionLDflags=yes
else
cat > conftest.$ac_ext <<EOF
-#line 10656 "configure"
+#line 10671 "configure"
#include "confdefs.h"
int main(void)
@@ -10663,7 +10678,7 @@ else
}
EOF
-if { (eval echo configure:10667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:10682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_sectionLDflags=yes
else
@@ -10698,7 +10713,7 @@ fi
echo $ac_n "checking for __builtin_abs declaration""... $ac_c" 1>&6
-echo "configure:10702: checking for __builtin_abs declaration" >&5
+echo "configure:10717: checking for __builtin_abs declaration" >&5
if test x${glibcpp_cv_func___builtin_abs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_abs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10713,14 +10728,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10717 "configure"
+#line 10732 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_abs(0);
; return 0; }
EOF
-if { (eval echo configure:10724: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10739: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_abs_use=yes
else
@@ -10744,21 +10759,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_abs_use" 1>&6
if test x$glibcpp_cv_func___builtin_abs_use = x"yes"; then
echo $ac_n "checking for __builtin_abs linkage""... $ac_c" 1>&6
-echo "configure:10748: checking for __builtin_abs linkage" >&5
+echo "configure:10763: checking for __builtin_abs linkage" >&5
if test x${glibcpp_cv_func___builtin_abs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_abs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10755 "configure"
+#line 10770 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_abs(0);
; return 0; }
EOF
-if { (eval echo configure:10762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_abs_link=yes
else
@@ -10784,7 +10799,7 @@ EOF
echo $ac_n "checking for __builtin_fabsf declaration""... $ac_c" 1>&6
-echo "configure:10788: checking for __builtin_fabsf declaration" >&5
+echo "configure:10803: checking for __builtin_fabsf declaration" >&5
if test x${glibcpp_cv_func___builtin_fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10799,14 +10814,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10803 "configure"
+#line 10818 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:10810: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10825: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsf_use=yes
else
@@ -10830,21 +10845,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabsf_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabsf_use = x"yes"; then
echo $ac_n "checking for __builtin_fabsf linkage""... $ac_c" 1>&6
-echo "configure:10834: checking for __builtin_fabsf linkage" >&5
+echo "configure:10849: checking for __builtin_fabsf linkage" >&5
if test x${glibcpp_cv_func___builtin_fabsf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10841 "configure"
+#line 10856 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:10848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsf_link=yes
else
@@ -10870,7 +10885,7 @@ EOF
echo $ac_n "checking for __builtin_fabs declaration""... $ac_c" 1>&6
-echo "configure:10874: checking for __builtin_fabs declaration" >&5
+echo "configure:10889: checking for __builtin_fabs declaration" >&5
if test x${glibcpp_cv_func___builtin_fabs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10885,14 +10900,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10889 "configure"
+#line 10904 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabs(0);
; return 0; }
EOF
-if { (eval echo configure:10896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabs_use=yes
else
@@ -10916,21 +10931,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabs_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabs_use = x"yes"; then
echo $ac_n "checking for __builtin_fabs linkage""... $ac_c" 1>&6
-echo "configure:10920: checking for __builtin_fabs linkage" >&5
+echo "configure:10935: checking for __builtin_fabs linkage" >&5
if test x${glibcpp_cv_func___builtin_fabs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 10927 "configure"
+#line 10942 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabs(0);
; return 0; }
EOF
-if { (eval echo configure:10934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabs_link=yes
else
@@ -10956,7 +10971,7 @@ EOF
echo $ac_n "checking for __builtin_fabsl declaration""... $ac_c" 1>&6
-echo "configure:10960: checking for __builtin_fabsl declaration" >&5
+echo "configure:10975: checking for __builtin_fabsl declaration" >&5
if test x${glibcpp_cv_func___builtin_fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -10971,14 +10986,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 10975 "configure"
+#line 10990 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:10982: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10997: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsl_use=yes
else
@@ -11002,21 +11017,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_fabsl_use" 1>&6
if test x$glibcpp_cv_func___builtin_fabsl_use = x"yes"; then
echo $ac_n "checking for __builtin_fabsl linkage""... $ac_c" 1>&6
-echo "configure:11006: checking for __builtin_fabsl linkage" >&5
+echo "configure:11021: checking for __builtin_fabsl linkage" >&5
if test x${glibcpp_cv_func___builtin_fabsl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_fabsl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11013 "configure"
+#line 11028 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:11020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_fabsl_link=yes
else
@@ -11042,7 +11057,7 @@ EOF
echo $ac_n "checking for __builtin_labs declaration""... $ac_c" 1>&6
-echo "configure:11046: checking for __builtin_labs declaration" >&5
+echo "configure:11061: checking for __builtin_labs declaration" >&5
if test x${glibcpp_cv_func___builtin_labs_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_labs_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11057,14 +11072,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11061 "configure"
+#line 11076 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_labs(0);
; return 0; }
EOF
-if { (eval echo configure:11068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_labs_use=yes
else
@@ -11088,21 +11103,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_labs_use" 1>&6
if test x$glibcpp_cv_func___builtin_labs_use = x"yes"; then
echo $ac_n "checking for __builtin_labs linkage""... $ac_c" 1>&6
-echo "configure:11092: checking for __builtin_labs linkage" >&5
+echo "configure:11107: checking for __builtin_labs linkage" >&5
if test x${glibcpp_cv_func___builtin_labs_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_labs_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11099 "configure"
+#line 11114 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_labs(0);
; return 0; }
EOF
-if { (eval echo configure:11106: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_labs_link=yes
else
@@ -11129,7 +11144,7 @@ EOF
echo $ac_n "checking for __builtin_sqrtf declaration""... $ac_c" 1>&6
-echo "configure:11133: checking for __builtin_sqrtf declaration" >&5
+echo "configure:11148: checking for __builtin_sqrtf declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11144,14 +11159,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11148 "configure"
+#line 11163 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:11155: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11170: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtf_use=yes
else
@@ -11175,21 +11190,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrtf_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrtf_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrtf linkage""... $ac_c" 1>&6
-echo "configure:11179: checking for __builtin_sqrtf linkage" >&5
+echo "configure:11194: checking for __builtin_sqrtf linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrtf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11186 "configure"
+#line 11201 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:11193: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtf_link=yes
else
@@ -11215,7 +11230,7 @@ EOF
echo $ac_n "checking for __builtin_sqrt declaration""... $ac_c" 1>&6
-echo "configure:11219: checking for __builtin_sqrt declaration" >&5
+echo "configure:11234: checking for __builtin_sqrt declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrt_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrt_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11230,14 +11245,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11234 "configure"
+#line 11249 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrt(0);
; return 0; }
EOF
-if { (eval echo configure:11241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrt_use=yes
else
@@ -11261,21 +11276,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrt_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrt_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrt linkage""... $ac_c" 1>&6
-echo "configure:11265: checking for __builtin_sqrt linkage" >&5
+echo "configure:11280: checking for __builtin_sqrt linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrt_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrt_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11272 "configure"
+#line 11287 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrt(0);
; return 0; }
EOF
-if { (eval echo configure:11279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11294: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrt_link=yes
else
@@ -11301,7 +11316,7 @@ EOF
echo $ac_n "checking for __builtin_sqrtl declaration""... $ac_c" 1>&6
-echo "configure:11305: checking for __builtin_sqrtl declaration" >&5
+echo "configure:11320: checking for __builtin_sqrtl declaration" >&5
if test x${glibcpp_cv_func___builtin_sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11316,14 +11331,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11320 "configure"
+#line 11335 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:11327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11342: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtl_use=yes
else
@@ -11347,21 +11362,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sqrtl_use" 1>&6
if test x$glibcpp_cv_func___builtin_sqrtl_use = x"yes"; then
echo $ac_n "checking for __builtin_sqrtl linkage""... $ac_c" 1>&6
-echo "configure:11351: checking for __builtin_sqrtl linkage" >&5
+echo "configure:11366: checking for __builtin_sqrtl linkage" >&5
if test x${glibcpp_cv_func___builtin_sqrtl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sqrtl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11358 "configure"
+#line 11373 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:11365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sqrtl_link=yes
else
@@ -11388,7 +11403,7 @@ EOF
echo $ac_n "checking for __builtin_sinf declaration""... $ac_c" 1>&6
-echo "configure:11392: checking for __builtin_sinf declaration" >&5
+echo "configure:11407: checking for __builtin_sinf declaration" >&5
if test x${glibcpp_cv_func___builtin_sinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11403,14 +11418,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11407 "configure"
+#line 11422 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinf(0);
; return 0; }
EOF
-if { (eval echo configure:11414: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinf_use=yes
else
@@ -11434,21 +11449,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sinf_use" 1>&6
if test x$glibcpp_cv_func___builtin_sinf_use = x"yes"; then
echo $ac_n "checking for __builtin_sinf linkage""... $ac_c" 1>&6
-echo "configure:11438: checking for __builtin_sinf linkage" >&5
+echo "configure:11453: checking for __builtin_sinf linkage" >&5
if test x${glibcpp_cv_func___builtin_sinf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11445 "configure"
+#line 11460 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinf(0);
; return 0; }
EOF
-if { (eval echo configure:11452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinf_link=yes
else
@@ -11474,7 +11489,7 @@ EOF
echo $ac_n "checking for __builtin_sin declaration""... $ac_c" 1>&6
-echo "configure:11478: checking for __builtin_sin declaration" >&5
+echo "configure:11493: checking for __builtin_sin declaration" >&5
if test x${glibcpp_cv_func___builtin_sin_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sin_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11489,14 +11504,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11493 "configure"
+#line 11508 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sin(0);
; return 0; }
EOF
-if { (eval echo configure:11500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sin_use=yes
else
@@ -11520,21 +11535,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sin_use" 1>&6
if test x$glibcpp_cv_func___builtin_sin_use = x"yes"; then
echo $ac_n "checking for __builtin_sin linkage""... $ac_c" 1>&6
-echo "configure:11524: checking for __builtin_sin linkage" >&5
+echo "configure:11539: checking for __builtin_sin linkage" >&5
if test x${glibcpp_cv_func___builtin_sin_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sin_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11531 "configure"
+#line 11546 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sin(0);
; return 0; }
EOF
-if { (eval echo configure:11538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sin_link=yes
else
@@ -11560,7 +11575,7 @@ EOF
echo $ac_n "checking for __builtin_sinl declaration""... $ac_c" 1>&6
-echo "configure:11564: checking for __builtin_sinl declaration" >&5
+echo "configure:11579: checking for __builtin_sinl declaration" >&5
if test x${glibcpp_cv_func___builtin_sinl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11575,14 +11590,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11579 "configure"
+#line 11594 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinl(0);
; return 0; }
EOF
-if { (eval echo configure:11586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinl_use=yes
else
@@ -11606,21 +11621,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_sinl_use" 1>&6
if test x$glibcpp_cv_func___builtin_sinl_use = x"yes"; then
echo $ac_n "checking for __builtin_sinl linkage""... $ac_c" 1>&6
-echo "configure:11610: checking for __builtin_sinl linkage" >&5
+echo "configure:11625: checking for __builtin_sinl linkage" >&5
if test x${glibcpp_cv_func___builtin_sinl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_sinl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11617 "configure"
+#line 11632 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_sinl(0);
; return 0; }
EOF
-if { (eval echo configure:11624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_sinl_link=yes
else
@@ -11647,7 +11662,7 @@ EOF
echo $ac_n "checking for __builtin_cosf declaration""... $ac_c" 1>&6
-echo "configure:11651: checking for __builtin_cosf declaration" >&5
+echo "configure:11666: checking for __builtin_cosf declaration" >&5
if test x${glibcpp_cv_func___builtin_cosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11662,14 +11677,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11666 "configure"
+#line 11681 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosf(0);
; return 0; }
EOF
-if { (eval echo configure:11673: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosf_use=yes
else
@@ -11693,21 +11708,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cosf_use" 1>&6
if test x$glibcpp_cv_func___builtin_cosf_use = x"yes"; then
echo $ac_n "checking for __builtin_cosf linkage""... $ac_c" 1>&6
-echo "configure:11697: checking for __builtin_cosf linkage" >&5
+echo "configure:11712: checking for __builtin_cosf linkage" >&5
if test x${glibcpp_cv_func___builtin_cosf_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosf_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11704 "configure"
+#line 11719 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosf(0);
; return 0; }
EOF
-if { (eval echo configure:11711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosf_link=yes
else
@@ -11733,7 +11748,7 @@ EOF
echo $ac_n "checking for __builtin_cos declaration""... $ac_c" 1>&6
-echo "configure:11737: checking for __builtin_cos declaration" >&5
+echo "configure:11752: checking for __builtin_cos declaration" >&5
if test x${glibcpp_cv_func___builtin_cos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11748,14 +11763,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11752 "configure"
+#line 11767 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cos(0);
; return 0; }
EOF
-if { (eval echo configure:11759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cos_use=yes
else
@@ -11779,21 +11794,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cos_use" 1>&6
if test x$glibcpp_cv_func___builtin_cos_use = x"yes"; then
echo $ac_n "checking for __builtin_cos linkage""... $ac_c" 1>&6
-echo "configure:11783: checking for __builtin_cos linkage" >&5
+echo "configure:11798: checking for __builtin_cos linkage" >&5
if test x${glibcpp_cv_func___builtin_cos_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cos_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11790 "configure"
+#line 11805 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cos(0);
; return 0; }
EOF
-if { (eval echo configure:11797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cos_link=yes
else
@@ -11819,7 +11834,7 @@ EOF
echo $ac_n "checking for __builtin_cosl declaration""... $ac_c" 1>&6
-echo "configure:11823: checking for __builtin_cosl declaration" >&5
+echo "configure:11838: checking for __builtin_cosl declaration" >&5
if test x${glibcpp_cv_func___builtin_cosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11834,14 +11849,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 11838 "configure"
+#line 11853 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosl(0);
; return 0; }
EOF
-if { (eval echo configure:11845: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11860: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosl_use=yes
else
@@ -11865,21 +11880,21 @@ fi
echo "$ac_t""$glibcpp_cv_func___builtin_cosl_use" 1>&6
if test x$glibcpp_cv_func___builtin_cosl_use = x"yes"; then
echo $ac_n "checking for __builtin_cosl linkage""... $ac_c" 1>&6
-echo "configure:11869: checking for __builtin_cosl linkage" >&5
+echo "configure:11884: checking for __builtin_cosl linkage" >&5
if test x${glibcpp_cv_func___builtin_cosl_link+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func___builtin_cosl_link'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 11876 "configure"
+#line 11891 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
__builtin_cosl(0);
; return 0; }
EOF
-if { (eval echo configure:11883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_cv_func___builtin_cosl_link=yes
else
@@ -11970,7 +11985,7 @@ EOF
CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:11974: checking for sin in -lm" >&5
+echo "configure:11989: checking for sin in -lm" >&5
ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -11978,7 +11993,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 11982 "configure"
+#line 11997 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -11989,7 +12004,7 @@ int main() {
sin()
; return 0; }
EOF
-if { (eval echo configure:11993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12008: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -12015,7 +12030,7 @@ fi
echo $ac_n "checking for isinf declaration""... $ac_c" 1>&6
-echo "configure:12019: checking for isinf declaration" >&5
+echo "configure:12034: checking for isinf declaration" >&5
if test x${glibcpp_cv_func_isinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12030,7 +12045,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12034 "configure"
+#line 12049 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12041,7 +12056,7 @@ int main() {
isinf(0);
; return 0; }
EOF
-if { (eval echo configure:12045: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12060: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinf_use=yes
else
@@ -12068,12 +12083,12 @@ fi
for ac_func in isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12072: checking for $ac_func" >&5
+echo "configure:12087: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12077 "configure"
+#line 12092 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12096,7 +12111,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12123,7 +12138,7 @@ done
else
echo $ac_n "checking for _isinf declaration""... $ac_c" 1>&6
-echo "configure:12127: checking for _isinf declaration" >&5
+echo "configure:12142: checking for _isinf declaration" >&5
if test x${glibcpp_cv_func__isinf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12138,7 +12153,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12142 "configure"
+#line 12157 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12149,7 +12164,7 @@ int main() {
_isinf(0);
; return 0; }
EOF
-if { (eval echo configure:12153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinf_use=yes
else
@@ -12176,12 +12191,12 @@ fi
for ac_func in _isinf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12180: checking for $ac_func" >&5
+echo "configure:12195: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12185 "configure"
+#line 12200 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12204,7 +12219,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12208: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12223: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12234,7 +12249,7 @@ done
echo $ac_n "checking for isnan declaration""... $ac_c" 1>&6
-echo "configure:12238: checking for isnan declaration" >&5
+echo "configure:12253: checking for isnan declaration" >&5
if test x${glibcpp_cv_func_isnan_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnan_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12249,7 +12264,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12253 "configure"
+#line 12268 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12260,7 +12275,7 @@ int main() {
isnan(0);
; return 0; }
EOF
-if { (eval echo configure:12264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12279: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnan_use=yes
else
@@ -12287,12 +12302,12 @@ fi
for ac_func in isnan
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12291: checking for $ac_func" >&5
+echo "configure:12306: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12296 "configure"
+#line 12311 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12315,7 +12330,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12334: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12342,7 +12357,7 @@ done
else
echo $ac_n "checking for _isnan declaration""... $ac_c" 1>&6
-echo "configure:12346: checking for _isnan declaration" >&5
+echo "configure:12361: checking for _isnan declaration" >&5
if test x${glibcpp_cv_func__isnan_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnan_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12357,7 +12372,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12361 "configure"
+#line 12376 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12368,7 +12383,7 @@ int main() {
_isnan(0);
; return 0; }
EOF
-if { (eval echo configure:12372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnan_use=yes
else
@@ -12395,12 +12410,12 @@ fi
for ac_func in _isnan
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12399: checking for $ac_func" >&5
+echo "configure:12414: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12404 "configure"
+#line 12419 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12423,7 +12438,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12453,7 +12468,7 @@ done
echo $ac_n "checking for finite declaration""... $ac_c" 1>&6
-echo "configure:12457: checking for finite declaration" >&5
+echo "configure:12472: checking for finite declaration" >&5
if test x${glibcpp_cv_func_finite_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finite_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12468,7 +12483,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12472 "configure"
+#line 12487 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12479,7 +12494,7 @@ int main() {
finite(0);
; return 0; }
EOF
-if { (eval echo configure:12483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finite_use=yes
else
@@ -12506,12 +12521,12 @@ fi
for ac_func in finite
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12510: checking for $ac_func" >&5
+echo "configure:12525: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12515 "configure"
+#line 12530 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12534,7 +12549,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12561,7 +12576,7 @@ done
else
echo $ac_n "checking for _finite declaration""... $ac_c" 1>&6
-echo "configure:12565: checking for _finite declaration" >&5
+echo "configure:12580: checking for _finite declaration" >&5
if test x${glibcpp_cv_func__finite_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finite_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12576,7 +12591,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12580 "configure"
+#line 12595 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -12587,7 +12602,7 @@ int main() {
_finite(0);
; return 0; }
EOF
-if { (eval echo configure:12591: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finite_use=yes
else
@@ -12614,12 +12629,12 @@ fi
for ac_func in _finite
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12618: checking for $ac_func" >&5
+echo "configure:12633: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12623 "configure"
+#line 12638 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12642,7 +12657,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12672,7 +12687,7 @@ done
echo $ac_n "checking for copysign declaration""... $ac_c" 1>&6
-echo "configure:12676: checking for copysign declaration" >&5
+echo "configure:12691: checking for copysign declaration" >&5
if test x${glibcpp_cv_func_copysign_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_copysign_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12687,14 +12702,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12691 "configure"
+#line 12706 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
copysign(0, 0);
; return 0; }
EOF
-if { (eval echo configure:12698: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12713: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_copysign_use=yes
else
@@ -12721,12 +12736,12 @@ fi
for ac_func in copysign
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12725: checking for $ac_func" >&5
+echo "configure:12740: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12730 "configure"
+#line 12745 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12749,7 +12764,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12776,7 +12791,7 @@ done
else
echo $ac_n "checking for _copysign declaration""... $ac_c" 1>&6
-echo "configure:12780: checking for _copysign declaration" >&5
+echo "configure:12795: checking for _copysign declaration" >&5
if test x${glibcpp_cv_func__copysign_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__copysign_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12791,14 +12806,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12795 "configure"
+#line 12810 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_copysign(0, 0);
; return 0; }
EOF
-if { (eval echo configure:12802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12817: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__copysign_use=yes
else
@@ -12825,12 +12840,12 @@ fi
for ac_func in _copysign
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12829: checking for $ac_func" >&5
+echo "configure:12844: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12834 "configure"
+#line 12849 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12853,7 +12868,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12883,7 +12898,7 @@ done
echo $ac_n "checking for sincos declaration""... $ac_c" 1>&6
-echo "configure:12887: checking for sincos declaration" >&5
+echo "configure:12902: checking for sincos declaration" >&5
if test x${glibcpp_cv_func_sincos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -12898,14 +12913,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 12902 "configure"
+#line 12917 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincos(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:12909: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincos_use=yes
else
@@ -12932,12 +12947,12 @@ fi
for ac_func in sincos
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12936: checking for $ac_func" >&5
+echo "configure:12951: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 12941 "configure"
+#line 12956 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -12960,7 +12975,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:12964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12979: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -12987,7 +13002,7 @@ done
else
echo $ac_n "checking for _sincos declaration""... $ac_c" 1>&6
-echo "configure:12991: checking for _sincos declaration" >&5
+echo "configure:13006: checking for _sincos declaration" >&5
if test x${glibcpp_cv_func__sincos_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincos_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13002,14 +13017,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13006 "configure"
+#line 13021 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincos(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:13013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13028: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincos_use=yes
else
@@ -13036,12 +13051,12 @@ fi
for ac_func in _sincos
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13040: checking for $ac_func" >&5
+echo "configure:13055: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13045 "configure"
+#line 13060 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13064,7 +13079,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13094,7 +13109,7 @@ done
echo $ac_n "checking for fpclass declaration""... $ac_c" 1>&6
-echo "configure:13098: checking for fpclass declaration" >&5
+echo "configure:13113: checking for fpclass declaration" >&5
if test x${glibcpp_cv_func_fpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13109,7 +13124,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13113 "configure"
+#line 13128 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13120,7 +13135,7 @@ int main() {
fpclass(0);
; return 0; }
EOF
-if { (eval echo configure:13124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fpclass_use=yes
else
@@ -13147,12 +13162,12 @@ fi
for ac_func in fpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13151: checking for $ac_func" >&5
+echo "configure:13166: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13156 "configure"
+#line 13171 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13175,7 +13190,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13202,7 +13217,7 @@ done
else
echo $ac_n "checking for _fpclass declaration""... $ac_c" 1>&6
-echo "configure:13206: checking for _fpclass declaration" >&5
+echo "configure:13221: checking for _fpclass declaration" >&5
if test x${glibcpp_cv_func__fpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13217,7 +13232,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13221 "configure"
+#line 13236 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13228,7 +13243,7 @@ int main() {
_fpclass(0);
; return 0; }
EOF
-if { (eval echo configure:13232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13247: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fpclass_use=yes
else
@@ -13255,12 +13270,12 @@ fi
for ac_func in _fpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13259: checking for $ac_func" >&5
+echo "configure:13274: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13264 "configure"
+#line 13279 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13283,7 +13298,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13313,7 +13328,7 @@ done
echo $ac_n "checking for qfpclass declaration""... $ac_c" 1>&6
-echo "configure:13317: checking for qfpclass declaration" >&5
+echo "configure:13332: checking for qfpclass declaration" >&5
if test x${glibcpp_cv_func_qfpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_qfpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13328,7 +13343,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13332 "configure"
+#line 13347 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13339,7 +13354,7 @@ int main() {
qfpclass(0);
; return 0; }
EOF
-if { (eval echo configure:13343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_qfpclass_use=yes
else
@@ -13366,12 +13381,12 @@ fi
for ac_func in qfpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13370: checking for $ac_func" >&5
+echo "configure:13385: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13375 "configure"
+#line 13390 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13394,7 +13409,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13421,7 +13436,7 @@ done
else
echo $ac_n "checking for _qfpclass declaration""... $ac_c" 1>&6
-echo "configure:13425: checking for _qfpclass declaration" >&5
+echo "configure:13440: checking for _qfpclass declaration" >&5
if test x${glibcpp_cv_func__qfpclass_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__qfpclass_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13436,7 +13451,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13440 "configure"
+#line 13455 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13447,7 +13462,7 @@ int main() {
_qfpclass(0);
; return 0; }
EOF
-if { (eval echo configure:13451: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__qfpclass_use=yes
else
@@ -13474,12 +13489,12 @@ fi
for ac_func in _qfpclass
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13478: checking for $ac_func" >&5
+echo "configure:13493: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13483 "configure"
+#line 13498 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13502,7 +13517,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13532,7 +13547,7 @@ done
echo $ac_n "checking for hypot declaration""... $ac_c" 1>&6
-echo "configure:13536: checking for hypot declaration" >&5
+echo "configure:13551: checking for hypot declaration" >&5
if test x${glibcpp_cv_func_hypot_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypot_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13547,14 +13562,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13551 "configure"
+#line 13566 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypot(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13573: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypot_use=yes
else
@@ -13581,12 +13596,12 @@ fi
for ac_func in hypot
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13585: checking for $ac_func" >&5
+echo "configure:13600: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13590 "configure"
+#line 13605 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13609,7 +13624,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13628: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13636,7 +13651,7 @@ done
else
echo $ac_n "checking for _hypot declaration""... $ac_c" 1>&6
-echo "configure:13640: checking for _hypot declaration" >&5
+echo "configure:13655: checking for _hypot declaration" >&5
if test x${glibcpp_cv_func__hypot_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypot_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13651,14 +13666,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13655 "configure"
+#line 13670 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypot(0, 0);
; return 0; }
EOF
-if { (eval echo configure:13662: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypot_use=yes
else
@@ -13685,12 +13700,12 @@ fi
for ac_func in _hypot
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13689: checking for $ac_func" >&5
+echo "configure:13704: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13694 "configure"
+#line 13709 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13713,7 +13728,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13743,7 +13758,7 @@ done
echo $ac_n "checking for float trig functions""... $ac_c" 1>&6
-echo "configure:13747: checking for float trig functions" >&5
+echo "configure:13762: checking for float trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_float_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -13757,7 +13772,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13761 "configure"
+#line 13776 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -13766,7 +13781,7 @@ int main() {
coshf sinhf tanhf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:13770: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_float_trig_use=yes
else
@@ -13792,12 +13807,12 @@ fi
coshf sinhf tanhf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13796: checking for $ac_func" >&5
+echo "configure:13811: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13801 "configure"
+#line 13816 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13820,7 +13835,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13848,7 +13863,7 @@ done
echo $ac_n "checking for float round functions""... $ac_c" 1>&6
-echo "configure:13852: checking for float round functions" >&5
+echo "configure:13867: checking for float round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_float_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -13862,14 +13877,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13866 "configure"
+#line 13881 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in ceilf floorf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:13873: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_float_round_use=yes
else
@@ -13893,12 +13908,12 @@ fi
for ac_func in ceilf floorf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:13897: checking for $ac_func" >&5
+echo "configure:13912: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 13902 "configure"
+#line 13917 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -13921,7 +13936,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:13925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -13950,7 +13965,7 @@ done
echo $ac_n "checking for expf declaration""... $ac_c" 1>&6
-echo "configure:13954: checking for expf declaration" >&5
+echo "configure:13969: checking for expf declaration" >&5
if test x${glibcpp_cv_func_expf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_expf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -13965,7 +13980,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 13969 "configure"
+#line 13984 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -13976,7 +13991,7 @@ int main() {
expf(0);
; return 0; }
EOF
-if { (eval echo configure:13980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_expf_use=yes
else
@@ -14003,12 +14018,12 @@ fi
for ac_func in expf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14007: checking for $ac_func" >&5
+echo "configure:14022: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14012 "configure"
+#line 14027 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14031,7 +14046,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14058,7 +14073,7 @@ done
else
echo $ac_n "checking for _expf declaration""... $ac_c" 1>&6
-echo "configure:14062: checking for _expf declaration" >&5
+echo "configure:14077: checking for _expf declaration" >&5
if test x${glibcpp_cv_func__expf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__expf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14073,7 +14088,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14077 "configure"
+#line 14092 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14084,7 +14099,7 @@ int main() {
_expf(0);
; return 0; }
EOF
-if { (eval echo configure:14088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14103: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__expf_use=yes
else
@@ -14111,12 +14126,12 @@ fi
for ac_func in _expf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14115: checking for $ac_func" >&5
+echo "configure:14130: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14120 "configure"
+#line 14135 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14139,7 +14154,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14169,7 +14184,7 @@ done
echo $ac_n "checking for isnanf declaration""... $ac_c" 1>&6
-echo "configure:14173: checking for isnanf declaration" >&5
+echo "configure:14188: checking for isnanf declaration" >&5
if test x${glibcpp_cv_func_isnanf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnanf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14184,7 +14199,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14188 "configure"
+#line 14203 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14195,7 +14210,7 @@ int main() {
isnanf(0);
; return 0; }
EOF
-if { (eval echo configure:14199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14214: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnanf_use=yes
else
@@ -14222,12 +14237,12 @@ fi
for ac_func in isnanf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14226: checking for $ac_func" >&5
+echo "configure:14241: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14231 "configure"
+#line 14246 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14250,7 +14265,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14277,7 +14292,7 @@ done
else
echo $ac_n "checking for _isnanf declaration""... $ac_c" 1>&6
-echo "configure:14281: checking for _isnanf declaration" >&5
+echo "configure:14296: checking for _isnanf declaration" >&5
if test x${glibcpp_cv_func__isnanf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnanf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14292,7 +14307,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14296 "configure"
+#line 14311 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14303,7 +14318,7 @@ int main() {
_isnanf(0);
; return 0; }
EOF
-if { (eval echo configure:14307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnanf_use=yes
else
@@ -14330,12 +14345,12 @@ fi
for ac_func in _isnanf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14334: checking for $ac_func" >&5
+echo "configure:14349: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14339 "configure"
+#line 14354 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14358,7 +14373,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14388,7 +14403,7 @@ done
echo $ac_n "checking for isinff declaration""... $ac_c" 1>&6
-echo "configure:14392: checking for isinff declaration" >&5
+echo "configure:14407: checking for isinff declaration" >&5
if test x${glibcpp_cv_func_isinff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14403,7 +14418,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14407 "configure"
+#line 14422 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14414,7 +14429,7 @@ int main() {
isinff(0);
; return 0; }
EOF
-if { (eval echo configure:14418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14433: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinff_use=yes
else
@@ -14441,12 +14456,12 @@ fi
for ac_func in isinff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14445: checking for $ac_func" >&5
+echo "configure:14460: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14450 "configure"
+#line 14465 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14469,7 +14484,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14496,7 +14511,7 @@ done
else
echo $ac_n "checking for _isinff declaration""... $ac_c" 1>&6
-echo "configure:14500: checking for _isinff declaration" >&5
+echo "configure:14515: checking for _isinff declaration" >&5
if test x${glibcpp_cv_func__isinff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14511,7 +14526,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14515 "configure"
+#line 14530 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14522,7 +14537,7 @@ int main() {
_isinff(0);
; return 0; }
EOF
-if { (eval echo configure:14526: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinff_use=yes
else
@@ -14549,12 +14564,12 @@ fi
for ac_func in _isinff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14553: checking for $ac_func" >&5
+echo "configure:14568: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14558 "configure"
+#line 14573 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14577,7 +14592,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14607,7 +14622,7 @@ done
echo $ac_n "checking for atan2f declaration""... $ac_c" 1>&6
-echo "configure:14611: checking for atan2f declaration" >&5
+echo "configure:14626: checking for atan2f declaration" >&5
if test x${glibcpp_cv_func_atan2f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_atan2f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14622,14 +14637,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14626 "configure"
+#line 14641 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
atan2f(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14633: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_atan2f_use=yes
else
@@ -14656,12 +14671,12 @@ fi
for ac_func in atan2f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14660: checking for $ac_func" >&5
+echo "configure:14675: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14665 "configure"
+#line 14680 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14684,7 +14699,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14703: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14711,7 +14726,7 @@ done
else
echo $ac_n "checking for _atan2f declaration""... $ac_c" 1>&6
-echo "configure:14715: checking for _atan2f declaration" >&5
+echo "configure:14730: checking for _atan2f declaration" >&5
if test x${glibcpp_cv_func__atan2f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__atan2f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14726,14 +14741,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14730 "configure"
+#line 14745 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_atan2f(0, 0);
; return 0; }
EOF
-if { (eval echo configure:14737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__atan2f_use=yes
else
@@ -14760,12 +14775,12 @@ fi
for ac_func in _atan2f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14764: checking for $ac_func" >&5
+echo "configure:14779: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14769 "configure"
+#line 14784 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14788,7 +14803,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14818,7 +14833,7 @@ done
echo $ac_n "checking for fabsf declaration""... $ac_c" 1>&6
-echo "configure:14822: checking for fabsf declaration" >&5
+echo "configure:14837: checking for fabsf declaration" >&5
if test x${glibcpp_cv_func_fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14833,7 +14848,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14837 "configure"
+#line 14852 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14844,7 +14859,7 @@ int main() {
fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:14848: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fabsf_use=yes
else
@@ -14871,12 +14886,12 @@ fi
for ac_func in fabsf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14875: checking for $ac_func" >&5
+echo "configure:14890: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14880 "configure"
+#line 14895 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -14899,7 +14914,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:14903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -14926,7 +14941,7 @@ done
else
echo $ac_n "checking for _fabsf declaration""... $ac_c" 1>&6
-echo "configure:14930: checking for _fabsf declaration" >&5
+echo "configure:14945: checking for _fabsf declaration" >&5
if test x${glibcpp_cv_func__fabsf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fabsf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -14941,7 +14956,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 14945 "configure"
+#line 14960 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -14952,7 +14967,7 @@ int main() {
_fabsf(0);
; return 0; }
EOF
-if { (eval echo configure:14956: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fabsf_use=yes
else
@@ -14979,12 +14994,12 @@ fi
for ac_func in _fabsf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14983: checking for $ac_func" >&5
+echo "configure:14998: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 14988 "configure"
+#line 15003 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15007,7 +15022,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15037,7 +15052,7 @@ done
echo $ac_n "checking for fmodf declaration""... $ac_c" 1>&6
-echo "configure:15041: checking for fmodf declaration" >&5
+echo "configure:15056: checking for fmodf declaration" >&5
if test x${glibcpp_cv_func_fmodf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fmodf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15052,14 +15067,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15056 "configure"
+#line 15071 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
fmodf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15063: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15078: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fmodf_use=yes
else
@@ -15086,12 +15101,12 @@ fi
for ac_func in fmodf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15090: checking for $ac_func" >&5
+echo "configure:15105: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15095 "configure"
+#line 15110 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15114,7 +15129,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15133: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15141,7 +15156,7 @@ done
else
echo $ac_n "checking for _fmodf declaration""... $ac_c" 1>&6
-echo "configure:15145: checking for _fmodf declaration" >&5
+echo "configure:15160: checking for _fmodf declaration" >&5
if test x${glibcpp_cv_func__fmodf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fmodf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15156,14 +15171,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15160 "configure"
+#line 15175 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_fmodf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15182: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fmodf_use=yes
else
@@ -15190,12 +15205,12 @@ fi
for ac_func in _fmodf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15194: checking for $ac_func" >&5
+echo "configure:15209: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15199 "configure"
+#line 15214 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15218,7 +15233,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15248,7 +15263,7 @@ done
echo $ac_n "checking for frexpf declaration""... $ac_c" 1>&6
-echo "configure:15252: checking for frexpf declaration" >&5
+echo "configure:15267: checking for frexpf declaration" >&5
if test x${glibcpp_cv_func_frexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_frexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15263,14 +15278,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15267 "configure"
+#line 15282 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
frexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15274: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15289: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_frexpf_use=yes
else
@@ -15297,12 +15312,12 @@ fi
for ac_func in frexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15301: checking for $ac_func" >&5
+echo "configure:15316: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15306 "configure"
+#line 15321 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15325,7 +15340,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15329: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15352,7 +15367,7 @@ done
else
echo $ac_n "checking for _frexpf declaration""... $ac_c" 1>&6
-echo "configure:15356: checking for _frexpf declaration" >&5
+echo "configure:15371: checking for _frexpf declaration" >&5
if test x${glibcpp_cv_func__frexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__frexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15367,14 +15382,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15371 "configure"
+#line 15386 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_frexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__frexpf_use=yes
else
@@ -15401,12 +15416,12 @@ fi
for ac_func in _frexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15405: checking for $ac_func" >&5
+echo "configure:15420: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15410 "configure"
+#line 15425 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15429,7 +15444,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15459,7 +15474,7 @@ done
echo $ac_n "checking for hypotf declaration""... $ac_c" 1>&6
-echo "configure:15463: checking for hypotf declaration" >&5
+echo "configure:15478: checking for hypotf declaration" >&5
if test x${glibcpp_cv_func_hypotf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypotf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15474,14 +15489,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15478 "configure"
+#line 15493 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypotf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypotf_use=yes
else
@@ -15508,12 +15523,12 @@ fi
for ac_func in hypotf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15512: checking for $ac_func" >&5
+echo "configure:15527: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15517 "configure"
+#line 15532 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15536,7 +15551,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15563,7 +15578,7 @@ done
else
echo $ac_n "checking for _hypotf declaration""... $ac_c" 1>&6
-echo "configure:15567: checking for _hypotf declaration" >&5
+echo "configure:15582: checking for _hypotf declaration" >&5
if test x${glibcpp_cv_func__hypotf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypotf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15578,14 +15593,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15582 "configure"
+#line 15597 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypotf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15589: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypotf_use=yes
else
@@ -15612,12 +15627,12 @@ fi
for ac_func in _hypotf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15616: checking for $ac_func" >&5
+echo "configure:15631: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15621 "configure"
+#line 15636 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15640,7 +15655,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15670,7 +15685,7 @@ done
echo $ac_n "checking for ldexpf declaration""... $ac_c" 1>&6
-echo "configure:15674: checking for ldexpf declaration" >&5
+echo "configure:15689: checking for ldexpf declaration" >&5
if test x${glibcpp_cv_func_ldexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_ldexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15685,14 +15700,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15689 "configure"
+#line 15704 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
ldexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15696: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15711: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_ldexpf_use=yes
else
@@ -15719,12 +15734,12 @@ fi
for ac_func in ldexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15723: checking for $ac_func" >&5
+echo "configure:15738: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15728 "configure"
+#line 15743 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15747,7 +15762,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15766: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15774,7 +15789,7 @@ done
else
echo $ac_n "checking for _ldexpf declaration""... $ac_c" 1>&6
-echo "configure:15778: checking for _ldexpf declaration" >&5
+echo "configure:15793: checking for _ldexpf declaration" >&5
if test x${glibcpp_cv_func__ldexpf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__ldexpf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15789,14 +15804,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15793 "configure"
+#line 15808 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_ldexpf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:15800: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15815: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__ldexpf_use=yes
else
@@ -15823,12 +15838,12 @@ fi
for ac_func in _ldexpf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15827: checking for $ac_func" >&5
+echo "configure:15842: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15832 "configure"
+#line 15847 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15851,7 +15866,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15870: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15881,7 +15896,7 @@ done
echo $ac_n "checking for logf declaration""... $ac_c" 1>&6
-echo "configure:15885: checking for logf declaration" >&5
+echo "configure:15900: checking for logf declaration" >&5
if test x${glibcpp_cv_func_logf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_logf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -15896,7 +15911,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 15900 "configure"
+#line 15915 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -15907,7 +15922,7 @@ int main() {
logf(0);
; return 0; }
EOF
-if { (eval echo configure:15911: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_logf_use=yes
else
@@ -15934,12 +15949,12 @@ fi
for ac_func in logf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15938: checking for $ac_func" >&5
+echo "configure:15953: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 15943 "configure"
+#line 15958 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -15962,7 +15977,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:15966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -15989,7 +16004,7 @@ done
else
echo $ac_n "checking for _logf declaration""... $ac_c" 1>&6
-echo "configure:15993: checking for _logf declaration" >&5
+echo "configure:16008: checking for _logf declaration" >&5
if test x${glibcpp_cv_func__logf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__logf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16004,7 +16019,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16008 "configure"
+#line 16023 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16015,7 +16030,7 @@ int main() {
_logf(0);
; return 0; }
EOF
-if { (eval echo configure:16019: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16034: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__logf_use=yes
else
@@ -16042,12 +16057,12 @@ fi
for ac_func in _logf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16046: checking for $ac_func" >&5
+echo "configure:16061: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16051 "configure"
+#line 16066 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16070,7 +16085,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16100,7 +16115,7 @@ done
echo $ac_n "checking for log10f declaration""... $ac_c" 1>&6
-echo "configure:16104: checking for log10f declaration" >&5
+echo "configure:16119: checking for log10f declaration" >&5
if test x${glibcpp_cv_func_log10f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_log10f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16115,7 +16130,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16119 "configure"
+#line 16134 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16126,7 +16141,7 @@ int main() {
log10f(0);
; return 0; }
EOF
-if { (eval echo configure:16130: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_log10f_use=yes
else
@@ -16153,12 +16168,12 @@ fi
for ac_func in log10f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16157: checking for $ac_func" >&5
+echo "configure:16172: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16162 "configure"
+#line 16177 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16181,7 +16196,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16185: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16208,7 +16223,7 @@ done
else
echo $ac_n "checking for _log10f declaration""... $ac_c" 1>&6
-echo "configure:16212: checking for _log10f declaration" >&5
+echo "configure:16227: checking for _log10f declaration" >&5
if test x${glibcpp_cv_func__log10f_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__log10f_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16223,7 +16238,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16227 "configure"
+#line 16242 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16234,7 +16249,7 @@ int main() {
_log10f(0);
; return 0; }
EOF
-if { (eval echo configure:16238: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__log10f_use=yes
else
@@ -16261,12 +16276,12 @@ fi
for ac_func in _log10f
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16265: checking for $ac_func" >&5
+echo "configure:16280: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16270 "configure"
+#line 16285 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16289,7 +16304,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16319,7 +16334,7 @@ done
echo $ac_n "checking for modff declaration""... $ac_c" 1>&6
-echo "configure:16323: checking for modff declaration" >&5
+echo "configure:16338: checking for modff declaration" >&5
if test x${glibcpp_cv_func_modff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_modff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16334,14 +16349,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16338 "configure"
+#line 16353 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
modff(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_modff_use=yes
else
@@ -16368,12 +16383,12 @@ fi
for ac_func in modff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16372: checking for $ac_func" >&5
+echo "configure:16387: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16377 "configure"
+#line 16392 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16396,7 +16411,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16400: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16423,7 +16438,7 @@ done
else
echo $ac_n "checking for _modff declaration""... $ac_c" 1>&6
-echo "configure:16427: checking for _modff declaration" >&5
+echo "configure:16442: checking for _modff declaration" >&5
if test x${glibcpp_cv_func__modff_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__modff_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16438,14 +16453,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16442 "configure"
+#line 16457 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_modff(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16449: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16464: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__modff_use=yes
else
@@ -16472,12 +16487,12 @@ fi
for ac_func in _modff
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16476: checking for $ac_func" >&5
+echo "configure:16491: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16481 "configure"
+#line 16496 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16500,7 +16515,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16530,7 +16545,7 @@ done
echo $ac_n "checking for powf declaration""... $ac_c" 1>&6
-echo "configure:16534: checking for powf declaration" >&5
+echo "configure:16549: checking for powf declaration" >&5
if test x${glibcpp_cv_func_powf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_powf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16545,14 +16560,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16549 "configure"
+#line 16564 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
powf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16556: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_powf_use=yes
else
@@ -16579,12 +16594,12 @@ fi
for ac_func in powf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16583: checking for $ac_func" >&5
+echo "configure:16598: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16588 "configure"
+#line 16603 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16607,7 +16622,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16634,7 +16649,7 @@ done
else
echo $ac_n "checking for _powf declaration""... $ac_c" 1>&6
-echo "configure:16638: checking for _powf declaration" >&5
+echo "configure:16653: checking for _powf declaration" >&5
if test x${glibcpp_cv_func__powf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__powf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16649,14 +16664,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16653 "configure"
+#line 16668 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_powf(0, 0);
; return 0; }
EOF
-if { (eval echo configure:16660: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16675: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__powf_use=yes
else
@@ -16683,12 +16698,12 @@ fi
for ac_func in _powf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16687: checking for $ac_func" >&5
+echo "configure:16702: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16692 "configure"
+#line 16707 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16711,7 +16726,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16730: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16741,7 +16756,7 @@ done
echo $ac_n "checking for sqrtf declaration""... $ac_c" 1>&6
-echo "configure:16745: checking for sqrtf declaration" >&5
+echo "configure:16760: checking for sqrtf declaration" >&5
if test x${glibcpp_cv_func_sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16756,7 +16771,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16760 "configure"
+#line 16775 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16767,7 +16782,7 @@ int main() {
sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:16771: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16786: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sqrtf_use=yes
else
@@ -16794,12 +16809,12 @@ fi
for ac_func in sqrtf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16798: checking for $ac_func" >&5
+echo "configure:16813: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16803 "configure"
+#line 16818 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16822,7 +16837,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16826: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16849,7 +16864,7 @@ done
else
echo $ac_n "checking for _sqrtf declaration""... $ac_c" 1>&6
-echo "configure:16853: checking for _sqrtf declaration" >&5
+echo "configure:16868: checking for _sqrtf declaration" >&5
if test x${glibcpp_cv_func__sqrtf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sqrtf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16864,7 +16879,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16868 "configure"
+#line 16883 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -16875,7 +16890,7 @@ int main() {
_sqrtf(0);
; return 0; }
EOF
-if { (eval echo configure:16879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:16894: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sqrtf_use=yes
else
@@ -16902,12 +16917,12 @@ fi
for ac_func in _sqrtf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16906: checking for $ac_func" >&5
+echo "configure:16921: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 16911 "configure"
+#line 16926 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -16930,7 +16945,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:16934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -16960,7 +16975,7 @@ done
echo $ac_n "checking for sincosf declaration""... $ac_c" 1>&6
-echo "configure:16964: checking for sincosf declaration" >&5
+echo "configure:16979: checking for sincosf declaration" >&5
if test x${glibcpp_cv_func_sincosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -16975,14 +16990,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 16979 "configure"
+#line 16994 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincosf(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:16986: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincosf_use=yes
else
@@ -17009,12 +17024,12 @@ fi
for ac_func in sincosf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17013: checking for $ac_func" >&5
+echo "configure:17028: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17018 "configure"
+#line 17033 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17037,7 +17052,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17064,7 +17079,7 @@ done
else
echo $ac_n "checking for _sincosf declaration""... $ac_c" 1>&6
-echo "configure:17068: checking for _sincosf declaration" >&5
+echo "configure:17083: checking for _sincosf declaration" >&5
if test x${glibcpp_cv_func__sincosf_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincosf_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17079,14 +17094,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17083 "configure"
+#line 17098 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincosf(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:17090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17105: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincosf_use=yes
else
@@ -17113,12 +17128,12 @@ fi
for ac_func in _sincosf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17117: checking for $ac_func" >&5
+echo "configure:17132: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17122 "configure"
+#line 17137 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17141,7 +17156,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17160: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17171,7 +17186,7 @@ done
echo $ac_n "checking for finitef declaration""... $ac_c" 1>&6
-echo "configure:17175: checking for finitef declaration" >&5
+echo "configure:17190: checking for finitef declaration" >&5
if test x${glibcpp_cv_func_finitef_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finitef_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17186,7 +17201,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17190 "configure"
+#line 17205 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17197,7 +17212,7 @@ int main() {
finitef(0);
; return 0; }
EOF
-if { (eval echo configure:17201: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17216: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finitef_use=yes
else
@@ -17224,12 +17239,12 @@ fi
for ac_func in finitef
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17228: checking for $ac_func" >&5
+echo "configure:17243: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17233 "configure"
+#line 17248 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17252,7 +17267,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17271: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17279,7 +17294,7 @@ done
else
echo $ac_n "checking for _finitef declaration""... $ac_c" 1>&6
-echo "configure:17283: checking for _finitef declaration" >&5
+echo "configure:17298: checking for _finitef declaration" >&5
if test x${glibcpp_cv_func__finitef_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finitef_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17294,7 +17309,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17298 "configure"
+#line 17313 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17305,7 +17320,7 @@ int main() {
_finitef(0);
; return 0; }
EOF
-if { (eval echo configure:17309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17324: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finitef_use=yes
else
@@ -17332,12 +17347,12 @@ fi
for ac_func in _finitef
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17336: checking for $ac_func" >&5
+echo "configure:17351: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17341 "configure"
+#line 17356 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17360,7 +17375,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17364: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17390,7 +17405,7 @@ done
echo $ac_n "checking for long double trig functions""... $ac_c" 1>&6
-echo "configure:17394: checking for long double trig functions" >&5
+echo "configure:17409: checking for long double trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_long_double_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -17404,7 +17419,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17408 "configure"
+#line 17423 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -17413,7 +17428,7 @@ int main() {
coshl sinhl tanhl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:17417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_long_double_trig_use=yes
else
@@ -17439,12 +17454,12 @@ fi
coshl sinhl tanhl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17443: checking for $ac_func" >&5
+echo "configure:17458: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17448 "configure"
+#line 17463 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17467,7 +17482,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17495,7 +17510,7 @@ done
echo $ac_n "checking for long double round functions""... $ac_c" 1>&6
-echo "configure:17499: checking for long double round functions" >&5
+echo "configure:17514: checking for long double round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func_long_double_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -17509,14 +17524,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17513 "configure"
+#line 17528 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in ceill floorl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:17520: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_long_double_round_use=yes
else
@@ -17540,12 +17555,12 @@ fi
for ac_func in ceill floorl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17544: checking for $ac_func" >&5
+echo "configure:17559: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17549 "configure"
+#line 17564 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17568,7 +17583,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17587: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17597,7 +17612,7 @@ done
echo $ac_n "checking for isnanl declaration""... $ac_c" 1>&6
-echo "configure:17601: checking for isnanl declaration" >&5
+echo "configure:17616: checking for isnanl declaration" >&5
if test x${glibcpp_cv_func_isnanl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isnanl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17612,7 +17627,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17616 "configure"
+#line 17631 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17623,7 +17638,7 @@ int main() {
isnanl(0);
; return 0; }
EOF
-if { (eval echo configure:17627: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17642: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isnanl_use=yes
else
@@ -17650,12 +17665,12 @@ fi
for ac_func in isnanl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17654: checking for $ac_func" >&5
+echo "configure:17669: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17659 "configure"
+#line 17674 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17678,7 +17693,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17705,7 +17720,7 @@ done
else
echo $ac_n "checking for _isnanl declaration""... $ac_c" 1>&6
-echo "configure:17709: checking for _isnanl declaration" >&5
+echo "configure:17724: checking for _isnanl declaration" >&5
if test x${glibcpp_cv_func__isnanl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isnanl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17720,7 +17735,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17724 "configure"
+#line 17739 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17731,7 +17746,7 @@ int main() {
_isnanl(0);
; return 0; }
EOF
-if { (eval echo configure:17735: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isnanl_use=yes
else
@@ -17758,12 +17773,12 @@ fi
for ac_func in _isnanl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17762: checking for $ac_func" >&5
+echo "configure:17777: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17767 "configure"
+#line 17782 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17786,7 +17801,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17790: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17816,7 +17831,7 @@ done
echo $ac_n "checking for isinfl declaration""... $ac_c" 1>&6
-echo "configure:17820: checking for isinfl declaration" >&5
+echo "configure:17835: checking for isinfl declaration" >&5
if test x${glibcpp_cv_func_isinfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_isinfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17831,7 +17846,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17835 "configure"
+#line 17850 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17842,7 +17857,7 @@ int main() {
isinfl(0);
; return 0; }
EOF
-if { (eval echo configure:17846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_isinfl_use=yes
else
@@ -17869,12 +17884,12 @@ fi
for ac_func in isinfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17873: checking for $ac_func" >&5
+echo "configure:17888: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17878 "configure"
+#line 17893 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -17897,7 +17912,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:17901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17916: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -17924,7 +17939,7 @@ done
else
echo $ac_n "checking for _isinfl declaration""... $ac_c" 1>&6
-echo "configure:17928: checking for _isinfl declaration" >&5
+echo "configure:17943: checking for _isinfl declaration" >&5
if test x${glibcpp_cv_func__isinfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__isinfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -17939,7 +17954,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 17943 "configure"
+#line 17958 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -17950,7 +17965,7 @@ int main() {
_isinfl(0);
; return 0; }
EOF
-if { (eval echo configure:17954: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__isinfl_use=yes
else
@@ -17977,12 +17992,12 @@ fi
for ac_func in _isinfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:17981: checking for $ac_func" >&5
+echo "configure:17996: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 17986 "configure"
+#line 18001 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18005,7 +18020,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18035,7 +18050,7 @@ done
echo $ac_n "checking for copysignl declaration""... $ac_c" 1>&6
-echo "configure:18039: checking for copysignl declaration" >&5
+echo "configure:18054: checking for copysignl declaration" >&5
if test x${glibcpp_cv_func_copysignl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_copysignl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18050,14 +18065,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18054 "configure"
+#line 18069 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
copysignl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18076: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_copysignl_use=yes
else
@@ -18084,12 +18099,12 @@ fi
for ac_func in copysignl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18088: checking for $ac_func" >&5
+echo "configure:18103: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18093 "configure"
+#line 18108 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18112,7 +18127,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18139,7 +18154,7 @@ done
else
echo $ac_n "checking for _copysignl declaration""... $ac_c" 1>&6
-echo "configure:18143: checking for _copysignl declaration" >&5
+echo "configure:18158: checking for _copysignl declaration" >&5
if test x${glibcpp_cv_func__copysignl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__copysignl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18154,14 +18169,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18158 "configure"
+#line 18173 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_copysignl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18165: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18180: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__copysignl_use=yes
else
@@ -18188,12 +18203,12 @@ fi
for ac_func in _copysignl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18192: checking for $ac_func" >&5
+echo "configure:18207: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18197 "configure"
+#line 18212 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18216,7 +18231,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18235: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18246,7 +18261,7 @@ done
echo $ac_n "checking for atan2l declaration""... $ac_c" 1>&6
-echo "configure:18250: checking for atan2l declaration" >&5
+echo "configure:18265: checking for atan2l declaration" >&5
if test x${glibcpp_cv_func_atan2l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_atan2l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18261,14 +18276,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18265 "configure"
+#line 18280 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
atan2l(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_atan2l_use=yes
else
@@ -18295,12 +18310,12 @@ fi
for ac_func in atan2l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18299: checking for $ac_func" >&5
+echo "configure:18314: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18304 "configure"
+#line 18319 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18323,7 +18338,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18350,7 +18365,7 @@ done
else
echo $ac_n "checking for _atan2l declaration""... $ac_c" 1>&6
-echo "configure:18354: checking for _atan2l declaration" >&5
+echo "configure:18369: checking for _atan2l declaration" >&5
if test x${glibcpp_cv_func__atan2l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__atan2l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18365,14 +18380,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18369 "configure"
+#line 18384 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_atan2l(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18376: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18391: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__atan2l_use=yes
else
@@ -18399,12 +18414,12 @@ fi
for ac_func in _atan2l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18403: checking for $ac_func" >&5
+echo "configure:18418: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18408 "configure"
+#line 18423 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18427,7 +18442,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18457,7 +18472,7 @@ done
echo $ac_n "checking for expl declaration""... $ac_c" 1>&6
-echo "configure:18461: checking for expl declaration" >&5
+echo "configure:18476: checking for expl declaration" >&5
if test x${glibcpp_cv_func_expl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_expl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18472,7 +18487,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18476 "configure"
+#line 18491 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18483,7 +18498,7 @@ int main() {
expl(0);
; return 0; }
EOF
-if { (eval echo configure:18487: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18502: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_expl_use=yes
else
@@ -18510,12 +18525,12 @@ fi
for ac_func in expl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18514: checking for $ac_func" >&5
+echo "configure:18529: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18519 "configure"
+#line 18534 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18538,7 +18553,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18557: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18565,7 +18580,7 @@ done
else
echo $ac_n "checking for _expl declaration""... $ac_c" 1>&6
-echo "configure:18569: checking for _expl declaration" >&5
+echo "configure:18584: checking for _expl declaration" >&5
if test x${glibcpp_cv_func__expl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__expl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18580,7 +18595,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18584 "configure"
+#line 18599 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18591,7 +18606,7 @@ int main() {
_expl(0);
; return 0; }
EOF
-if { (eval echo configure:18595: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__expl_use=yes
else
@@ -18618,12 +18633,12 @@ fi
for ac_func in _expl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18622: checking for $ac_func" >&5
+echo "configure:18637: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18627 "configure"
+#line 18642 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18646,7 +18661,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18676,7 +18691,7 @@ done
echo $ac_n "checking for fabsl declaration""... $ac_c" 1>&6
-echo "configure:18680: checking for fabsl declaration" >&5
+echo "configure:18695: checking for fabsl declaration" >&5
if test x${glibcpp_cv_func_fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18691,7 +18706,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18695 "configure"
+#line 18710 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18702,7 +18717,7 @@ int main() {
fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:18706: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18721: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fabsl_use=yes
else
@@ -18729,12 +18744,12 @@ fi
for ac_func in fabsl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18733: checking for $ac_func" >&5
+echo "configure:18748: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18738 "configure"
+#line 18753 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18757,7 +18772,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18784,7 +18799,7 @@ done
else
echo $ac_n "checking for _fabsl declaration""... $ac_c" 1>&6
-echo "configure:18788: checking for _fabsl declaration" >&5
+echo "configure:18803: checking for _fabsl declaration" >&5
if test x${glibcpp_cv_func__fabsl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fabsl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18799,7 +18814,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18803 "configure"
+#line 18818 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -18810,7 +18825,7 @@ int main() {
_fabsl(0);
; return 0; }
EOF
-if { (eval echo configure:18814: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18829: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fabsl_use=yes
else
@@ -18837,12 +18852,12 @@ fi
for ac_func in _fabsl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18841: checking for $ac_func" >&5
+echo "configure:18856: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18846 "configure"
+#line 18861 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18865,7 +18880,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18895,7 +18910,7 @@ done
echo $ac_n "checking for fmodl declaration""... $ac_c" 1>&6
-echo "configure:18899: checking for fmodl declaration" >&5
+echo "configure:18914: checking for fmodl declaration" >&5
if test x${glibcpp_cv_func_fmodl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_fmodl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -18910,14 +18925,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 18914 "configure"
+#line 18929 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
fmodl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:18921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:18936: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_fmodl_use=yes
else
@@ -18944,12 +18959,12 @@ fi
for ac_func in fmodl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:18948: checking for $ac_func" >&5
+echo "configure:18963: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 18953 "configure"
+#line 18968 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -18972,7 +18987,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:18976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:18991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -18999,7 +19014,7 @@ done
else
echo $ac_n "checking for _fmodl declaration""... $ac_c" 1>&6
-echo "configure:19003: checking for _fmodl declaration" >&5
+echo "configure:19018: checking for _fmodl declaration" >&5
if test x${glibcpp_cv_func__fmodl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__fmodl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19014,14 +19029,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19018 "configure"
+#line 19033 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_fmodl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19025: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19040: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__fmodl_use=yes
else
@@ -19048,12 +19063,12 @@ fi
for ac_func in _fmodl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19052: checking for $ac_func" >&5
+echo "configure:19067: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19057 "configure"
+#line 19072 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19076,7 +19091,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19106,7 +19121,7 @@ done
echo $ac_n "checking for frexpl declaration""... $ac_c" 1>&6
-echo "configure:19110: checking for frexpl declaration" >&5
+echo "configure:19125: checking for frexpl declaration" >&5
if test x${glibcpp_cv_func_frexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_frexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19121,14 +19136,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19125 "configure"
+#line 19140 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
frexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19147: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_frexpl_use=yes
else
@@ -19155,12 +19170,12 @@ fi
for ac_func in frexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19159: checking for $ac_func" >&5
+echo "configure:19174: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19164 "configure"
+#line 19179 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19183,7 +19198,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19210,7 +19225,7 @@ done
else
echo $ac_n "checking for _frexpl declaration""... $ac_c" 1>&6
-echo "configure:19214: checking for _frexpl declaration" >&5
+echo "configure:19229: checking for _frexpl declaration" >&5
if test x${glibcpp_cv_func__frexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__frexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19225,14 +19240,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19229 "configure"
+#line 19244 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_frexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19236: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19251: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__frexpl_use=yes
else
@@ -19259,12 +19274,12 @@ fi
for ac_func in _frexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19263: checking for $ac_func" >&5
+echo "configure:19278: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19268 "configure"
+#line 19283 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19287,7 +19302,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19317,7 +19332,7 @@ done
echo $ac_n "checking for hypotl declaration""... $ac_c" 1>&6
-echo "configure:19321: checking for hypotl declaration" >&5
+echo "configure:19336: checking for hypotl declaration" >&5
if test x${glibcpp_cv_func_hypotl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_hypotl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19332,14 +19347,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19336 "configure"
+#line 19351 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
hypotl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_hypotl_use=yes
else
@@ -19366,12 +19381,12 @@ fi
for ac_func in hypotl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19370: checking for $ac_func" >&5
+echo "configure:19385: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19375 "configure"
+#line 19390 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19394,7 +19409,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19421,7 +19436,7 @@ done
else
echo $ac_n "checking for _hypotl declaration""... $ac_c" 1>&6
-echo "configure:19425: checking for _hypotl declaration" >&5
+echo "configure:19440: checking for _hypotl declaration" >&5
if test x${glibcpp_cv_func__hypotl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__hypotl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19436,14 +19451,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19440 "configure"
+#line 19455 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_hypotl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19447: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__hypotl_use=yes
else
@@ -19470,12 +19485,12 @@ fi
for ac_func in _hypotl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19474: checking for $ac_func" >&5
+echo "configure:19489: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19479 "configure"
+#line 19494 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19498,7 +19513,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19528,7 +19543,7 @@ done
echo $ac_n "checking for ldexpl declaration""... $ac_c" 1>&6
-echo "configure:19532: checking for ldexpl declaration" >&5
+echo "configure:19547: checking for ldexpl declaration" >&5
if test x${glibcpp_cv_func_ldexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_ldexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19543,14 +19558,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19547 "configure"
+#line 19562 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
ldexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19554: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19569: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_ldexpl_use=yes
else
@@ -19577,12 +19592,12 @@ fi
for ac_func in ldexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19581: checking for $ac_func" >&5
+echo "configure:19596: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19586 "configure"
+#line 19601 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19605,7 +19620,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19632,7 +19647,7 @@ done
else
echo $ac_n "checking for _ldexpl declaration""... $ac_c" 1>&6
-echo "configure:19636: checking for _ldexpl declaration" >&5
+echo "configure:19651: checking for _ldexpl declaration" >&5
if test x${glibcpp_cv_func__ldexpl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__ldexpl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19647,14 +19662,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19651 "configure"
+#line 19666 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_ldexpl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:19658: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19673: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__ldexpl_use=yes
else
@@ -19681,12 +19696,12 @@ fi
for ac_func in _ldexpl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19685: checking for $ac_func" >&5
+echo "configure:19700: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19690 "configure"
+#line 19705 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19709,7 +19724,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19739,7 +19754,7 @@ done
echo $ac_n "checking for logl declaration""... $ac_c" 1>&6
-echo "configure:19743: checking for logl declaration" >&5
+echo "configure:19758: checking for logl declaration" >&5
if test x${glibcpp_cv_func_logl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_logl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19754,7 +19769,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19758 "configure"
+#line 19773 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19765,7 +19780,7 @@ int main() {
logl(0);
; return 0; }
EOF
-if { (eval echo configure:19769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19784: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_logl_use=yes
else
@@ -19792,12 +19807,12 @@ fi
for ac_func in logl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19796: checking for $ac_func" >&5
+echo "configure:19811: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19801 "configure"
+#line 19816 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19820,7 +19835,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19839: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19847,7 +19862,7 @@ done
else
echo $ac_n "checking for _logl declaration""... $ac_c" 1>&6
-echo "configure:19851: checking for _logl declaration" >&5
+echo "configure:19866: checking for _logl declaration" >&5
if test x${glibcpp_cv_func__logl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__logl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19862,7 +19877,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19866 "configure"
+#line 19881 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19873,7 +19888,7 @@ int main() {
_logl(0);
; return 0; }
EOF
-if { (eval echo configure:19877: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:19892: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__logl_use=yes
else
@@ -19900,12 +19915,12 @@ fi
for ac_func in _logl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:19904: checking for $ac_func" >&5
+echo "configure:19919: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 19909 "configure"
+#line 19924 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -19928,7 +19943,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:19932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:19947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -19958,7 +19973,7 @@ done
echo $ac_n "checking for log10l declaration""... $ac_c" 1>&6
-echo "configure:19962: checking for log10l declaration" >&5
+echo "configure:19977: checking for log10l declaration" >&5
if test x${glibcpp_cv_func_log10l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_log10l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -19973,7 +19988,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 19977 "configure"
+#line 19992 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -19984,7 +19999,7 @@ int main() {
log10l(0);
; return 0; }
EOF
-if { (eval echo configure:19988: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_log10l_use=yes
else
@@ -20011,12 +20026,12 @@ fi
for ac_func in log10l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20015: checking for $ac_func" >&5
+echo "configure:20030: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20020 "configure"
+#line 20035 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20039,7 +20054,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20043: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20066,7 +20081,7 @@ done
else
echo $ac_n "checking for _log10l declaration""... $ac_c" 1>&6
-echo "configure:20070: checking for _log10l declaration" >&5
+echo "configure:20085: checking for _log10l declaration" >&5
if test x${glibcpp_cv_func__log10l_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__log10l_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20081,7 +20096,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20085 "configure"
+#line 20100 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -20092,7 +20107,7 @@ int main() {
_log10l(0);
; return 0; }
EOF
-if { (eval echo configure:20096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20111: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__log10l_use=yes
else
@@ -20119,12 +20134,12 @@ fi
for ac_func in _log10l
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20123: checking for $ac_func" >&5
+echo "configure:20138: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20128 "configure"
+#line 20143 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20147,7 +20162,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20177,7 +20192,7 @@ done
echo $ac_n "checking for modfl declaration""... $ac_c" 1>&6
-echo "configure:20181: checking for modfl declaration" >&5
+echo "configure:20196: checking for modfl declaration" >&5
if test x${glibcpp_cv_func_modfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_modfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20192,14 +20207,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20196 "configure"
+#line 20211 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
modfl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:20203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20218: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_modfl_use=yes
else
@@ -20226,12 +20241,12 @@ fi
for ac_func in modfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20230: checking for $ac_func" >&5
+echo "configure:20245: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20235 "configure"
+#line 20250 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20254,7 +20269,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20258: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20281,7 +20296,7 @@ done
else
echo $ac_n "checking for _modfl declaration""... $ac_c" 1>&6
-echo "configure:20285: checking for _modfl declaration" >&5
+echo "configure:20300: checking for _modfl declaration" >&5
if test x${glibcpp_cv_func__modfl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__modfl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20296,14 +20311,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20300 "configure"
+#line 20315 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_modfl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:20307: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__modfl_use=yes
else
@@ -20330,12 +20345,12 @@ fi
for ac_func in _modfl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20334: checking for $ac_func" >&5
+echo "configure:20349: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20339 "configure"
+#line 20354 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20358,7 +20373,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20388,7 +20403,7 @@ done
echo $ac_n "checking for powl declaration""... $ac_c" 1>&6
-echo "configure:20392: checking for powl declaration" >&5
+echo "configure:20407: checking for powl declaration" >&5
if test x${glibcpp_cv_func_powl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_powl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20403,14 +20418,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20407 "configure"
+#line 20422 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
powl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:20414: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20429: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_powl_use=yes
else
@@ -20437,12 +20452,12 @@ fi
for ac_func in powl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20441: checking for $ac_func" >&5
+echo "configure:20456: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20446 "configure"
+#line 20461 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20465,7 +20480,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20492,7 +20507,7 @@ done
else
echo $ac_n "checking for _powl declaration""... $ac_c" 1>&6
-echo "configure:20496: checking for _powl declaration" >&5
+echo "configure:20511: checking for _powl declaration" >&5
if test x${glibcpp_cv_func__powl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__powl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20507,14 +20522,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20511 "configure"
+#line 20526 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_powl(0, 0);
; return 0; }
EOF
-if { (eval echo configure:20518: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20533: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__powl_use=yes
else
@@ -20541,12 +20556,12 @@ fi
for ac_func in _powl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20545: checking for $ac_func" >&5
+echo "configure:20560: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20550 "configure"
+#line 20565 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20569,7 +20584,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20599,7 +20614,7 @@ done
echo $ac_n "checking for sqrtl declaration""... $ac_c" 1>&6
-echo "configure:20603: checking for sqrtl declaration" >&5
+echo "configure:20618: checking for sqrtl declaration" >&5
if test x${glibcpp_cv_func_sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20614,7 +20629,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20618 "configure"
+#line 20633 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -20625,7 +20640,7 @@ int main() {
sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:20629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sqrtl_use=yes
else
@@ -20652,12 +20667,12 @@ fi
for ac_func in sqrtl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20656: checking for $ac_func" >&5
+echo "configure:20671: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20661 "configure"
+#line 20676 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20680,7 +20695,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20699: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20707,7 +20722,7 @@ done
else
echo $ac_n "checking for _sqrtl declaration""... $ac_c" 1>&6
-echo "configure:20711: checking for _sqrtl declaration" >&5
+echo "configure:20726: checking for _sqrtl declaration" >&5
if test x${glibcpp_cv_func__sqrtl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sqrtl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20722,7 +20737,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20726 "configure"
+#line 20741 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -20733,7 +20748,7 @@ int main() {
_sqrtl(0);
; return 0; }
EOF
-if { (eval echo configure:20737: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20752: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sqrtl_use=yes
else
@@ -20760,12 +20775,12 @@ fi
for ac_func in _sqrtl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20764: checking for $ac_func" >&5
+echo "configure:20779: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20769 "configure"
+#line 20784 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20788,7 +20803,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20818,7 +20833,7 @@ done
echo $ac_n "checking for sincosl declaration""... $ac_c" 1>&6
-echo "configure:20822: checking for sincosl declaration" >&5
+echo "configure:20837: checking for sincosl declaration" >&5
if test x${glibcpp_cv_func_sincosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_sincosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20833,14 +20848,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20837 "configure"
+#line 20852 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
sincosl(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:20844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_sincosl_use=yes
else
@@ -20867,12 +20882,12 @@ fi
for ac_func in sincosl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20871: checking for $ac_func" >&5
+echo "configure:20886: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20876 "configure"
+#line 20891 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20895,7 +20910,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:20899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:20914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -20922,7 +20937,7 @@ done
else
echo $ac_n "checking for _sincosl declaration""... $ac_c" 1>&6
-echo "configure:20926: checking for _sincosl declaration" >&5
+echo "configure:20941: checking for _sincosl declaration" >&5
if test x${glibcpp_cv_func__sincosl_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__sincosl_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -20937,14 +20952,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 20941 "configure"
+#line 20956 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
_sincosl(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:20948: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:20963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__sincosl_use=yes
else
@@ -20971,12 +20986,12 @@ fi
for ac_func in _sincosl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:20975: checking for $ac_func" >&5
+echo "configure:20990: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 20980 "configure"
+#line 20995 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -20999,7 +21014,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21018: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21029,7 +21044,7 @@ done
echo $ac_n "checking for finitel declaration""... $ac_c" 1>&6
-echo "configure:21033: checking for finitel declaration" >&5
+echo "configure:21048: checking for finitel declaration" >&5
if test x${glibcpp_cv_func_finitel_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_finitel_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21044,7 +21059,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21048 "configure"
+#line 21063 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -21055,7 +21070,7 @@ int main() {
finitel(0);
; return 0; }
EOF
-if { (eval echo configure:21059: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21074: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_finitel_use=yes
else
@@ -21082,12 +21097,12 @@ fi
for ac_func in finitel
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21086: checking for $ac_func" >&5
+echo "configure:21101: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21091 "configure"
+#line 21106 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21110,7 +21125,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21137,7 +21152,7 @@ done
else
echo $ac_n "checking for _finitel declaration""... $ac_c" 1>&6
-echo "configure:21141: checking for _finitel declaration" >&5
+echo "configure:21156: checking for _finitel declaration" >&5
if test x${glibcpp_cv_func__finitel_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func__finitel_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21152,7 +21167,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21156 "configure"
+#line 21171 "configure"
#include "confdefs.h"
#include <math.h>
#ifdef HAVE_IEEEFP_H
@@ -21163,7 +21178,7 @@ int main() {
_finitel(0);
; return 0; }
EOF
-if { (eval echo configure:21167: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21182: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__finitel_use=yes
else
@@ -21190,12 +21205,12 @@ fi
for ac_func in _finitel
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21194: checking for $ac_func" >&5
+echo "configure:21209: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21199 "configure"
+#line 21214 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21218,7 +21233,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21237: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21249,7 +21264,7 @@ done
echo $ac_n "checking for _float trig functions""... $ac_c" 1>&6
-echo "configure:21253: checking for _float trig functions" >&5
+echo "configure:21268: checking for _float trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__float_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -21263,7 +21278,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21267 "configure"
+#line 21282 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -21272,7 +21287,7 @@ int main() {
_coshf _sinhf _tanhf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:21276: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21291: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__float_trig_use=yes
else
@@ -21298,12 +21313,12 @@ fi
_coshf _sinhf _tanhf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21302: checking for $ac_func" >&5
+echo "configure:21317: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21307 "configure"
+#line 21322 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21326,7 +21341,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21354,7 +21369,7 @@ done
echo $ac_n "checking for _float round functions""... $ac_c" 1>&6
-echo "configure:21358: checking for _float round functions" >&5
+echo "configure:21373: checking for _float round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__float_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -21368,14 +21383,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21372 "configure"
+#line 21387 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in _ceilf _floorf; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:21379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21394: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__float_round_use=yes
else
@@ -21399,12 +21414,12 @@ fi
for ac_func in _ceilf _floorf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21403: checking for $ac_func" >&5
+echo "configure:21418: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21408 "configure"
+#line 21423 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21427,7 +21442,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21446: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21456,7 +21471,7 @@ done
echo $ac_n "checking for _long double trig functions""... $ac_c" 1>&6
-echo "configure:21460: checking for _long double trig functions" >&5
+echo "configure:21475: checking for _long double trig functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__long_double_trig_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -21470,7 +21485,7 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21474 "configure"
+#line 21489 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
@@ -21479,7 +21494,7 @@ int main() {
_coshl _sinhl _tanhl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:21483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__long_double_trig_use=yes
else
@@ -21505,12 +21520,12 @@ fi
_coshl _sinhl _tanhl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21509: checking for $ac_func" >&5
+echo "configure:21524: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21514 "configure"
+#line 21529 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21533,7 +21548,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21561,7 +21576,7 @@ done
echo $ac_n "checking for _long double round functions""... $ac_c" 1>&6
-echo "configure:21565: checking for _long double round functions" >&5
+echo "configure:21580: checking for _long double round functions" >&5
if eval "test \"`echo '$''{'glibcpp_cv_func__long_double_round_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -21575,14 +21590,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 21579 "configure"
+#line 21594 "configure"
#include "confdefs.h"
#include <math.h>
int main() {
`for x in _ceill _floorl; do echo "$x (0);"; done`
; return 0; }
EOF
-if { (eval echo configure:21586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func__long_double_round_use=yes
else
@@ -21606,12 +21621,12 @@ fi
for ac_func in _ceill _floorl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21610: checking for $ac_func" >&5
+echo "configure:21625: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21615 "configure"
+#line 21630 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21634,7 +21649,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21638: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21666,7 +21681,7 @@ done
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:21670: checking for main in -lm" >&5
+echo "configure:21685: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -21674,14 +21689,14 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 21678 "configure"
+#line 21693 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:21685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -21711,12 +21726,12 @@ fi
for ac_func in nan copysignf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21715: checking for $ac_func" >&5
+echo "configure:21730: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21720 "configure"
+#line 21735 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21739,7 +21754,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21758: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21768,12 +21783,12 @@ done
for ac_func in __signbit
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21772: checking for $ac_func" >&5
+echo "configure:21787: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21777 "configure"
+#line 21792 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21796,7 +21811,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21815: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21824,12 +21839,12 @@ done
for ac_func in __signbitf
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21828: checking for $ac_func" >&5
+echo "configure:21843: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21833 "configure"
+#line 21848 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21852,7 +21867,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21882,12 +21897,12 @@ done
for ac_func in __signbitl
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:21886: checking for $ac_func" >&5
+echo "configure:21901: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21891 "configure"
+#line 21906 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -21910,7 +21925,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:21914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:21929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -21955,16 +21970,16 @@ fi
enable_wchar_t=no
echo $ac_n "checking for mbstate_t""... $ac_c" 1>&6
-echo "configure:21959: checking for mbstate_t" >&5
+echo "configure:21974: checking for mbstate_t" >&5
cat > conftest.$ac_ext <<EOF
-#line 21961 "configure"
+#line 21976 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
mbstate_t teststate;
; return 0; }
EOF
-if { (eval echo configure:21968: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:21983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
have_mbstate_t=yes
else
@@ -21986,17 +22001,17 @@ EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:21990: checking for $ac_hdr" >&5
+echo "configure:22005: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 21995 "configure"
+#line 22010 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22000: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22015: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22027,17 +22042,17 @@ done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:22031: checking for $ac_hdr" >&5
+echo "configure:22046: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22036 "configure"
+#line 22051 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22041: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22056: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22070,16 +22085,16 @@ done
test x"$enable_c_mbchar" != xno; then
echo $ac_n "checking for WCHAR_MIN and WCHAR_MAX""... $ac_c" 1>&6
-echo "configure:22074: checking for WCHAR_MIN and WCHAR_MAX" >&5
+echo "configure:22089: checking for WCHAR_MIN and WCHAR_MAX" >&5
cat > conftest.$ac_ext <<EOF
-#line 22076 "configure"
+#line 22091 "configure"
#include "confdefs.h"
#include <wchar.h>
int main() {
int i = WCHAR_MIN; int j = WCHAR_MAX;
; return 0; }
EOF
-if { (eval echo configure:22083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_wchar_minmax=yes
else
@@ -22092,9 +22107,9 @@ rm -f conftest*
echo "$ac_t""$has_wchar_minmax" 1>&6
echo $ac_n "checking for WEOF""... $ac_c" 1>&6
-echo "configure:22096: checking for WEOF" >&5
+echo "configure:22111: checking for WEOF" >&5
cat > conftest.$ac_ext <<EOF
-#line 22098 "configure"
+#line 22113 "configure"
#include "confdefs.h"
#include <wchar.h>
@@ -22103,7 +22118,7 @@ int main() {
wint_t i = WEOF;
; return 0; }
EOF
-if { (eval echo configure:22107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
has_weof=yes
else
@@ -22119,12 +22134,12 @@ rm -f conftest*
for ac_func in wcslen wmemchr wmemcmp wmemcpy wmemmove wmemset
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22123: checking for $ac_func" >&5
+echo "configure:22138: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22128 "configure"
+#line 22143 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22147,7 +22162,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22182,12 +22197,12 @@ done
wcscspn wcsspn wcstok wcsftime wcschr wcspbrk wcsrchr wcsstr
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22186: checking for $ac_func" >&5
+echo "configure:22201: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22191 "configure"
+#line 22206 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22210,7 +22225,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22214: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22238,7 +22253,7 @@ done
echo $ac_n "checking for ISO C99 wchar_t support""... $ac_c" 1>&6
-echo "configure:22242: checking for ISO C99 wchar_t support" >&5
+echo "configure:22257: checking for ISO C99 wchar_t support" >&5
if test x"$has_weof" = xyes &&
test x"$has_wchar_minmax" = xyes &&
test x"$ac_wfuncs" = xyes; then
@@ -22250,17 +22265,17 @@ echo "configure:22242: checking for ISO C99 wchar_t support" >&5
ac_safe=`echo "iconv.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for iconv.h""... $ac_c" 1>&6
-echo "configure:22254: checking for iconv.h" >&5
+echo "configure:22269: checking for iconv.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22259 "configure"
+#line 22274 "configure"
#include "confdefs.h"
#include <iconv.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22264: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22284,17 +22299,17 @@ fi
ac_safe=`echo "langinfo.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for langinfo.h""... $ac_c" 1>&6
-echo "configure:22288: checking for langinfo.h" >&5
+echo "configure:22303: checking for langinfo.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22293 "configure"
+#line 22308 "configure"
#include "confdefs.h"
#include <langinfo.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22298: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22318,7 +22333,7 @@ fi
echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:22322: checking for iconv in -liconv" >&5
+echo "configure:22337: checking for iconv in -liconv" >&5
ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -22326,7 +22341,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-liconv $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 22330 "configure"
+#line 22345 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -22337,7 +22352,7 @@ int main() {
iconv()
; return 0; }
EOF
-if { (eval echo configure:22341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -22363,12 +22378,12 @@ fi
for ac_func in iconv_open iconv_close iconv nl_langinfo
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22367: checking for $ac_func" >&5
+echo "configure:22382: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22372 "configure"
+#line 22387 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22391,7 +22406,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22410: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22421,7 +22436,7 @@ done
LIBS="$ac_save_LIBS"
echo $ac_n "checking for XPG2 wchar_t support""... $ac_c" 1>&6
-echo "configure:22425: checking for XPG2 wchar_t support" >&5
+echo "configure:22440: checking for XPG2 wchar_t support" >&5
if test x"$ac_has_iconv_h" = xyes &&
test x"$ac_has_langinfo_h" = xyes &&
test x"$ac_XPG2funcs" = xyes; then
@@ -22441,7 +22456,7 @@ EOF
fi
fi
echo $ac_n "checking for enabled wchar_t specializations""... $ac_c" 1>&6
-echo "configure:22445: checking for enabled wchar_t specializations" >&5
+echo "configure:22460: checking for enabled wchar_t specializations" >&5
echo "$ac_t""$enable_wchar_t" 1>&6
@@ -22460,7 +22475,7 @@ fi
echo $ac_n "checking for strtold declaration""... $ac_c" 1>&6
-echo "configure:22464: checking for strtold declaration" >&5
+echo "configure:22479: checking for strtold declaration" >&5
if test x${glibcpp_cv_func_strtold_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_strtold_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -22475,14 +22490,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 22479 "configure"
+#line 22494 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
strtold(0, 0);
; return 0; }
EOF
-if { (eval echo configure:22486: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22501: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_strtold_use=yes
else
@@ -22508,12 +22523,12 @@ fi
for ac_func in strtold
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22512: checking for $ac_func" >&5
+echo "configure:22527: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22517 "configure"
+#line 22532 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22536,7 +22551,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22540: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22564,7 +22579,7 @@ done
echo $ac_n "checking for strtof declaration""... $ac_c" 1>&6
-echo "configure:22568: checking for strtof declaration" >&5
+echo "configure:22583: checking for strtof declaration" >&5
if test x${glibcpp_cv_func_strtof_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_strtof_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -22579,14 +22594,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 22583 "configure"
+#line 22598 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
strtof(0, 0);
; return 0; }
EOF
-if { (eval echo configure:22590: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22605: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_strtof_use=yes
else
@@ -22612,12 +22627,12 @@ fi
for ac_func in strtof
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22616: checking for $ac_func" >&5
+echo "configure:22631: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22621 "configure"
+#line 22636 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22640,7 +22655,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22644: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22669,12 +22684,12 @@ done
for ac_func in drand48
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22673: checking for $ac_func" >&5
+echo "configure:22688: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22678 "configure"
+#line 22693 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22697,7 +22712,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:22701: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -22724,132 +22739,159 @@ done
CXXFLAGS="$ac_save_CXXFLAGS"
-
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS='-fno-builtins -D_GNU_SOURCE'
+
+ # For showmanyc_helper().
+ for ac_hdr in sys/ioctl.h sys/filio.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:22749: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 22754 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:22759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
- echo $ac_n "checking for isatty declaration""... $ac_c" 1>&6
-echo "configure:22735: checking for isatty declaration" >&5
- if test x${glibcpp_cv_func_isatty_use+set} != xset; then
- if eval "test \"`echo '$''{'glibcpp_cv_func_isatty_use'+set}'`\" = set"; then
+ if eval "test \"`echo '$''{'glibcpp_cv_POLL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
-
- ac_ext=C
-# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cxx_cross
-
- cat > conftest.$ac_ext <<EOF
-#line 22750 "configure"
+ cat > conftest.$ac_ext <<EOF
+#line 22791 "configure"
#include "confdefs.h"
-#include <unistd.h>
+#include <poll.h>
int main() {
- isatty(0);
+struct pollfd pfd[1]; pfd[0].events = POLLIN; poll(pfd, 1, 0);
; return 0; }
EOF
-if { (eval echo configure:22757: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22798: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- glibcpp_cv_func_isatty_use=yes
+ glibcpp_cv_POLL=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- glibcpp_cv_func_isatty_use=no
+ glibcpp_cv_POLL=no
fi
rm -f conftest*
- ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-
+
fi
+ if test x$glibcpp_cv_POLL = xyes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_POLL 1
+EOF
+
fi
- echo "$ac_t""$glibcpp_cv_func_isatty_use" 1>&6
- if test x$glibcpp_cv_func_isatty_use = x"yes"; then
- for ac_func in isatty
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22783: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+
+
+ if eval "test \"`echo '$''{'glibcpp_cv_S_ISREG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 22788 "configure"
+
+ cat > conftest.$ac_ext <<EOF
+#line 22824 "configure"
#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* 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();
-
+#include <sys/stat.h>
int main() {
-
-/* 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
-$ac_func();
-#endif
-
+struct stat buffer; fstat(0, &buffer); S_ISREG(buffer.st_mode);
; return 0; }
EOF
-if { (eval echo configure:22811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+ glibcpp_cv_S_ISREG=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ glibcpp_cv_S_ISREG=no
fi
rm -f conftest*
+
fi
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+ if eval "test \"`echo '$''{'glibcpp_cv_S_IFREG'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 22849 "configure"
+#include "confdefs.h"
+#include <sys/stat.h>
+int main() {
+struct stat buffer; fstat(0, &buffer); S_IFREG & buffer.st_mode;
+; return 0; }
EOF
-
+if { (eval echo configure:22856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ glibcpp_cv_S_IFREG=yes
else
- echo "$ac_t""no" 1>&6
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ glibcpp_cv_S_IFREG=no
+fi
+rm -f conftest*
+
fi
-done
- fi
+ if test x$glibcpp_cv_S_ISREG = xyes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_S_ISREG 1
+EOF
+ elif test x$glibcpp_cv_S_IFREG = xyes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_S_IFREG 1
+EOF
+
+ fi
- CXXFLAGS="$ac_save_CXXFLAGS"
ac_safe=`echo "locale.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for locale.h""... $ac_c" 1>&6
-echo "configure:22843: checking for locale.h" >&5
+echo "configure:22885: checking for locale.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22848 "configure"
+#line 22890 "configure"
#include "confdefs.h"
#include <locale.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22853: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22867,19 +22909,19 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:22871: checking for LC_MESSAGES" >&5
+echo "configure:22913: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'ac_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22876 "configure"
+#line 22918 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:22883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:22925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_val_LC_MESSAGES=yes
else
@@ -22906,7 +22948,7 @@ fi
cat > conftest.$ac_ext <<EOF
-#line 22910 "configure"
+#line 22952 "configure"
#include "confdefs.h"
#include <setjmp.h>
@@ -22915,7 +22957,7 @@ int main() {
sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);
; return 0; }
EOF
-if { (eval echo configure:22919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:22961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cat >> confdefs.h <<\EOF
#define HAVE_SIGSETJMP 1
@@ -22928,21 +22970,21 @@ else
fi
rm -f conftest*
- for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
+ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:22936: checking for $ac_hdr" >&5
+echo "configure:22978: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22941 "configure"
+#line 22983 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:22946: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:22988: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -22971,12 +23013,12 @@ done
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:22975: checking for $ac_func" >&5
+echo "configure:23017: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 22980 "configure"
+#line 23022 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -22999,7 +23041,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:23003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -23024,7 +23066,7 @@ fi
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:23028: checking for working mmap" >&5
+echo "configure:23070: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -23032,7 +23074,7 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 23036 "configure"
+#line 23078 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
@@ -23060,24 +23102,11 @@ else
#include <fcntl.h>
#include <sys/mman.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
@@ -23185,7 +23214,7 @@ main()
}
EOF
-if { (eval echo configure:23189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:23218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -23216,17 +23245,17 @@ fi
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:23220: checking for $ac_hdr" >&5
+echo "configure:23249: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 23225 "configure"
+#line 23254 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:23230: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:23259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -23259,7 +23288,7 @@ done
# Can't do these in a loop, else the resulting syntax is wrong.
cat > conftest.$ac_ext <<EOF
-#line 23263 "configure"
+#line 23292 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -23269,7 +23298,7 @@ int main() {
int f = RLIMIT_DATA ;
; return 0; }
EOF
-if { (eval echo configure:23273: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -23286,7 +23315,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 23290 "configure"
+#line 23319 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -23296,7 +23325,7 @@ int main() {
int f = RLIMIT_RSS ;
; return 0; }
EOF
-if { (eval echo configure:23300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23329: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -23313,7 +23342,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 23317 "configure"
+#line 23346 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -23323,7 +23352,7 @@ int main() {
int f = RLIMIT_VMEM ;
; return 0; }
EOF
-if { (eval echo configure:23327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -23340,7 +23369,7 @@ EOF
cat > conftest.$ac_ext <<EOF
-#line 23344 "configure"
+#line 23373 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -23350,7 +23379,7 @@ int main() {
int f = RLIMIT_AS ;
; return 0; }
EOF
-if { (eval echo configure:23354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23383: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_mresult=1
else
@@ -23372,7 +23401,7 @@ EOF
else
cat > conftest.$ac_ext <<EOF
-#line 23376 "configure"
+#line 23405 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@@ -23382,7 +23411,7 @@ int main() {
struct rlimit r; setrlimit(0, &r);
; return 0; }
EOF
-if { (eval echo configure:23386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23415: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_setrlimit=yes
else
@@ -23398,7 +23427,7 @@ fi
fi
echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6
-echo "configure:23402: checking for testsuite memory limit support" >&5
+echo "configure:23431: checking for testsuite memory limit support" >&5
if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
ac_mem_limits=yes
cat >> confdefs.h <<\EOF
@@ -23414,7 +23443,7 @@ EOF
# Look for setenv, so that extended locale tests can be performed.
echo $ac_n "checking for setenv declaration""... $ac_c" 1>&6
-echo "configure:23418: checking for setenv declaration" >&5
+echo "configure:23447: checking for setenv declaration" >&5
if test x${glibcpp_cv_func_setenv_use+set} != xset; then
if eval "test \"`echo '$''{'glibcpp_cv_func_setenv_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -23429,14 +23458,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
-#line 23433 "configure"
+#line 23462 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
setenv(0, 0, 0);
; return 0; }
EOF
-if { (eval echo configure:23440: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:23469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcpp_cv_func_setenv_use=yes
else
@@ -23462,12 +23491,12 @@ fi
for ac_func in setenv
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:23466: checking for $ac_func" >&5
+echo "configure:23495: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 23471 "configure"
+#line 23500 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -23490,7 +23519,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:23494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -23567,18 +23596,18 @@ fi
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
if test $enable_symvers != no; then
echo $ac_n "checking for shared libgcc""... $ac_c" 1>&6
-echo "configure:23571: checking for shared libgcc" >&5
+echo "configure:23600: checking for shared libgcc" >&5
ac_save_CFLAGS="$CFLAGS"
CFLAGS=' -lgcc_s'
cat > conftest.$ac_ext <<EOF
-#line 23575 "configure"
+#line 23604 "configure"
#include "confdefs.h"
int main() {
return 0
; return 0; }
EOF
-if { (eval echo configure:23582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcpp_shared_libgcc=yes
else
@@ -23613,14 +23642,14 @@ if test $enable_symvers = yes ; then
echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
cat > conftest.$ac_ext <<EOF
-#line 23617 "configure"
+#line 23646 "configure"
#include "confdefs.h"
int foo;
int main() {
; return 0; }
EOF
-if { (eval echo configure:23624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:23653: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
enable_symvers=gnu
else
@@ -23666,7 +23695,7 @@ else
GLIBCPP_BUILD_VERSIONED_SHLIB_FALSE=
fi
echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6
-echo "configure:23670: checking versioning on shared library symbols" >&5
+echo "configure:23699: checking versioning on shared library symbols" >&5
echo "$ac_t""$enable_symvers" 1>&6
@@ -23753,7 +23782,7 @@ glibcpp_prefixdir=${prefix}
# Process the option --with-gxx-include-dir=<path to include-files directory>
echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6
-echo "configure:23757: checking for --with-gxx-include-dir" >&5
+echo "configure:23786: checking for --with-gxx-include-dir" >&5
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
if test "${with_gxx_include_dir+set}" = set; then
withval="$with_gxx_include_dir"
@@ -23777,7 +23806,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6
# Process the option "--enable-version-specific-runtime-libs"
echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6
-echo "configure:23781: checking for --enable-version-specific-runtime-libs" >&5
+echo "configure:23810: checking for --enable-version-specific-runtime-libs" >&5
# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
if test "${enable_version_specific_runtime_libs+set}" = set; then
enableval="$enable_version_specific_runtime_libs"
@@ -23820,11 +23849,15 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)'
glibcpp_toolexeclibdir='$(libdir)'
fi
- glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/`$CC -print-multi-os-directory`
+ multi_os_directory=`$CC -print-multi-os-directory`
+ case $multi_os_directory in
+ .) ;; # Avoid trailing /.
+ *) glibcpp_toolexeclibdir=$glibcpp_toolexeclibdir/$multi_os_directory ;;
+ esac
fi
echo $ac_n "checking for install location""... $ac_c" 1>&6
-echo "configure:23828: checking for install location" >&5
+echo "configure:23861: checking for install location" >&5
echo "$ac_t""$gxx_include_dir" 1>&6
@@ -24376,9 +24409,22 @@ test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
if test -n "$CONFIG_FILES"; then
if test -n "${with_build_subdir}" || test -n "${with_target_subdir}"; then
LD="${ORIGINAL_LD_FOR_MULTILIBS}"
- ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
- grep '^MULTISUBDIR =' Makefile >> src/Makefile
- grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+ # Ony modify Makefiles that are just being created.
+ case " $CONFIG_FILES" in
+ *" Makefile"*)
+ ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
+ ;;
+ esac
+ case $CONFIG_FILES in
+ *src/Makefile*)
+ grep '^MULTISUBDIR =' Makefile >> src/Makefile
+ ;;
+ esac
+ case $CONFIG_FILES in
+ *libsupc++/Makefile*)
+ grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+ ;;
+ esac
fi
fi
chmod +x mkcheck
diff --git a/libstdc++-v3/configure.in b/libstdc++-v3/configure.in
index e11b4291a98..b9da74a2c40 100644
--- a/libstdc++-v3/configure.in
+++ b/libstdc++-v3/configure.in
@@ -411,7 +411,12 @@ else
GLIBCPP_CHECK_COMPLEX_MATH_SUPPORT
GLIBCPP_CHECK_WCHAR_T_SUPPORT
GLIBCPP_CHECK_STDLIB_SUPPORT
- GLIBCPP_CHECK_UNISTD_SUPPORT
+
+ # For showmanyc_helper().
+ AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
+ GLIBCPP_CHECK_POLL
+ GLIBCPP_CHECK_S_ISREG_OR_S_IFREG
+
AC_LC_MESSAGES
AC_TRY_COMPILE([
@@ -478,9 +483,22 @@ po/Makefile testsuite/Makefile mkcheck testsuite_flags,
if test -n "$CONFIG_FILES"; then
if test -n "${with_build_subdir}" || test -n "${with_target_subdir}"; then
LD="${ORIGINAL_LD_FOR_MULTILIBS}"
- ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
- grep '^MULTISUBDIR =' Makefile >> src/Makefile
- grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+ # Ony modify Makefiles that are just being created.
+ case " $CONFIG_FILES" in
+ *" Makefile"*)
+ ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
+ ;;
+ esac
+ case $CONFIG_FILES in
+ *src/Makefile*)
+ grep '^MULTISUBDIR =' Makefile >> src/Makefile
+ ;;
+ esac
+ case $CONFIG_FILES in
+ *libsupc++/Makefile*)
+ grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+ ;;
+ esac
fi
fi
chmod +x mkcheck
@@ -505,9 +523,22 @@ dnl libmath/Makefile libio/Makefile libsupc++/Makefile \
dnl po/Makefile testsuite/Makefile mkcheck testsuite_flags)
dnl AC_CONFIG_COMMANDS([default],
dnl [if test -n "$CONFIG_FILES"; then
-dnl ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
-dnl grep '^MULTISUBDIR =' Makefile >> src/Makefile
-dnl grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+dnl # Ony modify Makefiles that are just being created.
+dnl case " $CONFIG_FILES" in
+dnl *" Makefile"*)
+dnl ac_file=Makefile . ${glibcpp_basedir}/../config-ml.in
+dnl ;;
+dnl esac
+dnl case $CONFIG_FILES in
+dnl *src/Makefile*)
+dnl grep '^MULTISUBDIR =' Makefile >> src/Makefile
+dnl ;;
+dnl esac
+dnl case $CONFIG_FILES in
+dnl *libsupc++/Makefile*)
+dnl grep '^MULTISUBDIR =' Makefile >> libsupc++/Makefile
+dnl ;;
+dnl esac
dnl fi
dnl chmod +x mkcheck
dnl chmod +x testsuite_flags
diff --git a/libstdc++-v3/docs/html/19_diagnostics/howto.html b/libstdc++-v3/docs/html/19_diagnostics/howto.html
index dbfcc9cb054..b658be83c7a 100644
--- a/libstdc++-v3/docs/html/19_diagnostics/howto.html
+++ b/libstdc++-v3/docs/html/19_diagnostics/howto.html
@@ -172,7 +172,8 @@
<p><strong>UPDATE:</strong> Starting with GCC 3.4, this is the default
termination handler; nothing need be done to use it. To go back to
the previous &quot;silent death&quot; method, simply include
- <code>&lt;exception&gt;<code> and <code>&lt;cstdlib&gt;<code>, and call
+ <code>&lt;exception&gt;</code> and <code>&lt;cstdlib&gt;</code>,
+ and call
</p>
<pre>
std::set_terminate (std::abort);</pre>
diff --git a/libstdc++-v3/docs/html/configopts.html b/libstdc++-v3/docs/html/configopts.html
index aec70a60271..ff46ec60d45 100644
--- a/libstdc++-v3/docs/html/configopts.html
+++ b/libstdc++-v3/docs/html/configopts.html
@@ -17,13 +17,15 @@
<h1 class="centered"><a name="top">Interesting <code>configure</code>
options</a></h1>
-<p>The latest version of this document is always available at
+<p class="fineprint"><em>
+ The latest version of this document is always available at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html">
http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html</a>.
-</p>
+</em></p>
-<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
-</p>
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
+</em></p>
<!-- ####################################################### -->
<hr />
@@ -152,12 +154,11 @@ options</a></h1>
, are installed in <code>${libdir}/debug</code>, and have the
same names and versioning information as the non-debug
libraries. This option is off by default.
- <p>
- Note this make command, executed in
+ </p>
+ <p>Note this make command, executed in
the build directory, will do much the same thing, without the
configuration difference and without building everything twice:
<code>make CXXFLAGS='-g3 -O0' all</code>
- </p>
</p>
</dd>
diff --git a/libstdc++-v3/docs/html/debug.html b/libstdc++-v3/docs/html/debug.html
index ff20d249c36..0ca332c7346 100644
--- a/libstdc++-v3/docs/html/debug.html
+++ b/libstdc++-v3/docs/html/debug.html
@@ -17,13 +17,13 @@
<h1 class="centered"><a name="top">Debugging schemes and strategies</a></h1>
<p class="fineprint"><em>
-<p>The latest version of this document is always available at
+ The latest version of this document is always available at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/debug.html">
http://gcc.gnu.org/onlinedocs/libstdc++/debug.html</a>.
-</p>
+</em></p>
-<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
-</p>
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
</em></p>
<!-- ####################################################### -->
@@ -34,7 +34,7 @@
code with GNU tools.
</p>
-<h3 class="left"><a name="g++">Compiler flags determine debug info</a></h3>
+<h3 class="left"><a name="gplusplus">Compiler flags determine debug info</a></h3>
<p>The default optimizations and debug flags for a libstdc++ build are
<code>-g -O2</code>. However, both debug and optimization flags can
be varied to change debugging characteristics. For instance,
@@ -52,7 +52,7 @@
</p>
<p>Many other options are available: please see
-<a href=http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options> "Options for Debugging Your Program" </a>
+<a href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options">"Options for Debugging Your Program"</a>
in Using the GNU Compiler Collection (GCC) for a complete list.
</p>
@@ -60,30 +60,31 @@
<h3 class="left"><a name="lib">Using special flags to make a debug binary</a></h3>
<p>There are two ways to build libstdc++ with debug flags. The first
is to run make from the toplevel in a freshly-configured tree with
- specialized debug <code>CXXFLAGS</code>, as in <dd> <code> make
- CXXFLAGS='-g3 -O0' all </code></dd>
+ specialized debug <code>CXXFLAGS</code>, as in
</p>
+<pre>
+ make CXXFLAGS='-g3 -O0' all
+</pre>
<p>This quick and dirty approach is often sufficient for quick
debugging tasks, but the lack of state can be confusing in the long
term.
</p>
-
<p>A second approach is to use the configuration flags
</p>
-
- <dd><code>--enable-debug</code></dd>
-
+<pre>
+ --enable-debug
+</pre>
<p>and perhaps</p>
-
- <dd><code>--enable-debug-flags='...'</code></dd>
-
+<pre>
+ --enable-debug-flags='...'
+</pre>
<p>to create a separate debug build. Both the normal build and the
debug build will persist, without having to specify
<code>CXXFLAGS</code>, and the debug library will be installed in a
separate directory tree, in <code>(prefix)/lib/debug</code>. For
- more information, look at the configuration options document
-<a href=http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html>here</a>
+ more information, look at the <a href="configopts.html">configuration
+ options</a> document.
</p>
@@ -92,7 +93,7 @@
<p>There are various third party memory tracing and debug utilities
that can be used to provide detailed memory allocation information
about C++ code. An exhaustive list of tools is not going to be
- attempted, but include <code>mtrace</code>, <code>valgrind</code>,
+ attempted, but includes <code>mtrace</code>, <code>valgrind</code>,
<code>mudflap</code>, and <code>purify</code>. Also highly
recommended are <code>libcwd</code> and some other one that I
forget right now.
@@ -103,14 +104,15 @@
that uses <code>new</code> and <code>delete</code>:
there are different kinds of allocation schemes that can be used by
<code> std::allocator </code>. For implementation details, see this
- <a href=http://gcc.gnu.org/onlinedocs/libstdc++/ext/howto.html#3>
- document </a> and look specifically for <code>GLIBCPP_FORCE_NEW</code>.
+ <a href="ext/howto.html#3"> document</a> and look specifically for
+ <code>GLIBCPP_FORCE_NEW</code>.
</p>
<p>In a nutshell, the default allocator used by <code>
std::allocator</code> is a high-performance pool allocator, and can
give the mistaken impression that memory is being leaked, when in
- reality the memory is reclaimed after program termination.
+ reality the memory is still being used by the library and is reclaimed
+ after program termination.
</p>
<p>For valgrind, there are some specific items to keep in mind. First
@@ -164,15 +166,15 @@
<p>Suggested valgrind flags, given the suggestions above about setting
up the runtime environment, library, and test file, might be:
-
- <dd><code>valgrind -v --num-callers=20 --leak-check=yes
- --leak-resolution=high --show-reachable=yes a.out</code></dd>
</p>
+<pre>
+ valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
+</pre>
<h3 class="left"><a name="gdb">Some gdb strategies</a></h3>
<p>Many options are available for gdb itself: please see <a
- href=http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC109>
+ href="http://sources.redhat.com/gdb/current/onlinedocs/gdb_13.html#SEC109">
"GDB features for C++" </a> in the gdb documentation. Also
recommended: the other parts of this manual.
</p>
diff --git a/libstdc++-v3/docs/html/documentation.html b/libstdc++-v3/docs/html/documentation.html
index f63a3f77736..c2fa332522d 100644
--- a/libstdc++-v3/docs/html/documentation.html
+++ b/libstdc++-v3/docs/html/documentation.html
@@ -49,6 +49,7 @@
<ul>
<li><a href="configopts.html">Configure options</a></li>
<li><a href="install.html">Getting started: configure, build, install</a>
+ </li>
<li><a href="debug.html">Debugging schemes and strategies</a>
</li>
</ul>
diff --git a/libstdc++-v3/docs/html/explanations.html b/libstdc++-v3/docs/html/explanations.html
index dac57b87288..5a60b910dce 100644
--- a/libstdc++-v3/docs/html/explanations.html
+++ b/libstdc++-v3/docs/html/explanations.html
@@ -17,13 +17,15 @@
<h1 class="centered"><a name="top">Explanatory notes about libstdc++-v3
design</a></h1>
-<p>The latest version of this document is always available at
+<p class="fineprint"><em>
+ The latest version of this document is always available at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html">
http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html</a>.
-</p>
+</em></p>
-<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
-</p>
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
+</em></p>
<!-- ####################################################### -->
diff --git a/libstdc++-v3/docs/html/faq/index.html b/libstdc++-v3/docs/html/faq/index.html
index d60c4e76ceb..2a5c4d449b0 100644
--- a/libstdc++-v3/docs/html/faq/index.html
+++ b/libstdc++-v3/docs/html/faq/index.html
@@ -19,16 +19,18 @@
<h1 class="centered">libstdc++ Frequently Asked Questions</h1>
-<p>The latest version of this document is always available at
+<p class="fineprint"><em>
+ The latest version of this document is always available at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/faq/">
http://gcc.gnu.org/onlinedocs/libstdc++/faq/</a>. The main documentation
page is at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html">
http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html</a>.
-</p>
+</em></p>
-<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
-</p>
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
+</em></p>
<!-- ####################################################### -->
<hr />
@@ -94,6 +96,7 @@
<em>constraints</em> in the STL...</a> </li>
<li><a href="#4_4_dlsym">program crashes when using library code
in a dynamically-loaded library</a> </li>
+ <li><a href="#4_4_leak">"memory leaks" in containers</a> </li>
</ul>
</li>
<li><a href="#4_5">Aw, that's easy to fix!</a> </li>
@@ -740,11 +743,11 @@ New:
and unmaintained. Do not report problems with -v2 to the -v3
mailing list.
</p>
- <p>Currently our header files are installed in
- <code>${prefix}/include/g++-v3</code> (see the 'v'?). This may
- change with the next release of GCC, as it may be too confusing,
- but <a href="http://gcc.gnu.org/ml/gcc/2000-10/msg00732.html">the
- question has not yet been decided</a>.
+ <p>For GCC versions 3.0 and 3.1 the libstdc++-v3 header files are
+ installed in <code>${prefix}/include/g++-v3</code> (see the 'v'?).
+ Starting with version 3.2 the headers are installed in
+ <code>${prefix}/include/c++/${version}</code> as this prevents
+ headers from previous versions being found by mistake.
</p>
<p><a name="4_4_glibc"><strong>glibc</strong></a>
If you're on a GNU/Linux system and have just upgraded to
@@ -795,6 +798,18 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
// link the executable
g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl</pre>
+ <p><a name="4_4_leak"><strong>"memory leaks" in containers</strong></a>
+ A few people have reported that the standard containers appear
+ to leak memory when tested with memory checkers such as
+ <a href="http://developer.kde.org/~sewardj/">valgrind</a>.
+ The library's default allocators keep free memory in a pool
+ for later reuse, rather than returning it to the OS. Although
+ this memory is always reachable by the library and is never
+ lost, memory debugging tools can report it as a leak. If you
+ want to test the library for memory leaks please read
+ <a href="../debug.html#mem">Tips for memory leak hunting</a>
+ first.
+ </p>
<hr />
<h2><a name="4_5">4.5 Aw, that's easy to fix!</a></h2>
diff --git a/libstdc++-v3/docs/html/faq/index.txt b/libstdc++-v3/docs/html/faq/index.txt
index 8b185822729..3dd49c7f8d7 100644
--- a/libstdc++-v3/docs/html/faq/index.txt
+++ b/libstdc++-v3/docs/html/faq/index.txt
@@ -51,17 +51,18 @@
o [40]errors about *Concept and constraints in the STL...
o [41]program crashes when using library code in a
dynamically-loaded library
- 5. [42]Aw, that's easy to fix!
- 5. [43]Miscellaneous
- 1. [44]string::iterator is not char*; vector<T>::iterator is not
+ o [42]"memory leaks" in containers
+ 5. [43]Aw, that's easy to fix!
+ 5. [44]Miscellaneous
+ 1. [45]string::iterator is not char*; vector<T>::iterator is not
T*
- 2. [45]What's next after libstdc++-v3?
- 3. [46]What about the STL from SGI?
- 4. [47]Extensions and Backward Compatibility
- 5. [48][removed]
- 6. [49]Is libstdc++-v3 thread-safe?
- 7. [50]How do I get a copy of the ISO C++ Standard?
- 8. [51]What's an ABI and why is it so messy?
+ 2. [46]What's next after libstdc++-v3?
+ 3. [47]What about the STL from SGI?
+ 4. [48]Extensions and Backward Compatibility
+ 5. [49][removed]
+ 6. [50]Is libstdc++-v3 thread-safe?
+ 7. [51]How do I get a copy of the ISO C++ Standard?
+ 8. [52]What's an ABI and why is it so messy?
_________________________________________________________________
1.0 General Information
@@ -71,19 +72,19 @@
The GNU Standard C++ Library v3 is an ongoing project to implement the
ISO 14882 Standard C++ library as described in chapters 17 through 27
and annex D. As the library reaches stable plateaus, it is captured in
- a snapshot and released. The latest release is [52]the fourteenth
+ a snapshot and released. The latest release is [53]the fourteenth
snapshot but newer versions have been included in recent GCC releases.
For those who want to see exactly how far the project has come, or
just want the latest bleeding-edge code, the up-to-date source is
available over anonymous CVS, and can even be browsed over the Web
- (see [53]1.4 below).
+ (see [54]1.4 below).
The older libstdc++-v2 project is no longer maintained; the code has
- been completely replaced and rewritten. [54]If you are using V2, then
+ been completely replaced and rewritten. [55]If you are using V2, then
you need to report bugs to your system vendor, not to the V3 list.
A more formal description of the V3 goals can be found in the official
- [55]design document.
+ [56]design document.
_________________________________________________________________
1.2 Why should I use libstdc++?
@@ -96,8 +97,8 @@
The GNU C/C++/FORTRAN/<pick-a-language> compiler (gcc, g++, etc) is
widely considered to be one of the leading compilers in the world. Its
- development has recently been taken over by the [56]GCC team. All of
- the rapid development and near-legendary [57]portability that are the
+ development has recently been taken over by the [57]GCC team. All of
+ the rapid development and near-legendary [58]portability that are the
hallmarks of an open-source project are being applied to libstdc++.
That means that all of the Standard classes and functions (such as
@@ -115,16 +116,16 @@
Development and discussion is held on the libstdc++ mailing list.
Subscribing to the list, or searching the list archives, is open to
- everyone. You can read instructions for doing so on the [58]homepage.
+ everyone. You can read instructions for doing so on the [59]homepage.
If you have questions, ideas, code, or are just curious, sign up!
_________________________________________________________________
1.4 How do I get libstdc++?
- The fourteenth (and latest) snapshot of libstdc++-v3 is [59]available
+ The fourteenth (and latest) snapshot of libstdc++-v3 is [60]available
via ftp.
- The [60]homepage has instructions for retrieving the latest CVS
+ The [61]homepage has instructions for retrieving the latest CVS
sources, and for browsing the CVS sources over the web.
The subset commonly known as the Standard Template Library (chapters
@@ -140,7 +141,7 @@
1.6 How do I contribute to the effort?
- Here is [61]a page devoted to this topic. Subscribing to the mailing
+ Here is [62]a page devoted to this topic. Subscribing to the mailing
list (see above, or the homepage) is a very good idea if you have
something to contribute, or if you have spare time and want to help.
Contributions don't have to be in the form of source code; anybody who
@@ -175,11 +176,11 @@
extracted into an updated utilities library, but nobody has stated
such a project yet.
- (The [62]Boost site houses free C++ libraries that do varying things,
+ (The [63]Boost site houses free C++ libraries that do varying things,
and happened to be started by members of the Standards Committee.
Certain "useful stuff" classes will probably migrate there.)
- For the bold and/or desperate, the [63]GCC extensions page describes
+ For the bold and/or desperate, the [64]GCC extensions page describes
where to find the last libg++ source.
_________________________________________________________________
@@ -189,16 +190,16 @@
remains unanswered, then just ask the mailing list. At present, you do
not need to be subscribed to the list to send a message to it. More
information is available on the homepage (including how to browse the
- list archives); to send to the list, use [64]libstdc++@gcc.gnu.org.
+ list archives); to send to the list, use [65]libstdc++@gcc.gnu.org.
If you have a question that you think should be included here, or if
- you have a question about a question/answer here, contact [65]Phil
- Edwards or [66]Gabriel Dos Reis.
+ you have a question about a question/answer here, contact [66]Phil
+ Edwards or [67]Gabriel Dos Reis.
_________________________________________________________________
1.9 What are the license terms for libstdc++-v3?
- See [67]our license description for these and related questions.
+ See [68]our license description for these and related questions.
_________________________________________________________________
2.0 Installation
@@ -215,13 +216,13 @@
* The GNU Autotools are needed if you are messing with the configury
or makefiles.
- The file [68]documentation.html provides a good overview of the steps
+ The file [69]documentation.html provides a good overview of the steps
necessary to build, install, and use the library. Instructions for
configuring the library with new flags such as --enable-threads are
there also, as well as patches and instructions for working with GCC
2.95.
- The top-level install.html and [69]RELEASE-NOTES files contain the
+ The top-level install.html and [70]RELEASE-NOTES files contain the
exact build and installation instructions. You may wish to browse
those files over CVSweb ahead of time to get a feel for what's
required. RELEASE-NOTES is located in the ".../docs/17_intro/"
@@ -238,8 +239,8 @@
The Concurrent Versions System is one of several revision control
packages. It was selected for GNU projects because it's free (speech),
- free (beer), and very high quality. The [70]CVS entry in the GNU
- software catalogue has a better description as well as a [71]link to
+ free (beer), and very high quality. The [71]CVS entry in the GNU
+ software catalogue has a better description as well as a [72]link to
the makers of CVS.
The "anonymous client checkout" feature of CVS is similar to anonymous
@@ -290,7 +291,7 @@
people don't like it, so here are two pseudo-solutions:
If the only functions from libstdc++.a which you need are language
- support functions (those listed in [72]clause 18 of the standard,
+ support functions (those listed in [73]clause 18 of the standard,
e.g., new and delete), then try linking against libsupc++.a (usually
specifying -lsupc++ when calling g++ for the final link step will do
it). This library contains only those support routines, one per object
@@ -385,7 +386,7 @@
- < /dev/null" to display a list of predefined macros for any
particular installation.
- This has been discussed on the mailing lists [73]quite a bit.
+ This has been discussed on the mailing lists [74]quite a bit.
This method is something of a wart. We'd like to find a cleaner
solution, but nobody yet has contributed the time.
@@ -394,7 +395,7 @@
3.6 OS X ctype.h is broken! How can I hack it?
This is a long-standing bug in the OS X support. Fortunately, the
- patch is quite simple, and well-known. [74]Here's a link to the
+ patch is quite simple, and well-known. [75]Here's a link to the
solution.
_________________________________________________________________
@@ -432,7 +433,7 @@
enable itself.
You can fix the problems yourself, and learn more about the situation,
- by reading [75]this short thread ("_GLIBCPP_USE_WCHAR_T undefined in
+ by reading [76]this short thread ("_GLIBCPP_USE_WCHAR_T undefined in
FreeBSD's c++config.h?").
_________________________________________________________________
@@ -445,7 +446,7 @@
For 3.0.1, the most common "bug" is an apparently missing "../" in
include/Makefile, resulting in files like gthr.h and gthr-single.h not
- being found. Please read [76]the configuration instructions for GCC,
+ being found. Please read [77]the configuration instructions for GCC,
specifically the part about configuring in a separate build directory,
and how strongly recommended it is. Building in the source directory
is fragile, is rarely tested, and tends to break, as in this case.
@@ -453,7 +454,7 @@
For 3.1, the most common "bug" is a parse error when using <fstream>,
ending with a message, "bits/basic_file.h:52: parse error before `{'
- token." Please read [77]the installation instructions for GCC,
+ token." Please read [78]the installation instructions for GCC,
specifically the part about not installing newer versions on top of
older versions. If you install 3.1 over a 3.0.x release, then the
wrong basic_file.h header will be found (its location changed between
@@ -522,30 +523,30 @@ New:
libstdc++. If you are experiencing one of these problems, you can find
more information on the libstdc++ and the GCC mailing lists.
- Before reporting a bug, examine the [78]bugs database with the
+ Before reporting a bug, examine the [79]bugs database with the
category set to "libstdc++". The BUGS file in the source tree also
tracks known serious problems.
* Debugging is problematic, due to bugs in line-number generation
(mostly fixed in the compiler) and gdb lagging behind the compiler
(lack of personnel). We recommend configuring the compiler using
--with-dwarf2 if the DWARF2 debugging format is not already the
- default on your platform. Also, [79]changing your GDB settings can
+ default on your platform. Also, [80]changing your GDB settings can
have a profound effect on your C++ debugging experiences. :-)
_________________________________________________________________
4.3 Bugs in the C++ language/lib specification
- Yes, unfortunately, there are some. In a [80]message to the list,
+ Yes, unfortunately, there are some. In a [81]message to the list,
Nathan Myers announced that he has started a list of problems in the
ISO C++ Standard itself, especially with regard to the chapters that
- concern the library. The list itself is [81]posted on his website.
+ concern the library. The list itself is [82]posted on his website.
Developers who are having problems interpreting the Standard may wish
to consult his notes.
For those people who are not part of the ISO Library Group (i.e.,
nearly all of us needing to read this page in the first place :-), a
- public list of the library defects is occasionally published [82]here.
- Some of these have resulted in [83]code changes.
+ public list of the library defects is occasionally published [83]here.
+ Some of these have resulted in [84]code changes.
_________________________________________________________________
4.4 Things in libstdc++ that only look like bugs
@@ -577,7 +578,7 @@ New:
state on the previous file. The reason is that the state flags are not
cleared on a successful call to open(). The standard unfortunately did
not specify behavior in this case, and to everybody's great sorrow,
- the [84]proposed LWG resolution (see DR #22) is to leave the flags
+ the [85]proposed LWG resolution (see DR #22) is to leave the flags
unchanged. You must insert a call to fs.clear() between the calls to
close() and open(), and then everything will work like we all expect
it to work.
@@ -587,7 +588,7 @@ New:
same namespace as other comparison functions (e.g., 'using' them and
the <iterator> header), then you will suddenly be faced with huge
numbers of ambiguity errors. This was discussed on the -v3 list;
- Nathan Myers [85]sums things up here. The collisions with
+ Nathan Myers [86]sums things up here. The collisions with
vector/string iterator types have been fixed for 3.1.
The g++-3 headers are not ours
@@ -595,7 +596,7 @@ New:
If you have found an extremely broken header file which is causing
problems for you, look carefully before submitting a "high" priority
bug report (which you probably shouldn't do anyhow; see the last
- paragraph of the page describing [86]the GCC bug database).
+ paragraph of the page describing [87]the GCC bug database).
If the headers are in ${prefix}/include/g++-3, or if the installed
library's name looks like libstdc++-2.10.a or libstdc++-libc6-2.10.so,
@@ -603,9 +604,11 @@ New:
and unmaintained. Do not report problems with -v2 to the -v3 mailing
list.
- Currently our header files are installed in ${prefix}/include/g++-v3
- (see the 'v'?). This may change with the next release of GCC, as it
- may be too confusing, but [87]the question has not yet been decided.
+ For GCC versions 3.0 and 3.1 the libstdc++-v3 header files are
+ installed in ${prefix}/include/g++-v3 (see the 'v'?). Starting with
+ version 3.2 the headers are installed in
+ ${prefix}/include/c++/${version} as this prevents headers from
+ previous versions being found by mistake.
glibc If you're on a GNU/Linux system and have just upgraded to glibc
2.2, but are still using gcc 2.95.2, then you should have read the
@@ -647,22 +650,31 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
// link the executable
g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl
+
+ "memory leaks" in containers A few people have reported that the
+ standard containers appear to leak memory when tested with memory
+ checkers such as [90]valgrind. The library's default allocators keep
+ free memory in a pool for later reuse, rather than returning it to the
+ OS. Although this memory is always reachable by the library and is
+ never lost, memory debugging tools can report it as a leak. If you
+ want to test the library for memory leaks please read [91]Tips for
+ memory leak hunting first.
_________________________________________________________________
4.5 Aw, that's easy to fix!
If you have found a bug in the library and you think you have a
working fix, then send it in! The main GCC site has a page on
- [90]submitting patches that covers the procedure, but for libstdc++
+ [92]submitting patches that covers the procedure, but for libstdc++
you should also send the patch to our mailing list in addition to the
- GCC patches mailing list. The libstdc++ [91]contributors' page also
+ GCC patches mailing list. The libstdc++ [93]contributors' page also
talks about how to submit patches.
In addition to the description, the patch, and the ChangeLog entry, it
is a Good Thing if you can additionally create a small test program to
test for the presence of the bug that your patch fixes. Bugs have a
way of being reintroduced; if an old bug creeps back in, it will be
- caught immediately by the [92]testsuite -- but only if such a test
+ caught immediately by the [94]testsuite -- but only if such a test
exists.
_________________________________________________________________
@@ -696,7 +708,7 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
libstdc++. Some of that is already happening, see 4.2. Some of
those changes are being predicted by the library maintainers, and
we add code to the library based on what the current proposed
- resolution specifies. Those additions are listed in [93]the
+ resolution specifies. Those additions are listed in [95]the
extensions page.
2. Performance tuning. Lots of performance tuning. This too is
already underway for post-3.0 releases, starting with memory
@@ -712,13 +724,13 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
type from C99.) Bugfixes and rewrites (to improve or fix thread
safety, for instance) will of course be a continuing task.
- [94]This question about the next libstdc++ prompted some brief but
- interesting [95]speculation.
+ [96]This question about the next libstdc++ prompted some brief but
+ interesting [97]speculation.
_________________________________________________________________
5.3 What about the STL from SGI?
- The [96]STL from SGI, version 3.3, was the most recent merge of the
+ The [98]STL from SGI, version 3.3, was the most recent merge of the
STL codebase. The code in libstdc++ contains many fixes and changes,
and it is very likely that the SGI code is no longer under active
development. We expect that no future merges will take place.
@@ -767,7 +779,7 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
This is a bit cleaner than defining typedefs for all the
instantiations you might need.
- Extensions to the library have [97]their own page.
+ Extensions to the library have [99]their own page.
_________________________________________________________________
5.5 [removed]
@@ -816,8 +828,8 @@ a
otherwise documented as safe, do not assume that two threads may
access a shared standard library object at the same time.
- See chapters [98]17 (library introduction), [99]23 (containers), and
- [100]27 (I/O) for more information.
+ See chapters [100]17 (library introduction), [101]23 (containers), and
+ [102]27 (I/O) for more information.
_________________________________________________________________
5.7 How do I get a copy of the ISO C++ Standard?
@@ -828,11 +840,11 @@ a
their two-meeting commitment for voting rights, may get a copy of the
standard from their respective national standards organization. In the
USA, this national standards organization is ANSI and their website is
- right [101]here. (And if you've already registered with them, clicking
+ right [103]here. (And if you've already registered with them, clicking
this link will take you to directly to the place where you can
- [102]buy the standard on-line.
+ [104]buy the standard on-line.
- Who is your country's member body? Visit the [103]ISO homepage and
+ Who is your country's member body? Visit the [105]ISO homepage and
find out!
_________________________________________________________________
@@ -883,8 +895,8 @@ a
encompasses the standard library.
_________________________________________________________________
- See [104]license.html for copying conditions. Comments and suggestions
- are welcome, and may be sent to [105]the libstdc++ mailing list.
+ See [106]license.html for copying conditions. Comments and suggestions
+ are welcome, and may be sent to [107]the libstdc++ mailing list.
References
@@ -929,67 +941,69 @@ References
39. ../faq/index.html#4_4_glibc
40. ../faq/index.html#4_4_checks
41. ../faq/index.html#4_4_dlsym
- 42. ../faq/index.html#4_5
- 43. ../faq/index.html#5_0
- 44. ../faq/index.html#5_1
- 45. ../faq/index.html#5_2
- 46. ../faq/index.html#5_3
- 47. ../faq/index.html#5_4
- 48. ../faq/index.html#5_5
- 49. ../faq/index.html#5_6
- 50. ../faq/index.html#5_7
- 51. ../faq/index.html#5_8
- 52. http://gcc.gnu.org/libstdc++/index.html#download
- 53. ../faq/index.html#1_4
- 54. ../faq/index.html#4_4_interface
- 55. ../17_intro/DESIGN
- 56. http://gcc.gnu.org/
- 57. http://gcc.gnu.org/gcc-3.0/buildstat.html
- 58. http://gcc.gnu.org/libstdc++/
- 59. http://gcc.gnu.org/libstdc++/index.html#download
- 60. http://gcc.gnu.org/libstdc++/
- 61. ../17_intro/contribute.html
- 62. http://www.boost.org/
- 63. http://gcc.gnu.org/extensions.html
- 64. mailto:libstdc++@gcc.gnu.org
- 65. mailto:pme@gcc.gnu.org
- 66. mailto:gdr@gcc.gnu.org
- 67. ../17_intro/license.html
- 68. ../documentation.html
- 69. ../17_intro/RELEASE-NOTES
- 70. http://www.gnu.org/software/cvs/cvs.html
- 71. http://www.cvshome.org/
- 72. ../18_support/howto.html
- 73. http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris
- 74. http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html
- 75. http://gcc.gnu.org/ml/libstdc++/2003-02/subjects.html#00286
- 76. http://gcc.gnu.org/install/configure.html
- 77. http://gcc.gnu.org/install/
- 78. http://gcc.gnu.org/bugs.html
- 79. http://gcc.gnu.org/ml/libstdc++/2002-02/msg00034.html
- 80. http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html
- 81. http://www.cantrip.org/draft-bugs.txt
- 82. http://anubis.dkuug.dk/jtc1/sc22/wg21/
- 83. ../faq/index.html#5_2
- 84. ../ext/howto.html#5
- 85. http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html
- 86. http://gcc.gnu.org/gnatswrite.html
- 87. http://gcc.gnu.org/ml/gcc/2000-10/msg00732.html
+ 42. ../faq/index.html#4_4_leak
+ 43. ../faq/index.html#4_5
+ 44. ../faq/index.html#5_0
+ 45. ../faq/index.html#5_1
+ 46. ../faq/index.html#5_2
+ 47. ../faq/index.html#5_3
+ 48. ../faq/index.html#5_4
+ 49. ../faq/index.html#5_5
+ 50. ../faq/index.html#5_6
+ 51. ../faq/index.html#5_7
+ 52. ../faq/index.html#5_8
+ 53. http://gcc.gnu.org/libstdc++/index.html#download
+ 54. ../faq/index.html#1_4
+ 55. ../faq/index.html#4_4_interface
+ 56. ../17_intro/DESIGN
+ 57. http://gcc.gnu.org/
+ 58. http://gcc.gnu.org/gcc-3.0/buildstat.html
+ 59. http://gcc.gnu.org/libstdc++/
+ 60. http://gcc.gnu.org/libstdc++/index.html#download
+ 61. http://gcc.gnu.org/libstdc++/
+ 62. ../17_intro/contribute.html
+ 63. http://www.boost.org/
+ 64. http://gcc.gnu.org/extensions.html
+ 65. mailto:libstdc++@gcc.gnu.org
+ 66. mailto:pme@gcc.gnu.org
+ 67. mailto:gdr@gcc.gnu.org
+ 68. ../17_intro/license.html
+ 69. ../documentation.html
+ 70. ../17_intro/RELEASE-NOTES
+ 71. http://www.gnu.org/software/cvs/cvs.html
+ 72. http://www.cvshome.org/
+ 73. ../18_support/howto.html
+ 74. http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris
+ 75. http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html
+ 76. http://gcc.gnu.org/ml/libstdc++/2003-02/subjects.html#00286
+ 77. http://gcc.gnu.org/install/configure.html
+ 78. http://gcc.gnu.org/install/
+ 79. http://gcc.gnu.org/bugs.html
+ 80. http://gcc.gnu.org/ml/libstdc++/2002-02/msg00034.html
+ 81. http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html
+ 82. http://www.cantrip.org/draft-bugs.txt
+ 83. http://anubis.dkuug.dk/jtc1/sc22/wg21/
+ 84. ../faq/index.html#5_2
+ 85. ../ext/howto.html#5
+ 86. http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html
+ 87. http://gcc.gnu.org/gnatswrite.html
88. ../faq/index.html#4_4_interface
89. ../19_diagnostics/howto.html#3
- 90. http://gcc.gnu.org/contribute.html
- 91. ../17_intro/contribute.html
- 92. ../faq/index.html#2_4
- 93. ../ext/howto.html#5
- 94. http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html
- 95. http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html
- 96. http://www.sgi.com/Technology/STL/
- 97. ../ext/howto.html
- 98. ../17_intro/howto.html#3
- 99. ../23_containers/howto.html#3
- 100. ../27_io/howto.html#9
- 101. http://www.ansi.org/
- 102. http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
- 103. http://www.iso.ch/
- 104. ../17_intro/license.html
- 105. mailto:libstdc++@gcc.gnu.org
+ 90. http://developer.kde.org/~sewardj/
+ 91. ../debug.html#mem
+ 92. http://gcc.gnu.org/contribute.html
+ 93. ../17_intro/contribute.html
+ 94. ../faq/index.html#2_4
+ 95. ../ext/howto.html#5
+ 96. http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html
+ 97. http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html
+ 98. http://www.sgi.com/Technology/STL/
+ 99. ../ext/howto.html
+ 100. ../17_intro/howto.html#3
+ 101. ../23_containers/howto.html#3
+ 102. ../27_io/howto.html#9
+ 103. http://www.ansi.org/
+ 104. http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
+ 105. http://www.iso.ch/
+ 106. ../17_intro/license.html
+ 107. mailto:libstdc++@gcc.gnu.org
diff --git a/libstdc++-v3/docs/html/install.html b/libstdc++-v3/docs/html/install.html
index 6b2ea066456..2330b7a7c16 100644
--- a/libstdc++-v3/docs/html/install.html
+++ b/libstdc++-v3/docs/html/install.html
@@ -16,13 +16,15 @@
<h1 class="centered"><a name="top">libstdc++-v3 INSTALL</a></h1>
-<p>The latest version of this document is always available at
+<p class="fineprint"><em>
+ The latest version of this document is always available at
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/install.html">
http://gcc.gnu.org/onlinedocs/libstdc++/install.html</a>.
-</p>
+</em></p>
-<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
-</p>
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
+</em></p>
<!-- ####################################################### -->
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index 526bbb0f1dd..01aa208bfbb 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -112,6 +112,7 @@ bits_headers = \
${bits_srcdir}/codecvt.h \
${bits_srcdir}/concept_check.h \
${bits_srcdir}/cpp_type_traits.h \
+ ${bits_srcdir}/demangle.h \
${bits_srcdir}/deque.tcc \
${bits_srcdir}/fpos.h \
${bits_srcdir}/fstream.tcc \
@@ -339,6 +340,10 @@ thread_target_headers = \
${target_builddir}/gthr-posix.h \
${target_builddir}/gthr-default.h
+pch_input = stdc++.h
+pch_output = stdc++.h.gch
+pch_source = ${glibcpp_srcdir}/include/${pch_input}
+
# List of all timestamp files. By keeping only one copy of this list, both
# CLEANFILES and all-local are kept up-to-date.
allstamps = \
@@ -362,11 +367,13 @@ stamp-std: ${std_headers}
echo `date` > stamp-std ;\
fi
-stamp-std-precompile: stamp-std
- for h in ${std_headers_rename}; do \
- $(CXX) -Winvalid-pch -x c++-header $(INCLUDES) $${h}; \
- done; \
- echo `date` > stamp-std-precompile
+PCHFLAGS=-Winvalid-pch -x c++-header $(CXXFLAGS)
+stamp-stdc++-precompile: stamp-std ${target_builddir}/c++config.h ${pch_source}
+ if [ ! -f "${pch_output}" ]; then \
+ $(CXX) $(PCHFLAGS) $(INCLUDES) ${pch_source} -o ${pch_output}; \
+ touch ${pch_input}; \
+ fi; \
+ touch stamp-stdc++-precompile
stamp-bits: ${bits_headers}
@if [ ! -d "${bits_builddir}" ]; then \
@@ -523,7 +530,7 @@ install-data-local:
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${target_builddir}; done
# By adding these files here, automake will remove them for 'make clean'
-CLEANFILES = *.pch stamp-std-precompile
+CLEANFILES = *.gch stamp-stdc++-precompile
# Stop implicit '.o' make rules from ever stomping on extensionless
# headers, in the improbable case where some foolish, crack-addled
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index f109217786d..78632dbe74d 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
@@ -230,6 +230,7 @@ bits_headers = \
${bits_srcdir}/codecvt.h \
${bits_srcdir}/concept_check.h \
${bits_srcdir}/cpp_type_traits.h \
+ ${bits_srcdir}/demangle.h \
${bits_srcdir}/deque.tcc \
${bits_srcdir}/fpos.h \
${bits_srcdir}/fstream.tcc \
@@ -456,6 +457,10 @@ thread_target_headers = \
${target_builddir}/gthr-default.h
+pch_input = stdc++.h
+pch_output = stdc++.h.gch
+pch_source = ${glibcpp_srcdir}/include/${pch_input}
+
# List of all timestamp files. By keeping only one copy of this list, both
# CLEANFILES and all-local are kept up-to-date.
allstamps = \
@@ -463,6 +468,8 @@ allstamps = \
stamp-backward stamp-ext stamp-target
+PCHFLAGS = -Winvalid-pch -x c++-header $(CXXFLAGS)
+
# Target includes for threads
glibcpp_thread_h = @glibcpp_thread_h@
uppercase = [ABCDEFGHIJKLMNOPQRSTUVWXYZ_]
@@ -478,7 +485,7 @@ uppercase = [ABCDEFGHIJKLMNOPQRSTUVWXYZ_]
gxx_include_dir = @gxx_include_dir@
# By adding these files here, automake will remove them for 'make clean'
-CLEANFILES = *.pch stamp-std-precompile
+CLEANFILES = *.gch stamp-stdc++-precompile
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
DIST_COMMON = Makefile.am Makefile.in
@@ -598,12 +605,12 @@ stamp-std: ${std_headers}
done) ;\
echo `date` > stamp-std ;\
fi
-
-stamp-std-precompile: stamp-std
- for h in ${std_headers_rename}; do \
- $(CXX) -Winvalid-pch -x c++-header $(INCLUDES) $${h}; \
- done; \
- echo `date` > stamp-std-precompile
+stamp-stdc++-precompile: stamp-std ${target_builddir}/c++config.h ${pch_source}
+ if [ ! -f "${pch_output}" ]; then \
+ $(CXX) $(PCHFLAGS) $(INCLUDES) ${pch_source} -o ${pch_output}; \
+ touch ${pch_input}; \
+ fi; \
+ touch stamp-stdc++-precompile
stamp-bits: ${bits_headers}
@if [ ! -d "${bits_builddir}" ]; then \
diff --git a/libstdc++-v3/include/bits/basic_ios.h b/libstdc++-v3/include/bits/basic_ios.h
index 7d0e47ef3af..ba0fcee36ba 100644
--- a/libstdc++-v3/include/bits/basic_ios.h
+++ b/libstdc++-v3/include/bits/basic_ios.h
@@ -419,7 +419,7 @@ namespace std
* The default constructor does nothing and is not normally
* accessible to users.
*/
- basic_ios() : ios_base()
+ basic_ios() : ios_base(), _M_fctype(0), _M_fnumput(0), _M_fnumget(0)
{ }
/**
@@ -441,6 +441,11 @@ namespace std
void
_M_cache_locale(const locale& __loc);
+
+ // Internal state setter that won't throw, only set the state bits.
+ // Used to guarantee we don't throw when setting badbit.
+ void
+ _M_setstate(iostate __state) { _M_streambuf_state |= __state; }
};
} // namespace std
diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
index f3cb93c31b6..b7034adadeb 100644
--- a/libstdc++-v3/include/bits/basic_string.tcc
+++ b/libstdc++-v3/include/bits/basic_string.tcc
@@ -578,7 +578,8 @@ namespace std
// Iff appending itself, string needs to pre-reserve the
// correct size so that _M_mutate does not clobber the
// iterators formed here.
- size_type __len = std::min(__str.size() - __pos, __n) + this->size();
+ size_type __len = std::min(size_type(__str.size() - __pos),
+ __n) + this->size();
if (__len > this->capacity())
this->reserve(__len);
return _M_replace_safe(_M_iend(), _M_iend(), __str._M_check(__pos),
@@ -709,7 +710,7 @@ namespace std
size_type __size = this->size();
if (__n <= __size)
{
- __pos = std::min(__size - __n, __pos);
+ __pos = std::min(size_type(__size - __n), __pos);
const _CharT* __data = _M_data();
do
{
@@ -848,7 +849,7 @@ namespace std
if (__pos > __size)
__throw_out_of_range("basic_string::compare");
- size_type __rsize= std::min(__size - __pos, __n);
+ size_type __rsize= std::min(size_type(__size - __pos), __n);
size_type __len = std::min(__rsize, __osize);
int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
if (!__r)
@@ -867,8 +868,8 @@ namespace std
if (__pos1 > __size || __pos2 > __osize)
__throw_out_of_range("basic_string::compare");
- size_type __rsize = std::min(__size - __pos1, __n1);
- size_type __rosize = std::min(__osize - __pos2, __n2);
+ size_type __rsize = std::min(size_type(__size - __pos1), __n1);
+ size_type __rosize = std::min(size_type(__osize - __pos2), __n2);
size_type __len = std::min(__rsize, __rosize);
int __r = traits_type::compare(_M_data() + __pos1,
__str.data() + __pos2, __len);
@@ -903,7 +904,7 @@ namespace std
__throw_out_of_range("basic_string::compare");
size_type __osize = traits_type::length(__s);
- size_type __rsize = std::min(__size - __pos, __n1);
+ size_type __rsize = std::min(size_type(__size - __pos), __n1);
size_type __len = std::min(__rsize, __osize);
int __r = traits_type::compare(_M_data() + __pos, __s, __len);
if (!__r)
@@ -922,7 +923,7 @@ namespace std
__throw_out_of_range("basic_string::compare");
size_type __osize = std::min(traits_type::length(__s), __n2);
- size_type __rsize = std::min(__size - __pos, __n1);
+ size_type __rsize = std::min(size_type(__size - __pos), __n1);
size_type __len = std::min(__rsize, __osize);
int __r = traits_type::compare(_M_data() + __pos, __s, __len);
if (!__r)
diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config
index a478f616be4..4ec2f932c82 100644
--- a/libstdc++-v3/include/bits/c++config
+++ b/libstdc++-v3/include/bits/c++config
@@ -35,7 +35,7 @@
#include <bits/os_defines.h>
// The current version of the C++ library in compressed ISO date format.
-#define __GLIBCPP__ 20030302
+#define __GLIBCPP__ 20030406
// This is necessary until GCC supports separate template compilation.
#define _GLIBCPP_NO_TEMPLATE_EXPORT 1
@@ -87,6 +87,13 @@
#error __USE_MALLOC should never be defined. Read the release notes.
#endif
+// Create a boolean flag to be used to determine if --fast-math is set.
+#ifdef __FAST_MATH__
+#define _GLIBCPP_FAST_MATH 1
+#else
+#define _GLIBCPP_FAST_MATH 0
+#endif
+
// The remainder of the prewritten config is mostly automatic; all the
// user hooks are listed above.
diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc
index be4b0c02947..64f5d1d7703 100644
--- a/libstdc++-v3/include/bits/fstream.tcc
+++ b/libstdc++-v3/include/bits/fstream.tcc
@@ -48,10 +48,8 @@ namespace std
{
this->_M_buf_size = this->_M_buf_size_opt;
- // Allocate internal buffer...
+ // Allocate internal buffer.
this->_M_buf = new char_type[this->_M_buf_size];
- // ... and consistently set the end of buffer pointer.
- this->_M_out_end = this->_M_buf + this->_M_buf_size;
_M_buf_allocated = true;
}
}
@@ -96,13 +94,6 @@ namespace std
// Setup initial position of buffer.
_M_set_indeterminate();
- // Set input buffer to something real.
- // NB: Must open in non-blocking way to do this, or must
- // set the initial position in a different manner than
- // using underflow.
- if (__mode & ios_base::in && _M_buf_allocated)
- this->underflow();
-
if ((__mode & ios_base::ate)
&& this->seekoff(0, ios_base::end, __mode) < 0)
{
@@ -122,21 +113,17 @@ namespace std
basic_filebuf<_CharT, _Traits>::
close()
{
- __filebuf_type *__ret = NULL;
+ __filebuf_type* __ret = NULL;
if (this->is_open())
{
+ bool __testfail = false;
const int_type __eof = traits_type::eof();
bool __testput = this->_M_out_cur
- && this->_M_out_beg < this->_M_out_lim;
+ && this->_M_out_beg < this->_M_out_lim;
if (__testput
&& traits_type::eq_int_type(_M_really_overflow(__eof), __eof))
- return __ret;
+ __testfail = true;
- // NB: Do this here so that re-opened filebufs will be cool...
- this->_M_mode = ios_base::openmode(0);
- _M_destroy_internal_buffer();
- _M_pback_destroy();
-
#if 0
// XXX not done
if (_M_last_overflowed)
@@ -146,10 +133,17 @@ namespace std
}
#endif
- if (_M_file.close())
+ // NB: Do this here so that re-opened filebufs will be cool...
+ this->_M_mode = ios_base::openmode(0);
+ _M_destroy_internal_buffer();
+ _M_pback_destroy();
+
+ if (!_M_file.close())
+ __testfail = true;
+
+ if (!__testfail)
__ret = this;
}
-
_M_last_overflowed = false;
return __ret;
}
@@ -161,9 +155,21 @@ namespace std
{
streamsize __ret = -1;
bool __testin = this->_M_mode & ios_base::in;
+ const locale __loc = this->getloc();
+ const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);
+ // Sync with stdio.
+ bool __sync = this->_M_buf_size <= 1;
if (__testin && this->is_open())
- __ret = this->_M_in_end - this->_M_in_cur;
+ {
+ __ret = this->_M_in_end - this->_M_in_cur;
+
+ // For a stateful encoding (-1) the pending sequence might be just
+ // shift and unshift prefixes with no actual character.
+ if (__cvt.encoding() >= 0)
+ __ret += _M_file.showmanyc_helper(__sync) / __cvt.max_length();
+ }
+
_M_last_overflowed = false;
return __ret;
}
@@ -247,12 +253,15 @@ namespace std
overflow(int_type __c)
{
int_type __ret = traits_type::eof();
- bool __testput = _M_out_buf_size();
+ bool __testput =
+ this->_M_out_cur && this->_M_out_cur < this->_M_out_end;
bool __testout = this->_M_mode & ios_base::out;
if (__testout)
{
- if (__testput)
+ if (traits_type::eq_int_type(__c, traits_type::eof()))
+ __ret = traits_type::not_eof(__c);
+ else if (__testput)
{
*this->_M_out_cur = traits_type::to_char_type(__c);
_M_out_cur_move(1);
@@ -274,10 +283,13 @@ namespace std
{
const locale __loc = this->getloc();
const __codecvt_type& __cvt = use_facet<__codecvt_type>(__loc);
-
+ // Sync with stdio.
+ bool __sync = this->_M_buf_size <= 1;
+
if (__cvt.always_noconv() && __ilen)
{
- __elen += _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen);
+ __elen +=
+ _M_file.xsputn(reinterpret_cast<char*>(__ibuf), __ilen, __sync);
__plen += __ilen;
}
else
@@ -307,7 +319,7 @@ namespace std
if (__blen)
{
- __elen += _M_file.xsputn(__buf, __blen);
+ __elen += _M_file.xsputn(__buf, __blen, __sync);
__plen += __blen;
}
@@ -320,11 +332,16 @@ namespace std
__iend, __buf, __buf + __blen, __bend);
if (__r != codecvt_base::error)
__rlen = __bend - __buf;
- else
- __rlen = 0;
+ else
+ {
+ __rlen = 0;
+ // Signal to the caller (_M_really_overflow) that
+ // codecvt::out eventually failed.
+ __elen = 0;
+ }
if (__rlen)
{
- __elen += _M_file.xsputn(__buf, __rlen);
+ __elen += _M_file.xsputn(__buf, __rlen, __sync);
__plen += __rlen;
}
}
@@ -339,6 +356,8 @@ namespace std
int_type __ret = traits_type::eof();
bool __testput = this->_M_out_cur && this->_M_out_beg < this->_M_out_lim;
bool __testunbuffered = _M_file.is_open() && !this->_M_buf_size_opt;
+ // Sync with stdio.
+ bool __sync = this->_M_buf_size <= 1;
if (__testput || __testunbuffered)
{
@@ -352,7 +371,7 @@ namespace std
if (_M_filepos && _M_filepos != this->_M_out_beg)
{
off_type __off = this->_M_out_beg - _M_filepos;
- _M_file.seekoff(__off, ios_base::cur);
+ _M_file.seekoff(__off, ios_base::cur, __sync);
}
// Convert internal buffer to external representation, output.
@@ -362,26 +381,31 @@ namespace std
this->_M_out_lim - this->_M_out_beg,
__elen, __plen);
- // Convert pending sequence to external representation, output.
- // If eof, then just attempt sync.
- if (!traits_type::eq_int_type(__c, traits_type::eof()))
+ // Checks for codecvt.out failures and _M_file.xsputn failures,
+ // respectively, inside _M_convert_to_external.
+ if (__testunbuffered || (__elen && __elen == __plen))
{
- char_type __pending = traits_type::to_char_type(__c);
- _M_convert_to_external(&__pending, 1, __elen, __plen);
+ // Convert pending sequence to external representation, output.
+ // If eof, then just attempt sync.
+ if (!traits_type::eq_int_type(__c, traits_type::eof()))
+ {
+ char_type __pending = traits_type::to_char_type(__c);
+ _M_convert_to_external(&__pending, 1, __elen, __plen);
- // User code must flush when switching modes (thus don't sync).
- if (__elen == __plen)
+ // User code must flush when switching modes (thus don't sync).
+ if (__elen == __plen && __elen)
+ {
+ _M_set_indeterminate();
+ __ret = traits_type::not_eof(__c);
+ }
+ }
+ else if (!_M_file.sync())
{
_M_set_indeterminate();
__ret = traits_type::not_eof(__c);
}
}
- else if (!_M_file.sync())
- {
- _M_set_indeterminate();
- __ret = traits_type::not_eof(__c);
- }
- }
+ }
_M_last_overflowed = true;
return __ret;
}
@@ -422,7 +446,9 @@ namespace std
pos_type __ret = pos_type(off_type(-1));
bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
-
+ // Sync with stdio.
+ bool __sync = this->_M_buf_size <= 1;
+
// Should probably do has_facet checks here.
int __width = use_facet<__codecvt_type>(this->_M_buf_locale).encoding();
if (__width < 0)
@@ -456,7 +482,7 @@ namespace std
__computed_off += this->_M_in_cur - _M_filepos;
// Return pos_type(off_type(-1)) in case of failure.
- __ret = _M_file.seekoff(__computed_off, __way, __mode);
+ __ret = _M_file.seekoff(__computed_off, __way, __sync, __mode);
_M_set_indeterminate();
}
// NB: Need to do this in case _M_file in indeterminate
@@ -464,7 +490,8 @@ namespace std
else
{
pos_type __tmp =
- _M_file.seekoff(__off, ios_base::cur, __mode);
+ _M_file.seekoff(__off, ios_base::cur,
+ __sync, __mode);
if (__tmp >= 0)
{
// Seek successful.
diff --git a/libstdc++-v3/include/bits/ios_base.h b/libstdc++-v3/include/bits/ios_base.h
index 26ee38df383..0adea499836 100644
--- a/libstdc++-v3/include/bits/ios_base.h
+++ b/libstdc++-v3/include/bits/ios_base.h
@@ -458,6 +458,12 @@ namespace std
static void
_S_ios_destroy();
+ // NB: Allows debugger applications use of the standard streams
+ // from operator new. _S_ios_base_init must be incremented in
+ // _S_ios_create _after_ initialization is completed.
+ static bool
+ _S_initialized() { return _S_ios_base_init; }
+
private:
static int _S_ios_base_init;
static bool _S_synced_with_stdio;
diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc
index e0ae5ad8507..68295b4c9f3 100644
--- a/libstdc++-v3/include/bits/istream.tcc
+++ b/libstdc++-v3/include/bits/istream.tcc
@@ -122,7 +122,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -159,7 +159,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -186,7 +186,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -223,7 +223,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -250,7 +250,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -277,7 +277,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -304,7 +304,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -332,7 +332,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -359,7 +359,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -387,7 +387,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -414,7 +414,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -441,7 +441,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -468,7 +468,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -499,7 +499,7 @@ namespace std
{
// 27.6.2.5.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -531,7 +531,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -565,7 +565,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -604,7 +604,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -647,7 +647,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -698,7 +698,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -739,7 +739,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -763,7 +763,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -790,7 +790,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -826,7 +826,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -856,7 +856,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -887,7 +887,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -922,7 +922,7 @@ namespace std
{
// 27.6.1.3 paragraph 1
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -998,7 +998,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __in.setstate(ios_base::badbit);
+ __in._M_setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -1036,9 +1036,9 @@ namespace std
while (__extracted < __num - 1
&& !_Traits::eq_int_type(__c, __eof)
- && !__ctype.is(ctype_base::space, __c))
+ && !__ctype.is(ctype_base::space, _Traits::to_char_type(__c)))
{
- *__s++ = __c;
+ *__s++ = _Traits::to_char_type(__c);
++__extracted;
__c = __sb->snextc();
}
@@ -1055,7 +1055,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __in.setstate(ios_base::badbit);
+ __in._M_setstate(ios_base::badbit);
if ((__in.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -1081,7 +1081,7 @@ namespace std
__int_type __c = __sb->sgetc();
while (!_Traits::eq_int_type(__c, __eof)
- && __ctype.is(ctype_base::space, __c))
+ && __ctype.is(ctype_base::space, _Traits::to_char_type(__c)))
__c = __sb->snextc();
if (_Traits::eq_int_type(__c, __eof))
@@ -1119,7 +1119,7 @@ namespace std
while (__extracted < __n
&& !_Traits::eq_int_type(__c, __eof)
- && !__ctype.is(ctype_base::space, __c))
+ && !__ctype.is(ctype_base::space, _Traits::to_char_type(__c)))
{
__str += _Traits::to_char_type(__c);
++__extracted;
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index cb6dccd19e6..4b6007f6674 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -974,14 +974,14 @@ namespace std
}
else
{
- locale __loc = __io.getloc();
- const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
+ typedef __locale_cache<_CharT> __cache_type;
+ __cache_type& __lc = static_cast<__cache_type&>(__io._M_cache());
typedef basic_string<_CharT> __string_type;
__string_type __name;
if (__v)
- __name = __np.truename();
+ __name = __lc._M_truename;
else
- __name = __np.falsename();
+ __name = __lc._M_falsename;
const _CharT* __cs = __name.c_str();
int __len = __name.size();
@@ -2038,9 +2038,37 @@ namespace std
do_compare(const _CharT* __lo1, const _CharT* __hi1,
const _CharT* __lo2, const _CharT* __hi2) const
{
+ // strcoll assumes zero-terminated strings so we make a copy
+ // and then put a zero at the end.
const string_type __one(__lo1, __hi1);
const string_type __two(__lo2, __hi2);
- return _M_compare(__one.c_str(), __two.c_str());
+
+ const _CharT* __p = __one.c_str();
+ const _CharT* __pend = __one.c_str() + __one.length();
+ const _CharT* __q = __two.c_str();
+ const _CharT* __qend = __two.c_str() + __two.length();
+
+ // strcoll stops when it sees a nul character so we break
+ // the strings into zero-terminated substrings and pass those
+ // to strcoll.
+ for (;;)
+ {
+ int __res = _M_compare(__p, __q);
+ if (__res)
+ return __res;
+
+ __p += char_traits<_CharT>::length(__p);
+ __q += char_traits<_CharT>::length(__q);
+ if (__p == __pend && __q == __qend)
+ return 0;
+ else if (__p == __pend)
+ return -1;
+ else if (__q == __qend)
+ return 1;
+
+ __p++;
+ __q++;
+ }
}
template<typename _CharT>
@@ -2048,19 +2076,43 @@ namespace std
collate<_CharT>::
do_transform(const _CharT* __lo, const _CharT* __hi) const
{
+ // strxfrm assumes zero-terminated strings so we make a copy
+ string_type __str(__lo, __hi);
+
+ const _CharT* __p = __str.c_str();
+ const _CharT* __pend = __str.c_str() + __str.length();
+
size_t __len = (__hi - __lo) * 2;
- // First try a buffer perhaps big enough.
- _CharT* __c =
- static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len));
- size_t __res = _M_transform(__c, __lo, __len);
- // If the buffer was not large enough, try again with the correct size.
- if (__res >= __len)
+
+ string_type __ret;
+
+ // strxfrm stops when it sees a nul character so we break
+ // the string into zero-terminated substrings and pass those
+ // to strxfrm.
+ for (;;)
{
- __c = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
- * (__res + 1)));
- _M_transform(__c, __lo, __res + 1);
+ // First try a buffer perhaps big enough.
+ _CharT* __c =
+ static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __len));
+ size_t __res = _M_transform(__c, __p, __len);
+ // If the buffer was not large enough, try again with the
+ // correct size.
+ if (__res >= __len)
+ {
+ __len = __res + 1;
+ __c = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __len));
+ __res = _M_transform(__c, __p, __res + 1);
+ }
+
+ __ret.append(__c, __res);
+ __p += char_traits<_CharT>::length(__p);
+ if (__p == __pend)
+ return __ret;
+
+ __p++;
+ __ret.push_back(_CharT());
}
- return string_type(__c);
}
template<typename _CharT>
diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc
index a60dd720739..64b37a48826 100644
--- a/libstdc++-v3/include/bits/ostream.tcc
+++ b/libstdc++-v3/include/bits/ostream.tcc
@@ -70,7 +70,7 @@ namespace std
{
// 27.6.2.5.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -92,7 +92,7 @@ namespace std
{
// 27.6.2.5.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -114,7 +114,7 @@ namespace std
{
// 27.6.2.5.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -138,7 +138,7 @@ namespace std
{
// 27.6.2.5.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -166,7 +166,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -205,7 +205,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -231,7 +231,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -272,7 +272,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -298,7 +298,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -325,7 +325,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -351,7 +351,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -377,7 +377,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- this->setstate(ios_base::badbit);
+ this->_M_setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -499,7 +499,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __out.setstate(ios_base::badbit);
+ __out._M_setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -535,7 +535,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __out.setstate(ios_base::badbit);
+ __out._M_setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -570,7 +570,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __out.setstate(ios_base::badbit);
+ __out._M_setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -619,7 +619,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __out.setstate(ios_base::badbit);
+ __out._M_setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
@@ -658,7 +658,7 @@ namespace std
{
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
- __out.setstate(ios_base::badbit);
+ __out._M_setstate(ios_base::badbit);
if ((__out.exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
diff --git a/libstdc++-v3/include/bits/sstream.tcc b/libstdc++-v3/include/bits/sstream.tcc
index 5f9f62e9342..991cb13ef98 100644
--- a/libstdc++-v3/include/bits/sstream.tcc
+++ b/libstdc++-v3/include/bits/sstream.tcc
@@ -92,7 +92,7 @@ namespace std
__size_type __len =
std::max(_M_string.capacity() + 1, this->_M_buf_size_opt);
- bool __testwrite = _M_out_buf_size();
+ bool __testwrite = this->_M_out_cur < this->_M_out_end;
if (__builtin_expect(!__testwrite && __len > _M_string.max_size(), false))
return traits_type::eof();
diff --git a/libstdc++-v3/include/bits/streambuf.tcc b/libstdc++-v3/include/bits/streambuf.tcc
index c14139988af..47fc4ece184 100644
--- a/libstdc++-v3/include/bits/streambuf.tcc
+++ b/libstdc++-v3/include/bits/streambuf.tcc
@@ -99,7 +99,7 @@ namespace std
sputc(char_type __c)
{
int_type __ret;
- if (_M_out_buf_size())
+ if (_M_out_cur && _M_out_cur < _M_out_end)
{
*_M_out_cur = __c;
_M_out_cur_move(1);
@@ -152,7 +152,7 @@ namespace std
streamsize __ret = 0;
while (__ret < __n)
{
- off_type __buf_len = _M_out_buf_size();
+ off_type __buf_len = _M_out_end - _M_out_cur;
if (__buf_len > 0)
{
off_type __remaining = __n - __ret;
@@ -189,10 +189,14 @@ namespace std
basic_streambuf<_CharT, _Traits>* __sbout)
{
typedef typename _Traits::int_type int_type;
+ typedef typename _Traits::off_type off_type;
streamsize __ret = 0;
streamsize __bufsize = __sbin->in_avail();
streamsize __xtrct;
+ const off_type __size_opt =
+ __sbin->_M_buf_size_opt > 0 ? __sbin->_M_buf_size_opt : 1;
+
try
{
while (__bufsize != -1)
@@ -208,12 +212,34 @@ namespace std
}
else
{
- size_t __size =
- __sbin->_M_buf_size_opt > 0 ? __sbin->_M_buf_size_opt : 1;
- _CharT* __buf =
- static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __size));
- streamsize __charsread = __sbin->sgetn(__buf, __size);
- __xtrct = __sbout->sputn(__buf, __charsread);
+ streamsize __charsread;
+ const streamsize __size =
+ std::min(__size_opt, off_type(__sbout->_M_out_end -
+ __sbout->_M_out_cur));
+ if (__size > 1)
+ {
+ _CharT* __buf =
+ static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+ * __size));
+ // Since the next sputn cannot fail sgetn can be
+ // safely used.
+ __charsread = __sbin->sgetn(__buf, __size);
+ __xtrct = __sbout->sputn(__buf, __charsread);
+ }
+ else
+ {
+ __xtrct = __charsread = 0;
+ int_type __c = __sbin->sgetc();
+ while (!_Traits::eq_int_type(__c, _Traits::eof()))
+ {
+ ++__charsread;
+ if (_Traits::eq_int_type(__sbout->sputc(_Traits::to_char_type(__c)),
+ _Traits::eof()))
+ break;
+ ++__xtrct;
+ __c = __sbin->snextc();
+ }
+ }
__ret += __xtrct;
if (__xtrct != __charsread)
break;
diff --git a/libstdc++-v3/include/bits/streambuf_iterator.h b/libstdc++-v3/include/bits/streambuf_iterator.h
index c2dee887c4b..95def0b7e4d 100644
--- a/libstdc++-v3/include/bits/streambuf_iterator.h
+++ b/libstdc++-v3/include/bits/streambuf_iterator.h
@@ -202,7 +202,9 @@ namespace std
ostreambuf_iterator&
_M_put(const _CharT* __ws, streamsize __len)
{
- this->_M_sbuf->sputn(__ws, __len);
+ if (__builtin_expect(!_M_failed, true)
+ && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len, false))
+ _M_failed = true;
return *this;
}
};
diff --git a/libstdc++-v3/include/std/std_complex.h b/libstdc++-v3/include/std/std_complex.h
index 955a12ca249..87e4bcb4d26 100644
--- a/libstdc++-v3/include/std/std_complex.h
+++ b/libstdc++-v3/include/std/std_complex.h
@@ -456,7 +456,7 @@ namespace std
inline _Tp
norm(const complex<_Tp>& __z)
{
- return _Norm_helper<__is_floating<_Tp>::_M_type>::_S_do_it(__z);
+ return _Norm_helper<__is_floating<_Tp>::_M_type && !_GLIBCPP_FAST_MATH>::_S_do_it(__z);
}
template<typename _Tp>
diff --git a/libstdc++-v3/include/std/std_fstream.h b/libstdc++-v3/include/std/std_fstream.h
index 6dd75dd1bba..c5e34808d16 100644
--- a/libstdc++-v3/include/std/std_fstream.h
+++ b/libstdc++-v3/include/std/std_fstream.h
@@ -311,8 +311,11 @@ namespace std
virtual int
sync()
{
+ int __ret = 0;
bool __testput = this->_M_out_cur
&& this->_M_out_beg < this->_M_out_lim;
+ // Sync with stdio.
+ bool __sync = this->_M_buf_size <= 1;
// Make sure that the internal buffer resyncs its idea of
// the file position with the external file.
@@ -320,14 +323,19 @@ namespace std
{
// Need to restore current position after the write.
off_type __off = this->_M_out_cur - this->_M_out_lim;
- _M_really_overflow(); // _M_file.sync() will be called within
- if (__off)
- _M_file.seekoff(__off, ios_base::cur);
+
+ // _M_file.sync() will be called within
+ if (traits_type::eq_int_type(_M_really_overflow(),
+ traits_type::eof()))
+ __ret = -1;
+ else if (__off)
+ _M_file.seekoff(__off, ios_base::cur, __sync);
}
else
_M_file.sync();
+
_M_last_overflowed = false;
- return 0;
+ return __ret;
}
// [documentation is inherited]
@@ -401,13 +409,10 @@ namespace std
bool __testin = this->_M_mode & ios_base::in;
bool __testout = this->_M_mode & ios_base::out;
if (__testin)
- {
- this->_M_in_beg = this->_M_in_cur = this->_M_buf;
- this->_M_in_end = this->_M_buf + __off;
- }
+ this->setg(this->_M_buf, this->_M_buf, this->_M_buf + __off);
if (__testout)
{
- this->_M_out_beg = this->_M_out_cur = this->_M_buf;
+ this->setp(this->_M_buf, this->_M_buf + this->_M_buf_size);
this->_M_out_lim = this->_M_buf + __off;
}
_M_filepos = this->_M_buf + __off;
@@ -517,8 +522,7 @@ namespace std
* @c &sb to the base class initializer. Does not open any files
* (you haven't given it a filename to open).
*/
- basic_ifstream()
- : __istream_type(NULL), _M_filebuf()
+ basic_ifstream() : __istream_type(), _M_filebuf()
{ this->init(&_M_filebuf); }
/**
@@ -533,7 +537,7 @@ namespace std
*/
explicit
basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
- : __istream_type(NULL), _M_filebuf()
+ : __istream_type(), _M_filebuf()
{
this->init(&_M_filebuf);
this->open(__s, __mode);
@@ -640,8 +644,7 @@ namespace std
* @c &sb to the base class initializer. Does not open any files
* (you haven't given it a filename to open).
*/
- basic_ofstream()
- : __ostream_type(NULL), _M_filebuf()
+ basic_ofstream(): __ostream_type(), _M_filebuf()
{ this->init(&_M_filebuf); }
/**
@@ -658,7 +661,7 @@ namespace std
explicit
basic_ofstream(const char* __s,
ios_base::openmode __mode = ios_base::out|ios_base::trunc)
- : __ostream_type(NULL), _M_filebuf()
+ : __ostream_type(), _M_filebuf()
{
this->init(&_M_filebuf);
this->open(__s, __mode);
@@ -768,7 +771,7 @@ namespace std
* (you haven't given it a filename to open).
*/
basic_fstream()
- : __iostream_type(NULL), _M_filebuf()
+ : __iostream_type(), _M_filebuf()
{ this->init(&_M_filebuf); }
/**
diff --git a/libstdc++-v3/include/std/std_istream.h b/libstdc++-v3/include/std/std_istream.h
index aab3db3d7c2..616fd8ab10f 100644
--- a/libstdc++-v3/include/std/std_istream.h
+++ b/libstdc++-v3/include/std/std_istream.h
@@ -1,6 +1,7 @@
// Input streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003
+// 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
@@ -73,6 +74,14 @@ namespace std
typedef num_get<_CharT, __istreambuf_iter> __numget_type;
typedef ctype<_CharT> __ctype_type;
+ template<typename _CharT2, typename _Traits2>
+ friend basic_istream<_CharT2, _Traits2>&
+ operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2&);
+
+ template<typename _CharT2, typename _Traits2>
+ friend basic_istream<_CharT2, _Traits2>&
+ operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*);
+
protected:
// Data Members:
/**
@@ -93,11 +102,8 @@ namespace std
* their own stream buffer.
*/
explicit
- basic_istream(__streambuf_type* __sb)
- {
- this->init(__sb);
- _M_gcount = streamsize(0);
- }
+ basic_istream(__streambuf_type* __sb): _M_gcount(streamsize(0))
+ { this->init(__sb); }
/**
* @brief Base destructor.
@@ -565,6 +571,10 @@ namespace std
__istream_type&
seekg(off_type, ios_base::seekdir);
//@}
+
+ protected:
+ explicit
+ basic_istream(): _M_gcount(streamsize(0)) { }
};
/**
@@ -730,14 +740,19 @@ namespace std
*/
explicit
basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
- : __istream_type(__sb), __ostream_type(__sb)
- { }
+ : __istream_type(), __ostream_type()
+ { this->init(__sb); }
/**
* @brief Destructor does nothing.
*/
virtual
~basic_iostream() { }
+
+ protected:
+ explicit
+ basic_iostream() : __istream_type(), __ostream_type()
+ { }
};
// [27.6.1.4] standard basic_istream manipulators
diff --git a/libstdc++-v3/include/std/std_ostream.h b/libstdc++-v3/include/std/std_ostream.h
index 9f7c386f181..94b5a963763 100644
--- a/libstdc++-v3/include/std/std_ostream.h
+++ b/libstdc++-v3/include/std/std_ostream.h
@@ -73,6 +73,26 @@ namespace std
typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
typedef ctype<_CharT> __ctype_type;
+ template<typename _CharT2, typename _Traits2>
+ friend basic_ostream<_CharT2, _Traits2>&
+ operator<<(basic_ostream<_CharT2, _Traits2>&, _CharT2);
+
+ template<typename _Traits2>
+ friend basic_ostream<char, _Traits2>&
+ operator<<(basic_ostream<char, _Traits2>&, char);
+
+ template<typename _CharT2, typename _Traits2>
+ friend basic_ostream<_CharT2, _Traits2>&
+ operator<<(basic_ostream<_CharT2, _Traits2>&, const _CharT2*);
+
+ template<typename _Traits2>
+ friend basic_ostream<char, _Traits2>&
+ operator<<(basic_ostream<char, _Traits2>&, const char*);
+
+ template<typename _CharT2, typename _Traits2>
+ friend basic_ostream<_CharT2, _Traits2>&
+ operator<<(basic_ostream<_CharT2, _Traits2>&, const char*);
+
// [27.6.2.2] constructor/destructor
/**
* @brief Base constructor.
@@ -335,6 +355,10 @@ namespace std
*/
__ostream_type&
seekp(off_type, ios_base::seekdir);
+
+ protected:
+ explicit
+ basic_ostream() { }
};
/**
diff --git a/libstdc++-v3/include/std/std_sstream.h b/libstdc++-v3/include/std/std_sstream.h
index cb538b56304..6c0e139bf37 100644
--- a/libstdc++-v3/include/std/std_sstream.h
+++ b/libstdc++-v3/include/std/std_sstream.h
@@ -326,7 +326,7 @@ namespace std
*/
explicit
basic_istringstream(ios_base::openmode __mode = ios_base::in)
- : __istream_type(NULL), _M_stringbuf(__mode | ios_base::in)
+ : __istream_type(), _M_stringbuf(__mode | ios_base::in)
{ this->init(&_M_stringbuf); }
/**
@@ -347,7 +347,7 @@ namespace std
explicit
basic_istringstream(const __string_type& __str,
ios_base::openmode __mode = ios_base::in)
- : __istream_type(NULL), _M_stringbuf(__str, __mode | ios_base::in)
+ : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in)
{ this->init(&_M_stringbuf); }
/**
@@ -445,7 +445,7 @@ namespace std
*/
explicit
basic_ostringstream(ios_base::openmode __mode = ios_base::out)
- : __ostream_type(NULL), _M_stringbuf(__mode | ios_base::out)
+ : __ostream_type(), _M_stringbuf(__mode | ios_base::out)
{ this->init(&_M_stringbuf); }
/**
@@ -466,7 +466,7 @@ namespace std
explicit
basic_ostringstream(const __string_type& __str,
ios_base::openmode __mode = ios_base::out)
- : __ostream_type(NULL), _M_stringbuf(__str, __mode | ios_base::out)
+ : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out)
{ this->init(&_M_stringbuf); }
/**
@@ -562,7 +562,7 @@ namespace std
*/
explicit
basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
- : __iostream_type(NULL), _M_stringbuf(__m)
+ : __iostream_type(), _M_stringbuf(__m)
{ this->init(&_M_stringbuf); }
/**
@@ -581,7 +581,7 @@ namespace std
explicit
basic_stringstream(const __string_type& __str,
ios_base::openmode __m = ios_base::out | ios_base::in)
- : __iostream_type(NULL), _M_stringbuf(__str, __m)
+ : __iostream_type(), _M_stringbuf(__str, __m)
{ this->init(&_M_stringbuf); }
/**
diff --git a/libstdc++-v3/include/std/std_streambuf.h b/libstdc++-v3/include/std/std_streambuf.h
index 850f2015530..10687d29751 100644
--- a/libstdc++-v3/include/std/std_streambuf.h
+++ b/libstdc++-v3/include/std/std_streambuf.h
@@ -333,16 +333,6 @@ namespace std
}
}
- // Returns zero if the output buffer is full (-> overflow).
- off_type
- _M_out_buf_size()
- {
- if (_M_out_cur)
- return _M_out_end - _M_out_cur;
- else
- return off_type(0);
- }
-
public:
/// Destructor deallocates no buffer space.
virtual
diff --git a/libstdc++-v3/libsupc++/Makefile.am b/libstdc++-v3/libsupc++/Makefile.am
index 2b09a91e326..4fa9b948d04 100644
--- a/libstdc++-v3/libsupc++/Makefile.am
+++ b/libstdc++-v3/libsupc++/Makefile.am
@@ -99,21 +99,9 @@ sources = \
libsupc___la_SOURCES = $(sources)
libsupc__convenience_la_SOURCES = $(sources)
-glibcppinstalldir = @gxx_include_dir@
+glibcppinstalldir = $(gxx_include_dir)
glibcppinstall_HEADERS = $(headers)
-# Use special rules for pulling things out of libiberty. These
-# objects should be compiled with the "C" compiler, not the C++
-# compiler, and also should not use the C++ includes.
-C_COMPILE = \
- $(CC) $(DEFS) $(GCC_INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-
-# LTCOMPILE is copied from LTCXXCOMPILE below.
-LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared --mode=compile $(CC) \
- $(DEFS) $(GCC_INCLUDES) $(LIBSUPCXX_PICFLAGS) \
- $(AM_CPPFLAGS) $(CPPFLAGS)
-
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
@@ -126,6 +114,9 @@ AM_CXXFLAGS = \
$(OPTIMIZE_CXXFLAGS) \
$(CONFIG_CXXFLAGS)
+AM_MAKEFLAGS = \
+ "gxx_include_dir=$(gxx_include_dir)"
+
# libstdc++ libtool notes
# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in
index 9bb7bad1166..98395c4b822 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -164,13 +164,11 @@ OPTIMIZE_CXXFLAGS = @OPTIMIZE_CXXFLAGS@
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.in to see how they are set. See GLIBCPP_EXPORT_FLAGS
# NB: DEBUGFLAGS have to be at the end so that -O2 can be overridden.
-CONFIG_CXXFLAGS = \
- @SECTION_FLAGS@ @EXTRA_CXX_FLAGS@
+CONFIG_CXXFLAGS = @SECTION_FLAGS@ @EXTRA_CXX_FLAGS@
# Warning flags to use.
-WARN_CXXFLAGS = \
- @WARN_FLAGS@ $(WERROR) -fdiagnostics-show-location=once
+WARN_CXXFLAGS = @WARN_FLAGS@ $(WERROR) -fdiagnostics-show-location=once
LIBSUPCXX_CXXFLAGS = @LIBSUPCXX_PICFLAGS@
@@ -180,74 +178,30 @@ GLIBCPP_INCLUDES = @GLIBCPP_INCLUDES@
LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
GCC_INCLUDES = -I$(toplevel_srcdir)/gcc -I$(toplevel_srcdir)/include
-INCLUDES = \
- $(GCC_INCLUDES) $(GLIBCPP_INCLUDES) $(LIBSUPCXX_INCLUDES)
-
-
-headers = \
- exception new typeinfo cxxabi.h exception_defines.h
-
-
-sources = \
- del_op.cc \
- del_opnt.cc \
- del_opv.cc \
- del_opvnt.cc \
- eh_alloc.cc \
- eh_aux_runtime.cc \
- eh_catch.cc \
- eh_exception.cc \
- eh_globals.cc \
- eh_personality.cc \
- eh_term_handler.cc \
- eh_terminate.cc \
- eh_throw.cc \
- eh_type.cc \
- eh_unex_handler.cc \
- guard.cc \
- new_handler.cc \
- new_op.cc \
- new_opnt.cc \
- new_opv.cc \
- new_opvnt.cc \
- pure.cc \
- tinfo.cc \
- tinfo2.cc \
- vec.cc \
- vterminate.cc
+INCLUDES = $(GCC_INCLUDES) $(GLIBCPP_INCLUDES) $(LIBSUPCXX_INCLUDES)
-libsupc___la_SOURCES = $(sources)
-libsupc__convenience_la_SOURCES = $(sources)
+headers = exception new typeinfo cxxabi.h exception_defines.h
-glibcppinstalldir = @gxx_include_dir@
-glibcppinstall_HEADERS = $(headers)
-# Use special rules for pulling things out of libiberty. These
-# objects should be compiled with the "C" compiler, not the C++
-# compiler, and also should not use the C++ includes.
-C_COMPILE = \
- $(CC) $(DEFS) $(GCC_INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+sources = del_op.cc del_opnt.cc del_opv.cc del_opvnt.cc eh_alloc.cc eh_aux_runtime.cc eh_catch.cc eh_exception.cc eh_globals.cc eh_personality.cc eh_term_handler.cc eh_terminate.cc eh_throw.cc eh_type.cc eh_unex_handler.cc guard.cc new_handler.cc new_op.cc new_opnt.cc new_opv.cc new_opvnt.cc pure.cc tinfo.cc tinfo2.cc vec.cc vterminate.cc
-# LTCOMPILE is copied from LTCXXCOMPILE below.
-LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared --mode=compile $(CC) \
- $(DEFS) $(GCC_INCLUDES) $(LIBSUPCXX_PICFLAGS) \
- $(AM_CPPFLAGS) $(CPPFLAGS)
+libsupc___la_SOURCES = $(sources)
+libsupc__convenience_la_SOURCES = $(sources)
+glibcppinstalldir = $(gxx_include_dir)
+glibcppinstall_HEADERS = $(headers)
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion call for it.
-AM_CXXFLAGS = \
- -fno-implicit-templates \
- $(LIBSUPCXX_CXXFLAGS) \
- $(WARN_CXXFLAGS) \
- $(OPTIMIZE_CXXFLAGS) \
- $(CONFIG_CXXFLAGS)
+AM_CXXFLAGS = -fno-implicit-templates $(LIBSUPCXX_CXXFLAGS) $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
+
+
+AM_MAKEFLAGS = "gxx_include_dir=$(gxx_include_dir)"
# libstdc++ libtool notes
@@ -271,9 +225,7 @@ AM_CXXFLAGS = \
#
# We have to put --tag disable-shared after --tag CXX lest things
# CXX undo the affect of disable-shared.
-LTCXXCOMPILE = $(LIBTOOL) --tag CXX --tag disable-shared \
- --mode=compile $(CXX) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --tag CXX --tag disable-shared --mode=compile $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
# 3) We'd have a problem when building the shared libstdc++ object if
@@ -282,9 +234,7 @@ LTCXXCOMPILE = $(LIBTOOL) --tag CXX --tag disable-shared \
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
-CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared \
- --mode=link $(CXX) \
- @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
+CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared --mode=link $(CXX) @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
CONFIG_HEADER = ../config.h
CONFIG_CLEAN_FILES =
@@ -321,7 +271,7 @@ DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = gtar
+TAR = tar
GZIP_ENV = --best
SOURCES = $(libsupc__convenience_la_SOURCES) $(libsupc___la_SOURCES)
OBJECTS = $(libsupc__convenience_la_OBJECTS) $(libsupc___la_OBJECTS)
diff --git a/libstdc++-v3/libsupc++/demangle.h b/libstdc++-v3/libsupc++/demangle.h
deleted file mode 100644
index 3d0803b97f0..00000000000
--- a/libstdc++-v3/libsupc++/demangle.h
+++ /dev/null
@@ -1,2359 +0,0 @@
-// C++ IA64 / g++ v3 demangler -*- C++ -*-
-
-// Copyright (C) 2003 Free Software Foundation, Inc.
-// Written by Carlo Wood <carlo@alinoe.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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-#ifndef __DEMANGLER_H
-#define __DEMANGLER_H 1
-
-#include <limits>
-#include <vector>
-#include <string>
-#include <cctype>
-
-#ifndef _GLIBCPP_DEMANGLER_DEBUG
-#define _GLIBCPP_DEMANGLER_CWDEBUG 0
-#define _GLIBCPP_DEMANGLER_DEBUG(x)
-#define _GLIBCPP_DEMANGLER_DOUT(cntrl, data)
-#define _GLIBCPP_DEMANGLER_DOUT_ENTERING(x)
-#define _GLIBCPP_DEMANGLER_DOUT_ENTERING2(x)
-#define _GLIBCPP_DEMANGLER_RETURN \
- return M_result
-#define _GLIBCPP_DEMANGLER_RETURN2 \
- return M_result
-#define _GLIBCPP_DEMANGLER_FAILURE \
- do { M_result = false; return false; } while(0)
-#else
-#define _GLIBCPP_DEMANGLER_CWDEBUG 1
-#endif
-
-// The following defines change the behaviour of the demangler. The
-// default behaviour is that none of these macros is defined.
-
-// _GLIBCPP_DEMANGLER_STYLE_VOID
-// Default behaviour: int f()
-// Uses (void) instead of (): int f(void)
-
-// _GLIBCPP_DEMANGLER_STYLE_LITERAL
-// Default behaviour: (long)13,
-// (unsigned long long)19
-// Use extensions 'u', 'l' and 'll' for integral
-// literals (as in template arguments): 13l, 19ull
-
-// _GLIBCPP_DEMANGLER_STYLE_LITERAL_INT
-// Default behaviour: 4
-// Use also an explicit cast for int in literals: (int)4
-
-namespace __gnu_cxx
-{
- namespace demangler
- {
-
- enum substitution_nt
- {
- type,
- template_template_param,
- nested_name_prefix,
- nested_name_template_prefix,
- unscoped_template_name,
- };
-
- struct substitution_st
- {
- int M_start_pos;
- substitution_nt M_type;
- int M_number_of_prefixes;
-
- substitution_st(int start_pos,
- substitution_nt type,
- int number_of_prefixes)
- : M_start_pos(start_pos), M_type(type),
- M_number_of_prefixes(number_of_prefixes)
- { }
- };
-
- enum simple_qualifier_nt
- {
- complex_or_imaginary = 'G',
- pointer = 'P',
- reference = 'R'
- };
-
- enum cv_qualifier_nt
- {
- cv_qualifier = 'K'
- };
-
- enum param_qualifier_nt
- {
- vendor_extension = 'U',
- array = 'A',
- pointer_to_member = 'M'
- };
-
- template<typename Allocator>
- class qualifier;
-
- template<typename Allocator>
- class qualifier_list;
-
- template<typename Allocator>
- class session;
-
- template<typename Allocator>
- class qualifier
- {
- typedef std::basic_string<char, std::char_traits<char>, Allocator>
- string_type;
-
- private:
- char M_qualifier1;
- char M_qualifier2;
- char M_qualifier3;
- mutable unsigned char M_cnt;
- string_type M_optional_type;
- int M_start_pos;
- bool M_part_of_substitution;
-
- public:
- qualifier(int start_pos,
- simple_qualifier_nt simple_qualifier,
- int inside_substitution)
- : M_qualifier1(simple_qualifier),
- M_start_pos(start_pos),
- M_part_of_substitution(inside_substitution)
- { }
-
- qualifier(int start_pos,
- cv_qualifier_nt cv_qualifier,
- char const* start,
- int count,
- int inside_substitution)
- : M_qualifier1(start[0]),
- M_qualifier2((count > 1) ? start[1] : '\0'),
- M_qualifier3((count > 2) ? start[2] : '\0'),
- M_start_pos(start_pos),
- M_part_of_substitution(inside_substitution)
- { }
-
- qualifier(int start_pos,
- param_qualifier_nt param_qualifier,
- string_type optional_type,
- int inside_substitution)
- : M_qualifier1(param_qualifier),
- M_optional_type(optional_type),
- M_start_pos(start_pos),
- M_part_of_substitution(inside_substitution)
- { }
-
- int
- start_pos(void) const
- { return M_start_pos; }
-
- char
- first_qualifier(void) const
- { M_cnt = 1; return M_qualifier1; }
-
- char
- next_qualifier(void) const
- {
- return (++M_cnt == 2) ? M_qualifier2
- : ((M_cnt == 3) ? M_qualifier3 : 0);
- }
-
- string_type const&
- optional_type(void) const
- { return M_optional_type; }
-
- bool
- part_of_substitution(void) const
- { return M_part_of_substitution; }
-
- };
-
- template<typename Allocator>
- class qualifier_list
- {
- typedef std::basic_string<char, std::char_traits<char>, Allocator>
- string_type;
-
- private:
- bool M_printing_suppressed;
- std::vector<qualifier<Allocator>, Allocator> M_qualifier_starts;
- session<Allocator>& M_demangler;
-
- public:
- qualifier_list(session<Allocator>& demangler_obj)
- : M_printing_suppressed(false), M_demangler(demangler_obj)
- { }
-
- void
- add_qualifier_start(simple_qualifier_nt simple_qualifier,
- int start_pos,
- int inside_substitution)
- { M_qualifier_starts.
- push_back(qualifier<Allocator>(start_pos,
- simple_qualifier, inside_substitution)); }
-
- void
- add_qualifier_start(cv_qualifier_nt cv_qualifier,
- int start_pos,
- int count,
- int inside_substitution)
- { M_qualifier_starts.
- push_back(qualifier<Allocator>(start_pos,
- cv_qualifier, &M_demangler.M_str[start_pos],
- count, inside_substitution)); }
-
- void
- add_qualifier_start(param_qualifier_nt param_qualifier,
- int start_pos,
- string_type optional_type,
- int inside_substitution)
- { M_qualifier_starts.
- push_back(qualifier<Allocator>(start_pos,
- param_qualifier, optional_type, inside_substitution)); }
-
- void
- decode_qualifiers(string_type& prefix,
- string_type& postfix,
- bool member_function_pointer_qualifiers);
-
- bool
- suppressed(void) const
- { return M_printing_suppressed; }
-
- void
- printing_suppressed(void)
- { M_printing_suppressed = true; }
-
- size_t
- size(void) const
- { return M_qualifier_starts.size(); }
-
- };
-
- template<typename Allocator>
- class session
- {
- friend class qualifier_list<Allocator>;
- typedef std::basic_string<char, std::char_traits<char>, Allocator>
- string_type;
-
- private:
- char const* M_str;
- int M_pos;
- int M_maxpos;
- bool M_result;
- int M_inside_template_args;
- int M_inside_type;
- int M_inside_substitution;
- bool M_saw_destructor;
- bool M_name_is_cdtor;
- bool M_name_is_template;
- bool M_name_is_conversion_operator;
- bool M_template_args_need_space;
- string_type M_function_name;
- std::vector<int, Allocator> M_template_arg_pos;
- int M_template_arg_pos_offset;
- std::vector<substitution_st, Allocator> M_substitutions_pos;
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- bool M_inside_add_substitution;
-#endif
-
- public:
- explicit session(char const* in, int len)
- : M_str(in), M_pos(0), M_maxpos(len - 1), M_result(true),
- M_inside_template_args(0), M_inside_type(0),
- M_inside_substitution(0), M_saw_destructor(false),
- M_name_is_cdtor(false), M_name_is_template(false),
- M_name_is_conversion_operator(false),
- M_template_args_need_space(false), M_template_arg_pos_offset(0)
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- , M_inside_add_substitution(false)
-#endif
- { }
-
- static int
- decode_encoding(string_type& output, char const* input, int len);
-
- bool
- decode_type_with_postfix(string_type& prefix,
- string_type& postfix,
- qualifier_list<Allocator>* qualifiers = NULL);
-
- bool
- decode_type(string_type& output,
- qualifier_list<Allocator>* qualifiers = NULL)
- {
- string_type postfix;
- bool res = decode_type_with_postfix(output, postfix, qualifiers);
- output += postfix;
- return res;
- }
-
- bool
- remaining_input_characters(void) const
- { return current() != 0; }
-
- private:
- char
- current(void) const
- { return (M_pos > M_maxpos) ? 0 : M_str[M_pos]; }
-
- char
- next(void)
- { return (M_pos >= M_maxpos) ? 0 : M_str[++M_pos]; }
-
- char
- eat_current(void)
- { return (M_pos > M_maxpos) ? 0 : M_str[M_pos++]; }
-
- void
- store(int& saved_pos)
- { saved_pos = M_pos; }
-
- void
- restore(int saved_pos)
- { M_pos = saved_pos; M_result = true; }
-
- void
- add_substitution(int start_pos,
- substitution_nt sub_type,
- int number_of_prefixes);
-
- bool decode_bare_function_type(string_type& output);
- bool decode_builtin_type(string_type& output);
- bool decode_call_offset(string_type& output);
- bool decode_class_enum_type(string_type& output);
- bool decode_expression(string_type& output);
- bool decode_literal(string_type& output);
- bool decode_local_name(string_type& output);
- bool decode_name(string_type& output,
- string_type& nested_name_qualifiers);
- bool decode_nested_name(string_type& output,
- string_type& qualifiers);
- bool decode_number(string_type& output);
- bool decode_operator_name(string_type& output);
- bool decode_source_name(string_type& output);
- bool decode_substitution(string_type& output,
- qualifier_list<Allocator>* qualifiers = NULL);
- bool decode_template_args(string_type& output);
- bool decode_template_param(string_type& output,
- qualifier_list<Allocator>* qualifiers = NULL);
- bool decode_unqualified_name(string_type& output);
- bool decode_unscoped_name(string_type& output);
- bool decode_decimal_integer(string_type& output);
- bool decode_special_name(string_type& output);
- };
-
- template<typename Allocator>
-#if !_GLIBCPP_DEMANGLER_CWDEBUG
- inline
-#endif
- void
- session<Allocator>::add_substitution(int start_pos,
- substitution_nt sub_type,
- int number_of_prefixes = 0)
- {
- if (!M_inside_substitution)
- {
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- if (M_inside_add_substitution)
- return;
-#endif
- M_substitutions_pos.
- push_back(substitution_st(start_pos,
- sub_type, number_of_prefixes));
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- if (!DEBUGCHANNELS::dc::demangler.is_on())
- return;
- string_type substitution_name("S");
- int n = M_substitutions_pos.size() - 1;
- if (n > 0)
- substitution_name += (n <= 10) ? (char)(n + '0' - 1)
- : (char)(n + 'A' - 11);
- substitution_name += '_';
- string_type subst;
- int saved_pos = M_pos;
- M_pos = start_pos;
- M_inside_add_substitution = true;
- _GLIBCPP_DEMANGLER_DEBUG( dc::demangler.off() );
- switch(sub_type)
- {
- case type:
- decode_type(subst);
- break;
- case template_template_param:
- decode_template_param(subst);
- break;
- case nested_name_prefix:
- case nested_name_template_prefix:
- for (int cnt = number_of_prefixes; cnt > 0; --cnt)
- {
- if (current() == 'I')
- {
- subst += ' ';
- decode_template_args(subst);
- }
- else
- {
- if (cnt < number_of_prefixes)
- subst += "::";
- if (current() == 'S')
- decode_substitution(subst);
- else
- decode_unqualified_name(subst);
- }
- }
- break;
- case unscoped_template_name:
- decode_unscoped_name(subst);
- break;
- }
- M_pos = saved_pos;
- _GLIBCPP_DEMANGLER_DEBUG( dc::demangler.on() );
- _GLIBCPP_DEMANGLER_DOUT(dc::demangler,
- "Adding substitution " << substitution_name
- << " : " << subst
- << " (from " << location_ct((char*)__builtin_return_address(0)
- + builtin_return_address_offset)
- << " <- " << location_ct((char*)__builtin_return_address(1)
- + builtin_return_address_offset)
- << " <- " << location_ct((char*)__builtin_return_address(2)
- + builtin_return_address_offset)
- << ").");
- M_inside_add_substitution = false;
-#endif
- }
- }
-
- //
- // <decimal-integer> ::= 0
- // ::= 1|2|3|4|5|6|7|8|9 [<digit>+]
- // <digit> ::= 0|1|2|3|4|5|6|7|8|9
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_decimal_integer(string_type& output)
- {
- char c = current();
- if (c == '0')
- {
- output += '0';
- eat_current();
- }
- else if (!std::isdigit(c))
- M_result = false;
- else
- {
- do
- {
- output += c;
- }
- while (std::isdigit((c = next())));
- }
- return M_result;
- }
-
- // <number> ::= [n] <decimal-integer>
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_number(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_number");
- if (current() != 'n')
- decode_decimal_integer(output);
- else
- {
- output += '-';
- eat_current();
- decode_decimal_integer(output);
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <builtin-type> ::= v # void
- // ::= w # wchar_t
- // ::= b # bool
- // ::= c # char
- // ::= a # signed char
- // ::= h # unsigned char
- // ::= s # short
- // ::= t # unsigned short
- // ::= i # int
- // ::= j # unsigned int
- // ::= l # long
- // ::= m # unsigned long
- // ::= x # long long, __int64
- // ::= y # unsigned long long, __int64
- // ::= n # __int128
- // ::= o # unsigned __int128
- // ::= f # float
- // ::= d # double
- // ::= e # long double, __float80
- // ::= g # __float128
- // ::= z # ellipsis
- // ::= u <source-name> # vendor extended type
- //
- char const* const builtin_type_c[26] =
- {
- "signed char", // a
- "bool", // b
- "char", // c
- "double", // d
- "long double", // e
- "float", // f
- "__float128", // g
- "unsigned char", // h
- "int", // i
- "unsigned int", // j
- NULL, // k
- "long", // l
- "unsigned long", // m
- "__int128", // n
- "unsigned __int128", // o
- NULL, // p
- NULL, // q
- NULL, // r
- "short", // s
- "unsigned short", // t
- NULL, // u
- "void", // v
- "wchar_t", // w
- "long long", // x
- "unsigned long long", // y
- "..." // z
- };
-
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_builtin_type(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_builtin_type");
- char const* bt;
- if (!islower(current()) || !(bt = builtin_type_c[current() - 'a']))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += bt;
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <class-enum-type> ::= <name>
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_class_enum_type(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_class_enum_type");
- string_type nested_name_qualifiers;
- if (!decode_name(output, nested_name_qualifiers))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += nested_name_qualifiers;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <substitution> ::=
- // S <seq-id> _
- // S_
- // St # ::std::
- // Sa # ::std::allocator
- // Sb # ::std::basic_string
- // Ss # ::std::basic_string<char, std::char_traits<char>,
- // std::allocator<char> >
- // Si # ::std::basic_istream<char, std::char_traits<char> >
- // So # ::std::basic_ostream<char, std::char_traits<char> >
- // Sd # ::std::basic_iostream<char, std::char_traits<char> >
- //
- // <seq-id> ::=
- // 0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
- // [<seq-id>] # Base 36 number
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_substitution(string_type& output,
- qualifier_list<Allocator>* qualifiers)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_substitution");
- unsigned int value = 0;
- char c = next();
- if (c != '_')
- {
- switch(c)
- {
- case 'a':
- {
- output += "std::allocator";
- if (!M_inside_template_args)
- {
- M_function_name = "allocator";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- case 'b':
- {
- output += "std::basic_string";
- if (!M_inside_template_args)
- {
- M_function_name = "basic_string";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- case 'd':
- output += "std::iostream";
- if (!M_inside_template_args)
- {
- M_function_name = "iostream";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- case 'i':
- output += "std::istream";
- if (!M_inside_template_args)
- {
- M_function_name = "istream";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- case 'o':
- output += "std::ostream";
- if (!M_inside_template_args)
- {
- M_function_name = "ostream";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- case 's':
- output += "std::string";
- if (!M_inside_template_args)
- {
- M_function_name = "string";
- M_name_is_template = true;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- }
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- case 't':
- output += "std";
- eat_current();
- if (qualifiers)
- qualifiers->printing_suppressed();
- _GLIBCPP_DEMANGLER_RETURN;
- default:
- for(;; c = next())
- {
- if (std::isdigit(c))
- value = value * 36 + c - '0';
- else if (isupper(c))
- value = value * 36 + c - 'A' + 10;
- else if (c == '_')
- break;
- else
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- ++value;
- break;
- }
- }
- eat_current();
- if (value >= M_substitutions_pos.size() ||
- M_inside_type > 20) // Rather than core dump.
- _GLIBCPP_DEMANGLER_FAILURE;
- ++M_inside_substitution;
- int saved_pos = M_pos;
- substitution_st& substitution(M_substitutions_pos[value]);
- M_pos = substitution.M_start_pos;
- switch(substitution.M_type)
- {
- case type:
- decode_type(output, qualifiers);
- break;
- case template_template_param:
- decode_template_param(output, qualifiers);
- break;
- case nested_name_prefix:
- case nested_name_template_prefix:
- for (int cnt = substitution.M_number_of_prefixes; cnt > 0; --cnt)
- {
- if (current() == 'I')
- {
- if (M_template_args_need_space)
- output += ' ';
- M_template_args_need_space = false;
- if (!decode_template_args(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else
- {
- if (cnt < substitution.M_number_of_prefixes)
- output += "::";
- if (current() == 'S')
- {
- if (!decode_substitution(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else if (!decode_unqualified_name(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- }
- if (qualifiers)
- qualifiers->printing_suppressed();
- break;
- case unscoped_template_name:
- decode_unscoped_name(output);
- if (qualifiers)
- qualifiers->printing_suppressed();
- break;
- }
- M_pos = saved_pos;
- --M_inside_substitution;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <template-param> ::= T_ # first template parameter
- // ::= T <parameter-2 non-negative number> _
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_template_param(string_type& output,
- qualifier_list<Allocator>* qualifiers)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_template_parameter");
- if (current() != 'T')
- _GLIBCPP_DEMANGLER_FAILURE;
- unsigned int value = 0;
- char c;
- if ((c = next()) != '_')
- {
- while(std::isdigit(c))
- {
- value = value * 10 + c - '0';
- c = next();
- }
- ++value;
- }
- if (eat_current() != '_')
- _GLIBCPP_DEMANGLER_FAILURE;
- value += M_template_arg_pos_offset;
- if (value >= M_template_arg_pos.size())
- _GLIBCPP_DEMANGLER_FAILURE;
- int saved_pos = M_pos;
- M_pos = M_template_arg_pos[value];
- if (M_inside_type > 20) // Rather than core dump.
- _GLIBCPP_DEMANGLER_FAILURE;
- ++M_inside_substitution;
- if (current() == 'X')
- {
- eat_current();
- decode_expression(output);
- }
- else if (current() == 'L')
- decode_literal(output);
- else
- decode_type(output, qualifiers);
- --M_inside_substitution;
- M_pos = saved_pos;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- template<typename Allocator>
- bool
- session<Allocator>::decode_literal(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_literal");
- eat_current(); // Eat the 'L'.
- if (current() == '_')
- {
- if (next() != 'Z')
- _GLIBCPP_DEMANGLER_FAILURE;
- eat_current();
- if ((M_pos += decode_encoding(output, M_str + M_pos,
- M_maxpos - M_pos + 1)) < 0)
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else
- {
- // Special cases
- if (current() == 'b')
- {
- if (next() == '0')
- output += "false";
- else
- output += "true";
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- char c = current();
-#ifdef _GLIBCPP_DEMANGLER_STYLE_LITERAL
- if (c == 'i' || c == 'j' || c == 'l' ||
- c == 'm' || c == 'x' || c == 'y')
- eat_current();
- else
-#else
-#ifndef _GLIBCPP_DEMANGLER_STYLE_LITERAL_INT
- if (c == 'i')
- eat_current();
- else
-#endif
-#endif
- {
- output += '(';
- if (!decode_type(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += ')';
- }
- if (!decode_number(output))
- _GLIBCPP_DEMANGLER_FAILURE;
-#ifdef _GLIBCPP_DEMANGLER_STYLE_LITERAL
- if (c == 'j' || c == 'm' || c == 'y')
- output += 'u';
- if (c == 'l' || c == 'm')
- output += 'l';
- if (c == 'x' || c == 'y')
- output += "ll";
-#endif
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <operator-name> ::=
- // nw # new
- // na # new[]
- // dl # delete
- // da # delete[]
- // ng # - (unary)
- // ad # & (unary)
- // de # * (unary)
- // co # ~
- // pl # +
- // mi # -
- // ml # *
- // dv # /
- // rm # %
- // an # &
- // or # |
- // eo # ^
- // aS # =
- // pL # +=
- // mI # -=
- // mL # *=
- // dV # /=
- // rM # %=
- // aN # &=
- // oR # |=
- // eO # ^=
- // ls # <<
- // rs # >>
- // lS # <<=
- // rS # >>=
- // eq # ==
- // ne # !=
- // lt # <
- // gt # >
- // le # <=
- // ge # >=
- // nt # !
- // aa # &&
- // oo # ||
- // pp # ++
- // mm # --
- // cm # ,
- // pm # ->*
- // pt # ->
- // cl # ()
- // ix # []
- // qu # ?
- // sz # sizeof
- // sr # scope resolution (::), see below
- // cv <type> # (cast)
- // v <digit> <source-name> # vendor extended operator
- //
- //
- // Symbol operator codes exist of two characters, we need to find a
- // quick hash so that their names can be looked up in a table.
- //
- // The puzzle :)
- // Shift the rows so that there is at most one character per column.
- //
- // A perfect solution:
- // horizontal
- // ..................................... offset + 'a'
- // a, ||a||d|||||||||n||||s|||||||||||||||||| 2
- // c, || || ||lm|o||| |||| |||||||||||||||||| -3
- // d, || a| |e | ||l |||| |||v|||||||||||||| 3
- // e, || | | o q| |||| ||| |||||||||||||| -4
- // g, |e | | | t||| ||| |||||||||||||| -3
- // i, | | | | ||| ||| ||||||||||x||| 12
- // l, | | | e ||| ||| ||st|||||| ||| 9
- // m, | | | ||| ||| |i lm|||| ||| 18
- // n, a e g ||t |w| | |||| ||| 0
- // o, || | | | ||o| r|| 19
- // p, lm p | t || | || 6
- // q, | || u || 14
- // r, | |m |s 20
- // s, r z | 6
- // .....................................
- // ^ ^__ second character
- // |___ first character
- //
-
- // Putting that solution in tables:
-
- char const offset_table_c [1 + CHAR_MAX - CHAR_MIN ] =
- {
- 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,
- 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,
-#if (CHAR_MIN < 0)
- // Add -CHAR_MIN extra zeroes (128):
- 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,
- 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,
- 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,
- // a b c d e f g h i j k
- 0, -95, 0,-100, -94,-101, 0,-100, 0, -85, 0, 0,
- // l m n o p q r s t u v
- -88, -79, -97, -78, -91, -83, -77, -91, 0, 0, 0,
-#else
- // a b c d e f g h i j k
- 0, 161, 0, 156, 162, 155, 0, 156, 0, 171, 0, 0,
- // l m n o p q r s t u v
- 168, 177, 159, 178, 165, 173, 179, 165, 0, 0, 0,
-#endif
- // ... more zeros
- };
-
- struct entry_st
- {
- char const* opcode;
- char const* symbol_name;
- bool unary;
- };
-
- entry_st const symbol_name_table_c[39] = {
- { "na", "operator new[]", true },
- { "ge", "operator>=", false },
- { "aa", "operator&&", false },
- { "da", "operator delete[]", true },
- { "ne", "operator!=", false },
- { "ad", "operator&", true }, // unary
- { "ng", "operator-", true }, // unary
- { "de", "operator*", true }, // unary
- { "cl", "operator()", true },
- { "cm", "operator,", false },
- { "eo=", "operator^", false },
- { "co", "operator~", false },
- { "eq", "operator==", false },
- { "le", "operator<=", false },
- { "dl", "operator delete", true },
- { "an=", "operator&", false },
- { "gt", "operator>", false },
- { "pl=", "operator+", false },
- { "pm", "operator->*", false },
- { "nt", "operator!", true },
- { "as=", "operator", false },
- { "pp", "operator++", true },
- { "nw", "operator new", true },
- { "sr", "::", true },
- { "dv=", "operator/", false },
- { "pt", "operator->", false },
- { "mi=", "operator-", false },
- { "ls=", "operator<<", false },
- { "lt", "operator<", false },
- { "ml=", "operator*", false },
- { "mm", "operator--", true },
- { "sz", "sizeof", true },
- { "rm=", "operator%", false },
- { "oo", "operator||", false },
- { "qu", "operator?", false },
- { "ix", "operator[]", true },
- { "or=", "operator|", false },
- { "", NULL, false },
- { "rs=", "operator>>", false }
- };
-
- template<typename Allocator>
- bool
- session<Allocator>::decode_operator_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_operator_name");
-
- char opcode0 = current();
- char opcode1 = tolower(next());
-
- register char hash;
- if ((hash = offset_table_c[opcode0 - CHAR_MIN]))
- {
- hash += opcode1;
- if (
-#if (CHAR_MIN < 0)
- hash >= 0 &&
-#endif
- hash < 39)
- {
- int index = static_cast<int>(static_cast<unsigned char>(hash));
- entry_st entry = symbol_name_table_c[index];
- if (entry.opcode[0] == opcode0 && entry.opcode[1] == opcode1
- && (opcode1 == current() || entry.opcode[2] == '='))
- {
- output += entry.symbol_name;
- if (opcode1 != current())
- output += '=';
- eat_current();
- if (hash == 27 || hash == 28)
- M_template_args_need_space = true;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else if (opcode0 == 'c' && opcode1 == 'v')
- {
- eat_current();
- output += "operator ";
- if (current() == 'T')
- {
- // This is a templated cast operator.
- // It must be of the form "cvT_I...E".
- // Let M_template_arg_pos already point
- // to the template argument.
- M_template_arg_pos_offset = M_template_arg_pos.size();
- M_template_arg_pos.push_back(M_pos + 3);
- }
- if (!decode_type(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (!M_inside_template_args)
- M_name_is_conversion_operator = true;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- }
- }
- _GLIBCPP_DEMANGLER_FAILURE;
- }
-
- //
- // <expression> ::= <unary operator-name> <expression>
- // ::= <binary operator-name> <expression> <expression>
- // ::= <expr-primary>
- //
- // <expr-primary> ::= <template-param> # Starts with a T
- // ::= L <type> <value number> E # literal
- // ::= L <mangled-name> E # external name
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_expression(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_expression");
- if (current() == 'T')
- {
- if (!decode_template_param(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else if (current() == 'L')
- {
- if (!decode_literal(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() != 'E')
- _GLIBCPP_DEMANGLER_FAILURE;
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else
- {
- char opcode0 = current();
- char opcode1 = tolower(next());
-
- register char hash;
- if ((hash = offset_table_c[opcode0 - CHAR_MIN]))
- {
- hash += opcode1;
- if (
-#if (CHAR_MIN < 0)
- hash >= 0 &&
-#endif
- hash < 39)
- {
- int index = static_cast<int>(static_cast<unsigned char>(hash));
- entry_st entry = symbol_name_table_c[index];
- if (entry.opcode[0] == opcode0 && entry.opcode[1] == opcode1
- && (opcode1 == current() || entry.opcode[2] == '='))
- {
- char const* p = entry.symbol_name;
- if (!strncmp("operator", p, 8))
- p += 8;
- if (*p == ' ')
- ++p;
- if (entry.unary)
- output += p;
- bool is_eq = (opcode1 != current());
- eat_current();
- output += '(';
- if (!decode_expression(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += ')';
- if (!entry.unary)
- {
- output += ' ';
- output += p;
- if (is_eq)
- output += '=';
- output += ' ';
- output += '(';
- if (!decode_expression(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += ')';
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
- }
- }
- }
- _GLIBCPP_DEMANGLER_FAILURE;
- }
-
- //
- // <template-args> ::= I <template-arg>+ E
- // <template-arg> ::= <type> # type or template
- // ::= L <type> <value number> E # literal
- // ::= L_Z <encoding> E # external name
- // ::= X <expression> E # expression
- template<typename Allocator>
- bool
- session<Allocator>::decode_template_args(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_template_args");
- if (eat_current() != 'I')
- _GLIBCPP_DEMANGLER_FAILURE;
- int prev_size = M_template_arg_pos.size();
- ++M_inside_template_args;
- if (M_template_args_need_space)
- {
- output += ' ';
- M_template_args_need_space = false;
- }
- output += '<';
- for(;;)
- {
- if (M_inside_template_args == 1 && !M_inside_type)
- M_template_arg_pos.push_back(M_pos);
- if (current() == 'X')
- {
- eat_current();
- if (!decode_expression(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() != 'E')
- _GLIBCPP_DEMANGLER_FAILURE;
- eat_current();
- }
- else if (current() == 'L')
- {
- if (!decode_literal(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() != 'E')
- _GLIBCPP_DEMANGLER_FAILURE;
- eat_current();
- }
- else if (!decode_type(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() == 'E')
- break;
- output += ", ";
- }
- eat_current();
- if (*(output.rbegin()) == '>')
- output += ' ';
- output += '>';
- --M_inside_template_args;
- if (!M_inside_template_args && !M_inside_type)
- {
- M_name_is_template = true;
- M_template_arg_pos_offset = prev_size;
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <bare-function-type> ::=
- // <signature type>+ # types are parameter types
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_bare_function_type(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_bare_function_type");
- if (M_saw_destructor)
- {
- if (eat_current() != 'v' || (current() != 'E' && current() != 0))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += "()";
- M_saw_destructor = false;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-#ifndef _GLIBCPP_DEMANGLER_STYLE_VOID
- if (current() == 'v')
- {
- eat_current();
- if (current() != 'E' && current() != 0)
- _GLIBCPP_DEMANGLER_FAILURE;
- output += "()";
- M_saw_destructor = false;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-#endif
- output += '(';
- M_template_args_need_space = false;
- if (!decode_type(output)) // Must have at least one parameter.
- _GLIBCPP_DEMANGLER_FAILURE;
- while (current() != 'E' && current() != 0)
- {
- output += ", ";
- if (!decode_type(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- output += ')';
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <type> ::=
- // <builtin-type> # Starts with a lower case character != r.
- // <function-type> # Starts with F
- // <class-enum-type> # Starts with N, S, C, D, Z, a digit or a lower
- // # case character. Since a lower case character
- // # would be an operator name, that would be an
- // # error. The S is a substitution or St
- // # (::std::). A 'C' would be a constructor and
- // # thus also an error.
- // <template-param> # Starts with T
- // <substitution> # Starts with S
- // <template-template-param> <template-args> # Starts with T or S,
- // # equivalent with the above.
- //
- // <array-type> # Starts with A
- // <pointer-to-member-type> # Starts with M
- // <CV-qualifiers> <type> # Starts with r, V or K
- // P <type> # pointer-to # Starts with P
- // R <type> # reference-to # Starts with R
- // C <type> # complex (C 2000) # Starts with C
- // G <type> # imaginary (C 2000)# Starts with G
- // U <source-name> <type> # vendor extended type qualifier,
- // # starts with U
- //
- // <template-template-param> ::= <template-param>
- // ::= <substitution>
-
- // My own analysis of how to decode qualifiers:
- //
- // F is a <function-type>, <T> is a <builtin-type>, <class-enum-type>,
- // <template-param> or <template-template-param> <template-args>.
- // <Q> represents a series of qualifiers (not G or C).
- // <C> is an unqualified type.
- // <R> is a qualified type.
- // <B> is the bare-function-type without return type.
- // <I> is the array index.
- // Substitutions:
- // <Q>M<C><Q2>F<R><B>E ==> R (C::*Q)B Q2 "<C>", "F<R><B>E"
- // (<R> and <B> recursive),
- // "M<C><Q2>F<R><B>E".
- // <Q>F<R><B>E ==> R (Q)B "<R>", "<B>" (<B> recursive)
- // and "F<R><B>E".
- //
- // Note that if <R> has postfix qualifiers (an array), then those
- // are added AFTER the (member) function type. For example:
- // <Q>FPA<R><B>E ==> R (*(Q)B) [], where the PA added the prefix
- // "(*" and the postfix ") []".
- //
- // <Q>G<T> ==> imaginary T Q "<T>", "G<T>" (<T> recursive).
- // <Q>C<T> ==> complex T Q "<T>", "C<T>" (<T> recursive).
- // <Q><T> ==> T Q "<T>" (<T> recursive).
- //
- // where <Q> is any of:
- //
- // <Q>P ==> *Q "P..."
- // <Q>R ==> &Q "R..."
- // <Q>[K|V|r]+ ==> [ const| volatile| restrict]+Q "KVr..."
- // <Q>U<S> ==> SQ "U<S>..."
- // <Q>M<C> ==> C::*Q "M<C>..." (<C> recurs.)
- // A<I> ==> [I] "A<I>..." (<I> recurs.)
- // <Q>A<I> ==> (Q) [I] "A<I>..." (<I> recurs.)
- // Note that when <Q> ends on an A<I2> then the brackets are omitted:
- // A<I2>A<I> ==> [I2][I]
- //
- // A <substitution> is handled with an input position switch during which
- // new substitutions are turned off. Because recursive handling of types
- // (and therefore the order in which substitutions must be generated) must
- // be done left to right, but the generation of Q needs processing right to
- // left, substitutions per <type> are generated by reading the input left
- // to right and marking the starts of all substitutions only - implicitly
- // finishing them at the end of the type. Then the output and real
- // substitutions are generated.
- //
- // The following comment was for the demangling of g++ version 3.0.x. The
- // mangling (and I believe even the ABI description) have been fixed now
- // (as of g++ version 3.1).
- //
- // g++ 3.0.x only:
- // The ABI specifies for pointer-to-member function types the format
- // <Q>M<T>F<R><B>E. In other words, the qualifier <Q2> (see above) is
- // implicitely contained in <T> instead of explicitly part of the M format.
- // I am convinced that this is a bug in the ABI. Unfortunately, this is
- // how we have to demangle things as it has a direct impact on the order
- // in which substitutions are stored. This ill-formed design results in
- // rather ill-formed demangler code too however :/
- //
- // <Q2> is now explicitely part of the M format.
- // For some weird reason, g++ (3.2.1) does not add substitutions for
- // qualified member function pointers. I think that is another bug.
- //
- template<typename Allocator>
- void
- qualifier_list<Allocator>::decode_qualifiers(
- string_type& prefix,
- string_type& postfix,
- bool member_function_pointer_qualifiers = false)
- {
- for(typename std::vector<qualifier<Allocator>, Allocator>::
- reverse_iterator iter = M_qualifier_starts.rbegin();
- iter != M_qualifier_starts.rend();)
- {
- if (!member_function_pointer_qualifiers
- && !(*iter).part_of_substitution())
- {
- int saved_inside_substitution = M_demangler.M_inside_substitution;
- M_demangler.M_inside_substitution = 0;
- M_demangler.add_substitution((*iter).start_pos(), type);
- M_demangler.M_inside_substitution = saved_inside_substitution;
- }
- char qualifier_char = (*iter).first_qualifier();
- for(; qualifier_char; qualifier_char = (*iter).next_qualifier())
- {
- switch(qualifier_char)
- {
- case 'P':
- prefix += "*";
- break;
- case 'R':
- prefix += "&";
- break;
- case 'K':
- prefix += " const";
- continue;
- case 'V':
- prefix += " volatile";
- continue;
- case 'r':
- prefix += " restrict";
- continue;
- case 'A':
- {
- string_type index = (*iter).optional_type();
- if (++iter != M_qualifier_starts.rend()
- && (*iter).first_qualifier() != 'A')
- {
- prefix += " (";
- postfix = ") [" + index + "]" + postfix;
- }
- else
- postfix = "[" + index + "]" + postfix;
- break;
- }
- case 'M':
- prefix += " ";
- prefix += (*iter).optional_type();
- prefix += "::*";
- break;
- case 'U':
- prefix += " ";
- prefix += (*iter).optional_type();
- break;
- case 'G': // Only here so we added a substitution.
- break;
- }
- break;
- }
- if (qualifier_char != 'A')
- ++iter;
- }
- M_printing_suppressed = false;
- }
-
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_type_with_postfix(
- string_type& prefix, string_type& postfix,
- qualifier_list<Allocator>* qualifiers)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING2
- (qualifiers ? "decode_type" : "decode_type[with qualifiers]");
- ++M_inside_type;
- bool recursive_template_param_or_substitution_call;
- if (!(recursive_template_param_or_substitution_call = qualifiers))
- qualifiers = new qualifier_list<Allocator>(*this);
- // First eat all qualifiers.
- bool failure = false;
- for(;;) // So we can use 'continue' to eat the next qualifier.
- {
- int start_pos = M_pos;
- switch(current())
- {
- case 'P':
- qualifiers->add_qualifier_start(pointer, start_pos,
- M_inside_substitution);
- eat_current();
- continue;
- case 'R':
- qualifiers->add_qualifier_start(reference, start_pos,
- M_inside_substitution);
- eat_current();
- continue;
- case 'K':
- case 'V':
- case 'r':
- {
- char c;
- int count = 0;
- do
- {
- ++count;
- c = next();
- }
- while(c == 'K' || c == 'V' || c == 'r');
- qualifiers->add_qualifier_start(cv_qualifier, start_pos, count,
- M_inside_substitution);
- continue;
- }
- case 'U':
- {
- eat_current();
- string_type source_name;
- if (!decode_source_name(source_name))
- {
- failure = true;
- break;
- }
- qualifiers->add_qualifier_start(vendor_extension, start_pos,
- source_name, M_inside_substitution);
- continue;
- }
- case 'A':
- {
- // <array-type> ::= A <positive dimension number> _ <element type>
- // ::= A [<dimension expression>] _ <element type>
- //
- string_type index;
- int saved_pos;
- store(saved_pos);
- if (next() == 'n' || !decode_number(index))
- {
- restore(saved_pos);
- if (next() != '_' && !decode_expression(index))
- {
- failure = true;
- break;
- }
- }
- if (eat_current() != '_')
- {
- failure = true;
- break;
- }
- qualifiers->add_qualifier_start(array, start_pos, index,
- M_inside_substitution);
- continue;
- }
- case 'M':
- {
- // <Q>M<C> or <Q>M<C><Q2>F<R><B>E
- eat_current();
- string_type class_type;
- if (!decode_type(class_type)) // Substitution: "<C>".
- {
- failure = true;
- break;
- }
- char c = current();
- if (c == 'F' || c == 'K' || c == 'V' || c == 'r')
- // Must be CV-qualifiers and a member function pointer.
- {
- // <Q>M<C><Q2>F<R><B>E ==> R (C::*Q)B Q2
- // substitutions: "<C>", "F<R><B>E" (<R> and <B>
- // recursive), "M<C><Q2>F<R><B>E".
- int count = 0;
- int Q2_start_pos = M_pos;
- while(c == 'K' || c == 'V' || c == 'r') // Decode <Q2>.
- {
- ++count;
- c = next();
- }
- qualifier_list<Allocator> class_type_qualifiers(*this);
- if (count)
- class_type_qualifiers.
- add_qualifier_start(cv_qualifier, Q2_start_pos,
- count, M_inside_substitution);
- string_type member_function_qualifiers;
- // It is unclear why g++ doesn't add a substitution for
- // "<Q2>F<R><B>E" as it should I think.
- string_type member_function_qualifiers_postfix;
- class_type_qualifiers.
- decode_qualifiers(member_function_qualifiers,
- member_function_qualifiers_postfix, true);
- member_function_qualifiers +=
- member_function_qualifiers_postfix;
- // I don't think this substitution is actually ever used.
- int function_pos = M_pos;
- if (eat_current() != 'F')
- {
- failure = true;
- break;
- }
- // Return type.
- // Constructors, destructors and conversion operators don't
- // have a return type, but seem to never get here.
- if (!decode_type_with_postfix(prefix, postfix))
- // substitution: <R> recursive
- {
- failure = true;
- break;
- }
- prefix += " (";
- prefix += class_type;
- prefix += "::*";
- string_type bare_function_type;
- if (!decode_bare_function_type(bare_function_type)
- || eat_current() != 'E') // Substitution: <B> recursive.
- {
- failure = true;
- break;
- }
- // substitution: "F<R><B>E".
- add_substitution(function_pos, type);
- // substitution: "M<C><Q2>F<R><B>E".
- add_substitution(start_pos, type);
- // substitution: all qualified types if any.
- qualifiers->decode_qualifiers(prefix, postfix);
- prefix += ")";
- prefix += bare_function_type;
- prefix += member_function_qualifiers;
- goto decode_type_exit;
- }
- qualifiers->add_qualifier_start(pointer_to_member, start_pos,
- class_type, M_inside_substitution);
- continue;
- }
- default:
- break;
- }
- break;
- }
- if (!failure)
- {
- // <Q>G<T> ==> imaginary T Q
- // substitutions: "<T>", "G<T>" (<T> recursive).
- // <Q>C<T> ==> complex T Q
- // substitutions: "<T>", "C<T>" (<T> recursive).
- if (current() == 'C' || current() == 'G')
- {
- prefix += current() == 'C' ? "complex " : "imaginary ";
- qualifiers->add_qualifier_start(complex_or_imaginary, M_pos,
- M_inside_substitution);
- eat_current();
- }
- int start_pos = M_pos;
- switch(current())
- {
- case 'F':
- {
- // <Q>F<R><B>E ==> R (Q)B
- // substitution: "<R>", "<B>" (<B> recursive) and "F<R><B>E".
- eat_current();
- // Return type.
- if (!decode_type_with_postfix(prefix, postfix))
- // Substitution: "<R>".
- {
- failure = true;
- break;
- }
- // Only array (pointer) types have a postfix.
- // In that case we don't want the space but
- // expect something like prefix is "int (*"
- // and postfix is ") [1]".
- if (postfix.size() == 0)
- prefix += ' ';
- prefix += '(';
- string_type bare_function_type;
- if (!decode_bare_function_type(bare_function_type)
- // substitution: "<B>" (<B> recursive).
- || eat_current() != 'E')
- {
- failure = true;
- break;
- }
- add_substitution(start_pos, type); // Substitution: "F<R><B>E".
- qualifiers->decode_qualifiers(prefix, postfix);
- // substitution: all qualified types, if any.
- prefix += ")";
- prefix += bare_function_type;
- break;
- }
- case 'T':
- if (!decode_template_param(prefix, qualifiers))
- {
- failure = true;
- break;
- }
- if (current() == 'I')
- {
- add_substitution(start_pos, template_template_param);
- // substitution: "<template-template-param>".
- if (!decode_template_args(prefix))
- {
- failure = true;
- break;
- }
- }
- if (!recursive_template_param_or_substitution_call
- && qualifiers->suppressed())
- {
- add_substitution(start_pos, type);
- // substitution: "<template-param>" or
- // "<template-template-param> <template-args>".
- qualifiers->decode_qualifiers(prefix, postfix);
- // substitution: all qualified types, if any.
- }
- break;
- case 'S':
- if (M_pos >= M_maxpos)
- {
- failure = true;
- break;
- }
- if (M_str[M_pos + 1] != 't')
- {
- if (!decode_substitution(prefix, qualifiers))
- {
- failure = true;
- break;
- }
- if (current() == 'I')
- {
- if (!decode_template_args(prefix))
- {
- failure = true;
- break;
- }
- if (!recursive_template_param_or_substitution_call
- && qualifiers->suppressed())
- add_substitution(start_pos, type);
- // Substitution:
- // "<template-template-param> <template-args>".
- }
- if (!recursive_template_param_or_substitution_call
- && qualifiers->suppressed())
- qualifiers->decode_qualifiers(prefix, postfix);
- // Substitution: all qualified types, if any.
- break;
- }
- /* Fall-through for St */
- case 'N':
- case 'Z':
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- // <Q><T> ==> T Q
- // substitutions: "<T>" (<T> recursive).
- if (!decode_class_enum_type(prefix))
- {
- failure = true;
- break;
- }
- if (!recursive_template_param_or_substitution_call)
- {
- add_substitution(start_pos, type);
- // substitution: "<class-enum-type>".
- qualifiers->decode_qualifiers(prefix, postfix);
- // substitution: all qualified types, if any.
- }
- else
- qualifiers->printing_suppressed();
- break;
- default:
- // <Q><T> ==> T Q
- // substitutions: "<T>" (<T> recursive).
- if (!decode_builtin_type(prefix))
- {
- failure = true;
- break;
- }
- // If decode_type was called from decode_template_param then we
- // need to suppress calling qualifiers here in order to get a
- // substitution added anyway (for the <template-param>).
- if (!recursive_template_param_or_substitution_call)
- qualifiers->decode_qualifiers(prefix, postfix);
- else
- qualifiers->printing_suppressed();
- break;
- }
- }
- decode_type_exit:
- --M_inside_type;
- if (!recursive_template_param_or_substitution_call)
- delete qualifiers;
- if (failure)
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN2;
- }
-
- // <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
- // ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
- //
- // <prefix> ::= <prefix> <unqualified-name>
- // ::= <template-prefix> <template-args>
- // ::= # empty
- // ::= <substitution>
- //
- // <template-prefix> ::= <prefix> <template unqualified-name>
- // ::= <substitution>
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_nested_name(string_type& output,
- string_type& qualifiers)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_nested_name");
-
- if (current() != 'N' || M_pos >= M_maxpos)
- _GLIBCPP_DEMANGLER_FAILURE;
-
- // <CV-qualifiers> ::= [r] [V] [K] # restrict (C99), volatile, const
- char const* qualifiers_start = &M_str[M_pos + 1];
- for (char c = next(); c == 'K' || c == 'V' || c == 'r'; c = next());
- for (char const* qualifier_ptr = &M_str[M_pos - 1];
- qualifier_ptr >= qualifiers_start; --qualifier_ptr)
- switch(*qualifier_ptr)
- {
- case 'K':
- qualifiers += " const";
- break;
- case 'V':
- qualifiers += " volatile";
- break;
- case 'r':
- qualifiers += " restrict";
- break;
- }
-
- int number_of_prefixes = 0;
- int substitution_start = M_pos;
- for(;;)
- {
- ++number_of_prefixes;
- if (current() == 'S')
- {
- if (!decode_substitution(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else if (current() == 'I')
- {
- if (!decode_template_args(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() != 'E')
- {
- // substitution: "<template-prefix> <template-args>".
- add_substitution(substitution_start, nested_name_prefix,
- number_of_prefixes);
- }
- }
- else
- {
- if (!decode_unqualified_name(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() != 'E')
- {
- // substitution: "<prefix> <unqualified-name>" or
- // "<prefix> <template unqualified-name>".
- add_substitution(substitution_start,
- (current() == 'I') ? nested_name_template_prefix
- : nested_name_prefix,
- number_of_prefixes);
- }
- }
- if (current() == 'E')
- {
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- if (current() != 'I')
- output += "::";
- else if (M_template_args_need_space)
- output += ' ';
- M_template_args_need_space = false;
- }
- _GLIBCPP_DEMANGLER_FAILURE;
- }
-
- // <local-name> := Z <function encoding> E <entity name> [<discriminator>]
- // := Z <function encoding> E s [<discriminator>]
- // <discriminator> := _ <non-negative number>
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_local_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_local_name");
- if (current() != 'Z' || M_pos >= M_maxpos)
- _GLIBCPP_DEMANGLER_FAILURE;
- if ((M_pos += decode_encoding(output, M_str + M_pos + 1,
- M_maxpos - M_pos) + 1) < 0 || eat_current() != 'E')
- _GLIBCPP_DEMANGLER_FAILURE;
- output += "::";
- if (current() == 's')
- {
- eat_current();
- output += "string literal";
- }
- else
- {
- string_type nested_name_qualifiers;
- if (!decode_name(output, nested_name_qualifiers))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += nested_name_qualifiers;
- }
- string_type discriminator;
- if (current() == '_' && next() != 'n' && !decode_number(discriminator))
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <source-name> ::= <positive length number> <identifier>
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_source_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_source_name");
- int length = current() - '0';
- if (length < 1 || length > 9)
- _GLIBCPP_DEMANGLER_FAILURE;
- while(std::isdigit(next()))
- length = 10 * length + current() - '0';
- char const* ptr = &M_str[M_pos];
- if (length > 11 && !strncmp(ptr, "_GLOBAL_", 8) && ptr[9] == 'N'
- && ptr[8] == ptr[10])
- {
- output += "(anonymous namespace)";
- if ((M_pos += length) > M_maxpos + 1)
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else
- while(length--)
- {
- if (current() == 0)
- _GLIBCPP_DEMANGLER_FAILURE;
- output += eat_current();
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <unqualified-name> ::= <operator-name> # Starts with lower case.
- // ::= <ctor-dtor-name> # Starts with 'C' or 'D'.
- // ::= <source-name> # Starts with a digit.
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_unqualified_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_unqualified_name");
- if (std::isdigit(current()))
- {
- if (!M_inside_template_args)
- {
- bool recursive_unqualified_name = (&M_function_name == &output);
- // This can be a recursive call when we are decoding
- // an <operator-name> that is a cast operator for a some
- // <unqualified-name>; for example "operator Foo()".
- // In that case this is thus not a ctor or dtor and we
- // are not interested in updating M_function_name.
- if (!recursive_unqualified_name)
- M_function_name.clear();
- M_name_is_template = false;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- if (!decode_source_name(M_function_name))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (!recursive_unqualified_name)
- output += M_function_name;
- }
- else if (!decode_source_name(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- if (islower(current()))
- {
- if (!M_inside_template_args)
- {
- M_function_name.clear();
- M_name_is_template = false;
- M_name_is_cdtor = false;
- M_name_is_conversion_operator = false;
- if (!decode_operator_name(M_function_name))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += M_function_name;
- }
- _GLIBCPP_DEMANGLER_RETURN;
- }
- if (current() == 'C' || current() == 'D')
- {
- if (M_inside_template_args)
- _GLIBCPP_DEMANGLER_FAILURE;
- // <ctor-dtor-name> ::=
- // C1 # complete object (in-charge) constructor
- // C2 # base object (not-in-charge) constructor
- // C3 # complete object (in-charge) allocating constructor
- // D0 # deleting (in-charge) destructor
- // D1 # complete object (in-charge) destructor
- // D2 # base object (not-in-charge) destructor
- //
- if (current() == 'C')
- {
- char c = next();
- if (c < '1' || c > '3')
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else
- {
- char c = next();
- if (c < '0' || c > '2')
- _GLIBCPP_DEMANGLER_FAILURE;
- output += '~';
- M_saw_destructor = true;
- }
- M_name_is_cdtor = true;
- eat_current();
- output += M_function_name;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- _GLIBCPP_DEMANGLER_FAILURE;
- }
-
- // <unscoped-name> ::=
- // <unqualified-name> # Starts not with an 'S'
- // St <unqualified-name> # ::std::
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_unscoped_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_unscoped_name");
- if (current() == 'S')
- {
- if (next() != 't')
- _GLIBCPP_DEMANGLER_FAILURE;
- eat_current();
- output += "std::";
- }
- decode_unqualified_name(output);
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <name> ::=
- // <nested-name> # Starts with 'N'
- // <unscoped-template-name> <template-args> # idem
- // <local-name> # Starts with 'Z'
- // <unscoped-name> # Starts with 'S', 'C', 'D',
- // # a digit or a lower case
- // # character.
- //
- // <unscoped-template-name> ::= <unscoped-name>
- // ::= <substitution>
- template<typename Allocator>
- bool
- session<Allocator>::decode_name(string_type& output,
- string_type& nested_name_qualifiers)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_name");
- int substitution_start = M_pos;
- if (current() == 'S' && (M_pos >= M_maxpos || M_str[M_pos + 1] != 't'))
- {
- if (!decode_substitution(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- else if (current() == 'N')
- {
- decode_nested_name(output, nested_name_qualifiers);
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else if (current() == 'Z')
- {
- decode_local_name(output);
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else if (!decode_unscoped_name(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- if (current() == 'I')
- {
- // Must have been an <unscoped-template-name>.
- add_substitution(substitution_start, unscoped_template_name);
- if (!decode_template_args(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- }
- M_template_args_need_space = false;
- _GLIBCPP_DEMANGLER_RETURN;
- }
-
- // <call-offset> ::= h <nv-offset> _
- // ::= v <v-offset> _
- // <nv-offset> ::= <offset number>
- // non-virtual base override
- //
- // <v-offset> ::= <offset number> _ <virtual offset number>
- // virtual base override, with vcall offset
- template<typename Allocator>
- bool
- session<Allocator>::decode_call_offset(string_type&
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- output
-#endif
- )
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_call_offset");
- if (current() == 'h')
- {
- string_type dummy;
- eat_current();
- if (decode_number(dummy) && current() == '_')
- {
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- }
- else if (current() == 'v')
- {
- string_type dummy;
- eat_current();
- if (decode_number(dummy) && current() == '_')
- {
- eat_current();
- if (decode_number(dummy) && current() == '_')
- {
- eat_current();
- _GLIBCPP_DEMANGLER_RETURN;
- }
- }
- }
- _GLIBCPP_DEMANGLER_FAILURE;
- }
-
- //
- // <special-name> ::=
- // TV <type> # virtual table
- // TT <type> # VTT structure (construction
- // vtable index).
- // TI <type> # typeinfo structure
- // TS <type> # typeinfo name (null-terminated
- // byte string).
- // GV <object name> # Guard variable for one-time
- // initialization of static objects in
- // a local scope.
- // T <call-offset> <base encoding># base is the nominal target function
- // of thunk.
- // Tc <call-offset> <call-offset> <base encoding> # base is the nominal
- // target function of thunk; first
- // call-offset is 'this' adjustment;
- // second call-offset is result
- // adjustment
- //
- template<typename Allocator>
- bool
- session<Allocator>::decode_special_name(string_type& output)
- {
- _GLIBCPP_DEMANGLER_DOUT_ENTERING("decode_special_name");
- if (current() == 'G')
- {
- if (next() != 'V')
- _GLIBCPP_DEMANGLER_FAILURE;
- output += "guard variable for ";
- string_type nested_name_qualifiers;
- eat_current();
- if (!decode_name(output, nested_name_qualifiers))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += nested_name_qualifiers;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- else if (current() != 'T')
- _GLIBCPP_DEMANGLER_FAILURE;
- switch(next())
- {
- case 'V':
- output += "vtable for ";
- eat_current();
- decode_type(output);
- _GLIBCPP_DEMANGLER_RETURN;
- case 'T':
- output += "VTT for ";
- eat_current();
- decode_type(output);
- _GLIBCPP_DEMANGLER_RETURN;
- case 'I':
- output += "typeinfo for ";
- eat_current();
- decode_type(output);
- _GLIBCPP_DEMANGLER_RETURN;
- case 'S':
- output += "typeinfo name for ";
- eat_current();
- decode_type(output);
- _GLIBCPP_DEMANGLER_RETURN;
- case 'c':
- output += "covariant return thunk to ";
- if (!decode_call_offset(output)
- || !decode_call_offset(output)
- || (M_pos += decode_encoding(output, M_str + M_pos,
- M_maxpos - M_pos + 1)) < 0)
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN;
- case 'C': // GNU extension?
- {
- string_type first;
- output += "construction vtable for ";
- eat_current();
- if (!decode_type(first))
- _GLIBCPP_DEMANGLER_FAILURE;
- while(std::isdigit(current()))
- eat_current();
- if (eat_current() != '_')
- _GLIBCPP_DEMANGLER_FAILURE;
- if (!decode_type(output))
- _GLIBCPP_DEMANGLER_FAILURE;
- output += "-in-";
- output += first;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- default:
- if (current() == 'v')
- output += "virtual thunk to ";
- else
- output += "non-virtual thunk to ";
- if (!decode_call_offset(output)
- || (M_pos += decode_encoding(output, M_str + M_pos,
- M_maxpos - M_pos + 1)) < 0)
- _GLIBCPP_DEMANGLER_FAILURE;
- _GLIBCPP_DEMANGLER_RETURN;
- }
- }
-
- // <encoding> ::=
- // <function name> <bare-function-type> # Starts with 'C', 'D', 'N',
- // 'S', a digit or a lower case
- // character.
- // <data name> # Idem.
- // <special-name> # Starts with 'T' or 'G'.
- template<typename Allocator>
- int
- session<Allocator>::decode_encoding(string_type& output,
- char const* in,
- int len)
- {
-#if _GLIBCPP_DEMANGLER_CWDEBUG
- _GLIBCPP_DEMANGLER_DOUT(dc::demangler,
- "Output thus far: \"" << output << '"');
- string_type input(in, len > 0x40000000 ? strlen(in) : len);
- _GLIBCPP_DEMANGLER_DOUT(
- dc::demangler, "Entering decode_encoding(\"" << input << "\")");
-#endif
- if (len <= 0)
- return INT_MIN;
- session<Allocator> demangler_session(in, len);
- string_type nested_name_qualifiers;
- int saved_pos;
- demangler_session.store(saved_pos);
- if (demangler_session.decode_special_name(output))
- return demangler_session.M_pos;
- demangler_session.restore(saved_pos);
- string_type name;
- if (!demangler_session.decode_name(name, nested_name_qualifiers))
- return INT_MIN;
- if (demangler_session.current() == 0
- || demangler_session.current() == 'E')
- {
- output += name;
- output += nested_name_qualifiers;
- return demangler_session.M_pos;
- }
- // Must have been a <function name>.
- if (demangler_session.M_name_is_template
- && !(demangler_session.M_name_is_cdtor
- || demangler_session.M_name_is_conversion_operator))
- {
- if (!demangler_session.decode_type(output))
- // Return type of function
- return INT_MIN;
- output += ' ';
- }
- output += name;
- if (!demangler_session.decode_bare_function_type(output))
- return INT_MIN;
- output += nested_name_qualifiers;
- return demangler_session.M_pos;
- }
-
- } // namespace demangler
-
- // Public interface
- template<typename Allocator>
- struct demangle
- {
- typedef Allocator allocator_type;
- typedef std::basic_string<char, std::char_traits<char>, Allocator>
- string_type;
- static string_type symbol(char const* in);
- static string_type type(char const* in);
- };
-
- // demangle::symbol()
- //
- // Demangle `input' which should be a mangled function name as for
- // instance returned by nm(1).
- template<typename Allocator>
- std::basic_string<char, std::char_traits<char>, Allocator>
- demangle<Allocator>::symbol(char const* input)
- {
- // <mangled-name> ::= _Z <encoding>
- // <mangled-name> ::= _GLOBAL_ _<type>_ _Z <encoding>
- // <type> can be I or D (GNU extension)
- typedef demangler::session<Allocator> demangler_type;
- string_type result;
- bool failure = (input[0] != '_');
-
- if (!failure)
- {
- if (input[1] == 'G')
- {
- if (!strncmp(input, "_GLOBAL__", 9)
- && (input[9] == 'D' || input[9] == 'I')
- && input[10] == '_' && input[11] == '_' && input[12] == 'Z')
- {
- if (input[9] == 'D')
- result.assign("global destructors keyed to ", 28);
- else
- result.assign("global constructors keyed to ", 29);
- int cnt = demangler_type::decode_encoding(result, input + 13,
- INT_MAX);
- if (cnt < 0 || input[cnt + 13] != 0)
- failure = true;
- }
- else
- failure = true;
- }
- else if (input[1] == 'Z')
- {
- int cnt = demangler_type::decode_encoding(result, input + 2,
- INT_MAX);
- if (cnt < 0 || input[cnt + 2] != 0)
- failure = true;
- }
- else
- failure = true;
- }
-
- // Failure to demangle, return the mangled name.
- if (failure)
- result.assign(input, strlen(input));
-
- return result;
- }
-
- // demangle::type()
- // Demangle `input' which must be a zero terminated mangled type
- // name as for instance returned by std::type_info::name().
- template<typename Allocator>
- std::basic_string<char, std::char_traits<char>, Allocator>
- demangle<Allocator>::type(char const* input)
- {
- std::basic_string<char, std::char_traits<char>, Allocator> result;
- if (input == NULL)
- result = "(null)";
- else
- {
- demangler::session<Allocator> demangler_session(input, INT_MAX);
- if (!demangler_session.decode_type(result)
- || demangler_session.remaining_input_characters())
- {
- // Failure to demangle, return the mangled name.
- result = input;
- }
- }
- return result;
- }
-
-} // namespace __gnu_cxx
-
-#endif // __DEMANGLE_H
diff --git a/libstdc++-v3/libsupc++/exception_defines.h b/libstdc++-v3/libsupc++/exception_defines.h
index fca2d835f41..1178f224527 100644
--- a/libstdc++-v3/libsupc++/exception_defines.h
+++ b/libstdc++-v3/libsupc++/exception_defines.h
@@ -1,6 +1,6 @@
// -fno-exceptions Support -*- C++ -*-
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003 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
@@ -31,6 +31,9 @@
// ISO C++ 14882: 19.1 Exception classes
//
+#ifndef __EXCEPTION_DEFINES_H
+#define __EXCEPTION_DEFINES_H 1
+
#ifndef __EXCEPTIONS
// Iff -fno-exceptions, transform error handling code to work without it.
# define try if (true)
@@ -40,3 +43,5 @@
// Else proceed normally.
# define __throw_exception_again throw
#endif
+
+#endif
diff --git a/libstdc++-v3/mkcheck.in b/libstdc++-v3/mkcheck.in
index c856b052152..377321cac43 100755
--- a/libstdc++-v3/mkcheck.in
+++ b/libstdc++-v3/mkcheck.in
@@ -99,6 +99,9 @@ fi
# Make a list of the files we're going to run, or use an old one if it exists.
if [ ! -f "$TESTS_FILE" ]; then
+ if [ -f "$TEST_DIR/testsuite_files" ]; then
+ cp $TEST_DIR/testsuite_files $TESTS_FILE
+ else
echo "making file $TESTS_FILE"
for LONG_NAME in $SRC_DIR/testsuite/*/*.cc
do
@@ -106,6 +109,7 @@ if [ ! -f "$TESTS_FILE" ]; then
SHORT_NAME="`basename $DIR_NAME`/`basename $LONG_NAME`"
echo "$SHORT_NAME" >> $TESTS_FILE
done
+ fi
fi
# Nasty solution to replace GNU date(1)'s %s time_t output function.
diff --git a/libstdc++-v3/src/demangle.cc b/libstdc++-v3/src/demangle.cc
index 93956502070..24d7009a623 100644
--- a/libstdc++-v3/src/demangle.cc
+++ b/libstdc++-v3/src/demangle.cc
@@ -29,7 +29,7 @@
// the GNU General Public License.
#include <cxxabi.h>
-#include "demangle.h"
+#include <bits/demangle.h>
// __cxa_demangle
//
diff --git a/libstdc++-v3/src/fstream.cc b/libstdc++-v3/src/fstream.cc
index 5753e0055cd..0f9b2abd2c4 100644
--- a/libstdc++-v3/src/fstream.cc
+++ b/libstdc++-v3/src/fstream.cc
@@ -1,6 +1,6 @@
// File based streams -*- C++ -*-
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -43,6 +43,8 @@ namespace std
int_type __ret = traits_type::eof();
bool __testin = _M_mode & ios_base::in;
bool __testout = _M_mode & ios_base::out;
+ // Sync with stdio.
+ bool __sync = _M_buf_size <= 1;
if (__testin)
{
@@ -50,15 +52,14 @@ namespace std
// normal buffers and jet outta here before expensive
// fileops happen...
if (_M_pback_init)
+ _M_pback_destroy();
+
+ if (_M_in_cur && _M_in_cur < _M_in_end)
{
- _M_pback_destroy();
- if (_M_in_cur < _M_in_end)
- {
- __ret = traits_type::to_int_type(*_M_in_cur);
- if (__bump)
- _M_in_cur_move(1);
- return __ret;
- }
+ __ret = traits_type::to_int_type(*_M_in_cur);
+ if (__bump)
+ _M_in_cur_move(1);
+ return __ret;
}
// Sync internal and external buffers.
@@ -71,15 +72,16 @@ namespace std
_M_really_overflow();
else if (_M_in_cur != _M_filepos)
_M_file.seekoff(_M_in_cur - _M_filepos,
- ios_base::cur, ios_base::in);
+ ios_base::cur, __sync, ios_base::in);
}
if (__testinit || __testget)
{
streamsize __elen = 0;
streamsize __ilen = 0;
+
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
- _M_buf_size);
+ _M_buf_size, __sync);
__ilen = __elen;
if (0 < __ilen)
@@ -90,7 +92,7 @@ namespace std
__ret = traits_type::to_int_type(*_M_in_cur);
if (__bump)
_M_in_cur_move(1);
- else if (_M_buf_size == 1)
+ else if (__sync)
{
// If we are synced with stdio, we have to unget the
// character we just read so that the file pointer
@@ -123,6 +125,8 @@ namespace std
int_type __ret = traits_type::eof();
bool __testin = _M_mode & ios_base::in;
bool __testout = _M_mode & ios_base::out;
+ // Sync with stdio.
+ bool __sync = _M_buf_size <= 1;
if (__testin)
{
@@ -130,15 +134,14 @@ namespace std
// normal buffers and jet outta here before expensive
// fileops happen...
if (_M_pback_init)
+ _M_pback_destroy();
+
+ if (_M_in_cur && _M_in_cur < _M_in_end)
{
- _M_pback_destroy();
- if (_M_in_cur < _M_in_end)
- {
- __ret = traits_type::to_int_type(*_M_in_cur);
- if (__bump)
- _M_in_cur_move(1);
- return __ret;
- }
+ __ret = traits_type::to_int_type(*_M_in_cur);
+ if (__bump)
+ _M_in_cur_move(1);
+ return __ret;
}
// Sync internal and external buffers.
@@ -151,7 +154,7 @@ namespace std
_M_really_overflow();
else if (_M_in_cur != _M_filepos)
_M_file.seekoff(_M_in_cur - _M_filepos,
- ios_base::cur, ios_base::in);
+ ios_base::cur, __sync, ios_base::in);
}
if (__testinit || __testget)
@@ -164,13 +167,13 @@ namespace std
if (__cvt.always_noconv())
{
__elen = _M_file.xsgetn(reinterpret_cast<char*>(_M_in_beg),
- _M_buf_size);
+ _M_buf_size, __sync);
__ilen = __elen;
}
else
{
char* __buf = static_cast<char*>(__builtin_alloca(_M_buf_size));
- __elen = _M_file.xsgetn(__buf, _M_buf_size);
+ __elen = _M_file.xsgetn(__buf, _M_buf_size, __sync);
const char* __eend;
char_type* __iend;
@@ -183,7 +186,7 @@ namespace std
{
// Unwind.
__ilen = 0;
- _M_file.seekoff(-__elen, ios_base::cur, ios_base::in);
+ _M_file.seekoff(-__elen, ios_base::cur, __sync, ios_base::in);
}
}
@@ -195,7 +198,7 @@ namespace std
__ret = traits_type::to_int_type(*_M_in_cur);
if (__bump)
_M_in_cur_move(1);
- else if (_M_buf_size == 1)
+ else if (__sync)
{
// If we are synced with stdio, we have to unget the
// character we just read so that the file pointer
diff --git a/libstdc++-v3/src/globals.cc b/libstdc++-v3/src/globals.cc
index 7d4949c5188..0f8dfefbd0b 100644
--- a/libstdc++-v3/src/globals.cc
+++ b/libstdc++-v3/src/globals.cc
@@ -41,13 +41,60 @@
// time. This file contains definitions of all global variables that
// require initialization as arrays of characters.
-// Because <iostream> declares the standard streams to be [io]stream
-// types instead of say [io]fstream types, it is also necessary to
-// allocate the actual file buffers in this file.
+// NB: asm directives can rename these non-exported, namespace
+// __gnu_cxx symbols into exported, namespace std symbols with the
+// appropriate symbol version name.
+// The rename syntax is
+// asm (".symver currentname,oldname@@GLIBCPP_3.2")
+// In macro form:
+// _GLIBCPP_ASM_SYMVER(currentname, oldname, GLIBCPP_3.2)
+
+namespace std
+{
+ // Standard stream objects.
+ // NB: Iff <iostream> is included, these definitions become wonky.
+ typedef char fake_istream[sizeof(istream)]
+ __attribute__ ((aligned(__alignof__(istream))));
+ typedef char fake_ostream[sizeof(ostream)]
+ __attribute__ ((aligned(__alignof__(ostream))));
+ fake_istream cin;
+ fake_ostream cout;
+ fake_ostream cerr;
+ fake_ostream clog;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ typedef char fake_wistream[sizeof(wistream)]
+ __attribute__ ((aligned(__alignof__(wistream))));
+ typedef char fake_wostream[sizeof(wostream)]
+ __attribute__ ((aligned(__alignof__(wostream))));
+ fake_wistream wcin;
+ fake_wostream wcout;
+ fake_wostream wcerr;
+ fake_wostream wclog;
+#endif
+} // namespace std
+
namespace __gnu_cxx
{
using namespace std;
+ // Because <iostream> declares the standard streams to be [io]stream
+ // types instead of say [io]fstream types, it is also necessary to
+ // allocate the actual file buffers in this file.
+ typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
+ __attribute__ ((aligned(__alignof__(stdio_filebuf<char>))));
+ fake_filebuf buf_cout;
+ fake_filebuf buf_cin;
+ fake_filebuf buf_cerr;
+
+#ifdef _GLIBCPP_USE_WCHAR_T
+ typedef char fake_wfilebuf[sizeof(stdio_filebuf<wchar_t>)]
+ __attribute__ ((aligned(__alignof__(stdio_filebuf<wchar_t>))));
+ fake_wfilebuf buf_wcout;
+ fake_wfilebuf buf_wcin;
+ fake_wfilebuf buf_wcerr;
+#endif
+
typedef char fake_facet_name[sizeof(char*)]
__attribute__ ((aligned(__alignof__(char*))));
fake_facet_name facet_name[6 + _GLIBCPP_NUM_CATEGORIES];
@@ -56,27 +103,10 @@ namespace __gnu_cxx
__attribute__ ((aligned(__alignof__(locale::_Impl))));
fake_locale_Impl c_locale_impl;
-
- // NB: The asm directives renames these non-exported, namespace
- // __gnu_cxx symbols into the mistakenly exported, namespace std
- // symbols in GLIBCPP_3.2.
- // The rename syntax is
- // asm (".symver currentname,oldname@@GLIBCPP_3.2")
- // At the same time, these new __gnu_cxx symbols are not exported.
- // In the future, GLIBCXX_ABI > 5 should remove all uses of
- // _GLIBCPP_ASM_SYMVER in this file.
typedef char fake_locale[sizeof(locale)]
__attribute__ ((aligned(__alignof__(locale))));
fake_locale c_locale;
- // GLIBCXX_ABI > 5 will not need this symbol at all.
- // It's here just as a placeholder, as the size of this exported
- // object changed. The new symbol is not exported.
- const int o = sizeof(locale::_Impl) - sizeof(char*[_GLIBCPP_NUM_CATEGORIES]);
- typedef char fake_locale_Impl_compat[o]
- __attribute__ ((aligned(__alignof__(o))));
- fake_locale_Impl_compat c_locale_impl_compat;
-
typedef char fake_facet_vec[sizeof(locale::facet*)]
__attribute__ ((aligned(__alignof__(locale::facet*))));
fake_facet_vec facet_vec[_GLIBCPP_NUM_FACETS];
@@ -189,20 +219,6 @@ namespace __gnu_cxx
fake_messages_w messages_w;
#endif
- typedef char fake_filebuf[sizeof(stdio_filebuf<char>)]
- __attribute__ ((aligned(__alignof__(stdio_filebuf<char>))));
- fake_filebuf buf_cout;
- fake_filebuf buf_cin;
- fake_filebuf buf_cerr;
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- typedef char fake_wfilebuf[sizeof(stdio_filebuf<wchar_t>)]
- __attribute__ ((aligned(__alignof__(stdio_filebuf<wchar_t>))));
- fake_wfilebuf buf_wcout;
- fake_wfilebuf buf_wcin;
- fake_wfilebuf buf_wcerr;
-#endif
-
// Globals for once-only runtime initialization of mutex objects. This
// allows static initialization of these objects on systems that need a
// function call to initialize a mutex. For example, see stl_threads.h.
@@ -226,27 +242,3 @@ namespace __gnu_cxx
{ __GTHREAD_MUTEX_INIT_FUNCTION (_GLIBCPP_mutex_address); }
#endif
} // namespace __gnu_cxx
-
-namespace std
-{
- // Standard stream objects.
- typedef char fake_istream[sizeof(istream)]
- __attribute__ ((aligned(__alignof__(istream))));
- typedef char fake_ostream[sizeof(ostream)]
- __attribute__ ((aligned(__alignof__(ostream))));
- fake_istream cin;
- fake_ostream cout;
- fake_ostream cerr;
- fake_ostream clog;
-
-#ifdef _GLIBCPP_USE_WCHAR_T
- typedef char fake_wistream[sizeof(wistream)]
- __attribute__ ((aligned(__alignof__(wistream))));
- typedef char fake_wostream[sizeof(wostream)]
- __attribute__ ((aligned(__alignof__(wostream))));
- fake_wistream wcin;
- fake_wostream wcout;
- fake_wostream wcerr;
- fake_wostream wclog;
-#endif
-} // namespace std
diff --git a/libstdc++-v3/src/ios.cc b/libstdc++-v3/src/ios.cc
index 9de6d1309f9..284c09e4c52 100644
--- a/libstdc++-v3/src/ios.cc
+++ b/libstdc++-v3/src/ios.cc
@@ -38,9 +38,6 @@
#include <fstream>
#include <bits/atomicity.h>
#include <ext/stdio_filebuf.h>
-#ifdef _GLIBCPP_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
namespace __gnu_cxx
{
@@ -160,12 +157,7 @@ namespace std
ios_base::Init::_S_ios_create(bool __sync)
{
size_t __out_size = __sync ? 0 : static_cast<size_t>(BUFSIZ);
-#ifdef _GLIBCPP_HAVE_ISATTY
- size_t __in_size =
- (__sync || isatty (0)) ? 1 : static_cast<size_t>(BUFSIZ);
-#else
- size_t __in_size = 1;
-#endif
+ size_t __in_size = __sync ? 1 : static_cast<size_t>(BUFSIZ);
// NB: The file globals.cc creates the four standard files
// with NULL buffers. At this point, we swap out the dummy NULL
@@ -253,8 +245,6 @@ namespace std
{ words = new _Words[newsize]; }
catch (...)
{
- delete [] _M_word;
- _M_word = 0;
_M_streambuf_state |= badbit;
if (_M_streambuf_state & _M_exception)
__throw_ios_failure("ios_base::_M_grow_words failure");
@@ -271,6 +261,8 @@ namespace std
else
{
_M_streambuf_state |= badbit;
+ if (_M_streambuf_state & _M_exception)
+ __throw_ios_failure("ios_base::_M_grow_words failure");
return _M_word_zero;
}
}
@@ -287,8 +279,6 @@ namespace std
_M_precision = 6;
_M_width = 0;
_M_flags = skipws | dec;
- _M_callbacks = 0;
- _M_word_size = 0;
_M_ios_locale = locale();
}
@@ -302,7 +292,8 @@ namespace std
return __old;
}
- ios_base::ios_base() : _M_callbacks(0), _M_word(0), _M_locale_cache(0)
+ ios_base::ios_base() : _M_callbacks(0), _M_word_size(_S_local_word_size),
+ _M_word(_M_local_word), _M_locale_cache(0)
{
// Do nothing: basic_ios::init() does it.
// NB: _M_callbacks and _M_word must be zero for non-initialized
@@ -314,7 +305,7 @@ namespace std
{
_M_call_callbacks(erase_event);
_M_dispose_callbacks();
- if (_M_word && _M_word != _M_local_word)
+ if (_M_word != _M_local_word)
{
delete [] _M_word;
_M_word = 0;
diff --git a/libstdc++-v3/src/strstream.cc b/libstdc++-v3/src/strstream.cc
index f0c1000e6d4..3bec69855f2 100644
--- a/libstdc++-v3/src/strstream.cc
+++ b/libstdc++-v3/src/strstream.cc
@@ -1,6 +1,6 @@
// strstream definitions -*- C++ -*-
-// Copyright (C) 2001, 2002 Free Software Foundation
+// Copyright (C) 2001, 2002, 2003 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
@@ -148,7 +148,7 @@ namespace std
if (pptr() == epptr() && _M_dynamic && !_M_frozen && !_M_constant)
{
ptrdiff_t old_size = epptr() - pbase();
- ptrdiff_t new_size = std::max(2 * old_size, ptrdiff_t(1));
+ ptrdiff_t new_size = std::max(ptrdiff_t(2 * old_size), ptrdiff_t(1));
char* buf = _M_alloc(new_size);
if (buf)
diff --git a/libstdc++-v3/testsuite/21_strings/append.cc b/libstdc++-v3/testsuite/21_strings/append.cc
deleted file mode 100644
index c518e952671..00000000000
--- a/libstdc++-v3/testsuite/21_strings/append.cc
+++ /dev/null
@@ -1,164 +0,0 @@
-// 1999-07-08 bkoz
-
-// Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.5.3 basic_string::assign
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "point bolivar, texas";
- const std::string str01(str_lit01);
- const std::string str02("corpus, ");
- const std::string str03;
- std::string str05;
-
-
- // string& append(const string&)
- str05 = str02;
- str05.append(str05);
- VERIFY( str05 == "corpus, corpus, " );
- str05.append(str01);
- VERIFY( str05 == "corpus, corpus, point bolivar, texas" );
- str05.append(str03);
- VERIFY( str05 == "corpus, corpus, point bolivar, texas" );
- std::string str06;
- str06.append(str05);
- VERIFY( str06 == str05 );
-
-
- // string& append(const string&, size_type pos, size_type n)
- str05.erase();
- str06.erase();
- csz01 = str03.size();
- try {
- str06.append(str03, csz01 + 1, 0);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- csz01 = str01.size();
- try {
- str06.append(str01, csz01 + 1, 0);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- str05 = str02;
- str05.append(str01, 0, std::string::npos);
- VERIFY( str05 == "corpus, point bolivar, texas" );
- VERIFY( str05 != str02 );
-
- str06 = str02;
- str06.append(str01, 15, std::string::npos);
- VERIFY( str06 == "corpus, texas" );
- VERIFY( str02 != str06 );
-
-
- // string& append(const char* s)
- str05.erase();
- str06.erase();
- str05.append("");
- VERIFY( str05 == str03 );
-
- str05.append(str_lit01);
- VERIFY( str05 == str01 );
-
- str06 = str02;
- str06.append("corpus, ");
- VERIFY( str06 == "corpus, corpus, " );
-
-
- // string& append(const char* s, size_type n)
- str05.erase();
- str06.erase();
- str05.append("", 0);
- VERIFY( str05.size() == 0 );
- VERIFY( str05 == str03 );
-
- str05.append(str_lit01, sizeof(str_lit01) - 1);
- VERIFY( str05 == str01 );
-
- str06 = str02;
- str06.append("corpus, ", 6);
- VERIFY( str06 == "corpus, corpus" );
-
- str06 = str02;
- str06.append("corpus, ", 12);
- VERIFY( str06 != "corpus, corpus, " );
-
-
- // string& append(size_type n, char c)
- str05.erase();
- str06.erase();
- str05.append(0, 'a');
- VERIFY( str05 == str03 );
- str06.append(8, '.');
- VERIFY( str06 == "........" );
-
-
- // template<typename InputIter>
- // string& append(InputIter first, InputIter last)
- str05.erase();
- str06.erase();
- str05.append(str03.begin(), str03.end());
- VERIFY( str05 == str03 );
-
- str06 = str02;
- str06.append(str01.begin(), str01.begin() + str01.find('r'));
- VERIFY( str06 == "corpus, point boliva" );
- VERIFY( str06 != str01 );
- VERIFY( str06 != str02 );
-
- str05 = str01;
- str05.append(str05.begin(), str05.begin() + str05.find('r'));
- VERIFY( str05 == "point bolivar, texaspoint boliva" );
- VERIFY( str05 != str01 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/assign.cc b/libstdc++-v3/testsuite/21_strings/assign.cc
deleted file mode 100644
index fb1ec09b5a3..00000000000
--- a/libstdc++-v3/testsuite/21_strings/assign.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-// 2001-10-30 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.5 string modifiers
-
-#include <string>
-#include <cstdio>
-#include <testsuite_hooks.h>
-
-void
-test01()
-{
- bool test = true;
-
- using namespace std;
-
- const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
- string aux = strlit;
- string::size_type i = aux.rfind("/");
- if (i != string::npos)
- aux.assign(aux, i + 1, string::npos);
- VERIFY(aux == "Hawaii");
-
- aux = strlit;
- i = aux.rfind("r/");
- if (i != string::npos)
- aux.assign(aux, i + 1, string::npos);
- VERIFY(aux.c_str()[9] == 'B');
- VERIFY(aux == "/Hanalei Bay/Kauai/Hawaii");
-}
-
-// assign(const basic_string& __str, size_type __pos, size_type __n)
-void
-test02()
-{
- bool test = true;
-
- using namespace std;
-
- string one = "Selling England by the pound";
- string two = one;
- string three = "Brilliant trees";
-
- one.assign(one, 8, 100);
- VERIFY( one == "England by the pound" );
-
- one.assign(one, 8, 0);
- VERIFY( one == "" );
-
- one.assign(two, 8, 7);
- VERIFY( one == "England" );
-
- one.assign(three, 10, 100);
- VERIFY( one == "trees" );
-
- three.assign(one, 0, 3);
- VERIFY( three == "tre" );
-}
-
-// assign(const _CharT* __s, size_type __n)
-// assign(const _CharT* __s)
-void
-test03()
-{
- bool test = true;
-
- using namespace std;
-
- string one;
- string two;
- string three = two;
- const char * source = "Selling England by the pound";
-
- one.assign(source);
- VERIFY( one == "Selling England by the pound" );
-
- one.assign(source, 28);
- VERIFY( one == "Selling England by the pound" );
-
- two.assign(source, 7);
- VERIFY( two == "Selling" );
-
- one.assign(one.c_str() + 8, 20);
- VERIFY( one == "England by the pound" );
-
- one.assign(one.c_str() + 8, 6);
- VERIFY( one == "by the" );
-}
-
-
-
-int main()
-{
- test01();
- test02();
- test03();
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings.cc b/libstdc++-v3/testsuite/21_strings/c_strings.cc
deleted file mode 100644
index 63041779a83..00000000000
--- a/libstdc++-v3/testsuite/21_strings/c_strings.cc
+++ /dev/null
@@ -1,91 +0,0 @@
-// 2001-04-02 Benjamin Kosnik <bkoz@redhat.com>
-
-// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.4: null-terminiated sequence utilities
-
-#include <string>
-#include <cstring>
-#include <cwchar>
-
-void test01()
-{
- bool test = true;
- char c = 'a';
- const char cc = 'b';
- char* c1 = &c;
- const char* cc1 = &cc;
- const char* ccarray1 = "san francisco roof garden inspectors";
- const char* ccarray2 = "san francisco sunny-day park inspectors";
- char carray[50];
- std::strcpy(carray, ccarray1);
- void* v = carray;
- const void* cv = ccarray1;
-
- // const char* strchr(const char* s, int c);
- // char* strchr(char* s, int c);
- cc1 = std::strchr(ccarray1, 'c');
- c1 = std::strchr(carray, 'c');
-
- // const char* strpbrk(const char* s1, const char* s2);
- // char* strpbrk(char* s1, const char* s2);
- cc1 = std::strpbrk(ccarray1, ccarray2);
- c1 = std::strpbrk(carray, ccarray2);
-
- // const char* strrchr(const char* s, int c);
- // char* strrchr(char* s, int c);
- cc1 = std::strrchr(ccarray1, 'c');
- c1 = std::strrchr(carray, 'c');
-
- // const char* strstr(const char* s1, const char* s2);
- // char* strstr(char* s1, const char* s2);
- cc1 = std::strstr(ccarray1, ccarray2);
- c1 = std::strstr(carray, carray);
-
- // const void* memchr(const void* s, int c, size_t n);
- // void* memchr( void* s, int c, size_t n);
- cv = std::memchr(cv, 'a', 3);
- v = std::memchr(v, 'a', 3);
-}
-
-void test02()
-{
- using namespace std;
-
- const char* ccarray1 = "san francisco roof garden inspectors";
- const char* ccarray2 = "san francisco sunny-day park inspectors";
- char carray[50];
- strcpy(carray, ccarray1);
- void* v = carray;
- const void* cv = ccarray1;
-
- memchr(cv, '/', 3);
- strchr(ccarray1, '/');
- strpbrk(ccarray1, ccarray2);
- strrchr(ccarray1, 'c');
- strstr(carray, carray);
-}
-
-int main()
-{
- test01();
- test02();
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/capacity.cc b/libstdc++-v3/testsuite/21_strings/capacity.cc
deleted file mode 100644
index 99a5b655f58..00000000000
--- a/libstdc++-v3/testsuite/21_strings/capacity.cc
+++ /dev/null
@@ -1,282 +0,0 @@
-// 1999-05-11 bkoz
-
-// Copyright (C) 1999, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.3 string capacity
-
-#include <string>
-#include <testsuite_hooks.h>
-
-template<typename T>
- struct A { };
-
-template<typename T>
- bool
- operator==(const A<T>& a, const A<T>& b) { return true; }
-
-template<typename T>
- bool
- operator<(const A<T>& a, const A<T>& b) { return true; }
-
-struct B { };
-
-// char_traits specialization
-namespace std
-{
- template<>
- struct char_traits<A<B> >
- {
- typedef A<B> char_type;
- // Unsigned as wint_t in unsigned.
- typedef unsigned long int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
- typedef mbstate_t state_type;
-
- static void
- assign(char_type& __c1, const char_type& __c2)
- { __c1 = __c2; }
-
- static bool
- eq(const char_type& __c1, const char_type& __c2)
- { return __c1 == __c2; }
-
- static bool
- lt(const char_type& __c1, const char_type& __c2)
- { return __c1 < __c2; }
-
- static int
- compare(const char_type* __s1, const char_type* __s2, size_t __n)
- {
- for (size_t __i = 0; __i < __n; ++__i)
- if (!eq(__s1[__i], __s2[__i]))
- return lt(__s1[__i], __s2[__i]) ? -1 : 1;
- return 0;
- }
-
- static size_t
- length(const char_type* __s)
- {
- const char_type* __p = __s;
- while (__p)
- ++__p;
- return (__p - __s);
- }
-
- static const char_type*
- find(const char_type* __s, size_t __n, const char_type& __a)
- {
- for (const char_type* __p = __s; size_t(__p - __s) < __n; ++__p)
- if (*__p == __a) return __p;
- return 0;
- }
-
- static char_type*
- move(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memmove(__s1, __s2, __n * sizeof(char_type)); }
-
- static char_type*
- copy(char_type* __s1, const char_type* __s2, size_t __n)
- { return (char_type*) memcpy(__s1, __s2, __n * sizeof(char_type)); }
-
- static char_type*
- assign(char_type* __s, size_t __n, char_type __a)
- {
- for (char_type* __p = __s; __p < __s + __n; ++__p)
- assign(*__p, __a);
- return __s;
- }
-
- static char_type
- to_char_type(const int_type& __c)
- { return char_type(); }
-
- static int_type
- to_int_type(const char_type& __c) { return int_type(); }
-
- static bool
- eq_int_type(const int_type& __c1, const int_type& __c2)
- { return __c1 == __c2; }
-
- static int_type
- eof() { return static_cast<int_type>(-1); }
-
- static int_type
- not_eof(const int_type& __c)
- { return eq_int_type(__c, eof()) ? int_type(0) : __c; }
- };
-} // namespace std
-
-void test01()
-{
- // 1 POD types : resize, capacity, reserve
- bool test = true;
- std::string str01;
- typedef std::string::size_type size_type_s;
-
- size_type_s sz01 = str01.capacity();
- str01.reserve(100);
- size_type_s sz02 = str01.capacity();
- VERIFY( sz02 >= sz01 );
- VERIFY( sz02 >= 100 );
- str01.reserve();
- sz01 = str01.capacity();
- VERIFY( sz01 >= 0 );
-
- sz01 = str01.size() + 5;
- str01.resize(sz01);
- sz02 = str01.size();
- VERIFY( sz01 == sz02 );
-
- sz01 = str01.size() - 5;
- str01.resize(sz01);
- sz02 = str01.size();
- VERIFY( sz01 == sz02 );
-
- std::string str05(30, 'q');
- std::string str06 = str05;
- str05 = str06 + str05;
- VERIFY( str05.capacity() >= str05.size() );
- VERIFY( str06.capacity() >= str06.size() );
-
- // 2 non POD types : resize, capacity, reserve
- std::basic_string< A<B> > str02;
- typedef std::basic_string< A<B> >::size_type size_type_o;
- size_type_o sz03;
- size_type_o sz04;
-
- sz03 = str02.capacity();
- str02.reserve(100);
- sz04 = str02.capacity();
- VERIFY( sz04 >= sz03 );
- VERIFY( sz04 >= 100 );
- str02.reserve();
- sz03 = str02.capacity();
- VERIFY( sz03 >= 0 );
-
- sz03 = str02.size() + 5;
- str02.resize(sz03);
- sz04 = str02.size();
- VERIFY( sz03 == sz04 );
-
- sz03 = str02.size() - 5;
- str02.resize(sz03);
- sz04 = str02.size();
- VERIFY( sz03 == sz04 );
-
- A<B> inst_obj;
- std::basic_string<A<B> > str07(30, inst_obj);
- std::basic_string<A<B> > str08 = str07;
- str07 = str08 + str07;
- VERIFY( str07.capacity() >= str07.size() );
- VERIFY( str08.capacity() >= str08.size() );
-
- // 3 POD types: size, length, max_size, clear(), empty()
- bool b01;
- std::string str011;
- b01 = str01.empty();
- VERIFY( b01 == true );
- sz01 = str01.size();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
- str01.c_str();
- sz01 = str01.size();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
-
- sz01 = str01.length();
- str01.c_str();
- str011 = str01 + "_addendum_";
- str01.c_str();
- sz02 = str01.length();
- VERIFY( sz01 == sz02 );
- sz02 = str011.length();
- VERIFY( sz02 > sz01 );
-
- // trickster allocator issues involved with these:
- std::string str3 = "8-chars_8-chars_";
- const char* p3 = str3.c_str();
- std::string str4 = str3 + "7-chars";
- const char* p4 = str3.c_str();
-
- sz01 = str01.size();
- sz02 = str01.max_size();
- VERIFY( sz02 >= sz01 );
-
- sz01 = str01.size();
- str01.clear();
- b01 = str01.empty();
- VERIFY( b01 == true );
- sz02 = str01.size();
- VERIFY( sz01 >= sz02 );
-
-
- // 4 non-POD types: size, length, max_size, clear(), empty()
- b01 = str02.empty();
- VERIFY( b01 == true );
- sz03 = str02.size();
- sz04 = str02.length();
- VERIFY( sz03 == sz04 );
- str02.c_str();
- sz03 = str02.size();
- sz04 = str02.length();
- VERIFY( sz03 == sz04 );
-
- sz03 = str02.max_size();
- VERIFY( sz03 >= sz04 );
-
- sz03 = str02.size();
- str02.clear();
- b01 = str02.empty();
- VERIFY( b01 == true );
- sz04 = str02.size();
- VERIFY( sz03 >= sz04 );
-}
-
-// libstdc++/4548
-// http://gcc.gnu.org/ml/libstdc++/2001-11/msg00150.html
-void test02()
-{
- bool test = true;
-
- std::string str01 = "twelve chars";
- // str01 becomes shared
- std::string str02 = str01;
- str01.reserve(1);
- VERIFY( str01.capacity() == 12 );
-}
-
-#if !__GXX_WEAK__
-// Explicitly instantiate for systems with no COMDAT or weak support.
-template
- std::basic_string< A<B> >::size_type
- std::basic_string< A<B> >::_Rep::_S_max_size;
-
-template
- A<B>
- std::basic_string< A<B> >::_Rep::_S_terminal;
-#endif
-
-int main()
-{
- test01();
- test02();
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc b/libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc
deleted file mode 100644
index d2406ed3599..00000000000
--- a/libstdc++-v3/testsuite/21_strings/char_traits_requirements.cc
+++ /dev/null
@@ -1,204 +0,0 @@
-// 1999-06-03 bkoz
-
-// Copyright (C) 1999, 2000, 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.1.1 Characher traits requirements
-
-#include <string>
-#include <testsuite_hooks.h>
-
-int test01(void)
-{
- bool test = true;
- const std::string str_01("zuma beach");
- const std::string str_02("montara and ocean beach");
-
- // 21.1.1 character traits requirements
-
- // Key for decoding what function signatures really mean:
- // X == char_traits<_CharT>
- // [c,d] == _CharT
- // [p,q] == const _CharT*
- // s == _CharT*
- // [n,i,j] == size_t
- // f == X::int_type
- // pos == X::pos_type
- // state == X::state_type
-
- // void X::assign(char c, char d)
- // assigns c = d;
- char c1 = 'z';
- char c2 = 'u';
- VERIFY( c1 != c2 );
- std::char_traits<char>::assign(c1,c2);
- VERIFY( c1 == 'u' );
-
- // char* X::move(char* s, const char* p, size_t n)
- // for each i in [0,n) performs X::assign(s[i], p[i]). Copies
- // correctly even where p is in [s, s + n), and yields s.
- char array1[] = {'z', 'u', 'm', 'a', ' ', 'b', 'e', 'a', 'c', 'h', 0};
- const char str_lit1[] = "montara and ocean beach";
- int len = sizeof(str_lit1) + sizeof(array1) - 1; // two terminating chars
- char array2[len];
-
- VERIFY( str_lit1[0] == 'm' );
- c1 = array2[0];
- c2 = str_lit1[0];
- char c3 = array2[1];
- char c4 = str_lit1[1];
- std::char_traits<char>::move(array2, str_lit1, 0);
- VERIFY( array2[0] == c1 );
- VERIFY( str_lit1[0] == c2 );
- std::char_traits<char>::move(array2, str_lit1, 1);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c3 );
- VERIFY( str_lit1[1] == c4 );
- std::char_traits<char>::move(array2, str_lit1, 2);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c4 );
- VERIFY( str_lit1[1] == c4 );
-
- char* pc1 = array1 + 1;
- c1 = pc1[0];
- c2 = array1[0];
- VERIFY( c1 != c2 );
- char* pc2 = std::char_traits<char>::move(array1, pc1, 0);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 == c3 );
- VERIFY( c2 == c4 );
- VERIFY( pc2 == array1 );
-
- c1 = pc1[0];
- c2 = array1[0];
- char* pc3 = pc1;
- pc2 = std::char_traits<char>::move(array1, pc1, 10);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 != c3 ); // underlying char array changed.
- VERIFY( c4 != c3 );
- VERIFY( pc2 == array1 );
- VERIFY( pc3 == pc1 ); // but pointers o-tay
- c1 = *(str_01.data());
- c2 = array1[0];
- VERIFY( c1 != c2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-#if _GLIBCPP_USE_WCHAR_T
-int test02(void)
-{
- bool test = true;
- const std::wstring str_01(L"zuma beach");
- const std::wstring str_02(L"montara and ocean beach");
-
- // 21.1.1 character traits requirements
-
- // Key for decoding what function signatures really mean:
- // X == char_traits<_CharT>
- // [c,d] == _CharT
- // [p,q] == const _CharT*
- // s == _CharT*
- // [n,i,j] == size_t
- // f == X::int_type
- // pos == X::pos_type
- // state == X::state_type
-
- // void X::assign(wchar_t c, wchar_t d)
- // assigns c = d;
- wchar_t c1 = L'z';
- wchar_t c2 = L'u';
- VERIFY( c1 != c2 );
- std::char_traits<wchar_t>::assign(c1,c2);
- VERIFY( c1 == L'u' );
-
- // char* X::move(char* s, const char* p, size_t n)
- // for each i in [0,n) performs X::assign(s[i], p[i]). Copies
- // correctly even where p is in [s, s + n), and yields s.
- wchar_t array1[] = {L'z', L'u', L'm', L'a', L' ', L'b', L'e', L'a', L'c', L'h', 0};
- const wchar_t str_lit1[] = L"montara and ocean beach";
- int len = sizeof(str_lit1) + sizeof(array1) - 1; // two terminating chars
- wchar_t array2[len];
-
- VERIFY( str_lit1[0] == 'm' );
- c1 = array2[0];
- c2 = str_lit1[0];
- wchar_t c3 = array2[1];
- wchar_t c4 = str_lit1[1];
- std::char_traits<wchar_t>::move(array2, str_lit1, 0);
- VERIFY( array2[0] == c1 );
- VERIFY( str_lit1[0] == c2 );
- std::char_traits<wchar_t>::move(array2, str_lit1, 1);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c3 );
- VERIFY( str_lit1[1] == c4 );
- std::char_traits<wchar_t>::move(array2, str_lit1, 2);
- VERIFY( array2[0] == c2 );
- VERIFY( str_lit1[0] == c2 );
- VERIFY( array2[1] == c4 );
- VERIFY( str_lit1[1] == c4 );
-
- wchar_t* pc1 = array1 + 1;
- c1 = pc1[0];
- c2 = array1[0];
- VERIFY( c1 != c2 );
- wchar_t* pc2 = std::char_traits<wchar_t>::move(array1, pc1, 0);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 == c3 );
- VERIFY( c2 == c4 );
- VERIFY( pc2 == array1 );
-
- c1 = pc1[0];
- c2 = array1[0];
- wchar_t* pc3 = pc1;
- pc2 = std::char_traits<wchar_t>::move(array1, pc1, 10);
- c3 = pc1[0];
- c4 = array1[0];
- VERIFY( c1 != c3 ); // underlying wchar_t array changed.
- VERIFY( c4 != c3 );
- VERIFY( pc2 == array1 );
- VERIFY( pc3 == pc1 ); // but pointers o-tay
- c1 = *(str_01.data());
- c2 = array1[0];
- VERIFY( c1 != c2 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-#endif //_GLIBCPP_USE_WCHAR_T
-
-int main()
-{
- test01();
-#if _GLIBCPP_USE_WCHAR_T
- test02();
-#endif
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc b/libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc
deleted file mode 100644
index 699a479fa83..00000000000
--- a/libstdc++-v3/testsuite/21_strings/char_traits_typedefs.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// 2001-02-11 gdr
-// Origin: Craig Rodrigues <rodrigc@mediaone.net>
-
-// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.1.2: char_traits typedefs
-
-#include <string>
-
-int main()
-{
- // 21.1.3: char_traits<char>::int_type == int
- // dg-options -ansi -pedantic-err
- std::char_traits<char>::int_type* p = 0;
- int* q = p; // dg-do compile
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/compare.cc b/libstdc++-v3/testsuite/21_strings/compare.cc
deleted file mode 100644
index bd95253e4db..00000000000
--- a/libstdc++-v3/testsuite/21_strings/compare.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-// 980930 bkoz work with libstdc++v3
-
-// Copyright (C) 1998, 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.6.8 basic_string::compare
-// int compare(const basic_string& str) const;
-// int compare(size_type pos1, size_type n1, const basic_string& str) const;
-// int compare(size_type pos1, size_type n1, const basic_string& str,
-// size_type pos2, size_type n2) const;
-// int compare(const charT* s) const;
-// int compare(size_type pos1, size_type n1,
-// const charT* s, size_type n2 = npos) const;
-
-// NB compare should be thought of as a lexographical compare, ie how
-// things would be sorted in a dictionary.
-
-#include <string>
-#include <testsuite_hooks.h>
-
-enum want_value {lt=0, z=1, gt=2};
-
-int
-test_value(int result, want_value expected);
-
-int
-test_value(int result, want_value expected)
-{
- bool pass = false;
-
- switch (expected) {
- case lt:
- if (result < 0)
- pass = true;
- break;
- case z:
- if (!result)
- pass = true;
- break;
- case gt:
- if (result > 0)
- pass = true;
- break;
- default:
- pass = false; //should not get here
- }
-
-#ifdef DEBUG_ASSERT
- assert(pass);
-#endif
-
- return 0;
-}
-
-
-int
-test01()
-{
- using namespace std;
-
- string str_0("costa rica");
- string str_1("costa marbella");
- string str_2;
-
- //sanity check
- test_value(strcmp("costa marbella", "costa rica"), lt);
- test_value(strcmp("costa rica", "costa rica"), z);
- test_value(strcmp(str_1.data(), str_0.data()), lt);
- test_value(strcmp(str_0.data(), str_1.data()), gt);
- test_value(strncmp(str_1.data(), str_0.data(), 6), z);
- test_value(strncmp(str_1.data(), str_0.data(), 14), lt);
- test_value(memcmp(str_1.data(), str_0.data(), 6), z);
- test_value(memcmp(str_1.data(), str_0.data(), 14), lt);
- test_value(memcmp("costa marbella", "costa rica", 14), lt);
-
- // int compare(const basic_string& str) const;
- test_value(str_0.compare(str_1), gt); //because r>m
- test_value(str_1.compare(str_0), lt); //because m<r
- str_2 = str_0;
- test_value(str_2.compare(str_0), z);
- str_2 = "cost";
- test_value(str_2.compare(str_0), lt);
- str_2 = "costa ricans";
- test_value(str_2.compare(str_0), gt);
-
- // int compare(size_type pos1, size_type n1, const basic_string& str) const;
- test_value(str_1.compare(0, 6, str_0), lt);
- str_2 = "cost";
- test_value(str_1.compare(0, 4, str_2), z);
- test_value(str_1.compare(0, 5, str_2), gt);
-
- // int compare(size_type pos1, size_type n1, const basic_string& str,
- // size_type pos2, size_type n2) const;
- test_value(str_1.compare(0, 6, str_0, 0, 6), z);
- test_value(str_1.compare(0, 7, str_0, 0, 7), lt);
- test_value(str_0.compare(0, 7, str_1, 0, 7), gt);
-
- // int compare(const charT* s) const;
- test_value(str_0.compare("costa marbella"), gt);
- test_value(str_1.compare("costa rica"), lt);
- str_2 = str_0;
- test_value(str_2.compare("costa rica"), z);
- test_value(str_2.compare("cost"), gt);
- test_value(str_2.compare("costa ricans"), lt);
-
- // int compare(size_type pos, size_type n1, const charT* str,
- // size_type n2 = npos) const;
- test_value(str_1.compare(0, 6, "costa rica", 0, 6), z);
- test_value(str_1.compare(0, 7, "costa rica", 0, 7), lt);
- test_value(str_0.compare(0, 7, "costa marbella", 0, 7), gt);
-
- return 0;
-}
-
-
-int
-main()
-{
- test01();
-
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc b/libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc
deleted file mode 100644
index 28e9d8ef160..00000000000
--- a/libstdc++-v3/testsuite/21_strings/ctor_copy_dtor.cc
+++ /dev/null
@@ -1,240 +0,0 @@
-// 1999-06-04 bkoz
-
-// Copyright (C) 1999, 2000, 2001, 2002, 2003 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.1 basic_string constructors.
-
-#include <new>
-#include <string>
-#include <vector>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-void test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::iterator citerator;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "rodeo beach, marin";
- const std::string str01(str_lit01);
- const std::string str02("baker beach, san francisco");
-
- // basic_string(const string&, size_type pos = 0, siz_type n = npos, alloc)
- csz01 = str01.size();
- try {
- std::string str03(str01, csz01 + 1);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- try {
- std::string str03(str01, csz01);
- VERIFY( str03.size() == 0 );
- VERIFY( str03.size() <= str03.capacity() );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // basic_string(const char* s, size_type n, alloc)
- csz01 = str01.max_size();
- // NB: As strlen(str_lit01) != csz01, this test is undefined. It
- // should not crash, but what gets constructed is a bit arbitrary.
- try {
- std::string str03(str_lit01, csz01 + 1);
- VERIFY( true );
- }
- catch(std::length_error& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // NB: As strlen(str_lit01) != csz01, this test is undefined. It
- // should not crash, but what gets constructed is a bit arbitrary.
- // The "maverick's" of all string objects.
- try {
- std::string str04(str_lit01, npos);
- VERIFY( true );
- }
- catch(std::length_error& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // Build a maxsize - 1 lengthed string consisting of all A's
- try {
- std::string str03(csz01 - 1, 'A');
- VERIFY( str03.size() == csz01 - 1 );
- VERIFY( str03.size() <= str03.capacity() );
- }
- // NB: bad_alloc is regrettable but entirely kosher for
- // out-of-memory situations.
- catch(std::bad_alloc& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // basic_string(const char* s, const allocator& a = allocator())
- std::string str04(str_lit01);
- VERIFY( str01 == str04 );
-
-
- // basic_string(size_type n, char c, const allocator& a = allocator())
- csz01 = str01.max_size();
- try {
- std::string str03(csz01 + 1, 'z');
- VERIFY( false );
- }
- catch(std::length_error& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- try {
- std::string str04(npos, 'b'); // the "maverick's" of all string objects.
- VERIFY( false );
- }
- catch(std::length_error& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- try {
- std::string str03(csz01 - 1, 'z');
- VERIFY( str03.size() != 0 );
- VERIFY( str03.size() <= str03.capacity() );
- }
- // NB: bad_alloc is regrettable but entirely kosher for
- // out-of-memory situations.
- catch(std::bad_alloc& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
-
- // template<typename _InputIter>
- // basic_string(_InputIter begin, _InputIter end, const allocator& a)
- std::string str06(str01.begin(), str01.end());
- VERIFY( str06 == str01 );
-}
-
-void test02()
-{
- bool test = true;
-
- // template<typename _InputIter>
- // basic_string(_InputIter begin, _InputIter end, const allocator& a)
- // where _InputIter is integral [21.3.1 para 15]
- std::string s(10,0);
- VERIFY( s.size() == 10 );
-}
-
-void test03()
-{
- bool test = true;
- const char* with_nulls = "This contains \0 a zero byte.";
-
- // These are tests to see how basic_string handles data with NUL
- // bytes. Obviously basic_string(char*) will halt at the first one, but
- // nothing else should.
- std::string s1 (with_nulls, 28);
- VERIFY( s1.size() == 28 );
- std::string s2 (s1);
- VERIFY( s2.size() == 28 );
-
- // Not defined, but libstdc++ throws an exception.
- const char* bogus = 0;
- try
- {
- std::string str1(bogus);
- VERIFY( false );
- }
- catch(std::exception& fail)
- {
- VERIFY( true );
- }
-
- // Not defined, but libstdc++ throws an exception.
- try
- {
- std::string str2(bogus, 5);
- VERIFY( false );
- }
- catch(std::exception& fail)
- {
- VERIFY( true );
- }
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2002-06/msg00025.html
-void test04()
-{
- bool test = true;
-
- std::string str01("portofino");
-
- std::string::reverse_iterator i1 = str01.rbegin();
- std::string::reverse_iterator i2 = str01.rend();
- std::string str02(i1, i2);
- VERIFY( str02 == "onifotrop" );
-}
-
-// libstdc++/8347
-void test05()
-{
- bool test = true;
-
- std::vector<char> empty;
- std::string empty2(empty.begin(), empty.end());
-
- // libstdc++/8716 (same underlying situation, same fix)
- char const * s = NULL;
- std::string zero_length_built_with_NULL(s,0);
-}
-
-int main()
-{
- __gnu_cxx_test::set_memory_limits();
- test01();
- test02();
- test03();
- test04();
- test05();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/element_access.cc b/libstdc++-v3/testsuite/21_strings/element_access.cc
deleted file mode 100644
index d9525ba61b1..00000000000
--- a/libstdc++-v3/testsuite/21_strings/element_access.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-// 1999-06-08 bkoz
-
-// Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.4 basic_string element access
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const std::string str01("tamarindo, costa rica");
- std::string str02("41st street beach, capitola, california");
- std::string str03;
-
- // const_reference operator[] (size_type pos) const;
- csz01 = str01.size();
- cref cref1 = str01[csz01 - 1];
- VERIFY( cref1 == 'a' );
- cref cref2 = str01[csz01];
- VERIFY( cref2 == char() );
-
- // reference operator[] (size_type pos);
- csz02 = str02.size();
- ref ref1 = str02[csz02 - 1];
- VERIFY( ref1 == 'a' );
- ref ref2 = str02[1];
- VERIFY( ref2 == '1' );
-
- // const_reference at(size_type pos) const;
- csz01 = str01.size();
- cref cref3 = str01.at(csz01 - 1);
- VERIFY( cref3 == 'a' );
- try {
- cref cref4 = str01.at(csz01);
- VERIFY( false ); // Should not get here, as exception thrown.
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- // reference at(size_type pos);
- csz01 = str02.size();
- ref ref3 = str02.at(csz02 - 1);
- VERIFY( ref3 == 'a' );
- try {
- ref ref4 = str02.at(csz02);
- VERIFY( false ); // Should not get here, as exception thrown.
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/find.cc b/libstdc++-v3/testsuite/21_strings/find.cc
deleted file mode 100644
index c6a4c1cbac8..00000000000
--- a/libstdc++-v3/testsuite/21_strings/find.cc
+++ /dev/null
@@ -1,198 +0,0 @@
-// 1999-06-09 bkoz
-
-// Copyright (C) 1994, 1999, 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.6.1 basic_string find
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "mave";
- const std::string str01("mavericks, santa cruz");
- std::string str02(str_lit01);
- std::string str03("s, s");
- std::string str04;
-
- // size_type find(const string&, size_type pos = 0) const;
- csz01 = str01.find(str01);
- VERIFY( csz01 == 0 );
- csz01 = str01.find(str01, 4);
- VERIFY( csz01 == npos );
- csz01 = str01.find(str02, 0);
- VERIFY( csz01 == 0 );
- csz01 = str01.find(str02, 3);
- VERIFY( csz01 == npos );
- csz01 = str01.find(str03, 0);
- VERIFY( csz01 == 8 );
- csz01 = str01.find(str03, 3);
- VERIFY( csz01 == 8 );
- csz01 = str01.find(str03, 12);
- VERIFY( csz01 == npos );
-
- // An empty string consists of no characters
- // therefore it should be found at every point in a string,
- // except beyond the end
- csz01 = str01.find(str04, 0);
- VERIFY( csz01 == 0 );
- csz01 = str01.find(str04, 5);
- VERIFY( csz01 == 5 );
- csz01 = str01.find(str04, str01.size());
- VERIFY( csz01 == str01.size() );
- csz01 = str01.find(str04, str01.size()+1);
- VERIFY( csz01 == npos );
-
- // size_type find(const char* s, size_type pos, size_type n) const;
- csz01 = str01.find(str_lit01, 0, 3);
- VERIFY( csz01 == 0 );
- csz01 = str01.find(str_lit01, 3, 0);
- VERIFY( csz01 == 3 );
-
- // size_type find(const char* s, size_type pos = 0) const;
- csz01 = str01.find(str_lit01);
- VERIFY( csz01 == 0 );
- csz01 = str01.find(str_lit01, 3);
- VERIFY( csz01 == npos );
-
- // size_type find(char c, size_type pos = 0) const;
- csz01 = str01.find('z');
- csz02 = str01.size() - 1;
- VERIFY( csz01 == csz02 );
- csz01 = str01.find('/');
- VERIFY( csz01 == npos );
-
- // size_type find_first_of(const string&, size_type pos = 0) const;
- std::string str05("xena rulez");
- csz01 = str01.find_first_of(str01);
- VERIFY( csz01 == 0 );
- csz01 = str01.find_first_of(str01, 4);
- VERIFY( csz01 == 4 );
- csz01 = str01.find_first_of(str02, 0);
- VERIFY( csz01 == 0 );
- csz01 = str01.find_first_of(str02, 3);
- VERIFY( csz01 == 3 );
- csz01 = str01.find_first_of(str03, 0);
- VERIFY( csz01 == 8 );
- csz01 = str01.find_first_of(str03, 3);
- VERIFY( csz01 == 8 );
- csz01 = str01.find_first_of(str03, 12);
- VERIFY( csz01 == 16 );
- csz01 = str01.find_first_of(str05, 0);
- VERIFY( csz01 == 1 );
- csz01 = str01.find_first_of(str05, 4);
- VERIFY( csz01 == 4 );
-
- // An empty string consists of no characters
- // therefore it should be found at every point in a string,
- // except beyond the end
- // However, str1.find_first_of(str2,pos) finds the first character in
- // str1 (starting at pos) that exists in str2, which is none for empty str2
- csz01 = str01.find_first_of(str04, 0);
- VERIFY( csz01 == npos );
- csz01 = str01.find_first_of(str04, 5);
- VERIFY( csz01 == npos );
-
- // size_type find_first_of(const char* s, size_type pos, size_type n) const;
- csz01 = str01.find_first_of(str_lit01, 0, 3);
- VERIFY( csz01 == 0 );
- csz01 = str01.find_first_of(str_lit01, 3, 0);
- VERIFY( csz01 == npos );
-
- // size_type find_first_of(const char* s, size_type pos = 0) const;
- csz01 = str01.find_first_of(str_lit01);
- VERIFY( csz01 == 0 );
- csz01 = str01.find_first_of(str_lit01, 3);
- VERIFY( csz01 == 3 );
-
- // size_type find_first_of(char c, size_type pos = 0) const;
- csz01 = str01.find_first_of('z');
- csz02 = str01.size() - 1;
- VERIFY( csz01 == csz02 );
-
- // size_type find_last_of(const string& str, size_type pos = 0) const;
- // size_type find_last_of(const char* s, size_type pos, size_type n) const;
- // size_type find_last_of(const char* s, size_type pos = 0) const;
- // size_type find_last_of(char c, size_type pos = 0) const;
-
-#if 1
-// from tstring.cc, from jason merrill, et. al.
- std::string x;
- std::string::size_type pos;
- pos = x.find_last_not_of('X');
- VERIFY( pos == npos );
- pos = x.find_last_not_of("XYZ");
- VERIFY( pos == npos );
-
- std::string y("a");
- pos = y.find_last_not_of('X');
- VERIFY( pos == 0 );
- pos = y.find_last_not_of('a');
- VERIFY( pos == npos );
- pos = y.find_last_not_of("XYZ");
- VERIFY( pos == 0 );
- pos = y.find_last_not_of("a");
- VERIFY( pos == npos );
-
- std::string z("ab");
- pos = z.find_last_not_of('X');
- VERIFY( pos == 1 );
- pos = z.find_last_not_of("XYZ");
- VERIFY( pos == 1 );
- pos = z.find_last_not_of('b');
- VERIFY( pos == 0 );
- pos = z.find_last_not_of("Xb");
- VERIFY( pos == 0 );
- pos = z.find_last_not_of("Xa");
- VERIFY( pos == 1 );
- pos = z.find_last_of("ab");
- VERIFY( pos == 1 );
- pos = z.find_last_of("Xa");
- VERIFY( pos == 0 );
- pos = z.find_last_of("Xb");
- VERIFY( pos == 1 );
- pos = z.find_last_of("XYZ");
- VERIFY( pos == std::string::npos );
- pos = z.find_last_of('a');
- VERIFY( pos == 0 );
- pos = z.find_last_of('b');
- VERIFY( pos == 1 );
- pos = z.find_last_of('X');
- VERIFY( pos == std::string::npos );
-#endif
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/insert.cc b/libstdc++-v3/testsuite/21_strings/insert.cc
deleted file mode 100644
index 5e1eda86959..00000000000
--- a/libstdc++-v3/testsuite/21_strings/insert.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-// 1999-06-03 bkoz
-
-// Copyright (C) 1999, 2003 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.5.4 basic_string::insert
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-int test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::iterator citerator;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const std::string str01("rodeo beach, marin");
- const std::string str02("baker beach, san francisco");
- std::string str03;
-
- // string& insert(size_type p1, const string& str, size_type p2, size_type n)
- // requires:
- // 1) p1 <= size()
- // 2) p2 <= str.size()
- // 3) rlen = min(n, str.size() - p2)
- // throws:
- // 1) out_of_range if p1 > size() || p2 > str.size()
- // 2) length_error if size() >= npos - rlen
- // effects:
- // replaces *this with new string of length size() + rlen such that
- // nstr[0] to nstr[p1] == thisstr[0] to thisstr[p1]
- // nstr[p1 + 1] to nstr[p1 + rlen] == str[p2] to str[p2 + rlen]
- // nstr[p1 + 1 + rlen] to nstr[...] == thisstr[p1 + 1] to thisstr[...]
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- try {
- str03.insert(csz01 + 1, str02, 0, 5);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- try {
- str03.insert(0, str02, csz02 + 1, 5);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- csz01 = str01.max_size();
- try {
- std::string str04(csz01, 'b');
- str03 = str04;
- csz02 = str02.size();
- try {
- str03.insert(0, str02, 0, 5);
- VERIFY( false );
- }
- catch(std::length_error& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
- }
- catch(std::bad_alloc& failure){
- VERIFY( true );
- }
- catch(std::exception& failure){
- VERIFY( false );
- }
-
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- str03.insert(13, str02, 0, 12);
- VERIFY( str03 == "rodeo beach, baker beach,marin" );
-
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- str03.insert(0, str02, 0, 12);
- VERIFY( str03 == "baker beach,rodeo beach, marin" );
-
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- str03.insert(csz01, str02, 0, csz02);
- VERIFY( str03 == "rodeo beach, marinbaker beach, san francisco" );
-
- // string& insert(size_type __p, const string& string);
- // insert(p1, str, 0, npos)
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- str03.insert(csz01, str02);
- VERIFY( str03 == "rodeo beach, marinbaker beach, san francisco" );
-
- str03 = str01;
- csz01 = str03.size();
- csz02 = str02.size();
- str03.insert(0, str02);
- VERIFY( str03 == "baker beach, san franciscorodeo beach, marin" );
-
- // string& insert(size_type __p, const char* s, size_type n);
- // insert(p1, string(s,n))
- str03 = str02;
- csz01 = str03.size();
- str03.insert(0, "-break at the bridge", 20);
- VERIFY( str03 == "-break at the bridgebaker beach, san francisco" );
-
- // string& insert(size_type __p, const char* s);
- // insert(p1, string(s))
- str03 = str02;
- str03.insert(0, "-break at the bridge");
- VERIFY( str03 == "-break at the bridgebaker beach, san francisco" );
-
- // string& insert(size_type __p, size_type n, char c)
- // insert(p1, string(n,c))
- str03 = str02;
- csz01 = str03.size();
- str03.insert(csz01, 5, 'z');
- VERIFY( str03 == "baker beach, san franciscozzzzz" );
-
- // iterator insert(iterator p, char c)
- // inserts a copy of c before the character referred to by p
- str03 = str02;
- citerator cit01 = str03.begin();
- str03.insert(cit01, 'u');
- VERIFY( str03 == "ubaker beach, san francisco" );
-
- // iterator insert(iterator p, size_type n, char c)
- // inserts n copies of c before the character referred to by p
- str03 = str02;
- cit01 = str03.begin();
- str03.insert(cit01, 5, 'u');
- VERIFY( str03 == "uuuuubaker beach, san francisco" );
-
- // template<inputit>
- // void
- // insert(iterator p, inputit first, inputit, last)
- // ISO-14882: defect #7 part 1 clarifies this member function to be:
- // insert(p - begin(), string(first,last))
- str03 = str02;
- csz01 = str03.size();
- str03.insert(str03.begin(), str01.begin(), str01.end());
- VERIFY( str03 == "rodeo beach, marinbaker beach, san francisco" );
-
- str03 = str02;
- csz01 = str03.size();
- str03.insert(str03.end(), str01.begin(), str01.end());
- VERIFY( str03 == "baker beach, san franciscorodeo beach, marin" );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-// Once more
-// string& insert(size_type __p, const char* s, size_type n);
-// string& insert(size_type __p, const char* s);
-// but now s points inside the _Rep
-int test02(void)
-{
- bool test = true;
-
- std::string str01;
- const char* title = "Everything was beautiful, and nothing hurt";
- // Increasing size: str01 is reallocated every time.
- str01 = title;
- str01.insert(0, str01.c_str() + str01.size() - 4, 4);
- VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str(), 5);
- VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(10, str01.c_str() + 4, 6);
- VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str(), 10);
- VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str() + 11, 13);
- VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str());
- VERIFY( str01 == "Everything was beautiful, and nothing hurt"
- "Everything was beautiful, and nothing hurt");
- // Again: no reallocations.
- str01 = title;
- str01.insert(0, str01.c_str() + str01.size() - 4, 4);
- VERIFY( str01 == "hurtEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str(), 5);
- VERIFY( str01 == "EveryEverything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(10, str01.c_str() + 4, 6);
- VERIFY( str01 == "Everythingything was beautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str(), 10);
- VERIFY( str01 == "Everything was Everythingbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(15, str01.c_str() + 11, 13);
- VERIFY( str01 == "Everything was was beautifulbeautiful, and nothing hurt" );
- str01 = title;
- str01.insert(0, str01.c_str());
- VERIFY( str01 == "Everything was beautiful, and nothing hurt"
- "Everything was beautiful, and nothing hurt");
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- __gnu_cxx_test::set_memory_limits();
- test01();
- test02();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/inserters_extractors.cc b/libstdc++-v3/testsuite/21_strings/inserters_extractors.cc
deleted file mode 100644
index 41a9a65f6ea..00000000000
--- a/libstdc++-v3/testsuite/21_strings/inserters_extractors.cc
+++ /dev/null
@@ -1,363 +0,0 @@
-// 1999-07-01 bkoz
-
-// Copyright (C) 1999, 2000, 2001, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.7.9 inserters and extractors
-
-// NB: This file is predicated on sstreams, istreams, and ostreams
-// working, not to mention other major details like char_traits, and
-// all of the string class.
-
-#include <string>
-#include <stdexcept>
-#include <sstream>
-#include <fstream>
-#include <iostream>
-#include <iomanip>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const std::string str01("sailing grand traverse bay\n"
- "\t\t\t from Elk Rapids to the point reminds me of miles");
- const std::string str02("sailing");
- const std::string str03("grand");
- const std::string str04("traverse");
- const std::string str05;
- std::string str10;
-
- // istream& operator>>(istream&, string&)
- std::istringstream istrs01(str01);
- istrs01 >> str10;
- VERIFY( str10 == str02 );
- try
- {
- std::istringstream::int_type i01 = istrs01.peek(); //a-boo
- VERIFY( std::istringstream::traits_type::to_char_type(i01) == ' ' );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- istrs01.clear();
- istrs01 >> str10;
- VERIFY( str10 == str03 );
- istrs01.clear();
- istrs01 >> str10;
- VERIFY( str10 == str04 ); // sentry picks out the white spaces. .
-
- std::istringstream istrs02(str05); // empty
- istrs02 >> str10;
- VERIFY( str10 == str04 );
-
- // istream& getline(istream&, string&, char)
- // istream& getline(istream&, string&)
- try
- {
- istrs01.clear();
- getline(istrs01, str10);
- VERIFY( !istrs01.fail() );
- VERIFY( !istrs01.eof() );
- VERIFY( istrs01.good() );
- VERIFY( str10 == " bay" );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- try
- {
- istrs01.clear();
- getline(istrs01, str10,'\t');
- VERIFY( !istrs01.fail() );
- VERIFY( !istrs01.eof() );
- VERIFY( istrs01.good() );
- VERIFY( str10 == str05 );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- try
- {
- istrs01.clear();
- getline(istrs01, str10,'\t');
- VERIFY( !istrs01.fail() );
- VERIFY( !istrs01.eof() );
- VERIFY( istrs01.good() );
- VERIFY( str10 == str05 );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- try
- {
- istrs01.clear();
- getline(istrs01, str10, '.');
- VERIFY( !istrs01.fail() );
- VERIFY( istrs01.eof() );
- VERIFY( !istrs01.good() );
- VERIFY( str10 == "\t from Elk Rapids to the point reminds me of miles" );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- try
- {
- getline(istrs02, str10);
- VERIFY( istrs02.fail() );
- VERIFY( istrs02.eof() );
- VERIFY( str10 =="\t from Elk Rapids to the point reminds me of miles" );
- }
- catch(std::exception& fail)
- {
- VERIFY( false ); // shouldn't throw
- }
-
- // ostream& operator<<(ostream&, const basic_string&)
- std::ostringstream ostrs01;
- try
- {
- ostrs01 << str01;
- VERIFY( ostrs01.str() == str01 );
- }
- catch(std::exception& fail)
- {
- VERIFY( false );
- }
-
- std::string hello_world;
- std::cout << hello_world;
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-
-// testing basic_stringbuf::xsputn via stress testing with large strings
-// based on a bug report libstdc++ 9
-void test04(int size)
-{
- bool test = true;
- std::string str(size, 's');
- int expected_size = 2 * (size + 1);
- std::ostringstream oss(str);
-
- // sanity checks
- VERIFY( str.size() == size );
- VERIFY( oss.good() );
-
- // stress test
- oss << str << std::endl;
- if (!oss.good())
- test = false;
-
- oss << str << std::endl;
- if (!oss.good())
- test = false;
-
- VERIFY( str.size() == size );
- VERIFY( oss.good() );
- std::string str_tmp = oss.str();
- VERIFY( str_tmp.size() == expected_size );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-
-// testing basic_filebuf::xsputn via stress testing with large strings
-// based on a bug report libstdc++ 9
-// mode == out
-void test05(int size)
-{
- bool test = true;
- const char filename[] = "inserters_extractors-1.txt";
- const char fillc = 'f';
- std::ofstream ofs(filename);
- std::string str(size, fillc);
-
- // sanity checks
- VERIFY( str.size() == size );
- VERIFY( ofs.good() );
-
- // stress test
- ofs << str << std::endl;
- if (!ofs.good())
- test = false;
-
- ofs << str << std::endl;
- if (!ofs.good())
- test = false;
-
- VERIFY( str.size() == size );
- VERIFY( ofs.good() );
-
- ofs.close();
-
- // sanity check on the written file
- std::ifstream ifs(filename);
- int count = 0;
- char c;
- while (count <= (2 * size) + 4)
- {
- ifs >> c;
- if (ifs.good() && c == fillc)
- {
- ++count;
- c = '0';
- }
- else
- break;
- }
-
- VERIFY( count == 2 * size );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-
-// istringstream/stringbuf extractor properly size buffer based on
-// actual, not allocated contents (string.size() vs. string.capacity()).
-// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00049.html
-void test06(void)
-{
- bool test = true;
-
- typedef std::string::size_type size_type;
- std::string str01("@silent");
- size_type i01 = str01.size();
- size_type i02 = str01.capacity();
- str01.erase(0, 1);
- size_type i03 = str01.size();
- size_type i04 = str01.capacity();
- VERIFY( i01 - 1 == i03 );
- VERIFY( i02 >= i04 );
-
- std::istringstream is(str01);
- std::string str02;
- is >> str02 >> std::ws;
- size_type i05 = str02.size();
- size_type i06 = str02.capacity();
- VERIFY( i05 == i03 );
- VERIFY( i06 <= i04 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// http://gcc.gnu.org/ml/libstdc++/2000-q1/msg00085.html
-// istream::operator>>(string)
-// sets failbit
-// NB: this is a defect in the standard.
-void test07(void)
-{
- bool test = true;
- const std::string name("z6.cc");
- std::istringstream iss (name);
- int i = 0;
- std::string s;
- while (iss >> s)
- ++i;
-
- VERIFY( i < 3 );
- VERIFY( static_cast<bool>(iss.rdstate() & std::ios_base::failbit) );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-}
-
-// libstdc++/1019
-void test08()
-{
- using namespace std;
-
- bool test = true;
- istringstream istrm("enero:2001");
- int year;
- char sep;
- string month;
-
- istrm >> setw(5) >> month >> sep >> year;
- VERIFY( month.size() == 5 );
- VERIFY( sep == ':' );
- VERIFY( year == 2001 );
-}
-
-// libstdc++/2830
-void test09()
-{
- bool test = true;
- std::string blanks( 3, '\0');
- std::string foo = "peace";
- foo += blanks;
- foo += "& love";
-
- std::ostringstream oss1;
- oss1 << foo;
- VERIFY( oss1.str() == foo );
-
- std::ostringstream oss2;
- oss2.width(20);
- oss2 << foo;
- VERIFY( oss2.str() != foo );
- VERIFY( oss2.str().size() == 20 );
-}
-
-int main()
-{
- test01();
-
- test04(1); // expected_size == 4
- test04(1000); // expected_size == 2002
- test04(10000); // expected_size == 20002
-
- test05(1);
- test05(1000);
- test05(10000);
-
- test06();
- test07();
-
- test08();
-
- test09();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/invariants.cc b/libstdc++-v3/testsuite/21_strings/invariants.cc
deleted file mode 100644
index d6dd05d6831..00000000000
--- a/libstdc++-v3/testsuite/21_strings/invariants.cc
+++ /dev/null
@@ -1,175 +0,0 @@
-// 1999-06-08 bkoz
-
-// Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3 template class basic_string
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-// Do a quick sanity check on known problems with element access and
-// ref-counted strings. These should all pass, regardless of the
-// underlying string implementation, of course.
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::iterator siterator;
- typedef std::string::reverse_iterator sriterator;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
- siterator it1;
- sriterator rit1;
-
- std::string str01("montara beach, half moon bay");
- const std::string str02("ocean beach, san francisco");
- std::string str03;
-
- // 21.3 p 5
-
- // References, pointers, and iterators referring to the elements of
- // a basic_string may be invalidated by the following uses of that
- // basic_string object:
-
- // ...
-
- // Susequent to any of the above uses except the forms of insert()
- // and erase() which return iterators, the first call to non-const
- // member functions operator[](), at(), begin(), rbegin(), end(), or
- // rend()
-
- str03 = str01;
- it1 = str01.begin();
- *it1 = 'x';
- VERIFY( str01[0] == 'x' );
- VERIFY( str03[0] == 'm' );
-
- str03 = str01;
- csz01 = str01.size();
- rit1 = str01.rbegin(); // NB: Pointing at one-past the end, so ...
- *rit1 = 'z'; // ... but it's taken care of here
- VERIFY( str01[csz01 - 1] == 'z' );
- VERIFY( str03[csz01 - 1] == 'y' );
-
- str03 = str01;
- csz01 = str01.size();
- std::string::reference r1 = str01.at(csz01 - 2);
- VERIFY( str03 == str01 );
- r1 = 'd';
- VERIFY( str01[csz01 - 2] == 'd' );
- VERIFY( str03[csz01 - 2] == 'a' );
-
- str03 = str01;
- csz01 = str01.size();
- std::string::reference r2 = str01[csz01 - 3];
- VERIFY( str03 == str01 );
- r2 = 'w';
- VERIFY( str01[csz01 - 3] == 'w' );
- VERIFY( str03[csz01 - 3] == 'b' );
-
- str03 = str01;
- csz02 = str01.size();
- it1 = str01.end();
- VERIFY( str03 == str01 );
- --it1;
- *it1 = 'q';
- VERIFY( str01[csz02 - 1] == 'q' );
- VERIFY( str03[csz02 - 1] == 'z' );
-
- str03 = str01;
- rit1 = str01.rend();
- VERIFY( str03 == str01 );
- --rit1;
- *rit1 = 'p';
- VERIFY( str01[0] == 'p' );
- VERIFY( str03[0] == 'x' );
-
- // need to also test for const begin/const end
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-// Do another sanity check, this time for member functions that return
-// iterators, namely insert and erase.
-bool test02(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::iterator siterator;
- typedef std::string::reverse_iterator sriterator;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
- siterator it1;
- sriterator rit1;
-
- const std::string str01("its beach, santa cruz");
-
- std::string str02 = str01;
- std::string str05 = str02; // optional, so that begin below causes a mutate
- std::string::iterator p = str02.insert(str02.begin(), ' ');
- std::string str03 = str02;
- VERIFY( str03 == str02 );
- *p = '!';
- VERIFY( *str03.c_str() == ' ' );
- str03[0] = '@';
- VERIFY( str02[0] == '!' );
- VERIFY( *p == '!' );
- VERIFY( str02 != str05 );
- VERIFY( str02 != str03 );
-
- std::string str10 = str01;
- std::string::iterator p2 = str10.insert(str10.begin(), 'a');
- std::string str11 = str10;
- *p2 = 'e';
- VERIFY( str11 != str10 );
-
- std::string str06 = str01;
- std::string str07 = str06; // optional, so that begin below causes a mutate
- p = str06.erase(str06.begin());
- std::string str08 = str06;
- VERIFY( str08 == str06 );
- *p = '!';
- VERIFY( *str08.c_str() == 't' );
- str08[0] = '@';
- VERIFY( str06[0] == '!' );
- VERIFY( *p == '!' );
- VERIFY( str06 != str07 );
- VERIFY( str06 != str08 );
-
- std::string str12 = str01;
- p2 = str12.erase(str12.begin(), str12.begin() + str12.size() - 1);
- std::string str13 = str12;
- *p2 = 'e';
- VERIFY( str12 != str13 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- test01();
- test02();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/nonmember.cc b/libstdc++-v3/testsuite/21_strings/nonmember.cc
deleted file mode 100644
index 8b9671a4961..00000000000
--- a/libstdc++-v3/testsuite/21_strings/nonmember.cc
+++ /dev/null
@@ -1,300 +0,0 @@
-// 1998-10-01, 1999-06-25 bkoz
-
-// Copyright (C) 1998, 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.7.1 basic_string non-member functions
-
-// 21.3.7.2 operator==
-/*
-template<class charT, class traits, class Allocator>
- bool operator==(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator==(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator==(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-*/
-
-// 21.3.7.3 operator!=
-/*
-template<class charT, class traits, class Allocator>
- bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator!=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-*/
-
-// 21.3.7.4 operator<
-/*
-template<class charT, class traits, class Allocator>
- bool operator< (const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator< (const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator< (const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-*/
-
-// 21.3.7.5 operator>
-/*
-template<class charT, class traits, class Allocator>
- bool operator> (const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator> (const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator> (const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-*/
-
-//21.3.7.6 operator<=
-/*
-template<class charT, class traits, class Allocator>
- bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator<=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-*/
-
-// 21.3.7.7 operator>=
-/*
-template<class charT, class traits, class Allocator>
- bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-
-template<class charT, class traits, class Allocator>
- bool operator>=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-*/
-
-#include <string>
-#include <testsuite_hooks.h>
-
-int test01(void)
-{
- bool test = true;
- std::string str_0("costa rica");
- std::string str_1("costa marbella");
- std::string str_2("cost");
- std::string str_3("costa ricans");
- std::string str_4;
-
- str_4 = str_0;
- //comparisons between string objects
- VERIFY( !(str_0 == str_1) );
- VERIFY( !(str_0 == str_2) );
- VERIFY( !(str_0 == str_3) );
- VERIFY( !(str_1 == str_0) );
- VERIFY( !(str_2 == str_0) );
- VERIFY( !(str_3 == str_0) );
- VERIFY( str_4 == str_0 );
- VERIFY( str_0 == str_4 );
-
- VERIFY( str_0 != str_1 );
- VERIFY( str_0 != str_2 );
- VERIFY( str_0 != str_3 );
- VERIFY( str_1 != str_0 );
- VERIFY( str_2 != str_0 );
- VERIFY( str_3 != str_0 );
- VERIFY( !(str_0 != str_4) );
- VERIFY( !(str_4 != str_0) );
-
- VERIFY( str_0 > str_1 ); //true cuz r>m
- VERIFY( str_0 > str_2 );
- VERIFY( !(str_0 > str_3) );
- VERIFY( !(str_1 > str_0) ); //false cuz m<r
- VERIFY( !(str_2 > str_0) );
- VERIFY( str_3 > str_0 );
- VERIFY( !(str_0 > str_4) );
- VERIFY( !(str_4 > str_0) );
-
- VERIFY( !(str_0 < str_1) ); //false cuz r>m
- VERIFY( !(str_0 < str_2) );
- VERIFY( str_0 < str_3 );
- VERIFY( str_1 < str_0 ); //true cuz m<r
- VERIFY( str_2 < str_0 );
- VERIFY( !(str_3 < str_0) );
- VERIFY( !(str_0 < str_4) );
- VERIFY( !(str_4 < str_0) );
-
- VERIFY( str_0 >= str_1 ); //true cuz r>m
- VERIFY( str_0 >= str_2 );
- VERIFY( !(str_0 >= str_3) );
- VERIFY( !(str_1 >= str_0) );//false cuz m<r
- VERIFY( !(str_2 >= str_0) );
- VERIFY( str_3 >= str_0 );
- VERIFY( str_0 >= str_4 );
- VERIFY( str_4 >= str_0 );
-
- VERIFY( !(str_0 <= str_1) );//false cuz r>m
- VERIFY( !(str_0 <= str_2) );
- VERIFY( str_0 <= str_3 );
- VERIFY( str_1 <= str_0 );//true cuz m<r
- VERIFY( str_2 <= str_0 );
- VERIFY( !(str_3 <= str_0) );
- VERIFY( str_0 <= str_4 );
- VERIFY( str_4 <= str_0 );
-
- //comparisons between string object and string literal
- VERIFY( !(str_0 == "costa marbella") );
- VERIFY( !(str_0 == "cost") );
- VERIFY( !(str_0 == "costa ricans") );
- VERIFY( !("costa marbella" == str_0) );
- VERIFY( !("cost" == str_0) );
- VERIFY( !("costa ricans" == str_0) );
- VERIFY( "costa rica" == str_0 );
- VERIFY( str_0 == "costa rica" );
-
- VERIFY( str_0 != "costa marbella" );
- VERIFY( str_0 != "cost" );
- VERIFY( str_0 != "costa ricans" );
- VERIFY( "costa marbella" != str_0 );
- VERIFY( "cost" != str_0 );
- VERIFY( "costa ricans" != str_0 );
- VERIFY( !("costa rica" != str_0) );
- VERIFY( !(str_0 != "costa rica") );
-
- VERIFY( str_0 > "costa marbella" ); //true cuz r>m
- VERIFY( str_0 > "cost" );
- VERIFY( !(str_0 > "costa ricans") );
- VERIFY( !("costa marbella" > str_0) );//false cuz m<r
- VERIFY( !("cost" > str_0) );
- VERIFY( "costa ricans" > str_0 );
- VERIFY( !("costa rica" > str_0) );
- VERIFY( !(str_0 > "costa rica") );
-
- VERIFY( !(str_0 < "costa marbella") );//false cuz r>m
- VERIFY( !(str_0 < "cost") );
- VERIFY( str_0 < "costa ricans" );
- VERIFY( "costa marbella" < str_0 );//true cuz m<r
- VERIFY( "cost" < str_0 );
- VERIFY( !("costa ricans" < str_0) );
- VERIFY( !("costa rica" < str_0) );
- VERIFY( !(str_0 < "costa rica") );
-
- VERIFY( str_0 >= "costa marbella" );//true cuz r>m
- VERIFY( str_0 >= "cost" );
- VERIFY( !(str_0 >= "costa ricans") );
- VERIFY( !("costa marbella" >= str_0) );//false cuz m<r
- VERIFY( !("cost" >= str_0) );
- VERIFY( "costa ricans" >= str_0 );
- VERIFY( "costa rica" >= str_0 );
- VERIFY( str_0 >= "costa rica" );
-
- VERIFY( !(str_0 <= "costa marbella") );//false cuz r>m
- VERIFY( !(str_0 <= "cost") );
- VERIFY( str_0 <= "costa ricans" );
- VERIFY( "costa marbella" <= str_0 );//true cuz m<r
- VERIFY( "cost" <= str_0 );
- VERIFY( !("costa ricans" <= str_0) );
- VERIFY( "costa rica" <= str_0 );
- VERIFY( str_0 <= "costa rica" );
-
- // 21.3.7.1 operator+
-/*
-template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-
-template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(charT lhs, const basic_string<charT,traits,Allocator>& rhs);
-
-template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs, charT rhs);
-*/
-
- str_4 = str_0 + "ns";
- VERIFY( str_4 == str_3 );
-
- const std::string str_5(" marbella");
- str_4 = "costa" + str_5;
- VERIFY( str_4 == str_1 );
-
- std::string str_6("ns");
- str_4 = str_0 + str_6;
- VERIFY( str_4 == str_3 );
-
- str_4 = str_0 + 'n';
- str_4 = str_4 + 's';
- VERIFY( str_4 == str_3 );
-
- str_4 = 'a' + str_6;
- str_4 = 'c' + str_4;
- str_4 = 'i' + str_4;
- str_4 = 'r' + str_4;
- str_4 = ' ' + str_4;
- str_4 = 'a' + str_4;
- str_4 = 't' + str_4;
- str_4 = 's' + str_4;
- str_4 = 'o' + str_4;
- str_4 = 'c' + str_4;
- VERIFY( str_4 == str_3 );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return 0;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/operations.cc b/libstdc++-v3/testsuite/21_strings/operations.cc
deleted file mode 100644
index b6c68ebcb9e..00000000000
--- a/libstdc++-v3/testsuite/21_strings/operations.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// 1999-05-07 bkoz
-
-// Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.6 string operations
-
-#include <string>
-#include <cstdio>
-#include <testsuite_hooks.h>
-
-int test01(void)
-{
- bool test = true;
-
- std::string str1;
- std::string str2;
-
- // Should get this:
- // 1:8-chars_8-chars_
- // 2:8-chars_8-chars_
- str1 = std::string("8-chars_") + "8-chars_";
- const char* p1 = str1.c_str();
- // printf("1:%s\n", str1.c_str());
- str2 = str1 + "7-chars";
- // printf("2:%s\n", str1.c_str()); //str1 is gone
- const char* p2 = str1.c_str();
- return 0;
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
-
- return test;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/replace.cc b/libstdc++-v3/testsuite/21_strings/replace.cc
deleted file mode 100644
index 6dc9ec6b9bf..00000000000
--- a/libstdc++-v3/testsuite/21_strings/replace.cc
+++ /dev/null
@@ -1,202 +0,0 @@
-// 1999-06-10 bkoz
-
-// Copyright (C) 1994, 1999, 2001, 2002 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.5.6 basic_string::replace
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "ventura, california";
- const std::string str01(str_lit01);
- std::string str02("del mar, california");
- std::string str03(" and ");
- std::string str05;
-
- // string& replace(size_type pos, size_type n, const string& string)
- // string& replace(size_type pos1, size_type n1, const string& string,
- // size_type pos2, size_type n2)
- // string& replace(size_type pos, size_type n1, const char* s, size_type n2)
- // string& replace(size_type pos, size_type n1, const char* s)
- // string& replace(size_type pos, size_type n1, size_type n2, char c)
- // string& replace(iterator it1, iterator it2, const string& str)
- // string& replace(iterator it1, iterator it2, const chat* s, size_type n)
- // string& replace(iterator it1, iterator it2, const chat* s)
- // string& replace(iterator it1, iterator it2, size_type n, char c)
- // template<typename InputIter>
- // string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
-
- // with mods, from tstring.cc, from jason merrill, et. al.
- std::string X = "Hello";
- std::string x = X;
-
- char ch = x[0];
- VERIFY( ch == 'H' );
-
- std::string z = x.substr(2, 3);
- VERIFY( z == "llo" );
-
- x.replace(2, 2, "r");
- VERIFY( x == "Hero" );
-
- x = X;
- x.replace(0, 1, "j");
- VERIFY( x == "jello" );
-
- int ar[] = { 'H', 'e', 'l', 'l', 'o' };
- x.replace(std::find(x.begin(), x.end(), 'l'),
- std::find(x.rbegin(), x.rend(), 'l').base(), ar,
- ar + sizeof(ar) / sizeof(ar[0]));
- VERIFY( x == "jeHelloo" );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-void
-test02()
-{
- bool test = true;
- const char* strlit = "../the long pier/Hanalei Bay/Kauai/Hawaii";
- std::string aux = strlit;
- aux.replace(aux.begin()+5, aux.begin()+20,
- aux.begin()+10, aux.begin()+15);
- VERIFY(aux == "../thg piealei Bay/Kauai/Hawaii");
-
- aux = strlit;
- aux.replace(aux.begin() + 10, aux.begin() + 15,
- aux.begin() + 5, aux.begin() + 20);
- VERIFY(aux == "../the lone long pier/Hanr/Hanalei Bay/Kauai/Hawaii");
-}
-
-// Some more miscellaneous tests
-void
-test03()
-{
- bool test = true;
- const char* title01 = "nine types of ambiguity";
- const char* title02 = "ultra";
- std::string str01 = title01;
- std::string str02 = title02;
-
- str01.replace(0, 4, str02);
- VERIFY(str01 == "ultra types of ambiguity");
-
- str01.replace(15, 9, str02, 2, 2);
- VERIFY(str01 == "ultra types of tr");
-
- str01 = title01;
- str02.replace(0, 0, str01, 0, std::string::npos);
- VERIFY(str02 == "nine types of ambiguityultra");
-
- str02.replace(11, 2, title02, 5);
- VERIFY(str02 == "nine types ultra ambiguityultra");
-
- str02.replace(11, 5, title01, 2);
- VERIFY(str02 == "nine types ni ambiguityultra");
-
- str01.replace(str01.size(), 0, title02);
- VERIFY(str01 == "nine types of ambiguityultra");
-
- str01 = title01;
- str02 = title02;
- str01.replace(str01.begin(), str01.end(), str02);
- VERIFY(str01 == "ultra");
-
- str01.replace(str01.begin(), str01.begin(), title01, 4);
- VERIFY(str01 == "nineultra");
-
- str01.replace(str01.end(), str01.end(), title01 + 5, 5);
- VERIFY(str01 == "nineultratypes");
-
- str01.replace(str01.begin(), str01.end(), title02);
- VERIFY(str01 == "ultra");
-}
-
-// Some more tests for
-// template<typename InputIter>
-// string& replace(iterator it1, iterator it2, InputIter j1, InputIter j2)
-void
-test04()
-{
- bool test = true;
- std::string str01 = "geogaddi";
- std::string str02;
-
- typedef std::string::iterator iterator;
- typedef std::string::const_iterator const_iterator;
-
- iterator it1 = str01.begin();
- iterator it2 = str01.end();
- str02.replace(str02.begin(), str02.end(), it1, it2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- const_iterator c_it1 = str01.begin();
- const_iterator c_it2 = str01.end();
- str02.replace(str02.begin(), str02.end(), c_it1, c_it2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- const char* c_ptr1 = str01.c_str();
- const char* c_ptr2 = str01.c_str() + 8;
- str02.replace(str02.begin(), str02.end(), c_ptr1, c_ptr2);
- VERIFY(str02 == "geogaddi");
-
- str02 = "boards";
- char* ptr1 = &*str01.begin();
- char* ptr2 = &*str01.end();
- str02.replace(str02.begin(), str02.end(), ptr1, ptr2);
- VERIFY(str02 == "geogaddi");
-}
-
-// We wrongly used __n1 instead of __foldn1 in the length_error
-// check at the beginning of replace(__pos, __n1, __s, __n2)
-void
-test05()
-{
- bool test = true;
- std::string str01 = "londinium";
- std::string str02 = "cydonia";
-
- str01.replace(0, 20, str02.c_str(), 3);
- VERIFY(str01 == "cyd");
-}
-
-int main()
-{
- test01();
- test02();
- test03();
- test04();
- test05();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/rfind.cc b/libstdc++-v3/testsuite/21_strings/rfind.cc
deleted file mode 100644
index af720f3820d..00000000000
--- a/libstdc++-v3/testsuite/21_strings/rfind.cc
+++ /dev/null
@@ -1,125 +0,0 @@
-// 2000-06-22 -=dbv=- (shamelessy copied from bkoz' find.cc)
-
-// Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-// 21.3.6.2 basic_string rfind
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "mave";
- const std::string str01("mavericks, santa cruz");
- std::string str02(str_lit01);
- std::string str03("s, s");
- std::string str04;
-
- // size_type rfind(const string&, size_type pos = 0) const;
- csz01 = str01.rfind(str01);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str01, 4);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str02,3);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str02);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str03);
- VERIFY( csz01 == 8 );
- csz01 = str01.rfind(str03, 3);
- VERIFY( csz01 == npos );
- csz01 = str01.rfind(str03, 12);
- VERIFY( csz01 == 8 );
-
- // An empty string consists of no characters
- // therefore it should be found at every point in a string,
- // except beyond the end
- csz01 = str01.rfind(str04, 0);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str04, 5);
- VERIFY( csz01 == 5 );
- csz01 = str01.rfind(str04, str01.size());
- VERIFY( csz01 == str01.size() );
- csz01 = str01.rfind(str04, str01.size()+1);
- VERIFY( csz01 == str01.size() );
-
- // size_type rfind(const char* s, size_type pos, size_type n) const;
- csz01 = str01.rfind(str_lit01, 0, 3);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str_lit01, 3, 0);
- VERIFY( csz01 == 3 );
-
- // size_type rfind(const char* s, size_type pos = 0) const;
- csz01 = str01.rfind(str_lit01);
- VERIFY( csz01 == 0 );
- csz01 = str01.rfind(str_lit01, 3);
- VERIFY( csz01 == 0 );
-
- // size_type rfind(char c, size_type pos = 0) const;
- csz01 = str01.rfind('z');
- csz02 = str01.size() - 1;
- VERIFY( csz01 == csz02 );
- csz01 = str01.rfind('/');
- VERIFY( csz01 == npos );
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-// 21.3.6.4 basic_string::find_last_of
-bool test02()
-{
- bool test = true;
-
- // test find_last_of
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-// 21.3.6.6 basic_string::find_last_not_of
-bool test03()
-{
- bool test = true;
-
- // test find_last_not_of
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-int main()
-{
- test01();
- test02();
- test03();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/21_strings/substr.cc b/libstdc++-v3/testsuite/21_strings/substr.cc
deleted file mode 100644
index 0ec6ee35453..00000000000
--- a/libstdc++-v3/testsuite/21_strings/substr.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// 1999-06-10 bkoz
-
-// Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// 21.3.6.7 basic_string::substr
-
-#include <string>
-#include <stdexcept>
-#include <testsuite_hooks.h>
-
-bool test01(void)
-{
- bool test = true;
- typedef std::string::size_type csize_type;
- typedef std::string::const_reference cref;
- typedef std::string::reference ref;
- csize_type npos = std::string::npos;
- csize_type csz01, csz02;
-
- const char str_lit01[] = "rockaway, pacifica";
- const std::string str01(str_lit01);
- std::string str02;
-
- // basic_string<charT, _Traits, _Alloc>
- // substr(size_type pos = 0, size_type n = npos) const;
- csz01 = str01.size();
- str02 = str01.substr(0, 1);
- VERIFY( str02 == "r" );
- str02 = str01.substr(10);
- VERIFY( str02 == "pacifica" );
-
- try {
- str02 = str01.substr(csz01 + 1);
- VERIFY( false );
- }
- catch(std::out_of_range& fail) {
- VERIFY( true );
- }
- catch(...) {
- VERIFY( false );
- }
-
- try {
- str02 = str01.substr(csz01);
- VERIFY( str02.size() == 0 );
- }
- catch(std::out_of_range& fail) {
- VERIFY( false );
- }
- catch(...) {
- VERIFY( false );
- }
-
-#ifdef DEBUG_ASSERT
- assert(test);
-#endif
- return test;
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc
index 25d66af0d68..6b57c89232f 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/1.cc
@@ -28,6 +28,7 @@
void test01()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc;
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
index 19e73985f19..07b3a2dabd0 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/2.cc
@@ -30,6 +30,7 @@
void test02()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.ISO-8859-1");
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
index 8681276f6b1..b44e86f7079 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/3.cc
@@ -30,6 +30,7 @@
void test03()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.ISO-8859-15");
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
index 36bc3a183bd..15a8546c3d7 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/always_noconv/wchar_t/4.cc
@@ -30,6 +30,7 @@
void test04()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.UTF-8");
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc
index b2995e3b2fb..5ecc99e0c6a 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/1.cc
@@ -28,6 +28,7 @@
void test01()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc_c = locale::classic();
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
index 37fdf544449..9c76752d611 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/2.cc
@@ -28,6 +28,7 @@
void test02()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.ISO-8859-1");
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
index d6778d18a07..2d312bddc31 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/3.cc
@@ -28,6 +28,7 @@
void test03()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.ISO-8859-15");
diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
index fd85941ab37..cd4d08d5733 100644
--- a/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/codecvt/max_length/wchar_t/4.cc
@@ -28,6 +28,7 @@
void test04()
{
using namespace std;
+ bool test = true;
typedef codecvt<wchar_t, char, mbstate_t> w_codecvt;
locale loc ("en_US.UTF-8");
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
index 74871082be3..bed2fb40991 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/1.cc
@@ -74,6 +74,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
index 52052f9aed0..ab29ac409e1 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/compare/char/2.cc
@@ -81,6 +81,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
index 75eb202da28..47fcd579ec7 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/hash/char/2.cc
@@ -70,6 +70,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc b/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
index dc2b395bd66..24ff7cdac8f 100644
--- a/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate/transform/char/2.cc
@@ -67,6 +67,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/collate_byname/1.cc b/libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
index 62986628790..edfb42c2120 100644
--- a/libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/collate_byname/1.cc
@@ -131,6 +131,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc
index 65fc62667d5..4846aec220e 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/cons/char/1.cc
@@ -51,13 +51,14 @@ public:
void test01()
{
using namespace std;
-
+ bool test = true;
+
comma_ctype obj;
const ctype_base::mask* tmp = obj.get_classic_table();
comma_ctype obj2(tmp);
const ctype_base::mask* ctable = obj2.get_table();
- VERIFY ( tmp = ctable );
+ VERIFY ( tmp == ctable );
}
int main()
diff --git a/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc b/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
index 6e54ab89127..d04800a01ca 100644
--- a/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/ctype/is/char/2.cc
@@ -99,6 +99,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/facet/2.cc b/libstdc++-v3/testsuite/22_locale/facet/2.cc
index abda43ec351..ea63d731a3f 100644
--- a/libstdc++-v3/testsuite/22_locale/facet/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/facet/2.cc
@@ -89,6 +89,6 @@ void test02()
int main ()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
index 26d3aaf31d1..4864b0bad7d 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/4.cc
@@ -42,6 +42,6 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
index b9e1391977d..5c649d0b5b9 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/5.cc
@@ -193,6 +193,6 @@ void test04()
int main()
{
- test04();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test04);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
index 75598e2a6c3..fb709666d48 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/7.cc
@@ -99,6 +99,6 @@ test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
index 05116d934d5..7167fadef10 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/1.cc
@@ -64,6 +64,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
index 3234ef6f4ce..61ffba626c1 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/2.cc
@@ -64,6 +64,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
index d8346b29156..55cf80193d6 100644
--- a/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages/members/char/3.cc
@@ -64,6 +64,6 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/messages_byname/1.cc b/libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
index 1c6fc5b99b2..e9d3217c08f 100644
--- a/libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/messages_byname/1.cc
@@ -73,6 +73,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
index 7bbfc88a952..f4e5481def6 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/1.cc
@@ -146,6 +146,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
index 0ca281fe5fb..42e149609a0 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/2.cc
@@ -135,6 +135,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
index eb8ef9c1c57..749c68c73ab 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/3.cc
@@ -91,6 +91,6 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc b/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
index 3a6aa18039c..b2456658e56 100644
--- a/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_get/get/char/4.cc
@@ -86,6 +86,6 @@ void test04()
int main()
{
- test04();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test04);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
index cbc78895129..d34d3fba0e7 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/1.cc
@@ -124,6 +124,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
index 72428445d22..d1c240f7809 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/2.cc
@@ -115,6 +115,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
index 58e3ff47099..73c84b2c4d5 100644
--- a/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/money_put/put/char/3.cc
@@ -104,6 +104,6 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
index 5434ea81575..7d74101c95d 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct/members/char/2.cc
@@ -95,6 +95,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc b/libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc
index 01c761b5669..83fc8f62b31 100644
--- a/libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/moneypunct_byname/1.cc
@@ -93,7 +93,7 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
index 7cc897c36f5..3723e23ffd4 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/1.cc
@@ -162,7 +162,7 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
index 4604d11ca91..108fae13c1b 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/2.cc
@@ -132,7 +132,7 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
index 253e73561eb..b6c0f12ca1a 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/3.cc
@@ -94,7 +94,7 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
index 21f7bef0012..94da704f1d3 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/5.cc
@@ -84,7 +84,7 @@ void test05()
int main()
{
- test05();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test05);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc b/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
index 49f3a46e5c8..b5e0a21615b 100644
--- a/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_get/get/char/6.cc
@@ -49,7 +49,7 @@ void test06()
int main()
{
- test06();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test06);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
index d73ceb733f4..87abef44e9a 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/1.cc
@@ -169,7 +169,7 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
index dab92047cf9..a62dfc1f88b 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/2.cc
@@ -105,7 +105,7 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
index 201403a0e54..0bc92b2af0e 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/3.cc
@@ -88,7 +88,7 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc b/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
index 0af3d3cf611..eb0bd219622 100644
--- a/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/num_put/put/char/5.cc
@@ -63,7 +63,7 @@ void test05()
int main()
{
- test05();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test05);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
index 9babb9946cb..aba34e29267 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/1.cc
@@ -60,6 +60,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
index bb4eff5f70a..ec9512fedbe 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct/members/char/2.cc
@@ -82,6 +82,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc b/libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc
index 4c99ddaad70..a6c71dc644e 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct_byname/1.cc
@@ -71,6 +71,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/numpunct_byname/2.cc b/libstdc++-v3/testsuite/22_locale/numpunct_byname/2.cc
index 133607dd5b9..f096a8b9f0c 100644
--- a/libstdc++-v3/testsuite/22_locale/numpunct_byname/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/numpunct_byname/2.cc
@@ -40,6 +40,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
index 5b3a3236eef..46958a21da3 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/date_order/char/1.cc
@@ -64,6 +64,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
index 659086ab26f..f242c4bee4a 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/1.cc
@@ -107,6 +107,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
index 434695c703a..274a231cd6e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/2.cc
@@ -103,6 +103,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
index 8984069e59a..2fd9b760005 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/1.cc
@@ -121,6 +121,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
index 66ad029c1a5..c98f8d1cb50 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_monthname/char/2.cc
@@ -85,6 +85,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
index ef9c2bbbeb9..80d996c0c47 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/1.cc
@@ -122,6 +122,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
index 9adb288ed74..1d56827071c 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc
@@ -75,6 +75,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
index 4fad9019abf..ca89d1e4a2b 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/1.cc
@@ -129,6 +129,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
index 5f6e1490d42..6e9d99936ef 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_weekday/char/2.cc
@@ -85,6 +85,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
index 62f393b3c1f..aabfd6d0f25 100644
--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc
@@ -118,6 +118,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
index e384319299a..f54a8c91829 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/1.cc
@@ -85,6 +85,6 @@ void test01()
int main()
{
- test01();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test01);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
index e3a88b55ece..665036b1c6e 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/2.cc
@@ -80,6 +80,6 @@ void test02()
int main()
{
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
index 8354897e6c9..3399669df85 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/3.cc
@@ -80,6 +80,6 @@ void test03()
int main()
{
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
index ef59dc2679d..afb45eecacc 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/4.cc
@@ -79,6 +79,6 @@ void test04()
int main()
{
- test04();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test04);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
index dde913f58bf..b7b0055c29d 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/5.cc
@@ -75,6 +75,6 @@ void test05()
int main()
{
- test05();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test05);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
index 1cec95f0bab..9287571901c 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/6.cc
@@ -73,6 +73,6 @@ void test06()
int main()
{
- test06();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test06);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
index 931c6e060a8..00cefcfe7b9 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/7.cc
@@ -74,6 +74,6 @@ void test07()
int main()
{
- test07();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test07);
return 0;
}
diff --git a/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc b/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
index 4d801f38b72..10afde5c500 100644
--- a/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
+++ b/libstdc++-v3/testsuite/22_locale/time_put/put/char/8.cc
@@ -72,6 +72,6 @@ void test08()
int main()
{
- test08();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
return 0;
}
diff --git a/libstdc++-v3/testsuite/23_containers/bitset_members.cc b/libstdc++-v3/testsuite/23_containers/bitset_members.cc
index 054018df662..82e3a487ea3 100644
--- a/libstdc++-v3/testsuite/23_containers/bitset_members.cc
+++ b/libstdc++-v3/testsuite/23_containers/bitset_members.cc
@@ -1,6 +1,6 @@
// 2001-06-03 pme
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 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
@@ -55,6 +55,7 @@ void test02()
void test03()
{
+ bool test = true;
std::bitset<5> b;
std::stringstream ss ("101");
diff --git a/libstdc++-v3/testsuite/23_containers/map_insert.cc b/libstdc++-v3/testsuite/23_containers/map_insert.cc
index d870897a6c7..67c838f993a 100644
--- a/libstdc++-v3/testsuite/23_containers/map_insert.cc
+++ b/libstdc++-v3/testsuite/23_containers/map_insert.cc
@@ -1,6 +1,6 @@
// 2001-08-23 pme & Sylvain.Pion@sophia.inria.fr
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003 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,6 +29,7 @@
// http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01375.html
void test01()
{
+ bool test = true;
typedef std::map<int, int> Map;
Map M;
Map::iterator hint;
diff --git a/libstdc++-v3/testsuite/23_containers/vector_bool.cc b/libstdc++-v3/testsuite/23_containers/vector_bool.cc
index 17d63d1f854..17836499cf9 100644
--- a/libstdc++-v3/testsuite/23_containers/vector_bool.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector_bool.cc
@@ -1,6 +1,6 @@
// 2002-03-05 Stephen M. Webb <stephen.webb@bregmasoft.com>
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003 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,6 +32,7 @@ void test01()
// libstdc++/6886
void test02()
{
+ bool test = true;
typedef std::vector<bool> bvec;
int i, num = 0;
bvec v;
diff --git a/libstdc++-v3/testsuite/24_iterators/istream_iterator.cc b/libstdc++-v3/testsuite/24_iterators/istream_iterator.cc
index ce41ee67ec7..d278e1994b4 100644
--- a/libstdc++-v3/testsuite/24_iterators/istream_iterator.cc
+++ b/libstdc++-v3/testsuite/24_iterators/istream_iterator.cc
@@ -1,6 +1,6 @@
// 2001-06-25 Benjamin Kosnik <bkoz@redhat.com>
-// Copyright (C) 2001 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2003 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,6 +53,7 @@ template class std::istream_iterator<char>;
void test02()
{
using namespace std;
+ bool test = true;
string st("R.Rorty");
diff --git a/libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc b/libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc
index a8f18f27b36..c385a5637a8 100644
--- a/libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc
+++ b/libstdc++-v3/testsuite/26_numerics/c99_classification_macros_c.cc
@@ -28,11 +28,11 @@
// the GNU General Public License.
// { dg-do compile { xfail *-*-linux-gnu } }
-// { dg-excess-errors "" }
+// { dg-excess-errors "" { target *-*-linux-gnu } }
#include <math.h>
-void fpclassify() { } // { dg-error "parse error" "" { xfail *-*-linux-gnu } }
+void fpclassify() { }
void isfinite() { }
diff --git a/libstdc++-v3/testsuite/26_numerics/slice.cc b/libstdc++-v3/testsuite/26_numerics/slice.cc
index 42b2adbaa53..a02c1f5801b 100644
--- a/libstdc++-v3/testsuite/26_numerics/slice.cc
+++ b/libstdc++-v3/testsuite/26_numerics/slice.cc
@@ -1,6 +1,6 @@
// 20020717 gdr
-// Copyright (C) 2002 Free Software Foundation, Inc.
+// Copyright (C) 2002, 2003 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
@@ -51,6 +51,7 @@ assignment(int start, int size, int stride)
int main()
{
+ bool test = true;
std::srand(20020717); using std::rand;
VERIFY(construction(rand(), rand(), rand()));
diff --git a/libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc b/libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc
index 52dcfe08336..a637b872b2e 100644
--- a/libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc
+++ b/libstdc++-v3/testsuite/26_numerics/slice_array_assignment.cc
@@ -1,6 +1,6 @@
// 20010613 gdr
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 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,6 +34,7 @@
int main()
{
+ bool test = true;
using std::valarray;
using std::slice;
valarray<int> v(1, 10), w(2, 10);
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray_operators.cc b/libstdc++-v3/testsuite/26_numerics/valarray_operators.cc
index 5753e471672..84c072a4895 100644
--- a/libstdc++-v3/testsuite/26_numerics/valarray_operators.cc
+++ b/libstdc++-v3/testsuite/26_numerics/valarray_operators.cc
@@ -24,6 +24,7 @@
void test01() // check unary operators
{
+ bool test = true;
std::valarray<int> u(1);
u[0]=1;
@@ -35,6 +36,7 @@ void test01() // check unary operators
void test02() // check binary operators
{
+ bool test = true;
std::valarray<int> u(1), v(1);
u[0]=1;
v[0]=3;
diff --git a/libstdc++-v3/testsuite/27_io/filebuf_members.cc b/libstdc++-v3/testsuite/27_io/filebuf_members.cc
index 88b05358e7f..79dfa251570 100644
--- a/libstdc++-v3/testsuite/27_io/filebuf_members.cc
+++ b/libstdc++-v3/testsuite/27_io/filebuf_members.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003 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
@@ -89,23 +89,24 @@ void test_02()
// read (ext)
FILE* f2 = fopen(name_01, "r");
VERIFY( f2 != NULL );
+ if (f2)
{
__gnu_cxx::stdio_filebuf<char> fb(f2, std::ios_base::in, 512);
+ close_num = fclose(f2);
}
- close_num = fclose(f2);
VERIFY( close_num == 0 );
-
// read (standard)
FILE* f = fopen(name_01, "r");
VERIFY( f != NULL );
+ if (f)
{
std::ifstream ifstream1(name_01);
VERIFY( ifstream1.is_open() );
std::ios_base::iostate st01 = ifstream1.rdstate();
VERIFY( st01 == std::ios_base::goodbit );
+ close_num = fclose(f);
}
- close_num = fclose(f);
VERIFY( close_num == 0 );
}
@@ -128,11 +129,14 @@ void test_03()
void
test_04()
{
+ bool test = true;
+ const char* name = "tmp_fifo1";
signal(SIGPIPE, SIG_IGN);
- if (0 != mkfifo("xxx", S_IRWXU))
+ unlink(name);
+ if (0 != mkfifo(name, S_IRWXU))
{
- std::cerr << "failed to creat fifo" << std::endl;
+ std::cerr << "failed to create fifo" << std::endl;
exit(-1);
}
@@ -140,18 +144,18 @@ test_04()
if (fval == -1)
{
std::cerr << "failed to fork" << std::endl;
- unlink("xxx");
+ unlink(name);
exit(-1);
}
else if (fval == 0)
{
- std::ifstream ifs("xxx");
+ std::ifstream ifs(name);
sleep(1);
ifs.close();
exit(0);
}
- std::ofstream ofs("xxx");
+ std::ofstream ofs(name);
sleep(2);
ofs.put('t');
@@ -166,25 +170,27 @@ test_04()
ofs.close();
if (!(ofs.rdstate() & std::ios::failbit))
{
- std::cerr << "fail bit was not set!" << std::endl;
- unlink("xxx");
+ test = false;
+ VERIFY( test );
+ unlink(name);
exit(-1);
}
- unlink("xxx");
+ unlink(name);
}
// Charles Leggett <CGLeggett@lbl.gov>
void test_05()
{
bool test = true;
+ const char* name = "tmp_file5";
std::fstream scratch_file;
- scratch_file.open("SCRATCH", std::ios::out);
+ scratch_file.open(name, std::ios::out);
scratch_file.close();
- scratch_file.open("SCRATCH", std::ios::in);
+ scratch_file.open(name, std::ios::in);
if (!scratch_file)
VERIFY( false );
scratch_file.close();
@@ -194,29 +200,66 @@ void test_05()
void test_06()
{
bool test = true;
+ const char* name = "tmp_fifo2";
signal(SIGPIPE, SIG_IGN);
- unlink("yyy");
- mkfifo("yyy", S_IRWXU);
+ unlink(name);
+ mkfifo(name, S_IRWXU);
if (!fork())
{
std::filebuf fbuf;
- fbuf.open("yyy", std::ios_base::in);
+ fbuf.open(name, std::ios_base::in);
fbuf.sgetc();
fbuf.close();
-
exit(0);
}
std::filebuf fbuf;
- std::filebuf* r =
- fbuf.open("yyy", std::ios_base::out | std::ios_base::ate);
+ std::filebuf* r = fbuf.open(name, std::ios_base::out | std::ios_base::ate);
VERIFY( !fbuf.is_open() );
VERIFY( r == NULL );
}
+// libstdc++/9964
+void test_07()
+{
+ using namespace std;
+ bool test = true;
+
+ const char* name = "tmp_fifo3";
+
+ signal(SIGPIPE, SIG_IGN);
+
+ unlink(name);
+ mkfifo(name, S_IRWXU);
+
+ int child = fork();
+ VERIFY( child != -1 );
+
+ if (child == 0)
+ {
+ filebuf fbin;
+ fbin.open(name, ios_base::in);
+ sleep(1);
+ fbin.close();
+ exit(0);
+ }
+
+ filebuf fb;
+ filebuf* ret = fb.open(name, ios_base::out | ios_base::trunc);
+ VERIFY( ret != NULL );
+ VERIFY( fb.is_open() );
+
+ sleep(2);
+ fb.sputc('a');
+
+ ret = fb.close();
+ VERIFY( ret == NULL );
+ VERIFY( !fb.is_open() );
+}
+
int
main()
{
@@ -226,6 +269,7 @@ main()
test_04();
test_05();
test_06();
+ test_07();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc b/libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc
index 660abd1752a..6699d80af30 100644
--- a/libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc
+++ b/libstdc++-v3/testsuite/27_io/filebuf_virtuals.cc
@@ -21,6 +21,11 @@
// 27.8.1.4 Overridden virtual functions
#include <fstream>
+#include <unistd.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
#include <locale>
#include <testsuite_hooks.h>
@@ -74,6 +79,8 @@ const char name_03[] = "filebuf_virtuals-3.txt"; // empty file, need to create
const char name_04[] = "filebuf_virtuals-4.txt"; // empty file, need to create
const char name_05[] = "filebuf_virtuals-5.txt"; // empty file, need to create
const char name_06[] = "filebuf_virtuals-6.txt"; // empty file, need to create
+const char name_07[] = "filebuf_virtuals-7.txt"; // empty file, need to create
+const char name_08[] = "filebuf_virtuals-8.txt"; // empty file, need to create
class derived_filebuf: public std::filebuf
{
@@ -544,6 +551,7 @@ class MyTraits : public std::char_traits<char>
public:
static bool eq(char c1, char c2)
{
+ bool test = true;
VERIFY( c1 != 'X' );
VERIFY( c2 != 'X' );
return std::char_traits<char>::eq(c1, c2);
@@ -704,6 +712,162 @@ void test12()
fbuf.close();
}
+class errorcvt : public std::codecvt<char, char, mbstate_t>
+{
+protected:
+ std::codecvt_base::result
+ do_out(mbstate_t&, const char* from, const char*,
+ const char*& from_next, char* to, char*,
+ char*& to_next) const
+ {
+ from_next = from;
+ to_next = to;
+ return std::codecvt<char, char, mbstate_t>::error;
+ }
+
+ virtual bool do_always_noconv() const throw()
+ {
+ return false;
+ }
+};
+
+// libstdc++/9182
+void test13()
+{
+ using namespace std;
+ bool test = true;
+
+ locale loc;
+ loc = locale(loc, new errorcvt);
+
+ filebuf fbuf1;
+ fbuf1.pubimbue(loc);
+ fbuf1.open(name_07, ios_base::out | ios_base::trunc);
+ fbuf1.sputn("ison", 4);
+ int r = fbuf1.pubsync();
+ VERIFY( r == -1 );
+ fbuf1.close();
+}
+
+void test14()
+{
+ using namespace std;
+ bool test = true;
+
+ locale loc;
+ loc = locale(loc, new errorcvt);
+
+ filebuf fbuf1;
+ fbuf1.pubimbue(loc);
+ fbuf1.pubsetbuf(0, 0);
+ fbuf1.open(name_07, ios_base::out | ios_base::trunc);
+ streamsize n = fbuf1.sputn("onne", 4);
+ VERIFY( n == 0 );
+ fbuf1.close();
+}
+
+
+class OverBuf : public std::filebuf
+{
+public:
+ int_type pub_overflow(int_type c = traits_type::eof())
+ { return std::filebuf::overflow(c); }
+};
+
+// libstdc++/9988
+void test15()
+{
+ using namespace std;
+ bool test = true;
+
+ OverBuf fb;
+ fb.open(name_08, ios_base::out | ios_base::trunc);
+
+ fb.sputc('a');
+ fb.pub_overflow('b');
+ fb.pub_overflow();
+ fb.sputc('c');
+ fb.close();
+
+ filebuf fbin;
+ fbin.open(name_08, ios_base::in);
+ filebuf::int_type c;
+ c = fbin.sbumpc();
+ VERIFY( c == 'a' );
+ c = fbin.sbumpc();
+ VERIFY( c == 'b' );
+ c = fbin.sbumpc();
+ VERIFY( c == 'c' );
+ c = fbin.sbumpc();
+ VERIFY( c == filebuf::traits_type::eof() );
+ fbin.close();
+}
+
+class UnderBuf : public std::filebuf
+{
+public:
+ int_type
+ pub_underflow()
+ { return underflow(); }
+
+ std::streamsize
+ pub_showmanyc()
+ { return showmanyc(); }
+};
+
+// libstdc++/10097
+void test16()
+{
+ using namespace std;
+ bool test = true;
+
+ const char* name = "tmp_fifo1";
+
+ signal(SIGPIPE, SIG_IGN);
+ unlink(name);
+
+ if (0 != mkfifo(name, S_IRWXU))
+ {
+ VERIFY( false );
+ }
+
+ int fval = fork();
+ if (fval == -1)
+ {
+ unlink(name);
+ VERIFY( false );
+ }
+ else if (fval == 0)
+ {
+ filebuf fbout;
+ fbout.open(name, ios_base::out);
+ fbout.sputn("0123456789", 10);
+ fbout.pubsync();
+ sleep(2);
+ fbout.close();
+ exit(0);
+ }
+
+ UnderBuf fb;
+ fb.open(name, ios_base::in);
+ sleep(1);
+
+ fb.sgetc();
+ streamsize n = fb.pub_showmanyc();
+
+ while (n > 0)
+ {
+ --n;
+
+ UnderBuf::int_type c = fb.pub_underflow();
+ VERIFY( c != UnderBuf::traits_type::eof() );
+
+ fb.sbumpc();
+ }
+
+ fb.close();
+}
+
main()
{
test01();
@@ -714,11 +878,15 @@ main()
test05();
test06();
- test07();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test07);
test08();
test09();
test10();
test11();
test12();
+ test13();
+ test14();
+ test15();
+ test16();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/ios_base_storage.cc b/libstdc++-v3/testsuite/27_io/ios_base_storage.cc
index a0c174660c4..7033466e691 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base_storage.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base_storage.cc
@@ -55,10 +55,15 @@ void test02()
std::stringbuf strbuf;
std::ios ios(&strbuf);
+ ios.exceptions(std::ios::badbit);
+
long l = 0;
void* v = 0;
// pword
+ ios.pword(1) = v;
+ VERIFY( ios.pword(1) == v );
+
try
{
v = ios.pword(max);
@@ -74,7 +79,29 @@ void test02()
}
VERIFY( v == 0 );
+ VERIFY( ios.pword(1) == v );
+
+ // max is different code path from max-1
+ v = &test;
+ try
+ {
+ v = ios.pword(std::numeric_limits<int>::max());
+ }
+ catch(std::ios_base::failure& obj)
+ {
+ // Ok.
+ VERIFY( ios.bad() );
+ }
+ catch(...)
+ {
+ VERIFY( test = false );
+ }
+ VERIFY( v == &test );
+
// iword
+ ios.iword(1) = 1;
+ VERIFY( ios.iword(1) == 1 );
+
try
{
l = ios.iword(max);
@@ -89,6 +116,40 @@ void test02()
VERIFY( test = false );
}
VERIFY( l == 0 );
+
+ VERIFY( ios.iword(1) == 1 );
+
+ // max is different code path from max-1
+ l = 1;
+ try
+ {
+ l = ios.iword(std::numeric_limits<int>::max());
+ }
+ catch(std::ios_base::failure& obj)
+ {
+ // Ok.
+ VERIFY( ios.bad() );
+ }
+ catch(...)
+ {
+ VERIFY( test = false );
+ }
+ VERIFY( l == 1 );
+
+}
+
+class derived : public std::ios_base
+{
+public:
+ derived() {}
+};
+
+void test03()
+{
+ derived d;
+
+ d.pword(0) = &d;
+ d.iword(0) = 1;
}
int main(void)
@@ -96,5 +157,6 @@ int main(void)
__gnu_cxx_test::set_memory_limits();
test01();
test02();
+ test03();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/ios_members.cc b/libstdc++-v3/testsuite/27_io/ios_members.cc
index 4c359801678..3b7dc24c454 100644
--- a/libstdc++-v3/testsuite/27_io/ios_members.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_members.cc
@@ -168,6 +168,6 @@ int main()
{
test01();
test02();
- test03();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test03);
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc
index f395641a06d..45725309ba9 100644
--- a/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc
+++ b/libstdc++-v3/testsuite/27_io/narrow_stream_objects.cc
@@ -204,6 +204,22 @@ test10()
cout << "_M_gcount: "<< cin.gcount() << endl;
}
+// libstdc++/7744
+void test11()
+{
+ std::ios::sync_with_stdio(false);
+
+ std::cout
+ << "\n:: f2() ::\n"
+ << "Type in the characters 'abc' and press <ENTER>: ";
+ std::cin.peek();
+
+ std::cout
+ << "The number of unread characters should be 4 (a, b, c, \\n): "
+ << std::cin.rdbuf()->in_avail()
+ << '\n';
+}
+
int
main()
{
@@ -218,5 +234,6 @@ main()
// test08();
// test09();
// test10();
+ // test11();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc b/libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc
index e4e618d68d8..2523ab6241a 100644
--- a/libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc
+++ b/libstdc++-v3/testsuite/27_io/ostream_inserter_arith.cc
@@ -1,7 +1,7 @@
// 1999-11-15 Kevin Ediger <kediger@licor.com>
// test the floating point inserters (facet num_put)
-// Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+// Copyright (C) 1999, 2002, 2003 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
@@ -253,7 +253,7 @@ test01()
return 0;
}
-int
+void
test02()
{
bool test = true;
@@ -297,7 +297,7 @@ test02()
os2 << endl;
os2 << fixed << setprecision(1) << val2 << endl;
- return 0;
+ return;
}
template<typename T>
@@ -360,6 +360,7 @@ test04()
int
test05()
{
+ bool test = true;
double pi = 3.14159265358979323846;
ostringstream ostr;
ostr.precision(20);
@@ -377,6 +378,7 @@ test05()
int
test06()
{
+ bool test = true;
int prec = numeric_limits<double>::digits10 + 2;
double oval = numeric_limits<double>::min();
@@ -395,7 +397,7 @@ int
main()
{
test01();
- test02();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test02);
test03();
test04();
test05();
diff --git a/libstdc++-v3/testsuite/27_io/streambuf_members.cc b/libstdc++-v3/testsuite/27_io/streambuf_members.cc
index 80f569d8074..263a95f06fb 100644
--- a/libstdc++-v3/testsuite/27_io/streambuf_members.cc
+++ b/libstdc++-v3/testsuite/27_io/streambuf_members.cc
@@ -431,6 +431,91 @@ void test10()
VERIFY( buf.result() == "Bad Moon Rising" );
}
+// libstdc++/9424
+class Outbuf_2 : public std::streambuf
+{
+ char buf[1];
+
+public:
+ Outbuf_2()
+ {
+ setp(buf, buf + 1);
+ }
+
+ int_type overflow(int_type c)
+ {
+ int_type eof = traits_type::eof();
+
+ if (pptr() < epptr())
+ {
+ if (traits_type::eq_int_type(c, eof))
+ return traits_type::not_eof(c);
+
+ *pptr() = traits_type::to_char_type(c);
+ pbump(1);
+ return c;
+ }
+
+ return eof;
+ }
+};
+
+class Inbuf_2 : public std::streambuf
+{
+ static const char buf[];
+ const char* current;
+ int size;
+
+public:
+ Inbuf_2()
+ {
+ current = buf;
+ size = std::strlen(buf);
+ }
+
+ int_type underflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current);
+ return traits_type::eof();
+ }
+
+ int_type uflow()
+ {
+ if (current < buf + size)
+ return traits_type::to_int_type(*current++);
+ return traits_type::eof();
+ }
+};
+
+const char Inbuf_2::buf[] = "Atteivlis";
+
+// <1>
+void test11()
+{
+ bool test = true;
+
+ Inbuf_2 inbuf1;
+ std::istream is(&inbuf1);
+ Outbuf_2 outbuf1;
+ is >> &outbuf1;
+ VERIFY( inbuf1.sgetc() == 't' );
+ VERIFY( is.good() );
+}
+
+// <2>
+void test12()
+{
+ bool test = true;
+
+ Outbuf_2 outbuf2;
+ std::ostream os (&outbuf2);
+ Inbuf_2 inbuf2;
+ os << &inbuf2;
+ VERIFY( inbuf2.sgetc() == 't' );
+ VERIFY( os.good() );
+}
+
int main()
{
test01();
@@ -441,9 +526,11 @@ int main()
test05();
test07();
- test08();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
test09();
test10();
+ test11();
+ test12();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc b/libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc
index a2a8368abfc..40e95bae431 100644
--- a/libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc
+++ b/libstdc++-v3/testsuite/27_io/stringbuf_virtuals.cc
@@ -40,6 +40,7 @@ void test01()
void test02(std::stringbuf& in, bool pass)
{
+ bool test = true;
using namespace std;
typedef streambuf::pos_type pos_type;
typedef streambuf::off_type off_type;
@@ -160,7 +161,7 @@ int main()
test02(in2, false);
test02(in3, false);
- test08();
+ __gnu_cxx_test::run_test_wrapped_generic_locale_exception_catcher(test08);
test09();
return 0;
}
diff --git a/libstdc++-v3/testsuite/27_io/stringstream.cc b/libstdc++-v3/testsuite/27_io/stringstream.cc
index 576b72d5282..a9778952d90 100644
--- a/libstdc++-v3/testsuite/27_io/stringstream.cc
+++ b/libstdc++-v3/testsuite/27_io/stringstream.cc
@@ -56,8 +56,26 @@ namespace test
template class basic_stringstream<pod_char, char_traits<pod_char> >;
} // test
+// libstdc++/9826
+void test02()
+{
+ using namespace std;
+ using __gnu_cxx_test::pod_char;
+
+ basic_stringstream<pod_char, char_traits<pod_char> > sstr;
+ // 1
+ basic_string<pod_char, char_traits<pod_char> > str;
+ sstr >> str;
+ // 2
+ pod_char* chr;
+ sstr >> chr;
+ // 3
+ sstr >> ws;
+}
+
int main()
{
test01();
+ test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am
index 7380035af3f..fc8f6163011 100644
--- a/libstdc++-v3/testsuite/Makefile.am
+++ b/libstdc++-v3/testsuite/Makefile.am
@@ -73,6 +73,5 @@ stamp_wchar:
touch testsuite_wchar_t
# By adding these files here, automake will remove them for 'make clean'
-CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp ostream_* *.log *.sum \
- testsuite_files testsuite_wchar_t \
- site.exp abi_check
+CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
+ testsuite_files testsuite_wchar_t site.exp abi_check
diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in
index b30b4bdb8df..f9b0d99bf59 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -1,4 +1,4 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
@@ -180,9 +180,8 @@ libv3test_a_SOURCES = testsuite_hooks.cc testsuite_allocator.cc
abi_check_SOURCES = abi_check.cc
# By adding these files here, automake will remove them for 'make clean'
-CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp ostream_* *.log *.sum \
- testsuite_files testsuite_wchar_t \
- site.exp abi_check
+CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
+ testsuite_files testsuite_wchar_t site.exp abi_check
mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
CONFIG_HEADER = ../config.h
diff --git a/libstdc++-v3/testsuite/abi_check.cc b/libstdc++-v3/testsuite/abi_check.cc
index 4460dd14d4e..5d712119135 100644
--- a/libstdc++-v3/testsuite/abi_check.cc
+++ b/libstdc++-v3/testsuite/abi_check.cc
@@ -291,13 +291,11 @@ report_symbol_info(const symbol_info& symbol, std::size_t n, bool ret = true)
{
using namespace std;
const char tab = '\t';
- cout << tab << n << endl;
- cout << tab << "symbol"<< endl;
- cout << tab << symbol.name << endl;
// Add any other information to display here.
- cout << tab << "demangled symbol"<< endl;
cout << tab << symbol.demangled_name << endl;
+ cout << tab << symbol.name << endl;
+ cout << tab << symbol.version_name << endl;
if (ret)
cout << endl;
diff --git a/libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp b/libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp
index bad12dc31dc..8b70564d87a 100644
--- a/libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp
+++ b/libstdc++-v3/testsuite/libstdc++-v3.dg/dg.exp
@@ -22,7 +22,7 @@ load_lib libstdc++-v3-dg.exp
# If a testcase doesn't have special options, use these.
global DEFAULT_CXXFLAGS
if ![info exists DEFAULT_CXXFLAGS] then {
- set DEFAULT_CXXFLAGS "-g -O2 -DDEBUG_ASSERT"
+ set DEFAULT_CXXFLAGS "-DDEBUG_ASSERT"
}
# Initialize 'dg' last or dejagnu exits with an error...
diff --git a/libstdc++-v3/testsuite/testsuite_hooks.cc b/libstdc++-v3/testsuite/testsuite_hooks.cc
index 3527779bc76..d51a3d34435 100644
--- a/libstdc++-v3/testsuite/testsuite_hooks.cc
+++ b/libstdc++-v3/testsuite/testsuite_hooks.cc
@@ -148,9 +148,21 @@ namespace __gnu_cxx_test
bool test = true;
// Set the global locale.
- locale loc_name(name);
- locale orig = locale::global(loc_name);
-
+ try
+ {
+ locale loc_name(name);
+ locale orig = locale::global(loc_name);
+ }
+ catch (std::runtime_error& ex)
+ {
+ if (std::strstr (ex.what(), "unhandled name in generic implementation"))
+ return;
+ else if (std::strstr (ex.what(), "unknown name"))
+ return;
+ else
+ throw;
+ }
+
const char* res = setlocale(LC_ALL, name);
if (res != NULL)
{
@@ -161,7 +173,7 @@ namespace __gnu_cxx_test
VERIFY( preLC_ALL == postLC_ALL );
}
else
- throw environment_variable(string("LC_ALL for") + string(name));
+ throw environment_variable(string("LC_ALL for ") + string(name));
}
void
@@ -173,9 +185,20 @@ namespace __gnu_cxx_test
#ifdef _GLIBCPP_HAVE_SETENV
// Set the global locale.
- locale loc_name(name);
- locale orig = locale::global(loc_name);
-
+ try
+ {
+ locale loc_name(name);
+ locale orig = locale::global(loc_name);
+ }
+ catch (std::runtime_error& ex)
+ {
+ if (std::strstr (ex.what(), "unhandled name in generic implementation"))
+ return;
+ else if (std::strstr (ex.what(), "unknown name"))
+ return;
+ else
+ throw;
+ }
// Set environment variable env to value in name.
const char* oldENV = getenv(env);
if (!setenv(env, name, 1))
@@ -186,11 +209,27 @@ namespace __gnu_cxx_test
}
else
throw environment_variable(string(env) + string(" to ") + string(name));
-#else
- throw not_found("setenv");
#endif
}
+ void
+ run_test_wrapped_generic_locale_exception_catcher(const test_func f)
+ {
+ try
+ {
+ f();
+ }
+ catch (std::runtime_error& ex)
+ {
+ if (std::strstr (ex.what(), "unhandled name in generic implementation"))
+ return;
+ else if (std::strstr (ex.what(), "unknown name"))
+ return;
+ else
+ throw;
+ }
+ }
+
counter::size_type counter::count = 0;
unsigned int copy_constructor::count_ = 0;
unsigned int copy_constructor::throw_on_ = 0;
diff --git a/libstdc++-v3/testsuite/testsuite_hooks.h b/libstdc++-v3/testsuite/testsuite_hooks.h
index d13e86c7518..da397e3bdfd 100644
--- a/libstdc++-v3/testsuite/testsuite_hooks.h
+++ b/libstdc++-v3/testsuite/testsuite_hooks.h
@@ -105,6 +105,9 @@ namespace __gnu_cxx_test
void
run_tests_wrapped_env(const char*, const char*, const func_callback&);
+ // Run select unit test inside exception catcher for non-C named locale
+ void
+ run_test_wrapped_generic_locale_exception_catcher(const test_func);
// Test data types.
struct pod_char
@@ -244,7 +247,6 @@ namespace __gnu_cxx_test
copy_tracker(const copy_tracker& rhs)
: id_(rhs.id()), throw_on_copy_(rhs.throw_on_copy_)
{
- int kkk = throw_on_copy_;
if (throw_on_copy_)
copy_constructor::throw_on(copy_constructor::count() + 1);
copy_constructor::mark_call();
@@ -261,6 +263,7 @@ namespace __gnu_cxx_test
if (rhs.throw_on_copy_)
assignment_operator::throw_on(assignment_operator::count() + 1);
assignment_operator::mark_call();
+ return *this;
}
~copy_tracker()
@@ -299,7 +302,7 @@ namespace __gnu_cxx_test
inline bool
operator==(const copy_tracker& lhs, const copy_tracker& rhs)
{ return lhs.id() == rhs.id(); }
-}; // namespace __gnu_cxx_test
+} // namespace __gnu_cxx_test
namespace std
{
diff --git a/libstdc++-v3/testsuite_flags.in b/libstdc++-v3/testsuite_flags.in
index 4c351569a37..132a11f58e1 100755
--- a/libstdc++-v3/testsuite_flags.in
+++ b/libstdc++-v3/testsuite_flags.in
@@ -43,15 +43,16 @@ case ${query} in
echo ${CXX}
;;
--build-cxx)
+ PCHFLAGS="-Winvalid-pch -include ${BUILD_DIR}/include/stdc++.h"
CC_build="@glibcpp_CXX@"
CXX=`echo $CC_build | sed 's/xgcc/g++/g'`
echo ${CXX}
;;
--cxxflags)
- CXXFLAGS=' -g @SECTION_FLAGS@ @SECTION_LDFLAGS@
- -fmessage-length=0 @EXTRA_CXX_FLAGS@
- -DDEBUG_ASSERT -DLOCALEDIR="@glibcpp_localedir@" '
- echo ${CXXFLAGS}
+ CXXFLAGS_save="-g -O2"
+ CXXFLAGS_config='@SECTION_FLAGS@ @SECTION_LDFLAGS@ -fmessage-length=0
+ @EXTRA_CXX_FLAGS@ -DLOCALEDIR="@glibcpp_localedir@" '
+ echo ${CXXFLAGS_save} ${CXXFLAGS_config}
;;
*)
print_usage
diff --git a/zlib/ChangeLog.gcj b/zlib/ChangeLog.gcj
index cdef9d4f765..6eea9b3e45f 100644
--- a/zlib/ChangeLog.gcj
+++ b/zlib/ChangeLog.gcj
@@ -1,3 +1,8 @@
+2003-03-12 Andreas Schwab <schwab@suse.de>
+
+ * configure.in: Avoid trailing /. in toolexeclibdir.
+ * configure: Rebuilt.
+
2003-02-20 Alexandre Oliva <aoliva@redhat.com>
* configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
diff --git a/zlib/configure b/zlib/configure
index 526f7f86581..a7a23cff103 100755
--- a/zlib/configure
+++ b/zlib/configure
@@ -2317,7 +2317,7 @@ EOF
# We ignore --with-system-zlib in this case.
target_all=libzgcj.la
else
- for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
+ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
@@ -2449,24 +2449,11 @@ else
#include <fcntl.h>
#include <sys/mman.h>
-#if HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-#if HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+# include <unistd.h>
+# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
@@ -2574,7 +2561,7 @@ main()
}
EOF
-if { (eval echo configure:2578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@@ -2599,12 +2586,12 @@ fi
for ac_func in memcpy strerror
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2603: checking for $ac_func" >&5
+echo "configure:2590: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2608 "configure"
+#line 2595 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -2627,7 +2614,7 @@ $ac_func();
; return 0; }
EOF
-if { (eval echo configure:2631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2618: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@@ -2654,7 +2641,7 @@ done
if test "$with_system_zlib" = yes; then
echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
-echo "configure:2658: checking for deflate in -lz" >&5
+echo "configure:2645: checking for deflate in -lz" >&5
ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -2662,7 +2649,7 @@ else
ac_save_LIBS="$LIBS"
LIBS="-lz $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2666 "configure"
+#line 2653 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
@@ -2673,7 +2660,7 @@ int main() {
deflate()
; return 0; }
EOF
-if { (eval echo configure:2677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
@@ -2705,17 +2692,17 @@ for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2709: checking for $ac_hdr" >&5
+echo "configure:2696: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2714 "configure"
+#line 2701 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2719: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2706: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -2752,6 +2739,9 @@ else
fi
if test "$GCC" = yes && $CC -print-multi-os-directory > /dev/null 2>&1; then
multiosdir=/`$CC -print-multi-os-directory`
+ case $multiosdir in
+ /.) multiosdir= ;; # Avoid trailing /.
+ esac
else
multiosdir=
fi
@@ -2841,34 +2831,15 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\_ACEOF
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
-t quote
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-_ACEOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output. A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
# Without the "./", some shells look in PATH for config.status.
diff --git a/zlib/configure.in b/zlib/configure.in
index 224f1de5834..0d5588d71a3 100644
--- a/zlib/configure.in
+++ b/zlib/configure.in
@@ -123,6 +123,9 @@ else
fi
if test "$GCC" = yes && $CC -print-multi-os-directory > /dev/null 2>&1; then
multiosdir=/`$CC -print-multi-os-directory`
+ case $multiosdir in
+ /.) multiosdir= ;; # Avoid trailing /.
+ esac
else
multiosdir=
fi