From d721838658d4ee24af66c16dd8c42911b7cfd523 Mon Sep 17 00:00:00 2001 From: law Date: Sat, 6 Dec 1997 17:30:09 +0000 Subject: [PATCH] import of gcc-2.8 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc3@16983 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 1920 ++++++--- gcc/ChangeLog.10 | 383 +- gcc/ChangeLog.9 | 2 +- gcc/INSTALL | 13 +- gcc/Makefile.in | 92 +- gcc/NEWS | 283 +- gcc/ORDERS | 4 +- gcc/README | 2 +- gcc/README.X11 | 2 +- gcc/SERVICE | 34 +- gcc/acconfig.h | 9 + gcc/aclocal.m4 | 6 + gcc/bc-optab.c | 3 + gcc/bitmap.h | 2 +- gcc/c-aux-info.c | 16 +- gcc/c-common.c | 15 +- gcc/c-decl.c | 2 +- gcc/c-lex.c | 40 +- gcc/c-pragma.c | 2 +- gcc/c-typeck.c | 17 + gcc/calls.c | 6 +- gcc/cccp.c | 335 +- gcc/cexp.c | 172 +- gcc/cexp.y | 82 +- gcc/choose-temp.c | 12 +- gcc/collect2.c | 35 +- gcc/combine.c | 58 +- gcc/config.in | 61 +- gcc/config/1750a/1750a.md | 2 +- gcc/config/a29k/a29k.h | 9 +- gcc/config/alpha/alpha.c | 17 +- gcc/config/alpha/alpha.h | 12 +- gcc/config/alpha/alpha.md | 2 +- gcc/config/alpha/elf.h | 14 +- gcc/config/alpha/linux.h | 9 +- gcc/config/alpha/t-linux | 2 +- gcc/config/alpha/vms.h | 33 +- gcc/config/alpha/xm-alpha.h | 8 - gcc/config/alpha/xm-vms.h | 20 +- gcc/config/arc/arc.c | 8 +- gcc/config/arm/aof.h | 2 +- gcc/config/arm/arm.c | 22 +- gcc/config/arm/arm.h | 11 +- gcc/config/arm/arm.md | 180 +- gcc/config/arm/coff.h | 2 +- gcc/config/arm/lib1funcs.asm | 19 + gcc/config/arm/linux-gas.h | 3 +- gcc/config/arm/linux.h | 9 +- gcc/config/arm/netbsd.h | 16 +- gcc/config/arm/t-linux | 2 +- gcc/config/arm/xm-arm.h | 6 - gcc/config/arm/xm-linux.h | 2 +- gcc/config/arm/xm-netbsd.h | 11 - gcc/config/clipper/clipper.c | 46 +- gcc/config/clipper/clix.h | 4 +- gcc/config/clipper/xm-clix.h | 9 - gcc/config/convex/xm-convex.h | 7 +- gcc/config/dsp16xx/dsp16xx.h | 6 +- gcc/config/fp-bit.c | 6 +- gcc/config/h8300/h8300.c | 2 +- gcc/config/i370/i370.c | 104 +- gcc/config/i370/i370.h | 106 +- gcc/config/i370/xm-i370.h | 6 +- gcc/config/i386/cygwin32.h | 3 + gcc/config/i386/dgux.c | 5 +- gcc/config/i386/dgux.h | 26 +- gcc/config/i386/freebsd-elf.h | 2 +- gcc/config/i386/gmon-sol2.c | 4 +- gcc/config/i386/i386.c | 26 +- gcc/config/i386/i386.h | 2 + gcc/config/i386/i386.md | 23 +- gcc/config/i386/isc.h | 4 + gcc/config/i386/linux-aout.h | 9 +- gcc/config/i386/linux-oldld.h | 10 +- gcc/config/i386/linux.h | 6 +- gcc/config/i386/mingw32.h | 7 +- gcc/config/i386/rtems.h | 2 +- gcc/config/i386/sco5.h | 44 +- gcc/config/i386/xm-aix.h | 8 +- gcc/config/i386/xm-cygwin32.h | 2 - gcc/config/i386/xm-dos.h | 3 - gcc/config/i386/xm-linux.h | 4 +- gcc/config/i386/xm-mingw32.h | 15 +- gcc/config/i386/xm-os2.h | 10 +- gcc/config/i386/xm-osf.h | 10 +- gcc/config/i386/xm-sun.h | 6 +- gcc/config/i960/rtems.h | 2 +- gcc/config/linux-aout.h | 6 +- gcc/config/linux.h | 19 +- gcc/config/m32r/m32r.md | 6 +- gcc/config/m68k/auxas.h | 4 +- gcc/config/m68k/linux-aout.h | 4 +- gcc/config/m68k/linux.h | 7 +- gcc/config/m68k/m68k.c | 4 +- gcc/config/m68k/m68k.h | 6 +- gcc/config/m68k/m68k.md | 44 +- gcc/config/m68k/mot3300.h | 3 + gcc/config/m68k/rtems.h | 2 +- gcc/config/m68k/sun2o4.h | 4 +- gcc/config/m68k/sun3mach.h | 2 +- gcc/config/m68k/sun3n3.h | 2 +- gcc/config/m68k/sun3o3.h | 2 +- gcc/config/m68k/t-linux | 2 +- gcc/config/m68k/t-linux-aout | 2 +- gcc/config/m68k/xm-3b1.h | 6 - gcc/config/m68k/xm-altos3068.h | 4 - gcc/config/m68k/xm-amix.h | 4 +- gcc/config/m68k/xm-atari.h | 2 +- gcc/config/m68k/xm-crds.h | 7 - gcc/config/m68k/xm-hp320.h | 6 - gcc/config/m68k/xm-linux.h | 2 +- gcc/config/m68k/xm-m68kv.h | 6 - gcc/config/m68k/xm-mot3300.h | 9 +- gcc/config/m68k/xm-plexus.h | 7 - gcc/config/m88k/dgux.h | 24 +- gcc/config/m88k/luna.h | 4 +- gcc/config/m88k/m88k.c | 6 +- gcc/config/m88k/m88k.h | 7 +- gcc/config/m88k/xm-m88k.h | 13 +- gcc/config/mips/iris6.h | 4 +- gcc/config/mips/mips.c | 65 +- gcc/config/mips/mips.h | 2 +- gcc/config/mips/mips.md | 31 +- gcc/config/mips/rtems64.h | 2 +- gcc/config/mips/x-iris | 8 +- gcc/config/mips/x-iris3 | 8 +- gcc/config/mips/xm-iris3.h | 5 - gcc/config/mips/xm-iris4.h | 5 - gcc/config/mips/xm-iris5.h | 6 - gcc/config/mips/xm-iris6.h | 10 +- gcc/config/mips/xm-mips.h | 4 +- gcc/config/mips/xm-sysv.h | 10 +- gcc/config/mn10200/mn10200.c | 16 +- gcc/config/mn10200/mn10200.h | 21 +- gcc/config/mn10200/mn10200.md | 68 +- gcc/config/mn10300/mn10300.c | 108 +- gcc/config/mn10300/mn10300.h | 40 +- gcc/config/mn10300/mn10300.md | 24 +- gcc/config/msdos/top.sed | 4 +- gcc/config/nextstep.h | 61 +- gcc/config/ns32k/xm-genix.h | 4 - gcc/config/pa/pa-hpux10.h | 4 +- gcc/config/pa/pa-hpux9.h | 4 +- gcc/config/pa/pa-pro-end.h | 4 +- gcc/config/pa/pa.c | 19 +- gcc/config/pa/pa.h | 6 +- gcc/config/pa/pa.md | 4 +- gcc/config/pa/xm-pahpux.h | 9 +- gcc/config/pdp11/pdp11.md | 2 +- gcc/config/romp/romp.c | 2 +- gcc/config/rs6000/cygwin32.h | 5 +- gcc/config/rs6000/linux.h | 9 +- gcc/config/rs6000/rs6000.c | 110 +- gcc/config/rs6000/rs6000.h | 21 +- gcc/config/rs6000/rs6000.md | 82 +- gcc/config/rs6000/rtems.h | 2 +- gcc/config/rs6000/sysv4.h | 14 +- gcc/config/rs6000/t-ppccomm | 4 + gcc/config/rs6000/t-ppcos | 3 +- gcc/config/rs6000/tramp.asm | 8 +- gcc/config/rs6000/win-nt.h | 4 +- gcc/config/rs6000/xm-cygwin32.h | 4 +- gcc/config/sh/elf.h | 5 +- gcc/config/sh/rtems.h | 2 +- gcc/config/sh/sh.c | 65 +- gcc/config/sh/sh.h | 26 +- gcc/config/sh/sh.md | 70 +- gcc/config/sh/xm-sh.h | 6 +- gcc/config/sparc/linux-aout.h | 13 +- gcc/config/sparc/linux.h | 25 +- gcc/config/sparc/linux64.h | 21 +- gcc/config/sparc/rtems.h | 2 +- gcc/config/sparc/sparc.c | 9 +- gcc/config/sparc/sparc.h | 14 +- gcc/config/sparc/sparc.md | 15 +- gcc/config/sparc/sun4o3.h | 2 +- gcc/config/sparc/t-linux | 2 +- gcc/config/sparc/xm-linux.h | 2 +- gcc/config/sparc/xm-pbd.h | 3 - gcc/config/sparc/xm-sparc.h | 4 +- gcc/config/tahoe/tahoe.c | 2 +- gcc/config/tahoe/tahoe.md | 6 +- gcc/config/v850/lib1funcs.asm | 2 +- gcc/config/v850/v850.c | 6 +- gcc/config/v850/v850.h | 22 +- gcc/config/v850/v850.md | 12 +- gcc/config/v850/xm-v850.h | 2 +- gcc/config/vax/vax.h | 2 +- gcc/config/vax/xm-vaxv.h | 4 - gcc/config/vax/xm-vms.h | 12 +- gcc/config/winnt/config-nt.sed | 2 +- gcc/config/winnt/win-nt.h | 2 +- gcc/config/winnt/xm-winnt.h | 8 +- gcc/config/xm-linux.h | 16 +- gcc/config/xm-svr3.h | 10 +- gcc/config/xm-svr4.h | 10 +- gcc/configure | 1135 ++++- gcc/configure.in | 160 +- gcc/configure.lang | 2 +- gcc/cp/ChangeLog | 583 ++- gcc/cp/Make-lang.in | 12 +- gcc/cp/Makefile.in | 46 +- gcc/cp/NEWS | 204 +- gcc/cp/call.c | 272 +- gcc/cp/class.c | 291 +- gcc/cp/cp-tree.def | 8 + gcc/cp/cp-tree.h | 42 +- gcc/cp/cvt.c | 22 +- gcc/cp/decl.c | 254 +- gcc/cp/decl2.c | 113 +- gcc/cp/error.c | 75 +- gcc/cp/except.c | 531 ++- gcc/cp/exception.cc | 105 +- gcc/cp/expr.c | 6 +- gcc/cp/friend.c | 24 +- gcc/cp/g++FAQ.texi | 4 +- gcc/cp/g++spec.c | 20 + gcc/cp/gxxint.texi | 33 +- gcc/cp/init.c | 101 +- gcc/cp/lang-options.h | 5 + gcc/cp/lang-specs.h | 2 +- gcc/cp/lex.c | 151 +- gcc/cp/method.c | 248 +- gcc/cp/parse.c | 8854 ++++++++++++++++++++------------------- gcc/cp/parse.h | 183 +- gcc/cp/parse.y | 254 +- gcc/cp/pt.c | 747 +++- gcc/cp/repo.c | 10 +- gcc/cp/rtti.c | 24 +- gcc/cp/search.c | 34 +- gcc/cp/spew.c | 7 + gcc/cp/tinfo2.cc | 12 + gcc/cp/tree.c | 46 +- gcc/cp/typeck.c | 117 +- gcc/cp/typeck2.c | 12 +- gcc/cp/xref.c | 7 +- gcc/cplus-dem.c | 11 +- gcc/cpp.info | 6 +- gcc/cpp.info-1 | 2 +- gcc/cpp.info-2 | 2 +- gcc/cpp.info-3 | 11 +- gcc/cpp.texi | 9 + gcc/cpplib.c | 277 +- gcc/cpplib.h | 8 +- gcc/crtstuff.c | 9 +- gcc/cse.c | 13 +- gcc/dbxout.c | 4 +- gcc/dwarf2.h | 53 +- gcc/dwarf2out.c | 181 +- gcc/dwarfout.c | 40 +- gcc/emit-rtl.c | 4 + gcc/enquire.c | 2 +- gcc/except.c | 29 +- gcc/except.h | 5 + gcc/explow.c | 7 +- gcc/expmed.c | 2 + gcc/expr.c | 130 +- gcc/extend.texi | 2 +- gcc/fixinc.ptx | 4 +- gcc/fixinc.svr4 | 1 + gcc/floatlib.c | 2 +- gcc/flow.c | 10 +- gcc/fold-const.c | 10 +- gcc/frame.c | 70 +- gcc/frame.h | 18 +- gcc/function.c | 43 +- gcc/gansidecl.h | 22 +- gcc/gcc.1 | 4 +- gcc/gcc.c | 10 +- gcc/gcc.info | 625 +-- gcc/gcc.info-1 | 29 +- gcc/gcc.info-11 | 10 +- gcc/gcc.info-18 | 14 +- gcc/gcc.info-2 | 18 +- gcc/gcc.info-21 | 36 +- gcc/gcc.info-23 | 4 +- gcc/gcc.info-24 | 11 + gcc/gcc.info-26 | 16 +- gcc/gcc.info-28 | 9 +- gcc/gcc.info-3 | 52 +- gcc/gcc.info-4 | 28 +- gcc/gcc.info-5 | 73 +- gcc/gcc.info-7 | 13 +- gcc/gcc.info-9 | 2 +- gcc/gcc.texi | 32 +- gcc/gcov.c | 36 +- gcc/genattrtab.c | 18 +- gcc/genmultilib | 4 +- gcc/genoutput.c | 1 + gcc/getopt.c | 21 +- gcc/getpwd.c | 13 +- gcc/ginclude/ppc-asm.h | 2 +- gcc/ginclude/va-sh.h | 62 +- gcc/global.c | 13 +- gcc/install.texi | 13 +- gcc/integrate.c | 2 +- gcc/invoke.texi | 196 +- gcc/jump.c | 70 +- gcc/libgcc2.c | 20 +- gcc/listing | 6 +- gcc/local-alloc.c | 10 +- gcc/loop.c | 18 +- gcc/machmode.def | 4 +- gcc/make-cc1.com | 13 +- gcc/make-cccp.com | 5 +- gcc/make-l2.com | 2 +- gcc/md.texi | 11 +- gcc/mips-tfile.c | 23 +- gcc/objc/Make-lang.in | 26 +- gcc/objc/Object.m | 2 +- gcc/objc/THREADS | 10 +- gcc/objc/archive.c | 30 +- gcc/objc/class.c | 1 + gcc/objc/encoding.c | 20 +- gcc/objc/init.c | 2 +- gcc/objc/misc.c | 2 +- gcc/objc/objc-act.c | 160 +- gcc/objc/objc-api.h | 2 +- gcc/objc/runtime.h | 13 +- gcc/objc/selector.c | 14 +- gcc/objc/sendmsg.c | 34 +- gcc/objc/thr-decosf1.c | 4 +- gcc/objc/thr-irix.c | 2 +- gcc/objc/thr-mach.c | 4 +- gcc/objc/thr-os2.c | 2 +- gcc/objc/thr-posix.c | 59 +- gcc/objc/thr-pthreads.c | 4 +- gcc/objc/thr-solaris.c | 2 +- gcc/objc/thr-win32.c | 2 +- gcc/obstack.c | 161 +- gcc/obstack.h | 184 +- gcc/pexecute.c | 17 +- gcc/prefix.c | 6 +- gcc/print-rtl.c | 5 + gcc/profile.c | 4 +- gcc/protoize.c | 44 +- gcc/real.h | 7 + gcc/recog.c | 4 +- gcc/regclass.c | 19 + gcc/reload.c | 16 +- gcc/reload1.c | 9 +- gcc/rtl.c | 14 +- gcc/rtl.def | 6 +- gcc/rtl.h | 2 + gcc/stmt.c | 90 +- gcc/stor-layout.c | 2 +- gcc/tm.texi | 56 +- gcc/toplev.c | 76 +- gcc/tree.c | 12 +- gcc/tree.def | 6 +- gcc/tree.h | 54 +- gcc/unroll.c | 7 +- gcc/varasm.c | 5 +- gcc/version.c | 2 +- gcc/vmsconfig.com | 49 +- gcc/xcoffout.c | 3 + 356 files changed, 15310 insertions(+), 9251 deletions(-) rewrite gcc/cp/parse.h (88%) rewrite gcc/gcc.info (81%) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f770cc69c78..2eccf3e2c96 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,1041 @@ +Fri Dec 5 07:29:26 1997 Richard Kenner + + * Version 2.8.0 released. + +Fri Dec 5 07:24:36 1997 Richard Stallman + + * sparc/linux64.h (TARGET_VERSION): Write "GNU/Linux". + * sparc/linux.h, sparc/linux-aout.h, rs6000/linux.h: Likewise. + * m68k/linux.h, arm/linux.h, alpha/{linux,elf}.h: Likewise. + * listing: Change linux to gnu-linux. + +Fri Dec 5 06:23:22 1997 Paul Eggert + + Alter C startup code so that it doesn't invoke malloc on Solaris. + * frame.h (struct object): Decl moved here from frame.c. + * frame.c (struct object): Move decl to frame.h. + ("frame.h"): Include after , so that size_t is defined. + (__register_frame, __register_frame_table, __deregister_frame): + It's now the caller's responsibility to allocate storage for object. + * crtstuff.c (frame_dummy), collect2.c (write_c_file_stat): + Allocate initial frame object in static storage and pass its address. + * crtstuff.c (, "frame.h"): Include. + * Makefile.in ($(T)crtbegin.o, $(T)crtend.o, stamp-crtS): + Depend on defaults.h and frame.h. + + * Makefile.in (RTL_H, TREE_H): Add gansidecl.h. + (DEMANGLE_H): New macro. All dependencies on demangle.h + changed to $(DEMANGLE_H). + (RECOG_H): Likewise. + (libgcc2.a, stmp-multilib): Add dependencies on frame.h, gansidecl.h. + (collect.o): Add dependency on gansidecl.h. + (gcc.o, choose-temp.o, pexecute.o, prefix.o): Likewise. + (obstack.o, choose-temp.o, pexecute.o): Add dependency on $(CONFIG_H). + +Fri Dec 5 06:20:06 1997 Dean Deaver + + * arm.md (casesi_internal): Add USE of label. + +Fri Dec 5 05:59:44 1997 Richard Kenner + + * configure.in (sys/times.h): Check for this instead of times.h. + * cpplib.c, toplev.c: Properly test for and include sys/times.h. + +Thu Dec 4 12:30:40 1997 J"orn Rennecke + + * sh.c (final_prescan_insn): Use local label prefix when emitting + .uses pseudo-ops. + +Thu Dec 4 07:00:48 1997 Richard Earnshaw + + * arm.c (arm_finalize_pic): Use an offset of 4 when adjusting the + GOT address. + +Thu Dec 4 06:58:32 1997 Dean Deaver + + * genoutput.c (scan_operands): Treat format of "u" like "e". + +Thu Dec 4 06:28:33 1997 Richard Kenner + + * msdos/top.sed, winnt/config-nt.sed: Change version to 2.8.0. + + * stmt.c (pushcase_range): Clean up handling of "infinite" values. + +Wed Dec 3 09:03:35 1997 Bernd Schmidt + + * i386.c (notice_update_cc): Remove bogus Pentium GCC code. + +Wed Dec 3 08:46:32 1997 Paul Eggert + + * arm.h (CPP_ARCH_DEFAULT_SPEC): Fix misspelling: `TARGET_CPU_DEFUALT'. + (TARGET_SWITCHES): Fix misspelling: `no-apcs-rentrant'. + * pa.c (override_options): Fix misspelling: `compatable'. + * enquire.c (main): Fix misspelling in diagnostic: `mallocatable'. + * gcov.c (function_summary): Fix misspelling in diagnostic: `funcion'. + * objc/thr-decosf1.c (__objc_thread_id): Fix misspelling in code: + `pthread_getuniqe_np'. + + * tahoe.c (extensible_operand): Renamed from extendable_operand. + All callers changed. + * dwarf2.h (enum dwarf_discrim_list): Renamed from dwarf_descrim_list. + * dwarf2out.c: Fix misspellings in forward static function + declarations: `add_AT_setion_offset', `add_sibling_atttributes'. + * dwarfout.c: Fix misspellings in forward static function + declarations: `langauge_attribute', `geneate_new_sfname_entry'. + * stmt.c, tree.h (start_cleanup_deferral): + Renamed from start_cleanup_deferal. + (end_cleanup_deferral): Renamed from end_cleanup_deferal. + * toplev.c (rest_of_compilation): Rename local var from + inlineable to inlinable. + +Wed Dec 3 06:17:03 1997 Jason Merrill + + * stmt.c (expand_decl_cleanup): Update thisblock after eh_region_start. + +Wed Dec 3 06:06:38 1997 Jim Wilson + + * dwarf2out.c (gen_type_die, case POINTER_TYPE): See TREE_ASM_WRITTEN + before the recursive call. + +Wed Dec 3 05:57:29 1997 Richard Kenner + + * configure.in (AC_HEADER_{STDC,TIME}): Add calls. + (AC_CHECK_HEADERS): Add fcntl.h times.h, sys/times.h, + sys/resource.h, and sys/param.h. + (getenv): Check if need declaration. + * cccp.c: Remove obsolete ways of including headers and use autoconf + symbols instead. + Include gansidecl.h; remove things defined there. + See if getenv needs to be declared. + * cpplib.c: Likewise. + * cexp.y: Use autoconf symbols to select what include files are needed. + * genattrtab.c, toplev.c: Likewise. + +Tue Dec 2 21:44:25 1997 Richard Kenner + + * reload1.c (reload): Make copy of MEM before setting + req_equiv_mem if the address is a PLUS. + +Tue Dec 2 07:03:47 1997 Pat Rankin + + * vax/xm-vms.h (STDC_HEADERS, HAVE_STDLIB, HAVE_STRING): Define. + (mesg_implicit_function_declaration): New macro. + + * make-l2.com: Compile libgcc2.c with `-fexceptions' specified. + +Mon Dec 1 17:44:59 1997 Jeffrey A Law (law@cygnus.com) + + * dwarf2out.c (output_call_frame_info): Use ASM_OUTPUT_ASCII to + output ASCII by default; only use ASM_OUTPUT_DWARF_STRING if + flag_debug_asm is on. + (output_die, output_pubnames, output_line_info): Likewise. + +Mon Dec 1 17:15:30 1997 Philip Blundell + + * arm/linux.h (SUBTARGET_CPU_DEFAULT): Define instead + of TARGET_CPU_DEFAULT. + +Mon Dec 1 16:51:23 1997 J.J. van der Heijden + + * i386/mingw32.h (MATH_LIBRARY): Set to "-lcrtdll". + +Mon Dec 1 16:46:57 1997 Richard Kenner + + * c-aux-info.c: Add prototypes for static functions. + * c-lex.c, emit-rtl.c, rtl.c, xcoffout.c: Likewise. + + * i386.h (TARGET_SWITCHES): Add entries for "windows" and "dll". + +Mon Dec 1 16:42:20 1997 Jim Wilson + + * mips.md (fix_trunc{dfsi,sfsi,dfsi}2): Add '*' in operand 3. + +Sun Nov 30 20:25:59 1997 Richard Kenner + + * expr.c (get_inner_reference): For ARRAY_REF, if need + WITH_RECORD_EXPR, make it with the ARRAY_REF as exp. + + * expr.c (store_constructor): Use TARGET, not EXP, for + WITH_RECORD_EXPR when offset has a placeholder. + +Sun Nov 30 11:19:00 1997 J.J. van der Heijden + + * objc/Make-lang.in (libobjc.dll): Rename -dll flag to -mdll. + +Sun Nov 30 08:42:29 1997 Bruno Haible + + * stmt.c (expand_end_bindings): Cleanups and incoming gotos are + not incompatible. + +Sun Nov 30 05:45:06 1997 Michael P. Hayes + + * jump.c (jump_optimize): Use find_insert_position in two more places. + +Sat Nov 29 13:47:40 1997 Richard Kenner + + * alpha/vms.h (HAVE_STRERROR, HAVE_{LIMITS,STDDEF,TIME}_H): Define. + +Sat Nov 29 08:29:47 1997 J.J.van der Heijden + + * configure.in: Add check for kill. + * gcc.c: Define kill as raise if not HAVE_KILL. + +Sat Nov 29 06:18:08 1997 Michael P. Hayes + + * jump.c (find_insert_position): New function. + (jump_optimize): Use it when making new copy of insn after test. + +Sat Nov 29 05:54:57 1997 Douglas Rupp + + * alpha/vms.h (BIGGEST_ALIGNMENT, ENCODE_SECTION_INFO): No longer + override. + +Sat Nov 29 05:43:37 1997 Richard Kenner + + * getpwd.c (getpwd, [VMS]): Only add extra arg if VMS. + + * alpha/xm-vms.h (HAVE_VPRINTF, HAVE_PUTENV): Define. + + * cccp.c (index, rindex): Add conditional defs to strchr and strrchr.s + * cpplib.c: Likewise. + * gcov.c: Include gansidecl.h. + +Fri Nov 28 21:17:51 1997 H.J. Lu (hjl@gnu.ai.mit.edu) + + * objc/objc-act.c: Include "output.h". + + * objc/Make-lang.in (objc-parse.o, objc-act.o): Also depend on + $(srcdir)/output.h. + + * objc/Object.m (+conformsTo:): Surround assignment with parentheses. + + * objc/archive.c, objc/class.c, objc/encoding.c: Finish prototyping. + * objc/init.c, objc/objc-act.c, objc/objc-api.h: Likewise. + * objc/runtime.h, objc/sendmsg.c: Likewise. + +Fri Nov 28 19:15:53 1997 Mark Kettenis + + * objc/thr-posix.c (__objc_mutex_allocate): Allocate + mutex type instead of assuming it fits in a void * type. + (__objc_mutex_deallocate): Free mutex type. + (__objc_mutex_lock): Pass mutex type instead of pointer to it. + (__objc_mutex_{try,un}lock): Likewise. + (__objc_condition_allocate): Allocate condition type instead + of assuming it fits in a void * type. + (__objc_condition_deallocate): Free condition type. + (__objc_condition_wait): Pass condition type instead of pointer to it. + (__objc_condition_{broadcast,signal}): Likewise. + +Fri Nov 28 17:07:25 1997 David Edelsohn + + * rs6000.c (function_arg_partial_nregs): Undo 11/26 change. + +Fri Nov 28 12:34:03 1997 Scott Christley + + * objc/Make-lang.in (runtime-info.h): Add comment in file. + + * objc/selector.c: Replace all occurences of sarray_get + with sarray_get_safe. + * objc/sendmsg.c: Likewise. + + * protoize.c (include_defaults): Add component element as in cccp.c. + * nextstep.h (INCLUDE_DEFAULTS): Add component element. + (ASM_COMMENT_START): Correct assembly comment string. + * objc/Make-lang.in (objc/{NXConstStr,Object,Protocol,linking): + Compile with GNU runtime. + +Fri Nov 28 12:27:50 1997 Ovidiu Predescu + + Generate platform information required by ObjC runtime. + * toplev.c (lang_options): New ObjC specific compiler flag. + * objc/Make-lang.in: Add target to generate runtime-info.h file. + * objc/objc-act.c (print_struct_values): New variable. + (generate_struct_by_value_array): New function. + (lang_init): Call generate_struct_by_value_array if requested. + (lang_decode_option): Check for new compiler flag.s + * objc/sendmsg.c (__objc_get_forward_imp): Check size of type + for determining proper forwarding function. + +Fri Nov 28 05:58:30 1997 Richard Kenner + + * regclass.c (record_address_regs): Use REG_OK_FOR_{INDEX,BASE}, + not the REGNO versions. + +Thu Nov 27 16:28:04 1997 Scott Snyder + + * dwarf2out.c (outout_call_frame_info): Ensure info has proper + alignment. + + * libgcc2.c (__throw): Initialize HANDLER. + +Thu Nov 27 16:23:25 1997 Kaveh R. Ghazi + + * tree.h, rtl.h: See if need declarations for free. + * tree.c, bc-optab.c: Get the declaration of free from stdlib.h. + +Thu Nov 27 07:21:54 1997 Jason Merrill + + * except.h: Add outer_context_label_stack. + * except.c: Likewise. + (expand_start_all_catch): Push the outer_context for the try block + onto outer_context_label_stack. + (expand_end_all_catch): Use it and pop it. + + * except.c (expand_start_all_catch): One more do_pending_stack_adjust. + + * expr.c (preexpand_calls): Don't look past a TRY_CATCH_EXPR. + +Thu Nov 27 07:15:10 1997 Michael Meissner + + * rs6000.c (SMALL_DATA_REG): Register to use for small data relocs. + (print_operand{,_address}): Use SMALL_DATA_REG for register involved in + small data relocations. + + * rs6000/linux.h (LINK_SPEC): Pass -dynamic-linker /lib/ld.so.1 if + -dynamic linker is not used. + + * rs6000.md (call insns): For local calls, use @local suffix under + System V; don't use @plt under Solaris. + +Wed Nov 26 15:12:32 1997 Jeffrey A Law (law@cygnus.com) + + * Makefile.in (LIBGCC2_CFLAGS): Add -fexceptions. + + * toplev.c (flag_exceptions): Default value is 2. + (compile_file): If flag_exceptions still has the value 2, then + set it to 0. + +Wed Nov 26 14:58:42 1997 Michael Meissner + + * rs6000.c (output_function_profiler): Put label address in r0, and + store LR in 4(sp) for System V/eabi. + + * rs6000.h (ASM_OUTPUT_REG_{PUSH,POP}): Keep stack aligned to 16 + byte boundary, and maintain stack backchain. + + (Originally from Geoffrey Keating) + * rs6000.c (function_arg): Excess floating point arguments don't + go into GPR registers after exhausting FP registers under the + System V.4 ABI. + (function_arg_partial_nregs): Likewise. + + * rs6000.md (call insns): If -fPIC or -mrelocatable, add @plt + suffix to calls. + +Wed Nov 26 14:09:01 1997 Jason Merrill + + * dwarfout.c (output_type): If finalizing, write out nested types + of types we've already written. + + * toplev.c (main): Complain about -gdwarfn. + +Wed Nov 26 12:37:56 1997 J.J. van der Heijden + + * mingw32.h (PATH_SEPARATOR): Moved to xm-mingw32.h + * xm-mingw32.h (PATH_SEPARATOR): Moved here from mingw32.h. + + * getpwd.c (getpwd): Use VMS implementation of _WIN32 unless cygwin32. + +Wed Nov 26 12:26:44 1997 John Hassey + + * m88k/dgux.h (ASM_CPU_SPEC) : No whitespace allowed. + + * m88k.h (SUPPORTS_ONE_ONLY) : Must be svr4. + + * i386/dgux.h (ASM_OUTPUT_ALIGN): Deleted. + + * i386/dgux.c (output_file_start) : Changed ix86_isa_string + to ix86_arch_string. + + * cplus-dem.c (fancy_abort): Added. + +Wed Nov 26 06:07:50 1997 Richard Earnshaw + + * arm/coff.h (TARGET_DEFAULT): Add ARM_FLAG_APCS_32 to defaults. + + * configure.in (arm*-*-*): Recognize --with-cpu for ARM processors. + +Wed Nov 26 05:05:36 1997 Richard Kenner + + * libgcc2.c (inhibit_libc): Define #ifdef CROSS_COMPILE. + + * mips/xm-iris6.h (malloc, realloc, calloc): No longer declare. + (USG): Define here. + (xm-iris5.h): No longer include; just include xm-mips.h. + + * mips-tfile.c (parse_def): Properly recognize bitfield and + count array dimensions. + + * protoize.c: Remove declarations of void, exit, and free. + + * i386/mingw32.h (LINK_SPEC, STARTFILE_SPEC): Change -dll to -mdll. + + * configure.in: Check for sys/file.h. + * gcc.c (sys/file.h): Include if HAVE_SYS_FILE_H. + + * configure.in: Only give error on bad --with-cpu value for target. + +Sat Nov 22 19:21:55 1997 Philippe De Muyter + + * dwarf2out.c (CIE_LENGTH_LABEL, FDE_LENGTH_LABEL): New macros. + (ASM_OUTPUT_DWARF_VALUE4): New macro. + (ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL): Define if SET_ASM_OP is + defined. + (output_call_frame_info): Don't output forward label differences + if ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL is defined. + Substitute instead simple label and define this label later to be + difference of desired labels after they have been defined. + * m68k/mot3300.h (SET_ASM_OP): Define when not using gas. + + * gcc.c (process_command): Don't take address of function fatal when + calling lang_specific_driver. + +Sat Nov 22 17:08:03 1997 J. Kean Johnston + + * i386/sco5.h (SELECT_RTX_SECTION): Redefine to work with -fpic. + (LIBGCC_SPEC, LIB_SPEC): Link with correct libgcc.a. + (HAVE_ATEXIT): Define. + +Sat Nov 22 12:20:22 1997 Richard Earnshaw + + * arm.md (movsfcc{,_hard}_insn): Specify mode for all alternatives. + +Sat Nov 22 06:56:16 1997 Richard Kenner + + * function.c (instantiate_decl): Only ignore ADDRESSOF if arg is REG. + + * configure.in: Check for functions before checking which need decls. + (bcopy, bzero, bcmp, index, rindex): Add checks. + (vax-*-sysv*): Fix typo in setting of xm_file. + * aclocal.m4: Add conditional definitions of index and rindex. + * gansidecl.h (bcopy, bzero, bcmp, index, rindex): If don't + have one of these, define macro to use ANSI form. + * pa/xm-pahpux.h (bcopy, bzero, bcmp, rindex, index): No longer define. + * mips/xm-sysv.h, xm-m88k.h, m68k/xm-plexus.h: Likewise. + * m68k/xm-mot3300.h, m68k/xm-m68kv.h, m68k/xm-hp320.h: Likewise. + * winnt/xm-winnt.h, vax/xm-vms.h, m68k/xm-3b1.h: Likewise. + * i386/xm-os2.h, i386/xm-mingw32.h, alpha/xm-vms.h: Likewise. + * xm-svr4.h, xm-svr3.h: Likewise. + * clipper/xm-clix.h: Likewise. + (TARGET_MEM_FUNCTIONS): Define here. + * xm-linux.h (bcmp, bcopy, bzero, index, rindex): No longer undefine. + * xm-convex.h (bcopy, bzero): No longer define. + * vax/xm-vaxv.h, sparc/xm-pbd.h, mips/xm-iris{3,4,5}.h: Likewise. + * m68k/xm-crds.h, m68k/xm-altos3068.h, i386/xm-sun.h: Likewise. + * i386/xm-osf.h, i386/xm-aix.h, xm-i370.h, ns32k/xm-genix.h: Likewise. + +Sat Nov 22 06:46:26 1997 Paul Eggert + + * c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c: + Don't include unless there's no . + +Fri Nov 21 06:46:50 1997 Richard Kenner + + * configure.in (i[3456]86-*-freebsd{,elf}*): Delete i386/xm-freebsd.h. + * xm-freebsd.h, i386/xm-freebsd.h: Deleted. + + * i386/xm-cygwin32.h (HAVE_RUSAGE, HAVE_FILE_H): Deleted. + * i386/xm-mingw32.h, rs6000/xm-cygwin32.h: Likewise. + + * xm-std32.h: New file, so far unused. + +Fri Nov 21 05:50:54 1997 Andreas Schwab + + * m68k.c (legitimize_pic_address): Make sure pic register marked used. + + * dwarf2out.c (output_call_frame_info): Call app_enable and + app_disable if flag_debug_asm, not if flag_verbose_asm. + +Thu Nov 20 16:37:36 1997 Richard Kenner + + * expr.c (expand_builtin_apply): Fix typo in last change. + + * expr.c (expand_assignment): If assigning to readonly field, + mark rtx as unchanging. + + * configure.in: Add checks for functions putenv, popen, and vprintf. + (i[3456]86-*-netbsd*): No longer need i386/xm-netbsd.h. + (i860-alliant-*): No longer need i860/xm-fx2800.h. + (m68k-ncr-sysv*): Use xm-svr3.h instead of m68k/xm-tower.h. + (m68k-sun-sunos*): No longer need m68k/xm-sun3.h. + (m68k-*-netbsd*): No longer need m68k/xm-netbsd.h. + (mips-dec-netbsd*): No longer need mips/xm-netbsd.h. + (ns32k-pc532-netbsd*): No longer need ns32k/xm-netbsd.h. + (sparc-*-netbsd*): No longer need sparc/xm-netbsd.h. + (vax-*-netbsd*): No longer need config/xm-netbsd.h. + * arm/xm-netbsd.h: No longer include xm-netbsd.h. + * xm-linux.h (HAVE_VPRINTF, HAVE_POPEN, HAVE_PUTENV): Deleted. + * xm-mips.h (HAVE_VPRINTF, HAVE_PUTENV): Deleted. + * i386/xm-osf.h, xm-arm.h, xm-alpha.h: Likewise. + * xm-sparc.h (HAVE_POPEN): Deleted. + * xm-sh.h (HAVE_VPRINTF): Deleted. + * mips/xm-iris4.h, mips/xm-iris5.h, xm-m88k.h: Likewise. + * m68k/xm-crds.h, m68k/xm-atari.h, m68k/xm-amix.h: Likewise. + * xm-svr3.h, xm-svr4.h, i386/xm-mingw32.h: Likewise. + * i386/xm-os2.h (HAVE_PUTENV): Deleted. + * i386/xm-dos.h, i386/xm-aix.h: Likewise. + * arm/xm-netbsd.h (HAVE_VPRINTF, HAVE_STRERROR): No longer + need undefine. + * xm-netbsd.h, i386/xm-netbsd.h, m68k/xm-netbsd.h: Deleted. + * mips/xm-netbsd.h, ns32k/xm-netbsd.h, sparc/xm-netbsd.h: Likewise. + * i860/xm-fx2800.h, m68k/xm-sun3.h, m68k/xm-tower.h: Likewise. + +Thu Nov 20 16:04:24 1997 Richard Earnshaw + + * explow.c (plus_constant_wide, case MEM): If about to call + force_const_mem, generate the rtl in a saveable obstack. + + * arm.md (movhi): Pass the full MEM to storeinthi, storehi and + storehi_bigend. + (storeinthi, storehi, storehi_bigend): Be more conservative about + when not to force a PLUS or MINUS into a REG. Use change_address + to create new MEMs. + +Wed Nov 19 15:16:04 1997 Ulrich Drepper + + * c-common.c (print_char_table): Add a and A to float formats. + (scan_char_table): Likewise. + (check_format_info): Recognize `a' as allocate flag only if used + in correct context. + +Wed Nov 19 12:56:54 1997 Andreas Schwab + + * configure.in: Fix check for . + +Tue Nov 18 19:27:01 1997 J"orn Rennecke + + * sh.md (attribute "type"): Add nil. + (movsi_ie): y/y alternative is type nil. + (movsf_ie): Replace ry/yr/X alternative by r/y/X , y/r/X and y/y/X. + (movsf_ie+1): Delete. + +Tue Nov 18 18:38:41 1997 Paul Eggert + + * cccp.c (warn_undef): Now static. + (eval_if_expression): Don't warn about undefined preprocessor symbols + in system headers. + * cexp.y (parse_c_expression): + Now takes new arg specifying whether to warn + about undefined preprocessor symbols. + (warn_undef): Now local and static; independent of warn_undef in cccp.c + (yylex): `register' -> `register int', needed for C9X. + + The following changes are only if TEST_EXP_READER is defined: + (expression_signedp): New var. + (start): Set expression_signedp to signedness of expression. + (print_unsigned_host_wide_int): New function. + (main): Use it to print value of expression, instead of hoping that + `long' is long enough. Print "u" after unsigned values. + +Tue Nov 18 18:33:30 1997 Jim Wilson + + * mips.c (save_restore_insns): If gp_offset or fp_offset are + large_int, emit two insns instead of one splitable insn. + * dwarf2out.c (dwarf2out_frame_debug): When set cfa_store_offset + from cfa_temp_value, use cfa_offset. Add assert checking that + cfa_reg is SP. + +Tue Nov 18 09:11:58 1997 Richard Kenner + + * fold-const.c (div_and_round_double): Return overflow for + divide-by-zero instead of aborting. + + * tree.c (substitute_in_expr, case TREE_LIST): Fix two typos. + +Tue Nov 18 05:03:52 1997 Jeffrey A Law + + * arm.c (output_move_double): Allocate 3 entries in otherops array. + +Tue Nov 18 02:41:01 1997 Paul Eggert + + * cccp.c (quote_string_for_make): New function. + (deps_output): Use it to fix bug with file name quoting in -M output. + +Mon Nov 17 13:28:33 1997 Philip Blundell + + * arm/lib1funcs.asm (__div0): Provide GNU/Linux implementation. + * arm/t-linux (LIB1ASMFUNCS): Use it. + +Mon Nov 17 09:13:59 1997 Andreas Schwab + + * function.c (purge_addressof_1): Make copy when substituting argument + of ADDRESSOF. + (fixup_var_refs_1): Likewise. + + * m68k.c: Include tree.h. + +Mon Nov 17 09:01:05 1997 Richard Kenner + + * getpwd.c (getpwd, [VMS]): Add extra arg of 0 to getcwd call. + + * alpha/vms.h ({OPTIMIZATION,OVERRIDE}_OPTIONS): Delete, for now. + * alpha/xm-vms.h (DIR_SEPARATOR, PATH_SEPARATOR): Delete. + +Mon Nov 17 08:52:45 1997 Richard Earnshaw + + * function.c (fixup_stack_1): Also fix-up refs via ARG_POINTER_REGNUM. + + * configure.in (arm-*-netbsd*): Doesn't need collect2. + +Mon Nov 17 08:50:01 1997 Stephen L Moshier + + * i386/isc.h (DWARF2_UNWIND_INFO): Define as 0. + +Mon Nov 17 08:42:28 1997 Michael P. Hayes + + * flow.c (propagate_block): Look for pre-inc/dec within PARALLEL. + +Mon Nov 17 03:14:46 1997 Paul Eggert + + * cpplib.c (file_size_and_mode): Remove. + (finclude): Don't assume long and off_t are same size or that + mode_t fits in int. + * cccp.c: (main, finclude, check_precompiled): Don't assume size_t + and off_t are same size. + * gcov.c (read_files): Don't assume off_t and unsigned are same size. + +Sun Nov 16 18:56:40 1997 Scott Christley + + * objc/objc-act.c (objc_demangle): New function. + (objc_printable_name): New function. + (init_objc): Change default function. + + * expr.c (expand_builtin_apply): Prefer nonlocal over block. + +Sun Nov 16 18:10:13 1997 Fila Kolodny + + * i370.c (i370_function_prolog): New function from i370.h. + * i370.h (FUNCTION_PROLOG): Just call i370_function_prolog. + +Sun Nov 16 08:40:35 1997 Bruno Haible + + * calls.c (expand_call, store_one_arg): Don't pass QImode arguments + to emit_library_call. + * expr.c (emit_push_insn, expand_assignment, store_expr): Likewise. + (expand_expr, expand_builtin): Likewise. + * function.c (put_var_into_stack, assign_parms): Likewise. + * alpha.c (alpha_builtin_saveregs): Likewise. + * clipper.c (clipper_builtin_saveregs): Likewise. + * m88k.c (m88k_builtin_saveregs): Likewise. + * pa.c (hppa_builtin_saveregs): Likewise. + * sparc.c (sparc_builtin_saveregs): Likewise. + +Sun Nov 16 07:39:08 1997 Paul Eggert + + * real.h (REAL_VALUES_IDENTICAL): New macro. + * expr.c (is_zeros_p): Don't consider -0.0 to be all zeros. + * fold-const.c (operand_equal_p): Don't consider -0.0 identical to 0.0. + * tree.c (simple_cst_equal): Likewise. + * varasm.c (immed_real_const_1): Use new REAL_VALUES_IDENTICAL macro. + +Sun Nov 16 07:29:12 1997 Richard Kenner + + * acconfig.h (NEED_DECLARATION_{,R}INDEX): New cases. + * configure.in: See if need declarations for index and rindex. + * c-typeck.c, collect2.c, cpplib.c, dwarfout.c, gcov.c, protoize.c: + Include stdlib.h, string.h, and strings.h, if they exist. + Only declare index and rindex if needed. + * collect2.c: Only declare free if needed. + + * regclass.c (record_address_regs): Refine choice of index and base + when have sum of two regs, one of which is a hard reg. + +Sun Nov 16 07:07:45 1997 Robert Lipe (robertl@dgii.com) + + * i386/sco5.h (ASM_OUTPUT_ALIGNED_BSS): Define as in sysv4 and linux + (HAVE_ATEXIT): No longer define. This confused ELF destructors. + (DBX_DEBUGGING_INFO): Define. + +Sat Nov 15 09:55:11 1997 Richard Earnshaw (rearnsha@arm.com) + + * arm.h (GO_IF_LEGITIMATE_ADDRESS): Don't accept MINUS (until reload + knows what to do with it). + +Thu Nov 13 11:07:41 1997 Michael Meissner + + * rs6000.c (num_insns_constant): Use REAL_VALUE_FROM_CONST_DOUBLE to + pick apart floating point values, instead of using CONST_DOUBLE_LOW + and CONST_DOUBLE_HIGH. + + * rs6000.md (define_splits for DF constants): Use the appropriate + REAL_VALUE_* interface to pick apart DF floating point constants in + a machine independent fashion. + +Thu Nov 13 07:30:53 1997 Richard Earnshaw (rearnsha@arm.com) + + * arm/netbsd.h (LINK_SPEC): Redefine -- pass -X. + + * arm.md (movsicc_insn): Add extra reload alternatives for better + register tying. + (movsfcc_hard_insn, movsfcc_soft_insn, movdfcc_insn): Likewise. + +Mon Nov 10 19:32:14 1997 Doug Evans + + * sparc.md (mov[sdt]f_const_insn): Fix condition to match what + instruction can handle. + +Mon Nov 10 03:02:19 1997 Jason Merrill + + * stmt.c (expand_decl_cleanup_no_eh): New fn. + + * except.c (expand_leftover_cleanups): do_pending_stack_adjust. + +Sun Nov 9 14:34:47 1997 David Edelsohn + + * rs6000.md (lshrdi3_power): Delete '&' from first alternative and + swap instruction order. + +Sun Nov 9 09:51:08 1997 Michael P. Hayes + + * machmode.def (QCmode, HCmode): New modes. + +Sun Nov 9 09:24:21 1997 J"orn Rennecke + + * combine.c (sets_function_arg_p): New function. + (combinable_i3pat): Check if combining with any but the first + argument register setting insn for a function call. + + * a29k.h (ELIGIBLE_FOR_EPILOGUE_DELAY): Avoid sheduling load from + stack slot. + +Sun Nov 9 09:17:53 1997 Richard Earnshaw (rearnsha@arm.com) + + * loop.c (strength_reduce): If initial value of BIV is equivalent to + a constant, record that as initial value. + (check_dbra_loop): Don't reverse loop if initial value isn't CONST_INT. + +Sun Nov 9 09:12:41 1997 Tristan Gingold + + * expr.c (emit_push_insn): Avoid infinite recursion + when -fcheck-memory-usage. + +Sun Nov 9 08:03:42 1997 Richard Kenner + + * cse.c (simplify_binary_operation): Fix error in last change. + +Sun Nov 9 07:56:31 1997 Pat Rankin + + * vmsconfig.com [version.opt]: Parse version string more robustly. + [@variable@]: Discard configure tokens when using Makefile.in. + [libgcc2-cxx.list]: Generate this new file for CXX_LIB2FUNCS. + [cp/input.c]: Suppress it as workaround to avoid linker warning. + [objc-parse.y]: Now lives in the objc subdirectory. + * make-cc1.com [objc-parse.{c,y}]: Ditto. + * make-cccp.com [prefix.c]: Compile additional source file. + + * cccp.c (VMS_freopen, VMS_fopen, VMS_open, VMS_fstat): Call + corresponding library routine specified via its ordinary name + rather than with a decc$ prefix. (Reverses Oct 19 change.) + + * cccp.c, cexp.y [HOST_WIDE_INT]: Manually splice long lines + of avoid backslash+newline continuation on #if directives. + +Sun Nov 9 01:54:54 1997 Jeffrey A Law (law@cygnus.com) + + * local-alloc.c (block_alloc): Don't lose if two SCRATCH expressions + are shared. + +Sat Nov 8 23:01:37 1997 Michael P. Hayes + + * cse.c (simplify_binary_operation): Don't simplify divide by zero + for targets that don't support a representation of INFINITY. + +Sat Nov 8 22:37:29 1997 Richard Earnshaw + + * Makefile.in (cse.o): Depend on expr.h. + * cse.c: Include expr.h. + (fold_rtx, case MEM): For ADDRESSOF, create new MEM. + +Sat Nov 8 19:27:56 1997 J"orn Rennecke + + * expr.c (expand_increment): When enqueing a postincrement for a MEM, + use copy_to_reg if address is not a general_operand. + +Sat Nov 8 18:39:56 1997 Jason Merrill + + * libgcc2.c (L_eh): Define __eh_pc here. + Replace __eh_type with generic pointer __eh_info. + +Sat Nov 8 07:03:47 1997 Richard Kenner + + * alpha.h (SECONDARY_OUTPUT_RELOAD_CLASS): If FLOAT_REGS, + need secondary reload for QImode and HImode even if BWX. + + * expmed.c (store_split_bit_field): Force ADDRESSOF into register. + + * cse.c (fold_rtx, case ADDRESSOF): New case (that does nothing). + + * function.c (fixup_var_refs_1, case ADDRESSSOF): Check that + new value is valid for insn. + + * stor-layout.c (get_best_mode): Refine test for field within + unit to work properly for negative positions. + + * print-rtl.c (print_inline_rtx): Save and restore sawclose and indent. + + * reload.c (find_replacement): If PLUS, MINUS, or MULT, see if + either arg contains a replacement. + +Fri Nov 7 10:22:24 1997 Jason Merrill + + * frame.c (add_fdes, count_fdes): Go back to checking pc_begin for + linked once FDEs. + +Fri Nov 7 06:50:57 1997 Richard Kenner + + * alpha.h (FUNCTION_VALUE): Take into account promotion of pointers. + + * unroll.c (back_branch_in_range_p): Refine check for INSN at loop end. + +Wed Nov 5 18:17:50 1997 Paul Eggert + + * fixinc.svr4: Replace `__STDC__ - 0 == 1' + with `defined (__STRICT_ANSI__)'. + +Tue Nov 4 18:32:44 1997 Jim Wilson + + * mips.md (insv, extzv, extv): Add change_address call. + (movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern. + * mips.c (mips_expand_epilogue): Emit blockage insn before call to + save_restore_insns if no FP and GP will be restored. + + * acconfig.h (HAVE_INTTYPES_H): Undef. + * configure.in (inttypes.h): Check for conflicts between sys/types.h + and inttypes.h, and verify that intmax_t is defined. + * mips/x-iris (CC, OPT, OLDCC): Comment out. + * mips/x-iris3: Likewise. + +Tue Nov 4 17:28:31 1997 Doug Evans + + * c-lex.c (MULTIBYTE_CHARS): #undef if cross compiling. + (yylex): Record wide strings using target endianness, not host. + +Tue Nov 4 16:18:19 1997 Richard Kenner + + * Makefile.in (distdir-start): Add dependency on $(srcdir)/config.in. + +Tue Nov 4 06:14:30 1997 Paul Eggert + + * c-lex.c (yylex): Don't warn about constants like + 9223372036854775807 and 18446744073709551615U on an L32LL64 host + unless pedantic. + +Mon Nov 3 18:42:44 1997 Jim Wilson + + * i386.c (load_pic_register): Call prologue_get_pc_and_set_got. + * i386.md (prologue_{set_got,get_pc}): Add UNSPEC_VOLATILE to pattern. + (prologue_get_pc_and_set_got): New pattern. + +Mon Nov 3 13:42:21 1997 Paul Eggert + + * cccp.c, cpplib.c (compare_defs): Don't complain about arg name + respellings unless pedantic. + * cpplib.c (compare_defs): Accept pfile as new arg. + All callers changed. + +Fri Oct 31 07:10:09 1997 Jeffrey A Law (law@cygnus.com) + + * global.c (global_alloc): Free the conflict matrix after + reload has finished. + +Thu Oct 30 17:30:42 1997 Doug Evans + + * configure.in (sparc-*-elf*): Use sparc/elf.h, sparc/t-elf. + Set extra_parts. + (sparc*-*-*): Recognize --with-cpu=v9. + * sparc/elf.h: New file. + * sparc/t-elf: New file. + +Thu Oct 30 16:36:17 1997 Richard Kenner + + * stmt.c (expand_asm_operand): If error in matching constraint, + don't emit asm. + +Thu Oct 30 12:21:06 1997 J"orn Rennecke + + * va-sh.h (__va_arg_sh1): Define. + (va_arg): Use it. + SH3E doesn't use any integer registers for subsequent arguments + once a non-float value was passed in the stack. + * sh.c (machine_dependent_reorg): If optimizing, put explicit + alignment in front label for ADDR_DIFF_VEC. + * sh.h (PASS_IN_REG_P): Fix SH3E case. + (ADJUST_INSN_LENGTH): If not optimizing, add two extra bytes length. + +Tue Oct 28 21:09:25 1997 Jim Wilson + + * m68k.md (btst patterns): Add 5200 support. + +1997-10-28 Brendan Kehoe + + * global.c (global_alloc): Use xmalloc instead of alloca for + CONFLICTS, since max_allocno * allocno_row_words alone can be more + than 2.5Mb sometimes. + +Tue Oct 28 15:06:44 1997 J"orn Rennecke + + * sh/elf.h (PREFERRED_DEBUGGING_TYPE): Undefine before including + svr4.h. + +Tue Oct 28 10:19:01 1997 Jason Merrill + + From Brendan: + * dwarf2out.c (output_call_frame_info): Use l1 instead of ".". + +Mon Oct 27 16:01:14 1997 Jeffrey A Law (law@cygnus.com) + + * mn10300.h (GO_IF_LEGITIMATE_ADDRESS): Disable reg+reg. + +Mon Oct 27 16:11:52 1997 J"orn Rennecke + + * sh.c (machine_dependent_reorg): When -flag_delayed_branches, + put an use_sfunc_addr before each sfunc. + * sh.md (use_sfunc_addr, dummy_jump): New insns. + (casesi): For TARGET_SH2, emit a dummy_jump after LAB. + +Mon Oct 27 11:49:43 1997 Jason Merrill + + * dwarf2.h: Remove dwarf2out prototypes. + * tree.h: And put them here. + * m68k.c, i386.c: Don't include dwarf2.h. + +Mon Oct 27 00:02:13 1997 Paul Eggert + + Remap include files with header.gcc only if user or configuration + file specifies "-remap". + + * cccp.c (remap): New var. + (main): Set it if user specifies "-remap". + (open_include_file): Remap only if `remap' is nonzero. + + * cpplib.h (struct cpp_options): New member `remap'. + * cpplib.c (cpp_options_init): Set remap to 0. + (open_include_file): Remap only if `remap' is nonzero. + (cpp_handle_options): Set remap if user specifies "-remap". + + * i386/cygwin32.h, rs6000/cygwin32.h (CPP_SPEC): Define with -remap. + +Sun Oct 26 11:41:49 1997 Jason Merrill + + * dwarf2out.c (output_call_frame_info): The CIE pointer is now a 32 + bit PC-relative offset. The exception range table pointer is now in + the CIE. + * frame.c (dwarf_cie, dwarf_fde): Rename CIE_pointer to CIE_delta. + (count_fdes, add_fdes, get_cie): Adjust. + (cie_info, extract_cie_info, __frame_state_for): Adjust eh_ptr uses. + + From H.J. Lu: + * frame.c (count_fdes, add_fdes): Skip linked once FDE entries. + +Sat Oct 25 20:29:39 1997 Alexandre Oliva + + * Makefile.in (float.h-nat): If float.h is to be empty, ensure it is. + +Sat Oct 25 20:16:52 1997 Kaveh R. Ghazi + + * prefix.c: Use stdarg.h only ifdef __STDC__. Otherwise, + use varargs.h. Wrap header with <>, not "". + +Sat Oct 25 20:10:57 1997 Robert Lipe (robertl@dgii.com) + + * i386/sco5.h (EH_FRAME_SECTION_ASM_OP{,_ELF,_COFF}): Define. + (DWARF2_UNWIND_INFO): Likewise. + (EXTRA_SECTIONS): Add in_eh. + +Sat Oct 25 12:20:58 1997 Jeffrey A Law (law@cygnus.com) + + * mn10300.h (TARGET_SWITCHES): Add -mmult-bug and -mno-mult-bug. + (TARGET_MULT_BUG): Define. + (TARGET_DEFAULT): Default to TARGET_MULT_BUG. + * mn10300.md (mulsi3): Handle TARGET_MULT_BUG. + +Fri Oct 24 15:43:57 1997 Michael Meissner + + * rs6000.c (toplevel): Move include stdio.h before config.h. + + (Patch from H.J. Lu, Aug 27, 1997) + * rs6000/linux.h (DEFAULT_VTABLE_THUNKS): New; defined as 1. + + (Patch from Jeff Law, Oct 22, 1997) + * rs6000.c (struct machine_function): Add pic_offset_table_rtx. + (rs6000_{save,restore}_machine_status): Save/restore it. + + * rs6000.md (movsi_got_internal_mem): New pattern to work around + case where GOT value did not get a register. + (movsi_got_internal_mem splitter): Split above pattern. + + (Patch from Geoffrey Keating, Oct 21, 1997) + * rs6000.c (rs6000_stack_info): Avoid creating a stack + frame under System V ABI if we only need to save the LR. + + (Patch from Joel Sherrill, Sep 1, 1997) + * rs6000/sysv4.h (SUBTARGET_SWITCHES): Add new macro + EXTRA_SUBTARGET_SWITCHES, which defaults to nothing. + + (Patch from Geoffrey Keating, Oct 20, 1997) + * rs6000/t-ppccomm (CRTSTUFF_T_CFLAGS{,_S}): Add -msdata=none + switch. + +Fri Oct 24 15:25:50 1997 Doug Evans + + * sparc.h (ASM_SPEC): Delete. + +Fri Oct 24 13:16:24 1997 Jeffrey A Law (law@cygnus.com) + + * mn10200.c (indirect_memory_operand): Delete unused function. + * mn10200.h (EXTRA_CONSTRAINT): Handle 'R'. + * mn10200.md (bset, bclr insns): Handle output in a reg too. + + * mn10300.c (symbolic_operand, legitimize_address): New functions. + * mn10300.h (LEGITIMIZE_ADDRESS): Call legitimize_address. + (GO_IF_LEGITIMATE_ADDRESS): Don't allow base + symbolic. + +Thu Oct 23 08:03:59 1997 J"orn Rennecke + + * dbxout.c (dbxout_start_new_source_file): Use output_quoted_string + for FILENAME. + +Tue Oct 21 16:18:13 1997 Paul Eggert + + * winnt/win-nt.h (CPP_SPEC): Remove reference to obsolete + option -lang-c-c++-comments. + +Tue Oct 21 10:00:20 1997 Jeffrey A Law (law@cygnus.com) + + * mn10300.md (movqi, movhi): Avoid using address registers as + destinations unless absolutely necessary. + + * mn10200.c (expand_prologue): Fix typo. + + * mn10200.h (GO_IF_LEGITIMATE_ADDRESS): Do not allow indexed addresses. + * mn10200.md (neghi2): Provide an alternative which works if + the input and output register are the same. + + * mn10300.c (print_operand): Handle 'S'. + * mn10300.md (ashlsi3, lshrsi3, ashrsi3): Use %S for + shift amount in last alternative + + * mn10300.c (expand_epilogue): Rework to handle register restores + in "ret" and "retf" instructions correctly. + +Tue Oct 21 07:35:19 1997 Richard Earnshaw (rearnsha@arm.com) + + * arm.md (insv): Avoid writing result into a paradoxical subreg. + +Tue Oct 21 07:12:28 1997 J"orn Rennecke + + * sh/elf.h (PREFERRED_DEBUGGING_TYPE): Don't redefine. + +Mon Oct 20 12:04:04 1997 Nick Clifton + + * v850.h (CPP_SPEC): Define __v850__. + (CPP_PREDEFINES): Do not define __v850__. + + * xm-v850.h: Use __v850 rather than __v850__ to identify v850 port. + Mon Oct 20 17:29:55 1997 Doug Evans - * sparc/sparc.h (SPARC_V9,SPARC_ARCH64): Delete. + * sparc.h (SPARC_V9,SPARC_ARCH64): Delete. (DEFAULT_ARCH32_P): New macro. (TARGET_ARCH{32,64}): Allow compile time or runtime selection. (enum cmodel): Declare. @@ -66,10 +1101,10 @@ Mon Oct 20 17:29:55 1997 Doug Evans * sparc/sysv4.h (CPP_PREDEFINES): Take out stuff handled by CPP_SPEC. (FUNCTION_BLOCK_PROFILER): Delete TARGET_EMBMEDANY support. (BLOCK_PROFILER): Likewise. - * sparc/sparc.c (sparc_cmodel_string,sparc_cmodel): New globals. + * sparc.c (sparc_cmodel_string,sparc_cmodel): New globals. (sparc_override_options): Handle code model selection. (sparc_init_expanders): Renamed from sparc64_init_expanders. - * sparc/sparc.md: TARGET_ renamed to TARGET_CM_.... + * sparc.md: TARGET_ renamed to TARGET_CM_.... TARGET_MEDANY renamed to TARGET_CM_EMBMEDANY. (sethi_di_embmedany_{data,text}): Renamed from sethi_di_medany_.... (sethi_di_fullany): Delete. @@ -476,7 +1511,7 @@ Wed Oct 15 21:34:45 1997 David Edelsohn * rs6000.md (udivsi3, divsi3): Split into MQ and non-MQ cases for PPC601. - (umulsidi3,umulsi3_highpart): Ditto. + (umulsidi3,umulsi3_highpart): Likewise. (smulsi3_highpart_no_mq): Add !TARGET_POWER. Wed Oct 15 18:45:31 1997 Doug Evans @@ -485,8 +1520,7 @@ Wed Oct 15 18:45:31 1997 Doug Evans Wed Oct 15 17:17:33 1997 Jeffrey A Law (law@cygnus.com) - * pa.c (following_call): Fail if the CALL_INSN is an indirect - call. + * pa.c (following_call): Fail if the CALL_INSN is an indirect call. Wed Oct 1 17:52:09 1997 Douglas Rupp @@ -517,14 +1551,12 @@ Fri Sep 26 14:06:45 1997 Mike Stump Wed Sep 24 11:31:24 1997 Mike Stump * stor-layout.c (layout_record): Ignore STRUCTURE_SIZE_BOUNDARY if - we are packing a structure. This allows a structure with only - bytes to be aligned on a byte boundary and have no padding on a - m68k. + packing structure. This allows a structure with only bytes to be + aligned on a byte boundary and have no padding on a m68k. Tue Sep 30 11:00:00 1997 Brendan Kehoe - * except.c (find_exception_handler_labels): Free LABELS when we're - done. + * except.c (find_exception_handler_labels): Free LABELS when done. Tue Sep 30 10:47:33 1997 Paul Eggert @@ -770,7 +1802,7 @@ Mon Sep 22 14:04:18 1997 Richard Kenner * rtlanal.c (computed_jump_p): Fix typo in last change. - * clipper.md (movstrsi): Use change_addres instead of making new MEM. + * clipper.md (movstrsi): Use change_address instead of making new MEM. * dsp16xx.md (movstrqi): Likewise. * i370.md (movstrsi): Likewise. * i860.md (movstrsi): Likewise. @@ -873,9 +1905,7 @@ Fri Sep 19 19:43:09 1997 Jeffrey A Law (law@cygnus.com) * loop.c (strength_reduce): Fix typo. * m68k/xm-mot3300.h (alloca): Properly declare if __STDC__. - * mips.h (alloca): Likewise. - * rs6000/xm-rs6000.h (alloca): Likewise. - * rs6000/xm-sysv4.h: Likewise. + * mips.h, xm-rs6000.h, rs6000/xm-sysv4.h: Likewise. Fri Sep 19 20:10:30 1997 Doug Evans @@ -1053,8 +2083,7 @@ Wed Sep 17 18:23:09 1997 Jeffrey A Law (law@cygnus.com) Wed Sep 17 14:17:26 1997 Paul Eggert * configure.in (AC_CHECK_HEADERS): Add inttypes.h, limits.h. - ({sparc,i[3456]86,powerpcle}-*-solaris2*): - Use fixinc.math for fixincludes. + ({sparc,i[3456]86,powerpcle}-*-solaris2*): Use fixinc.math. * fixinc.math (PWDCMD, ORIGDIR, LINKS): Remove. Remove duplicate test for missing $1. @@ -1096,8 +2125,8 @@ Wed Sep 17 15:04:19 1997 Doug Evans * sparc/sysv4.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Delete, use sparc.h's copies. - * sparc/sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Print - ascii form as well. + * sparc.h (ASM_OUTPUT_{FLOAT,DOUBLE,LONG_DOUBLE}): Print ascii form + as well. Wed Sep 17 14:08:20 1997 Nick Burrett @@ -1125,7 +2154,7 @@ Tue Sep 16 10:02:02 1997 Jason Merrill * integrate.c (expand_inline_function): Move expand_start_bindings after expanding the arguments. - * i386.c (ix86_prologue): Pass the SYMBOL_REF to + * i386.c (ix86_prologue): Pass SYMBOL_REF to gen_prologue_{get_pc,set_got}. * i386.md (prologue_set_got, prologue_get_pc): Adjust. @@ -1141,9 +2170,9 @@ Tue Sep 16 07:33:15 1997 Richard Kenner Tue Sep 16 00:26:52 1997 Jeffrey A Law (law@cygnus.com) - * cse.c (simplify_relational_operation): If MODE specifies a - mode wider than HOST_WIDE_INT, then the high word of a CONST_INT - is derived from the sign bit of the low word. + * cse.c (simplify_relational_operation): If MODE specifies mode wider + than HOST_WIDE_INT, high word of CONST_INT is derived from sign bit + of low word. Tue Sep 16 00:13:20 1997 Nick Clifton @@ -1655,7 +2684,7 @@ Fri Sep 5 10:08:44 1997 Jeffrey A Law (law@cygnus.com) Fri Sep 5 03:50:15 1997 David Edelsohn - * rs6000/rs6000.md (fma patterns): Extend previous -mno-fused-madd + * rs6000.md (fma patterns): Extend previous -mno-fused-madd patch to DFmode patterns inadvertently omitted. Thu Sep 4 20:06:02 1997 Christian Kuehnke @@ -1724,10 +2753,7 @@ Tue Sep 2 18:41:55 1997 Jeffrey A Law (law@cygnus.com) * configure.in: Check for sys_siglist declaration. * Makefile.in (libgcc2.a): Add missing "else true" clause. - (stage1-start): Likewise. - (stage2-start): Likewise. - (stage3-start): Likewise. - (stage4-start): Likewise. + (stage{1,2,3,4}-start): Likewise. * mn10200.h (INITIALIZE_TRAMPOLINE): PC relative instructions are relative to the next instruction, not the current instruction. @@ -3490,7 +4516,7 @@ Tue Jul 1 18:30:26 1997 Jim Wilson Tue Jul 1 11:16:41 1997 Robert Lipe - * fixinc.sco: Restore pwd aftercopy. + * fixinc.sco: Restore pwd after copy. Convert declaration of abs in math.h to prototype. Fix static functions in sys/stat.h for C++. @@ -3613,7 +4639,7 @@ Fri Jun 27 13:23:38 1997 Andrew Cagney Fri Jun 27 10:47:09 1997 Scott Christley - * Makefile.in (DLLTOOL): Define.e + * Makefile.in (DLLTOOL): Define. * objc/Make-lang.in (libobjc_entry.o, libobjc_s.a, libobjc.dll): New targets. (objc.install-normal): Install Objective-C runtime as a DLL. @@ -3945,8 +4971,7 @@ Tue Jun 10 17:40:15 1997 Jim Wilson Tue Jun 10 17:14:58 1997 Michael Meissner - * rs6000/rs6000.c (rs6000_override_options): If -mcpu=403, set - -mstrict-align as well. + * rs6000.c (rs6000_override_options): If -mcpu=403, set -mstrict-align. * rs6000/t-ppc{,gas} (MULTILIB_EXTRA_OPTS): Build libraries with -mstrict-align. @@ -4208,26 +5233,21 @@ Mon Jun 2 16:53:53 1997 Michael Meissner (struct sometimes): Make fields int sized, not short. (schedule_insns): Don't set sched_reg_n_deaths, nobody uses it. - * regclass.c (allocate_reg_info): Allocate the space for - reg_renumber, but don't set reg_renumber unless new argument - RENUMBER_P is set. If this is the first call for the function and - we need to grow space, use free/xmalloc instead of realloc since we - will be initializing the whole array. If number of registers is < - 0, just free up the space. + * regclass.c (allocate_reg_info): Allocate space for reg_renumber, + but don't set unless new argument RENUMBER_P is set. If this is first + call for function and we need to grow space, use free/xmalloc instead + of realloc since we will be initializing the whole array. If number + of registers is < 0, just free up space. (reg_scan): Update allocate_reg_info call. - * regs.h (allocate_reg_info): Change prototype. - - * flow.c (allocate_for_life_analysis): Update allocate_reg_info - call. - + * flow.c (allocate_for_life_analysis): Update allocate_reg_info call. * local-alloc.c (local_alloc): Call allocate_reg_info to allocate and initialize the reg_renumber array. - * stupid.c (stupid_life_analysis): Ditto. + * stupid.c (stupid_life_analysis): Likewise. Mon Jun 2 14:50:06 1997 Dave Miller - * sparc/sparc.md (v9 eq/ne cond move patterns): Add early clobber + * sparc.md (v9 eq/ne cond move patterns): Add early clobber constraint to destination. Fri May 30 11:00:44 1997 Michael Meissner @@ -4237,10 +5257,10 @@ Fri May 30 11:00:44 1997 Michael Meissner globally visiable. (reg_n_info): Pointer to the register information array. (reg_n_{refs,sets,deaths,calls_crossed}): Delete variables. - (reg_changes_size): Ditto. + (reg_changes_size): Likewise. (REG_N_{REFS,SETS,DEATHS,CALLS_CROSSED}): New macros to reference reg_n_info. - (REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Ditto. + (REG_{CHANGES_SIZE,{FIRST,LAST,LAST_NOTE}_UID}): Likewise. (allocate_reg_info): Add declaration. * basic-block.h (reg_basic_block): Delete. @@ -4248,13 +5268,12 @@ Fri May 30 11:00:44 1997 Michael Meissner * caller-save.c: Change all references to the above arrays to use the corresponding macro to access the reg_n_info array. - * combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Ditto. - * loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Ditto. + * combine.c, cse.c, flow.c, global.c, jump.c, local-alloc.c: Likewise. + * loop.c, regclass.c, reload1.c, sched.c, stupid.c, unroll.c: Likewise. * regclass.c (allocate_reg_info): New function to allocate the reg_info array and initialize the appropriate fields. (reg_scan): Call it. - * flow.c (allocate_for_life_analysis): Call allocate_reg_info to do the actual allocation. @@ -4312,20 +5331,19 @@ Mon May 19 21:01:53 1997 Jim Wilson * m68k.c (output_move_qimode): Add coldfire support. * m68k.h (PUSH_ROUNDING): Add coldfire support. - * m68k.md (scc0_di, scc_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu, + * m68k.md (scc{,0}_di, seq, sne, sgt, sgtu, slt, sltu, sge, sgeu, sle, sleu): Add coldfire support. Mon May 19 17:53:34 1997 Mike Meissner - * rs6000/rs6000.c: (rs6000_pic_func_labelno): New variable to hold - the pic label number for the function's LCL label. + * rs6000.c: (rs6000_pic_func_labelno): New variable. (rs6000_output_load_toc_table): Use it. (output_prolog): Store current value. Sun May 18 16:32:08 1997 Michael Meissner - * config/dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use the macros - ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output the line + * dbxcoff.h (ASM_OUTPUT_SOURCE_LINE): Use macros + ASM_{GENERATE,OUTPUT}_INTERNAL_LABEL to create/output line number label. Sun May 18 13:55:12 1997 John Vickers (john@rhizik.demon.co.uk) @@ -4431,8 +5449,8 @@ Thu May 15 17:19:50 1997 Mike Stump perform any actions at the start of an expcetion handler that hasn't already been done, use gen_exception_receiver to emit it. (expand_leftover_cleanups): Likewise. - * alpha/alpha.md (exception_receiver): Use it. - * pa/pa.h (exception_receiver): Use it. + * alpha.md (exception_receiver): Use it. + * pa.h (exception_receiver): Use it. Thu May 15 08:36:59 1997 Jeffrey A Law (law@cygnus.com) @@ -4469,9 +5487,8 @@ Tue May 13 14:47:40 1997 Richard Earnshaw (rearnsha@cambridge.arm.com) Mon May 12 20:42:20 1997 Mike Stump - * except.c (expand_start_all_catch): If the machine needs a - nonlocal_goto_receiver, add one at the start of the exception - handler. + * except.c (expand_start_all_catch): If need nonlocal_goto_receiver, + add one at the start of exception handler. (expand_leftover_cleanups): Likewise. Mon May 12 17:36:28 1997 Jeffrey A Law (law@cygnus.com) @@ -4577,9 +5594,8 @@ Thu May 8 13:20:20 1997 Chris Torek Wed May 7 15:43:57 1997 Mike Stump - * except.c (start_dynamic_handler): Fix so that we can use - __builtin_setjmp, and default to using __builtin_setjmp instead of - setjmp. + * except.c (start_dynamic_handler): Fix so we can use __builtin_setjmp, + and default to using __builtin_setjmp instead of setjmp. * expr.c (expand_builtin_setjmp): New routine, split out from existing inline code from expand_builtin. (expand_builtin): Split out code into expand_builtin_setjmp. @@ -4635,10 +5651,10 @@ Fri May 2 17:00:33 1997 Jason Merrill Fri May 2 15:30:16 1997 Doug Evans - * m32r/m32r.h (LIT_NAME_P): New macro. + * m32r.h (LIT_NAME_P): New macro. (SMALL_NAME_P): Use it. (ASM_OUTPUT_ALIGNED_COMMON): Don't output to scommon if -msdata=none. - * m32r/m32r.c (addr24_operand): Handle literals. + * m32r.c (addr24_operand): Handle literals. (m32r_output_function_prologue): Use IMMEDIATE_PREFIX. (m32r_output_function_epilogue): Likewise. Use shorter add insn if able. @@ -4748,7 +5764,6 @@ Tue Apr 29 12:54:14 1997 Mike Stump expand_eh_region_start_tree. (expand_dcc_cleanup): Likewise. (expand_dhc_cleanup): Likewise. - (expand_start_case): Switches introduce conditional contexts. (expand_start_case_dummy): Likewise. (expand_start_case_dummy): Likewise. @@ -4765,12 +5780,11 @@ Tue Apr 29 11:45:09 1997 Jason Merrill Mon Apr 28 09:10:19 1997 Jeffrey A Law (law@cygnus.com) - * h8300.c (push_order, pop_order): Add missing initializer - entries. + * h8300.c (push_order, pop_order): Add missing initializer entries. Fri Apr 25 19:39:43 1997 J"orn Rennecke - * h8300.c (output_adds_subs): check for adding 0. + * h8300.c (output_adds_subs): Check for adding 0. Fri Apr 25 14:52:31 1997 Jim Wilson @@ -4835,71 +5849,39 @@ Wed Apr 23 14:28:30 1997 Mike Stump * expr.h (sjthrow_libfunc): Add support for setjmp/longjmp based exception handling. - (sjpopnthrow_libfunc): Likewise. - (terminate_libfunc): Likewise. - (setjmp_libfunc): Likewise. - (longjmp_libfunc): Likewise. + ({sjpopnthrow,terminate,setjmp,longjmp}_libfunc): Likewise. (get_dynamic_handler_chain_libfunc): Likewise. * expr.c (expand_expr, case TRY_CATCH_EXPR): Likewise. - (expand_expr, case POPDCC_EXPR): Likewise. - (expand_expr, case POPDHC_EXPR): Likewise. + (expand_expr, case POPD{C,H}C_EXPR): Likewise. * stmt.c (mark_block_as_eh_region): Likewise. (mark_block_as_not_eh_region): Likewise. - (is_eh_region): Likewise. - (conditional_context): Likewise. - (expand_start_bindings): Likewise. - (expand_end_bindings): Likewise. - (expand_decl_cleanup): Likewise. - (expand_dcc_cleanup): Likewise. - (expand_dhc_cleanup): Likewise. + (is_eh_region, conditional_contex, expand_start_bindings): Likewise. + (expand_end_bindings, expand_{decl,dcc,dhc}_cleanup): Likewise. (expand_cleanups): Likewise. * tree.h (mark_block_as_eh_region): Likewise. - (mark_block_as_not_eh_region): Likewise. - (is_eh_region): Likewise. - (conditional_context): Likewise. - (expand_dhc_cleanup): Likewise. + (mark_block_as_not_eh_region, is_eh_region): Likewise. + conditional_context, expand_dhc_cleanup): Likewise. * except.c (exception_via_longjmp): Likewise. (protect_cleanup_actions_with_terminate): Likewise. - (current_function_dhc): Likewise. - (current_function_dcc): Likewise. - (add_partial_entry): Likewise. - (get_dynamic_handler_chain): Likewise. - (get_dynamic_cleanup_chain): Likewise. - (start_dynamic_cleanup): Likewise. - (start_dynamic_handler): Likewise. - (expand_eh_region_start_tree): Likewise. - (expand_eh_region_start): Likewise. - (expand_eh_region_end): Likewise. - (emit_throw): Likewise. - (expand_leftover_cleanups): Likewise. - (expand_start_all_catch): Likewise. - (expand_end_all_catch): Likewise. - (protect_with_terminate): Likewise. - (start_eh_unwinder): Likewise. - (end_eh_unwinder): Likewise. - (init_eh_for_function): Likewise. - (save_eh_status): Likewise. - (restore_eh_status): Likewise. - (exception_optimize): Likewise. - * optabs.c (sjthrow_libfunc): Likewise. - (sjpopnthrow_libfunc): Likewise. - (terminate_libfunc): Likewise. - (setjmp_libfunc): Likewise. - (longjmp_libfunc): Likewise. - (get_dynamic_handler_chain_libfunc): Likewise. + (current_function_d{h,c}c, add_partial_entry): Likewise. + (get_dynamic_{handler,cleanup}_chain): Likewise. + (start_dynamic_{cleanup, handler}): Likewise. + (expand_eh_region_start{,_tree}, expand_eh_region_end): Likewise. + (emit_throw, expand_leftover_cleanups): Likewise. + (expand_{start,end}_all_catch, protect_with_terminate): Likewise. + ({start,end}_eh_unwinder, init_eh_for_function): Likewise. + ({save,restore}_eh_status, exception_optimize): Likewise. + * optabs.c ({sjthrow,sjpopnthrow,terminate,setjmp}_libfunc): Likewise. + ({longjmp,get_dynamic_handler_chain}_libfunc): Likewise. (init_optabs): Likewise. * except.h: Likewise. * libgcc2.c (__default_terminate): Likewise. - (__terminate): Likewise. - (__get_dynamic_handler_chain): Likewise. - (__sjthrow): Likewise. + (__terminate, __get_dynamic_handler_chain, __sjthrow): Likewise. (__sjpopnthrow): Likewise. * toplev.c (f_options): Likewise. - * tree.def (TRY_CATCH_EXPR): Likewise. - (POPDHC_EXPR): Likewise. - (POPDCC_EXPR): Likewise. - * config/pa/pa.h: JMP_BUF_SIZE define. - * config/sparc/sparc.h: JMP_BUF_SIZE define. + * tree.def (TRY_CATCH_EXPR, POPDHC_EXPR, POPDCC_EXPR): Likewise. + * pa.h (JMP_BUF_SIZE): Define. + * sparc.h (JMP_BUF_SIZE): Define. * expr.h (cleanups_this_call): Transform uses of cleanups_this_call into uses of the cleanups managed by the block code @@ -4909,29 +5891,18 @@ Wed Apr 23 14:28:30 1997 Mike Stump target_temp_slot_level, conditional_code, last_unconditional_cleanup and cleanup_ptr to struct nesting to facilitate conditional cleanups. - * expr.c (cleanups_this_call): Likewise. - (init_expr): Likewise. - (save_expr_status): Likewise. - (restore_expr_status): Likewise. - (store_expr): Likewise. - (expand_expr): Likewise. - (defer_cleanups_to): Likewise. - (expand_cleanups_to): Likewise. - (do_jump, case TRUTH_ANDIF_EXPR): Likewise. - (do_jump, case TRUTH_ORIF_EXPR): Likewise. + * expr.c (cleanups_this_call, init_expr): Likewise. + ({save,restore}_expr_status, store_expr): Likewise. + (expand_expr, {defer,expand}_cleanups_to): Likewise. + (do_jump, case TRUTH_{AND,OR}IF_EXPR): Likewise. (do_jump, case COND_EXPR): Likewise. * stmt.c (struct nesting): Likewise. - (expand_return): Likewise. - (expand_start_bindings): Likewise. - (expand_end_bindings): Likewise. - (expand_cleanups): Likewise. - (start_cleanup_deferal): Likewise. - (end_cleanup_deferal): Likewise. + (expand_return, expand_start_bindings, expand_end_bindings): Likewise. + (expand_cleanups, {start,end}_cleanup_deferal): Likewise. * tree.h (start_cleanup_deferal): Likewise. (end_cleanup_deferal): Likewise. * calls.c (expand_call): Likewise. * function.h (struct function): Likewise. - * except.c (asynchronous_exceptions): Support -fasynchronous_exceptions. (can_throw): Likewise. @@ -4943,8 +5914,7 @@ Wed Apr 23 14:28:30 1997 Mike Stump * stmt.c (expand_start_target_temps): Add for convenience. (expand_end_target_temps): Likewise. - * except.c (jumpif_rtx): Likewise. - * except.c (jumpifnot_rtx): Likewise. + * except.c (jumpif{,not}_rtx): Likewise. * stmt.c: Remove all traces of empty_cleanup_list. @@ -4973,8 +5943,7 @@ Wed Apr 23 09:48:58 1997 Oliver Kellogg (oliver.kellogg@space.otn.dasa.de) Wed Apr 23 09:41:35 1997 Andreas Schwab - * reload.c (push_reload): Fix last argument of the call to - find_dummy_reload. + * reload.c (push_reload): Fix last arg of call to find_dummy_reload. Wed Apr 23 09:29:14 1997 Richard Kenner @@ -5162,8 +6131,7 @@ Sun Apr 13 18:43:16 1997 Ian Lance Taylor Sun Apr 13 17:24:48 1997 Doug Evans - * expr.c (move_block_from_reg): Try using an integral mov operation - first. + * expr.c (move_block_from_reg): Try using integral mov operation first. * calls.c (expand_call): When copying unaligned values into a register, zero out the register first rather than emitting a clobber. @@ -5384,13 +6352,13 @@ Sat Apr 5 20:17:43 1997 Michael Meissner Fri Apr 4 18:30:12 1997 Jim Wilson - * rs6000/rs6000.md (adddi3): Use non_short_cint_operand instead of + * rs6000.md (adddi3): Use non_short_cint_operand instead of non_add_cint_operand. Thu Apr 3 15:08:39 1997 Jeffrey A Law (law@cygnus.com) * mn10300.c (can_use_return_insn): Add size of fixed stack space - for function calls into the size of the frame. */ + for function calls into the size of the frame. (expand_prologue, expand_epilogue): Likewise. (initial_offset): Corresponding changes.. * mn10300.h (OUTGOING_REG_PARM_STACK_SPACE): No longer define. @@ -5477,7 +6445,6 @@ Fri Mar 28 17:46:13 1997 Jim Wilson (OBJS): Add profile.o. (STAGESTUFF): Add gcov. (profile.o, gcov.o, gcov): Add rules to build them. - (cpp.info, gcc.info, gcc.dvi): Add gcov.texi. (install-common): Install gcov. * combine.c (distribute_notes): Handle REG_BR_PROB and REG_EXEC_COUNT REG_NOTES. @@ -5526,9 +6493,9 @@ Thu Mar 27 16:52:52 1997 Stan Cox * i386.h (STACK_BOUNDARY): Define to always be 32. From J"orn Rennecke - * i386.md: (zero_extendhisi2+[12]): use true_regnum instead of REGNO for - operand 0. - (zero_extendqisi2+3: use reg_overlap_mentioned_p instead of REGNO + * i386.md: (zero_extendhisi2+[12]): Use true_regnum instead of + REGNO for operand 0. + (zero_extendqisi2+3): Use reg_overlap_mentioned_p instead of REGNO comparison; use true_regnum instead of REGNO for rtx generation. Wed Mar 26 12:34:21 1997 Ian Lance Taylor @@ -5591,7 +6558,7 @@ Tue Mar 25 13:20:18 1997 J.T. Conklin * m68k.md (tablejump): Use extl to explicitly sign extend index registeron TARGET_5200. - * m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h} + * m68k/{apollo68.h,coff.h,linux.h,mot3300.h,pbb.h} (ASM_RETURN_CASE_JUMP): Likewise. * m68k.md (mulsi3): Changed into define_expand. Split insn into @@ -5616,8 +6583,7 @@ Tue Mar 25 13:20:18 1997 J.T. Conklin Tue Mar 25 12:18:41 1997 Richard Kenner - * Makefile.in (GCC_PASSES): Revert previous change; use - cc1$(exeext). + * Makefile.in (GCC_PASSES): Revert previous change; use cc1$(exeext). Mon Mar 24 16:12:20 1997 Doug Evans @@ -5631,7 +6597,7 @@ Mon Mar 24 16:12:20 1997 Doug Evans Mon Mar 24 15:53:15 1997 Joel Sherrill * rs6000/rtems.h: Change to a near clone of the powerpc-eabi target. - * configure (powerpc*-*-rtems): Move before Linux configuration. + * configure (powerpc*-*-rtems): Move before GNU/Linux configuration. Mon Mar 24 14:26:37 1997 Gavin Koch @@ -6043,11 +7009,7 @@ Tue Mar 4 16:38:13 1997 Brendan Kehoe * i386.c (i386_return_pops_args): Make sure FUNDECL is non-nil before we try to use it. - * i386/isc.h (RETURN_POPS_ARGS): Likewise. - * i386/next.h (RETURN_POPS_ARGS): Likewise. - * i386/sco.h (RETURN_POPS_ARGS): Likewise. - * i386/sco5.h (RETURN_POPS_ARGS): Likewise. - * i386/scodbx.h (RETURN_POPS_ARGS): Likewise. + * i386/{isc,next,sco,sco5,scodbx}.h (RETURN_POPS_ARGS): Likewise. Mon Mar 3 20:17:54 1997 Gavin Koch @@ -6086,18 +7048,15 @@ Fri Feb 28 16:08:47 1997 Michael Meissner Thu Feb 27 17:54:42 1997 Karl Heuer - * fixinc.ptx: Fix sed expression looking for in - pwd.h. + * fixinc.ptx: Fix sed expression looking for in pwd.h. Thu Feb 27 12:11:16 1997 Dennis Glatting - * fixincludes: Remove more cases of __const__ from math.h on - NeXT. + * fixincludes: Remove more cases of __const__ from math.h on NeXT. Wed Feb 26 14:52:27 1997 Michael Meissner * reload.c (debug_reload): Remove extra argument to fprintf. - * rs6000.c (output_toc): Make fprintf calls type correct. * rs6000.h (DBX_CONTIN_LENGTH): Define as 4000 to avoid AIX @@ -6251,7 +7210,7 @@ Sat Feb 15 17:25:44 1997 Andreas Schwab - * vax/vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET. + * vax.h (FUNCTION_PROLOGUE): Adjust size by STARTING_FRAME_OFFSET. * vax/vms.h (FUNCTION_PROLOGUE): Delete. Sat Feb 15 08:48:14 1997 Douglas B. Rupp (rupp@gnat.com) @@ -6302,9 +7261,7 @@ Wed Feb 12 15:40:20 1997 Jim Wilson Tue Feb 11 15:53:51 1997 J"orn Rennecke * sh.c (calc_live_regs): Exclude RETURN_ADDRESS_POINTER_REGNUM. - - * sh.c (calc_live_regs): Need not save MACL/MACH when not live - or in leaf function. + Need not save MACL/MACH when not live or in leaf function. Mon Feb 10 14:46:32 1997 Jeffrey A Law (law@cygnus.com) @@ -6515,10 +7472,9 @@ Fri Jan 31 15:35:08 1997 Mike Stump Fri Jan 31 17:08:11 1997 Ian Lance Taylor - * local-alloc.c (update_equiv_regs): If a register which is - equivalent to some value is only used in one place, and we can't - substitute the value for the use, then move the register assignment - to just before the use. + * local-alloc.c (update_equiv_regs): If register which is equivalent + to some value is only used in one place, and we can't substitute value + for use, move register assignment to just before use. Fri Jan 31 15:57:25 1997 Stan Cox @@ -6567,7 +7523,7 @@ Wed Jan 29 15:23:59 1997 Ian Lance Taylor * combine.c (try_combine): Clear reg_n_refs if i2dest is not mentioned in newi2pat. -Tue Jan 28 16:00:23 1997 Stan Cox (coxs@dg-rtp.dg.com) +Tue Jan 28 16:00:23 1997 Stan Cox (coxs@dg-rtp.dg.com) From Robert Lipe * i386/sco5.h (SCO_DEFAULT_ASM_COFF): Remove bytecode stuff. @@ -6588,8 +7544,8 @@ Mon Jan 27 13:32:46 1997 J"orn Rennecke Mon Jan 27 08:56:03 1997 Jeffrey A Law (law@cygnus.com) - * fixincludes: Fix incorrect forward structure declaration in - sys/time.h on hpux10.20. + * fixincludes (sys/time.h): Fix incorrect forward structure + declaration on hpux10.20. Mon Jan 27 09:05:35 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -6637,9 +7593,8 @@ Tue Jan 21 16:03:35 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Tue Jan 21 12:16:15 1997 Doug Evans - * stor-layout.c (layout_record): Correct test for whether - field spans its unit of alignment in case where - field_size == type_align. + * stor-layout.c (layout_record): Correct test for whether field spans + its unit of alignment in case where field_size == type_align. Mon Jan 20 20:27:54 1997 Ian Lance Taylor @@ -6871,7 +7826,7 @@ Thu Jan 9 12:06:04 1997 Jim Wilson Thu Jan 9 12:06:04 1997 Stan Cox From Linus Torvalds and Mat Hostetter: - * i386.c (i386_sext16_if_const): Added to sign extend an HImode constant. + * i386.c (i386_sext16_if_const): Added to sign extend HImode constant. (i386_aligned_reg_p): Added to tell if an rtx is aligned. (i386_cc_probably_useless_p): Don't trust cc bits. * i386.h (TARGET_ZERO_EXTEND_WITH_AND): Don't do this for p6. @@ -6879,11 +7834,7 @@ Thu Jan 9 12:06:04 1997 Stan Cox (movhi+1): Use movz instead of mov on p6. (addsi3): Add 128 by subtracting -128. (zero_extendhisi2): Use SImode move if aligned. - (addhi3): Likewise. - (subhi3): Likewise. - (andhi3): Likewise. - (iorhi3): Likewise. - (xorhi3): Likewise. + ({add,sub,and,ior,xor}hi3): Likewise. Tue Jan 7 16:58:27 1997 Jason Merrill @@ -7006,7 +7957,7 @@ Fri Jan 3 06:55:09 1997 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Thu Jan 2 08:52:51 1997 Richard Kenner * configure: Finish restoring change of default of objc threads to - "single" for Linux. + "single" for Linux-based GNU systems. Mon Dec 30 17:03:46 1996 Jeffrey A Law (law@cygnus.com) @@ -7033,7 +7984,7 @@ Mon Dec 30 14:43:51 1996 Jim Wilson * print-tree.c (print_node): Don't try to print nonexistent TYPE_ATTRIBUTES field of a decl node. -1996-12-30 Richard Stallman +Mon Dec 30 10:30:25 1996 Richard Stallman * config.sub: Handle hiuxmpp as system type. @@ -7146,14 +8097,13 @@ Thu Dec 12 20:04:55 1996 Jason Merrill * i386.h (INCOMING_RETURN_ADDR_RTX): Define. (DWARF_FRAME_RETURN_COLUMN): Define. - * dwarf2out.c (add_AT_long_long): Renamed from add_AT_double for + * dwarf2out.c (add_AT_long_long): Renamed from add_AT_double fo clarity. (print_die): Adjust. (add_AT_float): New fn. (add_const_value_attribute): Support fp values. (size_of_die): Use blocks for long_long and fp values. - (value_format): Likewise. - (output_die): Likewise. + (value_format, output_die): Likewise. (output_loc_operands): Don't support DW_OP_const8?. Thu Dec 12 19:49:09 1996 Ian Lance Taylor @@ -7164,7 +8114,7 @@ Thu Dec 12 19:49:09 1996 Ian Lance Taylor to decide whether to call output_constant_pool. (assemble_end_function): Likewise. - * calls.c: Check SMALL_REGISTER_CLASSES at run time as well as at + * calls.c: Check SMALL_REGISTER_CLASSES at run time, not just compile time. * combine.c, cse.c, function.c, jump.c, local-alloc.c: Likewise. * loop.c, reload.c, reload1.c: Likewise. @@ -7192,8 +8142,8 @@ Thu Dec 12 15:25:39 1996 Michael Meissner moving the rest to rs6000/t-ppccomm. * configure (powerpc*-*-*): For embedded and System V - configurations, add rs6000/t-ppccomm. For Linux and Solaris, use - t-ppcos. + configurations, add rs6000/t-ppccomm. + For GNU/Linux and Solaris, use t-ppcos. * ginclude/ppc-asm.h (cr*, f*): Add new macros for register names. @@ -7330,8 +8280,7 @@ Tue Dec 10 13:47:24 1996 Joern Rennecke Mon Dec 9 18:00:38 1996 Jason Merrill - * dwarf2out.c (output_uleb128): Output the value in a human-readable - comment. + * dwarf2out.c (output_uleb128): Output value in human-readable comment. (output_sleb128): Likewise. (various): Adjust. (output_call_frame_info): Only output info if it's interesting. @@ -7603,7 +8552,7 @@ Sun Nov 24 16:37:18 1996 Dave Love * configure (objc_thread_file): Set conditionally in each case so may be overidden with `--enable-objcthreads=posix'. - Change Linux default to `single'. + Change GNU/Linux default to `single'. Fri Nov 22 17:53:15 1996 Jason Merrill @@ -7667,11 +8616,10 @@ Tue Nov 19 16:50:32 1996 Michael Meissner * configure (powerpc*-{sysv,elf,eabi{,aix,sim}}): Set extra_headers to ppc-asm.h. - (powerpc*-{linux,solaris,rtems,vxworks}): Ditto. - (powerpc*-{winnt,pe,cygwin32}): Ditto. + (powerpc*-{linux,solaris,rtems,vxworks}): Likewise. + (powerpc*-{winnt,pe,cygwin32}): Likewise. - * rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set - it here. + * rs6000/t-{ppc,ppcgas,solaris,winnt} (EXTRA_HEADERS): Don't set here. Mon Nov 18 14:51:46 1996 Jason Merrill @@ -7793,8 +8741,7 @@ Fri Nov 15 12:11:28 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) * unroll.c (iteration_info): Fix code so that it knows iteration_var is a HOST_WIDE_INT, not a long. - * fold-const.c (operand_equal_p): Do real comparison with - REAL_VALUES_EQUAL. + * fold-const.c (operand_equal_p): Do comparison with REAL_VALUES_EQUAL. (make_range): Properly decide when to get TREE_TYPE of arg0. Handle EXP being an INTEGER_CST at end. (fold_range_test): Handle return of 0 from make_range. @@ -7862,9 +8809,7 @@ Tue Nov 12 17:55:10 1996 Torbjorn Granlund (TARGET_SWITCHES): Handle -mbyte. (LOAD_EXTEND_OP): When MODE is not SImode, return ZERO_EXTEND. * alpha.md (zero_extendqidi2): Handle TARGET_BYTE_OPS. - (zero_extendhidi2): Likewise. - (zero_extendqisi2): Likewise. - (zero_extendhisi2): Likewise. + (zero_extend{hidi,qisi,hisi}2): Likewise. (extendqisi2): Use extendqidi2x if TARGET_BYTE_OPS. (extendqidi2): Likewise. (extendqidi2x): New pattern. @@ -8072,12 +9017,10 @@ Mon Nov 4 10:23:46 1996 Michael Meissner * ginclude/va-ppc.h (__va_regsave_t,va_start,va_end): Wrap macro and structures inside #ifndef __VA_PPC_H__ to allow reinclusion. - * rs6000/rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or - TARGET_TOC. - (LEGITIMATE_LO_SUM_ADDRESS_P): Ditto. - (LEGITIMIZE_ADDRESS): Ditto. + * rs6000.h (LEGITIMATE_SMALL_DATA_P): Don't allow -fpic or TARGET_TOC. + (LEGITIMATE_LO_SUM_ADDRESS_P, LEGITIMIZE_ADDRESS): Likewise. - * rs6000/rs6000.md (movsi): Don't call elf_{high,low} if -fpic. + * rs6000.md (movsi): Don't call elf_{high,low} if -fpic. * rs6000/cygwin32.h (STARTFILE_SPEC): Eliminate empty %{}. @@ -8086,8 +9029,7 @@ Sun Nov 3 15:56:35 1996 Michael Meissner * rs6000/sysv4.h (TARGET_TOC): Plain -fpic does not require a TOC. ({MINIMAL_TOC,CONST}_SECTION_ASM_OP): -fpic should be treated like -mrelocatable in these cases. - (ASM_OUTPUT_INT): Ditto. - (ASM_OUTPUT_SECTION_NAME): Ditto. + (ASM_OUTPUT_INT, ASM_OUTPUT_SECTION_NAME): Likewise. (ASM_OUTPUT_ALIGNED_LOCAL): Use sdata_section, not sbss_section. Fri Nov 1 19:57:13 1996 Jason Merrill @@ -8171,7 +9113,7 @@ Tue Oct 29 16:21:59 1996 Michael Meissner file after reading the main specs file to allow the user to override the default. (DEFAULT_WORD_SWITCH_TAKES_ARG): Add specs to list. - (option_map): Ditto. + (option_map): Likewise. Tue Oct 29 15:49:18 1996 Jason Merrill @@ -8183,8 +9125,7 @@ Tue Oct 29 15:49:18 1996 Jason Merrill Mon Oct 28 20:09:39 1996 J"orn Rennecke - * sh.md (shl_sext_ext): Don't accept simple left/right shift - variant. + * sh.md (shl_sext_ext): Don't accept simple left/right shift variant. * sh.c (EXT_SHIFT_SIGNED): New macro. (shl_sext_kind, gen_shl_sext): try left shift - sign extend - left shift - arithmetic right shift in case 2. @@ -8196,14 +9137,12 @@ Mon Oct 28 14:55:42 1996 Jim Wilson Mon Oct 28 14:26:08 1996 Ian Lance Taylor - * mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and - ZERO_EXTEND. + * mips/mips.h (RTX_COSTS): Add cases for SIGN_EXTEND and ZERO_EXTEND. * m68k/lb1sf68.asm: Change # to IMM in udivsi3 __mcf5200__. * combine.c (simplify_rtx): Add some optimizations for TRUNCATE. - (expand_compound_operation): Add some optimizations for - ZERO_EXTEND. + (expand_compound_operation): Add some optimizations for ZERO_EXTEND. Mon Oct 28 14:11:20 1996 Gavin Koch @@ -8244,7 +9183,7 @@ Mon Oct 28 09:07:42 1996 J"orn Rennecke Mon Oct 28 08:38:23 1996 J"orn Rennecke - * dsp16xx.h (ASM_OUTPUT_BYTE): adjust definition to actual type of + * dsp16xx.h (ASM_OUTPUT_BYTE): Adjust definition to actual type of VALUE, which is HOST_WIDE_INT. Mon Oct 28 07:36:07 1996 Ulrich Drepper @@ -8300,7 +9239,7 @@ Sat Oct 26 12:20:35 1996 John F. Carr Sat Oct 26 11:38:01 1996 Kamil Iskra - * collect2.c (dump_file): Call fclose() for opened files. + * collect2.c (dump_file): Call fclose for opened files. Sat Oct 26 11:29:29 1996 J"orn Rennecke (amylaar@cygnus.co.uk) @@ -8374,9 +9313,8 @@ Wed Oct 23 17:46:13 1996 Pat Rankin Wed Oct 23 14:50:04 1996 Jason Merrill - * stmt.c (expand_return): Expand cleanups. Make sure we get a - pseudo-reg and provide a target in the non-BLKmode case. Get return - type of fn properly. + * stmt.c (expand_return): Expand cleanups. Make sure we get pseudo + and provide target in non-BLKmode case. Get proper return type of fn. Wed Oct 23 14:16:06 1996 Ian Lance Taylor @@ -8391,8 +9329,8 @@ Wed Oct 23 14:08:31 1996 Jim Wilson * a29k.c (a29k_makes_calls): New global variable. (compute_regstack_size, a29k_compute_reg_names): New functions. - (output_prolog): Much code moved to two new functions. Use - a29k_makes_calls instead of makes_calls. + (output_prolog): Much code moved to two new functions. + Use a29k_makes_calls instead of makes_calls. * a29k.h (ASM_DECLARE_FUNCTION_NAME): Call a29k_compute_reg_names. * calls.c (expand_call): In target code, move PARALLEL case above @@ -8438,8 +9376,7 @@ Tue Oct 22 18:32:20 1996 Jim Wilson Tue Oct 22 18:27:06 1996 Ian Lance Taylor - * config/fp-bit.c (float_to_usi): Correct thinko: avoid a negative - shift. + * config/fp-bit.c (float_to_usi): Correct thinko: avoid negative shift. (df_to_sf): Remember any discarded nonzero bits in the low order guard bit. @@ -8491,7 +9428,7 @@ Mon Oct 21 13:58:54 1996 Jim Wilson Mon Oct 21 12:28:15 1996 J"orn Rennecke - jump.c (jump_optimize): Fix bug in Oct. 14 change. + * jump.c (jump_optimize): Fix bug in Oct. 14 change. Mon Oct 21 07:59:16 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -8529,8 +9466,7 @@ Thu Oct 17 23:22:03 1996 Jason Merrill (build_abbrev_table): Use value_format. (size_of_locs): New fn. (size_of_die): Don't assume a loc needs a 2-byte length. - (value_format): Likewise. - (output_die): Likewise. + (value_format, output_die): Likewise. Thu Oct 17 14:46:14 1996 Ian Lance Taylor @@ -8645,8 +9581,7 @@ Mon Oct 14 14:19:49 1996 Jason Merrill Sat Oct 12 00:07:00 1996 Doug Evans - * fold-const.c (make_range): Handle NULL operand 0 - (like in BIND_EXPRs). + * fold-const.c (make_range): Handle NULL operand 0 like in BIND_EXPRs. Fri Oct 11 15:42:22 1996 Jason Merrill @@ -8665,22 +9600,15 @@ Fri Oct 11 14:31:10 1996 Torbjorn Granlund Fri Oct 11 12:19:21 1996 Ian Lance Taylor - * mips.h (MIPS_AS_ASM_SPEC): Define. - (SUBARGET_MIPS_AS_ASM_SPEC): Define. - (GAS_ASM_SPEC): Define. - (TARGET_ASM_SPEC): Define. - (SUBTARGET_ASM_OPTIMIZING_SPEC): Define. - (SUBTARGET_ASM_DEBUGGING_SPEC): Define. - (SUBTARGET_ASM_SPEC): Define. + * mips.h ({,SUBTARGET_}MIPS_AS_ASM_SPEC): Define. + ({GAS,TARGET,SUBTARGET}_ASM_SPEC): Define. + (SUBTARGET_ASM_{OPTIMIZING,DEBUGGING}_SPEC): Define. (ASM_SPEC): Rewrite to use above specs. - (SUBTARGET_CPP_SIZE_SPEC): Define. - (SUBTARGET_CPP_SPEC): Define. + (SUBTARGET_CPP{,_SIZE}_SPEC): Define. (CPP_SPEC): Use above specs. Don't define _LANGUAGE_C if C++ or Objective C. - (EXTRA_SPECS): Define. - (SUBTARGET_EXTRA_SPECS): Define. - * mips/dec-bsd.h (ASM_SPEC): Don't define. - (CPP_SPEC): Don't define. + ({,SUBTARGET_}EXTRA_SPECS): Define. + * mips/dec-bsd.h ({CPP,ASM}_SPEC): Don't define. * mips/dec-osf1.h (CPP_SPEC): Don't define. (SUBTARGET_CPP_SIZE_SPEC): Define. * mips/elf64.h (CPP_SPEC): Don't define. @@ -8694,19 +9622,12 @@ Fri Oct 11 12:19:21 1996 Ian Lance Taylor (SUBTARGET_ASM_OPTIMIZING_SPEC): Define. * mips/iris5.h (CPP_SPEC): Don't define. (SUBTARGET_CPP_SPEC): Define. - * mips/iris6.h (CPP_SPEC): Don't define. - (SUBTARGET_CPP_SPEC): Define. - (ASM_SPEC): Don't define. - (SUBTARGET_ASM_SPEC): Define. - (SUBARGET_MIPS_AS_ASM_SPEC): Define. - (SUBTARGET_ASM_DEBUGGING_SPEC): Define. - * mips/netbsd.h (ASM_SPEC): Don't define. - (CPP_SPEC): Don't define. - (SUBTARGET_CPP_SPEC): Define. - * mips/osfrose.h (ASM_SPEC, ASM_FINAL_SPEC): Don't define. - (CPP_SPEC): Don't define. - (SUBTARGET_CPP_SIZE_SPEC): Define. + * mips/iris6.h ({CPP,ASM}_SPEC): Don't define. + (SUBTARGET_{CPP,ASM,MIPS_AS_ASM,ASM_DEBUGGING}_SPEC): Define. + * mips/netbsd.h ({CPP,ASM}_SPEC): Don't define. (SUBTARGET_CPP_SPEC): Define. + * mips/osfrose.h ({CPP,ASM,ASM_FINAL}_SPEC): Don't define. + (SUBTARGET_CPP{,_SIZE}_SPEC): Define. * mips/sni-svr4.h (CPP_SPEC): Don't define. (SUBTARGET_CPP_SIZE_SPEC): Define. @@ -8716,22 +9637,20 @@ Thu Oct 10 17:58:49 1996 Jason Merrill (DWARF_OFFSET_SIZE): Define. * dwarf2out.c (most everywhere): Support SGI/MIPS -mabi=64 by fixing - code which assumed that pointers are 4 bytes long, parameterizing - many sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4, - DATA instead of DATA4, FORM_ref instead of FORM_ref4. (DWARF_ROUND, - UNALIGNED_DOUBLE_INT_ASM_OP, UNALIGNED_WORD_ASM_OP, - ASM_OUTPUT_DWARF_DELTA, ASM_OUTPUT_DWARF_DATA, DW_FORM_data, - DW_FORM_ref): New macros. + code which assumed pointers are 4 bytes long, parameterizing many + sizes on DWARF_OFFSET_SIZE and using DELTA instead of DELTA4, + DATA instead of DATA4, FORM_ref instead of FORM_ref4. + (DWARF_ROUND, UNALIGNED_DOUBLE_INT_ASM_OP): New macros. + (UNALIGNED_WORD_ASM_OP, ASM_OUTPUT_DWARF_DELTA): Likewise. + (ASM_OUTPUT_DWARF_DATA, DW_FORM_data, DW_FORM_ref): New macros. (gen_variable_die): Only equate_decl_number_to_die if decl is TREE_STATIC. (get_AT): Fix thinko. * dwarf2out.c (constant_size): New fn. - (size_of_die): Use it instead of assuming 4 bytes; - usually we only need one. + (size_of_die): Use it instead of assuming 4 bytes. (output_value_format, output_die): Likewise. - (build_abbrev_table): We need a new abbrev if the size - of the constant differs. + (build_abbrev_table): Need new abbrev if size of constant differs. (dwarf_attr_name): Add new SGI/MIPS extensions. (gen_subprogram_die): Support DW_AT_MIPS_has_inlines. (gen_inlined_subroutine_die): Likewise. @@ -8882,8 +9801,8 @@ Tue Oct 8 10:36:44 1996 Jeffrey A Law (law@cygnus.com) Mon Oct 7 19:55:02 1996 Jim Wilson * sched.c (schedule_block): Before scheduling, add code to make all - call used regs that are not fixed or global live when we see a - CALL_INSN. During scheduling, change existing code to use same test. + call used regs not fixed or global live when we see a CALL_INSN. + During scheduling, change existing code to use same test. * varasm.c (bss_section): Delete unused parameters. @@ -8894,12 +9813,11 @@ Mon Oct 7 16:24:21 1996 Jason Merrill * dwarf2out.c (*_separate_line_info_*): Parallel line number information for functions defined in sections other than .text. (size_of_line_info): Support it. - (output_line_info): Likewise. - (dwarfout_line): Likewise. + (output_line_info, dwarfout_line): Likewise. (gen_compile_unit_die): Don't add high/low_pc or stmt_list attributes here. (dwarfout_finish): Add them here if appropriate. - (remove_AT): free removed attribute properly. + (remove_AT): Free removed attribute properly. (gen_type_die): Don't assume a nested type is complete. (dwarfout_finish): Don't emit line info if it would be empty. @@ -9022,8 +9940,7 @@ Wed Oct 2 16:53:56 1996 Jason Merrill * dwarf2out.c: Undo text_end_label, add_src_coords changes. (addr_const_to_string): Fix typos. - (decl_class_context): New fn. - (get_AT_unsigned): New fn. + (decl_class_context, get_AT_unsigned): New functions. (gen_subprogram_die): Only emit src coords info for a specification if they changed. (gen_variable_die): Support DW_AT_declaration and DW_AT_specification. @@ -9037,8 +9954,7 @@ Wed Oct 2 11:22:50 1996 Jeffrey A Law (law@cygnus.com) * pa.c (hppa_legitimize_address): Rework to generate more indexed and scaled indexed addressing. * pa.md (scaled indexed store): Add define_splits to undo - pessimizations created by hppa_legitimize_address for integer - stores. + pessimizations created by hppa_legitimize_address for integer stores. * pa.c (remove_useless_addtr_insns): New function. (pa_reorg): Delete code to remove useless add,tr insns. @@ -9206,18 +10122,15 @@ Thu Sep 26 17:12:00 1996 Jim Wilson Wed Sep 25 21:22:57 1996 Jeffrey A Law (law@cygnus.com) - * h8300.h (FIRST_PSEUDO_REGISTER): Bump up by one. - (ARG_POINTER_REGNUM): Likewise. + * h8300.h (FIRST_PSEUDO_REGISTER, ARG_POINTER_REGNUM): Bump up by one. (FIXED_REGISTERS): Add entry for MAC register. - (CALL_USED_REGISTERS< REG_ALLOC_ORDER): Likewise. + (CALL_USED_REGISTERS, REG_ALLOC_ORDER): Likewise. (HARD_REGNO_NREGS): Handle MAC register. - (HARD_REGNO_MODE_OK< REGNO_OK_FOR_BASE_P): LIkewise. - (REGISTER_NAMES): Likewise. + (HARD_REGNO_MODE_OK, REGNO_OK_FOR_BASE_P, REGISTER_NAMES): Likewise. (enum reg_class): New MAC_REGS register class. (REG_CLASS_CONTENTS, REGNO_REG_CLASS): Corresponding changes. - (REG_CLASS_FROM_LETTER): LIkewise. - (REGISTER_MOVE_COST): Make copies to/from the MAC register - expenseive. + (REG_CLASS_FROM_LETTER): Likewise. + (REGISTER_MOVE_COST): Make copies to/from MAC register expenseive. (CONDITIONAL_REGISTER_USAGE): Define. * h8300.md (movsi_h8300hs): Renamed from movsi_h8300h. Handle moves to/from the MAC register. @@ -9352,9 +10265,8 @@ Mon Sep 23 14:41:12 1996 J"orn Rennecke * loop.c (check_dbra_loop): Don't assume label must be second part of if_then_else in condjump. - * jump.c (jump_optimize): In no-nop move deletion, don't - test PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is - performed. + * jump.c (jump_optimize): In no-nop move deletion, don't test + PRESERVE_DEATH_INFO_REGNO_P; instead test if optimization is performed. Check for REG_UNUSED note on to-be deleted insn before searching for preceding instruction to delete note from. If PRESERVE_DEATH_INFO_REGNO_P is true for SREG, replace INSN with USE. @@ -9395,8 +10307,7 @@ Sun Sep 22 11:12:20 1996 Joern Rennecke * c-decl.c (pushdecl): Check new declaration actually conflicts before warning about implicit external vs. static declarations. - * loop.c (combine_givs): Improve combining DEST_REG giv with - its only use. + * loop.c (combine_givs): Improve combining DEST_REG giv with only use. Sun Sep 22 10:50:03 1996 Scott Christley @@ -9410,8 +10321,7 @@ Sun Sep 22 10:50:03 1996 Scott Christley * objc/init.c: Replace use of free with objc_free. * objc/misc.c (objc_malloc): Renamed from __objc_xmalloc. (objc_realloc): Renamed from __objc_realloc. - (objc_atomic_malloc): New function. - (objc_valloc): New function. + (objc_atomic_malloc, objc_valloc): New functions. (objc_calloc): Renamed from __objc_calloc. (objc_free): New function. * objc/objc-api.h (_objc_malloc): New function pointer. @@ -9512,7 +10422,7 @@ Tue Sep 17 19:42:39 1996 Doug Evans Tue Sep 17 15:47:20 1996 Ian Lance Taylor - * Add support for VR5000, and finish MIPS4 support. + * Add support for R5000, and finish MIPS4 support. * mips.h (enum processor_type): Add PROCESSOR_R5000. (gen_conditional_move): Declare. (CONDITIONAL_REGISTER_USAGE): Mark ST_REGS as fixed if not @@ -9527,16 +10437,13 @@ Tue Sep 17 15:47:20 1996 Ian Lance Taylor (RTX_COSTS): Add cases for R5000. (REGISTER_MOVE_COST): Add cases for condition code registers. (PREDICATE_CODES): Add "const_float_1_operand". - (EXTRA_CC_MODES): Remove. - (EXTRA_CC_NAMES): Remove. - (SELECT_CC_MODE): Remove. + (EXTRA_CC_{MODES,NAME}, SELECT_CC_MODE): Remove. (REGISTER_NAMES): Add entries for new condition code registers. (DEBUG_REGISTER_NAMES): Likewise. (ADDITIONAL_REGISTER_NAMES): Remove FPSW_REGNUM. * mips.md (cpu attribute): Add R5000. (function units): Add cases for the R5000. - (madd.d): Only available if TARGET_DOUBLE_FLOAT. - (msub.d, nmadd.d, nmsub.d): Likewise. + ({madd,msub,nmadd,nmsub}.d): Only available if TARGET_DOUBLE_FLOAT. (recip.d, recip.s, rsqrt.d, rsqrt.s): New define_insn patterns. (movcc): New pattern to move condition code values. (reload_incc, reload_out_cc): New define_expand patterns. @@ -9545,17 +10452,14 @@ Tue Sep 17 15:47:20 1996 Ian Lance Taylor (branch_fp_ne, branch_fp_eq): Match any condition code register. (branch_fp_ne_rev, branch_fp_eq_rev): Remove. (seq_df, slt_df, sle_df): Match any condition code register. - (sgt_df, sge_df, seq_sf, slt_sf, sle_sf): Likewise. - (sgt_sf, sge_sf): Likewise. + (sgt_df, sge_df, seq_sf, slt_sf, sle_sf, sgt_sf, sge_sf): Likewise. (sne_df, sne_sf): Remove. (FP conditional moves): Match any condition code register. - Require TARGET_HARD_FLOAT and, if appropriate, - TARGET_DOUBLE_FLOAT. + Require TARGET_HARD_FLOAT and, if appropriate, TARGET_DOUBLE_FLOAT. (movsicc): Just call gen_conditional_move. (movdicc, movsfcc, movdfcc): New define_expand patterns. * mips.c (mips_reg_names): Add condition code registers. - (mips_sw_reg_names): Likewise. - (mips_regno_to_class): Likewise. + (mips_sw_reg_names, mips_regno_to_class): Likewise. (const_float_1_operand): New function. (mips_move_1word): Treat CCmode as SImode. Handle move from ST_REG to GR_REG if mips_isa >= 4. Only permit move from GR_REG @@ -9593,14 +10497,14 @@ Mon Sep 16 22:38:55 1996 Stu Grossman (grossman@critters.cygnus.com) Mon Sep 16 13:12:27 1996 J"orn Rennecke - * sh.c (ext_shift_insns, ext_shift_amounts): new arrays. - (gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): new functions. - rtx_equal_function_value_matters: declare. - (shl_and_length, shl_and_src_length, gen_shl_and): new functions. - (shl_sext_kind, shl_sext_length, gen_shl_sext): new functions. - * sh.md (ashlhi3_k, lshrhi3_m): new insn pattern. + * sh.c (ext_shift_insns, ext_shift_amounts): New arrays. + (gen_ashift_hi, gen_shifty_hi_op, shl_and_kind): New functions. + (rtx_equal_function_value_matters): Declare. + (shl_and_length, shl_and_src_length, gen_shl_and): New functions. + (shl_sext_kind, shl_sext_length, gen_shl_sext): Likewise. + * sh.md (ashlhi3_k, lshrhi3_m): New patterns. (lshrhi3, shl_sext_ext, shl_sext_sub): - new insn pattern with matching define_split. + New insn patterns with matching define_split. (and_shl_scratch): Likewise, but also with unnamed variants. Sat Sep 14 17:05:07 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -9692,8 +10596,7 @@ Thu Sep 5 14:59:47 1996 J"orn Rennecke Thu Sep 5 10:43:36 1996 Jeffrey A Law (law@cygnus.com) - * pa.md (movsi, movdi, movsf patterns): Handle - 'R' constraints as needed. + * pa.md (mov{si,di,sf}): Handle 'R' constraints as needed. Wed Sep 4 17:13:28 1996 Bob Manson @@ -9704,8 +10607,8 @@ Wed Sep 4 17:13:28 1996 Bob Manson Wed Sep 4 12:30:02 1996 Mike Stump - * except.c (emit_unwinder): Ensure that CLOBBER and USE insns come - last, if present. + * except.c (emit_unwinder): Ensure CLOBBER and USE insns come last, + if present. Tue Sep 3 12:01:43 1996 Ian Lance Taylor @@ -9787,8 +10690,7 @@ Thu Aug 22 11:39:34 1996 Michael Meissner Tue Aug 20 18:49:55 1996 Michael Meissner * rs6000/sysv4.h (ASM_OUTPUT_SECTION_NAME): If -mrelocatable or - -mrelocatable-lib, don't make read-only sections, since if there - are pointers to be fixed up, the assembler complains. + -mrelocatable-lib, don't make read-only sections. Mon Aug 19 18:42:13 1996 Doug Evans @@ -9880,7 +10782,7 @@ Wed Aug 14 10:31:28 1996 Jeffrey A Law (law@cygnus.com) (output_millicode_call): Likewise. * pa.h (TARGET_FAST_INDIRECT_CALLS): Define. (TARGET_SWITCHES): Add "fast-indirect-calls". - * pa.md: Treat TARGET_FAST_INDIRECT_CALLS just like + * pa.md (TARGET_FAST_INDIRECT_CALLS): Treat just like TARGET_NO_SPACE_REGS in various call/millicode call patterns. * pa.c (print_operand): Use the right comparison operator @@ -9916,11 +10818,10 @@ Tue Aug 13 11:36:02 1996 Michael Meissner * rs6000/t-ppcgas (MULTILIB_*): Build far fewer multilib libraries. Build all libraries with -mrelocatable-lib and - -mno-eabi. Build special Linux and Solaris libraries. + -mno-eabi. Build special GNU/Linux and Solaris libraries. * rs6000/eabi{,aix,le}.h (MULTILIB_DEFAULTS): Adapt to changes in t-ppcgas. - * rs6000/(linux,sol2).h (MULTILIB_DEFAULTS): Ditto. - * rs6000/{sysv4,sysv4le} (MULTILIB_DEFAULTS): Ditto. + * rs6000/(linux,sol2,sysv4,sysv4le).h (MULTILIB_DEFAULTS): Likewise. Tue Aug 13 11:36:02 1996 Jeffrey A Law (law@cygnus.com) @@ -9957,19 +10858,16 @@ Mon Aug 12 12:30:25 1996 Michael Meissner (STAGESTUFF): Add stamp-mlib. (mostlyclean): Delete tmp-mlib.h. - * genmultilib: Take a fifth argument to add options to pass on to - all multilib builds. Restructure output so that we pass the - synonym switches and extra arguments separately, and not - exponentially slow down genmultilib. + * genmultilib: Take fifth argument for options to all multilib builds. + Restructure output so we pass synonym switches and extra arguments + separately, and not exponentially slow down genmultilib. - * gcc.c (toplevel): Rearrange multilib support so that we support - passing the synonyms separately from the normal switches. Add - support for passing additional switches to be used on all multilib - builds. Dump and restore the value of MULTILIB_DEFAULTS so that - gcc cover programs for other targets will correctly chose the - appropriate multilib directory. - (setspec,process_command,main): Ditto - (used_arg,default_arg,print_multilib_info): Ditto. + * gcc.c (toplevel): Rearrange multilib support so we support passing + synonyms separately from normal switches. Add support for passing + additional switches for all multilib builds. Dump and restore value + of MULTILIB_DEFAULTS. + (setspec, process_command, main): Likewise. + (used_arg,default_arg,print_multilib_info): Likewise. Mon Aug 12 07:46:47 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -10397,8 +11295,7 @@ Thu Jul 18 20:29:33 1996 Jim Wilson (DBX_DEBUGGING_INFO, SDB_DEBUGGING_INFO, MIPS_DEBUGGING_INFO, DWARF_DEBUGGING_INFO, PREFERRED_DEBUGGING_INFO): Delete undefs at end of file. - * mips/mips.c (function_prologue): Use FUNCTION_NAME_ALREADY_DECLARED. - (function_epilogue): Likewise. + * mips.c (function_{pro,epi}logue): Use FUNCTION_NAME_ALREADY_DECLARED. Thu Jul 18 19:24:19 1996 David Mosberger-Tang @@ -10490,7 +11387,7 @@ Fri Jul 12 17:34:01 1996 David Edelsohn Fri Jul 12 15:04:43 1996 Doug Evans - * arm/arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures. + * arm.h (ASM_OUTPUT_MI_THUNK): Handle fns returning structures. * ptx4.h ({ASM,LINK}_SPEC): %{V} %{v:%{!V:-V}} -> %{v:-V}. * svr4.h ({ASM,LINK}_SPEC): Likewise. @@ -10513,26 +11410,24 @@ Thu Jul 11 17:29:33 1996 Michael Meissner register in order to work with inlined functions. (rs6000_replace_regno): New function to replace a register with a new pseudo register. - (rs6000_finalize_pic): Loop through all of the insns, replacing - any GOT_TOC_REGNUM registers with a new pseudo register, and - adding the initialization of of the GOT register if it was - created. + (rs6000_finalize_pic): Loop through all insns, replacing any + GOT_TOC_REGNUM registers with new pseudo register, and adding + initialization of GOT register if it was created. (rs6000_reorg): New function to check whether the GOT_TOC register marker was removed. Thu Jul 11 10:12:50 1996 Jeffrey A Law (law@cygnus.com) - * h8300/h8300.h (OK_FOR_U): If generating H8/S code, accept + * h8300.h (OK_FOR_U): If generating H8/S code, accept SYMBOL_REF and SYMBOL_REF + CONST_INT. - * h8300/h8300.c (shift_one): Emit tabs between opcode and + * h8300.c ({shift,rotate}_one): Emit tabs between opcode and operands to be consistent with the rest of the compiler. - (rotate_one): Likewise. (shift_two, rotate_two): Define. (get_shift_alg): Accept new argument "assembler2_p" for rotate/shift by two insns. All callers changed. Rework - to generate more efficient code on the H8/300, H8/300H, and - H8/S. Try to simplify somewhat. + to generate more efficient code on the H8/300, H8/300H, and H8/S. + Try to simplify somewhat. (emit_a_shift): Use shift-by-two insns when they're available. Emit tabs between opcode and operands to be consistent with the rest of the compiler. @@ -10543,9 +11438,8 @@ Wed Jul 10 19:32:17 1996 Jim Wilson Wed Jul 10 18:56:38 1996 Ian Lance Taylor - * sh/sh.c (machine_dependent_reorg): When looking for the - instruction that sets a register in LOG_LINKS, skip the link if - REG_NOTE_KIND is not zero. + * sh.c (machine_dependent_reorg): When looking for instruction that + sets register in LOG_LINKS, skip link if REG_NOTE_KIND is not zero. Wed Jul 10 15:02:18 1996 Michael Meissner @@ -10578,13 +11472,12 @@ Tue Jul 9 15:21:27 1996 Jim Wilson Mon Jul 8 18:00:33 1996 Jim Wilson - * sh/sh.h (enum reg_class): Add new class GENERAL_FP_REGS. + * sh.h (enum reg_class): Add new class GENERAL_FP_REGS. (REG_CLASS_NAMES, REG_CLASS_CONTENTS): Likewise. * cse.c (note_mem_written): Varying structure memory access with AND address can alias scalars. - * sched.c (true_dependence, anti_dependence, output_dependence): - Likewise. + * sched.c ({true,anti,output}_dependence): Likewise. * sh.c (calc_live_regs): For pragma_interrupt case, exclude call clobbered regs that are fixed, explicitly add MACH_REG and MACL_REG. @@ -10594,18 +11487,18 @@ Mon Jul 8 18:00:33 1996 Jim Wilson * function.c (aggregate_value_p): If hard_function_value returns a non-REG, then return 0. - * mips/mips.c (function_arg): Add explicit checks for FIELD_DECLs. + * mips.c (function_arg): Add explicit checks for FIELD_DECLs. (mips_function_value): Add explicit checks for FIELD_DECLs, and save them in the array FIELDS. When returning structure with 1 float field, enclose it in a PARALLEL and set the PARALLEL mode correctly. - * mips/mips.md (call_value): Call gen_call_value_multiple_internal0 + * mips.md (call_value): Call gen_call_value_multiple_internal0 only if there are multiple return values. Strip the PARALLEL off if there there is only one return value. Mon Jul 8 16:27:33 1996 Jeffrey A. Law * First cut at support for the H8/S. - * h8300/h8300.c (h8300_init_once): Handle the H8/S (treat it + * h8300.c (h8300_init_once): Handle the H8/S (treat it like the H8/300H). (dosize, adds_subs_operand, one_insn_adds_subs_operand): Likewise. (output_adds_subs, const_costs, print_operand): Likewise. @@ -10622,10 +11515,9 @@ Mon Jul 8 16:27:33 1996 Jeffrey A. Law (UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY): Likewise. (BIGGEST_ALIGNMENT, BIGGEST_FIELD_ALIGNMENT): Likewise. (INITIALIZE_TRAMPOLINE, MOVE_MAX, Pmode): Likewise. - * h8300/h8300.md: Handle H8/S just like H8/300H + * h8300.md: Handle H8/S just like H8/300H throughout the entire file. - * h8300/t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries - too. + * t-h8300 (MULTILIB_OPTIONS): Build "-ms" libraries too. (MULTILIB_DIRNAMES): Put H8/S libraries in "h8300s" directory. * h8300/lib1funcs.asm: Emit ".h8300s" pseudo-op when generating h8300s object files. Otherwise treat the H8/S just like the H8/300H. @@ -10665,13 +11557,11 @@ Wed Jul 3 17:09:22 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Wed Jul 3 12:52:53 1996 Jeffrey A. Law * pa.c (fmpy_operands): Define. - (combinable_fmpy): New function. - (combinable_fadd, combinable_fsub): Likewise. + (combinable_{fmpy,add,fsub}): New function. * pa.md (parallel_addb, parallel_movb): New patterns. (fmpyadd, fmpysub): New patterns. - * pa.c (fmpyaddoperands): Tighten checks. Allow SFmode. - (fmpysuboperands): Similarly. + * pa.c (fmpy{add,sub}operands): Tighten checks. Allow SFmode. Tue Jul 2 18:57:15 1996 Jeffrey A. Law @@ -10702,11 +11592,10 @@ Sat Jun 29 07:10:02 1996 Michael Meissner * rs6000.h (INIT_EXPANDERS): Define, call rs6000_init_expanders. (RS6000_VARARGS_OFFSET): fpmem area no longer next to outgoing argument area. - (STARTING_FRAME_OFFSET): Ditto. - (STACK_DYNAMIC_OFFSET): Ditto. + (STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise. (frame_pointer_needed): Add external declaration. (rs6000_{save,restore}_machine_status): Ditto. - (rs6000_init_expanders): Ditto. + (rs6000_init_expanders): Likewise. * rs6000.c (rs6000_{save,restore}_machine_status): New functions to save and restore the globals needed on a per function basis. @@ -10714,9 +11603,8 @@ Sat Jun 29 07:10:02 1996 Michael Meissner function basis, and set up so the above save/restore functions are called when processing nested functions. (output_epilog): Don't initialize per function globals here. - (rs6000_stack_info): Change where the fpmem save area is to below - the local variables, and not just below the outgoing argument - area. + (rs6000_stack_info): Change where fpmem save area is to below local + variables, and not just below the outgoing argument area. * rs6000.md (floatsidf2*, fix_truncdfsi2*): Rewrite conversion routines to track new location of the fpmem save area. Allocate a @@ -10739,11 +11627,8 @@ Fri Jun 28 18:37:20 1996 Stephen L Moshier * objc/thr-decosf1.c (objc_thread_id): Use pthread_getunique_np to obtain a thread ID value. (objc_mutex_allocate): Cast mutex->owner to _objc_thread_t. - (objc_mutex_deallocate): Likewise. - (objc_mutex_unlock): Likewise. - (objc_mutex_trylock): Declare thread_id as _objc_thread_t. - (objc_mutex_lock): Likewise. - (objc_mutex_unlock): Likewise. + (objc_mutex_{deallocate,unlock}): Likewise. + (objc_mutex_{try,un,}lock): Declare thread_id as _objc_thread_t. * real.c (asctoeg): `0.0eX' is zero, regardless of the exponent X. @@ -10839,17 +11724,17 @@ Thu Jun 27 18:49:35 1996 Jim Wilson Thu Jun 27 11:03:59 1996 Ian Lance Taylor - * mips/mips.h (CC1_SPEC): Put spaces between the -mips* cases. + * mips.h (CC1_SPEC): Put spaces between the -mips* cases. * mips/osfrose.h (CC1_SPEC): Likewise. - * sh/sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if the - insn is inside a sequence. + * sh.c (output_branch): Don't call ADJUST_INSN_LENGTH if insn is + inside sequence. Wed Jun 26 19:09:43 1996 Jeffrey A. Law - * pa/pa.h (CMP_PSI): Delete. + * pa.h (CMP_PSI): Delete. (FUNCTION_POINTER_COMPARISON_MODE): Likewise. - * pa/pa.md (cmppsi); Delete expander. + * pa.md (cmppsi): Delete expander. (canonicalize_funcptr_for_compare): Renamed from plabel_dereference, turned into an expander + anonymous pattern. @@ -10877,10 +11762,10 @@ Tue Jun 25 12:23:54 1996 Michael Meissner Tue Jun 25 01:17:50 1996 Jeffrey A. Law - * h8300/h8300.c (function_prologue): Update "monitor" prologues. + * h8300.c (function_prologue): Update "monitor" prologues. (function_epilogue): Similarly. - * pa/pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are + * pa.h (PARSE_LDD_OUTPUT): Handle dynamic libraries that are loaded "statically". Mon Jun 24 19:48:36 1996 Joel Sherrill @@ -11109,7 +11994,7 @@ Mon Jun 10 14:56:14 1996 Michael Meissner Mon Jun 10 14:53:38 1996 Doug Evans - Move fork/exec/wait handling into file of its own. + * Move fork/exec/wait handling into file of its own. * pexecute.c: New file. * Makefile.in (pexecute.o): Add rule. (xgcc): Link in pexecute.o. @@ -11186,11 +12071,11 @@ Sat Jun 8 22:13:33 1996 J"orn Rennecke (amylaar@meolyon.hanse.de) Sat Jun 8 15:13:33 1996 Jim Wilson - * mips/mips.c (override_options): Add vr4100 and vr4300 support. - * mips/mips.h (enum processor_type): Likewise. + * mips.c (override_options): Add vr4100 and vr4300 support. + * mips.h (enum processor_type): Likewise. (MASK_4300_MUL_FIX, TARGET_4300_MUL_FIX): New macros. (TARGET_SWITCHES): Add -mfix4300 option. - * mips/mips.md (cpu, memory, imuldiv, adder, mult, divide): Add + * mips.md (cpu, memory, imuldiv, adder, mult, divide): Add vr4100 and vr4300 support. (muldf3, mulsf3): Add vr4300 support. (muldf3_internal, muldf_r4300, mulsf3_internal, mulsf_r4300): New @@ -11260,10 +12145,10 @@ Fri Jun 7 20:04:40 1996 Jim Wilson * sdbout.c (gsyms.h): Include if CROSS_COMPILE is defined. (plain_type_1): Use TYPE_PRECISION instead of TYPE_SIZE. Add check for LONG_DOUBLE_TYPE_SIZE if EXTENDED_SDB_BASIC_TYPES. - * i960/i960.h (EXTENDED_SDB_BASIC_TYPES): Define. + * i960.h (EXTENDED_SDB_BASIC_TYPES): Define. (PUT_SDB_TYPE): Delete now unnecessary shifting and masking. - * i960/i960.h (i960_output_move_{double,quad}): Declare. + * i960.h (i960_output_move_{double,quad}): Declare. Fri Jun 7 19:22:09 1996 Scott Christley @@ -11345,15 +12230,15 @@ Thu Jun 6 19:47:26 1996 Jim Wilson * stmt.c (expand_value_return): Handle PARALLEL return_reg. * mips/abi64.h (TYPE_DEPENDENT_REG): Delete. - * mips/mips.c (function_arg): Return PARALLEL for structure with + * mips.c (function_arg): Return PARALLEL for structure with aligned double fields. (type_dependent_reg): Delete. (mips_function_value): Return PARALLEL for structure with two floating point fields. * mips/mips.md (call_value): Handle PARALLEL in operands[0]. (call_value_multiple_internal2): New pattern. - * pa/pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST. - * rs6000/rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL + * pa.h (FUNCTION_ARG): General PARALLEL instead of EXPR_LIST. + * rs6000.c (init_cumulative_args): Change EXPR_LIST to PARALLEL in comments. (function_arg): Generate PARALLEL instead of EXPR_LIST. @@ -11406,10 +12291,10 @@ Thu Jun 6 13:06:54 1996 Michael Meissner Wed Jun 5 20:04:53 1996 Jim Wilson - * i960/i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED. + * i960.h (ROUND_TYPE_ALIGN): Add check for TYPE_PACKED. - * sh/sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define. - * sh/sh.md (branch_true): Add comment about T-bit compares. + * sh.h (SHORT_IMMEDIATES_SIGN_EXTEND): Define. + * sh.md (branch_true): Add comment about T-bit compares. Tue Jun 4 23:08:34 1996 Per Bothner @@ -11442,8 +12327,7 @@ Wed Jun 5 16:25:51 1996 Michael Meissner (LINK_OS_*_SPEC): New specs for OS specific linker switches. (SUBTARGET_EXTRA_SPECS): Add new specs. - * {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into the general - link spec. + * {sol2,sysv4}.h (LINK_SPEC): Move Solaris link into general link spec. * {sysv4,sysv4le,eabile}.h (LINK_TARGET_SPEC): Only pass -oformat to the linker if the user is changing the default endian format. @@ -11563,20 +12447,20 @@ Fri May 31 15:07:49 1996 Jim Wilson ASM_OUTPUT_ALIGNED_LOCAL, STARTFILE_SPEC, ENDFILE_SPEC, LINK_SPEC): Modify. (MIPS_ABI_DEFAULT, LOCAL_LABEL_PREFIX): Define. - * mips/mips.c: Add -mabi=n32 support. + * mips.c: Add -mabi=n32 support. (mips_const_double_ok, mips_move_1word, mips_move_2words, function_arg, override_options, mips_asm_file_start, compute_frame_size, save_restore_insns, function_prologue, mips_expand_prologue, function_epilogue, mips_function_value): Modify. (mips_abi, mips_abi_string): Define - * mips/mips.h: Add -mabi=n32 support. + * mips.h: Add -mabi=n32 support. (ABI_64BIT): Delete. (TARGET_OPTIONS, INITIAL_ELIMINATION_OFFSET, GO_IF_LEGITIMATE_ADDRESS, CONSTANT_ADDRESS_P, LEGITIMATE_CONSTANT_P, LEGITIMIZE_ADDRESS, ASM_OUTPUT_ADDR_DIFF_ELT): Modify. (enum mips_abi_type, SUBTARGET_TARGET_OPTIONS): Define. (mips_abi, mips_abi_string): Declare. - * mips/mips.md (jump, tablejump_internal1, tablejump_internal2): Add + * mips.md (jump, tablejump_internal1, tablejump_internal2): Add -mabi=n32 support. * mips/t-iris6 (MULTILIB_OPTIONS): Add -mabi=n32 support. * mips/xm-irix6.h (HOST_BITS_PER_LONG): Use _MIPS_SZLONG not 64. @@ -11627,32 +12511,22 @@ Wed May 29 14:54:44 1996 Michael Meissner Tue May 28 15:21:24 1996 Michael Meissner - * rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77. The new fpmem - register represents the memory location used for float/int - conversions. - ({FIXED,CALL_USED}_REGISTERS): Add support for the fpmem pseudo - register. - (REG_ALLOC_ORDER): Ditto. - (HARD_REGNO_{NREGS,MODE_OK}): Ditto. - (REGISTER_MOVE_COST): Ditto. - (reg_class): Ditto. - (REG_CLASS_{NAMES,CONTENTS}): Ditto. - (REGNO_REG_CLASS): Ditto. - (PREFERRED_RELOAD_CLASS): Ditto. - (CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Ditto. - (rs6000_stack): Ditto. - ({,DEBUG_}REGISTER_NAMES): Ditto. + * rs6000.h (FIRST_PSEUDO_REGISTER): Bump to 77. + ({FIXED,CALL_USED}_REGISTERS): Add support for fpmem pseudo register. + (REG_ALLOC_ORDER, HARD_REGNO_{NREGS,MODE_OK}): Likewise. + (REGISTER_MOVE_COST, reg_class, REG_CLASS_{NAMES,CONTENTS}): Likewise. + (REGNO_REG_CLASS, PREFERRED_RELOAD_CLASS): Likewise. + (CLASS_{MAX_NREGS,CANNOT_CHANGE_SIZE,MAX_NREGS}): Likewise. + (rs6000_stack, {,DEBUG_}REGISTER_NAMES): Ditto. (FPMEM_{REGNO_P,REGNUM}): New macros for fpmem register. (rs6000_fpmem_{offset,size}): New global variables. (RS6000_VARARGS_OFFSET): Fpmem temporary storage is located between outgoing arg area and varargs save area. - (STARTING_FRAME_OFFSET): Ditto. - (STACK_DYNAMIC_OFFSET): Ditto. + (STARTING_FRAME_OFFSET, STACK_DYNAMIC_OFFSET): Likewise. (PREDICATE_CODES): Add fpmem_operand. ({count_register,fpmem}_operand): Add declarations. - * rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem - 'register'. + * rs6000.c ({rs6000,alt}_reg_names): Add support for fpmem 'register'. (rs6000_fpmem_{offset,size}): New global variables. (fpmem_operand): Return true for fpmem registers. (gpc_reg_operand): The fpmem register is not general purpose. @@ -11661,7 +12535,7 @@ Tue May 28 15:21:24 1996 Michael Meissner (print_operand): Add 'v' operand type for the upper 16 bits of signed constants, to placate the Solaris assembler. ({rs6000,debug}_stack_info): Add support for fpmem 'register'. - (output_epilog): Ditto. + (output_epilog): Likewise. * rs6000.md (addsi3,movsi,movsf,movdi): Use %v for constants with the upper 16 bits, to get the sign correct for PowerPC Solaris. @@ -11674,10 +12548,8 @@ Tue May 28 15:21:24 1996 Michael Meissner (ASM_SPEC): Do not pass -u to the assembler. (CC1_SPEC): -mrelocatable implies -meabi. - * sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System - V.4. - (ASM_OUTPUT_ALIGNED_LOCAL): Don't define a Solaris specific - method. + * sol2.h (RS6000_ABI_NAME): Default ABI is Solaris, not System V.4. + (ASM_OUTPUT_ALIGNED_LOCAL): Don't define Solaris specific method. Mon May 27 06:39:13 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -11724,7 +12596,7 @@ Fri May 24 12:34:22 1996 Doug Evans (asm_output_aligned_bss): Likewise. (assemble_variable): Pass DECL to ASM_OUTPUT{,_ALIGNED}_BSS. * arm/aout.h (ASM_OUTPUT_ALIGNED_BSS): Update. - * h8300/h8300.h (ASM_OUTPUT_BSS): Update. + * h8300.h (ASM_OUTPUT_BSS): Update. * i386/linux.h (ASM_OUTPUT_ALIGNED_BSS): Update. * i386/sysv4.h (ASM_OUTPUT_ALIGNED_BSS): Update. * m68k/coff.h (ASM_OUTPUT_ALIGNED_BSS): Update. @@ -11736,9 +12608,8 @@ Fri May 24 12:34:22 1996 Doug Evans Thu May 23 19:55:52 1996 Jim Wilson - * combine.c (set_nonzero_bits_and_sign_copies): Set - reg_sign_bit_copies to one not zero to indicate that the value - is unknown. + * combine.c (set_nonzero_bits_and_sign_copies): Set reg_sign_bit_copies + to one not zero to indicate value is unknown. Thu May 23 18:39:24 1996 J.T. Conklin @@ -11750,16 +12621,15 @@ Thu May 23 18:39:24 1996 J.T. Conklin Thu May 23 15:53:06 1996 Ian Lance Taylor - * sh/sh.md: Add new instruction types fp and fpdiv. Set new + * sh.md: Add new instruction types fp and fpdiv. Set new instruction types where appropriate. Add function unit fp. Claim that store instructions use function unit memory. Thu May 23 00:36:19 1996 Jeffrey A. Law - * h8300/h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH - on the H8/300H. - * h8300/h8300.md: Use "m" rather than "o" constraint everywhere - appropriate. Cleanup use of "i" and "n" constraints. + * h8300.h (CONSTANT_ADDRESS_P): Don't accept CONST or HIGH on H8/300H. + * h8300.md: Use "m" rather than "o" constraint everywhere appropriate. + Cleanup use of "i" and "n" constraints. Wed May 22 17:43:37 1996 Jim Wilson @@ -11790,10 +12660,9 @@ Wed May 22 08:06:42 1996 Richard Kenner Tue May 21 13:42:17 1996 Jeffrey A. Law - * h8300/h8300.md (div patterns): Rewrite. - (mod patterns): Likewise. + * h8300.md (div and mode patterns): Rewrite. - * pa/pa.c (basereg_operand): Never accept a CONST_INT. + * pa.c (basereg_operand): Never accept a CONST_INT. Tue May 21 12:26:40 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -11947,11 +12816,9 @@ Fri May 17 14:20:13 1996 Mike Stump * expr.c (expand_expr, cond UNSAVE_EXPR): Move from the C++ frontend to the backend where it belongs. - * tree.c (unsave_expr): Likewise. - (unsave_expr_now): Likewise. + * tree.c (unsave_expr{,_now}): Likewise. * tree.def (UNSAVE_EXPR): Likewise. - * tree.h (unsave_expr): Likewise. - (unsave_expr_now): Likewise. + * tree.h (unsave_expr{,_now}): Likewise. Fri May 17 15:04:40 1996 Michael Meissner @@ -11965,7 +12832,7 @@ Fri May 17 13:50:55 1996 Jason Merrill Fri May 17 13:34:28 1996 Ian Lance Taylor - * config/fp-bit.c (_fpdiv_parts): Correct sign handling when + * fp-bit.c (_fpdiv_parts): Correct sign handling when dividing zero or infinity by something. Fri May 17 12:36:36 1996 Doug Evans @@ -11974,21 +12841,21 @@ Fri May 17 12:36:36 1996 Doug Evans * Makefile.in (toplev.o): Pass -DTARGET_NAME. * arm/aout.h (ASM_OUTPUT_OPTIONS): Delete. (ASM_FILE_START): Delete option output support. - * arm/arm.c (output_option, output_options, m_options): Delete. - * m88k/m88k.c (output_file_start): Delete option output support. - * m88k/m88k.h (ASM_COMMENT_START): Define. - * mips/mips.c (target_switches, print_options): Delete. + * arm.c (output_option, output_options, m_options): Delete. + * m88k.c (output_file_start): Delete option output support. + * m88k.h (ASM_COMMENT_START): Define. + * mips.c (target_switches, print_options): Delete. (mips_asm_file_start): Put output of -G,Cpu,ISA here. - * mips/mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #". - * rs6000/rs6000.c (output_option, m_options, output_options): Delete. - * rs6000/rs6000.h (ASM_OUTPUT_OPTIONS): Delete. + * mips.h (ASM_COMMENT_START): Change from "\t\t#" to " #". + * rs6000.c (output_option, m_options, output_options): Delete. + * rs6000.h (ASM_OUTPUT_OPTIONS): Delete. (ASM_COMMENT_START): Define. (ASM_FILE_START): Delete option output support. * rs6000/sysv4.h (ASM_FILE_START): Likewise. * rs6000/win-nt.h (ASM_FILE_START): Likewise. Delete duplicate. - * sh/sh.c (output_option, m_options, output_options): Delete. + * sh.c (output_option, m_options, output_options): Delete. (output_file_start): Delete option output support. - * sh/sh.h (ASM_FILE_START): Likewise. + * sh.h (ASM_FILE_START): Likewise. (ASM_COMMENT_START): Define. * dwarfout.c (*): flag_verbose_asm renamed to flag_debug_asm. * flags.h (flag_debug_asm): Declare. @@ -12080,13 +12947,13 @@ Wed May 15 13:35:11 1996 Michael Meissner * rs6000.md (move_to_float): Rewrite so that it uses the register allocator to allocate the stack temp, instead of calling rs6000_stack_temp. - (fix_truncdfsi2): Ditto. + (fix_truncdfsi2): Likewise. * rs6000.c (rs6000_stack_temp): Delete, no longer used. Wed May 15 10:39:27 1996 Jeffrey A. Law - * h8300/h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define. + * h8300.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Define. Sat May 11 07:42:59 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -12143,53 +13010,47 @@ Thu May 9 13:31:58 1996 Michael Meissner * rs6000.c (rs6000_sdata{,_name}): Add support for finer grain control on -msdata. - (output_options): Ditto. - (small_data_operand): Ditto. - (print_operand): Ditto. - (rs6000_select_section): Ditto. + (output_options, small_data_operand, print_operand): Likewise. + (rs6000_select_section): Likewise. (rs6000_encode_section_info): Move here from sysv4.h, section names are stored as STRING nodes, not IDENTIFIER. Wed May 8 21:04:49 1996 Doug Evans * function.c (aggregate_value_p): Return 1 if TREE_ADDRESSABLE. - * pa/pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE. + * pa.h (RETURN_IN_MEMORY): No longer test for TREE_ADDRESSABLE. Tue May 7 13:42:57 1996 Jeffrey A. Law - * h8300/h8300.c: Include obstack.h. + * h8300.c: Include obstack.h. (bit_memory_operand): New function. (print_operand): Append ":16" to a memory reference to the tiny data area. (h8300_tiny_data_p): New function. - (h8300_valid_machine_decl_attribute): Accept "tiny_data". Fix - typo. + (h8300_valid_machine_decl_attribute): Accept "tiny_data". Fix typo. (h8300_encode_label): New function. (h8300_adjust_insn_length): References to the tiny data section are two bytes shorter than normal accesses on the H8/300H. - * h8300/h8300.h (OK_FOR_U): Fix thinko. + * h8300.h (OK_FOR_U): Fix thinko. (ENCODE_SECTION_INFO): Encode info for tiny data variables. (STRIP_NAME_ENCODING): Define. - * h8300/h8300.md (movqi insn): Fix length for a constant load. - (movstrictqi): Likewise. - (movhi, movstricthi): Likewise. + * h8300.md (movqi insn): Fix length for a constant load. + (movstrictqi, movhi, movstricthi): Likewise. (memory btst patterns): Add register to the constraints to keep reload happy. - * h8300/h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int))) - is a valid U operand if SYMBOL_REF_FLAG is set on the - SYMBOL_REF. - * h8300/h8300.md (memory btst patterns): New patterns. + * h8300.h (OK_FOR_U): (const (plus (symbol_ref) (const_int))) + is valid U operand if SYMBOL_REF_FLAG is set on SYMBOL_REF. + * h8300.md (memory btst patterns): New patterns. - * h8300/h8300.c (h8300_eightbit_data_p): Renamed from - h8300_tiny_data_p. + * h8300.c (h8300_eightbit_data_p): Renamed from h8300_tiny_data_p. (h8300_eightbit_data_p): Check for the "eightbit_data" attribute instead of "tiny_data". (h8300_valid_machine_decl_attribute): Likewise. - * h8300/h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p + * h8300.h (ENCODE_SECTION_INFO): Call h8300_eightbit_data_p instead of h8300_tiny_data_p. - * h8300/h8300.h (READONLY_DATA_SECTION): Define. + * h8300.h (READONLY_DATA_SECTION): Define. (EXTRA_SECTIONS): Add in_readonly_data. (READONLY_DATA_SECTION_ASM_OP): Define. (EXTRA_SECTION_FUNCTINOS): Add readonly_data. @@ -12375,10 +13236,9 @@ Wed May 1 13:28:32 1996 Jason Merrill Wed May 1 01:44:47 1996 Jeffrey A. Law - * h8300/h8300.c (h8300_adjust_insn_length): Adjust the cost of + * h8300.c (h8300_adjust_insn_length): Adjust the cost of shifts by small constant values. - * h8300/h8300.md: Refine comments. Remove names from many - patterns which don't need them. + * h8300.md: Remove names from many patterns which don't need them. (compare insns): Don't underestimate lengths. (andqi3 expander): Remove constrains. (andhi3): Don't underestimate length. @@ -12387,8 +13247,7 @@ Wed May 1 01:44:47 1996 Jeffrey A. Law (indirect_jump_h8300, indirect_jump_h8300h): Simplify. (shift insns): Remove useless "I" constraint. - * h8300/h8300.md (bcs type): Remove "bcs" type attribute and - all references. + * h8300.md (bcs type): Remove "bcs" type attribute and all references. (bcs insns): Delete. No longer needed. (setcc from bitfield): Rewrite to use zero_extract. Provide QImode, HImode and SImode variants. @@ -12404,10 +13263,10 @@ Tue Apr 30 17:26:30 1996 Jason Merrill Tue Apr 30 16:52:41 1996 Jeffrey A. Law - * h8300/h8300.c (one_insn_adds_subs_operand): New function. + * h8300.c (one_insn_adds_subs_operand): New function. (h8300_adjust_insn_length): New function. - * h8300/h8300.h (ADJUST_INSN_LENGTH): Define. - * h8300/h8300.md: Remove obsolete comments. + * h8300.h (ADJUST_INSN_LENGTH): Define. + * h8300.md: Remove obsolete comments. (move patterns): Tweak constraints. (tst patterns): Use "register_operand" for predicate. (adds pattern): Use one_insn_adds_subs_operand to get length @@ -12428,36 +13287,31 @@ Mon Apr 29 13:03:12 1996 Doug Evans Mon Apr 29 00:35:15 1996 Jeffrey A. Law - * h8300/h8300.c (names_small): Remove "BAD" postfix from - %r7 byte registers. + * h8300.c (names_small): Remove "BAD" postfix from %r7 byte registers. (rtx_equal_function_value_matters): Remove extra declaration. (output_simode_bld): New function. - * h8300/h8300.h (NO_FUNCTION_CSE): Do define this. Register - pressure makes cse-ing function addresses rarely a win. - (reg_class): Remove unnecessary register classes LONG_REGS, - SP_REG, SP_AND_G_REGS. - (REG_CLASS_NAMES): Corresponding changes. - (REG_CLASS_CONTENTS): Corresponding changes. + * h8300.h (NO_FUNCTION_CSE): Do define this. + (reg_class): Remove LONG_REGS, SP_REG, SP_AND_G_REGS. + (REG_CLASS_{NAMES,CONTENTS,FROM_LETTER}): Corresponding changes. (REGNO_REG_CLASS): Corresponding changes. - (REG_CLASS_FROM_LETTER): Corresponding chagnes. (output_simode_bld): Declare. - * h8300/h8300.md: Nuke comments for stuff which has been fixed. + * h8300.md: Nuke comments for stuff which has been fixed. (all patterns): Remove references to register class "a" (SP_REGS) which no longer exists. (many patterns): Accept auto-inc auto-dec addresses in more cases. (zero_extendqisi2): New pattern for the H8/300. - (zero_extendhisi2): Only use zero_extendhisi2_h8300 when not optimizing. + (zero_extendhisi2): Only use zero_extendhisi2_h8300 when not + optimizing. (extendhisi2): Only use extendhisi2_h8300 when not optimizing. (extendqisi2): New pattern for the H8/300. (bitfield related patterns): Completely rewrite. - (fancy_bclr, fancy_btst): Deleted. Redundant with new bitfield - patterns. + (fancy_bclr, fancy_btst): Deleted. (addhi3 pattern for h8300): Handle case where we can't make matching constraints (works around hard to fix reload problem). (stack_pointer_manip): Delete. (and not patterns): New combiner patterns. - * pa/pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the + * pa.h (DBX_OUTPUT_MAIN_SOURCE_FILE_END): Make sure the final $CODE$ subspace is in the $TEXT$ space. Sun Apr 28 14:52:21 1996 Jason Merrill @@ -12475,12 +13329,12 @@ Sat Apr 27 10:28:59 1996 Michael Meissner Fri Apr 26 16:10:46 1996 Doug Evans - * sparc/sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on + * sparc.md (*smacsi,*smacdi,*umacdi): Fix constraint on operand 0. Fri Apr 26 14:36:33 1996 Michael Meissner - * gcc/config/i960/t-{960bare,vxworks960} (MULTILIB*): Add + * i960/t-{960bare,vxworks960} (MULTILIB*): Add soft-float multilib support. Fri Apr 26 06:38:56 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -12539,10 +13393,9 @@ Wed Apr 24 11:12:06 1996 Michael Meissner (eabi.S): Use eabi.S, not eabi.s for eabi.asm. (crt files): Add support for Solaris crt files. - * rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris - support. + * rs6000/sol{2.h,-c0.c,-ci.asm,-cn.asm}: New files for Solaris. - * rs6000/linux.h: New file for Linux support. + * rs6000/linux.h: New file for Linux-based GNU system support. * rs6000/eabi-ci.asm (ppc-asm.h): Include. (.got section): Correct attribute. @@ -12558,14 +13411,14 @@ Wed Apr 24 11:12:06 1996 Michael Meissner * rs6000/{eabi,sysv}.h: Move most eabi configuration stuff from eabi.h to sysv.h. - * rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from a switch into - an option. Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi} - options. Add -m{,no-}eabi options to control whether we adhere to + * rs6000/sysv.h (TARGET_*): Convert -mcall-xxx from switch into option. + Add -mcall-{solaris,linux,sysv-eabi,sysv-noeabi} options. + Add -m{,no-}eabi options to control whether we adhere to the System V spec or the EABI spec. Add -m{,no-}regnames to control whether registers are printed out as %r0 instead of 0. (SUBTARGET_OVERRIDE_OPTIONS): Add support for new -mcall options. (FP_ARG_MAX_REG): Use new macros for ABI conformance. - (RS6000_REG_SAVE): Ditto. + (RS6000_REG_SAVE): Likewise. (STACK_BOUNDARY,BIGGEST_ALIGNMENT): If eabi, align to 8 byte boundary, otherwise 16 byte. (EXTRA_SECTIONS): Add .init, .fini sections. @@ -12584,19 +13437,15 @@ Wed Apr 24 11:12:06 1996 Michael Meissner * rs6000.c (rs6000_abi_name): New global for getting the results of -mcall-xxx. - (rs6000_reg_names): New global for holding the normal register - names. + (rs6000_reg_names): New global for holding the normal register names. (alt_reg_names): Alternate register names for -mregnames. (rs6000_override_options): If -mregnames, copy alt_reg_names into rs6000_reg_names. (input_operand): Recognize ABI_SOLARIS. - (small_data_operand): Ditto. - (init_cumulative_args): Ditto. - (function_arg{,_boundary,_advance,_partial_nregs}): Ditto. - (function_arg_pass_by_reference): Ditto. - (setup_incoming_varargs): Ditto. - ({rs6000,debug}_stack_info): Ditto. - (output_{prolog,epilog}): Ditto. + (small_data_operand, init_cumulative_args): Likewise. + (function_arg{,_boundary,_advance,_partial_nregs}): Likewise. + (function_arg_pass_by_reference, setup_incoming_varargs): Likewise. + ({rs6000,debug}_stack_info, output_{prolog,epilog}): Likewise. (print_operand): %$ prints '.' on Solaris, '$' elsewhere. (print_operand{,_address}): If not eabi, use @sdarel for small data references. @@ -12605,10 +13454,8 @@ Wed Apr 24 11:12:06 1996 Michael Meissner * rs6000.h (*_SPECS): Move the System V specs to svr4.h. (ABI_SOLARIS): New ABI, mostly like System V. (EXTRA_CONSTRAINT): Use ABI_SOLARIS like ABI_V4. - (RETURN_ADDRESS_OFFSET): Ditto. - (LEGITIMATE_SMALL_DATA_P): Ditto. - (RETURN_IN_MEMORY): On Solaris, small structures are returned in - registers. + (RETURN_ADDRESS_OFFSET, (LEGITIMATE_SMALL_DATA_P): Likewise. + (RETURN_IN_MEMORY): On Solaris, small structures are returned in regs. (REGISTER_NAMES): Use rs6000_reg_names array, instead of string literals. (DEBUG_REGISTER_NAMES): Define. @@ -12623,10 +13470,10 @@ Wed Apr 24 11:12:06 1996 Michael Meissner Tue Apr 23 20:02:13 1996 Doug Evans - * sparc/sparc.c (output_function_prologue): In -mbroken-saverestore + * sparc.c (output_function_prologue): In -mbroken-saverestore case, %sp = %fp - size. * sparc/t-splet (TARGET_LIBGCC2_CFLAGS): Delete. - * sparc/sparc.md (isa attribute): Add sparclet. + * sparc.md (isa attribute): Add sparclet. (*smacsi,*smacdi,*umacdi): Use match_operand, not match_dup for third arg. (*mulsidi3_sp32,const_mulsidi3,*umulsidi3_sp32,const_umulsidi3): Use @@ -12634,7 +13481,7 @@ Tue Apr 23 20:02:13 1996 Doug Evans Tue Apr 23 16:28:28 1996 Michael Meissner - * config/m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so + * m68k/m68kemb.h: Add {LINK,STARTFILE,LIB,SUBTARGET}_SPEC, so gcc will use libgloss for supported target boards {idp,mvme,bcc}. Tue Apr 23 16:00:28 1996 Per Bothner @@ -12643,7 +13490,7 @@ Tue Apr 23 16:00:28 1996 Per Bothner Tue Apr 23 11:21:09 1996 Stephen L Moshier (moshier@world.std.com) - * config/i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive. + * i386/sco5.h (BSS_SECTION_ASM_OP): Use `data' directive. (ASM_OUTPUT_ALIGNED_LOCAL): Generate an `lcomm' directive. (TARGET_DEFAULT): Include TARGET_IEEE_FP. (CPP_PREDEFINES): Include Di386. @@ -12714,12 +13561,10 @@ Thu Apr 18 15:49:28 1996 Per Bothner Thu Apr 18 15:19:26 1996 Jeffrey A. Law - * h8300.md: Remove "type" attribute from all patterns - except those which have varying length branches. Eliminate - obsolete "type" attributes. Add additional comments about insn - length computation problems and further optimizations. Add - "length" and "cc" attributes to insns without them, fix a few - length computations. Remove patterns which are commented out. + * h8300.md: Remove "type" attribute from all patterns except those + which have varying length branches. Eliminate obsolete "type" + attributes. Add "length" and "cc" attributes to insns without them; + fix some length computations. Remove patterns which are commented out. * h8300.md (zero extension expanders and insns): Simplify, fix various length problems, provide optimized versions for the h8300 and h8300h. @@ -12778,10 +13623,9 @@ Tue Apr 16 18:53:05 1996 Jim Wilson Tue Apr 16 18:09:16 1996 Jeffrey A. Law - * h8300/h8300.md (andhi3): If 2nd operand is a CONST_INT that - meets the 'J' constraint, then only two bytes are needed for - this insn. Improve code generated for the h8300h when both - operands are registers. + * h8300.md (andhi3): If 2nd operand is a CONST_INT that meets 'J' + constraint, then only two bytes are needed for this insn. Improve + code generated for the h8300h when both operands are registers. (iorhi3, xorhi3): Likewise. Rework to be nearly identical to andhi3. (andsi3): If 2nd operand is a CONST_INT that meets the 'J' constraint, then only two bytes are need for this insn. @@ -13103,10 +13947,8 @@ Fri Apr 12 18:19:39 1996 Jeffrey A. Law (bcs_qiqi, bcs_hihi, bs_hiqi): Use new type and update to account for correct length computation. - * h8300/h8300.md (movhi_internal): Demand at least one operand to - be a register. - (movsi_h8300): Optimize loading certain constants. - (movsi_h8300h): Likewise. + * h8300.md (movhi_internal): Demand at least one operand to be reg. + (movsi_h8300{{,h}): Optimize loading certain constants. * h8300.h (NO_FUNCTION_CSE): Comment out. (FUNCTION_ARG_REGNO_P): Properly define for TARGET_QUICKCALL. @@ -13123,8 +13965,7 @@ Fri Apr 12 18:19:39 1996 Jeffrey A. Law operand is not a register. Update some comments. (h8300_tiny_data_p): New function. (h8300_valid_machine_decl_attribute): Handle "tiny_data" attribute. - * h8300.h (OK_FOR_U): Handle memory references into the - 8-bit area. + * h8300.h (OK_FOR_U): Handle memory references into 8-bit area. (ENCODE_SECTION_INFO): Mark SYMBOL_REFs which refer to 8-bit area. * h8300.md (many patterns): Use 'R' rather than 'X' for operands that may be memory accesses into the 8-bit area. @@ -13169,9 +14010,8 @@ Thu Apr 11 00:48:29 1996 Jeffrey A. Law but gets the sign bit right for modulo operations. (__modhi3, modsi3): Use modnorm. - * h8300/h8300.c (dosize): On the h8300h, do 4 byte adjustments - using adds and subs. - * h8300/h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits. + * h8300.c (dosize): On h8300h, do 4 byte adjusts using adds and subs. + * h8300.h (LONG_LONG_TYPE_SIZE): Always make this 32bits. Reverses change from Apr 2, 1996. Wed Apr 10 18:39:52 1996 Doug Evans @@ -13259,8 +14099,7 @@ Mon Apr 8 13:01:37 1996 Michael Meissner (rs6000_pic_register): New variable. (output_epilog): Reset rs6000_pic_register. - * rs6000.h (rs6000_pic_register,got_operand,flag_pic): Add - declarations. + * rs6000.h (rs6000_pic_register, got_operand, flag_pic): Add decls. (PREDICATE_CODES): Add got_operand. * rs6000.md (movsi): Add support for V.4's -fpic and -FPIC. @@ -13300,7 +14139,7 @@ Thu Apr 4 12:52:11 1996 Jim Wilson Thu Apr 4 12:19:26 1996 David Mosberger-Tang - * alpha.c: Don't include stamp.h for Linux. + * alpha.c: Don't include stamp.h for Linux-based GNU systems. Thu Apr 4 12:17:08 1996 Richardg Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -13387,3 +14226,10 @@ Mon Apr 1 13:45:30 1996 Jeffrey A. Law the function vector have a length of two bytes. See ChangeLog.10 for earlier changes. + +Use a consistent time stamp format in ChangeLog entries. +Not everyone has Emacs 20 yet, so stick with Emacs 19 format for now. + +Local Variables: +add-log-time-format: current-time-string +End: diff --git a/gcc/ChangeLog.10 b/gcc/ChangeLog.10 index ad1669210df..a7d3837d103 100644 --- a/gcc/ChangeLog.10 +++ b/gcc/ChangeLog.10 @@ -4,7 +4,6 @@ Sun Mar 31 05:10:10 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) if the mode of the field type is not MODE_INT. * sched.c (schedule_block): CALL_INSNs don't affect fixed regs. - * flow.c (propagate_block): CALL_INSNs don't kill fixed regs. Sat Mar 30 03:32:48 1996 Torbjorn Granlund @@ -33,7 +32,7 @@ Fri Mar 29 09:37:52 1996 Jeffrey A. Law (emit_library_call_value): Likewise. * expr.c (expand_builtin): Likewise. * function.c (assign_parms): Likewise. - * config/pa/pa.h (hppa_args): New field "indirect". + * pa.h (hppa_args): New field "indirect". (INIT_CUMULATIVE_ARGS): Initialize "indirect" field. (FUNCTION_ARG): Check "indirect" field, rather than "current_call_is_indirect". @@ -79,7 +78,7 @@ Thu Mar 28 16:50:10 1996 Doug Evans Thu Mar 28 12:07:31 1996 Jeffrey A. Law - * ginclude/va-h8300.h (va_arg): Don't assume sizeof (int) == 4. + * va-h8300.h (va_arg): Don't assume sizeof (int) == 4. * pa.c (hppa_legitimize_address): Don't lose for (plus (plus (mult (A) (shadd_const)) (B)) (C)) if @@ -218,15 +217,15 @@ Wed Mar 20 17:07:45 1996 Doug Evans * sparc/sol2.h (ASM_CPU_SPEC): Recognize -mcpu=v8plus, not v9. Fix typo in ultrasparc entry. - * sparc/sparc.h (CPP_CPU_SPEC): Add v8plus entry. + * sparc.h (CPP_CPU_SPEC): Add v8plus entry. (ASM_CPU_SPEC): Likewise. - * sparc/sparc.c (fcc_reg_operand): Ensure correct mode. + * sparc.c (fcc_reg_operand): Ensure correct mode. (icc_or_fcc_reg_operand): Likewise. (gen_v9_scc): IF_THEN_ELSE must have a mode. (print_operand): New operand code `x' for all condition codes. New operand codes `c,d' for reversed conditional moves. - * sparc/sparc.md (movqicc,movhicc): New named patterns. + * sparc.md (movqicc,movhicc): New named patterns. (movdicc): if_then_else must have a mode. (movsicc,movsfcc,movdfcc,movtfcc): Likewise. Change condition to TARGET_V9, not TARGET_ARCH64. @@ -489,7 +488,7 @@ Tue Mar 12 13:54:15 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Tue Mar 12 12:43:27 1996 Jim Wilson - * i960/i960.h (ROUND_TPE_SIZE): Return round_up result instead of + * i960.h (ROUND_TYPE_SIZE): Return round_up result instead of COMPUTED. * expr.c (expand_expr, case COMPONENT_REF): For unaligned object in @@ -504,16 +503,16 @@ Mon Mar 11 19:07:50 1996 Jeffrey A. Law Mon Mar 11 16:06:13 1996 Doug Evans - * h8300/h8300.h (SP_AND_G_REGS): Renamed from SP_AND_G_REG. + * h8300.h (SP_AND_G_REGS): Renamed from SP_AND_G_REG. (CC_DONE_CBIT): Delete. (CC_OVERFLOW_0,CC_OVERFLOW_UNUSABLE,CC_NO_CARRY): Define. - * h8300/h8300.c (cond_string): Delete CC_DONE_CBIT handling. + * h8300.c (cond_string): Delete CC_DONE_CBIT handling. (notice_update_cc): Delete CC_CBIT, CC_WHOOPS. Add CC_SET_ZN_C0. (restore_compare_p): New function. (shift_one): Use shll instead of shal so overflow bit is usable. Set cc_valid bits to cc_status.flags values. (emit_a_shift): Set cc_status.flags. - * h8300/h8300.md (attr cc): Delete whoops,cbit. Add set_zn_c0. + * h8300.md (attr cc): Delete whoops,cbit. Add set_zn_c0. (all patterns) Update cc attr setting. (tstqi,tsthi,tstsi): Delete CC_DONE_CBIT handling. (addhi3,subhi3): Change define_expand to define_insn. @@ -559,7 +558,7 @@ Fri Mar 8 15:37:31 1996 Mike Stump Fri Mar 8 16:14:51 1996 J"orn Rennecke (amylaar@meolyon.hanse.de) - * i386.c (ix86_binary_operator_ok): one memory operand is OK. + * i386.c (ix86_binary_operator_ok): One memory operand is OK. This is independent of commutativity. Fri Mar 8 14:07:43 1996 Jim Wilson @@ -586,7 +585,7 @@ Thu Mar 7 19:14:21 1996 Doug Evans * sparc/splet.h: New file. * configure (sparclet-*-aout*): Use them. - * sparc/sparc.h (MASK_LIVE_G0,TARGET_LIVE_G0): Define. + * sparc.h (MASK_LIVE_G0,TARGET_LIVE_G0): Define. (FIRST_PSEUDO_REGISTER): Add 1 for %icc (now 101). (FIXED_REGISTERS,CALL_USED_REGISTERS): Update. (FIXED_REGISTERS): %g0 is fixed by default. @@ -601,7 +600,7 @@ Thu Mar 7 19:14:21 1996 Doug Evans (REG_OK_FOR_{BASE,INDEX}_P,EXTRA_CONSTRAINT): Likewise. (REGISTER_NAMES): Add %icc. (ADDITIONAL_REGISTER_NAMES): Use SPARC_ICC_REG. - * sparc/sparc.c (leaf_reg_remap): Add %icc=100. + * sparc.c (leaf_reg_remap): Add %icc=100. (reg_or_0_operand): Don't allow 0 if TARGET_LIVE_G0. (fcc_reg_operand): Renamed from ccfp_reg_operand. Use SPARC_FCC_REG. Don't treat reg 0 as an fcc reg. Don't match @@ -624,7 +623,7 @@ Thu Mar 7 19:14:21 1996 Doug Evans (print_operand, MEM op): Don't print "%g0+" if TARGET_LIVE_G0. (sparc_flat_eligible_for_epilogue_delay): Don't allow anything if TARGET_LIVE_G0. - * sparc/sparc.md (live_g0): New attribute. + * sparc.md (live_g0): New attribute. (*): Integer condition code register is now reg 100. Use SPARC_ICC_REG instead of hardcoding reg 100 where possible. Non-v9 floating point condition code register is now reg 96. @@ -986,7 +985,7 @@ Thu Feb 29 17:33:12 1996 Jim Wilson Thu Feb 29 13:59:27 1996 Doug Evans - * h8300/h8300.h (ASM_OUTPUT_BSS): Define. + * h8300.h (ASM_OUTPUT_BSS): Define. * m68k/coff.h (BSS_SECTION_ASM_OP): Define. (ASM_OUTPUT_ALIGNED_BSS): Define. * m68k/m68k-aout.h (BSS_SECTION_ASM_OP): Define. @@ -1009,9 +1008,9 @@ Thu Feb 29 13:14:14 1996 Jeffrey A. Law Thu Feb 29 11:39:30 1996 Stan Cox - * i386/i386.md (cmpxf*): XF compare cannot have mem operands. + * i386.md (cmpxf*): XF compare cannot have mem operands. (casesi expand): Put (minus:SI..) into subsi3 format. - * i386/i386.c (i386_return_pops_args): Cleanup extra argument + * i386.c (i386_return_pops_args): Cleanup extra argument used as address of a returned structure. Wed Feb 28 22:24:28 1996 Doug Evans @@ -1028,10 +1027,10 @@ Wed Feb 28 22:24:28 1996 Doug Evans (EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION. * svr3.h (EXTRA_SECTIONS): Likewise. (BSS_SECTION_FUNCTION): Delete. - * convex/convex.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete. - * dsp16xx/dsp16xx.h (EXTRA_SECTIONS): Delete in_bss. + * convex.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete. + * dsp16xx.h (EXTRA_SECTIONS): Delete in_bss. (EXTRA_SECTION_FUNCTIONS): Delete bss_section. - * gmicro/gmicro.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete. + * gmicro.h (EXTRA_SECTIONS,EXTRA_SECTIONS_FUNCTIONS): Delete. * i386/aix386ng.h (EXTRA_SECTION_FUNCTIONS): Delete BSS_SECTION_FUNCTION. * i386/att.h (BSS_SECTION_FUNCTION): Delete. @@ -1047,7 +1046,7 @@ Wed Feb 28 22:24:28 1996 Doug Evans (BSS_SECTION_ASM_OP): Define. * m68k/m68k.h (BC_OUTPUT_BSS): Define. * mips/iris6.h (EXTRA_SECTIONS): Delete in_bss. - * pa/pa.h (EXTRA_SECTIONS): Delete in_bss. + * pa.h (EXTRA_SECTIONS): Delete in_bss. (EXTRA_SECTION_FUNCTIONS): Delete bss_section. * sparc/litecoff.h (EXTRA_SECTIONS): Delete in_bss. @@ -1059,9 +1058,9 @@ Wed Feb 28 14:12:25 1996 Jim Wilson Wed Feb 28 12:03:26 1996 Michael Meissner - * rs6000.c (rs6000_trampoline_{template,size}): Change the Windows - NT trampoline template so that it doesn't require making the stack - executable. Add support for 64 bit systems. + * rs6000.c (rs6000_trampoline_{template,size}): Change Windows NT + trampoline template so it doesn't require making stack executable. + Add support for 64 bit systems. (rs6000_initialize_trampoline): Ditto. Tue Feb 27 16:42:00 1996 David Edelsohn @@ -1074,7 +1073,7 @@ Tue Feb 27 16:42:00 1996 David Edelsohn Tue Feb 27 15:02:17 1996 Doug Evans - * sh/sh.h (HANDLE_PRAGMA): Delete `return'. + * sh.h (HANDLE_PRAGMA): Delete `return'. Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk) @@ -1139,7 +1138,7 @@ Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk) Mon Feb 26 17:26:13 1996 Doug Evans - * sparc/sparc.md: Add sparclet scheduling parameters. + * sparc.md: Add sparclet scheduling parameters. (compare define_insn's): Move closer to compare define_expand's. (32 bit multiply patterns): Use for TARGET_SPARCLET. (*smacsi,*smacdi,*umacdi): Multiply/accumulate patterns for the @@ -1180,7 +1179,7 @@ Thu Feb 22 17:45:12 1996 Doug Evans Wed Feb 21 20:39:53 1996 Doug Evans * configure (sparc64-*-solaris2*): Merge with sparc-*-solaris2*. - * sparc/sparc.h (enum processor_type): Declare. + * sparc.h (enum processor_type): Declare. (sparc_cpu_attr): Define. (TARGET_OPTIONS): Add -mtune=. (sparc_select): Declare. @@ -1195,13 +1194,13 @@ Wed Feb 21 20:39:53 1996 Doug Evans (REG_ALLOC_ORDER,REG_LEAF_ALLOC_ORDER,LEAF_REGISTERS): Likewise. (FP_REG_CLASS_P,SPARC_REGISTER_NAMES): Likewise. (REG_CLASS_FROM_LETTER): Test TARGET_V9 at runtime. - * sparc/sparc.c (sparc_cpu_string): Delete. + * sparc.c (sparc_cpu_string): Delete. (sparc_select): New global. (sparc_override_options): Handle -mtune=xxx. - * sparc/sparc.md (cpu attr): Add sparc{lite,let} implementations. + * sparc.md (cpu attr): Add sparc{lite,let} implementations. * sparc/sp64-sol2.h: Deleted. - * arm/arm.md (consttable_end): Delete call to text_section. + * arm.md (consttable_end): Delete call to text_section. (align_4): Delete call to readonly_data_section. Wed Feb 21 14:29:06 1996 Ian Lance Taylor @@ -1221,7 +1220,7 @@ Wed Feb 21 12:42:52 1996 Jeffrey A. Law Wed Feb 21 11:49:58 1996 David Edelsohn - * rs6000/rs6000.h (ASM_OUTPUT_EXTERNAL): Append section info + * rs6000.h (ASM_OUTPUT_EXTERNAL): Append section info even when verbatim symbol prefix '*' present. * rs6000/aix3newas.h (ASM_OUTPUT_EXTERNAL): Same. * rs6000/aix41.h (ASM_OUTPUT_EXTERNAL): Same. @@ -1234,10 +1233,8 @@ Wed Feb 21 03:55:32 1996 Paul Eggert Handle multiple adjacent backslash-newlines correctly. Accept a new parameter LIMIT to specify end of input; this prevents confusion when the input contains '\0' characters. - (collect_expansion): Fix off-by-1 error when searching for `*/' at end of a comment used for traditional token concatenation. - (macarg1): Fix off-by-1 error when skipping past `*/' at end of comment. @@ -1254,7 +1251,7 @@ Tue Feb 20 14:21:16 1996 Jeffrey A. Law Mon Feb 19 19:42:15 1996 Brendan Kehoe - * sparc/sparc.h (TARGET_SWITCHES): Add -m{,no-}impure-text. + * sparc.h (TARGET_SWITCHES): Add -m{,no-}impure-text. (MASK_IMPURE_TEXT, TARGET_IMPURE_TEXT): Define. (LINK_SPEC): Only add `-assert pure-text' if -mimpure-text wasn't used. @@ -1266,7 +1263,7 @@ Mon Feb 19 19:20:15 1996 Doug Evans Don't set use_collect2. (target_cpu_default): Set to TARGET_CPU_ for sparc. - * sparc/sparc.h (TARGET_CPU_sparc{,let,lite,64}): Define. + * sparc.h (TARGET_CPU_sparc{,let,lite,64}): Define. ({CPP,ASM}_DEFAULT_SPEC): Set from TARGET_CPU_foo. (SPARC_ARCH64 CPP_PREDEFINES): Define __arch64__. (CPP_SPEC): Add %(cpp_cpu). @@ -1288,7 +1285,7 @@ Mon Feb 19 19:20:15 1996 Doug Evans Don't set call_used_regs[48..80] for sparc64 in 32 bit mode. Don't clobber fixed_regs[234] if -ffixed- was passed. (ADJUST_COST): Change test for supersparc. - * sparc/sparc.c (sparc_cpu_string,sparc_cpu): New globals. + * sparc.c (sparc_cpu_string,sparc_cpu): New globals. (sparc_override_options): Set ISA and CPU from sparc_cpu_string. Delete tests for v9 only switches if not v9. Error if -mcpu=v9 and v9 support not compiled in. @@ -1299,7 +1296,7 @@ Mon Feb 19 19:20:15 1996 Doug Evans * sparc/t-sparcbare (MULTILIB_*): -mv8 renamed to -mcpu=v8. * sparc/t-sparclite (MULTILIB_*): Delete msoft-float and mno-flat, they're the defaults. Add -mcpu=f934 as synonym for -mfpu. - * ginclude/va-sparc.h (__arch64__): Renamed from __sparc_v9__. + * va-sparc.h (__arch64__): Renamed from __sparc_v9__. * sparc/lite.h: #include aoutos.h. (TARGET_DEFAULT): Use MASK_FOO values. @@ -1311,13 +1308,13 @@ Mon Feb 19 19:20:15 1996 Doug Evans * sparc/sp64-sol2.h (TARGET_DEFAULT, SUBTARGET_SWITCHES): Delete. (ASM_SPEC): Delete. - * sparc/sparc.h ({MASK,TARGET}_FRW): Delete. + * sparc.h ({MASK,TARGET}_FRW): Delete. (FRAME_POINTER_REQUIRED,INITIAL_FRAME_POINTER_OFFSET, BASE_{INCOMING_ARG,OUTGOING_VALUE}_REG,INCOMING_REGNO,OUTGOING_REGNO, FUNCTION_{PROLOGUE,EPILOGUE},DELAY_SLOTS_FOR_EPILOGUE): TARGET_FRW renamed to TARGET_FLAT. - * sparc/sparc.md (cpu attr): Add all cpu variants. + * sparc.md (cpu attr): Add all cpu variants. (negtf2,negdf2,abstf2,absdf2): Use isa attr, not arch attr, in determining insn lengths. @@ -1327,7 +1324,7 @@ Mon Feb 19 19:20:15 1996 Doug Evans Mon Feb 19 17:49:08 1996 David Edelsohn - * rs6000.md (movsf split): Use SUBREG not operand_subword. + * rs6000.md (movsf split): Use SUBREG, not operand_subword. (movdf split): operand_subword TARGET_32BIT and new split using SUBREG for TARGET_64BIT. * rs6000.c (easy_fp_constant): Rewrite to not use operand_subword. @@ -1342,14 +1339,14 @@ Mon Feb 19 13:38:00 1996 Lee Iverson Mon Feb 19 08:19:00 1996 Michael Meissner - * hard-reg-set.h (HARD_REG macros): If there are more than + * hard-reg-set.h (HARD_REG macros): If more than HOST_BITS_PER_WIDE_INT hard registers and less than or equal to - 4*HOST_BITS_PER_WIDE_INT hard registers, unroll the loops by hand. + 4*HOST_BITS_PER_WIDE_INT hard registers, unroll loops by hand. Mon Feb 19 07:35:07 1996 Torbjorn Granlund * rs6000.md (not:SI with assign and compare): Fix typo. - * (not:DI with assign and compare): Likewise. + (not:DI with assign and compare): Likewise. Mon Feb 19 07:17:25 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -1421,7 +1418,6 @@ Fri Feb 16 20:13:23 1996 Paul Eggert * c-typeck.c (convert_for_assignment): Bring back conversion to union without a cast, undoing the Jan 16 change, but with the following differences: - - The union must have the transparent_union attribute. - The conversion must be for a function argument. - Warn consistently about such conversions if pedantic. @@ -1461,8 +1457,7 @@ Thu Feb 15 18:26:04 1996 Michael Meissner byte boundary. * rs6000.md (allocate_stack): On Windows NT, call set_sp to - indicate to CSE that the stack pointer changes with the call to - __allocate_stack. + indicate to CSE stack pointer changes with call to __allocate_stack. (set_sp): New pattern. Thu Feb 15 16:49:15 1996 Jim Wilson @@ -1651,7 +1646,7 @@ Mon Feb 12 14:43:50 1996 Per Bothner Mon Feb 12 12:01:16 1996 Richard Earnshaw (rearnsha@armltd.co.uk) - * arm/arm.h: (CPP_SPEC): Define __ARMEB__, __ARMEL__, and + * arm.h: (CPP_SPEC): Define __ARMEB__, __ARMEL__, and __ARMWEL__ depending on the endian flags passed to the compiler. (ARM_FLAG_LITTLE_WORDS): Define. (TARGET_SWITCHES): Add option -mwords-little-endian. @@ -1659,13 +1654,13 @@ Mon Feb 12 12:01:16 1996 Richard Earnshaw (rearnsha@armltd.co.uk) (WORDS_BIG_ENDIAN): Select based on the endian switches. (LIBGCC2_WORDS_BIG_ENDIAN): Define based on run-time endian defines. - * arm/arm.c (output_move_double): Cope with both word-endian + * arm.c (output_move_double): Cope with both word-endian alternatives. Remove extraneous parameters from calls to output_mov_immediate. (arm_print_operand): New print code 'Q' for the least significant register of a DImode operand. Make code 'R' always print the most significant register, rather than the highest numbered. - * arm/arm.md (all DImode output patterns): Use print code + * arm.md (all DImode output patterns): Use print code 'Q' to access the least significant word. Make sure the patterns are fully aware of the word endianness. @@ -1684,29 +1679,12 @@ Mon Feb 12 10:15:29 1996 Ian Lance Taylor handle --with-stabs by adding dbx.h to tm_file, rather than using a different tm_file. * dbx.h: New file. - * alpha/gdb-osf2.h: Remove. - * alpha/gdb-osf12.h: Remove. - * alpha/gdb.h: Remove. - * i386/sysv4gdb.h: Remove. - * mips/iris5gdb.h: Remove. - * mips/iris4gl.h: Remove. - * mips/iris4gdb.h: Remove. - * mips/iris3gdb.h: Remove. - * mips/dec-gosf1.h: Remove. - * mips/news4-gdb.h: Remove. - * mips/news5-gdb.h: Remove. - * mips/svr4-t-gdb.h: Remove. - * mips/ultrix-gdb.h: Remove. - * mips/bsd-5-gdb.h: Remove. - * mips/bsd-4-gdb.h: Remove. - * mips/svr4-5-gdb.h: Remove. - * mips/svr4-4-gdb.h: Remove. - * mips/svr3-5-gdb.h: Remove. - * mips/svr3-4-gdb.h: Remove. - * mips/mips-5-gdb.h: Remove. - * mips/ecoffl-gdb.h: Remove. - * mips/ecoff-gdb.h: Remove. - * mips/mips-4-gdb.h: Remove. + * alpha/gdb-osf2.h, alpha/gdb-osf12.h, alpha/gdb.h: Deleted. + * i386/sysv4gdb.h, mips/iris{5gdb,4gl,4gdb,3gdb}.h: Likewise. + * mips/dec-gosf1.h, mips/news{4,5}-gdb.h, mips/svr4-t-gdb.h: Likewise. + * mips/ultrix-gdb.h, mips/bsd-{4,5}-gdb.h: Likewise. + * mips/svr{4-5,4-4,3-5,3-4}-gdb.h, mips/mips-5-gdb.h: Likewise. + * mips/ecoff{,l}-gdb.h, mips/mips-4-gdb.h: Likewise. Mon Feb 12 07:22:20 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -1790,7 +1768,7 @@ Fri Feb 9 16:10:04 1996 Stan Cox (coxs@dg-rtp.dg.com) str_immediate_operand, is_fp_insn, is_fp_dest, is_fp_store, agi_dependent, reg_mentioned_in_mem): New functions. - * i386/i386.h (OPTIMIZATION_OPTIONS, ALIGN_DFmode, IS_STACK_MODE, + * i386.h (OPTIMIZATION_OPTIONS, ALIGN_DFmode, IS_STACK_MODE, IX86_EXPAND_BINARY_OPERATOR): New macros. (RTX_COSTS, REGISTER_MOVE_COST, ADJUST_BLOCKAGE) Changed for pentium. @@ -1878,10 +1856,10 @@ Fri Feb 2 19:44:10 1996 Michael Meissner Thu Feb 1 09:10:02 1996 Steve Chamberlain - * config/{i386,rs6000}/cygwin32.{asm,h}: New templates. - * config/{i386,rs6000}/{t,x}-cygwin32: Ditto. - * config/{i386,rs6000}/xm-cygwin32.h: Ditto. - * configure.in (powerpcle-*-cygwin32, i[3456]86-*-cygwin32): New. + * {i386,rs6000}/cygwin32.{asm,h}: New templates. + * {i386,rs6000}/{t,x}-cygwin32: Ditto. + * {i386,rs6000}/xm-cygwin32.h: Ditto. + * configure (powerpcle-*-cygwin32, i[3456]86-*-cygwin32): New. Fri Feb 2 17:42:40 1996 Paul Eggert @@ -1893,8 +1871,7 @@ Fri Feb 2 17:42:40 1996 Paul Eggert Fri Feb 2 11:05:27 1996 Doug Evans - * h8300/h8300.h (TARGET_ALIGN_300): Renamed from - TARGET_ALIGN_STRUCT_300. + * h8300.h (TARGET_ALIGN_300): Renamed from TARGET_ALIGN_STRUCT_300. (TARGET_SWITCHES): Rename -malign-struct-300 to -malign-300. (BIGGEST_ALIGNMENT): Use TARGET_ALIGN_300. @@ -1917,9 +1894,9 @@ Thu Feb 1 21:49:02 1996 Jeffrey A. Law Thu Feb 1 17:50:02 1996 Doug Evans * c-lex.c (check_newline): Return result of HANDLE_PRAGMA. - * h8300/h8300.h (HANDLE_PRAGMA): Pass result back to caller. + * h8300.h (HANDLE_PRAGMA): Pass result back to caller. * i960/i960.h (HANDLE_PRAGMA): Likewise. - * sh/sh.h (HANDLE_PRAGMA): Likewise. + * sh.h (HANDLE_PRAGMA): Likewise. * nextstep.h (HANDLE_PRAGMA): Likewise. Wed Jan 31 19:26:03 1996 Doug Evans @@ -1938,10 +1915,8 @@ Wed Jan 31 15:10:59 1996 David Edelsohn Wed Jan 31 09:46:11 1996 Richard Earnshaw (rearnshaw@armltd.co.uk) - * regs.h (regno_pointer_align, REGNO_POINTER_ALIGN): Delete from - here... - * rtl.h (regno_pointer_align, REGNO_POINTER_ALIGN): ... and put - them here. + * regs.h (regno_pointer_align, REGNO_POINTER_ALIGN): Delete from here. + * rtl.h (regno_pointer_align, REGNO_POINTER_ALIGN): Put them here. Wed Jan 31 08:26:12 1996 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de) @@ -1988,8 +1963,8 @@ Wed Jan 31 07:15:23 1996 Philippe De Muyter (phdm@info.ucl.ac.be) Tue Jan 30 13:29:05 1996 Ian Lance Taylor - * dbxout.c: Don't include . Don't compare strchr result - to NULL. + * dbxout.c: Don't include . + Don't compare strchr result to NULL. * config/svr4.h (ASM_FINAL_SPEC): Use %|, not ${pipe:-}. @@ -2112,7 +2087,7 @@ Thu Jan 25 10:03:34 1996 Michael Meissner Thu Jan 25 09:16:34 1996 Doug Evans * configure (sparc64-*-solaris2*): New target. - * sparc/sparc.h (SPARC_{V9,ARCH64}): Default value is 0. + * sparc.h (SPARC_{V9,ARCH64}): Default value is 0. (*): Replace SPARCV9 with SPARC_{V9,ARCH64}. (MASK_CPUS): Define. ({MASK,TARGET}_ENV32): Delete. @@ -2130,16 +2105,16 @@ Thu Jan 25 09:16:34 1996 Doug Evans (ENDFILE_SPEC): No longer need to check for -nostartfiles. (ASM_IDENTIFY_GCC): Define as empty. * sparc/sp64-sol2.h: New file. - * sparc/sparc.c (*): Replace TARGET_V9 with TARGET_ARCH64. + * sparc.c (*): Replace TARGET_V9 with TARGET_ARCH64. (hard_32bit_mode_classes): Add v9 regs. (gen_v9_scc): Handle 32 bit v9 case. Call v9_regcmp_p. - * sparc/sparc.md (*): Replace TARGET_V9 with TARGET_ARCH64 in places + * sparc.md (*): Replace TARGET_V9 with TARGET_ARCH64 in places requiring 64 bit environment. (multf3_extend): Require TARGET_HARD_QUAD. Thu Jan 25 00:33:25 1996 Ian Lance Taylor - * config/dbxcoff.h (DBX_USE_BINCL): Define. + * dbxcoff.h (DBX_USE_BINCL): Define. (DBX_CONTIN_LENGTH): Define if not defined. Wed Jan 24 18:00:12 1996 Brendan Kehoe @@ -2231,7 +2206,7 @@ Wed Jan 24 15:18:15 1996 Michael Meissner Wed Jan 24 15:18:15 1996 Kim Knuttila - * config/rs6000/win-nt.h (LIB_SPEC): Change options to GNU ld style. + * rs6000/win-nt.h (LIB_SPEC): Change options to GNU ld style. (From Jason Molenda) Wed Jan 24 14:32:48 1996 Jim Wilson @@ -2279,7 +2254,7 @@ Mon Jan 22 18:39:21 1996 Per Bothner Mon Jan 22 16:53:48 1996 David Edelsohn - * rs6000/rs6000.h (BIGGEST_ALIGNMENT): Increase to 64 always. + * rs6000.h (BIGGEST_ALIGNMENT): Increase to 64 always. (BIGGEST_FIELD_ALIGNMENT): Define. (GO_IF_LEGITIMATE_ADDRESS): Merge PRE_INC and PRE_DEC cases. (LEGITIMIZE_ADDRESS): Use Pmode not SImode. @@ -2287,7 +2262,7 @@ Mon Jan 22 16:53:48 1996 David Edelsohn (ASM_OUTPUT_COMMON): Delete. (ASM_OUTPUT_ALIGNED_COMMON): Define. * rs6000/sysv4.h (BIGGEST_FIELD_ALIGNMENT): Undefine. - * rs6000/rs6000.md (adddi3, subdi3, negsi2): New PowerPC64 patterns. + * rs6000.md (adddi3, subdi3, negsi2): New PowerPC64 patterns. (ashldi3, lshrdi3, ashrdi3, anddi3, iordi3, xordi3): Same. (moddi3, cmpdi, tablejump matchers): Same. (divdi3): Update PowerPC64 patterns. @@ -2394,9 +2369,7 @@ Thu Jan 18 10:07:33 1996 Michael Meissner defines. (set_spec): If EXTRA_SPECS is defined, handle the extra specifications. - (process_command): Ditto. - (main): Ditto. - (validate_all_switches): Ditto. + (process_command, main, validate_all_switches): Likewise. * rs6000/{rs6000.h,powerpc.h,aix41.h} ({CPP,ASM}_SPEC): Use common specs with EXTRA_SPECS, only modifying things in the target that @@ -2482,14 +2455,10 @@ Tue Jan 16 12:18:56 1996 Doug Evans Tue Jan 16 11:42:09 1996 Ian Lance Taylor - * config/dbxcoff.h: New file for stabs in COFF support. - * config/a29k/a29k-udi.h: Use dbxcoff.h. - * config/h8300/h8300.h: Likewise. - * config/i960/i960-coff.h: Likewise. - * config/m68k/coff.h: Likewise. - * config/m88k/m88k-coff.h: Likewise. - * config/sh/sh.h: Likewise. - * config/sparc/litecoff.h: Likewise. + * dbxcoff.h: New file for stabs in COFF support. + * a29k/a29k-udi.h: Use dbxcoff.h. + * h8300.h, i960/i960-coff.h, m68k/coff.h, m88k/m88k-coff.h: Likewise. + * sh.h, sparc/litecoff.h: Likewise. Tue Jan 16 08:21:45 1996 Hans-Peter Nilsson @@ -2586,17 +2555,17 @@ Mon Jan 15 17:01:16 1996 Doug Evans * c-lex.c (check_newline): Pass character after `#pragma' to HANDLE_PRAGMA. Don't call get_directive_line if at end of line. * c-common.c (get_directive_line): Watch for EOF. - * h8300/h8300.h (HANDLE_PRAGMA): New argument `c'. + * h8300.h (HANDLE_PRAGMA): New argument `c'. Must issue `return' now. - * i960/i960.h (HANDLE_PRAGMA): Likewise. - * sh/sh.h (HANDLE_PRAGMA): Likewise. + * i960.h (HANDLE_PRAGMA): Likewise. + * sh.h (HANDLE_PRAGMA): Likewise. * nextstep.h (HANDLE_PRAGMA): Likewise. - * h8300/h8300.c (handle_pragma): New argument `ch'. + * h8300.c (handle_pragma): New argument `ch'. Simplify pragma processing. Delete support for `#pragma section'. - * i960/i960.c (process_pragma): New argument `c'. Change result to + * i960.c (process_pragma): New argument `c'. Change result to terminating character. * nextstep.c (handle_pragma): Likewise. - * sh/sh.c (handle_pragma): Likewise. Also simplified. + * sh.c (handle_pragma): Likewise. Also simplified. * sched.c (reemit_notes): Add prototype. (sched_analyze_2): Reorganize comments. Call prev_nonnote_insn. @@ -2759,13 +2728,13 @@ Thu Jan 11 19:41:07 1996 Per Bothner Thu Jan 11 18:33:50 1996 Doug Evans - * h8300/h8300.h (TARGET_ALIGN_STRUCT_300): New macro. + * h8300.h (TARGET_ALIGN_STRUCT_300): New macro. (TARGET_SWITCHES): Add -malign-struct-300. (BIGGEST_FIELD_ALIGNMENT): Update. Thu Jan 11 12:07:44 1996 J.T. Conklin - * h8300/h8300.h (CPP_PREDEFINES): Delete -D_DOUBLE_IS_32BITS. + * h8300.h (CPP_PREDEFINES): Delete -D_DOUBLE_IS_32BITS. Thu Jan 11 11:09:33 1996 David Edelsohn @@ -2798,8 +2767,8 @@ Wed Jan 10 11:27:28 1996 Michael Meissner files. * rs6000/t-{eabi,eabigas,ppc,ppcgas} (MULTILIB_MATCHES): Drop - support for obsolete -mcpu=mpc403. Add -mcpu=821 and -mcpu=860 to - soft-float defaults. + support for obsolete -mcpu=mpc403. + Add -mcpu=821 and -mcpu=860 to soft-float defaults. * rs6000/t-eabi{,gas} (LIBGCC): Add stmp-crt. (INSTALL_LIBGCC): Add install-crt. @@ -2827,8 +2796,7 @@ Sun Jan 7 17:11:11 1996 David Edelsohn Sun Jan 7 16:56:56 1996 Michael Meissner - * {svr4,mips/elf{,64}}.h (MAX_OFILE_ALIGNMENT): Define as - 32768*8. + * {svr4,mips/elf{,64}}.h (MAX_OFILE_ALIGNMENT): Define as 32768*8. Sat Jan 6 15:52:36 1996 Doug Evans @@ -2889,7 +2857,7 @@ Fri Jan 5 10:40:37 1996 David Edelsohn Fri Jan 5 00:32:49 1996 Doug Evans - * sparc/sparc.h (MACHINE_STATE_RESTORE): Add missing .align. + * sparc.h (MACHINE_STATE_RESTORE): Add missing .align. Wed Jan 3 18:29:32 1996 Doug Evans @@ -3032,28 +3000,23 @@ Fri Dec 29 12:41:47 1995 Michael Meissner Thu Dec 28 22:24:53 1995 Michael Meissner - * rs6000.h: (reg_class): Undo 12/27 changes, except for - formatting. - (REG_NAMES): Ditto. - (REG_CLASS_CONTENTS): Ditto. - (REGNO_REG_CLASS): Ditto. - (REG_CLASS_FROM_LETTER): Ditto. + * rs6000.h: (reg_class): Undo 12/27 changes, except for formatting. + (REG_NAMES, REG_CLASS_CONTENTS, REGNO_REG_CLASS): Likewise. + (REG_CLASS_FROM_LETTER): Likewie. (PREDICATE_CODES): Delete predicate functions. (gpc_reg{0,3,4,34}_operand): Delete declaration. - (cc_reg{0,1}_operand): Ditto. - + (cc_reg{0,1}_operand): Likewise. * rs6000.c (gpc_reg{0,3,4}_operand): Delete. - (cc_reg{0,1}_operand): Ditto. + (cc_reg{0,1}_operand): Likewise. - * rs6000.md (common mode functions): Undo 12/27 changes, and add - the appropriate clobbers for common mode calls. Keep the - define_splits for powerpc SI*SI->DI. + * rs6000.md (common mode functions): Undo 12/27 changes,and add + appropriate clobbers for common mode calls. Keep define_splits for + powerpc SI*SI->DI. Thu Dec 28 11:08:11 1995 Mike Stump - * sparc.h (RETURN_ADDR_OFFSET): Rename from - NORMAL_RETURN_ADDR_OFFSET, returns the offset for the current - function specifically. + * sparc.h (RETURN_ADDR_OFFSET): Rename from NORMAL_RETURN_ADDR_OFFSET; + returns offset for the current function specifically. Thu Dec 28 07:07:14 1995 Paul Eggert @@ -3158,7 +3121,7 @@ Wed Dec 27 11:38:20 1995 Michael Meissner mode multiplies. * rs6000.c (gpc_reg34_operand): Delete unused function. - * rs6000.h (gpc_reg34_operand): Ditto. + * rs6000.h (gpc_reg34_operand): Likewise. * rs6000.c (gpc_reg{3,4}_operand): Reorganize code and don't allow SUBREG's. @@ -3167,25 +3130,22 @@ Wed Dec 27 11:38:20 1995 Michael Meissner little endian PowerPC's. (gpc_reg{0,3,4,34}_operand): New functions to match a specific register. - (cc_reg{0,1}_operand): Ditto. + (cc_reg{0,1}_operand): Likewise. * rs6000.h (reg_class): Add register classes for register 3 by itself, register 4 by itself, registers 3&4, and CR1. (REG_NAMES): Add support for new register classes. - (REG_CLASS_CONTENTS): Ditto. - (REGNO_REG_CLASS): Ditto. - (REG_CLASS_FROM_LETTER): Ditto. + (REG_CLASS_CONTENTS, REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise. (PREDICATE_CODES): Add new predicate functions. (gpc_reg{0,3,4,34}_operand): Add declaration. - (cc_reg{0,1}_operand): Ditto. - - * rs6000.md (common mode multiplication/division): Move/rename the - common mode calls so that they are closer to the define_expands - that call them. Set attribute type to be jmpreg, rather than - integer, so optimizer knows the branch processing unit is used. - Make SI*SI->DI multiplier use register classes instead of - hardwired registers. Add the appropriate clobbers of CR0/CR1 as - mandated by the PowerOpen spec. + (cc_reg{0,1}_operand): Likewise. + + * rs6000.md (common mode multiplication/division): Move/rename common + mode calls so they are closer to define_expands that call them. + Set attribute type to be jmpreg, rather than integer, so optimizer + knows branch processing unit is used; make SI*SI->DI multiplier use + register classes instead of hardwired registers. + Add appropriate clobbers of CR0/CR1 as mandated by PowerOpen spec. (PowerPC SI*SI->DI multipliers): Add appropriate define_splits. * rs6000/t-{,x}newas (MULTILIB*): Don't build power2 or 601 @@ -3281,8 +3241,7 @@ Sat Dec 23 12:21:53 1995 Jeffrey A. Law * pa.c (output_move_double): Correctly identify and handle overlapping moves. - * pa.md (movdi patterns): Eliminate earlyclobbers in mem<->gr - cases. + * pa.md (movdi patterns): Eliminate earlyclobbers in mem<->gr cases. (movdf patterns): Likewise. Fri Dec 22 17:29:42 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -3313,20 +3272,18 @@ Fri Dec 22 15:55:00 1995 Michael Meissner Fri Dec 22 15:13:47 1995 Stan Cox - * i386.h: (TARGET_UNROLL_STRLEN): New macro. - * i386.c: (output_strlen_unroll): New function. - * i386.md: (strlensi): New pattern. + * i386.h (TARGET_UNROLL_STRLEN): New macro. + * i386.c (output_strlen_unroll): New function. + * i386.md (strlensi): New pattern. Thu Dec 21 18:53:31 1995 Roland McGrath - * config/gnu.h (GNU_CPP_PREDEFINES): Add missing space after - -Amachine(CPU). + * /gnu.h (GNU_CPP_PREDEFINES): Add missing space after -Amachine(CPU). Thu Dec 21 12:23:42 1995 Michael Meissner - * configure ({powerpc,rs6000}*): Change --enable-cpu to - --with-cpu. - * rs6000.c (rs6000_select): Ditto. + * configure ({powerpc,rs6000}*): Change --enable-cpu to --with-cpu. + * rs6000.c (rs6000_select): Likewise. * rs6000/aix41.h (LINK_SPEC): Do not pass -bexport to the linker if -g and -shared. @@ -3338,13 +3295,11 @@ Wed Dec 20 11:23:39 1995 Michael Meissner ({powerpc,rs6000}*): Add support for --enable-cpu= to select the default cpu to compile for. - * rs6000/aix41.h (TARGET_DEFAULT): Make -mcpu=common the default - behavior. - (PROCESSOR_DEFAULT): Ditto. + * rs6000/aix41.h (TARGET_DEFAULT): Make -mcpu=common default behavior. + (PROCESSOR_DEFAULT): Likewise. (MULTILIB_DEFAULTS): Set mcpu=common. - * rs6000/rs6000.h (TARGET_CPU_DEFAULT): Define to be NULL if not - defined. This is used for the --enable-cpu= switch. + * rs6000.h (TARGET_CPU_DEFAULT): Define to be NULL if not defined. (PROCESSOR_COMMON): Set this to PROCESSOR_601. (PROCESSOR_POWERPC): Set this to PROCESSOR_604. (TARGET_OPTIONS): Add -mtune= switch. @@ -3353,18 +3308,18 @@ Wed Dec 20 11:23:39 1995 Michael Meissner (OVERRIDE_OPTIONS): Pass TARGET_CPU_DEFAULT to rs6000_override_options. - * rs6000/rs6000.c (rs6000_cpu_string): Delete global variable. + * rs6000.c (rs6000_cpu_string): Delete global variable. (rs6000_select): Define new global variable. (rs6000_override_options): Take default_cpu argument, and provide support for it and -mtune= in addition to -mcpu=. * rs6000/{aix{3newas,41},lynx,netware,powerpc}.h (ASM_SPEC): Add support for -mcpu=power2. - * rs6000/{rs6000,sysv4}.h (ASM_SPEC): Ditto. + * rs6000/{rs6000,sysv4}.h (ASM_SPEC): Likewise. * rs6000/{aix41,eabiaix,eabile,lynx,powerpc}.h (CPP_SPEC): Make sure all -mcpu=xxx targets are supports. - * rs6000/{rs6000,sysv4,sysv4le}.h (CPP_SPEC): Ditto. + * rs6000/{rs6000,sysv4,sysv4le}.h (CPP_SPEC): Likewise. * rs6000/t-x{newas,rs6000}: New files to be used when making a cross compiler, to prevent libgcc1-test from being made. @@ -3394,8 +3349,7 @@ Tue Dec 19 15:08:31 1995 Jason Merrill Tue Dec 19 10:57:23 1995 Kim Knuttila - * ginclude/ppc-asm.h: Do not compile the register macros under - winnt. + * ppc-asm.h: Do not compile the register macros under winnt. Mon Dec 18 19:31:23 1995 Adam Fedor @@ -3413,10 +3367,10 @@ Mon Dec 18 18:40:34 1995 Jim Wilson (clear_storage, store_expr): Likewise for memset and bzero. (store_constructor): Likewise for memset. * optabs.c (emit_cmp_insn): Likewise for memcmp and bcmp. - * convex/convex.c (expand_movstr_call): Likewise for memcpy. - * m88k/m88k.c (expand_block_move): Likewise for memcpy and bcopy. - * mips/mips.c (block_move_call): Likewise for memcpy and bcopy. - * mips/mips.h (INITIALIZE_TRAMPOLINE): Likewise for cacheflush. + * convex.c (expand_movstr_call): Likewise for memcpy. + * m88k.c (expand_block_move): Likewise for memcpy and bcopy. + * mips.c (block_move_call): Likewise for memcpy and bcopy. + * mips.h (INITIALIZE_TRAMPOLINE): Likewise for cacheflush. * c-common.c (WCHAR_TYPE_SIZE): Add a default definition. @@ -3424,8 +3378,7 @@ Mon Dec 18 18:40:34 1995 Jim Wilson instead of DECL_EXTERNAL to identify declarations. * svr4.h (ASM_IDENTIFY_GCC): Don't output stab here. - (ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of - above. + (ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of above. * stmt.c (expand_asm_operands): Handle numeric constraints in with the default case. @@ -3442,9 +3395,8 @@ Mon Dec 18 16:39:41 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Mon Dec 18 16:22:46 1995 Michael Meissner - * rs6000.h (ASM_GENERATE_INTERNAL_LABEL): Put a leading '*' - in the label string so as to not confuse dbxout.c which believes - it can skip the leading character of the string. + * rs6000.h (ASM_GENERATE_INTERNAL_LABEL): Put leading '*' in label + string so as to not confuse dbxout.c. Mon Dec 18 09:44:56 1995 Mike Stump @@ -3452,10 +3404,7 @@ Mon Dec 18 09:44:56 1995 Mike Stump defaulting cleanup actions. * tree.c (save_tree_status, restore_tree_status): Save and restore - temporary_firstobj, so that in progress objects that live on the - temporary obstack are not reallocated, if we save and restore the - tree status in their lifetime. - + temporary_firstobj. Mon Dec 18 07:49:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) @@ -3465,7 +3414,7 @@ Mon Dec 18 07:49:34 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Sun Dec 17 12:14:37 1995 Jeffrey A. Law * pa.h (ASM_OUTPUT_FUNCTION_PREFIX): Don't surround section names - with '$'. That confuses collect2. + with '$'; that confuses collect2. (ASM_OUTPUT_SECTION_NAME): Likewise. * sched.c (canon_rtx): Recursively look for equivalences; @@ -3517,43 +3466,34 @@ Sun Dec 17 06:57:02 1995 Paul Eggert Simplify include file names so that they are more likely to match. E.g. simplify "./a//b" to "a/b". Represent directories with simplified prefixes, e.g. replace "./a//b" with "a/b/", and "." with "". - (absolute_filename): New function. (do_include): Use it. (read_name_map): Likewise; this makes things more consistent for DOS. - (main, do_include, open_include_file): -M output now contains operands of -imacros and -include. - (skip_to_end_of_comment): When copying a // comment, don't try to change it to a /* comment. (rescan, skip_if_group, skip_to_end_of_comment, macarg1): Tune. - (rescan, skip_if_group, skip_to_end_of_comment, macarg1): If warn_comments is nonzero, warn if backslash-newline appears in a // comment. Simplify method for finding /* /* */ comment. (skip_if_group): Optionally warn if /* /* */ appears between # and a directive inside a skipped if group. (macarg): Optionally warn if /* /* */ appears in a macro argument. - (strncat, VMS_strncat, vms_ino_t, ino_t): Remove. (INCLUDE_LEN_FUDGE): Add 2 if VMS, for trailing ".h". (INO_T_EQ, INO_T_HASH): New macros. - (struct file_buf): New member `inc'. (expand_to_temp_buffer): Initialize it. - (struct file_name_list): New member `inc'. (struct file_name_list): New member `st'. c_system_include_path is now 1 if not 0. fname is now an array, not a pointer. (struct include_file): New members `next_ino', `deps_output', `st'. Remove members `inode' and `dev'; they are now in `st'. - (INCLUDE_HASHSIZE): Rename from INCLUDE_HASH_SIZE. (include_hashtab): Rename from include_hash_table. (include_ino_hashtab): New variable. - (main): Store file status in struct stat, not in long and int pieces. Use base_name to strip prefixes from file names. When printing directory prefixes, omit trailing / and print "" as ".". @@ -3561,7 +3501,6 @@ Sun Dec 17 06:57:02 1995 Paul Eggert (main, path_include): Regularize operands of -include, -imacros, -isystem, -iwithprefix, and -iwithprefixbefore. Regularize default include directories. - (do_include): Allocate dsp with alloca, since fname is now dynamically allocated. Use -3 to represent a never-opened file descriptor. @@ -3579,35 +3518,27 @@ Sun Dec 17 06:57:02 1995 Paul Eggert Fatal error if fstat fails. Use new deps_output member to avoid printing dependencies twice. (bypass_hashtab): New variable. - (do_include, open_control_file, record_control_macro): New convention: control_macro is "" if the file was imported or had #pragma once. (pragma_once_marker): Remove. - (redundant_include_p, include_hash, lookup_include, lookup_import, add_import, file_size_and_mode): Remove; subsumed by open_include_file. (skip_redundant_dir_prefix): Remove; subsumed by simplify_filename. - (is_system_include, read_name_map, remap_include_file): Assume arg is a directory prefix. - (base_name, simplify_filename, remap_include_file, lookup_ino_include, new_include_prefix): New functions. - (open_include_file): New arguments `importing' and `pinc'. Move filename mapping into new remap_include_file function. First try to find file by name in include_hashtab; if that doesn't work, open and fstat it and try to find it by inode and dev in include_ino_hashtab. - (finclude): Get file status from inc->st instead of invoking fstat. Store inc into fp->inc so that record_control_macro doesn't need to do a table lookup. (finclude, record_control_macro): Accept struct include_file * instead of char * to identify include file. All callers changed. - (check_precompiled): Get file status from new argument `st'. - (do_pragma): Output at most one warning about #pragma implementation. Always return 0 instead of returning garbage sometimes. (do_pragma, hack_vms_include_specification): @@ -3776,7 +3707,7 @@ Thu Dec 14 18:08:59 1995 Torbjorn Granlund Thu Dec 14 17:22:14 1995 Richard Earnshaw (rearnsha@armltd.co.uk) - * arm/arm.c (output_move_double): Extract DFmode constants using + * arm.c (output_move_double): Extract DFmode constants using REAL_VALUE_TO_TARGET_DOUBLE. Thu Dec 14 15:05:13 1995 Doug Evans @@ -3807,11 +3738,9 @@ Wed Dec 13 19:05:47 1995 Alan Modra (alan@spri.levels.unisa.edu.au) Wed Dec 13 15:40:30 1995 Mike Stump - * function.c (identify_blocks): Start with a chain of BLOCKs to - match the rest of the backend (dbxout.c), instead of just one - BLOCK. - (reorder_blocks): Ditto. - (all_blocks): Ditto. + * function.c (identify_blocks): Start with chain of BLOCKs to match + rest of backend (dbxout.c), instead of just one BLOCK. + (reorder_blocks, all_blocks): Likewise. * stmt.c (find_loop_tree_blocks): Pass the toplevel list of blocks, not just the first subblock. @@ -3838,8 +3767,8 @@ Wed Dec 13 15:02:39 1995 Ian Lance Taylor * c-lex.c (check_newline): If DBX_DEBUGGING_INFO and write_symbols == DBX_DEBUG, call dbxout_start_new_source_file and dbxout_resume_previous_source_file when appropriate. - * config/sparc/sunos4.h (DBX_USE_BINCL): Define. - * config/svr4.h (DBX_USE_BINCL): Define. + * sparc/sunos4.h (DBX_USE_BINCL): Define. + * svr4.h (DBX_USE_BINCL): Define. Wed Dec 13 06:52:40 1995 Michael Meissner @@ -3859,7 +3788,7 @@ Tue Dec 12 15:37:48 1995 David Edelsohn Tue Dec 12 13:58:57 1995 Doug Evans - * h8300/t-h8300 (MULTILIB_{OPTIONS,DIRNAMES}): Add -mint32 support. + * t-h8300 (MULTILIB_{OPTIONS,DIRNAMES}): Add -mint32 support. Sun Dec 10 18:51:21 1995 Torbjorn Granlund @@ -3890,7 +3819,7 @@ Sat Dec 9 18:05:03 1995 Jim Wilson Fri Dec 8 19:17:30 1995 Mike Meissner - * rs6000/rs6000.c (input_operand): Allow any integer constant, not + * rs6000.c (input_operand): Allow any integer constant, not just integers that fit in 1 instruction. Fri Dec 8 10:45:07 1995 Richard Earnshaw (rearnsha@armltd.co.uk) @@ -4043,8 +3972,7 @@ Mon Dec 4 22:17:37 1995 Jason Merrill Mon Dec 4 21:30:37 1995 Jim Wilson - * sh/sh.c (shiftcosts): For SH3, max cost of arithmetic right - shift is 3. + * sh.c (shiftcosts): For SH3, max cost of arithmetic right shift is 3. (expand_ashiftrt): For SH3, if shift cost is more than 3, then call gen_ashrsi3_d to use shad instruction. @@ -4059,8 +3987,7 @@ Mon Dec 4 15:28:02 1995 Richard Kenner (kenner@vlsi1.ultra.nyu.edu) Mon Dec 4 12:59:33 1995 Ian Lance Taylor - * config/sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Use -fPIC - unconditionally, since binutils 2.6 supports it. + * sparc/t-sol2 (CRTSTUFF_T_CFLAGS): Use -fPIC unconditionally. Sun Dec 3 20:55:43 1995 Jeffrey A. Law @@ -4079,19 +4006,19 @@ Sat Dec 2 22:19:16 1995 Jeffrey A. Law (law@cygnus.com) Sat Dec 2 07:52:46 1995 Michael Meissner - * rs6000/rs6000.md (movsi): Don't split large constants in the + * rs6000.md (movsi): Don't split large constants in the movsi pattern, let the define_split split it later as needed. Fri Dec 1 16:00:42 1995 Brendan Kehoe - * sparc/sparc.c (output_double_int): Handle CODE_LABEL's if v9. + * sparc.c (output_double_int): Handle CODE_LABEL's if v9. Fri Dec 1 09:13:23 1995 Michael Meissner - * m68k/m68k.md (decrement_and_branch_until_zero): Split into a + * m68k.md (decrement_and_branch_until_zero): Split into a define_expand and an anonymous define_insn. - * fx80/fx80.md (decrement_and_branch_until_zero): Ditto. - * m88k/m88k.md (decrement_and_branch_until_zero): Ditto. + * fx80.md (decrement_and_branch_until_zero): Ditto. + * m88k.md (decrement_and_branch_until_zero): Ditto. Thu Nov 30 15:02:16 1995 Jim Wilson @@ -4102,14 +4029,14 @@ Thu Nov 30 15:02:16 1995 Jim Wilson (RELAX_BIT, TARGET_RELAX): New macros. (TARGET_SWITCHES): Add -mrelax. - * sh/sh.c (insn-attr.h): Include. + * sh.c (insn-attr.h): Include. (pragma_nosave_low_regs): New global variable. (calc_live_regs): If SH3 and pragma_nosave_low_regs, then don't save registers r0 through r7 for interrupt functions. (function_epilogue): Clear pragma_nosave_low_regs. (handle_pragma): Set pragma_nosave_low_regs if see pragma for it. - * sh/sh.h (FUNCTION_PROFILER): Use trap #33 instead of trap #5. + * sh.h (FUNCTION_PROFILER): Use trap #33 instead of trap #5. Put additional .align before trapa instruction. Thu Nov 30 14:45:13 1995 Doug Evans @@ -4172,7 +4099,7 @@ Thu Nov 30 12:27:22 1995 Michael Meissner anymore. (STRIP_NAME_ENCODING): Undef. - * rs6000/rs6000.c (rs6000_save_toc_p, rs6000_abi): New globals. + * rs6000.c (rs6000_save_toc_p, rs6000_abi): New globals. (rs6000_override_options): Add 602, 603e, and 620 support. (count_register_operand): New function to return true if operand is the count register. @@ -4210,10 +4137,9 @@ Thu Nov 30 12:27:22 1995 Michael Meissner common trampoline support for all ABI's. (rs6000_initialize_trampoline): Ditto. - * rs6000/rs6000.h (TARGET_{WINDOWS_NT,AIX,MACOS}): Define. + * rs6000.h (TARGET_{WINDOWS_NT,AIX,MACOS}): Define. (processor_type): Add 602. - (PROCESSOR_COMMON): Assume the current processor is a 604, not a - 601. + (PROCESSOR_COMMON): Assume current processor is a 604, not a 601. (SUBTARGET_OPTIONS): Define if not defined. (TARGET_OPTIONS): Include SUBTARGET_OPTIONS. (COUNT_REGISTER_REGNUM): Define as 66. @@ -4231,16 +4157,15 @@ Thu Nov 30 12:27:22 1995 Michael Meissner (MACHINE_issue_rate): Define. (function decls): Add new function decls from rs6000.c. - * rs6000/rs6000.md (cpu attribute): Add 602. + * rs6000.md (cpu attribute): Add 602. (function units): Update to match reality better. (calls through pointer): Rework to support Windows NT. (movsi): Add Windows NT support. (movstrsi): Remove match_operand predicates, since expand_block_move does the checking. (sync_isync): Delete. - (icbi, dcbst, sync, isync): New insns to generate the named - instruction for making trampolines on eabi/V.4 properly flush the - caches. + (icbi, dcbst, sync, isync): New insns to generate named instruction + for making trampolines on eabi/V.4 properly flush the caches. (decrement_and_branch_on_count): Rename from decrement_and_branchsi. Add update of count in insn pattern. @@ -8466,7 +8391,7 @@ Thu Apr 27 14:22:50 1995 Michael Meissner * i386/linux-oldld.h: New file, that is cloned from linux-aout.h, except that it does not pass -m i386linux to the linker. This is - to support the original Linux ld that is on most distributions. + to support the original GNU/Linux ld that is on most distributions. * configure (i[345]86-*-linux*oldld*): Use i386/linux-oldld.h as the target file. diff --git a/gcc/ChangeLog.9 b/gcc/ChangeLog.9 index 9cd8cdfe1a1..6b18fc9580f 100644 --- a/gcc/ChangeLog.9 +++ b/gcc/ChangeLog.9 @@ -1273,7 +1273,7 @@ Fri Jan 20 20:11:17 1995 Jim Wilson * integrate.c (save_for_inline_copying): Add comment that nonlocal_label list should be updated if it ever can be nonzero. - * sdbout.c (syms.h): Don't include under Linux. + * sdbout.c (syms.h): Don't include under Linux-based GNU systems. * loop.c (scan_loop): For the replace_rtx call, copy the rtx that is being substituted in before the call. diff --git a/gcc/INSTALL b/gcc/INSTALL index 0c646b83aa5..7dfb73d9e73 100644 --- a/gcc/INSTALL +++ b/gcc/INSTALL @@ -610,8 +610,7 @@ special things you must know: `alpha-*-osf1' Systems using processors that implement the DEC Alpha architecture and are running the DEC Unix (OSF/1) operating system, for example - the DEC Alpha AXP systems. (VMS on the Alpha is not currently - supported by GNU CC.) + the DEC Alpha AXP systems.CC.) GNU CC writes a `.verstamp' directive to the assembler output file unless it is built as a cross-compiler. It gets the version to @@ -675,7 +674,7 @@ special things you must know: `arm-*-linuxaout' Any of the ARM family processors running the Linux-based GNU system with the `a.out' binary format (ELF is not yet supported). - You must use version 2.8.1.0.7 or later of the Linux binutils, + You must use version 2.8.1.0.7 or later of the GNU/Linux binutils, which you can download from `sunsite.unc.edu:/pub/Linux/GCC' and other mirror sites for Linux-based GNU systems. @@ -827,9 +826,7 @@ special things you must know: version 2.2 or later. `i386-sequent-bsd' - Go to the Berkeley universe before compiling. In addition, you - probably need to create a file named `string.h' containing just - one line: `#include '. + Go to the Berkeley universe before compiling. `i386-sequent-ptx1*' Sequent DYNIX/ptx 1.x. @@ -1181,9 +1178,7 @@ special things you must know: Emacs. `ns32k-sequent' - Go to the Berkeley universe before compiling. In addition, you - probably need to create a file named `string.h' containing just - one line: `#include '. + Go to the Berkeley universe before compiling. `ns32k-utek' UTEK ns32000 system ("merlin"). The C compiler that comes with diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 0462a40ebe2..b91a308ee67 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -274,7 +274,7 @@ LIBGCC2 = libgcc2.a # we use this here because that should be enough, and also # so that -g1 will be tested. LIBGCC2_DEBUG_CFLAGS = -g1 -LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED +LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -fexceptions # Additional options to use when compiling libgcc2.a. # Some targets override this to -Iinclude @@ -333,7 +333,7 @@ LIB1FUNCS_EXTRA = LIB2FUNCS_EXTRA = # Default float.h source to use for cross-compiler. -# This is overidden by configure. +# This is overridden by configure. CROSS_FLOAT_H=$(srcdir)/config/float-@float_format@.h # Program to convert libraries. @@ -633,10 +633,12 @@ LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \ # If it is, rm *.o is an easy way to do it. # CONFIG_H = $(host_xm_file) $(tm_file) CONFIG_H = -RTL_H = rtl.h rtl.def machmode.h machmode.def -TREE_H = tree.h real.h tree.def machmode.h machmode.def +RTL_H = rtl.h rtl.def gansidecl.h machmode.h machmode.def +TREE_H = tree.h real.h tree.def gansidecl.h machmode.h machmode.def BYTECODE_H = bytecode.h bc-emit.h bc-optab.h BASIC_BLOCK_H = basic-block.h bitmap.h +DEMANGLE_H = demangle.h gansidecl.h +RECOG_H = recog.h gansidecl.h # # Language makefile fragments. @@ -781,7 +783,7 @@ gfloat.h: $(FLOAT_H) # Make it empty if we can use the system float.h without changes. float.h-nat: enquire -./enquire -f > tmp-float.h - grep '#define [^_]' tmp-float.h >/dev/null || echo > tmp-float.h + grep '#define [^_]' tmp-float.h >/dev/null || true > tmp-float.h mv tmp-float.h float.h-nat # Create a dummy float.h source for a cross-compiler. @@ -951,7 +953,7 @@ libgcc2.ready: $(GCC_PASSES) $(LIBGCC2_DEPS) stmp-int-hdrs LIB2ADD = $(srcdir)/frame.c $(LIB2FUNCS_EXTRA) $(LANG_LIB2FUNCS) libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2ADD) \ - machmode.h longlong.h gbl-ctors.h config.status + machmode.h longlong.h frame.h gansidecl.h gbl-ctors.h config.status # Actually build it in tmplibgcc2.a, then rename at end, # so that libgcc2.a itself remains nonexistent if compilation is aborted. -rm -f tmplibgcc2.a @@ -1047,6 +1049,7 @@ stamp-mlib: $(srcdir)/genmultilib Makefile # Build multiple copies of libgcc.a, one for each target switch. stmp-multilib: $(LIBGCC1) libgcc2.c libgcc2.ready $(CONFIG_H) \ + frame.h gansidecl.h \ $(LIB2ADD) machmode.h longlong.h gbl-ctors.h config.status for i in `$(GCC_FOR_TARGET) --print-multi-lib`; do \ dir=`echo $$i | sed -e 's/;.*$$//'`; \ @@ -1115,12 +1118,14 @@ stmp-multilib-sub: # Compile two additional files that are linked with every program # linked using GCC on systems using COFF or ELF, for the sake of C++ # constructors. -$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h +$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \ + defaults.h frame.h gbl-ctors.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ -finhibit-size-directive -fno-inline-functions -fno-exceptions $(CRTSTUFF_T_CFLAGS) \ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -o $(T)crtbegin$(objext) -$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h +$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \ + defaults.h frame.h gbl-ctors.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \ -finhibit-size-directive -fno-inline-functions -fno-exceptions $(CRTSTUFF_T_CFLAGS) \ -c $(srcdir)/crtstuff.c -DCRT_END -o $(T)crtend$(objext) @@ -1129,7 +1134,8 @@ $(T)crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h # compiled using PIC for use in shared libraries. crtbeginS.o crtendS.o: stamp-crtS ; @true -stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h +stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \ + defaults.h frame.h gbl-ctors.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \ -DCRT_BEGIN -finhibit-size-directive -fno-inline-functions \ -g0 -c $(srcdir)/crtstuff.c @@ -1199,12 +1205,12 @@ collect2 : collect2.o cplus-dem.o underscore.o version.o \ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ collect2.o \ cplus-dem.o underscore.o version.o choose-temp.o $(LIBS) -collect2.o : collect2.c $(CONFIG_H) gstab.h obstack.h demangle.h +collect2.o : collect2.c $(CONFIG_H) gansidecl.h gstab.h obstack.h $(DEMANGLE_H) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DTARGET_MACHINE=\"$(target_alias)\" $(MAYBE_USE_COLLECT2) \ -c `echo $(srcdir)/collect2.c | sed 's,^\./,,'` -cplus-dem.o: cplus-dem.c demangle.h +cplus-dem.o: cplus-dem.c $(DEMANGLE_H) underscore.c: stamp-under ; @true @@ -1233,7 +1239,7 @@ DRIVER_DEFINES = \ -DDEFAULT_TARGET_VERSION=\"$(version)\" \ -DDEFAULT_TARGET_MACHINE=\"$(target_alias)\" \ -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" -gcc.o: gcc.c $(CONFIG_H) multilib.h Makefile $(lang_specs_files) +gcc.o: gcc.c $(CONFIG_H) gansidecl.h multilib.h Makefile $(lang_specs_files) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(DRIVER_DEFINES) \ -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` @@ -1241,10 +1247,10 @@ gcc.o: gcc.c $(CONFIG_H) multilib.h Makefile $(lang_specs_files) dumpvers: dumpvers.c version.o: version.c -obstack.o: obstack.c -choose-temp.o: choose-temp.c -pexecute.o: pexecute.c -prefix.o: prefix.c $(CONFIG_H) Makefile +obstack.o: obstack.c $(CONFIG_H) +choose-temp.o: choose-temp.c $(CONFIG_H) gansidecl.h +pexecute.o: pexecute.c $(CONFIG_H) gansidecl.h +prefix.o: prefix.c $(CONFIG_H) gansidecl.h Makefile $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DPREFIX=\"$(prefix)\" \ -c `echo $(srcdir)/prefix.c | sed 's,^\./,,'` @@ -1272,26 +1278,26 @@ varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h function.h \ output.h bytecode.h c-pragma.h function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \ insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \ - recog.h output.h bytecode.h bc-emit.h + $(RECOG_H) output.h bytecode.h bc-emit.h stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \ insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h except.h \ - loop.h recog.h bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h \ + loop.h $(RECOG_H) bytecode.h bc-typecd.h bc-typecd.def bc-opcode.h \ bc-optab.h bc-emit.h except.o : except.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \ insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \ - recog.h output.h except.h + $(RECOG_H) output.h except.h expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h regs.h \ - insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h \ + insn-flags.h insn-codes.h expr.h insn-config.h $(RECOG_H) output.h \ typeclass.h bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h \ bc-emit.h modemap.def hard-reg-set.h calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \ insn-flags.h regs.h expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \ - insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h + insn-flags.h insn-config.h insn-codes.h expr.h $(RECOG_H) real.h explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \ - insn-config.h expr.h recog.h insn-flags.h insn-codes.h + insn-config.h expr.h $(RECOG_H) insn-flags.h insn-codes.h optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \ - insn-flags.h insn-config.h insn-codes.h expr.h recog.h reload.h + insn-flags.h insn-config.h insn-codes.h expr.h $(RECOG_H) reload.h dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \ insn-config.h reload.h gstab.h xcoffout.h defaults.h output.h sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h except.h \ @@ -1303,7 +1309,7 @@ dwarf2out.o : dwarf2out.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf2.h flags.h \ insn-config.h reload.h output.h defaults.h hard-reg-set.h regs.h expr.h xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h except.h \ - function.h regs.h insn-config.h recog.h real.h expr.h obstack.h \ + function.h regs.h insn-config.h $(RECOG_H) real.h expr.h obstack.h \ bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h \ bc-opname.h real.o : real.c $(CONFIG_H) $(TREE_H) @@ -1311,51 +1317,51 @@ getpwd.o : getpwd.c $(CONFIG_H) integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \ insn-flags.h insn-config.h insn-codes.h expr.h real.h regs.h function.h \ - bytecode.h output.h recog.h except.h + bytecode.h output.h $(RECOG_H) except.h jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \ - insn-config.h insn-flags.h recog.h expr.h real.h except.h + insn-config.h insn-flags.h $(RECOG_H) expr.h real.h except.h stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \ - insn-config.h recog.h + insn-config.h $(RECOG_H) expr.h profile.o : profile.c $(CONFIG_H) $(RTL_H) flags.h insn-flags.h gcov-io.h \ - tree.h output.h regs.h + $(TREE_H) output.h regs.h loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \ - insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h + insn-flags.h insn-codes.h regs.h hard-reg-set.h $(RECOG_H) expr.h real.h unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h integrate.h regs.h \ - recog.h flags.h expr.h loop.h + $(RECOG_H) flags.h expr.h loop.h flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \ $(BASIC_BLOCK_H) regs.h hard-reg-set.h output.h combine.o : combine.c $(CONFIG_H) $(RTL_H) flags.h \ insn-config.h insn-flags.h insn-codes.h insn-attr.h regs.h expr.h \ - $(BASIC_BLOCK_H) recog.h real.h hard-reg-set.h + $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h regclass.o : regclass.c $(CONFIG_H) $(RTL_H) hard-reg-set.h flags.h \ - $(BASIC_BLOCK_H) regs.h insn-config.h recog.h reload.h real.h bytecode.h + $(BASIC_BLOCK_H) regs.h insn-config.h $(RECOG_H) reload.h real.h bytecode.h local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) \ - regs.h hard-reg-set.h insn-config.h recog.h output.h + regs.h hard-reg-set.h insn-config.h $(RECOG_H) output.h bitmap.o : bitmap.c $(CONFIG_H) $(RTL_H) flags.h $(BASIC_BLOCK_H) regs.h global.o : global.c $(CONFIG_H) $(RTL_H) flags.h \ $(BASIC_BLOCK_H) regs.h hard-reg-set.h insn-config.h output.h reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h output.h expr.h\ - reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h + reload.h $(RECOG_H) hard-reg-set.h insn-config.h insn-codes.h regs.h real.h reload1.o : reload1.c $(CONFIG_H) $(RTL_H) real.h flags.h expr.h \ reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \ - $(BASIC_BLOCK_H) recog.h output.h + $(BASIC_BLOCK_H) $(RECOG_H) output.h caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \ - regs.h hard-reg-set.h insn-codes.h insn-config.h $(BASIC_BLOCK_H) recog.h \ + regs.h hard-reg-set.h insn-codes.h insn-config.h $(BASIC_BLOCK_H) $(RECOG_H) \ reload.h expr.h reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \ - $(BASIC_BLOCK_H) regs.h insn-config.h insn-attr.h insn-flags.h recog.h \ + $(BASIC_BLOCK_H) regs.h insn-config.h insn-attr.h insn-flags.h $(RECOG_H) \ flags.h output.h sched.o : $(SCHED_PREFIX)sched.c $(CONFIG_H) $(RTL_H) $(BASIC_BLOCK_H) regs.h hard-reg-set.h \ flags.h insn-config.h insn-attr.h final.o : final.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h regs.h \ - recog.h conditions.h insn-config.h insn-attr.h except.h real.h output.h \ + $(RECOG_H) conditions.h insn-config.h insn-attr.h except.h real.h output.h \ hard-reg-set.h insn-flags.h insn-codes.h gstab.h xcoffout.h defaults.h recog.o : recog.c $(CONFIG_H) $(RTL_H) \ - regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \ + regs.h $(RECOG_H) hard-reg-set.h flags.h insn-config.h insn-attr.h \ insn-flags.h insn-codes.h real.h reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \ regs.h hard-reg-set.h flags.h insn-config.h insn-flags.h @@ -1441,7 +1447,7 @@ stamp-emit : $(md_file) genemit $(srcdir)/move-if-change $(srcdir)/move-if-change tmp-emit.c insn-emit.c touch stamp-emit -insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h recog.h \ +insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \ real.h output.h flags.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c @@ -1452,7 +1458,7 @@ stamp-recog : $(md_file) genrecog $(srcdir)/move-if-change touch stamp-recog insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \ - insn-config.h flags.h rtl.h recog.h expr.h reload.h + insn-config.h flags.h $(RECOG_H) expr.h reload.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c insn-opinit.c: stamp-opinit ; @true @@ -1502,7 +1508,7 @@ stamp-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change touch stamp-attrtab insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \ - hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h recog.h \ + hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h $(RECOG_H) \ insn-codes.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c @@ -2404,7 +2410,7 @@ gcc.xtar: distdir # This target exists to do the initial work before the language specific # stuff gets done. distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \ - $(srcdir)/c-parse.c $(srcdir)/cexp.c + $(srcdir)/c-parse.c $(srcdir)/cexp.c $(srcdir)/config.in @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \ then true; \ else echo "You must update the version number in \`gcc.texi'"; sleep 10;\ diff --git a/gcc/NEWS b/gcc/NEWS index cdd33f910a8..93dfa8eb012 100644 --- a/gcc/NEWS +++ b/gcc/NEWS @@ -1,31 +1,149 @@ -Noteworthy changes in GCC version 2.8.0: +Noteworthy changes in GCC version 2.8.0 +--------------------------------------- -The -specs=file switch allows you to override default specs used in invoking -programs like cc1, as, etc. +A major change in this release is the addition of a framework for +exception handling, currently used by C++. Many internal changes and +optimization improvements have been made. These increase the +maintainability and portability of GCC. GCC now uses autoconf to +compute many host parameters. -Options -Wall and -Wimplicit now cause GCC to warn about implicit int -in declarations (e.g. `register i;'), since the C Standard committee -has decided to disallow this in the next revision of the standard. +The following lists changes that add new features or targets. -The following new targets are supported: +See cp/NEWS for new features of C++ in this release. - Solaris 2.5 running on UltraSPARC's. - The sparclet cpu (a.out file format). - Solaris 2.51 running on PowerPC's. - Linux running on PowerPC's. - Embedded target m32r-elf. - Embedded target arc-elf. - IRIX 6.2 running on MIPS. +New tools and features: -New features for the Hitachi H8/300(H). + The Dwarf 2 debugging information format is supported on ELF systems, and + is the default for -ggdb where available. It can also be used for C++. + The Dwarf version 1 debugging format is also permitted for C++, but + does not work well. - -malign-300 - -ms + gcov.c is provided for test coverage analysis and branch profiling + analysis is also supported; see -fprofile-arcs, -ftest-coverage, + and -fbranch-probabilities. + + Support for the Checker memory checking tool. + + New switch, -fstack-check, to check for stack overflow on systems that + don't have such built into their ABI. + + New switches, -Wundef and -Wno-undef to warn if an undefined identifier + is evaluated in an #if directive. + + Options -Wall and -Wimplicit now cause GCC to warn about implicit int + in declarations (e.g. `register i;'), since the C Standard committee + has decided to disallow this in the next revision of the standard; + -Wimplicit-function-declarations and -Wimplicit-int are subsets of + this. + + Option -Wsign-compare causes GCC to warn about comparison of signed and + unsigned values. + + Add -dI option of cccp for cxref. + +New features in configuration, installation and specs file handling: + + New option --enable-c-cpplib to configure script. + + Allow --with-cpu on configure command to specify a default CPU. + + The -specs=file switch allows you to override default specs used in + invoking programs like cc1, as, etc. + + Allow including one specs file from another and renaming a specs + variable. + + You can now relocate all GCC files with a single environment variable + or a registry entry under Windows 95 and Windows NT. + +Changes in Objective-C: + + The Objective-C Runtime Library has been made thread-safe. + + The Objective-C Runtime Library contains an interface for creating + mutexes, condition mutexes, and threads; it requires a back-end + implementation for the specific platform and/or thread package. + Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads, + Solaris, and Windows32. The --enable-threads parameter can be used + when configuring GCC to enable and select a thread back-end. + + Objective-C is now configured as separate front-end language to GCC, + making it more convenient to conditionally build it. -The -ms switch generates code for the Hitachi H8/S processor. + The internal structures of the Objective-C Runtime Library have + changed sufficiently to warrant a new version number; now version 8. + Programs compiled with an older version must be recompiled. + + The Objective-C Runtime Library can be built as a DLL on Windows 95 + and Windows NT systems. + + The Objective-C Runtime Library implements +load. + +The following new targets are supported (see also list under each +individual CPU below): + + Embedded target m32r-elf. + Embedded Hitachi Super-H using ELF. + RTEMS real-time system on various CPU targets. + ARC processor. + NEC V850 processor. + Matsushita MN10200 processor. + Matsushita MN10300 processor. + Sparc and PowerPC running on VxWorks. + Support both glibc versions 1 and 2 on Linux-based GNU systems. + +New features for DEC Alpha systems: + + Allow detailed specification of IEEE fp support: + -mieee, -mieee-with-inexact, and -mieee-conformant + -mfp-trap-mode=xxx, -mfp-round-mode=xxx, -mtrap-precision=xxx + -mcpu=xxx for CPU selection + Support scheduling parameters for EV5. + Add support for BWX, CIX, and MAX instruction set extensions. + Support Linux-based GNU systems. + Support VMS. + +Additional supported processors and systems for MIPS targets: + + MIPS4 instruction set. + R4100, R4300 and R5000 processors. + N32 and N64 ABI. + IRIX 6.2. + SNI SINIX. + +New features for Intel x86 family: + + Add scheduling parameters for Pentium and Pentium Pro. + Support stabs on Solaris-x86. + Intel x86 processors running the SCO OpenServer 5 family. + Intel x86 processors running DG/UX. + Intel x86 using Cygwin32 or Mingw32 on Windows 95 and Windows NT. + +New features for Motorola 68k family: + + Support for 68060 processor. + More consistent switches to specify processor. + Motorola 68k family running AUX. + 68040 running pSOS, ELF object files, DBX debugging. + Coldfire variant of Motorola m68k family. + +New features for the HP PA RISC: + + -mspace and m-no-space + -mlong-load-store and -mno-long-load-store + -mbig-switch -mno-big-switch + + GCC on the PA requires either gas-2.7 or the HP assembler; for best + results using GAS is highly recommended. GAS is required for -g and + exception handling support. New features for SPARC-based systems: + The ultrasparc cpu. + The sparclet cpu, supporting only a.out file format. + Sparc running SunOS 4 with the GNU assembler. + Sparc running the Linux-based GNU system. + Embedded Sparc processors running the ELF object file format. -mcpu=xxx -mtune=xxx -malign-loops=xxx @@ -33,71 +151,99 @@ New features for SPARC-based systems: -malign-functions=xxx -mimpure-text and -mno-impure-text -New features for all rs6000 and PowerPC systems: + Options -mno-v8 and -mno-sparclite are no longer supported on SPARC + targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930, + and -mf934 are deprecated and will be deleted in GCC 2.9. Use + -mcpu=xxx instead. - -mcpu=604e - -mcpu=801 - -mcpu=823 - -mtune=xxx - -mupdate - -mno-update - -mfused-madd - -mno-fused-madd +New features for rs6000 and PowerPC systems: -New features for PowerPC-based systems running either System V, Linux, Solaris, -or embedded systems: + Solaris 2.51 running on PowerPC's. + The Linux-based GNU system running on PowerPC's. + -mcpu=604e,602,603e,620,801,823,mpc505,821,860,power2 + -mtune=xxx + -mrelocatable-lib, m-no-relocatable-lib + -msim, -mmve, -memb + -mupdate, -mno-update + -mfused-madd, -mno-fused-madd -mregnames -meabi - -mcall-linux - -mcall-solaris - -mcall-sysv-eabi - -mcall-sysv-noeabi - -msdata - -msdata=none - -msdata=default - -msdata=sysv - -msdata=eabi - -memb - -msim - -mmvme - -myellowknife - -mads - wchar_t is now of type long, not unsigned short as per ABI. + -mcall-linux, -mcall-solaris, -mcall-sysv-eabi, -mcall-sysv-noeabi + -msdata, -msdata=none, -msdata=default, -msdata=sysv, -msdata=eabi + -memb, -msim, -mmvme + -myellowknife, -mads + wchar_t is now of type long as per the ABI, not unsigned short. -p/-pg support -mcpu=403 now implies -mstrict-align. + Implement System V profiling. + + Aix 4.1 GCC targets now default to -mcpu=common so that programs + compiled can be moved between rs6000 and powerpc based systems. A + consequence of this is that -static won't work, and that some programs + may be slightly slower. -Options -mno-v8 and -mno-sparclite are no longer supported on SPARC -targets. Options -mcypress, -mv8, -msupersparc, -msparclite, -mf930, -and -mf934 are deprecated and will be deleted in GCC 2.9. -Use -mcpu=xxx instead. + You can select the default value to use for -mcpu=xxx on rs6000 and + powerpc targets by using the --with-cpu=xxx option when configuring the + compiler. In addition, a new options, -mtune=xxx was added that + selects the machine to schedule for but does not select the + architecture level. -GCC on the PA requires either gas-2.7 or the HP assembler; for best -results using GAS is highly recommended. GAS is required for -g -and exception handling support. + Directory names used for storing the multilib libraries on System V + and embedded PowerPC systems have been shortened to work with commands + like tar that have fixed limits on pathname size. -Aix 4.1 GCC targets now default to -mcpu=common so that programs compiled can -be moved between rs6000 and powerpc based systems. A consequence of this is -that -static won't work, and that some programs may be slightly slower. +New features for the Hitachi H8/300(H): + + -malign-300 + -ms (for the Hitachi H8/S processor) + -mint32 -You can select the default value to use for -mcpu=xxx on rs6000 and powerpc -targets by using the --with-cpu=xxx option when confiuring the compiler. In -addition, a new options, -mtune=xxx was added that selects the machine to -schedule for but does not select the architecture level. +New features for the ARM: -Directory names used for storing the multilib libraries on System V and -embedded PowerPC systems have been shortened to work with commands like tar -that have fixed limits on pathname size. + -march=xxx, -mtune=xxx, -mcpu=xxx + Support interworking with Thumb code. + ARM processor with a.out object format, COFF, or AOF assembler. + ARM on "semi-hosted" platform. + ARM running NetBSD. + ARM running the Linux-based GNU system. -The DWARF 2 debugging information format is supported on ELF systems, and -is the default for -ggdb where available. +New feature for Solaris systems: -Noteworthy changes in GCC version 2.7.2: + GCC installation no longer makes a copy of system include files, + thus insulating GCC better from updates to the operating system. + +Changes in Objective-C: + + The Objective-C Runtime Library has been made thread-safe. + + The Objective-C Runtime Library contains an interface for creating + mutexes, condition mutexes, and threads; it requires a back-end + implementation for the specific platform and/or thread package. + Currently supported are DEC/OSF1, IRIX, Mach, OS/2, POSIX, PCThreads, + Solaris, and Windows32. The --enable-threads parameter can be used + when configuring GCC to enable and select a thread back-end. + + Objective-C is now configured as separate front-end language to GCC, + making it more convenient to conditionally build it. + + The internal structures of the Objective-C Runtime Library have + changed sufficiently to warrant a new version number; now version 8. + Programs compiled with an older version must be recompiled. + + The Objective-C Runtime Library can be built as a DLL on Windows 95 + and Windows NT systems. + + The Objective-C Runtime Library implements +load. + +Noteworthy changes in GCC version 2.7.2 +--------------------------------------- A few bugs have been fixed (most notably the generation of an invalid assembler opcode on some RS/6000 systems). -Noteworthy changes in GCC version 2.7.1: +Noteworthy changes in GCC version 2.7.1 +--------------------------------------- This release fixes numerous bugs (mostly minor) in GCC 2.7.0, but also contains a few new features, mostly related to specific targets. @@ -121,8 +267,9 @@ sequence used in GCC version 2.7.0. That calling sequence was based on the AIX calling sequence without function descriptors. To compile code for that older calling sequence, either configure the compiler for powerpc-*-eabiaix or use the -mcall-aix switch when compiling and linking. - -Noteworthy changes in GCC version 2.7.0: + +Noteworthy changes in GCC version 2.7.0 +--------------------------------------- GCC now works better on systems that use ".obj" and ".exe" instead of ".o" and no extension. This involved changes to the driver program, @@ -374,7 +521,7 @@ The following new configurations are supported: GNU on x86 (instead of treating it like MACH) NetBSD on Sparc and Motorola 68k AIX 4.1 on RS/6000 and PowerPC systems - Sequent DYNUX/ptx 1.x and 2.x. + Sequent DYNIX/ptx 1.x and 2.x. Both COFF and ELF configurations on AViiON without using /bin/gcc Windows/NT on x86 architecture; preliminary AT&T DSP1610 digital signal processor chips diff --git a/gcc/ORDERS b/gcc/ORDERS index 7b5fdee5ff8..fb5790701db 100644 --- a/gcc/ORDERS +++ b/gcc/ORDERS @@ -636,7 +636,7 @@ package. * acct (SrcCD) acct is a system accounting package. It includes the programs `ac' - (summariize login accounting), `accton' (turn accounting on or off), + (summarize login accounting), `accton' (turn accounting on or off), `last' (show who has logged in recently), `lastcomm' (show which commands have been used), `sa' (summarize process accounting), `dump-utmp' (print a `utmp' file in human-readable format), & @@ -1601,7 +1601,7 @@ package. The Midnight Commander is a user friendly & colorful Unix file manager & shell, useful to novice & guru alike. It has a built-in virtual file system that manipulates files inside tar files or files on remote - machines using the FTP protocol. This mechanism is extendable with + machines using the FTP protocol. This mechanism is extensible with external Unix programs. * Miscellaneous Files Distribution (SrcCD) diff --git a/gcc/README b/gcc/README index 42a46ee3414..6e4fed8153a 100644 --- a/gcc/README +++ b/gcc/README @@ -1,4 +1,4 @@ -This directory contains the version 2.7.99 release of the GNU C +This directory contains the version 2.8.0 release of the GNU C compiler. It includes all of the support for compiling C++ and Objective C, including a run-time library for Objective C. diff --git a/gcc/README.X11 b/gcc/README.X11 index 359dd5f9603..ade0f5ab531 100644 --- a/gcc/README.X11 +++ b/gcc/README.X11 @@ -20,7 +20,7 @@ IF YOU THINK YOU MIGHT COMPILE X FOR SOLARIS 2, then you really don't need this patch: get /contrib/R5.SunOS5.patch.tar.Z from export.lcs.mit.edu instead. It has everything you need to do the build for Solaris 2, sets you up to everything with GCC, and is -backward compatible with Sunos 4.*. Get the the README +backward compatible with SunOS 4.*. Get the the README (/contrib/R5.SunOS5.patch.README at export) for more info. If you see undefined symbols _dlopen, _dlsym, or _dlclose when linking diff --git a/gcc/SERVICE b/gcc/SERVICE index da8a4ee7d6b..680f2a2628f 100644 --- a/gcc/SERVICE +++ b/gcc/SERVICE @@ -235,7 +235,7 @@ Ashland, MA 01721-1987 (Please call only between 0900-1700 Eastern time, and only if you are prepared to hire me -- ask me to help you for free only via email, to which I might or might not respond.) -Email: --preferred-- +Email: --preferred-- @@ -254,7 +254,7 @@ Rate: $100/hour -- willing to consider flat-fee arrangements Updated: 1997-05-07  -Thomas Bushnell, n/BSG +Thomas Bushnell, n/BSG Becket House 66 Highland Ave. No. 8 Somerville, MA 02143 @@ -271,7 +271,7 @@ Experience: I have done Unix and GNU programming for several years, I am easily available in the Cambridge/Boston area; work via email. I am willing to travel for sufficiently large jobs. -Rates: $100/hr, negotiable, less for non-profit organizaions. +Rates: $100/hr, negotiable, less for non-profit organizations. Updated: 1997-05-07  @@ -413,7 +413,7 @@ Cygnus Solutions contacts: email: Updated: 1997-09-02 by rms  -Marcus G. Daniels +Marcus G. Daniels 31060 S. Kaufman Rd. Canby, OR 97013-9520 (503) 651-2694 @@ -791,13 +791,13 @@ Cellular: +46 (10) 222 64 05 e-mail: What I do: - Primarly I work on GNU software for VMS, both VAX and AXP. I've + Primarily I work on GNU software for VMS, both VAX and AXP. I've been porting GNU Emacs to VMS since spring 1991. I've ported a bunch of other GNU programs as well. I maintain GNU vmslib. For further info, see http://www.lp.se/~levitte/prof/resume.html Programs supported: - To a varying degree (ranging from extention and porting to + To a varying degree (ranging from extension and porting to installation and simple questions) at the time of updating this entry: - GNU vmslib, emacs, autoconf, zip, diffutils, m4, patch, texinfo, @@ -835,7 +835,7 @@ to 2, 5, 25 and larger number of users via phone, email, ftp. Updated: 1997-05-01  -Gord Matzigkeit +Gord Matzigkeit 2220 Capitol Hill Crescent http://www.m-tech.ab.ca/~gord/ Calgary, Alberta T2M 4B9 Voice: (403) 282-1387 CANADA FAX: (403) 284-0137 @@ -1092,10 +1092,10 @@ Signum Support AB is a company dedicated to supporting, developing and distributing free software for mainly UNIX systems. The people behind Signum Support AB have many years of general UNIX and Internet experience, both as system administrators and as programmers, and also -extensive experience in maintaining and administring the GNU programs +extensive experience in maintaining and administering the GNU programs and Linux. -Signum Support develops and markets the free GUI equiped Readynet +Signum Support develops and markets the free GUI equipped Readynet Internet server, the free PHTTPD http server and the easy to use Linux based Fuego firewall. @@ -1110,7 +1110,7 @@ Services offered: programs. - Warranty protection. - Finding, Recommending and Investigation of free software in any - area of the customers choise. + area of the customer's choice. - Regular consulting. Rates: For software items, request our price list. @@ -1118,7 +1118,7 @@ Rates: For software items, request our price list. Updated: 1997-05-12  - Jon Solomon + Jon Solomon 235 Main St., Apt 3C-1 East Hartford, Conn. 06118 +1 860 895-8289 @@ -1126,7 +1126,7 @@ Updated: 1997-05-12 Maintains all GNU software... Available for General Consulting (contact me if you are interested)... Sendmail a specialty... Can answer questions pertaining to the - installation, maintainence, bug reporting and fixing for + installation, maintenance, bug reporting and fixing for most GNU products... Adhering to the FSF/GNU copyleft for all work... (I only charge for the time it takes to do the above, the software (and most GNU copyleft'd software) is free. @@ -1162,7 +1162,7 @@ WHEN CONTACTING ME, DO THIS :- 1) Tell me Immediately, Are You: A) Expecting to pay my bill for professional consultancy. B) Seeking a few minutes advice free of charge. - 2) Give me your email adddress, or that of a friend. + 2) Give me your email address, or that of a friend. or Volunteer to phone back ~ 5 days later to collect follow-up info. from the net. (No I will not incur bills phoning you back). 3) Speak English if you want free advice ! I speak German, & @@ -1170,7 +1170,7 @@ WHEN CONTACTING ME, DO THIS :- Updated: 1997-05-15  -Richard M. Stallman +Richard M. Stallman 545 Tech Sq, Rm 430 Cambridge, MA 02139 @@ -1191,7 +1191,7 @@ Phone: (408) 978-1407 Fax: (408) 978-1417 I will help you port, install and customize GNU Emacs, GCC, G++, -bison, and other GNU tools on almost any architechture and operating +bison, and other GNU tools on almost any architecture and operating system. Questions answered. GNU C and lisp hacking available. I will also do ongoing support and periodic upgrades if you get on my GNU software subscription list. @@ -1314,7 +1314,7 @@ http://info.noris.de/ (German) Expertise: OS internals, esp. Linux and BSD, esp. device drivers Network protocol / program design and coding - Utilities coding and maintainance + Utilities coding and maintenance Program debugging, testing User interface design and testing Several programming and tool languages @@ -1399,7 +1399,7 @@ E-mail: My profile is listed at: http://www.opentech.co.jp/~zhou/ I have two years of experience porting and supporting GNU C Compiler and -GNU Assember at the Wingnut project of SRA, Inc., Tokyo. +GNU Assembler at the Wingnut project of SRA, Inc., Tokyo. I can provide free consultation on these products if the problem is not time-consuming. diff --git a/gcc/acconfig.h b/gcc/acconfig.h index 5240ab8f44d..2b6c1442c97 100644 --- a/gcc/acconfig.h +++ b/gcc/acconfig.h @@ -1,3 +1,6 @@ +/* Define if you have a working header file. */ +#undef HAVE_INTTYPES_H + /* Whether malloc must be declared even if is included. */ #undef NEED_DECLARATION_MALLOC @@ -9,4 +12,10 @@ /* Whether free must be declared even if is included. */ #undef NEED_DECLARATION_FREE + +/* Whether index must be declared even if is included. */ +#undef NEED_DECLARATION_INDEX + +/* Whether rindex must be declared even if is included. */ +#undef NEED_DECLARATION_RINDEX @TOP@ diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4 index 6a45a4cfb81..07424f1e9a0 100644 --- a/gcc/aclocal.m4 +++ b/gcc/aclocal.m4 @@ -16,6 +16,12 @@ AC_CACHE_VAL(gcc_cv_decl_needed_$1, #endif #ifdef HAVE_UNISTD_H #include +#endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr #endif], [char *(*pfn) = (char *(*)) $1], gcc_cv_decl_needed_$1=no, gcc_cv_decl_needed_$1=yes)]) diff --git a/gcc/bc-optab.c b/gcc/bc-optab.c index b6fc68a0277..4837d33850f 100644 --- a/gcc/bc-optab.c +++ b/gcc/bc-optab.c @@ -21,6 +21,9 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #include +#ifdef HAVE_STDLIB_H +#include +#endif #include "tree.h" #include "rtl.h" #include "machmode.h" diff --git a/gcc/bitmap.h b/gcc/bitmap.h index bdedef351a7..2df648965f5 100644 --- a/gcc/bitmap.h +++ b/gcc/bitmap.h @@ -200,7 +200,7 @@ do { \ for (; ptr1_ != 0 ; ptr1_ = ptr1_->next) \ { \ /* Advance BITMAP2 to the equivalent link, using an all \ - zero element if an equavialent link doesn't exist. */ \ + zero element if an equivalent link doesn't exist. */ \ bitmap_element *tmp2_; \ \ while (ptr2_ != 0 && ptr2_->indx < ptr1_->indx) \ diff --git a/gcc/c-aux-info.c b/gcc/c-aux-info.c index d63e644b4de..a14d6225664 100644 --- a/gcc/c-aux-info.c +++ b/gcc/c-aux-info.c @@ -39,14 +39,14 @@ typedef enum formals_style_enum formals_style; static char *data_type; -static char *concat (); -static char *concat3 (); -static char *gen_formal_list_for_type (); -static int deserves_ellipsis (); -static char *gen_formal_list_for_func_def (); -static char *gen_type (); -static char *gen_decl (); -void gen_aux_info_record (); +static char *concat PROTO((char *, char *)); +static char *concat3 PROTO((char *, char *, char *)); +static char *affix_data_type PROTO((char *)); +static char *gen_formal_list_for_type PROTO((tree, formals_style)); +static int deserves_ellipsis PROTO((tree)); +static char *gen_formal_list_for_func_def PROTO((tree, formals_style)); +static char *gen_type PROTO((char *, tree, formals_style)); +static char *gen_decl PROTO((tree, int, formals_style)); /* Take two strings and mash them together into a newly allocated area. */ diff --git a/gcc/c-common.c b/gcc/c-common.c index 1462c25b922..e7d7f71ac8b 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -929,7 +929,7 @@ static format_char_info print_char_table[] = { /* Two GNU extensions. */ { "Z", 0, T_ST, NULL, NULL, NULL, NULL, "-wp0" }, { "m", 0, T_V, NULL, NULL, NULL, NULL, "-wp" }, - { "feEgG", 0, T_D, NULL, NULL, NULL, T_LD, "-wp0 +#" }, + { "feEgGaA", 0, T_D, NULL, NULL, NULL, T_LD, "-wp0 +#" }, { "c", 0, T_I, NULL, T_W, NULL, NULL, "-w" }, { "C", 0, T_W, NULL, NULL, NULL, NULL, "-w" }, { "s", 1, T_C, NULL, T_W, NULL, NULL, "-wp" }, @@ -942,7 +942,7 @@ static format_char_info print_char_table[] = { static format_char_info scan_char_table[] = { { "di", 1, T_I, T_S, T_L, T_LL, T_LL, "*" }, { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, "*" }, - { "efgEG", 1, T_F, NULL, T_D, NULL, T_LD, "*" }, + { "efgEGaA", 1, T_F, NULL, T_D, NULL, T_LD, "*" }, { "sc", 1, T_C, NULL, T_W, NULL, NULL, "*a" }, { "[", 1, T_C, NULL, NULL, NULL, NULL, "*a" }, { "C", 1, T_W, NULL, NULL, NULL, NULL, "*" }, @@ -1404,10 +1404,15 @@ check_format_info (info, params) pedwarn ("ANSI C does not support the `ll' length modifier"); } aflag = 0; - if (*format_chars == 'a') + if (*format_chars == 'a' && info->is_scan) { - aflag = 1; - format_chars++; + if (format_chars[1] == 's' || format_chars[1] == 'S' + || format_chars[1] == '[') + { + /* `a' is used as a flag. */ + aflag = 1; + format_chars++; + } } if (suppressed && length_char != 0) { diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 6900324c53f..7688dd23d67 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -1758,7 +1758,7 @@ duplicate_decls (newdecl, olddecl, different_binding_level) /* Optionally warn about more than one declaration for the same name. */ if (errmsg == 0 && warn_redundant_decls && DECL_SOURCE_LINE (olddecl) != 0 - /* Dont warn about a function declaration + /* Don't warn about a function declaration followed by a definition. */ && !(TREE_CODE (newdecl) == FUNCTION_DECL && DECL_INITIAL (newdecl) != 0 && DECL_INITIAL (olddecl) == 0) diff --git a/gcc/c-lex.c b/gcc/c-lex.c index bee6ce7059d..77d40a40573 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -35,6 +35,13 @@ Boston, MA 02111-1307, USA. */ #include +/* MULTIBYTE_CHARS support only works for native compilers. + ??? Ideally what we want is to model widechar support after + the current floating point support. */ +#ifdef CROSS_COMPILE +#undef MULTIBYTE_CHARS +#endif + #ifdef MULTIBYTE_CHARS #include #include @@ -128,6 +135,9 @@ static int end_of_file; static int nextchar = -1; #endif +static int skip_which_space PROTO((int)); +static char *extend_token_buffer PROTO((char *)); +static int readescape PROTO((int *)); int check_newline (); /* Do not insert generated code into the source, instead, include it. @@ -323,7 +333,6 @@ yyprint (file, yychar, yylval) break; } } - /* If C is not whitespace, return C. Otherwise skip whitespace and return first nonwhite char read. */ @@ -415,7 +424,6 @@ extend_token_buffer (p) return token_buffer + offset; } - #if !USE_CPPLIB #define GET_DIRECTIVE_LINE() get_directive_line (finput) @@ -1663,20 +1671,15 @@ yylex () c = GETC(); } - /* If the constant is not long long and it won't fit in an - unsigned long, or if the constant is long long and won't fit - in an unsigned long long, then warn that the constant is out - of range. */ + /* If the constant won't fit in an unsigned long long, + then warn that the constant is out of range. */ /* ??? This assumes that long long and long integer types are a multiple of 8 bits. This better than the original code though which assumed that long was exactly 32 bits and long long was exactly 64 bits. */ - if (spec_long_long) - bytes = TYPE_PRECISION (long_long_integer_type_node) / 8; - else - bytes = TYPE_PRECISION (long_integer_type_node) / 8; + bytes = TYPE_PRECISION (long_long_integer_type_node) / 8; warn = overflow; for (i = bytes; i < TOTAL_PARTS; i++) @@ -1743,7 +1746,9 @@ yylex () else if (! spec_unsigned && !spec_long_long && int_fits_type_p (yylval.ttype, long_integer_type_node)) ansi_type = long_integer_type_node; - else if (! spec_long_long) + else if (! spec_long_long + && int_fits_type_p (yylval.ttype, + long_unsigned_type_node)) ansi_type = long_unsigned_type_node; else if (! spec_unsigned && int_fits_type_p (yylval.ttype, @@ -1767,8 +1772,9 @@ yylex () warning ("width of integer constant may change on other systems with -traditional"); } - if (!flag_traditional && !int_fits_type_p (yylval.ttype, type) - && !warn) + if (pedantic && !flag_traditional && !spec_long_long && !warn + && (TYPE_PRECISION (long_integer_type_node) + < TYPE_PRECISION (type))) pedwarn ("integer constant out of range"); if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type)) @@ -1999,15 +2005,9 @@ yylex () bzero (widep + (len * WCHAR_BYTES), WCHAR_BYTES); #else { - union { long l; char c[sizeof (long)]; } u; - int big_endian; char *wp, *cp; - /* Determine whether host is little or big endian. */ - u.l = 1; - big_endian = u.c[sizeof (long) - 1]; - wp = widep + (big_endian ? WCHAR_BYTES - 1 : 0); - + wp = widep + (BYTES_BIG_ENDIAN ? WCHAR_BYTES - 1 : 0); bzero (widep, (p - token_buffer) * WCHAR_BYTES); for (cp = token_buffer + 1; cp < p; cp++) *wp = *cp, wp += WCHAR_BYTES; diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c index 854edf66f8d..83b9802075f 100644 --- a/gcc/c-pragma.c +++ b/gcc/c-pragma.c @@ -65,7 +65,7 @@ handle_pragma_token (string, token) if (HANDLE_PRAGMA_WEAK) handle_pragma_weak (state, name, value); -#endif /* HANDLE_PRAMA_WEAK */ +#endif /* HANDLE_PRAGMA_WEAK */ } type = state = ps_start; diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 7be030dcd1b..135ca9b09c2 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -35,12 +35,29 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "output.h" +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif + /* Nonzero if we've already printed a "missing braces around initializer" message within this initializer. */ static int missing_braces_mentioned; +#ifdef NEED_DECLARATION_INDEX extern char *index (); +#endif + +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); +#endif static tree qualify_type PROTO((tree, tree)); static int comp_target_types PROTO((tree, tree)); diff --git a/gcc/calls.c b/gcc/calls.c index d9959d34915..095c2f37707 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1859,7 +1859,8 @@ expand_call (exp, target, ignore) VOIDmode, 3, structure_value_addr, ptr_mode, GEN_INT (struct_value_size), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), QImode); + GEN_INT (MEMORY_USE_WO), + TYPE_MODE (integer_type_node)); if (GET_CODE (struct_value_rtx) == REG) use_reg (&call_fusage, struct_value_rtx); @@ -3564,7 +3565,8 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size, fndecl, XEXP (arg->stack, 0), ptr_mode, GEN_INT (GET_MODE_SIZE (arg->mode)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); } } else if (arg->mode != BLKmode) diff --git a/gcc/cccp.c b/gcc/cccp.c index e8d93b0632c..776597394f9 100644 --- a/gcc/cccp.c +++ b/gcc/cccp.c @@ -16,87 +16,27 @@ 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. +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! */ - -typedef unsigned char U_CHAR; - -#ifdef EMACS -#define NO_SHORTNAMES -#include "../src/config.h" -#ifdef open -#undef open -#undef read -#undef write -#endif /* open */ -#endif /* EMACS */ - -/* The macro EMACS is defined when cpp is distributed as part of Emacs, - for the sake of machines with limited C compilers. */ -#ifndef EMACS #include "config.h" -#endif /* not EMACS */ - -#ifndef STANDARD_INCLUDE_DIR -#define STANDARD_INCLUDE_DIR "/usr/include" -#endif - -#include "pcp.h" - -/* By default, colon separates directories in a path. */ -#ifndef PATH_SEPARATOR -#define PATH_SEPARATOR ':' -#endif - -/* By default, the suffix for object files is ".o". */ -#ifdef OBJECT_SUFFIX -#define HAVE_OBJECT_SUFFIX -#else -#define OBJECT_SUFFIX ".o" -#endif - #include #include #include #include #include -/* The following symbols should be autoconfigured: - HAVE_FCNTL_H - HAVE_SYS_TIME_H - STDC_HEADERS - TIME_WITH_SYS_TIME - In the mean time, we'll get by with approximations based - on existing GCC configuration symbols. */ - -#ifdef POSIX -# ifndef STDC_HEADERS -# define STDC_HEADERS 1 -# endif -#endif /* defined (POSIX) */ - -#if defined (POSIX) || (defined (USG) && !defined (VMS)) -# ifndef HAVE_FCNTL_H -# define HAVE_FCNTL_H 1 -# endif -#endif - -#ifndef RLIMIT_STACK +#ifdef TIME_WITH_SYS_TIME +# include # include #else -# if TIME_WITH_SYS_TIME -# include -# include +# if HAVE_SYS_TIME_H +# include # else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -# endif +# include +#endif +#endif + +#ifdef HAVE_SYS_RESOURCE_H # include #endif @@ -108,96 +48,68 @@ typedef unsigned char U_CHAR; # include #endif +#if HAVE_UNISTD_H +# include +#endif + #include #if HAVE_STDLIB_H # include -#else -char *getenv (); #endif -#if STDC_HEADERS +#ifdef HAVE_STRING_H # include -# ifndef bcmp -# define bcmp(a, b, n) memcmp (a, b, n) -# endif -# ifndef bcopy -# define bcopy(s, d, n) memcpy (d, s, n) -# endif -# ifndef bzero -# define bzero(d, n) memset (d, 0, n) -# endif -#else /* !STDC_HEADERS */ -char *index (); -char *rindex (); - -# if !defined (BSTRING) && (defined (USG) || defined (VMS)) +#else +# ifdef HAVE_STRINGS_H +# inclued +#endif +#endif -# ifndef bcmp -# define bcmp my_bcmp -static int -my_bcmp (a, b, n) - register char *a; - register char *b; - register unsigned n; -{ - while (n-- > 0) - if (*a++ != *b++) - return 1; +typedef unsigned char U_CHAR; - return 0; -} -# endif /* !defined (bcmp) */ +#include "gansidecl.h" +#include "pcp.h" -# ifndef bcopy -# define bcopy my_bcopy -static void -my_bcopy (s, d, n) - register char *s; - register char *d; - register unsigned n; -{ - while (n-- > 0) - *d++ = *s++; -} -# endif /* !defined (bcopy) */ +#ifdef NEED_DECLARATION_INDEX +extern char *index (); +#endif -# ifndef bzero -# define bzero my_bzero -static void -my_bzero (b, length) - register char *b; - register unsigned length; -{ - while (length-- > 0) - *b++ = 0; -} -# endif /* !defined (bzero) */ +#ifdef NEED_DECLARATION_RINDEX +extern char *rindex (); +#endif -# endif /* !defined (BSTRING) && (defined (USG) || defined (VMS)) */ -#endif /* ! STDC_HEADERS */ +#ifdef NEED_DECLARATION_GETENV +extern char *getenv (); +#endif #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __attribute__(x) #endif -#ifndef PROTO -# if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__) -# define PROTO(ARGS) ARGS -# else -# define PROTO(ARGS) () -# endif +#ifndef STANDARD_INCLUDE_DIR +# define STANDARD_INCLUDE_DIR "/usr/include" +#endif + +/* By default, colon separates directories in a path. */ +#ifndef PATH_SEPARATOR +# define PATH_SEPARATOR ':' +#endif + +/* By default, the suffix for object files is ".o". */ +#ifdef OBJECT_SUFFIX +# define HAVE_OBJECT_SUFFIX +#else +# define OBJECT_SUFFIX ".o" #endif #if defined (__STDC__) && defined (HAVE_VPRINTF) # include -# define VA_START(va_list, var) va_start (va_list, var) # define PRINTF_ALIST(msg) char *msg, ... # define PRINTF_DCL(msg) # define PRINTF_PROTO(ARGS, m, n) PROTO (ARGS) __attribute__ ((format (__printf__, m, n))) #else # include -# define VA_START(va_list, var) va_start (va_list) # define PRINTF_ALIST(msg) msg, va_alist # define PRINTF_DCL(msg) char *msg; va_dcl # define PRINTF_PROTO(ARGS, m, n) () __attribute__ ((format (__printf__, m, n))) @@ -215,10 +127,6 @@ my_bzero (b, length) #define PRINTF_PROTO_2(ARGS) PRINTF_PROTO(ARGS, 2, 3) #define PRINTF_PROTO_3(ARGS) PRINTF_PROTO(ARGS, 3, 4) -#if HAVE_UNISTD_H -# include -#endif - /* VMS-specific definitions */ #ifdef VMS #include @@ -258,12 +166,10 @@ static void hack_vms_include_specification (); # include # define HOST_WIDE_INT intmax_t # else -# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \ - && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) +# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) # define HOST_WIDE_INT int # else -# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \ - || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) +# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) # define HOST_WIDE_INT long # else # define HOST_WIDE_INT long long @@ -288,24 +194,6 @@ static void hack_vms_include_specification (); #define INO_T_HASH(a) (a) #endif -/* Define a generic NULL if one hasn't already been defined. */ - -#ifndef NULL -#define NULL 0 -#endif - -#ifndef GENERIC_PTR -#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__) -#define GENERIC_PTR void * -#else -#define GENERIC_PTR char * -#endif -#endif - -#ifndef NULL_PTR -#define NULL_PTR ((GENERIC_PTR) 0) -#endif - #ifndef INCLUDE_LEN_FUDGE #define INCLUDE_LEN_FUDGE 0 #endif @@ -325,7 +213,7 @@ char *strerror (); char *strerror (int,...); #endif HOST_WIDE_INT parse_escape PROTO((char **, HOST_WIDE_INT)); -HOST_WIDE_INT parse_c_expression PROTO((char *)); +HOST_WIDE_INT parse_c_expression PROTO((char *, int)); #ifndef errno extern int errno; @@ -412,7 +300,7 @@ static enum {dump_none, dump_only, dump_names, dump_definitions} static int debug_output = 0; /* Nonzero means pass #include lines through to the output, - even if they are ifdeffed out. */ + even if they are ifdefed out. */ static int dump_includes; /* Nonzero indicates special processing used by the pcp program. The @@ -466,7 +354,7 @@ static int warn_trigraphs; /* Nonzero means warn if undefined identifiers are evaluated in an #if. */ -int warn_undef; +static int warn_undef; /* Nonzero means warn if #import is used. */ @@ -490,6 +378,9 @@ int c89; static int no_output; +/* Nonzero means we should look for header.gcc files that remap file names. */ +static int remap; + /* Nonzero means this file was included with a -imacros or -include command line and should not be recorded as an include file. */ @@ -1214,6 +1105,7 @@ static void make_assertion PROTO((char *, char *)); static struct file_name_list *new_include_prefix PROTO((struct file_name_list *, char *, char *, char *)); static void append_include_chain PROTO((struct file_name_list *, struct file_name_list *)); +static int quote_string_for_make PROTO((char *, char *)); static void deps_output PROTO((char *, int)); static void fatal PRINTF_PROTO_1((char *, ...)) __attribute__ ((noreturn)); @@ -1775,6 +1667,11 @@ main (argc, argv) no_precomp = 1; break; + case 'r': + if (!strcmp (argv[i], "-remap")) + remap = 1; + break; + case 'u': /* Sun compiler passes undocumented switch "-undef". Let's assume it means to inhibit the predefined symbols. */ @@ -2212,8 +2109,11 @@ main (argc, argv) } else { /* Read a file whose size we can determine in advance. For the sake of VMS, st.st_size is just an upper bound. */ - fp->buf = (U_CHAR *) xmalloc (st.st_size + 2); - fp->length = safe_read (f, (char *) fp->buf, st.st_size); + size_t s = (size_t) st.st_size; + if (s != st.st_size || s + 2 < s) + memory_full (); + fp->buf = (U_CHAR *) xmalloc (s + 2); + fp->length = safe_read (f, (char *) fp->buf, s); if (fp->length < 0) goto perror; } fp->bufp = fp->buf; @@ -4704,7 +4604,7 @@ absolute_filename (filename) Do only the simplifications allowed by Posix. It is OK to miss simplifications on non-Posix hosts, - since this merely leads to suboptimial results. */ + since this merely leads to suboptimal results. */ static size_t simplify_filename (filename) @@ -4921,7 +4821,7 @@ open_include_file (filename, searchptr, importing, pinc) U_CHAR *importing; struct include_file **pinc; { - char *fname = remap_include_file (filename, searchptr); + char *fname = remap ? remap_include_file (filename, searchptr) : filename; int fd = -2; /* Look up FNAME in include_hashtab. */ @@ -5085,12 +4985,15 @@ finclude (f, inc, op, system_header_p, dirptr) fp->dir = dirptr; if (S_ISREG (inc->st.st_mode)) { - fp->buf = (U_CHAR *) xmalloc (inc->st.st_size + 2); + size_t s = (size_t) inc->st.st_size; + if (s != inc->st.st_size || s + 2 < s) + memory_full (); + fp->buf = (U_CHAR *) xmalloc (s + 2); fp->bufp = fp->buf; - /* Read the file contents, knowing that inc->st.st_size is an upper bound + /* Read the file contents, knowing that s is an upper bound on the number of bytes we can read. */ - fp->length = safe_read (f, (char *) fp->buf, inc->st.st_size); + fp->length = safe_read (f, (char *) fp->buf, s); if (fp->length < 0) goto nope; } else if (S_ISDIR (inc->st.st_mode)) { @@ -5205,8 +5108,11 @@ check_precompiled (pcf, st, fname, limit) if (S_ISREG (st->st_mode)) { - buf = xmalloc (st->st_size + 2); - length = safe_read (pcf, buf, st->st_size); + size_t s = (size_t) st->st_size; + if (s != st->st_size || s + 2 < s) + memory_full (); + buf = xmalloc (s + 2); + length = safe_read (pcf, buf, s); if (length < 0) goto nope; } @@ -5806,7 +5712,8 @@ compare_defs (d1, d2) if (d1->nargs != d2->nargs) return 1; - if (strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames)) + if (pedantic + && strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames)) return 1; for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2; a1 = a1->next, a2 = a2->next) { @@ -7026,7 +6933,8 @@ eval_if_expression (buf, length) delete_macro (save_defined); /* clean up special symbol */ temp_obuf.buf[temp_obuf.length] = '\n'; - value = parse_c_expression ((char *) temp_obuf.buf); + value = parse_c_expression ((char *) temp_obuf.buf, + warn_undef && !instack[indepth].system_header_p); free (temp_obuf.buf); @@ -9934,6 +9842,67 @@ append_include_chain (first, last) last_include = last; } +/* Place into DST a representation of the file named SRC that is suitable + for `make'. Do not null-terminate DST. Return its length. */ +static int +quote_string_for_make (dst, src) + char *dst; + char *src; +{ + char *p = src; + int i = 0; + for (;;) + { + char c = *p++; + switch (c) + { + case '\0': + case ' ': + case '\t': + { + /* GNU make uses a weird quoting scheme for white space. + A space or tab preceded by 2N+1 backslashes represents + N backslashes followed by space; a space or tab + preceded by 2N backslashes represents N backslashes at + the end of a file name; and backslashes in other + contexts should not be doubled. */ + char *q; + for (q = p - 1; src < q && q[-1] == '\\'; q--) + { + if (dst) + dst[i] = '\\'; + i++; + } + } + if (!c) + return i; + if (dst) + dst[i] = '\\'; + i++; + goto ordinary_char; + + case '$': + if (dst) + dst[i] = c; + i++; + /* Fall through. This can mishandle things like "$(" but + there's no easy fix. */ + default: + ordinary_char: + /* This can mishandle characters in the string "\0\n%*?[\\~"; + exactly which chars are mishandled depends on the `make' version. + We know of no portable solution for this; + even GNU make 3.76.1 doesn't solve the problem entirely. + (Also, '\0' is mishandled due to our calling conventions.) */ + if (dst) + dst[i] = c; + i++; + break; + } + } +} + + /* Add output to `deps_buffer' for the -M switch. STRING points to the text to be output. SPACER is ':' for targets, ' ' for dependencies. */ @@ -9943,7 +9912,7 @@ deps_output (string, spacer) char *string; int spacer; { - int size = strlen (string); + int size = quote_string_for_make ((char *) 0, string); if (size == 0) return; @@ -9968,7 +9937,7 @@ deps_output (string, spacer) deps_buffer[deps_size++] = ' '; deps_column++; } - bcopy (string, &deps_buffer[deps_size], size); + quote_string_for_make (&deps_buffer[deps_size], string); deps_size += size; deps_column += size; if (spacer == ':') { @@ -10246,10 +10215,11 @@ VMS_freopen (fname, type, oldfile) char *type; FILE *oldfile; { +#undef freopen /* Get back the real freopen routine. */ if (strcmp (type, "w") == 0) - return decc$freopen (fname, type, oldfile, + return freopen (fname, type, oldfile, "mbc=16", "deq=64", "fop=tef", "shr=nil"); - return decc$freopen (fname, type, oldfile, "mbc=16"); + return freopen (fname, type, oldfile, "mbc=16"); } static FILE * @@ -10257,10 +10227,11 @@ VMS_fopen (fname, type) char *fname; char *type; { +#undef fopen /* Get back the real fopen routine. */ /* The gcc-vms-1.42 distribution's header files prototype fopen with two fixed arguments, which matches ANSI's specification but not VAXCRTL's pre-ANSI implementation. This hack circumvents the mismatch problem. */ - FILE *(*vmslib_fopen)() = (FILE *(*)()) decc$fopen; + FILE *(*vmslib_fopen)() = (FILE *(*)()) fopen; if (*type == 'w') return (*vmslib_fopen) (fname, type, "mbc=32", @@ -10275,7 +10246,8 @@ VMS_open (fname, flags, prot) int flags; int prot; { - return decc$open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef"); +#undef open /* Get back the real open routine. */ + return open (fname, flags, prot, "mbc=16", "deq=64", "fop=tef"); } /* more VMS hackery */ @@ -10296,13 +10268,14 @@ extern unsigned long sys$parse(), sys$search(); bad enough, but then compounding the problem by reporting the reason for failure as "normal successful completion." */ +#undef fstat /* Get back to the library version. */ static int VMS_fstat (fd, statbuf) int fd; struct stat *statbuf; { - int result = decc$fstat (fd, statbuf); + int result = fstat (fd, statbuf); if (result < 0) { diff --git a/gcc/cexp.c b/gcc/cexp.c index 3156a2c1e82..f7c51a7d233 100644 --- a/gcc/cexp.c +++ b/gcc/cexp.c @@ -25,26 +25,16 @@ #include /* #define YYDEBUG 1 */ -/* The following symbols should be autoconfigured: - STDC_HEADERS - In the mean time, we'll get by with approximations based - on existing GCC configuration symbols. */ - -#ifdef POSIX -# ifndef STDC_HEADERS -# define STDC_HEADERS 1 -# endif -#endif /* defined (POSIX) */ -#if STDC_HEADERS +#ifdef HAVE_STRING_H # include #endif -#if HAVE_STDLIB_H || defined (MULTIBYTE_CHARS) +#ifdef HAVE_STDLIB_H # include #endif -#if HAVE_LIMITS_H +#ifdef HAVE_LIMITS_H # include #endif @@ -91,12 +81,10 @@ struct arglist { # define HOST_WIDE_INT intmax_t # define unsigned_HOST_WIDE_INT uintmax_t # else -# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \ - && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) +# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) # define HOST_WIDE_INT int # else -# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \ - || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) +# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) # define HOST_WIDE_INT long # else # define HOST_WIDE_INT long long @@ -153,11 +141,14 @@ struct arglist { #define PRINTF_PROTO_1(ARGS) PRINTF_PROTO(ARGS, 1, 2) -HOST_WIDE_INT parse_c_expression PROTO((char *)); +HOST_WIDE_INT parse_c_expression PROTO((char *, int)); static int yylex PROTO((void)); static void yyerror PROTO((char *)) __attribute__ ((noreturn)); static HOST_WIDE_INT expression_value; +#ifdef TEST_EXP_READER +static int expression_signedp; +#endif static jmp_buf parse_return_error; @@ -168,6 +159,9 @@ static int keyword_parsing = 0; This is a count, since unevaluated expressions can nest. */ static int skip_evaluation; +/* Nonzero means warn if undefined identifiers are evaluated. */ +static int warn_undef; + /* some external tables of character types */ extern unsigned char is_idstart[], is_idchar[], is_space[]; @@ -180,9 +174,6 @@ extern int traditional; /* Flag for -lang-c89. */ extern int c89; -/* Flag for -Wundef. */ -extern int warn_undef; - #ifndef CHAR_TYPE_SIZE #define CHAR_TYPE_SIZE BITS_PER_UNIT #endif @@ -252,7 +243,7 @@ static void integer_overflow PROTO((void)); #define SIGNED (~0) #define UNSIGNED 0 -#line 260 "cexp.y" +#line 251 "cexp.y" typedef union { struct constant {HOST_WIDE_INT value; int signedp;} integer; struct name {U_CHAR *address; int length;} name; @@ -333,10 +324,10 @@ static const short yyrhs[] = { 35, #if YYDEBUG != 0 static const short yyrline[] = { 0, - 290, 295, 296, 303, 308, 311, 313, 316, 320, 322, - 327, 332, 345, 362, 375, 381, 387, 393, 399, 402, - 405, 412, 419, 426, 433, 436, 439, 442, 445, 448, - 451, 454, 456, 459, 462, 464, 466, 474, 476, 489 + 281, 291, 292, 299, 304, 307, 309, 312, 316, 318, + 323, 328, 341, 358, 371, 377, 383, 389, 395, 398, + 401, 408, 415, 422, 429, 432, 435, 438, 441, 444, + 447, 450, 452, 455, 458, 460, 462, 470, 472, 485 }; #endif @@ -934,59 +925,64 @@ yyreduce: switch (yyn) { case 1: -#line 291 "cexp.y" -{ expression_value = yyvsp[0].integer.value; ; +#line 282 "cexp.y" +{ + expression_value = yyvsp[0].integer.value; +#ifdef TEST_EXP_READER + expression_signedp = yyvsp[0].integer.signedp; +#endif + ; break;} case 3: -#line 297 "cexp.y" +#line 293 "cexp.y" { if (pedantic) pedwarn ("comma operator in operand of `#if'"); yyval.integer = yyvsp[0].integer; ; break;} case 4: -#line 304 "cexp.y" +#line 300 "cexp.y" { yyval.integer.value = - yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[0].integer.signedp; if ((yyval.integer.value & yyvsp[0].integer.value & yyval.integer.signedp) < 0) integer_overflow (); ; break;} case 5: -#line 309 "cexp.y" +#line 305 "cexp.y" { yyval.integer.value = ! yyvsp[0].integer.value; yyval.integer.signedp = SIGNED; ; break;} case 6: -#line 312 "cexp.y" +#line 308 "cexp.y" { yyval.integer = yyvsp[0].integer; ; break;} case 7: -#line 314 "cexp.y" +#line 310 "cexp.y" { yyval.integer.value = ~ yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[0].integer.signedp; ; break;} case 8: -#line 317 "cexp.y" +#line 313 "cexp.y" { yyval.integer.value = check_assertion (yyvsp[0].name.address, yyvsp[0].name.length, 0, NULL_PTR); yyval.integer.signedp = SIGNED; ; break;} case 9: -#line 321 "cexp.y" +#line 317 "cexp.y" { keyword_parsing = 1; ; break;} case 10: -#line 323 "cexp.y" +#line 319 "cexp.y" { yyval.integer.value = check_assertion (yyvsp[-4].name.address, yyvsp[-4].name.length, 1, yyvsp[-1].keywords); keyword_parsing = 0; yyval.integer.signedp = SIGNED; ; break;} case 11: -#line 328 "cexp.y" +#line 324 "cexp.y" { yyval.integer = yyvsp[-1].integer; ; break;} case 12: -#line 333 "cexp.y" +#line 329 "cexp.y" { yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; if (yyval.integer.signedp) { @@ -1001,7 +997,7 @@ case 12: * yyvsp[0].integer.value); ; break;} case 13: -#line 346 "cexp.y" +#line 342 "cexp.y" { if (yyvsp[0].integer.value == 0) { if (!skip_evaluation) @@ -1020,7 +1016,7 @@ case 13: / yyvsp[0].integer.value); ; break;} case 14: -#line 363 "cexp.y" +#line 359 "cexp.y" { if (yyvsp[0].integer.value == 0) { if (!skip_evaluation) @@ -1035,7 +1031,7 @@ case 14: % yyvsp[0].integer.value); ; break;} case 15: -#line 376 "cexp.y" +#line 372 "cexp.y" { yyval.integer.value = yyvsp[-2].integer.value + yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; if (overflow_sum_sign (yyvsp[-2].integer.value, yyvsp[0].integer.value, @@ -1043,7 +1039,7 @@ case 15: integer_overflow (); ; break;} case 16: -#line 382 "cexp.y" +#line 378 "cexp.y" { yyval.integer.value = yyvsp[-2].integer.value - yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; if (overflow_sum_sign (yyval.integer.value, yyvsp[0].integer.value, @@ -1051,7 +1047,7 @@ case 16: integer_overflow (); ; break;} case 17: -#line 388 "cexp.y" +#line 384 "cexp.y" { yyval.integer.signedp = yyvsp[-2].integer.signedp; if ((yyvsp[0].integer.value & yyvsp[0].integer.signedp) < 0) yyval.integer.value = right_shift (&yyvsp[-2].integer, -yyvsp[0].integer.value); @@ -1059,7 +1055,7 @@ case 17: yyval.integer.value = left_shift (&yyvsp[-2].integer, yyvsp[0].integer.value); ; break;} case 18: -#line 394 "cexp.y" +#line 390 "cexp.y" { yyval.integer.signedp = yyvsp[-2].integer.signedp; if ((yyvsp[0].integer.value & yyvsp[0].integer.signedp) < 0) yyval.integer.value = left_shift (&yyvsp[-2].integer, -yyvsp[0].integer.value); @@ -1067,17 +1063,17 @@ case 18: yyval.integer.value = right_shift (&yyvsp[-2].integer, yyvsp[0].integer.value); ; break;} case 19: -#line 400 "cexp.y" +#line 396 "cexp.y" { yyval.integer.value = (yyvsp[-2].integer.value == yyvsp[0].integer.value); yyval.integer.signedp = SIGNED; ; break;} case 20: -#line 403 "cexp.y" +#line 399 "cexp.y" { yyval.integer.value = (yyvsp[-2].integer.value != yyvsp[0].integer.value); yyval.integer.signedp = SIGNED; ; break;} case 21: -#line 406 "cexp.y" +#line 402 "cexp.y" { yyval.integer.signedp = SIGNED; if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp) yyval.integer.value = yyvsp[-2].integer.value <= yyvsp[0].integer.value; @@ -1086,7 +1082,7 @@ case 21: <= yyvsp[0].integer.value); ; break;} case 22: -#line 413 "cexp.y" +#line 409 "cexp.y" { yyval.integer.signedp = SIGNED; if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp) yyval.integer.value = yyvsp[-2].integer.value >= yyvsp[0].integer.value; @@ -1095,7 +1091,7 @@ case 22: >= yyvsp[0].integer.value); ; break;} case 23: -#line 420 "cexp.y" +#line 416 "cexp.y" { yyval.integer.signedp = SIGNED; if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp) yyval.integer.value = yyvsp[-2].integer.value < yyvsp[0].integer.value; @@ -1104,7 +1100,7 @@ case 23: < yyvsp[0].integer.value); ; break;} case 24: -#line 427 "cexp.y" +#line 423 "cexp.y" { yyval.integer.signedp = SIGNED; if (yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp) yyval.integer.value = yyvsp[-2].integer.value > yyvsp[0].integer.value; @@ -1113,64 +1109,64 @@ case 24: > yyvsp[0].integer.value); ; break;} case 25: -#line 434 "cexp.y" +#line 430 "cexp.y" { yyval.integer.value = yyvsp[-2].integer.value & yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ; break;} case 26: -#line 437 "cexp.y" +#line 433 "cexp.y" { yyval.integer.value = yyvsp[-2].integer.value ^ yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ; break;} case 27: -#line 440 "cexp.y" +#line 436 "cexp.y" { yyval.integer.value = yyvsp[-2].integer.value | yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-2].integer.signedp & yyvsp[0].integer.signedp; ; break;} case 28: -#line 443 "cexp.y" +#line 439 "cexp.y" { skip_evaluation += !yyvsp[-1].integer.value; ; break;} case 29: -#line 445 "cexp.y" +#line 441 "cexp.y" { skip_evaluation -= !yyvsp[-3].integer.value; yyval.integer.value = (yyvsp[-3].integer.value && yyvsp[0].integer.value); yyval.integer.signedp = SIGNED; ; break;} case 30: -#line 449 "cexp.y" +#line 445 "cexp.y" { skip_evaluation += !!yyvsp[-1].integer.value; ; break;} case 31: -#line 451 "cexp.y" +#line 447 "cexp.y" { skip_evaluation -= !!yyvsp[-3].integer.value; yyval.integer.value = (yyvsp[-3].integer.value || yyvsp[0].integer.value); yyval.integer.signedp = SIGNED; ; break;} case 32: -#line 455 "cexp.y" +#line 451 "cexp.y" { skip_evaluation += !yyvsp[-1].integer.value; ; break;} case 33: -#line 457 "cexp.y" +#line 453 "cexp.y" { skip_evaluation += !!yyvsp[-4].integer.value - !yyvsp[-4].integer.value; ; break;} case 34: -#line 459 "cexp.y" +#line 455 "cexp.y" { skip_evaluation -= !!yyvsp[-6].integer.value; yyval.integer.value = yyvsp[-6].integer.value ? yyvsp[-3].integer.value : yyvsp[0].integer.value; yyval.integer.signedp = yyvsp[-3].integer.signedp & yyvsp[0].integer.signedp; ; break;} case 35: -#line 463 "cexp.y" +#line 459 "cexp.y" { yyval.integer = yylval.integer; ; break;} case 36: -#line 465 "cexp.y" +#line 461 "cexp.y" { yyval.integer = yylval.integer; ; break;} case 37: -#line 467 "cexp.y" +#line 463 "cexp.y" { if (warn_undef && !skip_evaluation) warning ("`%.*s' is not defined", yyvsp[0].name.length, yyvsp[0].name.address); @@ -1178,11 +1174,11 @@ case 37: yyval.integer.signedp = SIGNED; ; break;} case 38: -#line 475 "cexp.y" +#line 471 "cexp.y" { yyval.keywords = 0; ; break;} case 39: -#line 477 "cexp.y" +#line 473 "cexp.y" { struct arglist *temp; yyval.keywords = (struct arglist *) xmalloc (sizeof (struct arglist)); yyval.keywords->next = yyvsp[-2].keywords; @@ -1197,7 +1193,7 @@ case 39: temp->next->length = 1; ; break;} case 40: -#line 490 "cexp.y" +#line 486 "cexp.y" { yyval.keywords = (struct arglist *) xmalloc (sizeof (struct arglist)); yyval.keywords->name = yyvsp[-1].name.address; yyval.keywords->length = yyvsp[-1].name.length; @@ -1401,7 +1397,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 495 "cexp.y" +#line 491 "cexp.y" /* During parsing of a C expression, the pointer to the next character @@ -1610,7 +1606,7 @@ yylex () It is mostly copied from c-lex.c. */ { register HOST_WIDE_INT result = 0; - register num_chars = 0; + register int num_chars = 0; unsigned width = MAX_CHAR_TYPE_SIZE; int max_chars; char *token_buffer; @@ -1968,17 +1964,20 @@ right_shift (a, b) /* This page contains the entry point to this file. */ /* Parse STRING as an expression, and complain if this fails - to use up all of the contents of STRING. */ -/* STRING may contain '\0' bytes; it is terminated by the first '\n' - outside a string constant, so that we can diagnose '\0' properly. */ -/* We do not support C comments. They should be removed before + to use up all of the contents of STRING. + STRING may contain '\0' bytes; it is terminated by the first '\n' + outside a string constant, so that we can diagnose '\0' properly. + If WARN_UNDEFINED is nonzero, warn if undefined identifiers are evaluated. + We do not support C comments. They should be removed before this function is called. */ HOST_WIDE_INT -parse_c_expression (string) +parse_c_expression (string, warn_undefined) char *string; + int warn_undefined; { lexptr = string; + warn_undef = warn_undefined; /* if there is some sort of scanning error, just return 0 and assume the parsing routine has printed an error message somewhere. @@ -2006,6 +2005,7 @@ int traditional; int main PROTO((int, char **)); static void initialize_random_junk PROTO((void)); +static void print_unsigned_host_wide_int PROTO((unsigned_HOST_WIDE_INT)); /* Main program for testing purposes. */ int @@ -2015,6 +2015,7 @@ main (argc, argv) { int n, c; char buf[1024]; + unsigned_HOST_WIDE_INT u; pedantic = 1 < argc; traditional = 2 < argc; @@ -2030,12 +2031,35 @@ main (argc, argv) n++; if (c == EOF) break; - printf ("parser returned %ld\n", (long) parse_c_expression (buf)); + parse_c_expression (buf, 1); + printf ("parser returned "); + u = (unsigned_HOST_WIDE_INT) expression_value; + if (expression_value < 0 && expression_signedp) { + u = -u; + printf ("-"); + } + if (u == 0) + printf ("0"); + else + print_unsigned_host_wide_int (u); + if (! expression_signedp) + printf("u"); + printf ("\n"); } return 0; } +static void +print_unsigned_host_wide_int (u) + unsigned_HOST_WIDE_INT u; +{ + if (u) { + print_unsigned_host_wide_int (u / 10); + putchar ('0' + (int) (u % 10)); + } +} + /* table to tell if char can be part of a C identifier. */ unsigned char is_idchar[256]; /* table to tell if char can be first char of a c identifier. */ diff --git a/gcc/cexp.y b/gcc/cexp.y index ba1ab80543e..5269c5bae7e 100644 --- a/gcc/cexp.y +++ b/gcc/cexp.y @@ -29,26 +29,16 @@ Boston, MA 02111-1307, USA. #include /* #define YYDEBUG 1 */ -/* The following symbols should be autoconfigured: - STDC_HEADERS - In the mean time, we'll get by with approximations based - on existing GCC configuration symbols. */ - -#ifdef POSIX -# ifndef STDC_HEADERS -# define STDC_HEADERS 1 -# endif -#endif /* defined (POSIX) */ -#if STDC_HEADERS +#ifdef HAVE_STRING_H # include #endif -#if HAVE_STDLIB_H || defined (MULTIBYTE_CHARS) +#ifdef HAVE_STDLIB_H # include #endif -#if HAVE_LIMITS_H +#ifdef HAVE_LIMITS_H # include #endif @@ -95,12 +85,10 @@ struct arglist { # define HOST_WIDE_INT intmax_t # define unsigned_HOST_WIDE_INT uintmax_t # else -# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT \ - && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) +# if (HOST_BITS_PER_LONG <= HOST_BITS_PER_INT && HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_INT) # define HOST_WIDE_INT int # else -# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG \ - || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) +# if (HOST_BITS_PER_LONGLONG <= HOST_BITS_PER_LONG || ! (defined LONG_LONG_MAX || defined LLONG_MAX)) # define HOST_WIDE_INT long # else # define HOST_WIDE_INT long long @@ -157,11 +145,14 @@ struct arglist { #define PRINTF_PROTO_1(ARGS) PRINTF_PROTO(ARGS, 1, 2) -HOST_WIDE_INT parse_c_expression PROTO((char *)); +HOST_WIDE_INT parse_c_expression PROTO((char *, int)); static int yylex PROTO((void)); static void yyerror PROTO((char *)) __attribute__ ((noreturn)); static HOST_WIDE_INT expression_value; +#ifdef TEST_EXP_READER +static int expression_signedp; +#endif static jmp_buf parse_return_error; @@ -172,6 +163,9 @@ static int keyword_parsing = 0; This is a count, since unevaluated expressions can nest. */ static int skip_evaluation; +/* Nonzero means warn if undefined identifiers are evaluated. */ +static int warn_undef; + /* some external tables of character types */ extern unsigned char is_idstart[], is_idchar[], is_space[]; @@ -184,9 +178,6 @@ extern int traditional; /* Flag for -lang-c89. */ extern int c89; -/* Flag for -Wundef. */ -extern int warn_undef; - #ifndef CHAR_TYPE_SIZE #define CHAR_TYPE_SIZE BITS_PER_UNIT #endif @@ -288,7 +279,12 @@ static void integer_overflow PROTO((void)); %% start : exp1 - { expression_value = $1.value; } + { + expression_value = $1.value; +#ifdef TEST_EXP_READER + expression_signedp = $1.signedp; +#endif + } ; /* Expressions, including the comma operator. */ @@ -700,7 +696,7 @@ yylex () It is mostly copied from c-lex.c. */ { register HOST_WIDE_INT result = 0; - register num_chars = 0; + register int num_chars = 0; unsigned width = MAX_CHAR_TYPE_SIZE; int max_chars; char *token_buffer; @@ -1058,17 +1054,20 @@ right_shift (a, b) /* This page contains the entry point to this file. */ /* Parse STRING as an expression, and complain if this fails - to use up all of the contents of STRING. */ -/* STRING may contain '\0' bytes; it is terminated by the first '\n' - outside a string constant, so that we can diagnose '\0' properly. */ -/* We do not support C comments. They should be removed before + to use up all of the contents of STRING. + STRING may contain '\0' bytes; it is terminated by the first '\n' + outside a string constant, so that we can diagnose '\0' properly. + If WARN_UNDEFINED is nonzero, warn if undefined identifiers are evaluated. + We do not support C comments. They should be removed before this function is called. */ HOST_WIDE_INT -parse_c_expression (string) +parse_c_expression (string, warn_undefined) char *string; + int warn_undefined; { lexptr = string; + warn_undef = warn_undefined; /* if there is some sort of scanning error, just return 0 and assume the parsing routine has printed an error message somewhere. @@ -1096,6 +1095,7 @@ int traditional; int main PROTO((int, char **)); static void initialize_random_junk PROTO((void)); +static void print_unsigned_host_wide_int PROTO((unsigned_HOST_WIDE_INT)); /* Main program for testing purposes. */ int @@ -1105,6 +1105,7 @@ main (argc, argv) { int n, c; char buf[1024]; + unsigned_HOST_WIDE_INT u; pedantic = 1 < argc; traditional = 2 < argc; @@ -1120,12 +1121,35 @@ main (argc, argv) n++; if (c == EOF) break; - printf ("parser returned %ld\n", (long) parse_c_expression (buf)); + parse_c_expression (buf, 1); + printf ("parser returned "); + u = (unsigned_HOST_WIDE_INT) expression_value; + if (expression_value < 0 && expression_signedp) { + u = -u; + printf ("-"); + } + if (u == 0) + printf ("0"); + else + print_unsigned_host_wide_int (u); + if (! expression_signedp) + printf("u"); + printf ("\n"); } return 0; } +static void +print_unsigned_host_wide_int (u) + unsigned_HOST_WIDE_INT u; +{ + if (u) { + print_unsigned_host_wide_int (u / 10); + putchar ('0' + (int) (u % 10)); + } +} + /* table to tell if char can be part of a C identifier. */ unsigned char is_idchar[256]; /* table to tell if char can be first char of a c identifier. */ diff --git a/gcc/choose-temp.c b/gcc/choose-temp.c index 7410b0444df..d8808ba02c3 100644 --- a/gcc/choose-temp.c +++ b/gcc/choose-temp.c @@ -1,5 +1,5 @@ /* Utility to pick a temporary filename prefix. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the libiberty library. Libiberty is free software; you can redistribute it and/or @@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #endif -#ifndef NO_SYS_FILE_H +#ifdef HAVE_SYS_FILE_H #include #include /* May get R_OK, etc. on some systems. */ #endif @@ -57,7 +57,7 @@ extern char *xmalloc (); /* On MSDOS, write temp files in current dir because there's no place else we can expect to use. */ /* ??? Although the current directory is tried as a last resort, - this is left in so that on MSDOS it is prefered to /tmp on the + this is left in so that on MSDOS it is preferred to /tmp on the off chance that someone requires this, since that was the previous behaviour. */ #ifdef __MSDOS__ @@ -71,7 +71,7 @@ extern char *xmalloc (); #define TEMP_FILE "ccXXXXXX" /* Subroutine of choose_temp_base. - If BASE is non-NULL, returh it. + If BASE is non-NULL, return it. Otherwise it checks if DIR is a usable directory. If success, DIR is returned. Otherwise NULL is returned. */ @@ -117,11 +117,7 @@ choose_temp_base () /* If all else fails, use the current directory! */ if (base == 0) -#ifdef VMS - base = "["; -#else base = "."; -#endif #else /* MPW */ base = ":"; diff --git a/gcc/collect2.c b/gcc/collect2.c index 0c89c584ff2..aa17ecf6016 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -34,6 +34,18 @@ Boston, MA 02111-1307, USA. */ #include #include +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif + #define COLLECT #include "demangle.h" @@ -292,9 +304,17 @@ static void scan_libraries PROTO((char *)); char *xcalloc (); char *xmalloc (); +#ifdef NEED_DECLARATION_INDEX extern char *index (); +#endif + +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); +#endif + +#ifdef NEED_DECLARATION_FREE extern void free (); +#endif #ifdef NO_DUP2 int @@ -1757,11 +1777,22 @@ write_c_file_stat (stream, name) write_list (stream, "\t\t&", frame_tables.first); fprintf (stream, "\t0\n};\n"); - fprintf (stream, "extern void __register_frame_table (void *);\n"); + /* This must match what's in frame.h. */ + fprintf (stream, "struct object {\n"); + fprintf (stream, " void *pc_begin;\n"); + fprintf (stream, " void *pc_end;\n"); + fprintf (stream, " void *fde_begin;\n"); + fprintf (stream, " void *fde_array;\n"); + fprintf (stream, " size_t count;\n"); + fprintf (stream, " struct object *next;\n"); + fprintf (stream, "};\n"); + + fprintf (stream, "extern void __register_frame_table (void *, struct object *);\n"); fprintf (stream, "extern void __deregister_frame (void *);\n"); fprintf (stream, "static void reg_frame () {\n"); - fprintf (stream, "\t__register_frame_table (frame_table);\n"); + fprintf (stream, "\tstatic struct object ob;\n"); + fprintf (stream, "\t__register_frame_table (frame_table, &ob);\n"); fprintf (stream, "\t}\n"); fprintf (stream, "static void dereg_frame () {\n"); diff --git a/gcc/combine.c b/gcc/combine.c index 5750534ab12..ff50cb5e714 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -1048,6 +1048,43 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc) return 1; } +/* Check if PAT is an insn - or a part of it - used to set up an + argument for a function in a hard register. */ + +static int +sets_function_arg_p (pat) + rtx pat; +{ + int i; + rtx inner_dest; + + switch (GET_CODE (pat)) + { + case INSN: + return sets_function_arg_p (PATTERN (pat)); + + case PARALLEL: + for (i = XVECLEN (pat, 0); --i >= 0;) + if (sets_function_arg_p (XVECEXP (pat, 0, i))) + return 1; + + break; + + case SET: + inner_dest = SET_DEST (pat); + 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); + + return (GET_CODE (inner_dest) == REG + && REGNO (inner_dest) < FIRST_PSEUDO_REGISTER + && FUNCTION_ARG_REGNO_P (REGNO (inner_dest))); + } + + return 0; +} + /* LOC is the location within I3 that contains its pattern or the component of a PARALLEL of the pattern. We validate that it is valid for combining. @@ -1143,19 +1180,28 @@ combinable_i3pat (i3, loc, i2dest, i1dest, i1_not_in_src, pi3dest_killed) if ((inner_dest != dest && (reg_overlap_mentioned_p (i2dest, inner_dest) || (i1dest && reg_overlap_mentioned_p (i1dest, inner_dest)))) + /* This is the same test done in can_combine_p except that we allow a hard register with SMALL_REGISTER_CLASSES if SRC is a - CALL operation. - Moreover, we can't test all_adjacent; we don't have to, since - this instruction will stay in place, thus we are not considering - to increase the lifetime of INNER_DEST. */ + CALL operation. Moreover, we can't test all_adjacent; we don't + have to, since this instruction will stay in place, thus we are + not considering increasing the lifetime of INNER_DEST. + + Also, if this insn sets a function argument, combining it with + something that might need a spill could clobber a previous + function argument; the all_adjacent test in can_combine_p also + checks this; here, we do a more specific test for this case. */ + || (GET_CODE (inner_dest) == REG && REGNO (inner_dest) < FIRST_PSEUDO_REGISTER && (! HARD_REGNO_MODE_OK (REGNO (inner_dest), GET_MODE (inner_dest)) || (SMALL_REGISTER_CLASSES && GET_CODE (src) != CALL && ! REG_USERVAR_P (inner_dest) - && FUNCTION_VALUE_REGNO_P (REGNO (inner_dest))))) + && (FUNCTION_VALUE_REGNO_P (REGNO (inner_dest)) + || (FUNCTION_ARG_REGNO_P (REGNO (inner_dest)) + && i3 != 0 + && sets_function_arg_p (prev_nonnote_insn (i3))))))) || (i1_not_in_src && reg_overlap_mentioned_p (i1dest, src))) return 0; @@ -7176,7 +7222,7 @@ simplify_and_const_int (x, mode, varop, constop) /* We let num_sign_bit_copies recur into nonzero_bits as that is useful. We don't let nonzero_bits recur into num_sign_bit_copies, because that is less useful. We can't allow both, because that results in exponential - run time recusion. There is a nullstone testcase that triggered + run time recursion. There is a nullstone testcase that triggered this. This macro avoids accidental uses of num_sign_bit_copies. */ #define num_sign_bit_copies() diff --git a/gcc/config.in b/gcc/config.in index bf90f51e099..25bbe566ed8 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -1,4 +1,7 @@ /* config.in. Generated automatically from configure.in by autoheader. */ +/* Define if you have a working header file. */ +#undef HAVE_INTTYPES_H + /* Whether malloc must be declared even if is included. */ #undef NEED_DECLARATION_MALLOC @@ -11,14 +14,53 @@ /* Whether free must be declared even if is included. */ #undef NEED_DECLARATION_FREE +/* Whether index must be declared even if is included. */ +#undef NEED_DECLARATION_INDEX + +/* Whether rindex must be declared even if is included. */ +#undef NEED_DECLARATION_RINDEX + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + /* Define if `sys_siglist' is declared by . */ #undef SYS_SIGLIST_DECLARED +/* Define if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define if you have the bcmp function. */ +#undef HAVE_BCMP + +/* Define if you have the bcopy function. */ +#undef HAVE_BCOPY + +/* Define if you have the bzero function. */ +#undef HAVE_BZERO + +/* Define if you have the index function. */ +#undef HAVE_INDEX + +/* Define if you have the kill function. */ +#undef HAVE_KILL + +/* Define if you have the popen function. */ +#undef HAVE_POPEN + +/* Define if you have the putenv function. */ +#undef HAVE_PUTENV + +/* Define if you have the rindex function. */ +#undef HAVE_RINDEX + /* Define if you have the strerror function. */ #undef HAVE_STRERROR -/* Define if you have the header file. */ -#undef HAVE_INTTYPES_H +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H @@ -35,6 +77,21 @@ /* Define if you have the header file. */ #undef HAVE_STRINGS_H +/* Define if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_TIMES_H + /* Define if you have the header file. */ #undef HAVE_TIME_H diff --git a/gcc/config/1750a/1750a.md b/gcc/config/1750a/1750a.md index 72fa0b38f47..161d75d9bda 100644 --- a/gcc/config/1750a/1750a.md +++ b/gcc/config/1750a/1750a.md @@ -1105,7 +1105,7 @@ ;******************** ;; Bit field instructions, general cases. -;; "o,d" constraint causes a nonoffsetable memref to match the "o" +;; "o,d" constraint causes a nonoffsettable memref to match the "o" ;; so that its address is reloaded. ;; (define_insn "extv" ... diff --git a/gcc/config/a29k/a29k.h b/gcc/config/a29k/a29k.h index 59e9a13d628..db6e378d252 100644 --- a/gcc/config/a29k/a29k.h +++ b/gcc/config/a29k/a29k.h @@ -987,13 +987,18 @@ extern char *a29k_function_name; On the 29k, we must be able to place it in a delay slot, it must not use sp if the frame pointer cannot be eliminated, and it cannot - use local regs if we need to push the register stack. */ + use local regs if we need to push the register stack. + If this is a SET with a memory as source, it might load from + a stack slot, unless the address is constant. */ #define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN,N) \ (get_attr_in_delay_slot (INSN) == IN_DELAY_SLOT_YES \ && ! (frame_pointer_needed \ && reg_mentioned_p (stack_pointer_rtx, PATTERN (INSN))) \ - && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN)))) + && ! (needs_regstack_p () && uses_local_reg_p (PATTERN (INSN))) \ + && (GET_CODE (PATTERN (INSN)) != SET \ + || GET_CODE (SET_SRC (PATTERN (INSN))) != MEM \ + || ! rtx_varies_p (XEXP (SET_SRC (PATTERN (INSN)), 0)))) /* Output assembler code for a block containing the constant parts of a trampoline, leaving space for the variable parts. diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index fb4e40bf4b4..f98cb192a85 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1186,7 +1186,7 @@ alpha_adjust_cost (insn, link, dep_insn, cost) /* EV5 costs are as given in alpha.md; exceptions are given here. */ if (alpha_cpu == PROCESSOR_EV5) { - /* And the lord DEC sayeth: "A special bypass provides an effective + /* And the lord DEC saith: "A special bypass provides an effective latency of 0 cycles for an ICMP or ILOG insn producing the test operand of an IBR or CMOV insn." */ if (recog_memoized (dep_insn) >= 0 @@ -1619,10 +1619,12 @@ alpha_builtin_saveregs (arglist) emit_move_insn (dest, addr); if (flag_check_memory_usage) - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, - ptr_mode, GEN_INT (GET_MODE_SIZE (ptr_mode)), + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + dest, ptr_mode, + GEN_INT (GET_MODE_SIZE (ptr_mode)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); /* Store the argsize as the __va_offset member. */ dest = change_address (block, TYPE_MODE (integer_type_node), @@ -1631,12 +1633,13 @@ alpha_builtin_saveregs (arglist) emit_move_insn (dest, argsize); if (flag_check_memory_usage) - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, - ptr_mode, + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + dest, ptr_mode, GEN_INT (GET_MODE_SIZE (TYPE_MODE (integer_type_node))), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); /* Return the address of the va_list constructor, but don't put it in a register. Doing so would fail when not optimizing and produce worse diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index ede1600bb5b..25740eae77b 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -749,8 +749,9 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS, && (GET_CODE (SUBREG_REG (OUT)) == MEM \ || (GET_CODE (SUBREG_REG (OUT)) == REG \ && REGNO (SUBREG_REG (OUT)) >= FIRST_PSEUDO_REGISTER)))) \ - && ((((MODE) == HImode || (MODE) == QImode) && ! TARGET_BWX \ - || ((MODE) == SImode && (CLASS) == FLOAT_REGS)))) \ + && ((((MODE) == HImode || (MODE) == QImode) \ + && (! TARGET_BWX || (CLASS) == FLOAT_REGS)) \ + || ((MODE) == SImode && (CLASS) == FLOAT_REGS))) \ ? GENERAL_REGS \ : ((CLASS) == FLOAT_REGS && GET_CODE (OUT) == MEM \ && GET_CODE (XEXP (OUT, 0)) == AND) ? GENERAL_REGS \ @@ -913,8 +914,9 @@ enum reg_class { NO_REGS, GENERAL_REGS, FLOAT_REGS, ALL_REGS, #define FUNCTION_VALUE(VALTYPE, FUNC) \ gen_rtx (REG, \ - (INTEGRAL_TYPE_P (VALTYPE) \ - && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \ + ((INTEGRAL_TYPE_P (VALTYPE) \ + && TYPE_PRECISION (VALTYPE) < BITS_PER_WORD) \ + || POINTER_TYPE_P (VALTYPE)) \ ? word_mode : TYPE_MODE (VALTYPE), \ ((TARGET_FPREGS \ && (TREE_CODE (VALTYPE) == REAL_TYPE \ @@ -2283,7 +2285,7 @@ do { \ #else /* In OSF/1 v3.2c, the assembler by default does not output file names which causes mips-tfile to fail. Passing -g to the assembler fixes this problem. - ??? Stricly speaking, we only need -g if the user specifies -g. Passing + ??? Strictly speaking, we need -g only if the user specifies -g. Passing it always means that we get slightly larger than necessary object files if the user does not specify -g. If we don't pass -g, then mips-tfile will need to be fixed to work in this case. Pass -O0 since some diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index 06246934db7..1feddc5eb6d 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -37,7 +37,7 @@ (const_string "iadd")) ;; The TRAP_TYPE attribute marks instructions that may generate traps -;; (which are imprecise and may need a trapb if software complention +;; (which are imprecise and may need a trapb if software completion ;; is desired). (define_attr "trap" "yes,no" (const_string "no")) diff --git a/gcc/config/alpha/elf.h b/gcc/config/alpha/elf.h index 63c9f1ba864..8a7f06a928b 100644 --- a/gcc/config/alpha/elf.h +++ b/gcc/config/alpha/elf.h @@ -20,10 +20,10 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This is used on Alpha platforms that use the ELF format. -Currently only Linux uses this. */ + Currently only GNU/Linux uses this. */ #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (Alpha Linux/ELF)"); +#define TARGET_VERSION fprintf (stderr, " (Alpha GNU/Linux with ELF)"); #undef OBJECT_FORMAT_COFF #undef EXTENDED_COFF @@ -484,8 +484,8 @@ do { \ #undef PREFERRED_DEBUGGING_TYPE #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG -/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add - the Linux magical crtbegin.o file (see crtstuff.c) which +/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main'. */ @@ -495,11 +495,11 @@ do { \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" -/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on - the Linux magical crtend.o file (see crtstuff.c) which +/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main', followed by a normal - Linux "finalizer" file, `crtn.o'. */ + GNU/Linux "finalizer" file, `crtn.o'. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC \ diff --git a/gcc/config/alpha/linux.h b/gcc/config/alpha/linux.h index 9a8cc36aa72..32428df5db0 100644 --- a/gcc/config/alpha/linux.h +++ b/gcc/config/alpha/linux.h @@ -1,5 +1,5 @@ -/* Definitions of target machine for GNU compiler, for Alpha Linux, - using ECOFF. +/* Definitions of target machine for GNU compiler, for Alpha Linux-based GNU + systems using ECOFF. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Bob Manson. @@ -23,7 +23,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define TARGET_DEFAULT (3 | MASK_GAS) #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (Linux/Alpha)"); +#define TARGET_VERSION fprintf (stderr, " (GNU/Linux/Alpha)"); #undef CPP_PREDEFINES #define CPP_PREDEFINES "\ @@ -80,8 +80,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ range and so the target is in range of something on the stack. Omitting the hint saves a bogus branch-prediction cache line load. - Linux always has an executable stack -- no need for a system call. - */ + GNU/Linux always has an executable stack -- no need for a system call. */ #undef INITIALIZE_TRAMPOLINE #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \ diff --git a/gcc/config/alpha/t-linux b/gcc/config/alpha/t-linux index e4c9fd49261..f48847720c9 100644 --- a/gcc/config/alpha/t-linux +++ b/gcc/config/alpha/t-linux @@ -1,4 +1,4 @@ -# Do not build libgcc1. Let gcc generate those functions. The Linux +# Do not build libgcc1. Let gcc generate those functions. The GNU/Linux # C library can handle them. LIBGCC1 = CROSS_LIBGCC1 = diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h index 3a8c9798bc4..01663e342b9 100644 --- a/gcc/config/alpha/vms.h +++ b/gcc/config/alpha/vms.h @@ -89,10 +89,7 @@ Boston, MA 02111-1307, USA. */ #define POINTER_SIZE 32 #define POINTERS_EXTEND_UNSIGNED 0 -/* No data type wants to be aligned rounder than this. */ -#undef BIGGEST_ALIGNMENT -#define BIGGEST_ALIGNMENT 128 /* X Complex */ -#define MAX_OFILE_ALIGNMENT 524288 /* 8 x 2^16 by DEC Test CD40VRA */ +#define MAX_OFILE_ALIGNMENT 524288 /* 8 x 2^16 by DEC Ada Test CD40VRA */ #undef FIXED_REGISTERS #define FIXED_REGISTERS \ @@ -213,13 +210,6 @@ extern struct rtx_def *alpha_arg_info_reg_val (); + ALPHA_ARG_SIZE (MODE, TYPE, NAMED) \ ? 6 - (CUM).num_args : 0) -#undef ENCODE_SECTION_INFO -#define ENCODE_SECTION_INFO(DECL) \ -do { \ - if (TREE_CODE (DECL) == FUNCTION_DECL && ! TREE_PUBLIC (DECL)) \ - SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ -} while (0) - /* Perform any needed actions needed for a function that is receiving a variable number of arguments. @@ -457,28 +447,11 @@ do { \ sprintf ((OUTPUT), "%s___%d", (NAME), (LABELNO))) #undef ASM_SPEC -#define ASM_SPEC "-nocpp %{pg}" - #undef ASM_FINAL_SPEC - -#define OPTIMIZATION_OPTIONS \ -{ \ - write_symbols = PREFERRED_DEBUGGING_TYPE; \ - debug_info_level = (enum debug_info_level) 2; \ -} - -#undef OVERRIDE_OPTIONS -#define OVERRIDE_OPTIONS \ -{ \ - if (write_symbols == NO_DEBUG) \ - debug_info_level = (enum debug_info_level) 0; \ - override_options (); \ -} - #undef LINK_SPEC -#define LINK_SPEC "%{g3:-g3} %{g0:-g0} %{shared:-shared} %{v:-v}" - #undef STARTFILE_SPEC +#define ASM_SPEC "-nocpp %{pg}" +#define LINK_SPEC "%{g3:-g3} %{g0:-g0} %{shared:-shared} %{v:-v}" /* Define the names of the division and modulus functions. */ #define DIVSI3_LIBCALL "ots$div_i" diff --git a/gcc/config/alpha/xm-alpha.h b/gcc/config/alpha/xm-alpha.h index 642e1cf1a6e..f7e870f5641 100644 --- a/gcc/config/alpha/xm-alpha.h +++ b/gcc/config/alpha/xm-alpha.h @@ -65,14 +65,6 @@ extern void *malloc (), *realloc (), *calloc (); #include "string.h" #endif -/* OSF/1 has vprintf. */ - -#define HAVE_VPRINTF - -/* OSF/1 has putenv. */ - -#define HAVE_PUTENV - /* OSF/1 is POSIX.1 compliant. */ #define POSIX diff --git a/gcc/config/alpha/xm-vms.h b/gcc/config/alpha/xm-vms.h index c96423a6e5a..6b7dad578f1 100644 --- a/gcc/config/alpha/xm-vms.h +++ b/gcc/config/alpha/xm-vms.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for openVMS/Alpha. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Klaus Kaempf (kkaempf@progis.de). This file is part of GNU CC. @@ -53,7 +53,11 @@ Boston, MA 02111-1307, USA. */ /* Define a local equivalent (sort of) for unlink */ #define unlink remove + #define NEED_ATEXIT +#define HAVE_VPRINTF +#define HAVE_PUTENV +#define HAVE_STRERROR #define NO_SYS_PARAMS_H /* Don't have */ #define NO_STAB_H /* Don't have */ @@ -63,17 +67,11 @@ Boston, MA 02111-1307, USA. */ #define HAVE_STDLIB_H 1 #define HAVE_UNISTD_H 1 #define HAVE_STRING_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_TIME_H 1 #define STDC_HEADERS 1 -/* Use ANSI/SYSV style byte manipulation routines instead of BSD ones. */ - -#define bcopy(s,d,n) memcpy((d),(s),(n)) -#define bzero(d,n) memset((d),0,(n)) -#define bcmp(l,r,n) memcmp((l),(r),(n)) - -#define index strchr -#define rindex strrchr - #if __STDC__ extern void *alloca (size_t); #else @@ -82,5 +80,3 @@ extern char *alloca (unsigned int); #define OBJECT_SUFFIX ".obj" #define EXECUTABLE_SUFFIX ".exe" -#define DIR_SEPARATOR ']' -#define PATH_SEPARATOR ',' diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 81595854e7e..7272cc927c8 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -1118,7 +1118,7 @@ arc_output_function_prologue (file, size) if (size == 0 && gmask) abort (); - /* Allocate space for register argumenets if this is a variadic function. */ + /* Allocate space for register arguments if this is a variadic function. */ if (current_frame_info.pretend_size != 0) fprintf (file, "\tsub %s,%s,%d\n", sp_str, sp_str, current_frame_info.pretend_size); @@ -1565,7 +1565,7 @@ arc_print_operand (file, x, code) switch (code) { case '#' : - /* Conditional brances. For now these are equivalent. */ + /* Conditional branches. For now these are equivalent. */ case '*' : /* Unconditional branches. Output the appropriate delay slot suffix. */ if (!final_sequence || XVECLEN (final_sequence, 0) == 1) @@ -1971,7 +1971,7 @@ arc_final_prescan_insn (insn, opvec, noperands) if (GET_CODE (insn) != JUMP_INSN) return; - /* This jump might be paralled with a clobber of the condition codes, + /* This jump might be paralleled with a clobber of the condition codes, the jump should always come first. */ if (GET_CODE (body) == PARALLEL && XVECLEN (body, 0) > 0) body = XVECEXP (body, 0, 0); @@ -2161,7 +2161,7 @@ arc_final_prescan_insn (insn, opvec, noperands) /* Restore recog_operand. Getting the attributes of other insns can destroy this array, but final.c assumes that it remains intact - accross this call; since the insn has been recognized already we + across this call; since the insn has been recognized already we call insn_extract direct. */ insn_extract (insn); } diff --git a/gcc/config/arm/aof.h b/gcc/config/arm/aof.h index 4f28856b9f5..4d30defd5cf 100644 --- a/gcc/config/arm/aof.h +++ b/gcc/config/arm/aof.h @@ -207,7 +207,7 @@ do { \ /* 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 - must define both, or niether. */ + must define both, or neither. */ #define NAME__MAIN "__gccmain" #define SYMBOL__MAIN __gccmain diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 8bfbdcfadab..b73da5b1f37 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -1,7 +1,7 @@ /* Output routines for GCC for ARM/RISCiX. Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) - and Martin Simmons (@harleqn.co.uk). + and Martin Simmons (@harleqn.co.uk). More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk) This file is part of GNU CC. @@ -176,7 +176,7 @@ static struct processors all_procs[] = {"arm600", PROCESSOR_ARM6, FL_CO_PROC | FL_MODE32 | FL_MODE26}, {"arm610", PROCESSOR_ARM6, FL_MODE32 | FL_MODE26}, {"arm7", PROCESSOR_ARM7, FL_CO_PROC | FL_MODE32 | FL_MODE26}, - /* arm7m doesn't exist on its own, only in conjuction with D, (and I), but + /* arm7m doesn't exist on its own, only in conjunction with D, (and I), but those don't alter the code, so it is sometimes known as the arm7m */ {"arm7m", PROCESSOR_ARM7, (FL_CO_PROC | FL_FAST_MULT | FL_MODE32 | FL_MODE26)}, @@ -1302,10 +1302,12 @@ arm_finalize_pic () l1 = gen_label_rtx (); global_offset_table = gen_rtx (SYMBOL_REF, Pmode, "_GLOBAL_OFFSET_TABLE_"); + /* The PC contains 'dot'+8, but the label L1 is on the next + instruction, so the offset is only 'dot'+4. */ pic_tmp = gen_rtx (CONST, VOIDmode, gen_rtx (PLUS, Pmode, gen_rtx (LABEL_REF, VOIDmode, l1), - GEN_INT (8))); + GEN_INT (4))); pic_tmp2 = gen_rtx (CONST, VOIDmode, gen_rtx (PLUS, Pmode, global_offset_table, @@ -3050,7 +3052,7 @@ gen_rotated_half_load (memref) base = XEXP (base, 0); } - /* If we aren't allowed to generate unalligned addresses, then fail. */ + /* If we aren't allowed to generate unaligned addresses, then fail. */ if (TARGET_SHORT_BY_BYTES && ((BYTES_BIG_ENDIAN ? 1 : 0) ^ ((offset & 2) == 0))) return NULL; @@ -3075,7 +3077,7 @@ select_dominance_cc_mode (op, x, y, cond_or) /* Currently we will probably get the wrong result if the individual comparisons are not simple. This also ensures that it is safe to - reverse a comparions if necessary. */ + reverse a comparison if necessary. */ if ((arm_select_cc_mode (cond1 = GET_CODE (x), XEXP (x, 0), XEXP (x, 1)) != CCmode) || (arm_select_cc_mode (cond2 = GET_CODE (y), XEXP (y, 0), XEXP (y, 1)) @@ -3191,10 +3193,10 @@ arm_select_cc_mode (op, x, y) || GET_CODE (x) == ROTATERT)) return CC_SWPmode; - /* This is a special case, that is used by combine to alow a - comarison of a shifted byte load to be split into a zero-extend + /* This is a special case that is used by combine to allow a + comparison of a shifted byte load to be split into a zero-extend followed by a comparison of the shifted integer (only valid for - equalities and unsigned inequalites. */ + equalities and unsigned inequalities). */ if (GET_MODE (x) == SImode && GET_CODE (x) == ASHIFT && GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) == 24 @@ -3982,7 +3984,7 @@ output_move_double (operands) { enum rtx_code code0 = GET_CODE (operands[0]); enum rtx_code code1 = GET_CODE (operands[1]); - rtx otherops[2]; + rtx otherops[3]; if (code0 == REG) { @@ -5940,7 +5942,7 @@ aof_data_section () /* The AOF assembler is religiously strict about declarations of imported and exported symbols, so that it is impossible to declare - a function as imported near the begining of the file, and then to + a function as imported near the beginning of the file, and then to export it later on. It is, however, possible to delay the decision until all the functions in the file have been compiled. To get around this, we maintain a list of the imports and exports, and diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 34abe9700e9..17c9f7edef5 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -86,7 +86,7 @@ extern int frame_pointer_needed; #if TARGET_CPU_DEFAULT == TARGET_CPU_arm2 #define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_2__" #else -#if TARGET_CPU_DEFAULT == TARGET_CPU_arm6 || TARGET_CPU_DEFUALT == TARGET_CPU_arm610 || TARGET_CPU_DEFAULT == TARGET_CPU_arm7500fe +#if TARGET_CPU_DEFAULT == TARGET_CPU_arm6 || TARGET_CPU_DEFAULT == TARGET_CPU_arm610 || TARGET_CPU_DEFAULT == TARGET_CPU_arm7500fe #define CPP_ARCH_DEFAULT_SPEC "-D__ARM_ARCH_3__" #else #if TARGET_CPU_DEFAULT == TARGET_CPU_arm7m @@ -346,7 +346,7 @@ extern char *target_fp_name; {"apcs-float", ARM_FLAG_APCS_FLOAT}, \ {"no-apcs-float", -ARM_FLAG_APCS_FLOAT}, \ {"apcs-reentrant", ARM_FLAG_APCS_REENT}, \ - {"no-apcs-rentrant", -ARM_FLAG_APCS_REENT}, \ + {"no-apcs-reentrant", -ARM_FLAG_APCS_REENT}, \ {"short-load-bytes", ARM_FLAG_SHORT_BYTE}, \ {"no-short-load-bytes", -ARM_FLAG_SHORT_BYTE}, \ {"short-load-words", -ARM_FLAG_SHORT_BYTE}, \ @@ -437,7 +437,7 @@ extern enum floating_point_type arm_fpu; /* What type of floating point instructions are available */ extern enum floating_point_type arm_fpu_arch; -/* Default floating point archtitecture. Override in sub-target if +/* Default floating point architecture. Override in sub-target if necessary. */ #define FP_DEFAULT FP_SOFT2 @@ -1405,14 +1405,15 @@ do \ else if (BASE_REGISTER_RTX_P (xop1)) \ GO_IF_LEGITIMATE_INDEX (MODE, REGNO (xop1), xop0, LABEL); \ } \ - else if (GET_CODE (X) == MINUS) \ + /* Reload currently can't handle MINUS, so disable this for now */ \ + /* else if (GET_CODE (X) == MINUS) \ { \ rtx xop0 = XEXP (X,0); \ rtx xop1 = XEXP (X,1); \ \ if (BASE_REGISTER_RTX_P (xop0)) \ GO_IF_LEGITIMATE_INDEX (MODE, -1, xop1, LABEL); \ - } \ + } */ \ else if (GET_MODE_CLASS (MODE) != MODE_FLOAT \ && GET_CODE (X) == SYMBOL_REF \ && CONSTANT_POOL_ADDRESS_P (X)) \ diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 3d72084b5bc..332ec35593b 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -1,7 +1,7 @@ ;;- Machine description for Advanced RISC Machines' ARM for GNU compiler ;; Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) -;; and Martin Simmons (@harleqn.co.uk). +;; and Martin Simmons (@harleqn.co.uk). ;; More major hacks by Richard Earnshaw (rwe11@cl.cam.ac.uk) ;; This file is part of GNU CC. @@ -1208,7 +1208,21 @@ " { HOST_WIDE_INT mask = (((HOST_WIDE_INT)1) << INTVAL (operands[1])) - 1; + rtx target, subtarget; + target = operands[0]; + /* Avoid using a subreg as a subtarget, and avoid writing a paradoxical + subreg as the final target. */ + if (GET_CODE (target) == SUBREG) + { + subtarget = gen_reg_rtx (SImode); + if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (target))) + < GET_MODE_SIZE (SImode)) + target = SUBREG_REG (target); + } + else + subtarget = target; + if (GET_CODE (operands[3]) == CONST_INT) { /* Since we are inserting a known constant, we may be able to @@ -1219,7 +1233,7 @@ << INTVAL (operands[2])); emit_insn (gen_andsi3 (op1, operands[0], GEN_INT (~mask2))); - emit_insn (gen_iorsi3 (operands[0], op1, + emit_insn (gen_iorsi3 (subtarget, op1, GEN_INT (INTVAL (operands[3]) << INTVAL (operands[2])))); } @@ -1240,7 +1254,7 @@ emit_insn (gen_iorsi3 (op1, gen_rtx (LSHIFTRT, SImode, operands[0], operands[1]), op0)); - emit_insn (gen_rotlsi3 (operands[0], op1, operands[1])); + emit_insn (gen_rotlsi3 (subtarget, op1, operands[1])); } else if ((INTVAL (operands[1]) + INTVAL (operands[2]) == 32) && ! (const_ok_for_arm (mask) @@ -1254,8 +1268,9 @@ emit_insn (gen_ashlsi3 (op0, operands[3], GEN_INT (32 - INTVAL (operands[1])))); emit_insn (gen_ashlsi3 (op1, operands[0], operands[1])); - emit_insn (gen_iorsi3 (operands[0], gen_rtx (LSHIFTRT, SImode, op1, - operands[1]), op0)); + emit_insn (gen_iorsi3 (subtarget, + gen_rtx (LSHIFTRT, SImode, op1, + operands[1]), op0)); } else { @@ -1298,7 +1313,17 @@ if (INTVAL (operands[2]) != 0) op1 = gen_rtx (ASHIFT, SImode, op1, operands[2]); - emit_insn (gen_iorsi3 (operands[0], op1, op2)); + emit_insn (gen_iorsi3 (subtarget, op1, op2)); + } + + if (subtarget != target) + { + /* If TARGET is still a SUBREG, then it must be wider than a word, + so we must be careful only to set the subword we were asked to. */ + if (GET_CODE (target) == SUBREG) + emit_move_insn (target, subtarget); + else + emit_move_insn (target, gen_lowpart (GET_MODE (target), subtarget)); } DONE; @@ -2579,23 +2604,24 @@ (define_expand "storehi" [;; store the low byte - (set (mem:QI (match_operand:SI 1 "" "")) (match_dup 3)) + (set (match_operand 1 "" "") (match_dup 3)) ;; extract the high byte (set (match_dup 2) (ashiftrt:SI (match_operand 0 "" "") (const_int 8))) ;; store the high byte - (set (mem:QI (match_dup 4)) - (subreg:QI (match_dup 2) 0))] ;explicit subreg safe + (set (match_dup 4) (subreg:QI (match_dup 2) 0))] ;explicit subreg safe "" " { - enum rtx_code code = GET_CODE (operands[1]); + rtx addr = XEXP (operands[1], 0); + enum rtx_code code = GET_CODE (addr); - if ((code == PLUS || code == MINUS) - && (GET_CODE (XEXP (operands[1], 1)) == REG - || GET_CODE (XEXP (operands[1], 0)) != REG)) - operands[1] = force_reg (SImode, operands[1]); - operands[4] = plus_constant (operands[1], 1); + if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) + || code == MINUS) + addr = force_reg (SImode, addr); + + operands[4] = change_address (operands[1], QImode, plus_constant (addr, 1)); + operands[1] = change_address (operands[1], QImode, NULL_RTX); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); @@ -2603,21 +2629,22 @@ ") (define_expand "storehi_bigend" - [(set (mem:QI (match_dup 4)) (match_dup 3)) + [(set (match_dup 4) (match_dup 3)) (set (match_dup 2) (ashiftrt:SI (match_operand 0 "" "") (const_int 8))) - (set (mem:QI (match_operand 1 "" "")) - (subreg:QI (match_dup 2) 0))] + (set (match_operand 1 "" "") (subreg:QI (match_dup 2) 0))] "" " { - enum rtx_code code = GET_CODE (operands[1]); - if ((code == PLUS || code == MINUS) - && (GET_CODE (XEXP (operands[1], 1)) == REG - || GET_CODE (XEXP (operands[1], 0)) != REG)) - operands[1] = force_reg (SImode, operands[1]); + rtx addr = XEXP (operands[1], 0); + enum rtx_code code = GET_CODE (addr); - operands[4] = plus_constant (operands[1], 1); + if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) + || code == MINUS) + addr = force_reg (SImode, addr); + + operands[4] = change_address (operands[1], QImode, plus_constant (addr, 1)); + operands[1] = change_address (operands[1], QImode, NULL_RTX); operands[3] = gen_lowpart (QImode, operands[0]); operands[0] = gen_lowpart (SImode, operands[0]); operands[2] = gen_reg_rtx (SImode); @@ -2626,19 +2653,19 @@ ;; Subroutine to store a half word integer constant into memory. (define_expand "storeinthi" - [(set (mem:QI (match_operand:SI 0 "" "")) + [(set (match_operand 0 "" "") (subreg:QI (match_operand 1 "" "") 0)) - (set (mem:QI (match_dup 3)) (subreg:QI (match_dup 2) 0))] + (set (match_dup 3) (subreg:QI (match_dup 2) 0))] "" " { HOST_WIDE_INT value = INTVAL (operands[1]); - enum rtx_code code = GET_CODE (operands[0]); + rtx addr = XEXP (operands[0], 0); + enum rtx_code code = GET_CODE (addr); - if ((code == PLUS || code == MINUS) - && (GET_CODE (XEXP (operands[0], 1)) == REG - || GET_CODE (XEXP (operands[0], 0)) != REG)) - operands[0] = force_reg (SImode, operands[0]); + if ((code == PLUS && GET_CODE (XEXP (addr, 1)) != CONST_INT) + || code == MINUS) + addr = force_reg (SImode, addr); operands[1] = gen_reg_rtx (SImode); if (BYTES_BIG_ENDIAN) @@ -2664,7 +2691,8 @@ } } - operands[3] = plus_constant (operands[0], 1); + operands[3] = change_address (operands[0], QImode, plus_constant (addr, 1)); + operands[0] = change_address (operands[0], QImode, NULL_RTX); } ") @@ -2695,16 +2723,15 @@ DONE; } if (GET_CODE (operands[1]) == CONST_INT) - emit_insn (gen_storeinthi (XEXP (operands[0], 0), operands[1])); + emit_insn (gen_storeinthi (operands[0], operands[1])); else { if (GET_CODE (operands[1]) == MEM) operands[1] = force_reg (HImode, operands[1]); if (BYTES_BIG_ENDIAN) - emit_insn (gen_storehi_bigend (operands[1], - XEXP (operands[0], 0))); + emit_insn (gen_storehi_bigend (operands[1], operands[0])); else - emit_insn (gen_storehi (operands[1], XEXP (operands[0], 0))); + emit_insn (gen_storehi (operands[1], operands[0])); } DONE; } @@ -3917,57 +3944,77 @@ }") (define_insn "*movsicc_insn" - [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r") + [(set (match_operand:SI 0 "s_register_operand" "=r,r,r,r,r,r,r,r") (if_then_else:SI (match_operator 3 "comparison_operator" [(match_operand 4 "cc_register" "") (const_int 0)]) - (match_operand:SI 1 "arm_not_operand" "0,0,?rI,?rI,K,K") - (match_operand:SI 2 "arm_not_operand" "rI,K,rI,K,rI,K")))] + (match_operand:SI 1 "arm_not_operand" "0,0,rI,K,rI,rI,K,K") + (match_operand:SI 2 "arm_not_operand" "rI,K,0,0,rI,K,rI,K")))] "" "@ mov%D3\\t%0, %2 mvn%D3\\t%0, #%B2 + mov%d3\\t%0, %1 + mvn%d3\\t%0, #%B1 mov%d3\\t%0, %1\;mov%D3\\t%0, %2 mov%d3\\t%0, %1\;mvn%D3\\t%0, #%B2 mvn%d3\\t%0, #%B1\;mov%D3\\t%0, %2 mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2" - [(set_attr "length" "4,4,8,8,8,8") + [(set_attr "length" "4,4,4,4,8,8,8,8") (set_attr "conds" "use")]) (define_insn "*movsfcc_hard_insn" - [(set (match_operand:SF 0 "s_register_operand" "=f,f") - (if_then_else:SF (match_operator 3 "comparison_operator" - [(match_operand 4 "cc_register" "") (const_int 0)]) - (match_operand:SF 1 "s_register_operand" "0,0") - (match_operand:SF 2 "fpu_add_operand" "fG,H")))] + [(set (match_operand:SF 0 "s_register_operand" "=f,f,f,f,f,f,f,f") + (if_then_else:SF + (match_operator 3 "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_HARD_FLOAT" "@ mvf%D3s\\t%0, %2 - mnf%D3s\\t%0, #%N2" - [(set_attr "type" "ffarith") + 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") + [(set (match_operand:SF 0 "s_register_operand" "=r,r") (if_then_else:SF (match_operator 3 "comparison_operator" [(match_operand 4 "cc_register" "") (const_int 0)]) - (match_operand:SF 1 "s_register_operand" "0") - (match_operand:SF 2 "s_register_operand" "r")))] + (match_operand:SF 1 "s_register_operand" "0,r") + (match_operand:SF 2 "s_register_operand" "r,0")))] "TARGET_SOFT_FLOAT" - "mov%D3\\t%0, %2" + "@ + mov%D3\\t%0, %2 + mov%d3\\t%0, %1" [(set_attr "conds" "use")]) (define_insn "*movdfcc_insn" - [(set (match_operand:DF 0 "s_register_operand" "=f,f") - (if_then_else:DF (match_operator 3 "comparison_operator" - [(match_operand 4 "cc_register" "") (const_int 0)]) - (match_operand:DF 1 "s_register_operand" "0,0") - (match_operand:DF 2 "fpu_add_operand" "fG,H")))] + [(set (match_operand:DF 0 "s_register_operand" "=f,f,f,f,f,f,f,f") + (if_then_else:DF + (match_operator 3 "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_HARD_FLOAT" "@ mvf%D3d\\t%0, %2 - mnf%D3d\\t%0, #%N2" - [(set_attr "type" "ffarith") + 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 @@ -4194,14 +4241,17 @@ DONE; }") +;; The USE in this pattern is needed to tell flow analysis that this is +;; a CASESI insn. It has no other purpose. (define_insn "casesi_internal" - [(set (pc) - (if_then_else - (leu (match_operand:SI 0 "s_register_operand" "r") - (match_operand:SI 1 "arm_rhs_operand" "rI")) - (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4)) - (label_ref (match_operand 2 "" "")))) - (label_ref (match_operand 3 "" ""))))] + [(parallel [(set (pc) + (if_then_else + (leu (match_operand:SI 0 "s_register_operand" "r") + (match_operand:SI 1 "arm_rhs_operand" "rI")) + (mem:SI (plus:SI (mult:SI (match_dup 0) (const_int 4)) + (label_ref (match_operand 2 "" "")))) + (label_ref (match_operand 3 "" "")))) + (use (label_ref (match_dup 2)))])] "" "* if (flag_pic) diff --git a/gcc/config/arm/coff.h b/gcc/config/arm/coff.h index abba7c6b787..92101588c8f 100644 --- a/gcc/config/arm/coff.h +++ b/gcc/config/arm/coff.h @@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */ point the default. NOT --nfp! --with{enable?} is supposed to replace it (right?), so let's stop using it. */ #undef TARGET_DEFAULT -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT /*+ TARGET_CPU_DEFAULT*/) +#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32) /* ??? Is a big-endian default intended to be supported? */ #if 0 /*TARGET_CPU_DEFAULT & ARM_FLAG_BIG_END*/ diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm index c2db824738f..35e6bd0d0bc 100644 --- a/gcc/config/arm/lib1funcs.asm +++ b/gcc/config/arm/lib1funcs.asm @@ -402,3 +402,22 @@ SYM (__div0): RET pc, lr #endif /* L_divmodsi_tools */ + +#ifdef L_dvmd_lnx +@ GNU/Linux division-by zero handler. Used in place of L_dvmd_tls + +#include +#define SIGFPE 8 @ cant use as it + @ contains too much C rubbish + .globl SYM (__div0) + .align 0 +SYM (__div0): + stmfd sp!, {r1, lr} + swi __NR_getpid + cmn r0, #1000 + ldmgefd sp!, {r1, pc}RETCOND @ not much we can do + mov r1, #SIGFPE + swi __NR_kill + ldmfd sp!, {r1, pc}RETCOND + +#endif /* L_dvmd_lnx */ diff --git a/gcc/config/arm/linux-gas.h b/gcc/config/arm/linux-gas.h index 67f5c6f0503..ea8b4f0a37e 100644 --- a/gcc/config/arm/linux-gas.h +++ b/gcc/config/arm/linux-gas.h @@ -1,4 +1,5 @@ -/* Definitions of target machine for GNU compiler. ARM Linux version. +/* Definitions of target machine for GNU compiler. ARM Linux-based GNU + systems version. Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Russell King . diff --git a/gcc/config/arm/linux.h b/gcc/config/arm/linux.h index 55579cec724..fa8fef10e72 100644 --- a/gcc/config/arm/linux.h +++ b/gcc/config/arm/linux.h @@ -1,6 +1,6 @@ -/* Definitions for ARM running Linux +/* Definitions for ARM running Linux-based GNU systems. Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc. - Adapted from ARM Linux by Russell King . + Contributed by Russell King . This file is part of GNU CC. @@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */ #undef COMMENT_BEGIN /* We default to ARM3. */ -#define TARGET_CPU_DEFAULT TARGET_CPU_arm3 +#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm3 #undef CPP_PREDEFINES #define CPP_PREDEFINES \ @@ -56,8 +56,7 @@ Boston, MA 02111-1307, USA. */ #define HANDLE_SYSV_PRAGMA /* Run-time Target Specification. */ -#define TARGET_VERSION \ - fputs (" (ARM Linux/a.out)", stderr); +#define TARGET_VERSION fputs (" (ARM GNU/Linux with a.out)", stderr); /* This is used in ASM_FILE_START */ #define ARM_OS_NAME "Linux" diff --git a/gcc/config/arm/netbsd.h b/gcc/config/arm/netbsd.h index af0c26166ca..94fd024d42e 100644 --- a/gcc/config/arm/netbsd.h +++ b/gcc/config/arm/netbsd.h @@ -1,6 +1,5 @@ -/* - NetBSD/arm (RiscBSD) version. - Copyright (C) 1993, 1994 Free Software Foundation, Inc. +/* NetBSD/arm (RiscBSD) version. + Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc. Contributed by Mark Brinicombe (amb@physig.ph.kcl.ac.uk) This file is part of GNU CC. @@ -64,6 +63,13 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef CPP_APCS_PC_DEFAULT_SPEC #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__" +/* Pass -X to the linker so that it will strip symbols starting with 'L' */ +#undef LINK_SPEC +#define LINK_SPEC "\ +-X %{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{R*} \ +%{static:-Bstatic} %{assert*} \ +" + #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" @@ -107,7 +113,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ Normally GCC/arm uses a structure alignment of 32 for compatibility with armcc. This means that structures are padded to a word - boundry. However this causes problems with bugged NetBSD kernel + boundary. However this causes problems with bugged NetBSD kernel code (possibly userland code as well - I have not checked every binary). The nature of this bugged code is to rely on sizeof() returning the correct size of various structures rounded to the @@ -123,7 +129,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ structures containing shorts will be half word alinged. structures containing ints will be word aligned. - This means structures should be padded to a word boundry if + This means structures should be padded to a word boundary if alignment of 32 is required for byte structures etc. 2. A potential performance penalty may exist if strings are no longer diff --git a/gcc/config/arm/t-linux b/gcc/config/arm/t-linux index c6ccfd103b2..f45e3147e98 100644 --- a/gcc/config/arm/t-linux +++ b/gcc/config/arm/t-linux @@ -10,7 +10,7 @@ ENQUIRE= CROSS_LIBGCC1 = libgcc1-asm.a LIBGCC1 = libgcc1-asm.a LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx MULTILIB_OPTIONS = mapcs-32 MULTILIB_DIRNAMES = apcs-32 diff --git a/gcc/config/arm/xm-arm.h b/gcc/config/arm/xm-arm.h index 00818e75eab..a6143fa9abf 100644 --- a/gcc/config/arm/xm-arm.h +++ b/gcc/config/arm/xm-arm.h @@ -44,12 +44,6 @@ Boston, MA 02111-1307, USA. */ #define USE_C_ALLOCA #endif -/* Define this if the library function putenv is available on your machine */ -#define HAVE_PUTENV 1 - -/* Define this if the library function vprintf is available on your machine */ -#define HAVE_VPRINTF 1 - /* Define this to be 1 if you know the host compiler supports prototypes, even if it doesn't define __STDC__, or define it to be 0 if you do not want any prototypes when compiling GNU CC. */ diff --git a/gcc/config/arm/xm-linux.h b/gcc/config/arm/xm-linux.h index 955379dab16..ca120a9c8a6 100644 --- a/gcc/config/arm/xm-linux.h +++ b/gcc/config/arm/xm-linux.h @@ -1,4 +1,4 @@ -/* Configuration for GCC for Intel i386 running Linux. +/* Configuration for GCC for Intel i386 running Linux-based GNU systems./ Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) diff --git a/gcc/config/arm/xm-netbsd.h b/gcc/config/arm/xm-netbsd.h index a0de5bf1a77..ea9a64ea4bf 100644 --- a/gcc/config/arm/xm-netbsd.h +++ b/gcc/config/arm/xm-netbsd.h @@ -2,17 +2,6 @@ #include -/* xm-netbsd.h defines this */ -#ifdef HAVE_VPRINTF -#undef HAVE_VPRINTF -#endif - #ifndef SYS_SIGLIST_DECLARED #define SYS_SIGLIST_DECLARED #endif - -#ifndef HAVE_STRERROR -#define HAVE_STRERROR -#endif - -#include diff --git a/gcc/config/clipper/clipper.c b/gcc/config/clipper/clipper.c index c1865694040..f3bae7eead4 100644 --- a/gcc/config/clipper/clipper.c +++ b/gcc/config/clipper/clipper.c @@ -440,23 +440,37 @@ clipper_builtin_saveregs (arglist) if (flag_check_memory_usage) { - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, addr, - ptr_mode, GEN_INT (5 * GET_MODE_SIZE (SImode)), + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + addr, ptr_mode, + GEN_INT (5 * GET_MODE_SIZE (SImode)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); - - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, f0_addr, - ptr_mode, GEN_INT (GET_MODE_SIZE (DFmode)), - TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, f1_addr, - ptr_mode, GEN_INT (GET_MODE_SIZE (DFmode)), - TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, r0_addr, - ptr_mode, GEN_INT (GET_MODE_SIZE (SImode)), - TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode); - emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, r1_addr, - ptr_mode, GEN_INT (GET_MODE_SIZE (SImode)), - TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + f0_addr, ptr_mode, + GEN_INT (GET_MODE_SIZE (DFmode)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + f1_addr, ptr_mode, + GEN_INT (GET_MODE_SIZE (DFmode)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + r0_addr, ptr_mode, + GEN_INT (GET_MODE_SIZE (SImode)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, + r1_addr, ptr_mode, + GEN_INT (GET_MODE_SIZE (SImode)), + TYPE_MODE (sizetype), + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); } /* Return the address of the va_list constructor, but don't put it in a diff --git a/gcc/config/clipper/clix.h b/gcc/config/clipper/clix.h index d08e2203ff0..c36e4de46a0 100644 --- a/gcc/config/clipper/clix.h +++ b/gcc/config/clipper/clix.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. Clipper/Clix version. - Copyright (C) 1988, 1993, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 1993, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -31,6 +31,8 @@ Boston, MA 02111-1307, USA. */ #undef LIB_SPEC +#define TARGET_MEM_FUNCTIONS + #undef HAVE_ATEXIT #define HAVE_ATEXIT diff --git a/gcc/config/clipper/xm-clix.h b/gcc/config/clipper/xm-clix.h index 5485c242539..726660df46a 100644 --- a/gcc/config/clipper/xm-clix.h +++ b/gcc/config/clipper/xm-clix.h @@ -27,13 +27,4 @@ /* isinf isn't there, but finite is. */ #define isinf(x) (!finite(x)) - #define USG - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) -#define index strchr -#define rindex strrchr - -#define TARGET_MEM_FUNCTIONS diff --git a/gcc/config/convex/xm-convex.h b/gcc/config/convex/xm-convex.h index ebe334579ec..aaaa3b1464c 100644 --- a/gcc/config/convex/xm-convex.h +++ b/gcc/config/convex/xm-convex.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for Convex. - Copyright (C) 1989, 1993 Free Software Foundation, Inc. + Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -42,11 +42,6 @@ Boston, MA 02111-1307, USA. */ #define P_tmpdir "/tmp/" -/* Use memcpy and memset -- either would work but these get inlined. */ - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) - /* Convex uses Vax or IEEE floats. Both formats have Vax semantics. */ diff --git a/gcc/config/dsp16xx/dsp16xx.h b/gcc/config/dsp16xx/dsp16xx.h index 83a97f8979c..3047372cc71 100644 --- a/gcc/config/dsp16xx/dsp16xx.h +++ b/gcc/config/dsp16xx/dsp16xx.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. AT&T DSP1600. - Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Michael Collison (collison@world.std.com). This file is part of GNU CC. @@ -440,7 +440,7 @@ extern int target_flags; /* 1 for registers that have pervasive standard uses and are not available for the register allocator. - The registers are layed out as follows: + The registers are laid out as follows: {a0,a0l,a1,a1l,x,y,yl,p,pl} - Data Arithmetic Unit {r0,r1,r2,r3,j,k,ybase} - Y Space Address Arithmetic Unit @@ -1652,7 +1652,7 @@ const_section () \ /* This is how to output an assembler line defining a `float' constant. */ #define ASM_OUTPUT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) -/* This is how to output and assembler line defininf a 'float' constant of +/* This is how to output an assembler line defining a 'float' constant of size HFmode. */ #define ASM_OUTPUT_SHORT_FLOAT(FILE,VALUE) asm_output_float (FILE, VALUE) diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c index 52103548bef..c05f215c0ee 100644 --- a/gcc/config/fp-bit.c +++ b/gcc/config/fp-bit.c @@ -241,7 +241,7 @@ typedef unsigned int UDItype __attribute__ ((mode (DI))); /* numeric parameters */ /* F_D_BITOFF is the number of bits offset between the MSB of the mantissa of a float and of a double. Assumes there are only two float types. - (double::FRAC_BITS+double::NGARGS-(float::FRAC_BITS-float::NGARDS)) + (double::FRAC_BITS+double::NGARDS-(float::FRAC_BITS-float::NGARDS)) */ #define F_D_BITOFF (52+8-(23+7)) @@ -456,7 +456,7 @@ pack_d ( fp_number_type * src) } /* We previously used bitfields to store the number, but this doesn't - handle little/big endian systems conviently, so use shifts and + handle little/big endian systems conveniently, so use shifts and masks */ #ifdef FLOAT_BIT_ORDER_MISMATCH dst.bits.fraction = fraction; @@ -483,7 +483,7 @@ static void unpack_d (FLO_union_type * src, fp_number_type * dst) { /* We previously used bitfields to store the number, but this doesn't - handle little/big endian systems conviently, so use shifts and + handle little/big endian systems conveniently, so use shifts and masks */ fractype fraction; int exp; diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index c18d7b8f6b5..6ddd8cd3eeb 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -52,7 +52,7 @@ int cpu_type; (either via #pragma or an attribute specification). */ int interrupt_handler; -/* True if the current fucntion is an OS Task +/* True if the current function is an OS Task (via an attribute specification). */ int os_task; diff --git a/gcc/config/i370/i370.c b/gcc/config/i370/i370.c index 2767be4e4bc..55189825540 100644 --- a/gcc/config/i370/i370.c +++ b/gcc/config/i370/i370.c @@ -35,6 +35,11 @@ Boston, MA 02111-1307, USA. */ #include "insn-attr.h" #include "flags.h" #include "recog.h" +#ifdef sun +#include +#include +#endif +#include /* Label node, this structure is used to keep track of labels on the @@ -285,7 +290,7 @@ mvs_add_label (id) label_anchor = lp; } -/* Check to see if the label is in the list. If 1 is returned then a load +/* Check to see if the label is in the list. If 1 is returned then a load and branch on register must be generated. ID is the label number of the label being checked. */ @@ -480,3 +485,100 @@ unsigned_jump_follows_p (insn) return GET_CODE (insn) != GE && GET_CODE (insn) != GT && GET_CODE (insn) != LE && GET_CODE (insn) != LT; } + +void +i370_function_prolog (f, l) + FILE *f; + int l; +{ +#if MACROPROLOGUE == 1 + fprintf (f, "\tEDCPRLG USRDSAL=%d,BASEREG=%d\n", + STACK_POINTER_OFFSET + l - 120 + + current_function_outgoing_args_size, BASE_REGISTER); + fprintf (f, "PG%d\tEQU\t*\n", mvs_page_num ); + fprintf (f, "\tLR\t11,1\n"); + fprintf (f, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); + mvs_page_code = 6; + mvs_page_lit = 4; + mvs_check_page (f, 0, 0); + function_base_page = mvs_page_num; +#else /* MACROPROLOGUE != 1 */ + static int function_label_index = 1; + static int function_first = 0; + static int function_year, function_month, function_day; + static int function_hour, function_minute, function_second; + int i; + if (!function_first) + { + struct tm *function_time; + time_t lcltime; + time (&lcltime); + function_time = localtime (&lcltime); + function_year = function_time->tm_year + 1900; + function_month = function_time->tm_mon + 1; + function_day = function_time->tm_mday; + function_hour = function_time->tm_hour; + function_minute = function_time->tm_min; + function_second = function_time->tm_sec; + fprintf (f, "PPA2\tDS\t0F\n"); + fprintf (f, "\tDC\tX'03',X'00',X'33',X'00'\n"); + fprintf (f, "\tDC\tV(CEESTART),A(0)\n"); + fprintf (f, "\tDC\tA(CEETIMES)\n"); + fprintf (f, "CEETIMES\tDS\t0F\n"); + fprintf (f, "\tDC\tCL4'%d',CL4'%02d%02d',CL6'%02d%02d00'\n", + function_year, function_month, function_day, + function_hour, function_minute, function_second); + fprintf (f, "\tDC\tCL2'01',CL4'0100'\n"); + } + fprintf (f, "$DSD%03d\tDSECT\n", function_label_index); + fprintf (f, "\tDS\tD\n"); + fprintf (f, "\tDS\tCL(%d)\n", STACK_POINTER_OFFSET + l + + current_function_outgoing_args_size); + fprintf (f, "\tORG\t$DSD%03d\n", function_label_index); + fprintf (f, "\tDS\tCL(120+8)\n"); + fprintf (f, "\tORG\n"); + fprintf (f, "\tDS\t0D\n"); + fprintf (f, "$DSL%03d\tEQU\t*-$DSD%03d-8\n", function_label_index, + function_label_index); + fprintf (f, "\tDS\t0H\n"); + assemble_name (f, mvs_function_name); + fprintf (f, "\tEQU\t*\n"); + fprintf (f, "\tUSING\t*,15\n"); + fprintf (f, "\tB\tFPL%03d\n", function_label_index); + fprintf (f, "\tDC\tAL1(FPL%03d+4-*)\n", function_label_index + 1); + fprintf (f, "\tDC\tX'CE',X'A0',AL1(16)\n"); + fprintf (f, "\tDC\tAL4(PPA2)\n"); + fprintf (f, "\tDC\tAL4(0)\n"); + fprintf (f, "\tDC\tAL4($DSL%03d)\n", function_label_index); + fprintf (f, "FPL%03d\tEQU\t*\n", function_label_index + 1); + fprintf (f, "\tDC\tAL2(%d),C'%s'\n", strlen (mvs_function_name), + mvs_function_name); + fprintf (f, "FPL%03d\tDS\t0H\n", function_label_index); + fprintf (f, "\tSTM\t14,12,12(13)\n"); + fprintf (f, "\tL\t2,76(,13)\n"); + fprintf (f, "\tL\t0,16(,15)\n"); + fprintf (f, "\tALR\t0,2\n"); + fprintf (f, "\tCL\t0,12(,12)\n"); + fprintf (f, "\tBNH\t*+10\n"); + fprintf (f, "\tL\t15,116(,12)\n"); + fprintf (f, "\tBALR\t14,15\n"); + fprintf (f, "\tL\t15,72(,13)\n"); + fprintf (f, "\tSTM\t15,0,72(2)\n"); + fprintf (f, "\tMVI\t0(2),X'10'\n"); + fprintf (f, "\tST\t2,8(,13)\n "); + fprintf (f, "\tST\t13,4(,2)\n "); + fprintf (f, "\tLR\t13,2\n"); + fprintf (f, "\tDROP\t15\n"); + fprintf (f, "\tBALR\t%d,0\n", BASE_REGISTER); + fprintf (f, "PG%d\tEQU\t*\n", mvs_page_num ); + fprintf (f, "\tUSING\t*,%d\n", BASE_REGISTER); + fprintf (f, "\tLR\t11,1\n"); + fprintf (f, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); + mvs_page_code = 4; + mvs_page_lit = 4; + mvs_check_page (f, 0, 0); + function_base_page = mvs_page_num; + function_first = 1; + function_label_index += 2; +#endif /* MACROPROLOGUE */ +} diff --git a/gcc/config/i370/i370.h b/gcc/config/i370/i370.h index 576a44912f7..e213883075b 100644 --- a/gcc/config/i370/i370.h +++ b/gcc/config/i370/i370.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. System/370 version. - Copyright (C) 1989, 1993, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for C/370 MVS by Dave Pitts (dpitts@nyx.cs.du.edu) @@ -20,12 +20,6 @@ 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. */ -#ifdef sun -#include -#include -#endif -#include - #define TARGET_VERSION printf (" (370/MVS)"); /* Options for the preprocessor for this target machine. */ @@ -489,103 +483,7 @@ enum reg_class /* This macro generates the assembly code for function entry. All of the C/370 environment is preserved. */ - -#if MACROPROLOGUE == 1 -#define FUNCTION_PROLOGUE(FILE, LSIZE) \ -{ \ - fprintf (FILE, "\tEDCPRLG USRDSAL=%d,BASEREG=%d\n", \ - STACK_POINTER_OFFSET + LSIZE - 120 + \ - current_function_outgoing_args_size, BASE_REGISTER); \ - fprintf (FILE, "PG%d\tEQU\t*\n", mvs_page_num ); \ - fprintf (FILE, "\tLR\t11,1\n"); \ - fprintf (FILE, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); \ - mvs_page_code = 6; \ - mvs_page_lit = 4; \ - mvs_check_page (FILE, 0, 0); \ - function_base_page = mvs_page_num; \ -} -#else /* MACROPROLOGUE != 1 */ -#define FUNCTION_PROLOGUE(FILE, LSIZE) \ -{ \ - static int function_label_index = 1; \ - static int function_first = 0; \ - static int function_year, function_month, function_day; \ - static int function_hour, function_minute, function_second; \ - int i; \ - if (!function_first) \ - { \ - struct tm *function_time; \ - time_t lcltime; \ - time (&lcltime); \ - function_time = localtime (&lcltime); \ - function_year = function_time->tm_year + 1900; \ - function_month = function_time->tm_mon + 1; \ - function_day = function_time->tm_mday; \ - function_hour = function_time->tm_hour; \ - function_minute = function_time->tm_min; \ - function_second = function_time->tm_sec; \ - fprintf (FILE, "PPA2\tDS\t0F\n"); \ - fprintf (FILE, "\tDC\tX'03',X'00',X'33',X'00'\n"); \ - fprintf (FILE, "\tDC\tV(CEESTART),A(0)\n"); \ - fprintf (FILE, "\tDC\tA(CEETIMES)\n"); \ - fprintf (FILE, "CEETIMES\tDS\t0F\n"); \ - fprintf (FILE, "\tDC\tCL4'%d',CL4'%02d%02d',CL6'%02d%02d00'\n", \ - function_year, function_month, function_day, \ - function_hour, function_minute, function_second); \ - fprintf (FILE, "\tDC\tCL2'01',CL4'0100'\n"); \ - } \ - fprintf (FILE, "$DSD%03d\tDSECT\n", function_label_index); \ - fprintf (FILE, "\tDS\tD\n"); \ - fprintf (FILE, "\tDS\tCL(%d)\n", STACK_POINTER_OFFSET + LSIZE \ - + current_function_outgoing_args_size); \ - fprintf (FILE, "\tORG\t$DSD%03d\n", function_label_index); \ - fprintf (FILE, "\tDS\tCL(120+8)\n"); \ - fprintf (FILE, "\tORG\n"); \ - fprintf (FILE, "\tDS\t0D\n"); \ - fprintf (FILE, "$DSL%03d\tEQU\t*-$DSD%03d-8\n", function_label_index, \ - function_label_index); \ - fprintf (FILE, "\tDS\t0H\n"); \ - assemble_name (FILE, mvs_function_name); \ - fprintf (FILE, "\tEQU\t*\n"); \ - fprintf (FILE, "\tUSING\t*,15\n"); \ - fprintf (FILE, "\tB\tFPL%03d\n", function_label_index); \ - fprintf (FILE, "\tDC\tAL1(FPL%03d+4-*)\n", function_label_index + 1); \ - fprintf (FILE, "\tDC\tX'CE',X'A0',AL1(16)\n"); \ - fprintf (FILE, "\tDC\tAL4(PPA2)\n"); \ - fprintf (FILE, "\tDC\tAL4(0)\n"); \ - fprintf (FILE, "\tDC\tAL4($DSL%03d)\n", function_label_index); \ - fprintf (FILE, "FPL%03d\tEQU\t*\n", function_label_index + 1); \ - fprintf (FILE, "\tDC\tAL2(%d),C'%s'\n", strlen (mvs_function_name), \ - mvs_function_name); \ - fprintf (FILE, "FPL%03d\tDS\t0H\n", function_label_index); \ - fprintf (FILE, "\tSTM\t14,12,12(13)\n"); \ - fprintf (FILE, "\tL\t2,76(,13)\n"); \ - fprintf (FILE, "\tL\t0,16(,15)\n"); \ - fprintf (FILE, "\tALR\t0,2\n"); \ - fprintf (FILE, "\tCL\t0,12(,12)\n"); \ - fprintf (FILE, "\tBNH\t*+10\n"); \ - fprintf (FILE, "\tL\t15,116(,12)\n"); \ - fprintf (FILE, "\tBALR\t14,15\n"); \ - fprintf (FILE, "\tL\t15,72(,13)\n"); \ - fprintf (FILE, "\tSTM\t15,0,72(2)\n"); \ - fprintf (FILE, "\tMVI\t0(2),X'10'\n"); \ - fprintf (FILE, "\tST\t2,8(,13)\n "); \ - fprintf (FILE, "\tST\t13,4(,2)\n "); \ - fprintf (FILE, "\tLR\t13,2\n"); \ - fprintf (FILE, "\tDROP\t15\n"); \ - fprintf (FILE, "\tBALR\t%d,0\n", BASE_REGISTER); \ - fprintf (FILE, "PG%d\tEQU\t*\n", mvs_page_num ); \ - fprintf (FILE, "\tUSING\t*,%d\n", BASE_REGISTER); \ - fprintf (FILE, "\tLR\t11,1\n"); \ - fprintf (FILE, "\tL\t%d,=A(PGT%d)\n", PAGE_REGISTER, mvs_page_num); \ - mvs_page_code = 4; \ - mvs_page_lit = 4; \ - mvs_check_page (FILE, 0, 0); \ - function_base_page = mvs_page_num; \ - function_first = 1; \ - function_label_index += 2; \ -} -#endif /* MACROPROLOGUE */ +#define FUNCTION_PROLOGUE(FILE, LSIZE) i370_function_prolog ((FILE), (LSIZE)); #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ { \ diff --git a/gcc/config/i370/xm-i370.h b/gcc/config/i370/xm-i370.h index 438a6a4be9d..ac753633070 100644 --- a/gcc/config/i370/xm-i370.h +++ b/gcc/config/i370/xm-i370.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for System/370. - Copyright (C) 1989, 1993 Free Software Foundation, Inc. + Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc. Contributed by Jan Stein (jan@cd.chalmers.se). Modified for MVS C/370 by Dave Pitts (dpitts@nyx.cs.du.edu) @@ -44,10 +44,6 @@ Boston, MA 02111-1307, USA. */ #include "tm.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - /* Arguments to use with `exit'. */ #define SUCCESS_EXIT_CODE 0 diff --git a/gcc/config/i386/cygwin32.h b/gcc/config/i386/cygwin32.h index 7f728bdd628..952d8488b34 100644 --- a/gcc/config/i386/cygwin32.h +++ b/gcc/config/i386/cygwin32.h @@ -41,6 +41,9 @@ Boston, MA 02111-1307, USA. */ -D__cdecl=__attribute__((__cdecl__)) \ -Asystem(winnt) -Acpu(i386) -Amachine(i386)" +#undef CPP_SPEC +#define CPP_SPEC "-remap %(cpp_cpu) %[cpp_cpu] %{posix:-D_POSIX_SOURCE}" + /* 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 'libcygwin.a'. For Windows applications, include more libraries, but diff --git a/gcc/config/i386/dgux.c b/gcc/config/i386/dgux.c index 23e4cf1e004..ff36135380c 100644 --- a/gcc/config/i386/dgux.c +++ b/gcc/config/i386/dgux.c @@ -1,6 +1,5 @@ /* Subroutines for GNU compiler for Intel 80x86 running DG/ux - Copyright (C) 1993, 1995 Free Software Foundation, Inc. - + Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc. Currently maintained by (gcc@dg-rtp.dg.com) This file is part of GNU CC. @@ -96,7 +95,7 @@ output_options (file, f_options, f_len, W_options, W_len, indent, pos, max); pos = output_option (file, sep, "-mcpu=", ix86_cpu_string, indent, pos, max); - pos = output_option (file, sep, "-march=", ix86_isa_string, indent, pos, max); + pos = output_option (file, sep, "-march=", ix86_arch_string, indent, pos, max); fprintf (file, term); } diff --git a/gcc/config/i386/dgux.h b/gcc/config/i386/dgux.h index 4a923fca679..f4532132e27 100644 --- a/gcc/config/i386/dgux.h +++ b/gcc/config/i386/dgux.h @@ -1,5 +1,5 @@ /* Target definitions for GNU compiler for Intel 80x86 running DG/ux - Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. Currently maintained by gcc@dg-rtp.dg.com. This file is part of GNU CC. @@ -25,7 +25,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "i386/sysv4.h" #ifndef VERSION_INFO2 -#define VERSION_INFO2 "$Revision: 1.1 $" +#define VERSION_INFO2 "$Revision: 1.8 $" #endif #ifndef VERSION_STRING @@ -170,7 +170,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Linker and library spec's. -static, -shared, -symbolic, -h* and -z* access AT&T V.4 link options. -svr4 instructs gcc to place /usr/lib/values-X[cat].o on link the line. - The absense of -msvr4 indicates linking done in a COFF environment and + The absence of -msvr4 indicates linking done in a COFF environment and adds the link script to the link line. In all environments, the first and last objects are crtbegin.o and crtend.o. When the -G link option is used (-shared and -symbolic) a final link is @@ -260,24 +260,6 @@ char insn; int insn_; char * file_; int line_; warning ("argument is a structure"),0 : 0), \ (function_arg (&CUM, MODE, TYPE, NAMED))) -/* 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 <= 2) \ - fprintf ((FILE), "\t.align %d\n", 1<<(LOG));\ - else if ((LOG)!=0) \ - { \ - char buf[256]; \ - if (!backalign_labelno) fprintf ((FILE), "\t.align %d\n", 1); \ - ASM_GENERATE_INTERNAL_LABEL (buf, "LBA", backalign_labelno++); \ - fprintf ((FILE), "%s:", &buf[1]); \ - fprintf ((FILE), "\t.backalign %s,%d,%d\n", &buf[1], 1<<(LOG), \ - ((TARGET_PENTIUMPRO || TARGET_486) && LOG==4) ? 6 : 2);\ - } - -/* add .align 1 to avoid .backalign bug in assembler */ +/* Add .align 1 to avoid .backalign bug in assembler */ #undef CONST_SECTION_ASM_OP #define CONST_SECTION_ASM_OP ".section\t.rodata\n\t.align 1" diff --git a/gcc/config/i386/freebsd-elf.h b/gcc/config/i386/freebsd-elf.h index 55bf23c0c63..252ebf5cf84 100644 --- a/gcc/config/i386/freebsd-elf.h +++ b/gcc/config/i386/freebsd-elf.h @@ -2,7 +2,7 @@ Copyright (C) 1996 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. - Adapted from Linux version by John Polstra. + Adapted from GNU/Linux version by John Polstra. This file is part of GNU CC. diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c index 13d87ec0e90..c0743958f90 100644 --- a/gcc/config/i386/gmon-sol2.c +++ b/gcc/config/i386/gmon-sol2.c @@ -58,7 +58,7 @@ * * Notes * - * This code could easily be integrated with the orginal gmon.c and perhaps + * This code could easily be integrated with the original gmon.c and perhaps * should be. */ @@ -90,7 +90,7 @@ struct phdr { #define HASHFRACTION 1 #define ARCDENSITY 2 #define MINARCS 50 -#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all excutables start here +#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here and not at 0 */ struct tostruct { diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 8516911dd1d..a4ec3b6a3f2 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -35,7 +35,6 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "except.h" #include "function.h" -#include "dwarf2.h" #ifdef EXTRA_CONSTRAINT /* If EXTRA_CONSTRAINT is defined, then the 'S' @@ -1973,12 +1972,10 @@ load_pic_register (do_rtl) if (do_rtl) { - emit_insn (gen_prologue_get_pc (xops[0], xops[1])); - emit_insn (gen_pop (xops[0])); - emit_insn (gen_prologue_set_got - (xops[0], - gen_rtx (SYMBOL_REF, Pmode, "$_GLOBAL_OFFSET_TABLE_"), - xops[1])); + /* We can't put a raw CODE_LABEL into the RTL, and we can't emit + a new CODE_LABEL after reload, so we need a single pattern to + emit the 3 necessary instructions. */ + emit_insn (gen_prologue_get_pc_and_set_got (xops[0])); } else { @@ -3545,15 +3542,6 @@ notice_update_cc (exp) if (SET_DEST (exp) == pc_rtx) return; -#ifdef IS_STACK_MODE - /* Moving into a memory of stack_mode may have been moved - in between the use and set of cc0 by loop_spl(). So - old value of cc.status must be retained */ - if (GET_CODE(SET_DEST(exp)) == MEM - && IS_STACK_MODE (GET_MODE (SET_DEST (exp)))) - return; -#endif - /* Moving register or memory into a register: it doesn't alter the cc's, but it might invalidate the RTX's which we remember the cc's came from. @@ -4852,7 +4840,7 @@ reg_mentioned_in_mem (reg, rtl) return 0; } -/* Output the approprate insns for doing strlen if not just doing repnz; scasb +/* Output the appropriate insns for doing strlen if not just doing repnz; scasb operands[0] = result, initialized with the startaddress operands[1] = alignment of the address. @@ -4907,7 +4895,7 @@ output_strlen_unroll (operands) therefore use andl rather than andb. */ output_asm_insn (AS2 (and%L1,%4,%1), xops); - /* Is aligned to 4-byte adress when zero */ + /* Is aligned to 4-byte address when zero */ output_asm_insn (AS1 (je,%l8), xops); /* Side-effect even Parity when %eax == 3 */ @@ -4927,7 +4915,7 @@ output_strlen_unroll (operands) check if is aligned to 4 - byte. */ output_asm_insn (AS2 (and%L1,%3,%1), xops); - /* Is aligned to 4-byte adress when zero */ + /* Is aligned to 4-byte address when zero */ output_asm_insn (AS1 (je,%l8), xops); } diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 105bce1ea80..9bfef4e98b2 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -207,6 +207,8 @@ extern int target_flags; { "no-debug-arg", -MASK_DEBUG_ARG }, \ { "stack-arg-probe", MASK_STACK_PROBE }, \ { "no-stack-arg-probe", -MASK_STACK_PROBE }, \ + { "windows", 0 }, \ + { "dll", 0 }, \ SUBTARGET_SWITCHES \ { "", MASK_SCHEDULE_PROLOGUE | TARGET_DEFAULT}} diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 64edb555dfb..ea72a98a65e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -6515,9 +6515,10 @@ byte_xor_operation: (define_insn "prologue_set_got" [(set (match_operand:SI 0 "" "") - (plus:SI (match_dup 0) - (plus:SI (match_operand:SI 1 "symbolic_operand" "") - (minus:SI (pc) (match_operand 2 "" "")))))] + (unspec_volatile + [(plus:SI (match_dup 0) + (plus:SI (match_operand:SI 1 "symbolic_operand" "") + (minus:SI (pc) (match_operand 2 "" ""))))] 1))] "" "* { @@ -6538,7 +6539,7 @@ byte_xor_operation: (define_insn "prologue_get_pc" [(set (match_operand:SI 0 "" "") - (plus:SI (pc) (match_operand 1 "" "")))] + (unspec_volatile [(plus:SI (pc) (match_operand 1 "" ""))] 2))] "" "* { @@ -6552,6 +6553,20 @@ byte_xor_operation: RET; }") +(define_insn "prologue_get_pc_and_set_got" + [(unspec_volatile [(match_operand:SI 0 "" "")] 3)] + "" + "* +{ + operands[1] = gen_label_rtx (); + output_asm_insn (AS1 (call,%P1), operands); + ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", + CODE_LABEL_NUMBER (operands[1])); + output_asm_insn (AS1 (pop%L0,%0), operands); + output_asm_insn (\"addl $_GLOBAL_OFFSET_TABLE_+[.-%P1],%0\", operands); + RET; +}") + (define_expand "epilogue" [(const_int 1)] "" diff --git a/gcc/config/i386/isc.h b/gcc/config/i386/isc.h index c0a51508abd..d0b2dcc7a55 100644 --- a/gcc/config/i386/isc.h +++ b/gcc/config/i386/isc.h @@ -87,3 +87,7 @@ } \ fputs ("\"\n", FILE); \ } while (0) + +/* Work around assembler forward label references generated in exception + handling code. */ +#define DWARF2_UNWIND_INFO 0 diff --git a/gcc/config/i386/linux-aout.h b/gcc/config/i386/linux-aout.h index f7d807a10d0..8bf3daa5613 100644 --- a/gcc/config/i386/linux-aout.h +++ b/gcc/config/i386/linux-aout.h @@ -1,5 +1,5 @@ -/* Definitions for Intel 386 running Linux - Copyright (C) 1992, 1994, 1995 Free Software Foundation, Inc. +/* Definitions for Intel 386 running Linux-based GNU systems using a.out. + Copyright (C) 1992, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. @@ -53,9 +53,8 @@ Boston, MA 02111-1307, USA. */ #if 1 /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -lc_p or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #define LIB_SPEC \ "%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}" #else diff --git a/gcc/config/i386/linux-oldld.h b/gcc/config/i386/linux-oldld.h index a12ab590076..9c6c21f79d4 100644 --- a/gcc/config/i386/linux-oldld.h +++ b/gcc/config/i386/linux-oldld.h @@ -1,5 +1,6 @@ -/* Definitions for Intel 386 running Linux with pre-BFD a.out linkers - Copyright (C) 1995 Free Software Foundation, Inc. +/* Definitions for Intel 386 running Linux-based GNU systems with pre-BFD + a.out linkers. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. Contributed by Michael Meissner (meissner@cygnus.com) This file is part of GNU CC. @@ -53,9 +54,8 @@ Boston, MA 02111-1307, USA. */ #if 1 /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -lc_p or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #define LIB_SPEC \ "%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}" #else diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index 8f0671d1faa..df27c603603 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -1,4 +1,4 @@ -/* Definitions for Intel 386 running Linux with ELF format +/* Definitions for Intel 386 running Linux-based GNU systems with ELF format. Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. @@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */ #include /* some common stuff */ #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (i386 Linux/ELF)"); +#define TARGET_VERSION fprintf (stderr, " (i386 GNU/Linux with ELF)"); /* The svr4 ABI for the i386 says that records and unions are returned in memory. */ @@ -160,7 +160,7 @@ Boston, MA 02111-1307, USA. */ #undef CC1_SPEC #define CC1_SPEC "%(cc1_cpu) %{profile:-p}" -/* Provide a LINK_SPEC appropriate for Linux. Here we provide support +/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate combinations of options at link-time. We like to support here for diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h index 388299612f4..984a3692c30 100644 --- a/gcc/config/i386/mingw32.h +++ b/gcc/config/i386/mingw32.h @@ -52,13 +52,12 @@ Boston, MA 02111-1307, USA. */ /* Specify a different entry point when linking a DLL */ #undef LINK_SPEC #define LINK_SPEC \ -"%{mwindows:--subsystem windows} %{dll:--dll -e _DllMainCRTStartup@12}" +"%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMainCRTStartup@12}" #undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{dll:dllcrt1%O%s} %{!dll:crt1%O%s}" +#define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s}" -#undef PATH_SEPARATOR -#define PATH_SEPARATOR ';' +#define MATH_LIBRARY "-lcrtdll" /* Output STRING, a string representing a filename, to FILE. We canonicalize it to be in MS-DOS format. */ diff --git a/gcc/config/i386/rtems.h b/gcc/config/i386/rtems.h index ada2d9f4ff7..b31ceb9f799 100644 --- a/gcc/config/i386/rtems.h +++ b/gcc/config/i386/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting an Intel i386 using coff. +/* Definitions for rtems targeting an Intel i386 using coff. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h index 102c9d84134..6474faeff10 100644 --- a/gcc/config/i386/sco5.h +++ b/gcc/config/i386/sco5.h @@ -76,6 +76,16 @@ Boston, MA 02111-1307, USA. */ #undef GLOBAL_ASM_OP #define GLOBAL_ASM_OP "\t.globl" +#undef EH_FRAME_SECTION_ASM_OP +#define EH_FRAME_SECTION_ASM_OP_COFF "\t.section\t.ehfram, \"x\"" +#define EH_FRAME_SECTION_ASM_OP_ELF "\t.section\t.eh_frame, \"aw\"" +#define EH_FRAME_SECTION_ASM_OP \ + ((TARGET_ELF) ? EH_FRAME_SECTION_ASM_OP_ELF : EH_FRAME_SECTION_ASM_OP_COFF) + +/* Avoid problems (long section names, forward assembler refs) with DWARF + exception unwinding when we're generating COFF */ +#define DWARF2_UNWIND_INFO ((TARGET_ELF) ? 1 : 0 ) + #undef CONST_SECTION_ASM_OP #define CONST_SECTION_ASM_OP_COFF "\t.section\t.rodata, \"x\"" #define CONST_SECTION_ASM_OP_ELF "\t.section\t.rodata" @@ -273,6 +283,14 @@ do { \ } \ } while (0) +/* A C statement (sans semicolon) to output to the stdio stream + FILE the assembler definition of uninitialized global DECL named + NAME whose size is SIZE bytes and alignment is ALIGN bytes. + Try to use asm_output_aligned_bss to implement this macro. */ + +#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ +asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) + #undef ESCAPES #define ESCAPES \ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ @@ -356,6 +374,19 @@ do { \ fprintf ((FILE), "\n"); \ } while (0) +/* Must use data section for relocatable constants when pic. */ +#undef SELECT_RTX_SECTION +#define SELECT_RTX_SECTION(MODE,RTX) \ +{ \ + if (TARGET_ELF) { \ + if (flag_pic && symbolic_operand (RTX)) \ + data_section (); \ + else \ + const_section (); \ + } else \ + readonly_data_section(); \ +} + #undef ASM_OUTPUT_CASE_LABEL #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \ do { \ @@ -559,6 +590,7 @@ do { \ #define DWARF_DEBUGGING_INFO 1 #define SDB_DEBUGGING_INFO 1 +#define DBX_DEBUGGING_INFO 1 #define PREFERRED_DEBUGGING_TYPE \ ((TARGET_ELF) ? DWARF_DEBUG: SDB_DEBUG) @@ -661,7 +693,7 @@ dtors_section () \ #undef NO_IMPLICIT_EXTERN_C #define NO_IMPLICIT_EXTERN_C 1 -/* JKJ FIXME - examine the rammifications of RETURN_IN_MEMORY and +/* JKJ FIXME - examine the ramifications of RETURN_IN_MEMORY and RETURN_POPS_ARGS */ #undef RETURN_POPS_ARGS @@ -871,7 +903,11 @@ dtors_section () \ #undef LIB_SPEC #define LIB_SPEC \ - "%{!shared:%{!symbolic:-lcrypt -lgen -lc}}" + "%{shared:pic/libgcc.a%s}%{!shared:%{!symbolic:-lcrypt -lgen -lc}}" + +#undef LIBGCC_SPEC +#define LIBGCC_SPEC \ + "%{!shared:-lgcc}" #define MASK_COFF 010000000000 /* Mask for elf generation */ #define TARGET_COFF (target_flags & MASK_COFF) @@ -901,6 +937,7 @@ compiler at the end of the day. Onward we go ... # undef FINI_SECTION_ASM_OP # undef CTORS_SECTION_ASM_OP # undef DTORS_SECTION_ASM_OP +# undef EH_FRAME_SECTION_ASM_OP # undef CTOR_LIST_BEGIN # undef CTOR_LIST_END # undef DO_GLOBAL_CTORS_BODY @@ -912,11 +949,13 @@ compiler at the end of the day. Onward we go ... # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_ELF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_ELF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_ELF +# define EH_FRAME_SECTION_ASM_OP EH_FRAME_SECTION_ASM_OP_ELF # else /* ! _SCO_ELF */ # define INIT_SECTION_ASM_OP INIT_SECTION_ASM_OP_COFF # define FINI_SECTION_ASM_OP FINI_SECTION_ASM_OP_COFF # define DTORS_SECTION_ASM_OP DTORS_SECTION_ASM_OP_COFF # define CTORS_SECTION_ASM_OP CTORS_SECTION_ASM_OP_COFF +# define EH_FRAME_SECTION_ASM_OP "" # define CTOR_LIST_BEGIN asm (INIT_SECTION_ASM_OP); asm ("pushl $0") # define CTOR_LIST_END CTOR_LIST_BEGIN # define DO_GLOBAL_CTORS_BODY \ @@ -927,4 +966,3 @@ do { \ } while (0) # endif /* ! _SCO_ELF */ #endif /* CRT_BEGIN !! CRT_END */ - diff --git a/gcc/config/i386/xm-aix.h b/gcc/config/i386/xm-aix.h index 5e5d40281a1..ea9202112a1 100644 --- a/gcc/config/i386/xm-aix.h +++ b/gcc/config/i386/xm-aix.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for IBM PS/2 running AIX/386. - Copyright (C) 1988, 1993 Free Software Foundation, Inc. + Copyright (C) 1988, 1993, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -25,13 +25,7 @@ Boston, MA 02111-1307, USA. */ #include "i386/xm-i386.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - /* If not compiled with GNU C, use the portable alloca. */ #ifndef __GNUC__ #define USE_C_ALLOCA #endif - -#define HAVE_PUTENV diff --git a/gcc/config/i386/xm-cygwin32.h b/gcc/config/i386/xm-cygwin32.h index c45e75cd773..98327f24b1d 100644 --- a/gcc/config/i386/xm-cygwin32.h +++ b/gcc/config/i386/xm-cygwin32.h @@ -20,8 +20,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define NO_STAB_H -#define HAVE_RUSAGE -#define HAVE_FILE_H #define EXECUTABLE_SUFFIX ".exe" /* Even though we support "/", allow "\" since everybody tests both. */ diff --git a/gcc/config/i386/xm-dos.h b/gcc/config/i386/xm-dos.h index e6e06f4e809..a734a81b94e 100644 --- a/gcc/config/i386/xm-dos.h +++ b/gcc/config/i386/xm-dos.h @@ -1,8 +1,5 @@ #include "i386/xm-i386.h" -/* Inhibit cccp.c's definition of putenv. */ -#define HAVE_PUTENV - /* Use semicolons to separate elements of a path. */ #define PATH_SEPARATOR ';' diff --git a/gcc/config/i386/xm-linux.h b/gcc/config/i386/xm-linux.h index 42f097ddc6c..713bf3b2817 100644 --- a/gcc/config/i386/xm-linux.h +++ b/gcc/config/i386/xm-linux.h @@ -1,5 +1,5 @@ -/* Configuration for GCC for Intel i386 running Linux. - Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. +/* Configuration for GCC for Intel i386 running Linux-based GNU systems. + Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. diff --git a/gcc/config/i386/xm-mingw32.h b/gcc/config/i386/xm-mingw32.h index b6bd1c3ee3e..47356f568d1 100644 --- a/gcc/config/i386/xm-mingw32.h +++ b/gcc/config/i386/xm-mingw32.h @@ -20,8 +20,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define NO_STAB_H -#define HAVE_RUSAGE -#define HAVE_FILE_H #ifndef USG #define USG 1 @@ -35,20 +33,13 @@ Boston, MA 02111-1307, USA. */ #define USE_PROTOTYPES 1 #endif -#ifndef HAVE_VPRINTF -#define HAVE_VPRINTF 1 -#endif - #define NO_SYS_SIGLIST 1 -#define bcmp(a,b,c) memcmp (a,b,c) -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define index strchr -#define rindex strrchr -#define kill(a,b) raise(b) #define link(a,b) -1 #define environ _environ /* Even though we support "/", allow "\" since everybody tests both. */ #define DIR_SEPARATOR '\\' #define EXECUTABLE_SUFFIX ".exe" + +#undef PATH_SEPARATOR +#define PATH_SEPARATOR ';' diff --git a/gcc/config/i386/xm-os2.h b/gcc/config/i386/xm-os2.h index 5ff2899cfd5..f74bee5ebb2 100644 --- a/gcc/config/i386/xm-os2.h +++ b/gcc/config/i386/xm-os2.h @@ -1,7 +1,7 @@ /* Configuration for GNU compiler for an Intel i386 or later processor running OS/2 2.x. - Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. - Contributed by Samuel Figueroa (figueroa@cs.nyu.edu) + Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. + Contributed by Samuel Figueroa (figueroa@apple.com) This file is part of GNU CC. @@ -28,13 +28,7 @@ Boston, MA 02111-1307, USA. */ #include /* this defines alloca */ #define USG #define ONLY_INT_FIELDS -#define HAVE_PUTENV #define USE_PROTOTYPES 1 -#define bcmp(a,b,c) memcmp (a,b,c) -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define index strchr -#define rindex strrchr #define strcasecmp stricmp #define kill(a,b) raise(b) #define mktemp tmpnam diff --git a/gcc/config/i386/xm-osf.h b/gcc/config/i386/xm-osf.h index fda50d98f55..cd06b56b6ad 100644 --- a/gcc/config/i386/xm-osf.h +++ b/gcc/config/i386/xm-osf.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for 386 running OSF/1 - Copyright (C) 1994 Free Software Foundation, Inc. + Copyright (C) 1994, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -22,11 +22,3 @@ Boston, MA 02111-1307, USA. */ #undef FALSE #include "i386/xm-i386.h" - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define HAVE_PUTENV -#define HAVE_VPRINTF - diff --git a/gcc/config/i386/xm-sun.h b/gcc/config/i386/xm-sun.h index d2e714ecf5c..de7c2013b3e 100644 --- a/gcc/config/i386/xm-sun.h +++ b/gcc/config/i386/xm-sun.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0. - Copyright (C) 1988 Free Software Foundation, Inc. + Copyright (C) 1988, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -21,7 +21,3 @@ Boston, MA 02111-1307, USA. */ #define USG #include "i386/xm-i386.h" - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) diff --git a/gcc/config/i960/rtems.h b/gcc/config/i960/rtems.h index 0c52cef5c45..714706859d9 100644 --- a/gcc/config/i960/rtems.h +++ b/gcc/config/i960/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting an Intel i960. +/* Definitions for rtems targeting an Intel i960. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/linux-aout.h b/gcc/config/linux-aout.h index 2e9a790b252..ca8a39d5070 100644 --- a/gcc/config/linux-aout.h +++ b/gcc/config/linux-aout.h @@ -1,5 +1,5 @@ -/* Definitions for Linux - Copyright (C) 1995 Free Software Foundation, Inc. +/* Definitions for Linux-based GNU systems. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) This file is part of GNU CC. @@ -25,7 +25,7 @@ Boston, MA 02111-1307, USA. */ #undef HAVE_ATEXIT #define HAVE_ATEXIT -/* Linux uses ctype from glibc.a. I am not sure how complete it is. +/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is. For now, we play safe. It may change later. */ #if 0 diff --git a/gcc/config/linux.h b/gcc/config/linux.h index d2678150fcc..3d5a8f78565 100644 --- a/gcc/config/linux.h +++ b/gcc/config/linux.h @@ -1,4 +1,4 @@ -/* Definitions for Linux with ELF format +/* Definitions for Linux-based GNU systems with ELF format Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Eric Youngdale. Modified for stabs-in-ELF by H.J. Lu. @@ -26,7 +26,7 @@ Boston, MA 02111-1307, USA. */ #undef HAVE_ATEXIT #define HAVE_ATEXIT -/* Linux uses ctype from glibc.a. I am not sure how complete it is. +/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is. For now, we play safe. It may change later. */ #if 0 @@ -59,8 +59,8 @@ Boston, MA 02111-1307, USA. */ fprintf (FILE, "\t.version\t\"01.01\"\n"); \ } while (0) -/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add - the Linux magical crtbegin.o file (see crtstuff.c) which +/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main'. */ @@ -72,11 +72,11 @@ Boston, MA 02111-1307, USA. */ %{!profile:crt1.o%s}}}} \ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" -/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on - the Linux magical crtend.o file (see crtstuff.c) which +/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main', followed by a normal - Linux "finalizer" file, `crtn.o'. */ + GNU/Linux "finalizer" file, `crtn.o'. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC \ @@ -93,9 +93,8 @@ Boston, MA 02111-1307, USA. */ #undef LIB_SPEC /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -profile or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + -profile or -ggdb to LDFLAGS at the link time, respectively. */ #if 1 #ifdef USE_GNULIBC_1 #define LIB_SPEC \ diff --git a/gcc/config/m32r/m32r.md b/gcc/config/m32r/m32r.md index 9ebbc672cce..4c8b2e54ffb 100644 --- a/gcc/config/m32r/m32r.md +++ b/gcc/config/m32r/m32r.md @@ -221,7 +221,7 @@ int shift; /* In all cases we will emit two instructions. However we try to - use 2 byte instructions whereever possible. We can assume the + use 2 byte instructions wherever possible. We can assume the constant isn't loadable with any of ldi, ld24, or seth. */ /* See if we can load a 24 bit unsigned value and invert it. */ @@ -265,7 +265,7 @@ ;; [then seth + ld/st would work for any object in the area]. Doing this ;; would require special handling of _SDA_BASE_ (its value would be ;; (.sdata + 32K) & 0xffff0000) and reloc computations would be different -;; [I think]. What to do about this is defered until later and for now we +;; [I think]. What to do about this is deferred until later and for now we ;; require .sdata to be in the first 16M. (define_expand "movsi_sda" @@ -901,7 +901,7 @@ ;; ;; On the m32r it is more efficient to use the bxxz instructions and ;; thus merge the compare and branch into one instruction, so they are -;; prefered. +;; preferred. (define_expand "cmpsi" [(set (reg:CC 17) diff --git a/gcc/config/m68k/auxas.h b/gcc/config/m68k/auxas.h index 79a242068a5..794df51558f 100644 --- a/gcc/config/m68k/auxas.h +++ b/gcc/config/m68k/auxas.h @@ -1,5 +1,5 @@ /* Definitions for Motorola 680x0 running A/UX using /bin/as - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */ #define ASM_SPEC "%{m68030:-68030 }%{m68040:-68040 }" /* Modify AT&T SGS assembler syntax */ -/* A/UX's as doesn't do dots in pseodo-ops */ +/* A/UX's as doesn't do dots in pseudo-ops */ #define SDB_DEBUGGING_INFO diff --git a/gcc/config/m68k/linux-aout.h b/gcc/config/m68k/linux-aout.h index 5dd84cc22df..692725edd4d 100644 --- a/gcc/config/m68k/linux-aout.h +++ b/gcc/config/m68k/linux-aout.h @@ -1,4 +1,4 @@ -/* Definitions for Motorola m68k running Linux +/* Definitions for Motorola m68k running Linux-based GNU systems. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -50,7 +50,7 @@ Boston, MA 02111-1307, USA. */ #undef LIB_SPEC #if 1 /* We no longer link with libc_p.a or libg.a by default. If you want - to profile or debug the Linux C library, please add -lc_p or -ggdb + to profile or debug the GNU/Linux C library, please add -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #define LIB_SPEC \ "%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}" diff --git a/gcc/config/m68k/linux.h b/gcc/config/m68k/linux.h index 0ebc5f1ca71..9f2399da1e1 100644 --- a/gcc/config/m68k/linux.h +++ b/gcc/config/m68k/linux.h @@ -1,4 +1,5 @@ -/* Definitions for Motorola 68k running Linux with ELF format. +/* Definitions for Motorola 68k running Linux-based GNU systems with + ELF format. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -26,7 +27,7 @@ Boston, MA 02111-1307, USA. */ #include /* some common stuff */ #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (68k Linux/ELF)"); +#define TARGET_VERSION fprintf (stderr, " (68k GNU/Linux with ELF)"); /* 68020 with 68881 */ #define TARGET_DEFAULT (MASK_BITFIELD|MASK_68881|MASK_68020) @@ -131,7 +132,7 @@ Boston, MA 02111-1307, USA. */ "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ %{m68040} %{m68060:-m68040}" -/* Provide a LINK_SPEC appropriate for Linux. Here we provide support +/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate combinations of options at link-time. We like to support here for diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c index c332065685e..5f932f0121f 100644 --- a/gcc/config/m68k/m68k.c +++ b/gcc/config/m68k/m68k.c @@ -31,7 +31,7 @@ Boston, MA 02111-1307, USA. */ #include "insn-flags.h" #include "output.h" #include "insn-attr.h" -#include "dwarf2.h" +#include "tree.h" /* Needed for use_return_insn. */ #include "flags.h" @@ -1312,6 +1312,8 @@ legitimize_pic_address (orig, mode, reg) gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig)); current_function_uses_pic_offset_table = 1; + if (reload_in_progress) + regs_ever_live[PIC_OFFSET_TABLE_REGNUM] = 1; RTX_UNCHANGING_P (pic_ref) = 1; emit_move_insn (reg, pic_ref); return reg; diff --git a/gcc/config/m68k/m68k.h b/gcc/config/m68k/m68k.h index e391ee8c82a..486ca781408 100644 --- a/gcc/config/m68k/m68k.h +++ b/gcc/config/m68k/m68k.h @@ -277,8 +277,8 @@ extern int target_flags; /* No data type wants to be aligned rounder than this. Most published ABIs say that ints should be aligned on 16 bit - boundries, but cpus with 32 bit busses get better performance - aligned on 32 bit boundries. Coldfires without a misalignment + boundaries, but cpus with 32 bit busses get better performance + aligned on 32 bit boundaries. Coldfires without a misalignment module require 32 bit alignment. */ #define BIGGEST_ALIGNMENT (TARGET_ALIGN_INT ? 32 : 16) @@ -375,7 +375,7 @@ extern int target_flags; and are not available for the register allocator. On the 68000, only the stack pointer is such. */ -/* fpa0 is also reserved so that it can be used to move shit back and +/* fpa0 is also reserved so that it can be used to move data back and forth between high fpa regs and everything else. */ #define FIXED_REGISTERS \ diff --git a/gcc/config/m68k/m68k.md b/gcc/config/m68k/m68k.md index f5d59bfc9b8..ddcac6555be 100644 --- a/gcc/config/m68k/m68k.md +++ b/gcc/config/m68k/m68k.md @@ -749,12 +749,27 @@ ;; Recognizers for btst instructions. +;; Coldfire/5200 only allows "" type addresses when the bit position is +;; specified as a constant, so we must disable all patterns that may extract +;; from a MEM at a constant bit position if we can't use this as a constraint. + (define_insn "" [(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "o") (const_int 1) (minus:SI (const_int 7) (match_operand:SI 1 "general_operand" "di"))))] - "" + "!TARGET_5200" + "* { return output_btst (operands, operands[1], operands[0], insn, 7); }") + +;; This is the same as the above pattern except for the constraints. The 'i' +;; has been deleted. + +(define_insn "" + [(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "o") + (const_int 1) + (minus:SI (const_int 7) + (match_operand:SI 1 "general_operand" "d"))))] + "TARGET_5200" "* { return output_btst (operands, operands[1], operands[0], insn, 7); }") (define_insn "" @@ -795,7 +810,7 @@ [(set (cc0) (zero_extract (match_operand:QI 0 "memory_operand" "m") (const_int 1) (match_operand:SI 1 "const_int_operand" "n")))] - "(unsigned) INTVAL (operands[1]) < 8" + "(unsigned) INTVAL (operands[1]) < 8 && !TARGET_5200" "* { operands[1] = gen_rtx (CONST_INT, VOIDmode, 7 - INTVAL (operands[1])); @@ -806,7 +821,30 @@ [(set (cc0) (zero_extract (match_operand:SI 0 "register_operand" "do") (const_int 1) (match_operand:SI 1 "const_int_operand" "n")))] - "" + "!TARGET_5200" + "* +{ + if (GET_CODE (operands[0]) == MEM) + { + operands[0] = adj_offsettable_operand (operands[0], + INTVAL (operands[1]) / 8); + operands[1] = gen_rtx (CONST_INT, VOIDmode, + 7 - INTVAL (operands[1]) % 8); + return output_btst (operands, operands[1], operands[0], insn, 7); + } + operands[1] = gen_rtx (CONST_INT, VOIDmode, + 31 - INTVAL (operands[1])); + return output_btst (operands, operands[1], operands[0], insn, 31); +}") + +;; This is the same as the above pattern except for the constraints. +;; The 'o' has been replaced with 'Q'. + +(define_insn "" + [(set (cc0) (zero_extract (match_operand:SI 0 "register_operand" "dQ") + (const_int 1) + (match_operand:SI 1 "const_int_operand" "n")))] + "TARGET_5200" "* { if (GET_CODE (operands[0]) == MEM) diff --git a/gcc/config/m68k/mot3300.h b/gcc/config/m68k/mot3300.h index cc7c6c7589d..f7d35847b26 100644 --- a/gcc/config/m68k/mot3300.h +++ b/gcc/config/m68k/mot3300.h @@ -184,6 +184,9 @@ Boston, MA 02111-1307, USA. */ #undef ASCII_DATA_ASM_OP #define ASCII_DATA_ASM_OP "byte" +#undef SET_ASM_OP +#define SET_ASM_OP "set" + #endif /* USE_GAS */ #ifdef USE_GLD diff --git a/gcc/config/m68k/rtems.h b/gcc/config/m68k/rtems.h index 74723466c30..77c02f8e9c8 100644 --- a/gcc/config/m68k/rtems.h +++ b/gcc/config/m68k/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting a Motorola m68k using coff. +/* Definitions for rtems targeting a Motorola m68k using coff. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/m68k/sun2o4.h b/gcc/config/m68k/sun2o4.h index 6f1ae7a7a6c..da722cfa6ec 100644 --- a/gcc/config/m68k/sun2o4.h +++ b/gcc/config/m68k/sun2o4.h @@ -1,5 +1,5 @@ -/* Definitions of target machine for GNU compiler. Sun 2 running Sunos 4. - Copyright (C) 1987, 1988, 1993, 1996 Free Software Foundation, Inc. +/* Definitions of target machine for GNU compiler. Sun 2 running SunOS 4. + Copyright (C) 1987, 1988, 1993, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. diff --git a/gcc/config/m68k/sun3mach.h b/gcc/config/m68k/sun3mach.h index 86c48d0f7c3..1c76cc4b828 100644 --- a/gcc/config/m68k/sun3mach.h +++ b/gcc/config/m68k/sun3mach.h @@ -6,7 +6,7 @@ /* Specify extra dir to search for include files. */ #define SYSTEM_INCLUDE_DIR "/usr/mach/include" -/* LINK_SPEC is needed only for Sunos 4. */ +/* LINK_SPEC is needed only for SunOS 4. */ #undef LINK_SPEC diff --git a/gcc/config/m68k/sun3n3.h b/gcc/config/m68k/sun3n3.h index 1c962bd68b8..38680d805e2 100644 --- a/gcc/config/m68k/sun3n3.h +++ b/gcc/config/m68k/sun3n3.h @@ -1,5 +1,5 @@ #include "m68k/sun3n.h" -/* LINK_SPEC is needed only for Sunos 4. */ +/* LINK_SPEC is needed only for SunOS 4. */ #undef LINK_SPEC diff --git a/gcc/config/m68k/sun3o3.h b/gcc/config/m68k/sun3o3.h index 4d3e3dd2584..95f1ff65d03 100644 --- a/gcc/config/m68k/sun3o3.h +++ b/gcc/config/m68k/sun3o3.h @@ -1,5 +1,5 @@ #include "m68k/sun3.h" -/* LINK_SPEC is needed only for Sunos 4. */ +/* LINK_SPEC is needed only for SunOS 4. */ #undef LINK_SPEC diff --git a/gcc/config/m68k/t-linux b/gcc/config/m68k/t-linux index 169661f6296..b60654d3895 100644 --- a/gcc/config/m68k/t-linux +++ b/gcc/config/m68k/t-linux @@ -3,7 +3,7 @@ STMP_FIXPROTO = # Don't make libgcc1.a LIBGCC1 = CROSS_LIBGCC1 = -# On Linux we can print long double +# On GNU/Linux we can print long double ENQUIRE_CFLAGS = -DNO_MEM -O0 # Don't install assert.h INSTALL_ASSERT_H = diff --git a/gcc/config/m68k/t-linux-aout b/gcc/config/m68k/t-linux-aout index 85f13a7f1ed..4ef9e1acaed 100644 --- a/gcc/config/m68k/t-linux-aout +++ b/gcc/config/m68k/t-linux-aout @@ -1,5 +1,5 @@ # Don't make libgcc1.a LIBGCC1 = CROSS_LIBGCC1 = -# On Linux we can print long double +# On GNU/Linux we can print long double ENQUIRE_CFLAGS = -DNO_MEM -O0 diff --git a/gcc/config/m68k/xm-3b1.h b/gcc/config/m68k/xm-3b1.h index 9d6ad5412a3..c966bc16309 100644 --- a/gcc/config/m68k/xm-3b1.h +++ b/gcc/config/m68k/xm-3b1.h @@ -2,12 +2,6 @@ #include "m68k/xm-m68k.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) -#define index strchr -#define rindex strrchr - /* Override part of the obstack macros. */ #define __PTR_TO_INT(P) ((int)(P)) diff --git a/gcc/config/m68k/xm-altos3068.h b/gcc/config/m68k/xm-altos3068.h index 294f5645b5e..f540924d328 100644 --- a/gcc/config/m68k/xm-altos3068.h +++ b/gcc/config/m68k/xm-altos3068.h @@ -1,7 +1,3 @@ #define USG #include "m68k/xm-m68k.h" - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) diff --git a/gcc/config/m68k/xm-amix.h b/gcc/config/m68k/xm-amix.h index 69b4bd17c74..c28ed787cad 100644 --- a/gcc/config/m68k/xm-amix.h +++ b/gcc/config/m68k/xm-amix.h @@ -1,7 +1,6 @@ /* Definitions of host machine for GNU compiler. Commodore Amiga A3000UX version. - - Copyright (C) 1991 Free Software Foundation, Inc. + Copyright (C) 1991, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -22,7 +21,6 @@ Boston, MA 02111-1307, USA. */ #include "m68k/xm-m68kv.h" /* Use the System V flavor of m68k host */ -#define HAVE_VPRINTF /* Host has vprintf() in library */ #define rindex strrchr #define index strchr diff --git a/gcc/config/m68k/xm-atari.h b/gcc/config/m68k/xm-atari.h index a28a98606ef..323d89052c0 100644 --- a/gcc/config/m68k/xm-atari.h +++ b/gcc/config/m68k/xm-atari.h @@ -1,6 +1,6 @@ /* Definitions of host machine for GNU compiler. Atari TT ASV version. - Copyright (C) 1994, 1995 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc. This file is part of GNU CC. diff --git a/gcc/config/m68k/xm-crds.h b/gcc/config/m68k/xm-crds.h index 3bd3461ce10..80925dc8714 100644 --- a/gcc/config/m68k/xm-crds.h +++ b/gcc/config/m68k/xm-crds.h @@ -6,13 +6,6 @@ #include "m68k/xm-m68k.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -/* UNOS has vprintf() */ -#define HAVE_VPRINTF - /* Avoid conflict with C library by changing name of this symbol. */ #define gettime gcc_gettime diff --git a/gcc/config/m68k/xm-hp320.h b/gcc/config/m68k/xm-hp320.h index d724c3a26c8..f3009a6db5a 100644 --- a/gcc/config/m68k/xm-hp320.h +++ b/gcc/config/m68k/xm-hp320.h @@ -3,12 +3,6 @@ #include "m68k/xm-m68k.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) -#define rindex strrchr -#define index strchr - /* If compiling with HPUX compiler, we are probably using alloca.c, so help it work right. */ #ifndef __GNUC__ diff --git a/gcc/config/m68k/xm-linux.h b/gcc/config/m68k/xm-linux.h index 3b1050673fa..bfac3ae4ef6 100644 --- a/gcc/config/m68k/xm-linux.h +++ b/gcc/config/m68k/xm-linux.h @@ -1,4 +1,4 @@ -/* Configuration for GCC for Motorola m68k running Linux. */ +/* Configuration for GCC for Motorola m68k running Linux-based GNU systems. */ #include #include diff --git a/gcc/config/m68k/xm-m68kv.h b/gcc/config/m68k/xm-m68kv.h index ce3cf665e81..d0931f03890 100644 --- a/gcc/config/m68k/xm-m68kv.h +++ b/gcc/config/m68k/xm-m68kv.h @@ -3,12 +3,6 @@ #include "m68k/xm-m68k.h" #define USG -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define rindex strrchr -#define index strchr #ifndef __GNUC__ #define USE_C_ALLOCA diff --git a/gcc/config/m68k/xm-mot3300.h b/gcc/config/m68k/xm-mot3300.h index 0c1ec676115..8f4c0a46bf9 100644 --- a/gcc/config/m68k/xm-mot3300.h +++ b/gcc/config/m68k/xm-mot3300.h @@ -1,6 +1,6 @@ /* Configuration for GNU C-compiler for Motorola 68000 family. SysV68 Motorola 3300 Delta Series - Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -24,13 +24,6 @@ Boston, MA 02111-1307, USA. */ #include "m68k/xm-m68k.h" -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define rindex strrchr -#define index strchr - #define NO_SYS_SIGLIST /* do not use alloca from -lPW with cc, because function epilogues use %sp */ diff --git a/gcc/config/m68k/xm-plexus.h b/gcc/config/m68k/xm-plexus.h index 6d191ceed26..fbc9a32846e 100644 --- a/gcc/config/m68k/xm-plexus.h +++ b/gcc/config/m68k/xm-plexus.h @@ -3,13 +3,6 @@ #include "m68k/xm-m68k.h" #define USG -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define rindex strrchr -#define index strchr - #ifndef __GNUC__ #define USE_C_ALLOCA #endif diff --git a/gcc/config/m88k/dgux.h b/gcc/config/m88k/dgux.h index 6a3c41020bc..3b94f4acfa7 100644 --- a/gcc/config/m88k/dgux.h +++ b/gcc/config/m88k/dgux.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. Motorola m88100 running DG/UX. - Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@mcc.com) Currently maintained by (gcc@dg-rtp.dg.com) @@ -30,7 +30,7 @@ Boston, MA 02111-1307, USA. */ (TARGET_SVR4 ? DWARF_DEBUG : SDB_DEBUG) #ifndef VERSION_INFO2 -#define VERSION_INFO2 "$Revision: 1.24 $" +#define VERSION_INFO2 "$Revision: 1.25 $" #endif #ifndef NO_BUGS #define AS_BUG_IMMEDIATE_LABEL @@ -134,16 +134,18 @@ Boston, MA 02111-1307, USA. */ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "startfile_crtbegin", STARTFILE_CRTBEGIN_SPEC } +/* Keep this left justified, no white space is allowed between + the arguments to the -Wc option */ #define ASM_CPU_SPEC "\ - %{v:-V}\ - %{g:\ - %{mno-legend:-Wc,off}\ - %{!mno-legend:-Wc,-fix-bb,-s\"%i\"\ - %{traditional:,-lc}\ - %{!traditional:,-lansi-c}\ - %{mstandard:,-keep-std}\ - %{mexternal-legend:,-external}\ - %{mocs-frame-position:,-ocs}}}" +%{v:-V} \ +%{g:\ +%{mno-legend:-Wc,off}\ +%{!mno-legend:-Wc,-fix-bb,-s\"%i\"\ +%{traditional:,-lc}\ +%{!traditional:,-lansi-c}\ +%{mstandard:,-keep-std}\ +%{mexternal-legend:,-external}\ +%{mocs-frame-position:,-ocs}}}" #define CPP_CPU_SPEC "\ %{!m88000:%{!m88100:%{m88110:-D__m88110__}}} \ diff --git a/gcc/config/m88k/luna.h b/gcc/config/m88k/luna.h index 677afcdae56..ab6dbded109 100644 --- a/gcc/config/m88k/luna.h +++ b/gcc/config/m88k/luna.h @@ -1,7 +1,7 @@ /* Definitions of target machine for GNU compiler. Motorola m88100 running Omron Luna/88k. - Copyright (C) 1991 Free Software Foundation, Inc. - Contributed by Jeffery Friedl (jfriedl@omron.co.jp) + Copyright (C) 1991, 1997 Free Software Foundation, Inc. + Contributed by Jeffrey Friedl (jfriedl@omron.co.jp) This file is part of GNU CC. diff --git a/gcc/config/m88k/m88k.c b/gcc/config/m88k/m88k.c index 480875778b5..5475b5775c7 100644 --- a/gcc/config/m88k/m88k.c +++ b/gcc/config/m88k/m88k.c @@ -2650,13 +2650,15 @@ m88k_builtin_saveregs (arglist) emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, block, ptr_mode, GEN_INT (3 * UNITS_PER_WORD), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); if (fixed < 8) emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, ptr_mode, GEN_INT (UNITS_PER_WORD * (8 - fixed)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); } /* Return the address of the va_list constructor, but don't put it in a diff --git a/gcc/config/m88k/m88k.h b/gcc/config/m88k/m88k.h index 7fc8ed98793..e17d7537839 100644 --- a/gcc/config/m88k/m88k.h +++ b/gcc/config/m88k/m88k.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler for Motorola m88100 in an 88open OCS/BCS environment. - Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). Currently maintained by (gcc@dg-rtp.dg.com) @@ -198,13 +198,13 @@ extern char * reg_names[]; Redefined in sysv4.h, and luna.h. */ #define VERSION_INFO1 "m88k, " #ifndef VERSION_INFO2 -#define VERSION_INFO2 "$Revision: 1.1 $" +#define VERSION_INFO2 "$Revision: 1.74 $" #endif #ifndef VERSION_STRING #define VERSION_STRING version_string #ifdef __STDC__ -#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.1 $ " __DATE__ +#define TM_RCS_ID "@(#)" __FILE__ " $Revision: 1.74 $ " __DATE__ #else #define TM_RCS_ID "$What: <@(#) m88k.h,v 1.1.1.2.2.2> $" #endif /* __STDC__ */ @@ -1547,6 +1547,7 @@ enum reg_class { NO_REGS, AP_REG, XRF_REGS, GENERAL_REGS, AGRF_REGS, /* Tell when to handle #pragma weak. This is only done for V.4. */ #define SUPPORTS_WEAK TARGET_SVR4 +#define SUPPORTS_ONE_ONLY TARGET_SVR4 /* Max number of bytes we can move from memory to memory in one reasonably fast instruction. */ diff --git a/gcc/config/m88k/xm-m88k.h b/gcc/config/m88k/xm-m88k.h index aff8e5fa106..b330f5980fc 100644 --- a/gcc/config/m88k/xm-m88k.h +++ b/gcc/config/m88k/xm-m88k.h @@ -1,6 +1,6 @@ /* Configuration for GNU compiler. Motorola m88100 in an 88open OCS/BCS environment. - Copyright (C) 1988, 1989, 1990, 1991, 1993 Free Software Foundation, Inc. + Copyright (C) 1988, 89, 90, 91, 93, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -37,14 +37,6 @@ Boston, MA 02111-1307, USA. */ #define SUCCESS_EXIT_CODE 0 #define FATAL_EXIT_CODE 33 -/* Use System V memory functions. */ -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define rindex strrchr -#define index strchr - /* The 88open BCS (and ABI) environment doesn't support BSD features (vfork, getrusage), so use USG. The Omron Luna/88k is BSD though. */ #ifndef luna88k @@ -54,9 +46,6 @@ Boston, MA 02111-1307, USA. */ #define NO_SYS_SIGLIST #endif -/* Define HAVE_VPRINTF if it is available on host system. */ -#define HAVE_VPRINTF - /* If not compiled with GNU C, use the C alloca */ #ifndef __GNUC__ #define USE_C_ALLOCA diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index e66481f30e9..5bc733cb427 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler. Iris version 6. - Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -140,7 +140,7 @@ Boston, MA 02111-1307, USA. */ } while (0) /* Tell function_prologue in mips.c that we have already output the .ent/.end - psuedo-ops. */ + pseudo-ops. */ #define FUNCTION_NAME_ALREADY_DECLARED #undef SET_ASM_OP /* Has no equivalent. See ASM_OUTPUT_DEF below. */ diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 85164356d88..78639d46bf7 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -3687,7 +3687,7 @@ override_options () } /* This optimization requires a linker that can support a R_MIPS_LO16 - relocation which is not immediately preceeded by a R_MIPS_HI16 relocation. + relocation which is not immediately preceded by a R_MIPS_HI16 relocation. GNU ld has this support, but not all other MIPS linkers do, so we enable this optimization only if the user requests it, or if GNU ld is the standard linker for this configuration. */ @@ -5011,9 +5011,32 @@ save_restore_insns (store_p, large_reg, large_offset, file) base_offset = gp_offset; if (file == (FILE *)0) { - insn = emit_move_insn (base_reg_rtx, GEN_INT (gp_offset)); - if (store_p) - RTX_FRAME_RELATED_P (insn) = 1; + rtx gp_offset_rtx = GEN_INT (gp_offset); + + /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P + bit, so make sure that we don't emit anything that can be + split. */ + /* ??? There is no DImode ori immediate pattern, so we can only + do this for 32 bit code. */ + if (large_int (gp_offset_rtx) + && GET_MODE (base_reg_rtx) == SImode) + { + insn = emit_move_insn (base_reg_rtx, + GEN_INT (gp_offset & 0xffff0000)); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx, + GEN_INT (gp_offset & 0x0000ffff))); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + } + else + { + insn = emit_move_insn (base_reg_rtx, gp_offset_rtx); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + } + if (TARGET_LONG64) insn = emit_insn (gen_adddi3 (base_reg_rtx, base_reg_rtx, stack_pointer_rtx)); else @@ -5131,7 +5154,32 @@ save_restore_insns (store_p, large_reg, large_offset, file) base_offset = fp_offset; if (file == (FILE *)0) { - insn = emit_move_insn (base_reg_rtx, GEN_INT (fp_offset)); + rtx fp_offset_rtx = GEN_INT (fp_offset); + + /* Instruction splitting doesn't preserve the RTX_FRAME_RELATED_P + bit, so make sure that we don't emit anything that can be + split. */ + /* ??? There is no DImode ori immediate pattern, so we can only + do this for 32 bit code. */ + if (large_int (fp_offset_rtx) + && GET_MODE (base_reg_rtx) == SImode) + { + insn = emit_move_insn (base_reg_rtx, + GEN_INT (fp_offset & 0xffff0000)); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + insn = emit_insn (gen_iorsi3 (base_reg_rtx, base_reg_rtx, + GEN_INT (fp_offset & 0x0000ffff))); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + } + else + { + insn = emit_move_insn (base_reg_rtx, fp_offset_rtx); + if (store_p) + RTX_FRAME_RELATED_P (insn) = 1; + } + if (store_p) RTX_FRAME_RELATED_P (insn) = 1; if (TARGET_LONG64) @@ -5591,6 +5639,13 @@ mips_expand_epilogue () else emit_insn (gen_movsi (stack_pointer_rtx, frame_pointer_rtx)); } + /* The GP/PIC register is implicitly used by all SYMBOL_REFs, so if we + are going to restore it, then we must emit a blockage insn to + prevent the scheduler from moving the restore out of the epilogue. */ + else if (TARGET_ABICALLS && mips_abi != ABI_32 + && (current_frame_info.mask + & (1L << (PIC_OFFSET_TABLE_REGNUM - GP_REG_FIRST)))) + emit_insn (gen_blockage ()); save_restore_insns (FALSE, tmp_rtx, tsize, (FILE *)0); diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index be5b8527cea..348a4250b55 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -1448,7 +1448,7 @@ do { \ On the MIPS, all general registers are one word long. Except on the R4000 with the FR bit set, the floating point uses register - pairs, with the second register not being allocatable. */ + pairs, with the second register not being allocable. */ #define HARD_REGNO_NREGS(REGNO, MODE) \ (! FP_REG_P (REGNO) \ diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 3e4382f5d2e..1a3e2ce22ce 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -255,7 +255,7 @@ (and (eq_attr "mode" "DI") (eq_attr "cpu" "r5000"))) 68 68) -;; The R4300 does *NOT* have a seperate Floating Point Unit, instead +;; The R4300 does *NOT* have a separate Floating Point Unit, instead ;; the FP hardware is part of the normal ALU circuitry. This means FP ;; instructions affect the pipe-line, and no functional unit ;; parallelism can occur on R4300 processors. To force GCC into coding @@ -2765,11 +2765,17 @@ move\\t%0,%z4\\n\\ ;; operand zero, because then the address in the move instruction will be ;; clobbered. We mark the scratch register as early clobbered to prevent this. +;; We need the ?X in alternative 1 so that it will be choosen only if the +;; destination is a floating point register. Otherwise, alternative 1 can +;; have lower cost than alternative 0 (because there is one less loser), and +;; can be choosen when it won't work (because integral reloads into FP +;; registers are not supported). + (define_insn "fix_truncdfsi2" [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o") (fix:SI (match_operand:DF 1 "register_operand" "f,*f,f,f"))) (clobber (match_scratch:SI 2 "=d,*d,&d,&d")) - (clobber (match_scratch:DF 3 "=f,*X,f,f"))] + (clobber (match_scratch:DF 3 "=f,?*X,f,f"))] "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT" "* { @@ -2794,7 +2800,7 @@ move\\t%0,%z4\\n\\ [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o") (fix:SI (match_operand:SF 1 "register_operand" "f,*f,f,f"))) (clobber (match_scratch:SI 2 "=d,*d,&d,&d")) - (clobber (match_scratch:SF 3 "=f,*X,f,f"))] + (clobber (match_scratch:SF 3 "=f,?*X,f,f"))] "TARGET_HARD_FLOAT" "* { @@ -2827,7 +2833,7 @@ move\\t%0,%z4\\n\\ (define_insn "fix_truncdfdi2" [(set (match_operand:DI 0 "general_operand" "=d,*f,R,o") (fix:DI (match_operand:DF 1 "register_operand" "f,*f,f,f"))) - (clobber (match_scratch:DF 2 "=f,*X,f,f"))] + (clobber (match_scratch:DF 2 "=f,?*X,f,f"))] "TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT" "* { @@ -2854,7 +2860,7 @@ move\\t%0,%z4\\n\\ (define_insn "fix_truncsfdi2" [(set (match_operand:DI 0 "general_operand" "=d,*f,R,o") (fix:DI (match_operand:SF 1 "register_operand" "f,*f,f,f"))) - (clobber (match_scratch:DF 2 "=f,*X,f,f"))] + (clobber (match_scratch:DF 2 "=f,?*X,f,f"))] "TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT" "* { @@ -3152,6 +3158,9 @@ move\\t%0,%z4\\n\\ if (GET_CODE (operands[1]) != MEM) FAIL; + /* Change the mode to BLKmode for aliasing purposes. */ + operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0)); + /* Otherwise, emit a lwl/lwr pair to load the value. */ emit_insn (gen_movsi_ulw (operands[0], operands[1])); DONE; @@ -3176,6 +3185,9 @@ move\\t%0,%z4\\n\\ if (GET_CODE (operands[1]) != MEM) FAIL; + /* Change the mode to BLKmode for aliasing purposes. */ + operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0)); + /* Otherwise, emit a lwl/lwr pair to load the value. */ emit_insn (gen_movsi_ulw (operands[0], operands[1])); DONE; @@ -3200,6 +3212,9 @@ move\\t%0,%z4\\n\\ if (GET_CODE (operands[0]) != MEM) FAIL; + /* Change the mode to BLKmode for aliasing purposes. */ + operands[0] = change_address (operands[0], BLKmode, XEXP (operands[0], 0)); + /* Otherwise, emit a swl/swr pair to load the value. */ emit_insn (gen_movsi_usw (operands[0], operands[3])); DONE; @@ -3209,7 +3224,7 @@ move\\t%0,%z4\\n\\ (define_insn "movsi_ulw" [(set (match_operand:SI 0 "register_operand" "=&d,&d") - (unspec:SI [(match_operand:QI 1 "general_operand" "R,o")] 0))] + (unspec:SI [(match_operand:BLK 1 "general_operand" "R,o")] 0))] "" "* { @@ -3237,8 +3252,8 @@ move\\t%0,%z4\\n\\ (set_attr "length" "2,4")]) (define_insn "movsi_usw" - [(set (match_operand:QI 0 "memory_operand" "=R,o") - (unspec:QI [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 1))] + [(set (match_operand:BLK 0 "memory_operand" "=R,o") + (unspec:BLK [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 1))] "" "* { diff --git a/gcc/config/mips/rtems64.h b/gcc/config/mips/rtems64.h index dd21562a47e..6433ed56498 100644 --- a/gcc/config/mips/rtems64.h +++ b/gcc/config/mips/rtems64.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting a MIPS ORION using ecoff. +/* Definitions for rtems targeting a MIPS ORION using ecoff. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/mips/x-iris b/gcc/config/mips/x-iris index 3d49e4c7467..0f04f099f16 100644 --- a/gcc/config/mips/x-iris +++ b/gcc/config/mips/x-iris @@ -9,9 +9,11 @@ # can use -O2. Down with fixed size tables! # The -cckr is to turn off strict ANSI checking. -CC = $(OLDCC) -OPT = -O1 -OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 -cckr $(OPT) +# These definitions are commented out because they cause trouble with +# autoconf. It is believed that they aren't needed anymore. +#CC = $(OLDCC) +#OPT = -O1 +#OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 -cckr $(OPT) # The bison output files are machine-indep, # so different flags for a particular machine are not useful. diff --git a/gcc/config/mips/x-iris3 b/gcc/config/mips/x-iris3 index d4b55dde20a..2743ab743d9 100644 --- a/gcc/config/mips/x-iris3 +++ b/gcc/config/mips/x-iris3 @@ -12,9 +12,11 @@ # the -cckr option, so, lets try without it for all versions of Irix 3.x. # The -cckr is to turn off strict ANSI checking. -CC = $(OLDCC) -OPT = -O1 -OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 $(OPT) +# These definitions are commented out because they cause trouble with +# autoconf. It is believed that they aren't needed anymore. +#CC = $(OLDCC) +#OPT = -O1 +#OLDCC = cc -Wf,-XNh2000,-XNg1500 -Olimit 3000 $(OPT) # The bison output files are machine-indep, # so different flags for a particular machine are not useful. diff --git a/gcc/config/mips/xm-iris3.h b/gcc/config/mips/xm-iris3.h index 3d2a59a1447..448b7ac80bb 100644 --- a/gcc/config/mips/xm-iris3.h +++ b/gcc/config/mips/xm-iris3.h @@ -1,8 +1,3 @@ #include "mips/xm-mips.h" #define USG - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - diff --git a/gcc/config/mips/xm-iris4.h b/gcc/config/mips/xm-iris4.h index e12c226614e..c01d3f48a78 100644 --- a/gcc/config/mips/xm-iris4.h +++ b/gcc/config/mips/xm-iris4.h @@ -1,11 +1,6 @@ #include "mips/xm-mips.h" #define USG -#define HAVE_VPRINTF - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) #if 0 #ifdef __GNUC__ diff --git a/gcc/config/mips/xm-iris5.h b/gcc/config/mips/xm-iris5.h index 72387b29ccc..448b7ac80bb 100644 --- a/gcc/config/mips/xm-iris5.h +++ b/gcc/config/mips/xm-iris5.h @@ -1,9 +1,3 @@ #include "mips/xm-mips.h" #define USG -#define HAVE_VPRINTF - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - diff --git a/gcc/config/mips/xm-iris6.h b/gcc/config/mips/xm-iris6.h index ed7dd316b5b..4d429c72edc 100644 --- a/gcc/config/mips/xm-iris6.h +++ b/gcc/config/mips/xm-iris6.h @@ -5,17 +5,13 @@ extern void *alloca (); #endif -#include "mips/xm-iris5.h" +#include "mips/xm-mips.h" + +#define USG #undef HOST_BITS_PER_LONG #define HOST_BITS_PER_LONG _MIPS_SZLONG -/* Declare some functions needed for this machine. We don't want to - include these in the sources since other machines might define them - differently. */ - -extern void *malloc (), *realloc (), *calloc (); - #ifndef inhibit_libc #include "string.h" #endif diff --git a/gcc/config/mips/xm-mips.h b/gcc/config/mips/xm-mips.h index d8eb4b59021..e10f78e5fca 100644 --- a/gcc/config/mips/xm-mips.h +++ b/gcc/config/mips/xm-mips.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for MIPS Rx000 family - Copyright (C) 1989, 1990, 1991, 1993 Free Software Foundation, Inc. + Copyright (C) 1989, 1990, 1991, 1993, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -77,8 +77,6 @@ extern char * alloca (); /* Say if we have vprintf. BSD Mips targets probably don't have vfprintf. */ #if defined(__OSF1__) || defined(__OSF__) || defined(__osf__) || defined(bsd4_4) -#define HAVE_VPRINTF -#define HAVE_PUTENV #else #define NO_STAB_H /* mips doesn't typically have stab.h */ diff --git a/gcc/config/mips/xm-sysv.h b/gcc/config/mips/xm-sysv.h index 170538fb682..05a8d6c1154 100644 --- a/gcc/config/mips/xm-sysv.h +++ b/gcc/config/mips/xm-sysv.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for UMIPS operating system - Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc. + Copyright (C) 1989, 1990, 1991, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -28,11 +28,3 @@ Boston, MA 02111-1307, USA. */ #define USG #include "mips/xm-mips.h" - -#define bcopy(a,b,c) memcpy((b),(a),(c)) -#define bzero(a,b) memset((a),0,(b)) -#define bcmp(a,b,c) memcmp((a),(b),(c)) - -#define rindex strrchr -#define index strchr - diff --git a/gcc/config/mn10200/mn10200.c b/gcc/config/mn10200/mn10200.c index 3f113d0e301..5435f773c8d 100644 --- a/gcc/config/mn10200/mn10200.c +++ b/gcc/config/mn10200/mn10200.c @@ -611,12 +611,12 @@ expand_prologue () if (!regs_ever_live[5]) { regs_ever_live[5] = 1; - zero_dreg = gen_rtx (REG, HImode, 5); + zero_areg = gen_rtx (REG, HImode, 5); } if (!regs_ever_live[6]) { regs_ever_live[6] = 1; - zero_dreg = gen_rtx (REG, HImode, 6); + zero_areg = gen_rtx (REG, HImode, 6); } } @@ -864,16 +864,6 @@ call_address_operand (op, mode) return (GET_CODE (op) == SYMBOL_REF || GET_CODE (op) == REG); } -/* Return true if OP is an indirect memory operand, the "bset" and "bclr" - insns use this predicate. */ -int -indirect_memory_operand (op, mode) - rtx op; - enum machine_mode mode; -{ - return (GET_CODE (op) == MEM && GET_CODE (XEXP (op, 0)) == REG); -} - /* Return true if OP is a memory operand with a constant address. A special PSImode move pattern uses this predicate. */ int @@ -906,7 +896,7 @@ secondary_reload_class (class, mode, in, input) && class == ADDRESS_REGS) return DATA_REGS; - /* Address register stores which are not PSImode need a scrach register. */ + /* Address register stores which are not PSImode need a scratch register. */ if (! input && GET_CODE (in) == MEM && (mode != PSImode) diff --git a/gcc/config/mn10200/mn10200.h b/gcc/config/mn10200/mn10200.h index 8db6901c2c8..7eb26dd7c0d 100644 --- a/gcc/config/mn10200/mn10200.h +++ b/gcc/config/mn10200/mn10200.h @@ -1,5 +1,4 @@ -/* Definitions of target machine for GNU compiler. - Matsushita MN10200 series +/* Definitions of target machine for GNU compiler. Matsushita MN10200 series Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Jeff Law (law@cygnus.com). @@ -614,10 +613,15 @@ extern struct rtx_def *function_arg(); #define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) /* Extra constraints. */ +#define OK_FOR_R(OP) \ + (GET_CODE (OP) == MEM \ + && GET_MODE (OP) == QImode \ + && REG_P (XEXP (OP, 0))) /* Q is used for sp + in the {zero,sign}_extendpsisi2 patterns. */ #define EXTRA_CONSTRAINT(OP, C) \ - ((C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \ + ((C) == 'R' ? OK_FOR_R (OP) : \ + (C) == 'S' ? GET_CODE (OP) == SYMBOL_REF : \ (C) == 'Q' ? GET_CODE (OP) == PLUS : 0) /* Maximum number of registers that can appear in a valid memory address. */ @@ -663,6 +667,11 @@ extern struct rtx_def *function_arg(); The MODE argument is the machine mode for the MEM expression that wants to use this address. + We used to allow reg+reg addresses for QImode and HImode; however, + they tended to cause the register allocator to run out of registers. + Basically, an indexed load/store always keeps 2 data and one address + register live, which is just too many for this machine. + The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS, except for CONSTANT_ADDRESS_P which is actually machine-independent. */ @@ -692,10 +701,6 @@ extern struct rtx_def *function_arg(); { \ if (GET_CODE (index) == CONST_INT) \ goto ADDR; \ - if (GET_CODE (index) == REG \ - && REG_OK_FOR_INDEX_P (index) \ - && GET_MODE_SIZE (MODE) <= word_mode) \ - goto ADDR; \ } \ } \ } @@ -948,7 +953,7 @@ do { char dstr[30]; \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) -/* We don't have to worry about dbx compatability for the mn10200. */ +/* We don't have to worry about dbx compatibility for the mn10200. */ #define DEFAULT_GDB_EXTENSIONS 1 /* Use stabs debugging info by default. */ diff --git a/gcc/config/mn10200/mn10200.md b/gcc/config/mn10200/mn10200.md index 90eac0e9e08..9dc753c3023 100644 --- a/gcc/config/mn10200/mn10200.md +++ b/gcc/config/mn10200/mn10200.md @@ -30,7 +30,7 @@ ;; none_0hit - insn does not affect cc but it does modify operand 0 ;; This attribute is used to keep track of when operand 0 changes. ;; See the description of NOTICE_UPDATE_CC for more info. -;; set_znv - sets z,n,v to useable values; c is unknown. +;; set_znv - sets z,n,v to usable values; c is unknown. ;; set_zn - sets z,n to usable values; v,c is unknown. ;; compare - compare instruction ;; clobber - value of cc is unknown @@ -497,13 +497,21 @@ ;; ;; We could do HImode negations with a "not;add" sequence, but ;; generally it's generated slightly worse code. +;; +;; The second alternative is not strictly necesasry, but helps +;; when the register allocators start running short of registers. (define_insn "neghi2" - [(set (match_operand:HI 0 "general_operand" "=&d") - (neg:HI (match_operand:HI 1 "general_operand" "d")))] + [(set (match_operand:HI 0 "general_operand" "=&d,d") + (neg:HI (match_operand:HI 1 "general_operand" "d,0")))] "" - "sub %0,%0\;sub %1,%0" + "@ + sub %0,%0\;sub %1,%0 + not %0\;add 1,%0" [(set_attr "cc" "set_zn")]) +;; The not/and sequence won't work here. It's not clear if we'll +;; ever need to provide an alternate sequence since this should +;; be used much less frequently than neghi2. (define_insn "negpsi2" [(set (match_operand:PSI 0 "general_operand" "=&d") (neg:PSI (match_operand:PSI 1 "general_operand" "d")))] @@ -642,54 +650,66 @@ ;; BIT INSTRUCTIONS ;; ----------------------------------------------------------------- -;; When clearing a set of bits in memory, we load the inverted bitmask into -;; a register, then use bclr. +;; These clears a constant set of bits in memory or in a register. +;; We must support register destinations to make reload happy. (define_insn "" - [(set (match_operand:QI 0 "indirect_memory_operand" "") + [(set (match_operand:QI 0 "general_operand" "R,d") (subreg:QI (and:HI (subreg:HI (match_dup 0) 0) (match_operand 1 "const_int_operand" "")) 0)) - (clobber (match_scratch:HI 2 "=&d"))] + (clobber (match_scratch:HI 2 "=&d,X"))] "" - "mov %N1,%2\;bclr %2,%0" + "@ + mov %N1,%2\;bclr %2,%0 + and %1,%0" [(set_attr "cc" "clobber")]) -;; These clear a non-constant set of bits in memory. +;; This clears a variable set of bits in memory or in a register. (define_insn "" - [(set (match_operand:QI 0 "indirect_memory_operand" "") + [(set (match_operand:QI 0 "general_operand" "R,d") (subreg:QI (and:HI (subreg:HI (match_dup 0) 0) - (not:HI (match_operand:HI 1 "general_operand" "d"))) 0))] + (not:HI (match_operand:HI 1 "general_operand" "d,d"))) 0)) + (clobber (match_scratch:HI 2 "=X,&d"))] "" - "bclr %1,%0" + "@ + bclr %1,%0 + mov %1,%2\;not %2\;and %2,%0" [(set_attr "cc" "clobber")]) (define_insn "" - [(set (match_operand:QI 0 "indirect_memory_operand" "") + [(set (match_operand:QI 0 "general_operand" "R,d") (subreg:QI - (and:HI (not:HI (match_operand:HI 1 "general_operand" "d")) - (subreg:HI (match_dup 0) 0)) 0))] + (and:HI (not:HI (match_operand:HI 1 "general_operand" "d,d")) + (subreg:HI (match_dup 0) 0)) 0)) + (clobber (match_scratch:HI 2 "=X,&d"))] "" - "bclr %1,%0" + "@ + bclr %1,%0 + mov %1,%2\;not %2\;and %2,%0" [(set_attr "cc" "clobber")]) ;; These set bits in memory. (define_insn "" - [(set (match_operand:QI 0 "indirect_memory_operand" "") + [(set (match_operand:QI 0 "general_operand" "R,d") (subreg:QI (ior:HI (subreg:HI (match_dup 0) 0) - (match_operand:HI 1 "general_operand" "d")) 0))] + (match_operand:HI 1 "general_operand" "d,d")) 0))] "" - "bset %1,%0" + "@ + bset %1,%0 + or %1,%0" [(set_attr "cc" "clobber")]) (define_insn "" - [(set (match_operand:QI 0 "indirect_memory_operand" "") + [(set (match_operand:QI 0 "general_operand" "R,d") (subreg:QI - (ior:HI (match_operand:HI 1 "general_operand" "d") + (ior:HI (match_operand:HI 1 "general_operand" "d,d") (subreg:HI (match_dup 0) 0)) 0))] "" - "bset %1,%0" + "@ + bset %1,%0 + or %1,%0" [(set_attr "cc" "clobber")]) ;; Not any shorter/faster than using cmp, but it might save a @@ -1688,7 +1708,7 @@ ;; a few times, then truncating the value to PSImode. ;; ;; This first pattern combines the shifting & truncation operations, by -;; itself it is a win because the shifts end up occuring in PSImode instead +;; itself it is a win because the shifts end up occurring in PSImode instead ;; of SImode. However, it has the secondary effect of giving us the ;; opportunity to match patterns which allow us to remove the initial ;; extension completely, which is a big win. diff --git a/gcc/config/mn10300/mn10300.c b/gcc/config/mn10300/mn10300.c index 512d3675e73..f46e4232083 100644 --- a/gcc/config/mn10300/mn10300.c +++ b/gcc/config/mn10300/mn10300.c @@ -254,6 +254,18 @@ print_operand (file, x, code) output_address (GEN_INT ((~INTVAL (x)) & 0xff)); break; + /* For shift counts. The hardware ignores the upper bits of + any immediate, but the assembler will flag an out of range + shift count as an error. So we mask off the high bits + of the immediate here. */ + case 'S': + if (GET_CODE (x) == CONST_INT) + { + fprintf (file, "%d", INTVAL (x) & 0x1f); + break; + } + /* FALL THROUGH */ + default: switch (GET_CODE (x)) { @@ -535,7 +547,21 @@ expand_epilogue () size = get_frame_size () + current_function_outgoing_args_size; size += (current_function_outgoing_args_size ? 4 : 0); - /* Cut back the stack. */ + /* Maybe cut back the stack, except for the register save area. + + If the frame pointer exists, then use the frame pointer to + cut back the stack. + + If the stack size + register save area is more than 255 bytes, + then the stack must be cut back here since the size + register + save size is too big for a ret/retf instruction. + + Else leave it alone, it will be cut back as part of the + ret/retf instruction, or there wasn't any stack to begin with. + + Under no circumstances should the register save area be + deallocated here, that would leave a window where an interrupt + could occur and trash the register save area. */ if (frame_pointer_needed) { emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); @@ -543,7 +569,7 @@ expand_epilogue () } else if ((regs_ever_live[2] || regs_ever_live[3] || regs_ever_live[6] || regs_ever_live[7]) - && size > 255) + && size + 16 > 255) { emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, @@ -555,11 +581,11 @@ expand_epilogue () the stack with one instruction. ?!? Only save registers which are actually used. Reduces - stack requireents and is faster. */ + stack requirements and is faster. */ if (regs_ever_live[2] || regs_ever_live[3] || regs_ever_live[6] || regs_ever_live[7] || frame_pointer_needed) - emit_jump_insn (gen_return_internal_regs (GEN_INT (size))); + emit_jump_insn (gen_return_internal_regs (GEN_INT (size + 16))); else { if (size) @@ -963,3 +989,77 @@ impossible_plus_operand (op, mode) return 0; } + +/* Return 1 if X contains a symbolic expression. We know these + expressions will have one of a few well defined forms, so + we need only check those forms. */ +int +symbolic_operand (op, mode) + register rtx op; + enum machine_mode mode; +{ + switch (GET_CODE (op)) + { + case SYMBOL_REF: + case LABEL_REF: + return 1; + case CONST: + op = XEXP (op, 0); + return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF + || GET_CODE (XEXP (op, 0)) == LABEL_REF) + && GET_CODE (XEXP (op, 1)) == CONST_INT); + default: + return 0; + } +} + +/* Try machine dependent ways of modifying an illegitimate address + to be legitimate. If we find one, return the new valid address. + This macro is used in only one place: `memory_address' in explow.c. + + OLDX is the address as it was before break_out_memory_refs was called. + In some cases it is useful to look at this to decide what needs to be done. + + MODE and WIN are passed so that this macro can use + GO_IF_LEGITIMATE_ADDRESS. + + Normally it is always safe for this macro to do nothing. It exists to + recognize opportunities to optimize the output. + + But on a few ports with segmented architectures and indexed addressing + (mn10300, hppa) it is used to rewrite certain problematical addresses. */ +rtx +legitimize_address (x, oldx, mode) + rtx x; + rtx oldx; + enum machine_mode mode; +{ + /* Uh-oh. We might have an address for x[n-100000]. This needs + special handling to avoid creating an indexed memory address + with x-100000 as the base. */ + if (GET_CODE (x) == PLUS + && symbolic_operand (XEXP (x, 1), VOIDmode)) + { + /* Ugly. We modify things here so that the address offset specified + by the index expression is computed first, then added to x to form + the entire address. */ + + rtx regx1, regx2, regy1, regy2, y; + + /* Strip off any CONST. */ + y = XEXP (x, 1); + if (GET_CODE (y) == CONST) + y = XEXP (y, 0); + + if (GET_CODE (y) == PLUS || GET_CODE (y) == MINUS) + { + regx1 = force_reg (Pmode, force_operand (XEXP (x, 0), 0)); + regy1 = force_reg (Pmode, force_operand (XEXP (y, 0), 0)); + regy2 = force_reg (Pmode, force_operand (XEXP (y, 1), 0)); + regx1 = force_reg (Pmode, + gen_rtx (GET_CODE (y), Pmode, regx1, regy2)); + return force_reg (Pmode, gen_rtx (PLUS, Pmode, regx1, regy1)); + } + } + return x; +} diff --git a/gcc/config/mn10300/mn10300.h b/gcc/config/mn10300/mn10300.h index 88065a2ece3..9ebcec147c1 100644 --- a/gcc/config/mn10300/mn10300.h +++ b/gcc/config/mn10300/mn10300.h @@ -1,5 +1,4 @@ -/* Definitions of target machine for GNU compiler. - Matsushita MN10300 series +/* Definitions of target machine for GNU compiler. Matsushita MN10300 series Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Jeff Law (law@cygnus.com). @@ -49,11 +48,15 @@ extern struct rtx_def *zero_areg; where VALUE is the bits to set or minus the bits to clear. An empty string NAME is used to identify the default VALUE. */ +/* Generate code to work around mul/mulq bugs on the mn10300. */ +#define TARGET_MULT_BUG (target_flags & 0x1) #define TARGET_SWITCHES \ - {{ "", TARGET_DEFAULT}} + {{ "mult-bug", 0x1}, \ + { "no-mult-bug", -0x1}, \ + { "", TARGET_DEFAULT}} #ifndef TARGET_DEFAULT -#define TARGET_DEFAULT 0 +#define TARGET_DEFAULT 0x1 #endif /* Print subsidiary information on the compiler version in use. */ @@ -635,7 +638,18 @@ extern struct rtx_def *mn10300_builtin_saveregs (); The other macros defined here are used only in GO_IF_LEGITIMATE_ADDRESS, except for CONSTANT_ADDRESS_P which is actually - machine-independent. */ + machine-independent. + + On the mn10300, the value in the address register must be + in the same memory space/segment as the effective address. + + This is problematical for reload since it does not understand + that base+index != index+base in a memory reference. + + Note it is still possible to use reg+reg addressing modes, + it's just much more difficult. For a discussion of a possible + workaround and solution, see the comments in pa.c before the + function record_unscaled_index_insn_codes. */ /* Accept either REG or SUBREG where a register is valid. */ @@ -661,11 +675,7 @@ extern struct rtx_def *mn10300_builtin_saveregs (); base = XEXP (X, 1), index = XEXP (X, 0); \ if (base != 0 && index != 0) \ { \ - if (CONSTANT_ADDRESS_P (index)) \ - goto ADDR; \ - if (REG_P (index) \ - && REG_OK_FOR_INDEX_P (index) \ - && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (word_mode)) \ + if (GET_CODE (index) == CONST_INT) \ goto ADDR; \ } \ } \ @@ -685,7 +695,12 @@ extern struct rtx_def *mn10300_builtin_saveregs (); It is always safe for this macro to do nothing. It exists to recognize opportunities to optimize the output. */ -#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) {} +extern struct rtx_def *legitimize_address (); +#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) \ +{ rtx orig_x = (X); \ + (X) = legitimize_address (X, OLDX, MODE); \ + if ((X) != orig_x && memory_address_p (MODE, X)) \ + goto WIN; } /* Go to LABEL if ADDR (a legitimate address expression) has an effect that depends on the machine mode it is used for. */ @@ -921,7 +936,7 @@ do { char dstr[30]; \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) -/* We don't have to worry about dbx compatability for the mn10300. */ +/* We don't have to worry about dbx compatibility for the mn10300. */ #define DEFAULT_GDB_EXTENSIONS 1 /* Use stabs debugging info by default. */ @@ -998,3 +1013,4 @@ extern int impossible_plus_operand (); extern enum reg_class secondary_reload_class (); extern int initial_offset (); extern char *output_tst (); +int symbolic_operand (); diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md index f821e499f2a..2ff8a8162ea 100644 --- a/gcc/config/mn10300/mn10300.md +++ b/gcc/config/mn10300/mn10300.md @@ -1,4 +1,4 @@ -; GCC machine description for Matsushita MN10300 +;; GCC machine description for Matsushita MN10300 ;; Copyright (C) 1996, 1997 Free Software Foundation, Inc. ;; Contributed by Jeff Law (law@cygnus.com). @@ -30,8 +30,8 @@ ;; none_0hit - insn does not affect cc but it does modify operand 0 ;; This attribute is used to keep track of when operand 0 changes. ;; See the description of NOTICE_UPDATE_CC for more info. -;; set_znv - insn sets z,n,v to useable values; c is unusable. -;; set_zn - insn sets z,n to useable values; v,c are unuseable. +;; set_znv - insn sets z,n,v to usable values; c is unusable. +;; set_zn - insn sets z,n to usable values; v,c are unusable. ;; compare - compare instruction ;; invert -- like compare, but flags are inverted. ;; clobber - value of cc is unknown @@ -57,7 +57,7 @@ }") (define_insn "" - [(set (match_operand:QI 0 "general_operand" "=d,a,d,a,d,a,d,a,d,m") + [(set (match_operand:QI 0 "general_operand" "=d,*a,d,*a,d,*a,d,*a,d,m") (match_operand:QI 1 "general_operand" "0,0,I,I,a,d,di,ia,m,d"))] "register_operand (operands[0], QImode) || register_operand (operands[1], QImode)" @@ -112,7 +112,7 @@ }") (define_insn "" - [(set (match_operand:HI 0 "general_operand" "=d,a,d,a,d,a,d,a,d,m") + [(set (match_operand:HI 0 "general_operand" "=d,*a,d,*a,d,*a,d,*a,d,m") (match_operand:HI 1 "general_operand" "0,0,I,I,a,d,di,ia,m,d"))] "register_operand (operands[0], HImode) || register_operand (operands[1], HImode)" @@ -730,7 +730,13 @@ (mult:SI (match_operand:SI 1 "register_operand" "%0") (match_operand:SI 2 "register_operand" "d")))] "" - "mul %2,%0" + "* +{ + if (TARGET_MULT_BUG) + return \"nop\;nop\;mul %2,%0\"; + else + return \"mul %2,%0\"; +}" [(set_attr "cc" "set_zn")]) (define_insn "udivmodsi4" @@ -1269,7 +1275,7 @@ asl2 %0 asl2 %0\;add %0,%0 asl2 %0\;asl2 %0 - asl %2,%0" + asl %S2,%0" [(set_attr "cc" "set_zn")]) (define_insn "lshrsi3" @@ -1278,7 +1284,7 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "di")))] "" - "lsr %2,%0" + "lsr %S2,%0" [(set_attr "cc" "set_zn")]) (define_insn "ashrsi3" @@ -1287,7 +1293,7 @@ (match_operand:SI 1 "register_operand" "0") (match_operand:QI 2 "nonmemory_operand" "di")))] "" - "asr %2,%0" + "asr %S2,%0" [(set_attr "cc" "set_zn")]) ;; ---------------------------------------------------------------------- diff --git a/gcc/config/msdos/top.sed b/gcc/config/msdos/top.sed index 7881236d9b7..95236e55971 100644 --- a/gcc/config/msdos/top.sed +++ b/gcc/config/msdos/top.sed @@ -19,9 +19,9 @@ host_xm_file=config/i386/xm-dos.h /^xmake_file=/ d /^tmake_file=/ d /^version=/ c\ -version=2.7.2 +version=2.8.0 /^mainversion=/ c\ -mainversion=2.7.2 +mainversion=2.8.0 s/CC = cc/CC = gcc/ s/:\$/: \$/g s/^ \ *\.\// / diff --git a/gcc/config/nextstep.h b/gcc/config/nextstep.h index de8fbdc8bf0..96435fc67ea 100644 --- a/gcc/config/nextstep.h +++ b/gcc/config/nextstep.h @@ -27,42 +27,43 @@ Boston, MA 02111-1307, USA. */ #undef INCLUDE_DEFAULTS #define INCLUDE_DEFAULTS \ { \ - { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \ - { LOCAL_INCLUDE_DIR, 0, 1 }, \ - { TOOL_INCLUDE_DIR, 0, 1 }, \ - { GCC_INCLUDE_DIR, 0, 0 }, \ + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \ + { LOCAL_INCLUDE_DIR, 0, 0, 1 }, \ + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, \ + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \ /* These are for fixincludes-fixed ansi/bsd headers \ which wouldn't be found otherwise. \ (The use of string catenation here is OK since \ NeXT's native compiler is derived from GCC.) */ \ - { GCC_INCLUDE_DIR "/ansi", 0, 0 }, \ - { GCC_INCLUDE_DIR "/bsd", 0, 0 }, \ - { "/NextDeveloper/Headers", 0, 0 }, \ - { "/NextDeveloper/Headers/ansi", 0, 0 }, \ - { "/NextDeveloper/Headers/bsd", 0, 0 }, \ - { "/LocalDeveloper/Headers", 0, 0 }, \ - { "/LocalDeveloper/Headers/ansi", 0, 0 }, \ - { "/LocalDeveloper/Headers/bsd", 0, 0 }, \ - { "/NextDeveloper/2.0CompatibleHeaders", 0, 0 }, \ - { STANDARD_INCLUDE_DIR, 0, 0 }, \ - { "/usr/include/bsd", 0, 0 }, \ - { 0, 0, 0 } \ + { GCC_INCLUDE_DIR "/ansi", 0, 0, 0 }, \ + { GCC_INCLUDE_DIR "/bsd", 0, 0, 0 }, \ + { "/NextDeveloper/Headers", 0, 0, 0 }, \ + { "/NextDeveloper/Headers/ansi", 0, 0, 0 }, \ + { "/NextDeveloper/Headers/bsd", 0, 0, 0 }, \ + { "/LocalDeveloper/Headers", 0, 0, 0 }, \ + { "/LocalDeveloper/Headers/ansi", 0, 0, 0 }, \ + { "/LocalDeveloper/Headers/bsd", 0, 0, 0 }, \ + { "/NextDeveloper/2.0CompatibleHeaders", 0, 0, 0 }, \ + { STANDARD_INCLUDE_DIR, 0, 0, 0 }, \ + { "/usr/include/bsd", 0, 0, 0 }, \ + { 0, 0, 0, 0 } \ } #else /* CROSS_COMPILE */ #undef INCLUDE_DEFAULTS #define INCLUDE_DEFAULTS \ { \ - { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \ - { LOCAL_INCLUDE_DIR, 0, 1 }, \ - { GCC_INCLUDE_DIR, 0, 0 }, \ - { GCC_INCLUDE_DIR "/ansi", 0, 0 }, \ - { GCC_INCLUDE_DIR "/bsd", 0, 0 }, \ - { TOOL_INCLUDE_DIR, 0, 1 }, \ - { TOOL_INCLUDE_DIR "/ansi", 0, 0 }, \ - { TOOL_INCLUDE_DIR "/bsd", 0, 0 }, \ - { STANDARD_INCLUDE_DIR, 0, 0 }, \ - { "/usr/include/bsd", 0, 0 }, \ - { 0, 0, 0 } \ + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, \ + { GPLUSPLUS_INCLUDE_DIR, 0, 1, 1 }, \ + { LOCAL_INCLUDE_DIR, 0, 0, 1 }, \ + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, \ + { GCC_INCLUDE_DIR "/ansi", 0, 0, 0 }, \ + { GCC_INCLUDE_DIR "/bsd", 0, 0, 0 }, \ + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1 }, \ + { TOOL_INCLUDE_DIR "/ansi", 0, 0, 0 }, \ + { TOOL_INCLUDE_DIR "/bsd", 0, 0, 0 }, \ + { STANDARD_INCLUDE_DIR, 0, 0, 0 }, \ + { "/usr/include/bsd", 0, 0, 0 }, \ + { 0, 0, 0, 0 } \ } #endif /* CROSS_COMPILE */ @@ -581,3 +582,9 @@ objc_section_init () \ const_section (); \ } \ while (0) + +#ifdef ASM_COMMENT_START +# undef ASM_COMMENT_START +#endif + +#define ASM_COMMENT_START ";#" diff --git a/gcc/config/ns32k/xm-genix.h b/gcc/config/ns32k/xm-genix.h index 76be3b76fc8..15ff46fc6b1 100644 --- a/gcc/config/ns32k/xm-genix.h +++ b/gcc/config/ns32k/xm-genix.h @@ -3,7 +3,3 @@ #include "ns32k/xm-ns32k.h" #define USG - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) diff --git a/gcc/config/pa/pa-hpux10.h b/gcc/config/pa/pa-hpux10.h index 1c57d5ee6ea..ab7cee39389 100644 --- a/gcc/config/pa/pa-hpux10.h +++ b/gcc/config/pa/pa-hpux10.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for HP PA-RISC 1.1 - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Tim Moore (moore@defmacro.cs.utah.edu) This file is part of GNU CC. @@ -20,7 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* We can debug dynamically linked executables on hpux9; we also want - derefercing of a NULL pointer to cause a SEGV. */ + dereferencing of a NULL pointer to cause a SEGV. */ #undef LINK_SPEC #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1) #define LINK_SPEC \ diff --git a/gcc/config/pa/pa-hpux9.h b/gcc/config/pa/pa-hpux9.h index 95b031e8c8d..8d039d2637e 100644 --- a/gcc/config/pa/pa-hpux9.h +++ b/gcc/config/pa/pa-hpux9.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for HP PA-RISC 1.1 - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Tim Moore (moore@defmacro.cs.utah.edu) This file is part of GNU CC. @@ -20,7 +20,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* We can debug dynamically linked executables on hpux9; we also want - derefercing of a NULL pointer to cause a SEGV. */ + dereferencing of a NULL pointer to cause a SEGV. */ #undef LINK_SPEC #if ((TARGET_DEFAULT | TARGET_CPU_DEFAULT) & 1) #define LINK_SPEC \ diff --git a/gcc/config/pa/pa-pro-end.h b/gcc/config/pa/pa-pro-end.h index 267057c8506..8b1de1c5e5f 100644 --- a/gcc/config/pa/pa-pro-end.h +++ b/gcc/config/pa/pa-pro-end.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, for PRO. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -31,7 +31,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef CPP_PREDEFINES #define CPP_PREDEFINES "-Dhppa -DPWB -Acpu(hppa) -Amachine(hppa)" -/* hpux8 and later have C++ compatable include files, so do not +/* hpux8 and later have C++ compatible include files, so do not pretend they are `extern "C"'. */ #define NO_IMPLICIT_EXTERN_C diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 351e8811035..d32195f23a7 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -121,17 +121,17 @@ override_options () if (flag_pic && (TARGET_NO_SPACE_REGS || TARGET_FAST_INDIRECT_CALLS)) { - warning ("PIC code generation is not compatable with fast indirect calls\n"); + warning ("PIC code generation is not compatible with fast indirect calls\n"); } if (flag_pic && profile_flag) { - warning ("PIC code generation is not compatable with profiling\n"); + warning ("PIC code generation is not compatible with profiling\n"); } if (TARGET_SPACE && (flag_pic || profile_flag)) { - warning ("Out of line entry/exit sequences are not compatable\n"); + warning ("Out of line entry/exit sequences are not compatible\n"); warning ("with PIC or profiling\n"); } @@ -1880,7 +1880,7 @@ find_addr_reg (addr) OPERANDS[4] is the size as a CONST_INT OPERANDS[3] is a register for temporary storage. OPERANDS[5] is the alignment safe to use, as a CONST_INT. - OPERNADS[6] is another temporary register. */ + OPERANDS[6] is another temporary register. */ char * output_block_move (operands, size_is_constant) @@ -4319,7 +4319,7 @@ hppa_builtin_saveregs (arglist) individually as scalar stores. However, other insns may later load from the same addresses for - a struture load (passing a struct to a varargs routine). + a structure load (passing a struct to a varargs routine). The alias code assumes that such aliasing can never happen, so we have to keep memory referencing insns from moving up beyond the @@ -4330,7 +4330,8 @@ hppa_builtin_saveregs (arglist) emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, dest, ptr_mode, GEN_INT (4 * UNITS_PER_WORD), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); return copy_to_reg (expand_binop (Pmode, add_optab, current_function_internal_arg_pointer, @@ -5810,7 +5811,7 @@ following_call (insn) /* Check for CALL_INSNs and millicode calls. */ if (insn && ((GET_CODE (insn) == CALL_INSN - && get_attr_type (inns) != TYPE_DYNCALL) + && get_attr_type (insn) != TYPE_DYNCALL) || (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) != SEQUENCE && GET_CODE (PATTERN (insn)) != USE @@ -6036,7 +6037,7 @@ pa_reorg (insns) continue; /* Now generate markers for the beginning and end of the - branc table. */ + branch table. */ emit_insn_before (gen_begin_brtab (), insn); emit_insn_after (gen_end_brtab (), insn); } @@ -6093,7 +6094,7 @@ pa_combine_instructions (insns) /* This can get expensive since the basic algorithm is on the order of O(n^2) (or worse). Only do it for -O2 or higher - levels of optimizaton. */ + levels of optimization. */ if (optimize < 2) return; diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index ffcb8aa40bd..79f2bfe4859 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -72,7 +72,7 @@ extern int target_flags; this option will fail miserably if the executable is dynamically linked or uses nested functions! - This is also used to trigger agressive unscaled index addressing. */ + This is also used to trigger aggressive unscaled index addressing. */ #define TARGET_NO_SPACE_REGS (target_flags & 4) /* Allow unconditional jumps in the delay slots of call instructions. */ @@ -113,7 +113,7 @@ extern int target_flags; #define TARGET_FAST_INDIRECT_CALLS (target_flags & 1024) /* Generate code with big switch statements to avoid out of range branches - occuring within the switch table. */ + occurring within the switch table. */ #define TARGET_BIG_SWITCH (target_flags & 2048) /* Macro to define tables used to set the flags. @@ -276,7 +276,7 @@ extern int target_flags; or "static /usr/lib/X11R5/libX11.sl". HPUX 10.20 also has lines like "static branch prediction ..." - so we filter that out explcitly. + so we filter that out explicitly. We also try to bound our search for libraries with marker lines. What a pain. */ diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 1fb0e0d784b..79c973b6b4d 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -5072,7 +5072,7 @@ /* Must import the magic millicode routine. */ output_asm_insn (\".IMPORT $$sh_func_adrs,MILLICODE\", NULL); - /* This is absolutely fucking amazing. + /* This is absolutely amazing. First, copy our input parameter into %r29 just in case we don't need to call $$sh_func_adrs. */ @@ -5128,7 +5128,7 @@ (const_int 0))) (const_int 32) -;; PORTABLE_RUTNIME +;; PORTABLE_RUNTIME (ne (symbol_ref "TARGET_PORTABLE_RUNTIME") (const_int 0)) (const_int 40)] diff --git a/gcc/config/pa/xm-pahpux.h b/gcc/config/pa/xm-pahpux.h index 97e9403b158..09c949b358e 100644 --- a/gcc/config/pa/xm-pahpux.h +++ b/gcc/config/pa/xm-pahpux.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for PA-RISC. - Copyright (C) 1988, 1995 Free Software Foundation, Inc. + Copyright (C) 1988, 1995, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). This file is part of GNU CC. @@ -24,13 +24,6 @@ Boston, MA 02111-1307, USA. */ #define USG /* Use System V memory functions. */ -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) - -#define rindex strrchr -#define index strchr - /* #defines that need visibility everywhere. */ #define FALSE 0 #define TRUE 1 diff --git a/gcc/config/pdp11/pdp11.md b/gcc/config/pdp11/pdp11.md index dc69c0e98c3..ec6a43f66d1 100644 --- a/gcc/config/pdp11/pdp11.md +++ b/gcc/config/pdp11/pdp11.md @@ -48,7 +48,7 @@ ;; The only thing that remains to be done then is output ;; the floats in a way the assembler can handle it (and ;; if you're really into it, use a PDP11 float emulation -;; libary to do floating point constant folding - but +;; library to do floating point constant folding - but ;; I guess you'll get reasonable results even when not ;; doing this) ;; the last thing to do is fix the UPDATE_CC macro to check diff --git a/gcc/config/romp/romp.c b/gcc/config/romp/romp.c index cc920fbd8df..ed36259f652 100644 --- a/gcc/config/romp/romp.c +++ b/gcc/config/romp/romp.c @@ -1317,7 +1317,7 @@ struct symref_hashent { static struct symref_hashent *symref_hash_table[SYMHASHSIZE]; -/* Given a name (allocatable in temporary storage), return a SYMBOL_REF +/* Given a name (allocable in temporary storage), return a SYMBOL_REF for the name. The rtx is allocated from the current rtl_obstack, while the name string is allocated from the permanent obstack. */ rtx diff --git a/gcc/config/rs6000/cygwin32.h b/gcc/config/rs6000/cygwin32.h index 557b3016ad9..f527736a020 100644 --- a/gcc/config/rs6000/cygwin32.h +++ b/gcc/config/rs6000/cygwin32.h @@ -5,7 +5,7 @@ to build GCC for use with a windows style library and tool set, winnt.h uses the Microsoft tools to do that. - Copyright (C) 1996 Free Software Foundation, Inc. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -36,6 +36,9 @@ Boston, MA 02111-1307, USA. */ #define CPP_PREDEFINES "-D_WIN32 -DWINNT -D__CYGWIN32__ -DPOSIX \ -D_POWER -D_ARCH_PPC -D__PPC__ -Asystem(winnt) -Acpu(powerpc) -Amachine(powerpc)" +#undef CPP_SPEC +#define CPP_SPEC "-remap %{posix: -D_POSIX_SOURCE} %(cpp_cpu)" + /* 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 'libcygwin.a'. For Windows applications, include more libraries, but diff --git a/gcc/config/rs6000/linux.h b/gcc/config/rs6000/linux.h index 2483f41ccc6..10474e4d5cf 100644 --- a/gcc/config/rs6000/linux.h +++ b/gcc/config/rs6000/linux.h @@ -28,7 +28,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef LINK_SPEC #define LINK_SPEC "-m elf32ppc %{shared:-shared} \ %{!shared: \ - %{!static: %{rdynamic:-export-dynamic}} \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}} \ %{static:-static}}" #undef LIB_DEFAULT_SPEC @@ -47,7 +49,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)" #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (PowerPC Linux)"); +#define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)"); /* Define this macro as a C expression for the initializer of an array of string to tell the driver program which options are @@ -60,3 +62,6 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #undef MULTILIB_DEFAULTS #define MULTILIB_DEFAULTS { "mbig", "mcall-linux" } + +#undef DEFAULT_VTABLE_THUNKS +#define DEFAULT_VTABLE_THUNKS 1 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 44246bcb93a..2dbdb923538 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -19,9 +19,9 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "config.h" #include #include +#include "config.h" #include "rtl.h" #include "regs.h" #include "hard-reg-set.h" @@ -673,28 +673,47 @@ num_insns_constant (op, mode) return num_insns_constant_wide ((HOST_WIDE_INT)l); } - else if (GET_CODE (op) == CONST_DOUBLE && TARGET_32BIT) - return (num_insns_constant_wide (CONST_DOUBLE_LOW (op)) - + num_insns_constant_wide (CONST_DOUBLE_HIGH (op))); - - else if (GET_CODE (op) == CONST_DOUBLE && TARGET_64BIT) + else if (GET_CODE (op) == CONST_DOUBLE) { - HOST_WIDE_INT low = CONST_DOUBLE_LOW (op); - HOST_WIDE_INT high = CONST_DOUBLE_HIGH (op); - - if (high == 0 && (low & 0x80000000) == 0) - return num_insns_constant_wide (low); + HOST_WIDE_INT low; + HOST_WIDE_INT high; + long l[2]; + REAL_VALUE_TYPE rv; + int endian = (WORDS_BIG_ENDIAN == 0); - else if (((high & 0xffffffff) == 0xffffffff) - && ((low & 0x80000000) != 0)) - return num_insns_constant_wide (low); + if (mode == VOIDmode || mode == DImode) + { + high = CONST_DOUBLE_HIGH (op); + low = CONST_DOUBLE_LOW (op); + } + else + { + REAL_VALUE_FROM_CONST_DOUBLE (rv, op); + REAL_VALUE_TO_TARGET_DOUBLE (rv, l); + high = l[endian]; + low = l[1 - endian]; + } - else if (low == 0) - return num_insns_constant_wide (high) + 1; + if (TARGET_32BIT) + return (num_insns_constant_wide (low) + + num_insns_constant_wide (high)); else - return (num_insns_constant_wide (high) - + num_insns_constant_wide (low) + 1); + { + if (high == 0 && (low & 0x80000000) == 0) + return num_insns_constant_wide (low); + + else if (((high & 0xffffffff) == 0xffffffff) + && ((low & 0x80000000) != 0)) + return num_insns_constant_wide (low); + + else if (low == 0) + return num_insns_constant_wide (high) + 1; + + else + return (num_insns_constant_wide (high) + + num_insns_constant_wide (low) + 1); + } } else @@ -1330,9 +1349,11 @@ function_arg (cum, mode, type, named) const0_rtx))); } - /* Long longs won't be split between register and stack */ + /* Long longs won't be split between register and stack; + FP arguments get passed on the stack if they didn't get a register. */ else if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && - align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG) + (align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG + || (GET_MODE_CLASS (mode) == MODE_FLOAT && TARGET_HARD_FLOAT))) { return NULL_RTX; } @@ -2119,7 +2140,7 @@ rs6000_got_register (value) } -/* Replace all occurances of register FROM with an new pseduo register in an insn X. +/* Replace all occurrences of register FROM with an new pseudo register in an insn X. Store the pseudo register used in REG. This is only safe during FINALIZE_PIC, since the registers haven't been setup yet. */ @@ -2194,7 +2215,7 @@ void rs6000_finalize_pic () { /* Loop through all of the insns, replacing the special GOT_TOC_REGNUM - with an appropriate pseduo register. If we find we need GOT/TOC, + with an appropriate pseudo register. If we find we need GOT/TOC, add the appropriate init code. */ if (flag_pic && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)) { @@ -2236,7 +2257,7 @@ rs6000_finalize_pic () } -/* Search for any occurrance of the GOT_TOC register marker that should +/* Search for any occurrence of the GOT_TOC register marker that should have been eliminated, but may have crept back in. */ void @@ -2261,6 +2282,7 @@ struct machine_function int save_toc_p; int fpmem_size; int fpmem_offset; + rtx pic_offset_table_rtx; }; /* Functions to save and restore rs6000_fpmem_size. @@ -2278,6 +2300,7 @@ rs6000_save_machine_status (p) machine->sysv_varargs_p = rs6000_sysv_varargs_p; machine->fpmem_size = rs6000_fpmem_size; machine->fpmem_offset = rs6000_fpmem_offset; + machine->pic_offset_table_rtx = pic_offset_table_rtx; } void @@ -2289,6 +2312,7 @@ rs6000_restore_machine_status (p) rs6000_sysv_varargs_p = machine->sysv_varargs_p; rs6000_fpmem_size = machine->fpmem_size; rs6000_fpmem_offset = machine->fpmem_offset; + pic_offset_table_rtx = machine->pic_offset_table_rtx; free (machine); p->machine = (struct machine_function *)0; @@ -2315,8 +2339,10 @@ rs6000_init_expanders () #if TARGET_ELF #define SMALL_DATA_RELOC ((rs6000_sdata == SDATA_EABI) ? "sda21" : "sdarel") +#define SMALL_DATA_REG ((rs6000_sdata == SDATA_EABI) ? 0 : 13) #else #define SMALL_DATA_RELOC "sda21" +#define SMALL_DATA_REG 0 #endif void @@ -2515,7 +2541,8 @@ print_operand (file, x, code) else output_address (plus_constant (XEXP (x, 0), 4)); if (small_data_operand (x, GET_MODE (x))) - fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]); + fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, + reg_names[SMALL_DATA_REG]); } return; @@ -2743,7 +2770,8 @@ print_operand (file, x, code) else output_address (plus_constant (XEXP (x, 0), 8)); if (small_data_operand (x, GET_MODE (x))) - fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]); + fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, + reg_names[SMALL_DATA_REG]); } return; @@ -2792,7 +2820,8 @@ print_operand (file, x, code) else output_address (plus_constant (XEXP (x, 0), 12)); if (small_data_operand (x, GET_MODE (x))) - fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]); + fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, + reg_names[SMALL_DATA_REG]); } return; @@ -2834,7 +2863,8 @@ print_operand_address (file, x) { output_addr_const (file, x); if (small_data_operand (x, GET_MODE (x))) - fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, reg_names[0]); + fprintf (file, "@%s(%s)", SMALL_DATA_RELOC, + reg_names[SMALL_DATA_REG]); #ifdef TARGET_NO_TOC else if (TARGET_NO_TOC) @@ -3168,7 +3198,8 @@ rs6000_stack_info () else if (abi == ABI_V4 || abi == ABI_NT || abi == ABI_SOLARIS) info_ptr->push_p = (total_raw_size > info_ptr->fixed_size - || info_ptr->lr_save_p); + || (abi == ABI_NT ? info_ptr->lr_save_p + : info_ptr->calls_p)); else info_ptr->push_p = (frame_pointer_needed @@ -4408,28 +4439,33 @@ output_function_profiler (file, labelno) if (flag_pic == 1) { fprintf (file, "\tbl _GLOBAL_OFFSET_TABLE_@local-4\n"); + fprintf (file, "\t%s %s,4(%s)\n", + (TARGET_NEW_MNEMONICS) ? "stw" : "st", + reg_names[0], reg_names[1]); fprintf (file, "\tmflr %s\n", reg_names[11]); fprintf (file, "\t%s %s,", (TARGET_NEW_MNEMONICS) ? "lwz" : "l", - reg_names[11]); + reg_names[0]); assemble_name (file, buf); fprintf (file, "@got(%s)\n", reg_names[11]); } #if TARGET_ELF else if (flag_pic > 1 || TARGET_RELOCATABLE) { - fprintf (file, "\tstw %s,4(%s)\n", reg_names[0], reg_names[1]); - fprintf (file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); - assemble_name (file, buf); - fprintf (file, "X = .-.LCTOC1\n"); - fprintf (file, "\t.long "); - assemble_name (file, buf); - fputs ("\n\t.previous\n", file); + fprintf (file, "\t%s %s,4(%s)\n", + (TARGET_NEW_MNEMONICS) ? "stw" : "st", + reg_names[0], reg_names[1]); rs6000_pic_func_labelno = rs6000_pic_labelno; rs6000_output_load_toc_table (file, 11); fprintf (file, "\t%s %s,", (TARGET_NEW_MNEMONICS) ? "lwz" : "l", reg_names[11]); assemble_name (file, buf); fprintf (file, "X(%s)\n", reg_names[11]); + fprintf (file, "%s\n", MINIMAL_TOC_SECTION_ASM_OP); + assemble_name (file, buf); + fprintf (file, "X = .-.LCTOC1\n"); + fprintf (file, "\t.long "); + assemble_name (file, buf); + fputs ("\n\t.previous\n", file); } #endif else if (TARGET_NEW_MNEMONICS) @@ -4438,7 +4474,7 @@ output_function_profiler (file, labelno) assemble_name (file, buf); fprintf (file, "@ha\n"); fprintf (file, "\tstw %s,4(%s)\n", reg_names[0], reg_names[1]); - fprintf (file, "\taddi %s,%s,", reg_names[11], reg_names[11]); + fprintf (file, "\taddi %s,%s,", reg_names[0], reg_names[11]); assemble_name (file, buf); fputs ("@l\n", file); } diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 91242a8c35a..d30af75f155 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -52,7 +52,7 @@ Boston, MA 02111-1307, USA. */ #define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_cpu)" -/* Common CPP definitions used by CPP_SPEC amonst the various targets +/* Common CPP definitions used by CPP_SPEC among the various targets for handling -mcpu=xxx switches. */ #define CPP_CPU_SPEC \ "%{!mcpu*: \ @@ -101,7 +101,7 @@ Boston, MA 02111-1307, USA. */ #define CPP_SYSV_DEFAULT_SPEC "" #endif -/* Common ASM definitions used by ASM_SPEC amonst the various targets +/* Common ASM definitions used by ASM_SPEC among the various targets for handling -mcpu=xxx switches. */ #define ASM_CPU_SPEC \ "%{!mcpu*: \ @@ -242,7 +242,7 @@ extern int target_flags; if there are more than 16K unique variables/constant in a single module. This is at the cost of having 2 extra loads and one extra store per - function, and one less allocatable register. */ + function, and one less allocable register. */ #define MASK_MINIMAL_TOC 0x00000200 /* Nonzero for the 64bit model: ints, longs, and pointers are 64 bits. */ @@ -424,7 +424,7 @@ extern enum processor_type rs6000_cpu; extern char *m88k_short_data; #define TARGET_OPTIONS { { "short-data-", &m88k_short_data } } */ -/* This is meant to be overriden in target specific files. */ +/* This is meant to be overridden in target specific files. */ #ifndef SUBTARGET_OPTIONS #define SUBTARGET_OPTIONS #endif @@ -909,7 +909,7 @@ extern int rs6000_debug_arg; /* debug argument handling */ Also, cr0 is the only condition code register that can be used in arithmetic insns, so make a separate class for it. - There is a special 'registrer' (76), which is not a register, but a + There is a special 'register' (76), which is not a register, but a placeholder for memory allocated to convert between floating point and integral types. This works around a problem where if we allocate memory with allocate_stack_{local,temp} and the function is an inline function, the @@ -2904,12 +2904,17 @@ do { \ #define ASM_OUTPUT_ASCII(FILE, P, N) output_ascii ((FILE), (P), (N)) /* This is how to output code to push a register on the stack. - It need not be very fast code. */ + It need not be very fast code. + + On the rs6000, we must keep the backchain up to date. In order + to simplify things, always allocate 16 bytes for a push (System V + wants to keep stack aligned to a 16 byte boundary). */ #define ASM_OUTPUT_REG_PUSH(FILE,REGNO) \ do { \ extern char *reg_names[]; \ - asm_fprintf (FILE, "\{tstu|stwu} %s,-4(%s)\n", reg_names[REGNO], \ + asm_fprintf (FILE, "\t{stu|stwu} %s,-16(%s)\n\t{st|stw} %s,8(%s)\n", \ + reg_names[1], reg_names[1], reg_names[REGNO], \ reg_names[1]); \ } while (0) @@ -2919,7 +2924,7 @@ do { \ #define ASM_OUTPUT_REG_POP(FILE,REGNO) \ do { \ extern char *reg_names[]; \ - asm_fprintf (FILE, "\t{l|lwz} %s,0(%s)\n\t{ai|addic} %s,%s,4\n", \ + asm_fprintf (FILE, "\t{l|lwz} %s,8(%s)\n\t{ai|addic} %s,%s,16\n", \ reg_names[REGNO], reg_names[1], reg_names[1], \ reg_names[1]); \ } while (0) diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 7ab6b9c8cb6..8f71378244a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -4258,13 +4258,13 @@ [(set_attr "length" "8")]) (define_insn "lshrdi3_power" - [(set (match_operand:DI 0 "gpc_reg_operand" "=&r,r,r,&r") + [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,r,&r") (lshiftrt:DI (match_operand:DI 1 "gpc_reg_operand" "r,r,0,r") (match_operand:SI 2 "reg_or_cint_operand" "M,i,r,r"))) (clobber (match_scratch:SI 3 "=X,q,q,q"))] "TARGET_POWER" "@ - {cal %0,0(0)|li %0,0}\;{s%A2i|s%A2wi} %L0,%1,%h2 + {s%A2i|s%A2wi} %L0,%1,%h2\;{cal %0,0(0)|li %0,0} sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2 sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2 sr%I2q %0,%1,%h2\;srl%I2q %L0,%L1,%h2" @@ -5156,6 +5156,34 @@ "{l|lwz} %0,%a1@got(%2)" [(set_attr "type" "load")]) +;; Sometimes, though, the GOT `register' will be on the stack. Deal with +;; this case specially. +;; Force final to split this insn (if it hasn't been split already) to +;; avoid having to create a suitable output template. +(define_insn "*movsi_got_internal_mem" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec [(match_operand:SI 1 "got_no_const_operand" "") + (match_operand:SI 2 "memory_operand" "m")] 8))] + "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) + && flag_pic == 1 + && (reload_in_progress || reload_completed)" + "#" + [(set_attr "type" "load") + (set_attr "length" "8")]) + +;; Used by sched, shorten_branches and final when the GOT pseudo reg +;; didn't get allocated to a hard register. +(define_split + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec [(match_operand:SI 1 "got_no_const_operand" "") + (match_operand:SI 2 "memory_operand" "m")] 8))] + "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) + && flag_pic == 1 + && (reload_in_progress || reload_completed)" + [(set (match_dup 0) (match_dup 2)) + (set (match_dup 0) (unspec [(match_dup 1)(match_dup 0)] 8))] + "") + ;; For SI, we special-case integers that can't be loaded in one insn. We ;; do the load 16-bits at a time. We could do this by loading from memory, ;; and this is even supposed to be faster, but it is simpler not to get @@ -5706,16 +5734,16 @@ " { int endian = (WORDS_BIG_ENDIAN == 0); + long l[2]; + REAL_VALUE_TYPE rv; + + REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]); + REAL_VALUE_TO_TARGET_DOUBLE (rv, l); + operands[2] = operand_subword (operands[0], endian, 0, DFmode); operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode); - -#ifdef HOST_WORDS_BIG_ENDIAN - operands[4] = GEN_INT (CONST_DOUBLE_LOW (operands[1])); - operands[5] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); -#else - operands[4] = GEN_INT (CONST_DOUBLE_HIGH (operands[1])); - operands[5] = GEN_INT (CONST_DOUBLE_LOW (operands[1])); -#endif + operands[4] = GEN_INT (l[endian]); + operands[5] = GEN_INT (l[1 - endian]); }") (define_split @@ -5734,16 +5762,15 @@ HOST_WIDE_INT high; HOST_WIDE_INT low; int endian = (WORDS_BIG_ENDIAN == 0); + long l[2]; + REAL_VALUE_TYPE rv; rtx high_reg = operand_subword (operands[0], endian, 0, DFmode); rtx low_reg = operand_subword (operands[0], 1 - endian, 0, DFmode); -#ifdef HOST_WORDS_BIG_ENDIAN - high = CONST_DOUBLE_LOW (operands[1]); - low = CONST_DOUBLE_HIGH (operands[1]); -#else - high = CONST_DOUBLE_HIGH (operands[1]); - low = CONST_DOUBLE_LOW (operands[1]); -#endif + REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]); + REAL_VALUE_TO_TARGET_DOUBLE (rv, l); + high = l[endian]; + low = l[1 - endian]; if (((unsigned HOST_WIDE_INT) (low + 0x8000) < 0x10000) || (low & 0xffff) == 0) @@ -5778,10 +5805,17 @@ (set (match_dup 3) (ior:SI (match_dup 3) (match_dup 7)))] " { - HOST_WIDE_INT high = CONST_DOUBLE_HIGH (operands[1]); - HOST_WIDE_INT low = CONST_DOUBLE_LOW (operands[1]); + HOST_WIDE_INT high; + HOST_WIDE_INT low; + long l[2]; + REAL_VALUE_TYPE rv; int endian = (WORDS_BIG_ENDIAN == 0); + REAL_VALUE_FROM_CONST_DOUBLE (rv, operands[1]); + REAL_VALUE_TO_TARGET_DOUBLE (rv, l); + high = l[endian]; + low = l[1 - endian]; + operands[2] = operand_subword (operands[0], endian, 0, DFmode); operands[3] = operand_subword (operands[0], 1 - endian, 0, DFmode); operands[4] = GEN_INT (high & 0xffff0000); @@ -7207,7 +7241,7 @@ DONE; }") -;; If we have -mmiminal-toc, we need to reload r30 after a nonlocal goto. +;; If we have -mminimal-toc, we need to reload r30 after a nonlocal goto. (define_insn "nonlocal_goto_receiver" [(unspec_volatile [(const_int 0)] 1)] @@ -7491,7 +7525,7 @@ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return \"bl %z0\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@local\" : \"bl %z0\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7546,7 +7580,7 @@ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return (flag_pic == 1) ? \"bl %z0@plt\" : \"bl %z0\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z0@plt\" : \"bl %z0\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7566,7 +7600,7 @@ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return \"bl %z1\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@local\" : \"bl %z1\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7616,7 +7650,7 @@ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return (flag_pic == 1) ? \"bl %z1@plt\" : \"bl %z1\"; + return (DEFAULT_ABI == ABI_V4 && flag_pic) ? \"bl %z1@plt\" : \"bl %z1\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h index 0f15531b197..10c6bf77b57 100644 --- a/gcc/config/rs6000/rtems.h +++ b/gcc/config/rs6000/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting a PowerPC using elf. +/* Definitions for rtems targeting a PowerPC using elf. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 4227bd17981..e9a88a2d15a 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -1,5 +1,5 @@ /* Target definitions for GNU compiler for PowerPC running System V.4 - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GNU CC. @@ -97,8 +97,12 @@ extern enum rs6000_sdata_type rs6000_sdata; { "emb", 0 }, \ { "solaris-cclib", 0 }, \ { "shlib", 0 }, \ + EXTRA_SUBTARGET_SWITCHES \ { "newlib", 0 }, +/* This is meant to be redefined in the host dependent files */ +#define EXTRA_SUBTARGET_SWITCHES + /* Default ABI to use */ #define RS6000_ABI_NAME "sysv" @@ -580,7 +584,7 @@ extern void rs6000_select_rtx_section (), rs6000_select_section (); we can't check that since not every file that uses GO_IF_LEGITIMATE_ADDRESS_P includes real.h. - Unlike AIX, we don't key off of -mmininal-toc, but instead do not + Unlike AIX, we don't key off of -mminimal-toc, but instead do not allow floating point constants in the TOC if -mrelocatable. */ #undef ASM_OUTPUT_SPECIAL_POOL_ENTRY_P @@ -709,7 +713,7 @@ do { \ } \ } while (0) -/* Describe how to emit unitialized external linkage items */ +/* Describe how to emit uninitialized external linkage items */ #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do { \ ASM_GLOBALIZE_LABEL (FILE, NAME); \ @@ -1026,7 +1030,7 @@ do { \ #undef LINK_SHLIB_SPEC #ifndef NO_SHARED_LIB_SUPPORT -/* Shared libaries are default. */ +/* Shared libraries are default. */ #define LINK_SHLIB_SPEC "\ %{!static: %(link_path) %{!R*:%{L*:-R %*}}} \ %{mshlib: } \ @@ -1265,7 +1269,7 @@ do { \ #define CPP_OS_SIM_SPEC "" #endif -/* Linux support. */ +/* GNU/Linux support. */ #ifndef LIB_LINUX_SPEC #define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } %{!mnewlib: -lc }" #endif diff --git a/gcc/config/rs6000/t-ppccomm b/gcc/config/rs6000/t-ppccomm index 145fcaede22..c6f9b6c7629 100644 --- a/gcc/config/rs6000/t-ppccomm +++ b/gcc/config/rs6000/t-ppccomm @@ -67,3 +67,7 @@ $(T)scrtn$(objext): scrtn.S $(T)scrt0$(objext): scrt0.c $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -c scrt0.c -o $(T)scrt0$(objext) + +# It is important that crtbegin.o, etc., aren't surprised by stuff in .sdata. +CRTSTUFF_T_CFLAGS = -msdata=none +CRTSTUFF_T_CFLAGS_S = -fpic -msdata=none diff --git a/gcc/config/rs6000/t-ppcos b/gcc/config/rs6000/t-ppcos index fe1d6ad64c1..480665a8937 100644 --- a/gcc/config/rs6000/t-ppcos +++ b/gcc/config/rs6000/t-ppcos @@ -1,4 +1,5 @@ -# Target config file for a System V based system (Solaris, Linux, Netbsd) with gas +# Target config file for a System V based system (Solaris, GNU/Linux, Netbsd) +# with gas. # Build libgcc.a with different options. With gas, build pic libraries # as well no floating point diff --git a/gcc/config/rs6000/tramp.asm b/gcc/config/rs6000/tramp.asm index 57b47013748..47ab7d65b1f 100644 --- a/gcc/config/rs6000/tramp.asm +++ b/gcc/config/rs6000/tramp.asm @@ -1,8 +1,6 @@ -/* CYGNUS LOCAL -- waiting for FSF sources to be restored/meissner */ -/* - * special support for trampolines +/* Special support for trampolines * - * Copyright (C) 1996 Free Software Foundation, Inc. + * Copyright (C) 1996, 1997 Free Software Foundation, Inc. * Written By Michael Meissner * * This file is free software; you can redistribute it and/or modify it @@ -82,7 +80,7 @@ FUNC_START(__trampoline_setup) mflr r11 lwz r12,(.LCL0-.LCF0)(r11) add r11,r12,r11 - lwz r7,.Ltramp(r11) /* trampoline addres -4 */ + lwz r7,.Ltramp(r11) /* trampoline address -4 */ li r8,__trampoline_size /* verify that the trampoline is big enough */ cmpw cr1,r8,r4 diff --git a/gcc/config/rs6000/win-nt.h b/gcc/config/rs6000/win-nt.h index 7c11c1b2ae6..2fcf44647d2 100644 --- a/gcc/config/rs6000/win-nt.h +++ b/gcc/config/rs6000/win-nt.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, for PowerPC running Windows/NT. - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GNU CC. @@ -162,7 +162,7 @@ do { \ ASM_OUTPUT_SKIP (FILE, SIZE); \ } while (0) -/* Describe how to emit unitialized external linkage items */ +/* Describe how to emit uninitialized external linkage items */ #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ do { \ ASM_GLOBALIZE_LABEL (FILE, NAME); \ diff --git a/gcc/config/rs6000/xm-cygwin32.h b/gcc/config/rs6000/xm-cygwin32.h index 158e54edc0f..677254b371c 100644 --- a/gcc/config/rs6000/xm-cygwin32.h +++ b/gcc/config/rs6000/xm-cygwin32.h @@ -1,6 +1,6 @@ /* Configuration for GNU C-compiler for hosting on Windows NT. using a unix style C library. - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -23,6 +23,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "rs6000/xm-rs6000.h" -#define HAVE_RUSAGE -#define HAVE_FILE_H #define EXECUTABLE_SUFFIX ".exe" diff --git a/gcc/config/sh/elf.h b/gcc/config/sh/elf.h index f74abd9ccf2..a56077e544e 100644 --- a/gcc/config/sh/elf.h +++ b/gcc/config/sh/elf.h @@ -25,10 +25,6 @@ Boston, MA 02111-1307, USA. */ /* No SDB debugging info. */ #undef SDB_DEBUGGING_INFO -/* Prefer stabs. */ -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - /* Undefine some macros defined in both sh.h and svr4.h. */ #undef IDENT_ASM_OP #undef ASM_FILE_END @@ -40,6 +36,7 @@ Boston, MA 02111-1307, USA. */ #undef ASM_OUTPUT_CONSTRUCTOR #undef ASM_OUTPUT_DESTRUCTOR #undef ASM_DECLARE_FUNCTION_NAME +#undef PREFERRED_DEBUGGING_TYPE /* Be ELF-like. */ #include "svr4.h" diff --git a/gcc/config/sh/rtems.h b/gcc/config/sh/rtems.h index be9d8f2a8c4..2e864ad5c29 100644 --- a/gcc/config/sh/rtems.h +++ b/gcc/config/sh/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting a SH using elf. +/* Definitions for rtems targeting a SH using elf. Copyright (C) 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 7b466e04c1f..b4be01e76ec 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -1,5 +1,5 @@ /* Output routines for GCC for Hitachi Super-H. - Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -1919,7 +1919,7 @@ find_barrier (num_mova, mova, from) delay slot. This gives 1018. */ /* The branch will always be shortened now that the reference address for - forward branches is the sucessor address, thus we need no longer make + forward branches is the successor address, thus we need no longer make adjustments to the [sh]i_limit for -O0. */ si_limit = 1018; @@ -1937,7 +1937,7 @@ find_barrier (num_mova, mova, from) if (GET_CODE (from) == BARRIER) { found_barrier = from; - /* If we are at the end of the function, or in fron of an alignemnt + /* If we are at the end of the function, or in front of an alignment instruction, we need not insert an extra alignment. We prefer this kind of barrier. */ @@ -2004,7 +2004,7 @@ find_barrier (num_mova, mova, from) /* We have just passed the barrier in front front of the ADDR_DIFF_VEC. Since the ADDR_DIFF_VEC is accessed as data, just like our pool constants, this is a good - opportunity to accomodate what we have gathered so far. + opportunity to accommodate what we have gathered so far. If we waited any longer, we could end up at a barrier in front of code, which gives worse cache usage for separated instruction / data caches. */ @@ -2286,7 +2286,7 @@ regs_used (x, is_dest) } /* Create an instruction that prevents redirection of a conditional branch - to the desitination of the JUMP with address ADDR. + to the destination of the JUMP with address ADDR. If the branch needs to be implemented as an indirect jump, try to find a scratch register for it. If NEED_BLOCK is 0, don't do anything unless we need a scratch register. @@ -2327,7 +2327,7 @@ gen_block_redirect (jump, addr, need_block) { rtx scan; /* Don't look for the stack pointer as a scratch register, - it would cause trouble if an interrupt occured. */ + it would cause trouble if an interrupt occurred. */ unsigned try = 0x7fff, used; int jump_left = flag_expensive_optimizations + 1; @@ -2385,7 +2385,7 @@ gen_block_redirect (jump, addr, need_block) /* If the immediate destination is still in range, check for possible threading with a jump beyond the delay slot insn. Don't check if we are called recursively; the jump has been or will be - checked in a different invokation then. */ + checked in a different invocation then. */ else if (optimize && need_block >= 0) { @@ -2406,7 +2406,7 @@ gen_block_redirect (jump, addr, need_block) rtx reg = gen_rtx (REG, SImode, exact_log2 (dead & -dead)); /* It would be nice if we could convert the jump into an indirect - jump / far branch right now, and thus exposing all consitituent + jump / far branch right now, and thus exposing all constituent instructions to further optimization. However, reorg uses simplejump_p to determine if there is an unconditional jump where it should try to schedule instructions from the target of the @@ -2936,7 +2936,7 @@ machine_dependent_reorg (first) } /* The following processing passes need length information. - addr_diff_vec_adjust needs to know if insn_addreses is valid. */ + addr_diff_vec_adjust needs to know if insn_addresses is valid. */ insn_addresses = 0; /* If not optimizing for space, we want extra alignment for code after @@ -2954,13 +2954,22 @@ machine_dependent_reorg (first) So what we do now is to insert align_* instructions after the barriers. By doing that before literal tables are generated, we don't have to care about these. */ + /* We also want alignment in front of ADDR_DIFF_VECs; this is done already + by ASM_OUTPUT_CASE_LABEL, but when optimizing, we have to make it + explicit in the RTL in order to correctly shorten branches. */ - if (! TARGET_SMALLCODE && optimize) + if (optimize) for (insn = first; insn; insn = NEXT_INSN (insn)) { - if (GET_CODE (insn) == BARRIER && next_real_insn (insn)) - if (GET_CODE (PATTERN (next_real_insn (insn))) == ADDR_DIFF_VEC) - ; /* Do nothing */ + rtx addr_diff_vec; + + if (GET_CODE (insn) == BARRIER + && (addr_diff_vec = next_real_insn (insn))) + if (GET_CODE (PATTERN (addr_diff_vec)) == ADDR_DIFF_VEC) + emit_insn_before (gen_align_4 (), + XEXP (XEXP (PATTERN (addr_diff_vec), 0), 0)); + else if (TARGET_SMALLCODE) + continue; else if (TARGET_SH3) { /* We align for an entire cache line. If there is a immediately @@ -2999,6 +3008,8 @@ machine_dependent_reorg (first) insn = emit_insn_after (gen_align_4 (), insn); insn = emit_barrier_after (insn); } + else if (TARGET_SMALLCODE) + continue; else if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG) { @@ -3065,7 +3076,7 @@ machine_dependent_reorg (first) /* range of mova is 1020, add 4 because pc counts from address of second instruction after this one, subtract 2 in case pc is 2 byte aligned. Possible alignment needed for the ADDR_DIFF_VEC - chancles out with alignment effects of the mova itself. */ + cancels out with alignment effects of the mova itself. */ if (total > 1022) { /* Change the mova into a load, and restart scanning @@ -3164,6 +3175,22 @@ machine_dependent_reorg (first) mdep_reorg_phase = SH_SHORTEN_BRANCHES1; insn_addresses = 0; split_branches (first); + + /* The INSN_REFERENCES_ARE_DELAYED in sh.h is problematic because it + also has an effect on the register that holds the address of the sfunc. + Insert an extra dummy insn in front of each sfunc that pretends to + use this register. */ + if (flag_delayed_branch) + { + for (insn = first; insn; insn = NEXT_INSN (insn)) + { + rtx reg = sfunc_uses_reg (insn); + + if (! reg) + continue; + emit_insn_before (gen_use_sfunc_addr (reg), insn); + } + } mdep_reorg_phase = SH_AFTER_MDEP_REORG; } @@ -3251,7 +3278,7 @@ split_branches (first) the label if th lABEL_BUSES count drops to zero. There is always a jump_optimize pass that sets these values, but it proceeds to delete unreferenced code, and then if not - optimizeing, to un-delete the deleted instructions, thus + optimizing, to un-delete the deleted instructions, thus leaving labels with too low uses counts. */ if (! optimize) { @@ -3449,8 +3476,8 @@ final_prescan_insn (insn, opvec, noperands) || (GET_CODE (pattern) == SET && (GET_CODE (SET_SRC (pattern)) == CALL || get_attr_type (insn) == TYPE_SFUNC))) - fprintf (asm_out_file, "\t.uses L%d\n", - CODE_LABEL_NUMBER (XEXP (note, 0))); + asm_fprintf (asm_out_file, "\t.uses %LL%d\n", + CODE_LABEL_NUMBER (XEXP (note, 0))); else if (GET_CODE (pattern) == SET) ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, "L", CODE_LABEL_NUMBER (XEXP (note, 0))); @@ -3909,7 +3936,7 @@ handle_pragma (file, t) sp_switch -- specifies an alternate stack for an interrupt handler to run on. - trap_exit -- use a trapa to exit an interrupt function intead of + trap_exit -- use a trapa to exit an interrupt function instead of an rte instruction. */ int @@ -4236,7 +4263,7 @@ branch_offset (branch) while (dest_uid >= uid_align_max || ! uid_align[dest_uid]) { /* Label might be outside the insn stream, or even in a separate - insn stream, after a syntax errror. */ + insn stream, after a syntax error. */ if (! NEXT_INSN (dest)) return 0; dest = NEXT_INSN (dest), dest_uid = INSN_UID (dest); diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index a08c125cfb7..a3aa90253e6 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -404,7 +404,7 @@ do { \ frame pointer register can often be eliminated in favor of the stack pointer register. Secondly, the argument pointer register can always be eliminated; it is replaced with either the stack or frame pointer. - Third, there is the retuen address pointer, which can also be replaced + Third, there is the return address pointer, which can also be replaced with either the stack or the frame pointer. */ /* This is an array of structures. Each structure initializes one pair @@ -804,9 +804,16 @@ struct sh_args { This macro is only used in this file. */ #define PASS_IN_REG_P(CUM, MODE, TYPE) \ - (ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE) \ - && ((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \ - && (! TARGET_SH3E || (ROUND_REG((CUM), (MODE)) + (GET_MODE_SIZE(MODE)/4) <= NPARM_REGS (MODE)))) + (((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \ + && (TARGET_SH3E \ + ? ((MODE) == BLKmode \ + ? (((CUM).arg_count[(int) SH_ARG_INT] * UNITS_PER_WORD \ + + int_size_in_bytes (TYPE)) \ + <= NPARM_REGS (SImode) * UNITS_PER_WORD) \ + : ((ROUND_REG((CUM), (MODE)) \ + + HARD_REGNO_NREGS (BASE_ARG_REG (MODE), (MODE))) \ + <= NPARM_REGS (MODE))) \ + : ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE))) /* Define where to put the arguments to a function. Value is zero to push the argument on the stack, @@ -1755,9 +1762,14 @@ sh_valid_machine_decl_attribute (DECL, ATTRIBUTES, IDENTIFIER, ARGS) (LENGTH) = align_length (X); \ if (GET_CODE (X) == JUMP_INSN \ && GET_CODE (PATTERN (X)) == ADDR_DIFF_VEC) \ - /* The code before an ADDR_DIFF_VEC is even aligned, thus \ - any odd estimate is wrong. */ \ - (LENGTH) &= ~1; + { \ + /* The code before an ADDR_DIFF_VEC is even aligned, \ + thus any odd estimate is wrong. */ \ + (LENGTH) &= ~1; \ + /* If not optimizing, the alignment is implicit. */ \ + if (! optimize) \ + (LENGTH) += 2; \ + } /* Enable a bug fix for the shorten_branches pass. */ #define SHORTEN_WITH_ADJUST_INSN_LENGTH diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md index 1d9f0db323e..ae49456a966 100644 --- a/gcc/config/sh/sh.md +++ b/gcc/config/sh/sh.md @@ -1,5 +1,5 @@ ;;- Machine description for the Hitachi SH. -;; Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1995, 1997Free Software Foundation, Inc. ;; Contributed by Steve Chamberlain (sac@cygnus.com). ;; Improved by Jim Wilson (wilson@cygnus.com). @@ -80,7 +80,7 @@ ;; cbranch conditional branch instructions ;; jump unconditional jumps ;; arith ordinary arithmetic -;; arith3 a compound insn that behaves similarily to a sequence of +;; arith3 a compound insn that behaves similarly to a sequence of ;; three insns of type arith ;; arith3b like above, but might end with a redirected branch ;; load from memory @@ -101,9 +101,10 @@ ;; fp floating point ;; fdiv floating point divide (or square root) ;; gp_fpul move between general purpose register and fpul +;; nil no-op move, will be deleted. (define_attr "type" - "cbranch,jump,jump_ind,arith,arith3,arith3b,dyn_shift,other,load,load_si,store,move,fmove,smpy,dmpy,return,pload,pstore,pcload,pcload_si,rte,sfunc,call,fp,fdiv,gp_fpul" + "cbranch,jump,jump_ind,arith,arith3,arith3b,dyn_shift,other,load,load_si,store,move,fmove,smpy,dmpy,return,pload,pstore,pcload,pcload_si,rte,sfunc,call,fp,fdiv,gp_fpul,nil" (const_string "other")) ; If a conditional branch destination is within -252..258 bytes away @@ -168,7 +169,7 @@ ;; between the actual call address and the function arguments. ;; ADJUST_COST can only properly handle reductions of the cost, so we ;; use a latency of three here. -;; We only do this for SImode loads of general regsiters, to make the work +;; We only do this for SImode loads of general registers, to make the work ;; for ADJUST_COST easier. (define_function_unit "memory" 1 0 (eq_attr "type" "load_si,pcload_si") @@ -561,6 +562,17 @@ ;; We take advantage of the library routines which don't clobber as many ;; registers as a normal function call would. +;; The INSN_REFERENCES_ARE_DELAYED in sh.h is problematic because it +;; also has an effect on the register that holds the address of the sfunc. +;; To make this work, we have an extra dummy insns that shows the use +;; of this register for reorg. + +(define_insn "use_sfunc_addr" + [(set (reg:SI 17) (unspec [(match_operand:SI 0 "register_operand" "r")] 5))] + "" + "" + [(set_attr "length" "0")]) + ;; We must use a pseudo-reg forced to reg 0 in the SET_DEST rather than ;; hard register 0. If we used hard register 0, then the next instruction ;; would be a move from hard register 0 to a pseudo-reg. If the pseudo-reg @@ -1836,7 +1848,7 @@ lds %1,%0 sts %1,%0 ! move optimized away" - [(set_attr "type" "pcload_si,move,*,load_si,move,move,store,store,pstore,move,load,pload,pcload_si,gp_fpul,gp_fpul,other") + [(set_attr "type" "pcload_si,move,*,load_si,move,move,store,store,pstore,move,load,pload,pcload_si,gp_fpul,gp_fpul,nil") (set_attr "length" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,0")]) (define_insn "movsi_i_lowpart" @@ -2107,12 +2119,15 @@ sts %1,%0" [(set_attr "type" "move,move,pcload,load,store,move,move")]) +;; We may not split the ry/yr/XX alternatives to movsi_ie, since +;; update_flow_info would not know where to put REG_EQUAL notes +;; when the destination changes mode. (define_insn "movsf_ie" [(set (match_operand:SF 0 "general_movdst_operand" - "=f,r,f,f,fy,f,m,r,r,m,f,y,y,rf,ry") + "=f,r,f,f,fy,f,m,r,r,m,f,y,y,rf,r,y,y") (match_operand:SF 1 "general_movsrc_operand" - "f,r,G,H,FQ,m,f,FQ,m,r,y,f,>,fr,yr")) - (clobber (match_scratch:SI 2 "=X,X,X,X,&z,X,X,X,X,X,X,X,X,y,X"))] + "f,r,G,H,FQ,m,f,FQ,m,r,y,f,>,fr,y,r,y")) + (clobber (match_scratch:SI 2 "=X,X,X,X,&z,X,X,X,X,X,X,X,X,y,X,X,X"))] "TARGET_SH3E && (arith_reg_operand (operands[0], SFmode) @@ -2132,23 +2147,11 @@ flds %1,fpul lds.l %1,%0 # - #" - [(set_attr "type" "fmove,move,fmove,fmove,pcload,load,store,pcload,load,store,fmove,fmove,load,*,*") - (set_attr "length" "*,*,*,*,4,*,*,*,*,*,2,2,2,*,*")]) - -(define_split - [(set (match_operand:SF 0 "register_operand" "ry") - (match_operand:SF 1 "register_operand" "ry")) - (clobber (match_scratch:SI 2 "X"))] - "reload_completed - && true_regnum (operands[0]) < FIRST_FP_REG - && true_regnum (operands[1]) < FIRST_FP_REG" - [(set (match_dup 0) (match_dup 1))] - " -{ - operands[0] = gen_rtx (REG, SImode, true_regnum (operands[0])); - operands[1] = gen_rtx (REG, SImode, true_regnum (operands[1])); -}") + sts %1,%0 + lds %1,%0 + ! move optimized away" + [(set_attr "type" "fmove,move,fmove,fmove,pcload,load,store,pcload,load,store,fmove,fmove,load,*,gp_fpul,gp_fpul,nil") + (set_attr "length" "*,*,*,*,4,*,*,*,*,*,2,2,2,*,2,2,0")]) (define_split [(set (match_operand:SF 0 "register_operand" "") @@ -2426,6 +2429,12 @@ [(set_attr "needs_delay_slot" "yes") (set_attr "type" "jump_ind")]) +(define_insn "dummy_jump" + [(set (pc) (const_int 0))] + "" + "" + [(set_attr "length" "0")]) + ;; Call subroutine returning any type. ;; ??? This probably doesn't work. @@ -2518,6 +2527,9 @@ gen_rtx (LABEL_REF, VOIDmode, lab), operands[3])); emit_label (lab); + /* Put a fake jump after the label, lest some optimization might + delete the barrier and LAB. */ + emit_jump_insn (gen_dummy_jump ()); } else { @@ -2634,7 +2646,7 @@ return \"\"; }" ;; Need a variable length for this to be processed in each shorten_branch pass. -;; The actual work is done in ADJUST_INSN_LENTH, because length attributes +;; The actual work is done in ADJUST_INSN_LENGTH, because length attributes ;; need to be (a choice of) constants. ;; We use the calculated length before ADJUST_INSN_LENGTH to ;; determine if the insn_addresses array contents are valid. @@ -2795,7 +2807,7 @@ "operands[2] = gen_reg_rtx (SImode);") ;; Recognize mov #-1/negc/neg sequence, and change it to movt/add #-1. -;; This prevents a regression that occured when we switched from xor to +;; This prevents a regression that occurred when we switched from xor to ;; mov/neg for sne. (define_split @@ -2911,7 +2923,7 @@ "" ".align %O0" ;; Need a variable length for this to be processed in each shorten_branch pass. -;; The actual work is done in ADJUST_INSN_LENTH, because length attributes +;; The actual work is done in ADJUST_INSN_LENGTH, because length attributes ;; need to be (a choice of) constants. [(set (attr "length") (if_then_else (ne (pc) (pc)) (const_int 2) (const_int 0))) @@ -3310,7 +3322,7 @@ }" [(set_attr "length" "10")]) -;; Switch back to the original stack for interrupt funtions with the +;; Switch back to the original stack for interrupt functions with the ;; sp_switch attribute. */ (define_insn "sp_switch_2" [(const_int 2)] diff --git a/gcc/config/sh/xm-sh.h b/gcc/config/sh/xm-sh.h index 3d8ef8410b8..f51b787f6df 100644 --- a/gcc/config/sh/xm-sh.h +++ b/gcc/config/sh/xm-sh.h @@ -1,5 +1,6 @@ /* Configuration for GNU C-compiler for Hitachi SH. - Copyright (C) 1993 Free Software Foundation, Inc. + Copyright (C) 1993, 1997 Free Software Foundation, Inc. + This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify @@ -32,9 +33,6 @@ Boston, MA 02111-1307, USA. */ #define alloca __builtin_alloca #endif -/* We have the vprintf function. */ -#define HAVE_VPRINTF 1 - /* target machine dependencies. tm.h is a symbolic link to the actual target specific file. */ #include "tm.h" diff --git a/gcc/config/sparc/linux-aout.h b/gcc/config/sparc/linux-aout.h index df93361835f..7075b5fbe7c 100644 --- a/gcc/config/sparc/linux-aout.h +++ b/gcc/config/sparc/linux-aout.h @@ -1,4 +1,4 @@ -/* Definitions for SPARC running Linux with a.out +/* Definitions for SPARC running Linux-based GNU systems with a.out. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Eddie C. Dost (ecd@skynet.be) @@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */ #undef HAVE_ATEXIT #define HAVE_ATEXIT -/* Linux uses ctype from glibc.a. I am not sure how complete it is. +/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is. For now, we play safe. It may change later. */ #if 0 @@ -55,7 +55,7 @@ Boston, MA 02111-1307, USA. */ #define STARTFILE_SPEC "%{pg:gcrt0.o%s} %{!pg:%{p:gcrt0.o%s} %{!p:crt0.o%s}} %{static:-static}" #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (sparc Linux/a.out)"); +#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with a.out)"); #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" @@ -84,9 +84,8 @@ Boston, MA 02111-1307, USA. */ #if 1 /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -lc_p or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #define LIB_SPEC \ "%{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} %{!ggdb:-lc} %{ggdb:-lg}" #else @@ -106,7 +105,7 @@ Boston, MA 02111-1307, USA. */ #if 0 /* Define for support of TFmode long double and REAL_ARITHMETIC. - Sparc ABI says that long double is 4 words. Linux does not support + Sparc ABI says that long double is 4 words. GNU/Linux does not support long double yet. */ #define LONG_DOUBLE_TYPE_SIZE 128 #endif diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h index dbaf1aaac98..9ce30d108ee 100644 --- a/gcc/config/sparc/linux.h +++ b/gcc/config/sparc/linux.h @@ -1,4 +1,4 @@ -/* Definitions for SPARC running Linux with ELF +/* Definitions for SPARC running Linux-based GNU systems with ELF. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Eddie C. Dost (ecd@skynet.be) @@ -27,7 +27,7 @@ Boston, MA 02111-1307, USA. */ #undef HAVE_ATEXIT #define HAVE_ATEXIT -/* Linux uses ctype from glibc.a. I am not sure how complete it is. +/* GNU/Linux uses ctype from glibc.a. I am not sure how complete it is. For now, we play safe. It may change later. */ #if 0 @@ -52,8 +52,8 @@ Boston, MA 02111-1307, USA. */ fprintf (FILE, "\t.version\t\"01.01\"\n"); \ } while (0) -/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add - the Linux magical crtbegin.o file (see crtstuff.c) which +/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main'. */ @@ -63,11 +63,11 @@ Boston, MA 02111-1307, USA. */ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" -/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on - the Linux magical crtend.o file (see crtstuff.c) which +/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main', followed by a normal - Linux "finalizer" file, `crtn.o'. */ + GNU/Linux "finalizer" file, `crtn.o'. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC \ @@ -83,7 +83,7 @@ Boston, MA 02111-1307, USA. */ " #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (sparc Linux/ELF)"); +#define TARGET_VERSION fprintf (stderr, " (sparc GNU/Linux with ELF)"); #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" @@ -111,9 +111,8 @@ Boston, MA 02111-1307, USA. */ #undef LIB_SPEC /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -lc_p or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #if 1 #ifdef USE_GNULIBC_1 #define LIB_SPEC \ @@ -131,7 +130,7 @@ Boston, MA 02111-1307, USA. */ %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}" #endif -/* Provide a LINK_SPEC appropriate for Linux. Here we provide support +/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate combinations of options at link-time. We like to support here for @@ -229,7 +228,7 @@ do { \ #if 0 /* Define for support of TFmode long double and REAL_ARITHMETIC. - Sparc ABI says that long double is 4 words. Linux does not support + Sparc ABI says that long double is 4 words. GNU/Linux does not support long double yet. */ #define LONG_DOUBLE_TYPE_SIZE 128 #endif diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h index 56c2183013d..74f632bb48c 100644 --- a/gcc/config/sparc/linux64.h +++ b/gcc/config/sparc/linux64.h @@ -1,4 +1,4 @@ -/* Definitions for 64-bit SPARC running Linux with ELF +/* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF. Copyright 1996, 1997 Free Software Foundation, Inc. Contributed by David S. Miller (davem@caip.rutgers.edu) @@ -52,8 +52,8 @@ Boston, MA 02111-1307, USA. */ #define LIBGCC_SPEC \ "%{!shared:-lgcc}" -/* Provide a STARTFILE_SPEC appropriate for Linux. Here we add - the Linux magical crtbegin.o file (see crtstuff.c) which +/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add + the GNU/Linux magical crtbegin.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main'. */ @@ -63,18 +63,18 @@ Boston, MA 02111-1307, USA. */ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" -/* Provide a ENDFILE_SPEC appropriate for Linux. Here we tack on - the Linux magical crtend.o file (see crtstuff.c) which +/* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on + the GNU/Linux magical crtend.o file (see crtstuff.c) which provides part of the support for getting C++ file-scope static object constructed before entering `main', followed by a normal - Linux "finalizer" file, `crtn.o'. */ + GNU/Linux "finalizer" file, `crtn.o'. */ #undef ENDFILE_SPEC #define ENDFILE_SPEC \ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" #undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (sparc64 Linux/ELF)"); +#define TARGET_VERSION fprintf (stderr, " (sparc64 GNU/Linux with ELF)"); /* A 64 bit v9 compiler with stack-bias, in a Medium/Anywhere code model environment. */ @@ -113,15 +113,14 @@ Boston, MA 02111-1307, USA. */ %{posix:-D_POSIX_SOURCE} \ " /* We no longer link with libc_p.a or libg.a by default. If you - * want to profile or debug the Linux C library, please add - * -lc_p or -ggdb to LDFLAGS at the link time, respectively. - */ + want to profile or debug the GNU/Linux C library, please add + -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #undef LIB_SPEC #define LIB_SPEC \ "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \ %{!ggdb:-lc} %{ggdb:-lg}}" -/* Provide a LINK_SPEC appropriate for Linux. Here we provide support +/* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support for the special GCC options -static and -shared, which allow us to link things in one of these three modes by applying the appropriate combinations of options at link-time. We like to support here for diff --git a/gcc/config/sparc/rtems.h b/gcc/config/sparc/rtems.h index 6a9d92ae1da..55b7779818a 100644 --- a/gcc/config/sparc/rtems.h +++ b/gcc/config/sparc/rtems.h @@ -1,4 +1,4 @@ -/* Definitions for rtems targetting a SPARC using a.out. +/* Definitions for rtems targeting a SPARC using a.out. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Joel Sherrill (joel@OARcorp.com). diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index a96bbf962d6..692ba41f790 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -3334,8 +3334,8 @@ output_function_prologue (file, size, leaf_function) else if (! leaf_function && TARGET_BROKEN_SAVERESTORE) { /* We assume the environment will properly handle or otherwise avoid - trouble associated with an interrupt occuring after the `save' or - trap occuring during it. */ + trouble associated with an interrupt occurring after the `save' or + trap occurring during it. */ fprintf (file, "\tsave\n"); if (actual_fsize <= 4096) @@ -3830,7 +3830,7 @@ function_arg (cum, mode, type, named, incoming_p) /* ??? This will cause the value to be passed in the fp reg and in the stack. When a prototype exists we want to pass the value in the reg but reserve space on the stack. That's an - optimization, and is defered [for a bit]. */ + optimization, and is deferred [for a bit]. */ if ((regno - SPARC_FP_ARG_FIRST) >= SPARC_INT_ARG_MAX * 2) return gen_rtx (PARALLEL, mode, gen_rtvec (2, @@ -4246,7 +4246,8 @@ sparc_builtin_saveregs (arglist) address, ptr_mode, GEN_INT (UNITS_PER_WORD * (NPARM_REGS (word_mode) - first_reg)), - TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), QImode); + TYPE_MODE (sizetype), GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); return address; } diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 82357d85f53..d839432e766 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -215,11 +215,13 @@ Unrecognized value in TARGET_CPU_DEFAULT. %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(asm_cpu_default)}}}}}}} \ " -/* Word size selection, among other things. */ +/* Word size selection, among other things. + This is what GAS uses. Add %(asm_arch) to ASM_SPEC to enable. */ + #define ASM_ARCH32_SPEC "-32" #define ASM_ARCH64_SPEC "-64" #define ASM_ARCH_DEFAULT_SPEC \ -(DEFAULT_ARCH32_P ? ASM_ARCH32_SPEC : ASM_ARCH64_SPEC) +(DEFAULT_ARCH32_P ? ASM_ARCH32_SPEC : ASM_ARCH64_SPEC) #define ASM_ARCH_SPEC "\ %{m32:%(asm_arch32)} \ @@ -231,7 +233,7 @@ Unrecognized value in TARGET_CPU_DEFAULT. #define ASM_SPEC "\ %| %{R} %{!pg:%{!p:%{fpic:-k} %{fPIC:-k}}} %{keep-local-as-symbols:-L} \ -%(asm_cpu) %(asm_arch) \ +%(asm_cpu) \ " #define LIB_SPEC "%{!shared:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{g:-lg}}" @@ -438,8 +440,8 @@ extern int target_flags; /* Non-zero means the cpu has broken `save' and `restore' insns, only the trivial versions work (save %g0,%g0,%g0; restore %g0,%g0,%g0). We assume the environment will properly handle or otherwise avoid - trouble associated with an interrupt occuring after the `save' or trap - occuring during it. */ + trouble associated with an interrupt occurring after the `save' or trap + occurring during it. */ #define MASK_BROKEN_SAVERESTORE 0x200000 #define TARGET_BROKEN_SAVERESTORE (target_flags & MASK_BROKEN_SAVERESTORE) @@ -1129,7 +1131,7 @@ extern int sparc_mode_class[]; It is important that SPARC_ICC_REG have class NO_REGS. Otherwise combine may try to use it to hold an SImode value. See register_operand. - ??? Should %fcc[0123] be handled similarily? + ??? Should %fcc[0123] be handled similarly? */ enum reg_class { NO_REGS, FPCC_REGS, GENERAL_REGS, FP_REGS, EXTRA_FP_REGS, diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index b1afbcd003c..8ec12f5197a 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -2157,7 +2157,10 @@ (define_insn "*movsf_const_insn" [(set (match_operand:SF 0 "general_operand" "=?r,f,m") (match_operand:SF 1 "" "?F,m,G"))] - "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE" + "TARGET_FPU + && GET_CODE (operands[1]) == CONST_DOUBLE + && (GET_CODE (operands[0]) == REG + || fp_zero_operand (operands[1]))" "* { switch (which_alternative) @@ -2231,7 +2234,10 @@ (define_insn "*movdf_const_insn" [(set (match_operand:DF 0 "general_operand" "=?r,e,o") (match_operand:DF 1 "" "?F,m,G"))] - "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE" + "TARGET_FPU + && GET_CODE (operands[1]) == CONST_DOUBLE + && (GET_CODE (operands[0]) == REG + || fp_zero_operand (operands[1]))" "* { switch (which_alternative) @@ -2349,7 +2355,10 @@ (define_insn "*movtf_const_insn" [(set (match_operand:TF 0 "general_operand" "=?r,e,o") (match_operand:TF 1 "" "?F,m,G"))] - "TARGET_FPU && GET_CODE (operands[1]) == CONST_DOUBLE" + "TARGET_FPU + && GET_CODE (operands[1]) == CONST_DOUBLE + && (GET_CODE (operands[0]) == REG + || fp_zero_operand (operands[1]))" "* { switch (which_alternative) diff --git a/gcc/config/sparc/sun4o3.h b/gcc/config/sparc/sun4o3.h index 5fcb72f4a63..68ddc632794 100644 --- a/gcc/config/sparc/sun4o3.h +++ b/gcc/config/sparc/sun4o3.h @@ -5,6 +5,6 @@ fprintf (FILE, "\tsethi %%hi(LP%d),%%o0\n\tcall .mcount\n\tor %%lo(LP%d),%%o0,%%o0\n", \ (LABELNO), (LABELNO)) -/* LINK_SPEC is needed only for Sunos 4. */ +/* LINK_SPEC is needed only for SunOS 4. */ #undef LINK_SPEC diff --git a/gcc/config/sparc/t-linux b/gcc/config/sparc/t-linux index 5a4690eab1f..6e37a023005 100644 --- a/gcc/config/sparc/t-linux +++ b/gcc/config/sparc/t-linux @@ -1,6 +1,6 @@ LIBGCC1 = CROSS_LIBGCC1 = -# We don't want to build .umul, etc., because Linux provides them, +# We don't want to build .umul, etc., because gnu/Linux provides them, # which means that libgcc1-test will fail for cross-compiler. LIBGCC1_TEST = diff --git a/gcc/config/sparc/xm-linux.h b/gcc/config/sparc/xm-linux.h index 9299e313029..f68f5715662 100644 --- a/gcc/config/sparc/xm-linux.h +++ b/gcc/config/sparc/xm-linux.h @@ -1,4 +1,4 @@ -/* Configuration for GCC for SPARC running Linux. +/* Configuration for GCC for SPARC running Linux-based GNU systems. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Eddie C. Dost (ecd@skynet.be) diff --git a/gcc/config/sparc/xm-pbd.h b/gcc/config/sparc/xm-pbd.h index dad9fdc6b34..1c3f47590c7 100644 --- a/gcc/config/sparc/xm-pbd.h +++ b/gcc/config/sparc/xm-pbd.h @@ -3,9 +3,6 @@ #include "sparc/xm-sparc.h" #define USG -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) #ifndef __GNUC__ #define USE_C_ALLOCA diff --git a/gcc/config/sparc/xm-sparc.h b/gcc/config/sparc/xm-sparc.h index afc44ae889d..e553a0df0b2 100644 --- a/gcc/config/sparc/xm-sparc.h +++ b/gcc/config/sparc/xm-sparc.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for Sun Sparc. - Copyright (C) 1988, 1993, 1995 Free Software Foundation, Inc. + Copyright (C) 1988, 1993, 1995, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com). This file is part of GNU CC. @@ -43,8 +43,6 @@ Boston, MA 02111-1307, USA. */ #define SUCCESS_EXIT_CODE 0 #define FATAL_EXIT_CODE 33 -#define HAVE_POPEN - /* If compiled with Sun CC, the use of alloca requires this #include. */ #ifndef __GNUC__ #include "alloca.h" diff --git a/gcc/config/tahoe/tahoe.c b/gcc/config/tahoe/tahoe.c index e6da3b8ce9e..9dd189bde2f 100644 --- a/gcc/config/tahoe/tahoe.c +++ b/gcc/config/tahoe/tahoe.c @@ -52,7 +52,7 @@ Boston, MA 02111-1307, USA. */ rtx tahoe_reg_conversion_loc; int -extendable_operand (op, mode) +extensible_operand (op, mode) rtx op; enum machine_mode mode; { diff --git a/gcc/config/tahoe/tahoe.md b/gcc/config/tahoe/tahoe.md index 101d69f6822..0fdbb0cb775 100644 --- a/gcc/config/tahoe/tahoe.md +++ b/gcc/config/tahoe/tahoe.md @@ -1,5 +1,5 @@ ;; Machine description for GNU compiler, Tahoe version -;; Copyright (C) 1989, 1994, 1996 Free Software Foundation, Inc. +;; Copyright (C) 1989, 1994, 1996, 1997 Free Software Foundation, Inc. ;; This file is part of GNU CC. @@ -1143,7 +1143,7 @@ (define_insn "tsthi" [(set (cc0) - (match_operand:HI 0 "extendable_operand" "m,!r"))] + (match_operand:HI 0 "extensible_operand" "m,!r"))] "GET_MODE (operands[0]) != VOIDmode" "* { @@ -1179,7 +1179,7 @@ (define_insn "tstqi" [(set (cc0) - (match_operand:QI 0 "extendable_operand" "m,!r"))] + (match_operand:QI 0 "extensible_operand" "m,!r"))] "GET_MODE (operands[0]) != VOIDmode" "* { diff --git a/gcc/config/v850/lib1funcs.asm b/gcc/config/v850/lib1funcs.asm index 82ad0894d66..b140c4385e1 100644 --- a/gcc/config/v850/lib1funcs.asm +++ b/gcc/config/v850/lib1funcs.asm @@ -1172,7 +1172,7 @@ __save_interrupt: .size __save_interrupt,.-__save_interrupt /* Restore saved registers, deallocate stack and return from the interrupt */ - /* Called via: jr __return_interupt */ + /* Called via: jr __return_interrupt */ .align 2 .globl __return_interrupt .type __return_interrupt,@function diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index 79ae10f9fbe..8f5c768bbe2 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -448,7 +448,7 @@ print_operand (file, x, code) break; case 'S': { - /* if it's a referance to a TDA variable, use sst/sld vs. st/ld */ + /* if it's a reference to a TDA variable, use sst/sld vs. st/ld */ if (GET_CODE (x) == MEM && ep_memory_operand (x, GET_MODE (x), FALSE)) fputs ("s", file); @@ -2157,8 +2157,8 @@ pattern_is_ok_for_prologue (op, mode) return 0; /* If the register is being pushed somewhere other than the stack - space just aquired by the first operand then abandon this quest. - Note: the test is <= becuase both values are negative. */ + space just acquired by the first operand then abandon this quest. + Note: the test is <= because both values are negative. */ if (INTVAL (XEXP (plus, 1)) <= INTVAL (XEXP (SET_SRC (XVECEXP (op, 0, 0)), 1))) { diff --git a/gcc/config/v850/v850.h b/gcc/config/v850/v850.h index 00e6fd1da51..19eab5fdaf8 100644 --- a/gcc/config/v850/v850.h +++ b/gcc/config/v850/v850.h @@ -1,5 +1,4 @@ -/* Definitions of target machine for GNU compiler. - NEC V850 series +/* Definitions of target machine for GNU compiler. NEC V850 series Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Jeff Law (law@cygnus.com). @@ -20,11 +19,15 @@ along with GNU CC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "svr4.h" +#include "svr4.h" /* Automatically does #undef CPP_PREDEFINES */ #undef ASM_SPEC #define ASM_SPEC "%{mv*:-mv%*}" +#ifndef CPP_SPEC +#define CPP_SPEC "-D__v850__" +#endif + #undef ASM_FINAL_SPEC #undef LIB_SPEC #undef ENDFILE_SPEC @@ -32,10 +35,7 @@ Boston, MA 02111-1307, USA. */ #undef STARTFILE_SPEC /* Names to predefine in the preprocessor for this target machine. */ - -#ifndef CPP_PREDEFINES -#define CPP_PREDEFINES "-D__v850__ -D__v851__ -D__v850" -#endif +#define CPP_PREDEFINES "-D__v851__ -D__v850" /* Print subsidiary information on the compiler version in use. */ @@ -82,7 +82,7 @@ extern int target_flags; * Passing/returning of large structures probably isn't the same as GHS. We don't have enough documentation on their conventions - to be compatable. + to be compatible. * Tests of SETUP_INCOMING_VARARGS need to be made runtime checks since it depends on TARGET_GHS. */ @@ -347,7 +347,7 @@ extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max]; On the 850, we make the return registers first, then all of the volatile registers, then the saved registers in reverse order to better save the - registers with an out of line function , and finnally the fixed + registers with an out of line function, and finally the fixed registers. */ #define REG_ALLOC_ORDER \ @@ -1006,7 +1006,7 @@ do { \ switch on CODE. There aren't DImode MOD, DIV or MULT operations, so call them - very expensive. Everything else is pretty much a costant cost. */ + very expensive. Everything else is pretty much a constant cost. */ #define RTX_COSTS(RTX,CODE,OUTER_CODE) \ case MOD: \ @@ -1295,7 +1295,7 @@ do { char dstr[30]; \ if ((LOG) != 0) \ fprintf (FILE, "\t.align %d\n", (LOG)) -/* We don't have to worry about dbx compatability for the v850. */ +/* We don't have to worry about dbx compatibility for the v850. */ #define DEFAULT_GDB_EXTENSIONS 1 /* Use stabs debugging info by default. */ diff --git a/gcc/config/v850/v850.md b/gcc/config/v850/v850.md index c2095f2c294..0ba10ca0cc0 100644 --- a/gcc/config/v850/v850.md +++ b/gcc/config/v850/v850.md @@ -46,7 +46,7 @@ ;; none_0hit - insn does not affect cc but it does modify operand 0 ;; This attribute is used to keep track of when operand 0 changes. ;; See the description of NOTICE_UPDATE_CC for more info. -;; set_znv - sets z,n,v to useable values; c is unknown. +;; set_znv - sets z,n,v to usable values; c is unknown. ;; set_zn - sets z,n to usable values; v,c is unknown. ;; compare - compare instruction ;; clobber - value of cc is unknown @@ -935,7 +935,7 @@ /* Shift index for the table array access. */ emit_insn (gen_ashlsi3 (reg, reg, GEN_INT (TARGET_BIG_SWITCH ? 2 : 1))); - /* Load the table address into a psuedo. */ + /* Load the table address into a pseudo. */ emit_insn (gen_movsi (tableaddress, gen_rtx (LABEL_REF, VOIDmode, operands[3]))); /* Add the table address to the index. */ @@ -1201,8 +1201,8 @@ ;; an interrupt function makes a call. ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and ;; all of memory. This blocks insns from being moved across this point. -;; This is needed because the rest of the compiler is not reading to handle -;; insns this compilcated +;; This is needed because the rest of the compiler is not ready to handle +;; insns this complicated. (define_insn "save_all_interrupt" [(unspec_volatile [(const_int 0)] 0)] @@ -1249,8 +1249,8 @@ ;; Restore all registers saved when an interrupt function makes a call. ;; UNSPEC_VOLATILE is considered to use and clobber all hard registers and ;; all of memory. This blocks insns from being moved across this point. -;; This is needed because the rest of the compiler is not reading to handle -;; insns this compilcated +;; This is needed because the rest of the compiler is not ready to handle +;; insns this complicated. (define_insn "restore_all_interrupt" [(unspec_volatile [(const_int 0)] 1)] diff --git a/gcc/config/v850/xm-v850.h b/gcc/config/v850/xm-v850.h index a9f25b5faea..1e43d033f6f 100644 --- a/gcc/config/v850/xm-v850.h +++ b/gcc/config/v850/xm-v850.h @@ -34,7 +34,7 @@ Boston, MA 02111-1307, USA. */ #define SUCCESS_EXIT_CODE 0 #define FATAL_EXIT_CODE 33 -#ifdef __v850__ +#ifdef __v850 #ifndef __STDC__ extern char *malloc (), *realloc (), *calloc (); #else diff --git a/gcc/config/vax/vax.h b/gcc/config/vax/vax.h index 1d4d67ddb38..c0fe4699077 100644 --- a/gcc/config/vax/vax.h +++ b/gcc/config/vax/vax.h @@ -446,7 +446,7 @@ gen_rtx (PLUS, Pmode, frame, gen_rtx (CONST_INT, VOIDmode, 12)) /* This macro generates the assembly code for function entry. FILE is a stdio stream to output the code to. SIZE is an int: how many units of temporary storage to allocate, - adjusted by STARTING_FRAME_OFFSET to accomodate vms.h. + adjusted by STARTING_FRAME_OFFSET to accommodate vms.h. Refer to the array `regs_ever_live' to determine which registers to save; `regs_ever_live[I]' is nonzero if register number I is ever used in the function. This macro is responsible for diff --git a/gcc/config/vax/xm-vaxv.h b/gcc/config/vax/xm-vaxv.h index 18a1d73ac98..aef16f04321 100644 --- a/gcc/config/vax/xm-vaxv.h +++ b/gcc/config/vax/xm-vaxv.h @@ -1,7 +1,3 @@ /* Config file for Vax running system V. */ #define USG - -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define bcmp(a,b,c) memcmp (a,b,c) diff --git a/gcc/config/vax/xm-vms.h b/gcc/config/vax/xm-vms.h index 744c4ebcd25..ba87e656d39 100644 --- a/gcc/config/vax/xm-vms.h +++ b/gcc/config/vax/xm-vms.h @@ -22,6 +22,11 @@ Boston, MA 02111-1307, USA. */ #define FALSE 0 #define TRUE 1 +/* Other configurations get these via autoconfig. */ +#define STDC_HEADERS 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 + #if defined(VAXC) || defined(__DECC) /* if compiling with VAXC, need to fix problem with which defines a macro called FILE_TYPE that breaks "tree.h". @@ -134,12 +139,6 @@ Boston, MA 02111-1307, USA. */ #define QSORT_WORKAROUND /* do not use VAXCRTL's qsort */ /* use ANSI/SYSV style byte manipulation routines instead of BSD ones */ -#define bcopy(s,d,n) memcpy((d),(s),(n)) -#define bzero(d,n) memset((d),0,(n)) -#define bcmp(l,r,n) memcmp((l),(r),(n)) -#define index strchr -#define rindex strrchr - /* rename all too-long external symbol names to avoid warnings */ #define bc_check_for_full_enumeration_handling bc_check_for_full_enum_handling #define check_for_full_enumeration_handling check_for_full_enum_handling @@ -162,6 +161,7 @@ Boston, MA 02111-1307, USA. */ #define get_dynamic_handler_chain_libfunc get_dynamic_hndlr_chain_libfunc #define lookup_name_current_level_global lookup_name_current_level_gbl #define maybe_building_objc_message_expr maybe_building_objc_msg_expr +#define mesg_implicit_function_declaration mesg_implicit_func_declaration #define output_deferred_addressed_constants output_deferred_addr_constants #define protect_cleanup_actions_with_terminate protect_cleanup_act_w_terminate #define reg_overlap_mentioned_for_reload_p reg_overlap_mtnd_for_reload_p diff --git a/gcc/config/winnt/config-nt.sed b/gcc/config/winnt/config-nt.sed index ee0088ad818..3e3f86dfd98 100644 --- a/gcc/config/winnt/config-nt.sed +++ b/gcc/config/winnt/config-nt.sed @@ -13,7 +13,7 @@ s/$(srcdir)\/c-gperf/c-gperf/g /^lang_specs_files=/ d /^lang_options_files=/ d /^version=/ c\ -version=2.7.2 +version=2.8.0 s/CC = cc/CC = cl/ s/^SHELL =.*/SHELL =/ s/CFLAGS = -g/CFLAGS =/ diff --git a/gcc/config/winnt/win-nt.h b/gcc/config/winnt/win-nt.h index 62a27a1f6a1..14f3f87bcdb 100644 --- a/gcc/config/winnt/win-nt.h +++ b/gcc/config/winnt/win-nt.h @@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */ #define LINK_SPEC "-stack 5000000,5000000 -noinhibit-exec %{g}" #undef CPP_SPEC -#define CPP_SPEC "-lang-c-c++-comments" +#define CPP_SPEC "" #undef STANDARD_EXEC_PREFIX #define STANDARD_EXEC_PREFIX "" diff --git a/gcc/config/winnt/xm-winnt.h b/gcc/config/winnt/xm-winnt.h index be62d020138..f56073cb8de 100644 --- a/gcc/config/winnt/xm-winnt.h +++ b/gcc/config/winnt/xm-winnt.h @@ -1,5 +1,5 @@ /* Configuration for GNU compiler for processor running Windows NT 3.x. - Copyright (C) 1993, 1995 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc. Contributed by Douglas B. Rupp (drupp@cs.washington.edu) This file is part of GNU CC. @@ -42,11 +42,6 @@ Boston, MA 02111-1307, USA. */ #endif #define NO_SYS_SIGLIST 1 -#define bcmp(a,b,c) memcmp (a,b,c) -#define bcopy(a,b,c) memcpy (b,a,c) -#define bzero(a,b) memset (a,0,b) -#define index strchr -#define rindex strrchr #define kill(a,b) raise(b) #define OBJECT_SUFFIX ".obj" @@ -66,4 +61,3 @@ Boston, MA 02111-1307, USA. */ #define S_IRWXU S_IRUSR | S_IWUSR | S_IXUSR #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) - diff --git a/gcc/config/xm-linux.h b/gcc/config/xm-linux.h index 4baa426979d..9a3838b7d7f 100644 --- a/gcc/config/xm-linux.h +++ b/gcc/config/xm-linux.h @@ -1,4 +1,4 @@ -/* Configuration for GCC for Intel i386 running Linux. +/* Configuration for GCC for Intel i386 running Linux-based GNU systems. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by H.J. Lu (hjl@nynexst.com) @@ -19,15 +19,6 @@ 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. */ -#undef HAVE_VPRINTF -#define HAVE_VPRINTF - -#undef HAVE_POPEN -#define HAVE_POPEN - -#undef HAVE_PUTENV -#define HAVE_PUTENV - #undef HAVE_ATEXIT #define HAVE_ATEXIT @@ -40,8 +31,3 @@ Boston, MA 02111-1307, USA. */ #undef BSTRING #define BSTRING -#undef bcmp -#undef bcopy -#undef bzero -#undef index -#undef rindex diff --git a/gcc/config/xm-svr3.h b/gcc/config/xm-svr3.h index ac1000fb1cb..6f252505252 100644 --- a/gcc/config/xm-svr3.h +++ b/gcc/config/xm-svr3.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for hosts running System V Release 3 - Copyright (C) 1991, 1993 Free Software Foundation, Inc. + Copyright (C) 1991, 1993, 1996 Free Software Foundation, Inc. This file is part of GNU CC. @@ -18,15 +18,7 @@ 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 bcopy(src,dst,len) memcpy ((dst),(src),(len)) -#define bzero(dst,len) memset ((dst),0,(len)) -#define bcmp(left,right,len) memcmp ((left),(right),(len)) - -#define rindex strrchr -#define index strchr - #define USG -#define HAVE_VPRINTF #ifndef SVR3 #define SVR3 diff --git a/gcc/config/xm-svr4.h b/gcc/config/xm-svr4.h index 49a751d92dd..8534aaa75a1 100644 --- a/gcc/config/xm-svr4.h +++ b/gcc/config/xm-svr4.h @@ -1,5 +1,5 @@ /* Configuration for GNU C-compiler for hosts running System V Release 4 - Copyright (C) 1988 Free Software Foundation, Inc. + Copyright (C) 1988, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -18,15 +18,7 @@ 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 bcopy(src,dst,len) memcpy ((dst),(src),(len)) -#define bzero(dst,len) memset ((dst),0,(len)) -#define bcmp(left,right,len) memcmp ((left),(right),(len)) - -#define rindex strrchr -#define index strchr - #define USG -#define HAVE_VPRINTF #define POSIX diff --git a/gcc/configure b/gcc/configure index 88074124b5b..9548b878078 100755 --- a/gcc/configure +++ b/gcc/configure @@ -1266,39 +1266,765 @@ else fi echo "$ac_t""$CPP" 1>&6 -for ac_hdr in inttypes.h limits.h stddef.h string.h strings.h stdlib.h time.h unistd.h +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1271: 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 < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +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 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +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 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 +echo "configure:1375: 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 < +#include +#include +int main() { +struct tm *tp; +; return 0; } +EOF +if { (eval echo configure:1389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_time=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_time=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_time" 1>&6 +if test $ac_cv_header_time = yes; then + cat >> confdefs.h <<\EOF +#define TIME_WITH_SYS_TIME 1 +EOF + +fi + +for ac_hdr in 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 +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1413: 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 +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1423: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +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 <&6 +fi +done + + +# Use only if it exists, +# doesn't clash with , and declares intmax_t. +echo $ac_n "checking for inttypes.h""... $ac_c" 1>&6 +echo "configure:1453: 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 < +#include +int main() { +intmax_t i = -1; +; return 0; } +EOF +if { (eval echo configure:1466: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + gcc_cv_header_inttypes_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gcc_cv_header_inttypes_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$gcc_cv_header_inttypes_h" 1>&6 +if test $gcc_cv_header_inttypes_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_INTTYPES_H 1 +EOF + +fi + +for ac_func in strerror +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1489: 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 < +/* 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:1517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in putenv +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1544: 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 < +/* 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:1572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in popen +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1599: 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 < +/* 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:1627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in vprintf +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1654: 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 < +/* 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:1682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in bcopy +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1709: 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 < +/* 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:1737: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in bzero +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1764: 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 < +/* 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:1792: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in bcmp +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1819: 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 < +/* 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:1847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in index +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1874: 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 < +/* 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:1902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in rindex +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1929: 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 < +/* 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:1957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 <&6 +fi +done + +for ac_func in kill do -ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1274: checking for $ac_hdr" >&5 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:1984: 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 < +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include +/* 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 -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then +if { (eval echo configure:2012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" + eval "ac_cv_func_$ac_func=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" + eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 -echo "configure:1312: checking whether malloc must be declared" >&5 +echo "configure:2038: checking whether malloc must be declared" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_needed_malloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1330,11 +2056,17 @@ else #ifdef HAVE_UNISTD_H #include #endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { char *(*pfn) = (char *(*)) malloc ; return 0; } EOF -if { (eval echo configure:1338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2070: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_needed_malloc=no else @@ -1356,12 +2088,12 @@ EOF fi echo $ac_n "checking whether realloc must be declared""... $ac_c" 1>&6 -echo "configure:1360: checking whether realloc must be declared" >&5 +echo "configure:2092: checking whether realloc must be declared" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_needed_realloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1378,11 +2110,17 @@ else #ifdef HAVE_UNISTD_H #include #endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { char *(*pfn) = (char *(*)) realloc ; return 0; } EOF -if { (eval echo configure:1386: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2124: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_needed_realloc=no else @@ -1404,12 +2142,12 @@ EOF fi echo $ac_n "checking whether calloc must be declared""... $ac_c" 1>&6 -echo "configure:1408: checking whether calloc must be declared" >&5 +echo "configure:2146: checking whether calloc must be declared" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_needed_calloc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1426,11 +2164,17 @@ else #ifdef HAVE_UNISTD_H #include #endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { char *(*pfn) = (char *(*)) calloc ; return 0; } EOF -if { (eval echo configure:1434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2178: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_needed_calloc=no else @@ -1452,12 +2196,12 @@ EOF fi echo $ac_n "checking whether free must be declared""... $ac_c" 1>&6 -echo "configure:1456: checking whether free must be declared" >&5 +echo "configure:2200: checking whether free must be declared" >&5 if eval "test \"`echo '$''{'gcc_cv_decl_needed_free'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1474,11 +2218,17 @@ else #ifdef HAVE_UNISTD_H #include #endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { char *(*pfn) = (char *(*)) free ; return 0; } EOF -if { (eval echo configure:1482: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* gcc_cv_decl_needed_free=no else @@ -1499,100 +2249,206 @@ EOF fi - -echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 -echo "configure:1505: checking for sys_siglist declaration in signal.h or unistd.h" >&5 -if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then +echo $ac_n "checking whether index must be declared""... $ac_c" 1>&6 +echo "configure:2254: checking whether index must be declared" >&5 +if eval "test \"`echo '$''{'gcc_cv_decl_needed_index'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < -#include -/* NetBSD declares sys_siglist in unistd.h. */ + +#include +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif +#ifdef HAVE_STDLIB_H +#include +#endif #ifdef HAVE_UNISTD_H #include #endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { -char *msg = *(sys_siglist + 1); +char *(*pfn) = (char *(*)) index ; return 0; } EOF -if { (eval echo configure:1522: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2286: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* - ac_cv_decl_sys_siglist=yes + gcc_cv_decl_needed_index=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* - ac_cv_decl_sys_siglist=no + gcc_cv_decl_needed_index=yes fi rm -f conftest* fi -echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6 -if test $ac_cv_decl_sys_siglist = yes; then - cat >> confdefs.h <<\EOF -#define SYS_SIGLIST_DECLARED 1 +echo "$ac_t""$gcc_cv_decl_needed_index" 1>&6 +if test $gcc_cv_decl_needed_index = yes; then + gcc_tr_decl=NEED_DECLARATION_`echo index | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 -echo "configure:1546: checking for $ac_func" >&5 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then +echo $ac_n "checking whether rindex must be declared""... $ac_c" 1>&6 +echo "configure:2308: checking whether rindex must be declared" >&5 +if eval "test \"`echo '$''{'gcc_cv_decl_needed_rindex'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < -/* 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 +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif int main() { +char *(*pfn) = (char *(*)) rindex +; return 0; } +EOF +if { (eval echo configure:2340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + gcc_cv_decl_needed_rindex=no +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gcc_cv_decl_needed_rindex=yes +fi +rm -f conftest* +fi -/* 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 +echo "$ac_t""$gcc_cv_decl_needed_rindex" 1>&6 +if test $gcc_cv_decl_needed_rindex = yes; then + gcc_tr_decl=NEED_DECLARATION_`echo rindex | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +echo "configure:2362: checking whether getenv must be declared" >&5 +if eval "test \"`echo '$''{'gcc_cv_decl_needed_getenv'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#ifdef HAVE_STRING_H +#include #else -$ac_func(); +#ifdef HAVE_STRINGS_H +#include #endif - +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif +#ifndef HAVE_INDEX +#define index strchr +#endif +int main() { +char *(*pfn) = (char *(*)) getenv ; return 0; } EOF -if { (eval echo configure:1574: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2394: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" + gcc_cv_decl_needed_getenv=no else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* - eval "ac_cv_func_$ac_func=no" + gcc_cv_decl_needed_getenv=yes 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'` +echo "$ac_t""$gcc_cv_decl_needed_getenv" 1>&6 +if test $gcc_cv_decl_needed_getenv = yes; then + gcc_tr_decl=NEED_DECLARATION_`echo getenv | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 +echo "configure:2417: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else - echo "$ac_t""no" 1>&6 + cat > conftest.$ac_ext < +#include +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +#include +#endif +int main() { +char *msg = *(sys_siglist + 1); +; return 0; } +EOF +if { (eval echo configure:2434: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_decl_sys_siglist=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_decl_sys_siglist=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_decl_sys_siglist" 1>&6 +if test $ac_cv_decl_sys_siglist = yes; then + cat >> confdefs.h <<\EOF +#define SYS_SIGLIST_DECLARED 1 +EOF + fi -done # File extensions @@ -1846,9 +2702,8 @@ for machine in $build $host $target; do tmake_file="t-netbsd arm/t-netbsd" # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math - use_collect2=yes ;; - arm-*-linux-gnuaout*) # ARM Linux + arm-*-linux-gnuaout*) # ARM GNU/Linux cpu_type=arm xm_file=arm/xm-linux.h xmake_file=x-linux @@ -2183,7 +3038,6 @@ for machine in $build $host $target; do ;; i[3456]86-*-freebsdelf*) tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h" - xm_file=i386/xm-freebsd.h # On FreeBSD, the headers are already ok, except for math.h. fixincludes=fixinc.math tmake_file=i386/t-freebsd @@ -2193,14 +3047,12 @@ for machine in $build $host $target; do ;; i[3456]86-*-freebsd*) tm_file=i386/freebsd.h - xm_file=i386/xm-freebsd.h # On FreeBSD, the headers are already ok, except for math.h. fixincludes=fixinc.math tmake_file=i386/t-freebsd ;; i[3456]86-*-netbsd*) tm_file=i386/netbsd.h - xm_file=i386/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2232,44 +3084,44 @@ for machine in $build $host $target; do install_headers_dir=install-headers-cpio broken_install=yes ;; - i[3456]86-*-linux-gnuoldld*) # Intel 80386's running Linux + i[3456]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers xmake_file=x-linux-aout tmake_file="t-linux-aout i386/t-crtstuff" tm_file=i386/linux-oldld.h - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in broken_install=yes gnu_ld=yes ;; - i[3456]86-*-linux-gnuaout*) # Intel 80386's running Linux + i[3456]86-*-linux-gnuaout*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format xmake_file=x-linux-aout tmake_file="t-linux-aout i386/t-crtstuff" tm_file=i386/linux-aout.h - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in #The headers are ok already. broken_install=yes gnu_ld=yes ;; i[3456]86-*-linux-gnulibc1) - xm_file=i386/xm-linux.h # Intel 80386's running Linux + xm_file=i386/xm-linux.h # Intel 80386's running GNU/Linux xmake_file=x-linux # with ELF format using the - tm_file=i386/linux.h # Linux C library 5 + tm_file=i386/linux.h # GNU/Linux C library 5 tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [ x$enable_threads = xyes ]; then thread_file='single' fi ;; - i[3456]86-*-linux-gnu*) # Intel 80386's running Linux + i[3456]86-*-linux-gnu*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with ELF format using glibc 2 - xmake_file=x-linux # aka Linux C library 6 + xmake_file=x-linux # aka GNU/Linux C library 6 tm_file=i386/linux.h tmake_file="t-linux i386/t-crtstuff" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [ x$enable_threads = xyes ]; then @@ -2482,7 +3334,7 @@ for machine in $build $host $target; do ;; i860-alliant-*) # Alliant FX/2800 tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h" - xm_file="${xm_file} i860/xm-fx2800.h" + xm_file="${xm_file}" xmake_file=i860/x-fx2800 tmake_file=i860/t-fx2800 extra_parts="crtbegin.o crtend.o" @@ -2689,7 +3541,7 @@ for machine in $build $host $target; do ;; m68k-ncr-sysv*) # NCR Tower 32 SVR3 tm_file=m68k/tower-as.h - xm_file=m68k/xm-tower.h + xm_file="${xm_file} xm-svr3.h" xmake_file=m68k/x-tower extra_parts="crtbegin.o crtend.o" extra_headers=math-68881.h @@ -2841,7 +3693,6 @@ for machine in $build $host $target; do else tm_file=m68k/sun3.h fi - xm_file=m68k/xm-sun3.h use_collect2=yes extra_headers=math-68881.h ;; @@ -2874,7 +3725,6 @@ for machine in $build $host $target; do ;; m68k-*-netbsd*) tm_file=m68k/netbsd.h - xm_file=m68k/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2892,32 +3742,32 @@ for machine in $build $host $target; do extra_parts="crtbegin.o crtend.o" extra_headers=math-68881.h ;; - m68k-*-linux-gnuaout*) # Motorola m68k's running Linux + m68k-*-linux-gnuaout*) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with a.out format xmake_file=x-linux tm_file=m68k/linux-aout.h tmake_file="t-linux-aout m68k/t-linux-aout" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes ;; - m68k-*-linux-gnulibc1) # Motorola m68k's running Linux + m68k-*-linux-gnulibc1) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with ELF format using the - xmake_file=x-linux # Linux C library 5 + xmake_file=x-linux # GNU/Linux C library 5 tm_file=m68k/linux.h tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes ;; - m68k-*-linux-gnu*) # Motorola m68k's running Linux + m68k-*-linux-gnu*) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with ELF format using glibc 2 - xmake_file=x-linux # aka the Linux C library 6. + xmake_file=x-linux # aka the GNU/Linux C library 6. tm_file=m68k/linux.h tmake_file="t-linux m68k/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes if [ x$enable_threads = xyes ]; then @@ -3181,7 +4031,6 @@ for machine in $build $host $target; do ;; mips-dec-netbsd*) # Decstation running NetBSD tm_file=mips/netbsd.h - xm_file=mips/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -3525,7 +4374,6 @@ for machine in $build $host $target; do ;; ns32k-pc532-netbsd*) tm_file=ns32k/netbsd.h - xm_file=ns32k/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -3755,7 +4603,6 @@ for machine in $build $host $target; do ;; sparc-*-netbsd*) tm_file=sparc/netbsd.h - xm_file=sparc/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -3764,35 +4611,37 @@ for machine in $build $host $target; do tm_file=sparc/bsd.h ;; sparc-*-elf*) - tm_file="sparc/sol2.h libgloss.h" - tmake_file=sparc/t-sparcbare - float_format=i128 + tm_file=sparc/elf.h + tmake_file=sparc/t-elf + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + #float_format=i128 + float_format=i64 ;; - sparc-*-linux-gnuaout*) # Sparc's running Linux, a.out + sparc-*-linux-gnuaout*) # Sparc's running GNU/Linux, a.out xm_file="sparc/xm-sparc.h sparc/xm-linux.h" tm_file=sparc/linux-aout.h xmake_file=x-linux - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes ;; - sparc-*-linux-gnulibc1*) # Sparc's running Linux, libc5 + sparc-*-linux-gnulibc1*) # Sparc's running GNU/Linux, libc5 xm_file="sparc/xm-sparc.h sparc/xm-linux.h" xmake_file=x-linux tm_file=sparc/linux.h tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes ;; - sparc-*-linux-gnu*) # Sparc's running Linux, libc6 + sparc-*-linux-gnu*) # Sparc's running GNU/Linux, libc6 xm_file="sparc/xm-sparc.h sparc/xm-linux.h" xmake_file=x-linux tm_file=sparc/linux.h tmake_file="t-linux sparc/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [ x$enable_threads = xyes ]; then @@ -3878,12 +4727,12 @@ for machine in $build $host $target; do tm_file=sparc/sp64-elf.h extra_parts="crtbegin.o crtend.o" ;; - sparc64-*-linux*) # 64-bit Sparc's running Linux + sparc64-*-linux*) # 64-bit Sparc's running GNU/Linux tmake_file=sparc/t-sp64 xm_file="sparc/xm-sp64.h sparc/xm-linux.h" tm_file=sparc/linux64.h xmake_file=x-linux - fixincludes=Makefile.in # On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. gnu_ld=yes ;; # This hasn't been upgraded to GCC 2. @@ -3913,12 +4762,11 @@ for machine in $build $host $target; do ;; vax-*-sysv*) # vaxen running system V tm_file="${tm_file} vax/vaxv.h" - xm_file="${tm_file} vax/xm-vaxv.h" + xm_file="${xm_file} vax/xm-vaxv.h" float_format=vax ;; vax-*-netbsd*) tm_file="${tm_file} netbsd.h vax/netbsd.h" - xm_file="${xm_file} xm-netbsd.h" # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -4019,6 +4867,37 @@ for machine in $build $host $target; do fi fi ;; + arm*-*-*) + case "x$with_cpu" in + x) + # The most generic + target_cpu_default2="TARGET_CPU_generic" + ;; + + # Distinguish cores, and major variants + # arm7m doesn't exist, but D & I don't affect code + xarm23678 | xarm250 | xarm67010 \ + | xarm7m | xarm7dm | xarm7dmi | xarm7tdmi \ + | xarm7100 | xarm7500 | xarm7500fe | xarm810 \ + | xstrongarm | xstrongarm110) + target_cpu_default2="TARGET_CPU_$with_cpu" + ;; + + xyes | xno) + echo "--with-cpu must be passed a value" 1>&2 + exit 1 + ;; + + *) + if [ x$pass2done = xyes ] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi + ;; + esac + ;; + mips*-*-ecoff* | mips*-*-elf*) if [ x$gas = xyes ] then @@ -4054,8 +4933,11 @@ for machine in $build $host $target; do ;; *) - echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 - exit 1 + if [ x$pass2done = xyes ] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi ;; esac ;; @@ -4064,12 +4946,15 @@ for machine in $build $host $target; do .) target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`" ;; - .supersparc | .ultrasparc | .v7 | .v8) + .supersparc | .ultrasparc | .v7 | .v8 | .v9) target_cpu_default2="TARGET_CPU_$with_cpu" ;; *) - echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 - exit 1 + if [ x$pass2done = xyes ] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi ;; esac ;; @@ -4625,7 +5510,7 @@ EOF # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | - case `(ac_space=' '; set) 2>&1` in + case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). diff --git a/gcc/configure.in b/gcc/configure.in index f2b8ea75129..3dcf22dbca2 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -132,17 +132,46 @@ AC_PROG_RANLIB AC_PROG_YACC AC_PROG_INSTALL -AC_CHECK_HEADERS(inttypes.h limits.h stddef.h string.h strings.h stdlib.h time.h unistd.h) +AC_HEADER_STDC +AC_HEADER_TIME +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) + +# Use only if it exists, +# doesn't clash with , and declares intmax_t. +AC_MSG_CHECKING(for inttypes.h) +AC_CACHE_VAL(gcc_cv_header_inttypes_h, +[AC_TRY_COMPILE( + [#include +#include ], + [intmax_t i = -1;], + gcc_cv_header_inttypes_h=yes, + gcc_cv_header_inttypes_h=no)]) +AC_MSG_RESULT($gcc_cv_header_inttypes_h) +if test $gcc_cv_header_inttypes_h = yes; then + AC_DEFINE(HAVE_INTTYPES_H) +fi + +AC_CHECK_FUNCS(strerror) +AC_CHECK_FUNCS(putenv) +AC_CHECK_FUNCS(popen) +AC_CHECK_FUNCS(vprintf) +AC_CHECK_FUNCS(bcopy) +AC_CHECK_FUNCS(bzero) +AC_CHECK_FUNCS(bcmp) +AC_CHECK_FUNCS(index) +AC_CHECK_FUNCS(rindex) +AC_CHECK_FUNCS(kill) GCC_NEED_DECLARATION(malloc) GCC_NEED_DECLARATION(realloc) GCC_NEED_DECLARATION(calloc) GCC_NEED_DECLARATION(free) +GCC_NEED_DECLARATION(index) +GCC_NEED_DECLARATION(rindex) +GCC_NEED_DECLARATION(getenv) AC_DECL_SYS_SIGLIST -AC_CHECK_FUNCS(strerror) - # File extensions manext='.1' objext='.o' @@ -394,9 +423,8 @@ for machine in $build $host $target; do tmake_file="t-netbsd arm/t-netbsd" # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math - use_collect2=yes ;; - arm-*-linux-gnuaout*) # ARM Linux + arm-*-linux-gnuaout*) # ARM GNU/Linux cpu_type=arm xm_file=arm/xm-linux.h xmake_file=x-linux @@ -731,7 +759,6 @@ for machine in $build $host $target; do ;; i[[3456]]86-*-freebsdelf*) tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h" - xm_file=i386/xm-freebsd.h # On FreeBSD, the headers are already ok, except for math.h. fixincludes=fixinc.math tmake_file=i386/t-freebsd @@ -741,14 +768,12 @@ for machine in $build $host $target; do ;; i[[3456]]86-*-freebsd*) tm_file=i386/freebsd.h - xm_file=i386/xm-freebsd.h # On FreeBSD, the headers are already ok, except for math.h. fixincludes=fixinc.math tmake_file=i386/t-freebsd ;; i[[3456]]86-*-netbsd*) tm_file=i386/netbsd.h - xm_file=i386/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -780,44 +805,44 @@ for machine in $build $host $target; do install_headers_dir=install-headers-cpio broken_install=yes ;; - i[[3456]]86-*-linux-gnuoldld*) # Intel 80386's running Linux + i[[3456]]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers xmake_file=x-linux-aout tmake_file="t-linux-aout i386/t-crtstuff" tm_file=i386/linux-oldld.h - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in broken_install=yes gnu_ld=yes ;; - i[[3456]]86-*-linux-gnuaout*) # Intel 80386's running Linux + i[[3456]]86-*-linux-gnuaout*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format xmake_file=x-linux-aout tmake_file="t-linux-aout i386/t-crtstuff" tm_file=i386/linux-aout.h - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in #The headers are ok already. broken_install=yes gnu_ld=yes ;; i[[3456]]86-*-linux-gnulibc1) - xm_file=i386/xm-linux.h # Intel 80386's running Linux + xm_file=i386/xm-linux.h # Intel 80386's running GNU/Linux xmake_file=x-linux # with ELF format using the - tm_file=i386/linux.h # Linux C library 5 + tm_file=i386/linux.h # GNU/Linux C library 5 tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [[ x$enable_threads = xyes ]]; then thread_file='single' fi ;; - i[[3456]]86-*-linux-gnu*) # Intel 80386's running Linux + i[[3456]]86-*-linux-gnu*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with ELF format using glibc 2 - xmake_file=x-linux # aka Linux C library 6 + xmake_file=x-linux # aka GNU/Linux C library 6 tm_file=i386/linux.h tmake_file="t-linux i386/t-crtstuff" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [[ x$enable_threads = xyes ]]; then @@ -1030,7 +1055,7 @@ for machine in $build $host $target; do ;; i860-alliant-*) # Alliant FX/2800 tm_file="${tm_file} svr4.h i860/sysv4.h i860/fx2800.h" - xm_file="${xm_file} i860/xm-fx2800.h" + xm_file="${xm_file}" xmake_file=i860/x-fx2800 tmake_file=i860/t-fx2800 extra_parts="crtbegin.o crtend.o" @@ -1237,7 +1262,7 @@ for machine in $build $host $target; do ;; m68k-ncr-sysv*) # NCR Tower 32 SVR3 tm_file=m68k/tower-as.h - xm_file=m68k/xm-tower.h + xm_file="${xm_file} xm-svr3.h" xmake_file=m68k/x-tower extra_parts="crtbegin.o crtend.o" extra_headers=math-68881.h @@ -1389,7 +1414,6 @@ for machine in $build $host $target; do else tm_file=m68k/sun3.h fi - xm_file=m68k/xm-sun3.h use_collect2=yes extra_headers=math-68881.h ;; @@ -1422,7 +1446,6 @@ for machine in $build $host $target; do ;; m68k-*-netbsd*) tm_file=m68k/netbsd.h - xm_file=m68k/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -1440,32 +1463,32 @@ for machine in $build $host $target; do extra_parts="crtbegin.o crtend.o" extra_headers=math-68881.h ;; - m68k-*-linux-gnuaout*) # Motorola m68k's running Linux + m68k-*-linux-gnuaout*) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with a.out format xmake_file=x-linux tm_file=m68k/linux-aout.h tmake_file="t-linux-aout m68k/t-linux-aout" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes ;; - m68k-*-linux-gnulibc1) # Motorola m68k's running Linux + m68k-*-linux-gnulibc1) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with ELF format using the - xmake_file=x-linux # Linux C library 5 + xmake_file=x-linux # GNU/Linux C library 5 tm_file=m68k/linux.h tmake_file="t-linux t-linux-gnulibc1 m68k/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes ;; - m68k-*-linux-gnu*) # Motorola m68k's running Linux + m68k-*-linux-gnu*) # Motorola m68k's running GNU/Linux xm_file=m68k/xm-linux.h # with ELF format using glibc 2 - xmake_file=x-linux # aka the Linux C library 6. + xmake_file=x-linux # aka the GNU/Linux C library 6. tm_file=m68k/linux.h tmake_file="t-linux m68k/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. extra_headers=math-68881.h gnu_ld=yes if [[ x$enable_threads = xyes ]]; then @@ -1729,7 +1752,6 @@ for machine in $build $host $target; do ;; mips-dec-netbsd*) # Decstation running NetBSD tm_file=mips/netbsd.h - xm_file=mips/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2073,7 +2095,6 @@ for machine in $build $host $target; do ;; ns32k-pc532-netbsd*) tm_file=ns32k/netbsd.h - xm_file=ns32k/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2303,7 +2324,6 @@ for machine in $build $host $target; do ;; sparc-*-netbsd*) tm_file=sparc/netbsd.h - xm_file=sparc/xm-netbsd.h # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2312,35 +2332,37 @@ for machine in $build $host $target; do tm_file=sparc/bsd.h ;; sparc-*-elf*) - tm_file="sparc/sol2.h libgloss.h" - tmake_file=sparc/t-sparcbare - float_format=i128 + tm_file=sparc/elf.h + tmake_file=sparc/t-elf + extra_parts="crti.o crtn.o crtbegin.o crtend.o" + #float_format=i128 + float_format=i64 ;; - sparc-*-linux-gnuaout*) # Sparc's running Linux, a.out + sparc-*-linux-gnuaout*) # Sparc's running GNU/Linux, a.out xm_file="sparc/xm-sparc.h sparc/xm-linux.h" tm_file=sparc/linux-aout.h xmake_file=x-linux - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes ;; - sparc-*-linux-gnulibc1*) # Sparc's running Linux, libc5 + sparc-*-linux-gnulibc1*) # Sparc's running GNU/Linux, libc5 xm_file="sparc/xm-sparc.h sparc/xm-linux.h" xmake_file=x-linux tm_file=sparc/linux.h tmake_file="t-linux t-linux-gnulibc1 sparc/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes ;; - sparc-*-linux-gnu*) # Sparc's running Linux, libc6 + sparc-*-linux-gnu*) # Sparc's running GNU/Linux, libc6 xm_file="sparc/xm-sparc.h sparc/xm-linux.h" xmake_file=x-linux tm_file=sparc/linux.h tmake_file="t-linux sparc/t-linux" extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" - fixincludes=Makefile.in #On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. broken_install=yes gnu_ld=yes if [[ x$enable_threads = xyes ]]; then @@ -2426,12 +2448,12 @@ for machine in $build $host $target; do tm_file=sparc/sp64-elf.h extra_parts="crtbegin.o crtend.o" ;; - sparc64-*-linux*) # 64-bit Sparc's running Linux + sparc64-*-linux*) # 64-bit Sparc's running GNU/Linux tmake_file=sparc/t-sp64 xm_file="sparc/xm-sp64.h sparc/xm-linux.h" tm_file=sparc/linux64.h xmake_file=x-linux - fixincludes=Makefile.in # On Linux, the headers are ok already. + fixincludes=Makefile.in # The headers are ok already. gnu_ld=yes ;; # This hasn't been upgraded to GCC 2. @@ -2461,12 +2483,11 @@ for machine in $build $host $target; do ;; vax-*-sysv*) # vaxen running system V tm_file="${tm_file} vax/vaxv.h" - xm_file="${tm_file} vax/xm-vaxv.h" + xm_file="${xm_file} vax/xm-vaxv.h" float_format=vax ;; vax-*-netbsd*) tm_file="${tm_file} netbsd.h vax/netbsd.h" - xm_file="${xm_file} xm-netbsd.h" # On NetBSD, the headers are already okay, except for math.h. fixincludes=fixinc.math tmake_file=t-netbsd @@ -2567,6 +2588,37 @@ for machine in $build $host $target; do fi fi ;; + arm*-*-*) + case "x$with_cpu" in + x) + # The most generic + target_cpu_default2="TARGET_CPU_generic" + ;; + + # Distinguish cores, and major variants + # arm7m doesn't exist, but D & I don't affect code + xarm[23678] | xarm250 | xarm[67][01]0 \ + | xarm7m | xarm7dm | xarm7dmi | xarm7tdmi \ + | xarm7100 | xarm7500 | xarm7500fe | xarm810 \ + | xstrongarm | xstrongarm110) + target_cpu_default2="TARGET_CPU_$with_cpu" + ;; + + xyes | xno) + echo "--with-cpu must be passed a value" 1>&2 + exit 1 + ;; + + *) + if [[ x$pass2done = xyes ]] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi + ;; + esac + ;; + mips*-*-ecoff* | mips*-*-elf*) if [[ x$gas = xyes ]] then @@ -2602,8 +2654,11 @@ for machine in $build $host $target; do ;; *) - echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 - exit 1 + if [[ x$pass2done = xyes ]] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi ;; esac ;; @@ -2612,12 +2667,15 @@ for machine in $build $host $target; do .) target_cpu_default2=TARGET_CPU_"`echo $machine | sed 's/-.*$//'`" ;; - .supersparc | .ultrasparc | .v7 | .v8) + .supersparc | .ultrasparc | .v7 | .v8 | .v9) target_cpu_default2="TARGET_CPU_$with_cpu" ;; *) - echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 - exit 1 + if [[ x$pass2done = xyes ]] + then + echo "Unknown cpu used with --with-cpu=$with_cpu" 1>&2 + exit 1 + fi ;; esac ;; diff --git a/gcc/configure.lang b/gcc/configure.lang index 8f25898062d..df28127fb89 100644 --- a/gcc/configure.lang +++ b/gcc/configure.lang @@ -1,6 +1,6 @@ # configure.lang for GNU CC # This script is run by configure for configuration of language -# subdirectories which conform to the old GCC configure mechansim +# subdirectories which conform to the old GCC configure mechanism # for such subdirectories. # Copyright (C) 1997 Free Software Foundation, Inc. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a5729dfda62..03f3806071d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,11 +1,585 @@ -Sun Oct 19 09:13:01 1997 Richard Kenner +Wed Dec 3 08:47:27 1997 Paul Eggert + + * pt.c (check_explicit_specialization): Fix misspelling in + diagnostic: `preceeded'. + * typeck.c (get_delta_difference): Fix misspelling in diagnostic: + `conversiona'. + +Sun Nov 30 08:42:29 1997 Bruno Haible + + * pt.c (do_poplevel): Allow jumps into the block. + +Fri Nov 28 12:35:19 1997 Scott Christley + + * repo.c: Prototype rindex only if needed. + * xref.c: Likewise. + +Thu Nov 27 08:26:56 1997 Jason Merrill + + * except.c (expand_start_catch_block): We only need the rethrow + region for non-sjlj exceptions. + (expand_end_catch_block): Likewise. Use outer_context_label_stack. + +Wed Nov 26 15:13:48 1997 Jeffrey A Law (law@cygnus.com) + + * lex.c (lang_init): Enable flag_exceptions by default if no + command line switch was specified. + +Mon Nov 24 12:15:55 1997 Jason Merrill + + * exception.cc (struct cp_eh_info): Add handlers field. + (__cp_push_exception): Initialize it. + (__cp_pop_exception): Decrement it. Don't pop unless it's 0. + (__throw_bad_exception): Remove. + * except.c (call_eh_info): Add handlers field. + (get_eh_handlers): New fn. + (push_eh_cleanup): Increment handlers. + +Mon Nov 17 02:01:28 1997 Jason Merrill + + * friend.c (do_friend): Warn about non-template friends in templates. + + * search.c (dfs_record_inheritance): Ignore template type parms. + +Wed Nov 12 08:11:55 1997 Benjamin Kosnik + + * call.c (build_method_call): Call complete_type before checking + for destructor. + +Tue Nov 11 12:02:12 1997 Jason Merrill + + * except.c (expand_end_catch_block): Lose call to __sjpopnthrow. + +Tue Nov 11 02:53:44 1997 Jason Merrill + + * except.c (do_pop_exception): Return a value. + +Mon Nov 10 03:04:20 1997 Jason Merrill + + Complete nested exception support. + * except.c (do_pop_exception): Split out... + (push_eh_cleanup): From here. Handle the EH region by hand. + (expand_start_catch_block): Add a new level for the catch parm. + Move the rethrow region outside the two cleanup regions. + Protect the initializer for the catch parm with terminate. + (expand_end_catch_block): Likewise. End the region for the eh_cleanup. + * exception.cc (__cp_pop_exception): Now takes two parms. Handle + popping off the middle of the stack. + * tree.c (lvalue_p, real_lvalue_p): Handle TRY_CATCH_EXPR, + WITH_CLEANUP_EXPR, and UNSAVE_EXPR. + (build_cplus_new): Only wrap CALL_EXPRs. + * init.c (expand_default_init): Handle a TRY_CATCH_EXPR around + the constructor call. + +Sun Nov 9 18:00:26 1997 Richard Kenner + + * Make-lang.in (c++.distdir): Make inc subdirectory. + +Fri Nov 7 11:57:28 1997 Jason Merrill + + * decl2.c (finish_file): Put back some code. + +Thu Nov 6 11:28:14 1997 Jason Merrill + + * decl2.c (finish_file): Remove redundant code. + * method.c (emit_thunk): Don't let the backend defer generic thunks. + +Wed Nov 5 23:52:50 1997 Jason Merrill + + * except.c (call_eh_info): Split out... + (push_eh_info): From here. + (expand_builtin_throw): Use it. + (expand_start_catch_block): Move region start back. + +Tue Nov 4 13:45:10 1997 Doug Evans + + * lex.c (MULTIBYTE_CHARS): #undef if cross compiling. + (real_yylex): Record wide strings using target endianness, not host. + +1997-11-03 Brendan Kehoe + + * repo.c (rindex): Add decl unconditionally. + (get_base_filename, open_repo_file): Don't cast rindex. + * xref.c (rindex): Add decl unconditionally. + (index): Remove unused decl. + (open_xref_file): Don't cast rindex. + +Sun Nov 2 15:04:12 1997 Jason Merrill + + * class.c (build_vbase_path): Propagate the result type properly. + +1997-11-01 Brendan Kehoe + + * except.c (expand_builtin_throw) [!DWARF2_UNWIND_INFO]: Replace + remaining use of saved_throw_type with a call to get_eh_type. + +1997-10-31 Brendan Kehoe + + * lex.c (FILE_NAME_NONDIRECTORY): Delete macro. + (file_name_nondirectory): New function, doing the same as the macro. + (set_typedecl_interface_info): Use it instead of the macro. + (check_newline): Likewise. + (handle_cp_pragma): Likewise. + + * repo.c (get_base_filename): Cast result of rindex to char*. + (open_repo_file): Likewise. + * xref.c (open_xref_file): Likewise. + * error.c (dump_char): Make its arg int, not char. + + * except.c (push_eh_info): Pass the number of fields - 1 down, not + the exact number of fields. + +Fri Oct 31 01:47:57 1997 Jason Merrill + + Support for nested exceptions. + * tinfo2.cc (__is_pointer): New fn. + * exception.cc (struct cp_eh_info): Define. + (__cp_exception_info, __uncatch_exception): New fns. + (__cp_push_exception, __cp_pop_exception): New fns. + * except.c: Lose saved_throw_{type,value,cleanup,in_catch}. + Lose empty_fndecl. + (init_exception_processing): Likewise. __eh_pc is now external. + (push_eh_info): New fn. + (get_eh_{info,value,type,caught}): New fns. + (push_eh_cleanup): Just call __cp_pop_exception. + (expand_start_catch_block): Use push_eh_info. Start the eh region + sooner. + (expand_end_eh_spec): Use push_eh_info. + (expand_throw): Call __cp_push_exception to set up the exception info. + Just pass the destructor or 0 as the cleanup. Call __uncatch_exception + when we rethrow. + (expand_builtin_throw): Don't refer to empty_fndecl. + +Sun Oct 26 01:28:29 1997 Richard Kenner * typeck.c (rationalize_conditional_expr): Handle {MIN,MAX}_EXPR. (unary_complex_lvalue): Call it for {MIN,MAX}_EXPR. * decl.c (init_decl_processing): Call using_eh_for_cleanups. - * Make-lang.in (g++): Include prefix.o. +Sun Oct 26 01:52:52 1997 Jeffrey A Law (law@cygnus.com) + + * Makefile.in (g++): Depend on prefix.o. Link in prefix.o. + +Thu Oct 23 02:01:30 1997 Jason Merrill + + * pt.c (instantiate_decl): SET_DECL_IMPLICIT_INSTANTIATION on new decl. + +1997-10-22 Brendan Kehoe + + * method.c (build_template_parm_names, build_decl_overload_real): + Add static to definitions. + * pt.c (add_to_template_args, note_template_header, + processing_explicit_specialization, type_unification_real): Likewise. + ({determine,check}_explicit_specialization): Use a single string for + error messages. + +Mon Oct 20 12:06:34 1997 Jason Merrill + + * except.c (expand_exception_blocks): Call do_pending_stack_adust. + (expand_end_catch_block): Likewise. + (expand_end_eh_spec): Likewise. + +Mon Oct 20 11:44:20 1997 Mark Mitchell + + * decl.c (duplicate_decls): Handle template specializations + correctly. + * error.c (dump_function_name): Fix printing of specializations of + member functions that are not member templates. + * cp-tree.h (processing_specialization): Make global. + * pt.c (processing_specialization): Likewise. + * lex.c (cons_up_default_function): Save and restore + processing_specialization to avoid confusion. + +Mon Oct 20 10:52:22 1997 Jason Merrill + + * decl.c (init_decl_processing): Give null_node unknown* type. + * typeck.c (comp_target_types): Handle UNKNOWN_TYPE. + (common_type): Likewise. + * error.c (args_as_string): Recognize null_node. + +Thu Oct 16 15:31:09 1997 Judy Goldberg + + * pt.c (determine_explicit_specialization): Initialize "dummy" + to keep Purify quiet. + +Thu Oct 16 00:14:48 1997 Jason Merrill + + * method.c (build_overload_value): Handle TEMPLATE_CONST_PARMs here. + (build_overload_int): Not here. + +Wed Oct 15 00:35:28 1997 Mike Stump + + * class.c (build_type_pathname): Remove. + (prepare_fresh_vtable): Fix problem with complex MI vtable names. + +1997-10-14 Brendan Kehoe + + * parse.y (unary_expr): Give a pedwarn if someone tries to use the + &&label GNU extension. + +Tue Oct 14 12:01:00 1997 Mark Mitchell + + * decl.c (pushtag): Unset DECL_ASSEMBLER_NAME before setting it, + so as to avoid incorrect manglings. + * method.c (build_decl_overload_real): Don't mangle return types + for constructors. + +Tue Oct 14 11:46:14 1997 Jason Merrill + + * cp-tree.h (scratchalloc, build_scratch_list, make_scratch_vec, + scratch_tree_cons): Define as macros for now. + * call.c, class.c, cvt.c, decl.c, decl2.c, except.c, expr.c, init.c, + lex.c, method.c, parse.y, pt.c, rtti.c, search.c, tree.c, typeck.c, + typeck2.c: Use them and the expression_obstack variants. + +Mon Oct 13 17:41:26 1997 Benjamin Kosnik + + * decl.c (store_return_init): Allow classes with explicit ctors to + be used with the named return values extension. + +Fri Oct 10 12:21:11 1997 Jason Merrill + + * pt.c (instantiate_decl): Fix previous change. + +Thu Oct 9 12:08:21 1997 Jason Merrill + + * pt.c (tsubst): Fix thinko. + (instantiate_decl): Really use the original template. + + * call.c (build_new_method_call): Use simple constructor_name for + error messages. + +Wed Oct 8 22:44:42 1997 Jeffrey A Law (law@cygnus.com) + + * method.c (build_underscore_int): Don't use ANSI specific + features. + +Wed Oct 8 00:18:22 1997 Jason Merrill + + * decl2.c (finish_prevtable_vardecl): Check DECL_REALLY_EXTERN + for our key method; it might have been inlined by -O3. + +Tue Oct 7 23:00:12 1997 Mark Mitchell + + * decl.c (make_typename_type): Do not try to call lookup_field for + non-aggregate types. + +Tue Oct 7 22:52:10 1997 Jason Merrill + + * typeck.c (build_reinterpret_cast): Tweak. + +Tue Oct 7 22:45:31 1997 Alexandre Oliva + + * typeck.c (build_reinterpret_cast): converting a void pointer + to function pointer with a reinterpret_cast produces a warning + if -pedantic is issued + +Tue Oct 7 22:43:43 1997 Bruno Haible + + * typeck.c (c_expand_return): Don't warn about returning a + reference-type variable as a reference. + +Tue Oct 7 21:11:22 1997 Jason Merrill + + * method.c (build_static_name): Fix typo. + +1997-10-07 Brendan Kehoe + + * decl.c (duplicate_decls): Make sure DECL_LANG_SPECIFIC is set on + OLDDECL before we try to do DECL_USE_TEMPLATE. + +Tue Oct 7 00:48:36 1997 Jason Merrill + + * decl.c (duplicate_decls): Don't warn about template instances. + + * typeck.c (mark_addressable): Lose ancient code that unsets + DECL_EXTERNAL. + + * pt.c (do_decl_instantiation): Lose support for instantiating + non-templates. + + * call.c (build_new_function_call): Fix handling of null explicit + template args. + (build_new_method_call): Likewise. + +Mon Oct 6 23:44:34 1997 Mark Mitchell + + * method.c (build_underscore_int): Fix typo. + +1997-10-06 Brendan Kehoe + + * tree.c (print_lang_statistics): #if 0 call to + print_inline_obstack_statistics until its definition is checked in. + +Mon Oct 6 09:27:29 1997 Jason Merrill + + * decl2.c (finish_file): Move dump_tree_statistics to end. + + * pt.c (instantiate_decl): Look for the original template. + (tsubst): Set DECL_IMPLICIT_INSTANTIATION on partial instantiations + of member templates. + +Wed Oct 1 08:41:38 1997 Jason Merrill + + * Makefile.in (g++FAQ.*): New rules. + (CONFLICTS): Update. + * g++FAQ.texi: Moved from libg++. + + * parse.y (PFUNCNAME): Only specify the type once. + +1997-10-01 Brendan Kehoe + + * lex.c (real_yylex): Clean up the code to fully behave the way + the c-lex.c parser does for complex and real numbers. + +Tue Sep 30 08:51:36 1997 Jason Merrill + + * method.c (build_decl_overload_real): Reformat. + +Tue Sep 30 00:18:26 1997 Jason Merrill + + * method.c (synthesize_method): If at_eof, determine our linkage. + +1997-09-29 Paul Eggert + + * lex.c (real_yylex): Treat `$' just like `_', except issue a + diagnostic if !dollars_in_ident or if pedantic. + + * lang-specs.h (@c++): -ansi no longer implies -$. + + * decl2.c (lang_decode_option): + -traditional and -ansi now do not mess with + dollars_in_ident. + +Mon Sep 29 19:57:51 1997 H.J. Lu (hjl@gnu.ai.mit.edu) + + * Makefile.in (parse.o, decl.o): Also depend on + $(srcdir)/../except.h $(srcdir)/../output.h. + (decl2.o): Also depend on $(srcdir)/../expr.h ../insn-codes.h + $(srcdir)/../except.h $(srcdir)/../output.h. + (typeck.o, init.o): Also depend on $(srcdir)/../expr.h + ../insn-codes.h. + + * call.c, cp-tree.h, decl.c, tree.c: Finish prototyping. + + * expr.c (cplus_expand_expr): Make it static. + + * decl2.c, init.c, typeck.c: Include "expr.h". + (expand_expr): Use proper values when calling the function. + +Mon Sep 29 11:05:54 1997 Alexandre Oliva + + * lang-options.h: new -Wold-style-cast flag. + * cp-tree.h (warn_old_style_cast): new variable. + * decl2.c (warn_old_style_cast): ditto. + (lang_decode_option): support -Wold-style-cast. + (reparse_absdcl_as_casts): produce old-style-cast warning. + +Mon Sep 29 09:20:53 1997 Benjamin Kosnik + + * decl.c (cp_finish_decl): Allow expand_aggr_init to set + TREE_USED, reset value based on already_used. + + * init.c (expand_member_init): Revert change. + +Mon Sep 29 08:57:53 1997 Jason Merrill + + * cp-tree.h, decl.c, decl2.c, pt.c: + Lose DECL_C_STATIC and DECL_PUBLIC. Don't pretend statics are public. + + * decl2.c (lang_decode_option): Add missing ;. + +Sat Sep 27 16:22:48 1997 Jason Merrill + + * friend.c (do_friend): Disable injection for all template-derived + decls. + * decl2.c (lang_decode_option): Handle -fguiding-decls. + * parse.y (notype_template_declarator): New nonterminal. + (direct_notype_declarator): Use it. + (complex_direct_notype_declarator): Likewise. + (object_template_id): Accept any kind of identifier after TEMPLATE. + (notype_qualified_id): Don't add template declarators here. + +Sat Sep 27 16:21:58 1997 Mark Mitchell + + * call.c (add_template_candidate): Add explicit_targs parameter. + (build_scoped_method_call): Use it. + (build_overload_call_real): Likewise. + (build_user_type_conversion_1): Likewise. + (build_new_function_call): Likewise. + (build_object_call): Likewise. + (build_new_op): Likewise. + (build_new_method_call): Likewise. + (build_new_function_call): Handle TEMPLATE_ID_EXPR. + (build_new_method_call): Likewise. + + * class.c (finish_struct_methods): Add specialization pass to + determine which methods were specializing which other methods. + (instantiate_type): Handle TEMPLATE_ID_EXPR. + + * cp-tree.def (TEMPLATE_ID_EXPR): New tree code. + + * cp-tree.h (name_mangling_version): New variable. + (flag_guiding_decls): Likewise. + (build_template_decl_overload): New function. + (begin_specialization): Likewise. + (reset_specialization): Likewise. + (end_specialization): Likewise. + (determine_explicit_specialization): Likewise. + (check_explicit_specialization): Likewise. + (lookup_template_function): Likewise. + (fn_type_unification): Add explicit_targs parameter. + (type_unification): Likewise. + + * decl.c (duplicate_decls): Add smarts for explicit + specializations. + (grokdeclarator): Handle TEMPLATE_ID_EXPR, and function + specializations. + (grokfndecl): Call check_explicit_specialization. + + * decl2.c (lang_decode_option): Handle -fname-mangling-version. + (build_expr_from_tree): Handle TEMPLATE_ID_EXPR. + (check_classfn): Handle specializations. + + * error.c (dump_function_name): Print specialization arguments. + + * friend.c (do_friend): Don't call pushdecl for template + instantiations. + + * init.c (build_member_call): Handle TEMPLATE_ID_EXPR. + + * lang-options.h: Add -fname-mangling-version, -fguiding-decls, + and -fno-guiding-decls. + + * lex.c (identifier_type): Return PFUNCNAME for template function + names. + + * method.c (build_decl_overload_real): New function. + (build_template_parm_names): New function. + (build_overload_identifier): Use it. + (build_underscore_int): New function. + (build_overload_int): Use it. Add levels for template + parameters. + (build_overload_name): Likewise. Also, handle TYPENAME_TYPEs. + (build_overload_nested_names): Handle template type parameters. + (build_template_decl_overload): New function. + + * parse.y (YYSTYPE): New ntype member. + (nested_name_specifier): Use it. + (nested_name_specifier_1): Likewise. + (PFUNCNAME): New token. + (template_id, object_template_id): New non-terminals. + (template_parm_list): Note specializations. + (template_def): Likewise. + (structsp): Likewise. + (fn.def2): Handle member template specializations. + (component_decl_1): Likewise. + (direct_notype_declarator): Handle template-ids. + (component_decl_1): Likewise. + (direct_notype_declarator): Handle template-ids. + (primary): Handle TEMPLATE_ID_EXPR, and template-ids. + + * pt.c (processing_specializations): New variable. + (template_header_count): Likewise. + (type_unification_real): New function. + (processing_explicit_specialization): Likewise. + (note_template_header): Likewise. + (is_member_template): Handle specializations. + (end_template_decl): Call reset_specialization. + (push_template_decl): Handle member template specializations. + (tsubst): Likewise. + (tsubst_copy): Handle TEMPLATE_ID_EXPR. + (instantiate_template): Handle specializations. + (instantiate_decl): Likewise. + (fn_type_unification): Handle explicit_targs. + (type_unification): Likewise. Allow incomplete unification + without an error message, if allow_incomplete. + (get_bindings): Use new calling sequence for fn_type_unification. + + * spew.c (yylex): Handle PFUNCNAME. + + * tree.c (is_overloaded_fn): Handle TEMPLATE_ID_EXPR. + (really_overloaded_fn): Likewise. + (get_first_fn): Handle function templates. + + * typeck.c (build_x_function_call): Use really_overloaded_fn. + Handle TEMPLATE_ID_EXPR. + (build_x_unary_op): Likewise. + (build_unary_op): Likewise. + (mark_addressable): Templates whose address is taken are marked + as used. + +1997-09-25 Andreas Schwab + + * decl.c (init_decl_processing): Declare __builtin_constant_p as + accepting any kind of type, not only int. + +Fri Sep 26 00:22:56 1997 Jason Merrill + + * search.c (get_matching_virtual): Notice virtual bases when sorrying + about covariant returns. + + * parse.y (member_init): Also imply typename here. Remove ancient + extension for initializing base members. + +Thu Sep 25 11:11:13 1997 Jason Merrill + + Handle multi-level typenames and implicit typename in base list. + * parse.y (typename_sub{,[0-2]}): New rules. + (structsp, rule TYPENAME_KEYWORD): Use typename_sub. + (nonnested_type): New rule. + (complete_type_name): Use it. + (base_class.1): Use typename_sub and nonnested_type. + (nested_name_specifier): Don't elide std:: here. + * decl.c (make_typename_type): Handle getting a type for NAME. + (lookup_name_real): Turn std:: into :: here. + + Rvalue conversions were removed in London. + * call.c (is_subseq): Don't consider lvalue transformations. + (build_conv): LVALUE_CONV and RVALUE_CONV get IDENTITY_RANK. + (joust): Reenable ?: kludge. + +1997-09-22 Brendan Kehoe + + * decl.c (start_function): Up warning of no return type to be a + pedwarn. + +Mon Sep 22 14:15:34 1997 Benjamin Kosnik + + * init.c (expand_member_init): Don't set TREE_USED. + * decl.c (cp_finish_decl): Mark decls used if type has TREE_USED + set,don't clear TREE_USED wholesale. + +Sat Sep 20 15:31:00 1997 Jason Merrill + + * call.c (build_over_call): Do require_complete_type before + build_cplus_new. + +Thu Sep 18 16:47:52 1997 Jason Merrill + + * search.c (lookup_field): Call complete_type in all cases. + + * decl.c (finish_function): Just warn about flowing off the end. + +Wed Sep 17 10:31:25 1997 Jason Merrill + + * decl.c (grokparms): Don't bash a permanent list node if we're + in a function. + +1997-09-17 Brendan Kehoe + + * Makefile.in (CONFLICTS): Fix s/r conflict count to 18. + +Tue Sep 16 14:06:56 1997 Jason Merrill + + * call.c (build_new_op): Give better error for syntactically + correct, but semantically invalid, use of undeclared template. + + * call.c (compare_qual): Handle pmfs. + + * decl.c (store_parm_decls): last_parm_cleanup_insn is the insn + after the exception spec. Mon Sep 15 11:52:13 1997 Jason Merrill @@ -296,11 +870,12 @@ Tue Sep 2 10:27:08 1997 Richard Henderson * typeck.c (build_ptrmemfunc1): Clean up ptr->int cast warnings. -Mon Sep 1 13:19:04 1997 Jason Merrill +Mon Sep 1 13:19:04 1997 Eugene Mamchits * call.c (add_builtin_candidate): Add missing TREE_TYPE. (compare_ics): Likewise. - From someone whose name I've lost (sorry). + +Mon Sep 1 13:19:04 1997 Jason Merrill * call.c (joust): Warn about choosing one conversion op over another because of 'this' argument when the other return type is diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in index 2d14bc33b0e..deba6e22bd1 100644 --- a/gcc/cp/Make-lang.in +++ b/gcc/cp/Make-lang.in @@ -1,5 +1,5 @@ # Top level makefile fragment for GNU C++. -# Copyright (C) 1994, 1995 Free Software Foundation, Inc. +# Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc. #This file is part of GNU CC. @@ -91,8 +91,8 @@ g++.o: $(CONFIG_H) multilib.h config.status $(lang_specs_files) g++.c # Create the compiler driver for g++. g++$(exeext): g++.o g++spec.o version.o choose-temp.o pexecute.o prefix.o $(LIBDEPS) $(EXTRA_GCC_OBJS) - $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g++.o g++spec.o prefix.o version.o \ - choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ g++.o g++spec.o prefix.o \ + version.o choose-temp.o pexecute.o $(EXTRA_GCC_OBJS) $(LIBS) # Create a version of the g++ driver which calls the cross-compiler. g++-cross$(exeext): g++$(exeext) @@ -270,8 +270,14 @@ c++.stage4: stage4-start # distribution anyway. It then copies the files to the distdir directory. c++.distdir: mkdir tmp/cp + mkdir tmp/cp/inc cd cp ; $(MAKE) $(FLAGS_TO_PASS) $(CXX_FLAGS_TO_PASS) parse.c hash.h cd cp; \ for file in *[0-9a-zA-Z+]; do \ ln $$file ../tmp/cp >/dev/null 2>&1 || cp $$file ../tmp/cp; \ done + cd cp/inc; \ + for file in *[0-9a-zA-Z+]; do \ + ln $$file ../../tmp/cp/inc >/dev/null 2>&1 \ + || cp $$file ../../tmp/cp/inc; \ + done diff --git a/gcc/cp/Makefile.in b/gcc/cp/Makefile.in index b68779e8794..9007bf28dab 100644 --- a/gcc/cp/Makefile.in +++ b/gcc/cp/Makefile.in @@ -197,11 +197,12 @@ CXX_TREE_H = $(TREE_H) cp-tree.h cp-tree.def PARSE_H = $(srcdir)/parse.h PARSE_C = $(srcdir)/parse.c -parse.o : $(PARSE_C) $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h +parse.o : $(PARSE_C) $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h lex.h \ + $(srcdir)/../except.h $(srcdir)/../output.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(BIG_SWITCHFLAG) \ `echo $(PARSE_C) | sed 's,^\./,,'` -CONFLICTS = expect 20 shift/reduce conflicts and 39 reduce/reduce conflicts. +CONFLICTS = expect 19 shift/reduce conflicts and 39 reduce/reduce conflicts. $(PARSE_H) : $(PARSE_C) $(PARSE_C) : $(srcdir)/parse.y @echo $(CONFLICTS) @@ -230,15 +231,19 @@ spew.o : spew.c $(CONFIG_H) $(CXX_TREE_H) \ lex.o : lex.c $(CONFIG_H) $(CXX_TREE_H) \ $(PARSE_H) input.c $(srcdir)/../flags.h hash.h lex.h $(srcdir)/../c-pragma.h decl.o : decl.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \ - lex.h decl.h $(srcdir)/../stack.h + lex.h decl.h $(srcdir)/../stack.h $(srcdir)/../output.h \ + $(srcdir)/../except.h decl2.o : decl2.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \ - lex.h decl.h + lex.h decl.h $(srcdir)/../expr.h ../insn-codes.h $(srcdir)/../except.h \ + $(srcdir)/../output.h $(srcdir)/../except.h typeck2.o : typeck2.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h -typeck.o : typeck.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) +typeck.o : typeck.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \ + $(srcdir)/../expr.h ../insn-codes.h class.o : class.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h call.o : call.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h class.h friend.o : friend.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) -init.o : init.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) +init.o : init.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \ + $(srcdir)/../expr.h ../insn-codes.h method.o : method.c $(CONFIG_H) $(CXX_TREE_H) class.h cvt.o : cvt.c $(CONFIG_H) $(CXX_TREE_H) class.h search.o : search.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../stack.h $(srcdir)/../flags.h @@ -268,3 +273,32 @@ TAGS: force .PHONY: TAGS force: + +g++FAQ.info: $(srcdir)/g++FAQ.texi + $(MAKEINFO) --no-split $(srcdir)/g++FAQ.texi -o ./g++FAQ.info + +# Preprocess the texi file so that the final document will have +# hyperlinks. +# It would be nice if texi2html could do something like this itself. + +# Assumption 1: the FAQ puts all http: and ftp: links in a @file{...}. +# Assumption 2: newsgroups are like @file{comp.foo} +# Assumption 3: email addresses match the regexp shown. + +g++FAQ.html: $(srcdir)/g++FAQ.texi + mkdir work + sed -e 's?@file{\([fth]*p://[^}]*\)}?@strong{\1}?' \ + -e 's?@file{\(comp\.[-a-z+.]*\)}?\1?' \ + -e 's?@file{\(gnu\.[-a-z+.]*\)}?\1?' \ + -e 's?\([.+a-zA-Z0-9-]*@@[.a-zA-Z0-9-]*[a-zA-Z0-9]\)?\1?' \ + $(srcdir)/g++FAQ.texi > work/g++FAQ.texi + cd work; texi2html g++FAQ.texi + mv work/*.html . + rm -r work + +# Make plain-text form. + +g++FAQ.txt: $(srcdir)/g++FAQ.texi + $(MAKEINFO) --no-split --no-headers -o - $(srcdir)/g++FAQ.texi |\ + sed '/^Concept Index/,$$d' > g++FAQ.txt + diff --git a/gcc/cp/NEWS b/gcc/cp/NEWS index ecfa34ff378..ff2d5124f52 100644 --- a/gcc/cp/NEWS +++ b/gcc/cp/NEWS @@ -1,56 +1,82 @@ *** Changes since G++ version 2.7.2: -* A public review copy of the December 1996 Draft of the ANSI C++ +* A public review copy of the December 1996 Draft of the ANSI/ISO C++ proto-standard is now available. See http://www.cygnus.com/misc/wp/ for more information. -* New flags -Wsign-promo (warn about potentially confusing promotions in - overload resolution), -Wno-pmf-conversion (don't warn about converting - from a bound member function pointer to function pointer). +* g++ now uses a new implementation of templates. The basic idea is that + now templates are minimally parsed when seen and then expanded later. + This allows conformant early name binding and instantiation controls, + since instantiations no longer have to go through the parser. -* local static variables in extern inline functions will be shared between - translation units. + What you get: -* Standard usage syntax for the std namespace is supported; std is treated - as an alias for global scope. General namespaces are still not supported. + + Inlining of template functions works without any extra effort or + modifications. + + Instantiations of class templates and methods defined in the class + body are deferred until they are actually needed (unless + -fexternal-templates is specified). + + Nested types in class templates work. + + Static data member templates work. + + Member function templates are now supported. + + Partial specialization of class templates is now supported. + + Explicit specification of template parameters to function templates + is now supported. -* -fvtable-thunks is supported for all targets, and is the default for - Linux with glibc (libc 6 on x86). + Things you may need to fix in your code: -* Default function arguments in templates will not be evaluated (or - checked for semantic validity) unless they are needed. Default arguments - in class bodies will not be parsed until the class definition is complete. + + Syntax errors in templates that are never instantiated will now be + diagnosed. + + Types and class templates used in templates must be declared + first, or the compiler will assume they are not types, and fail. + + Similarly, nested types of template type parameters must be tagged + with the 'typename' keyword, except in base lists. In many cases, + but not all, the compiler will tell you where you need to add + 'typename'. For more information, see -* The -ftemplate-depth-NN flag can be used to increase the maximum - recursive template instantiation depth, defaulting to 17. If you need - to use this flag, the compiler will tell you. + http://www.cygnus.com/misc/wp/dec96pub/template.html#temp.res -* The internal interface between RTTI-using code and the RTTI support - library has changed, so code that uses dynamic_cast should be - recompiled. The RTTI support library has moved from libstdc++ to - libgcc, so you no longer need to link against libstdc++ for a program - that doesn't use the "hosted" library. + + Guiding declarations are no longer supported. Function declarations, + including friend declarations, do not refer to template instantiations. + You can restore the old behavior with -fguiding-decls until you fix + your code. -* bool is now always the same size as another built-in type. Previously, - a 64-bit RISC target using a 32-bit ABI would have 32-bit pointers and a - 64-bit bool. This should only affect Irix 6, which was not supported in - 2.7.2. + Other features: -* new (nothrow) is now supported. + + Default function arguments in templates will not be evaluated (or + checked for semantic validity) unless they are needed. Default + arguments in class bodies will not be parsed until the class + definition is complete. + + The -ftemplate-depth-NN flag can be used to increase the maximum + recursive template instantiation depth, which defaults to 17. If you + need to use this flag, the compiler will tell you. + + Explicit instantiation of template constructors and destructors is + now supported. For instance: -* A flag -Weffc++ has been added for violations of some of the style - guidelines in Scott Meyers' _Effective C++_ books. + template A::A(const A&); + + Still not supported: + + + Member class templates. + + Template template parameters. + + Template friends. + +* Exception handling support has been significantly improved and is on by + default. This can result in significant runtime overhead. You can turn + it off with -fno-exceptions. + +* RTTI support has been rewritten to work properly and is now on by default. + This means code that uses virtual functions will have a modest space + overhead. You can use the -fno-rtti flag to disable RTTI support. * On ELF systems, duplicate copies of symbols with 'initialized common' linkage (such as template instantiations, vtables, and extern inlines) will now be discarded by the GNU linker, so you don't need to use -frepo. This support requires GNU ld from binutils 2.8 or later. -* Partial specialization of class templates is now supported. - * The overload resolution code has been rewritten to conform to the latest C++ Working Paper. Built-in operators are now considered as candidates in operator overload resolution. Function template overloading chooses @@ -59,85 +85,75 @@ still be selected with -fno-ansi-overloading, although this is not supported and will be removed in a future release. -* RTTI support has been rewritten to work properly and is now on by default. - This means code that uses virtual functions will have a modest space - overhead. You can use the -fno-rtti flag to disable RTTI support. +* Standard usage syntax for the std namespace is supported; std is treated + as an alias for global scope. General namespaces are still not supported. -* Synthesized destructors are no longer made virtual just because the class - already has virtual functions, only if they override a virtual destructor - in a base class. The compiler will warn if this affects your code. +* New flags: -* The g++ driver now only links against libstdc++, not libg++; it is - functionally identical to the c++ driver. + + New flags -Wsign-promo (warn about potentially confusing promotions + in overload resolution), -Wno-pmf-conversion (don't warn about + converting from a bound member function pointer to function pointer). -* (void *)0 is no longer considered a null pointer constant; NULL in - is now defined as __null, a magic constant of type (void *) - normally, or (size_t) with -ansi. + + A flag -Weffc++ has been added for violations of some of the style + guidelines in Scott Meyers' _Effective C++_ books. -* The new 'template <>' specialization syntax is now accepted and ignored. + + -Woverloaded-virtual now warns if a virtual function in a base + class is hidden in a derived class, rather than warning about + virtual functions being overloaded (even if all of the inherited + signatures are overridden) as it did before. -* The name of a class is now implicitly declared in its own scope; A::A - refers to A. + + -Wall no longer implies -W. The new warning flag, -Wsign-compare, + included in -Wall, warns about dangerous comparisons of signed and + unsigned values. Only the flag is new; it was previously part of + -W. -* g++ now uses a new implementation of templates. The basic idea is that - now templates are minimally parsed when seen and then expanded later. - This allows conformant early name binding and instantiation controls, - since instantiations no longer have to go through the parser. + + The new flag, -fno-weak, disables the use of weak symbols. - What you get: +* Synthesized methods are now emitted in any translation units that need + an out-of-line copy. They are no longer affected by #pragma interface + or #pragma implementation. - + Inlining of template functions works without any extra effort or - modifications. - + Instantiations of class templates and methods defined in the class - body are deferred until they are actually needed (unless - -fexternal-templates is specified). - + Nested types in class templates work. - + Static data member templates work. +* __FUNCTION__ and __PRETTY_FUNCTION__ are now treated as variables by the + parser; previously they were treated as string constants. So code like + `printf (__FUNCTION__ ": foo")' must be rewritten to + `printf ("%s: foo", __FUNCTION__)'. This is necessary for templates. - Possible problems: +* local static variables in extern inline functions will be shared between + translation units. - + Types and class templates used in templates must be declared - first, or the compiler will assume they are not types, and fail. - + Similarly, nested types of template type parameters must be tagged - with the 'typename' keyword. In many cases, the compiler will tell - you where you need to add 'typename'. - + Syntax errors in templates that are never instantiated will now be - diagnosed. +* -fvtable-thunks is supported for all targets, and is the default for + Linux with glibc 2.x (also called libc 6.x). - Still not supported: +* bool is now always the same size as another built-in type. Previously, + a 64-bit RISC target using a 32-bit ABI would have 32-bit pointers and a + 64-bit bool. This should only affect Irix 6, which was not supported in + 2.7.2. - + Member templates. - + Template template parameters. +* new (nothrow) is now supported. -* Synthesized methods are now emitted in any translation units that need - an out-of-line copy. They are no longer affected by #pragma interface - or #pragma implementation. +* Synthesized destructors are no longer made virtual just because the class + already has virtual functions, only if they override a virtual destructor + in a base class. The compiler will warn if this affects your code. -* Local classes are now supported. +* The g++ driver now only links against libstdc++, not libg++; it is + functionally identical to the c++ driver. -* -Wall no longer implies -W. - The new warning flag, -Wsign-compare, included in -Wall, warns about - dangerous comparisons of signed and unsigned values. Only the flag is - new; it was previously part of -W. +* (void *)0 is no longer considered a null pointer constant; NULL in + is now defined as __null, a magic constant of type (void *) + normally, or (size_t) with -ansi. -* The new flag, -fno-weak, disables the use of weak symbols. +* The name of a class is now implicitly declared in its own scope; A::A + refers to A. -* __attribute__ can now be attached to types as well as declarations. +* Local classes are now supported. -* -Woverloaded-virtual now warns if a virtual function in a base class is - hidden in a derived class, rather than warning about virtual functions - being overloaded (even if all of the inherited signatures are - overridden) as it did before. +* __attribute__ can now be attached to types as well as declarations. * The compiler no longer emits a warning if an ellipsis is used as a function's argument list. -* Exception handling support has been significantly improved and is on by - default. This can result in significant runtime overhead. You can turn - it off with -fno-exceptions. - * Definition of nested types outside of their containing class is now - supported. Use the following source code, as an example. + supported. For instance: struct A { struct B; @@ -148,11 +164,17 @@ int member; }; -* Explicit instantiation of template constructors and destructors is now - supported. Use the following source code, as an example. - - template A::A(const A&); - * On the HPPA, some classes that do not define a copy constructor will be passed and returned in memory again so that functions returning those types can be inlined. + +*** The g++ team thanks everyone that contributed to this release, + but especially: + +* Joe Buck , the maintainer of the g++ FAQ. +* Brendan Kehoe , who coordinates testing of g++. +* Jason Merrill , the g++ maintainer. +* Mark Mitchell , who implemented member function + templates and explicit qualification of function templates. +* Mike Stump , the previous g++ maintainer, who did most of + the exception handling work. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index af1f6af0be8..8dcbd95776a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -77,7 +77,7 @@ static tree build_this PROTO((tree)); static struct z_candidate * splice_viable PROTO((struct z_candidate *)); static int any_viable PROTO((struct z_candidate *)); static struct z_candidate * add_template_candidate - PROTO((struct z_candidate *, tree, tree, tree, int)); + PROTO((struct z_candidate *, tree, tree, tree, tree, int)); static struct z_candidate * add_template_conv_candidate PROTO((struct z_candidate *, tree, tree, tree, tree)); static struct z_candidate * add_builtin_candidates @@ -102,6 +102,7 @@ static tree non_reference PROTO((tree)); static tree build_conv PROTO((enum tree_code, tree, tree)); static void print_n_candidates PROTO((struct candidate *, int)); static tree default_parm_conversions PROTO((tree, tree *)); +static int is_subseq PROTO((tree, tree)); #define EVIL_RETURN(ARG) ((ARG).code = EVIL_CODE, (ARG)) #define STD_RETURN(ARG) ((ARG).code = STD_CODE, (ARG)) @@ -1266,7 +1267,7 @@ build_field_call (basetype_path, instance_ptr, name, parms) if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == FUNCTION_TYPE) return build_function_call (instance, parms); else if (TREE_CODE (TREE_TYPE (TREE_TYPE (instance))) == METHOD_TYPE) - return build_function_call (instance, tree_cons (NULL_TREE, current_class_ptr, parms)); + return build_function_call (instance, expr_tree_cons (NULL_TREE, current_class_ptr, parms)); } } return NULL_TREE; @@ -1811,7 +1812,7 @@ build_method_call (instance, name, parms, basetype_path, flags) return cp_convert (void_type_node, instance); } - if (! TYPE_HAS_DESTRUCTOR (basetype)) + if (! TYPE_HAS_DESTRUCTOR (complete_type (basetype))) return cp_convert (void_type_node, instance); instance = default_conversion (instance); instance_ptr = build_unary_op (ADDR_EXPR, instance, 0); @@ -2109,14 +2110,14 @@ build_method_call (instance, name, parms, basetype_path, flags) of the signature pointer? */ constp = TYPE_READONLY (basetype); volatilep = TYPE_VOLATILE (basetype); - parms = tree_cons (NULL_TREE, instance_ptr, parms); + parms = expr_tree_cons (NULL_TREE, instance_ptr, parms); } else if (instance) { /* TREE_READONLY (instance) fails for references. */ constp = TYPE_READONLY (TREE_TYPE (TREE_TYPE (instance_ptr))); volatilep = TYPE_VOLATILE (TREE_TYPE (TREE_TYPE (instance_ptr))); - parms = tree_cons (NULL_TREE, instance_ptr, parms); + parms = expr_tree_cons (NULL_TREE, instance_ptr, parms); } else { @@ -2125,18 +2126,18 @@ build_method_call (instance, name, parms, basetype_path, flags) && ! (flags & LOOKUP_HAS_IN_CHARGE)) { flags |= LOOKUP_HAS_IN_CHARGE; - parms = tree_cons (NULL_TREE, integer_one_node, parms); - parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes); + parms = expr_tree_cons (NULL_TREE, integer_one_node, parms); + parmtypes = scratch_tree_cons (NULL_TREE, integer_type_node, parmtypes); } constp = 0; volatilep = 0; instance_ptr = build_int_2 (0, 0); TREE_TYPE (instance_ptr) = build_pointer_type (basetype); - parms = tree_cons (NULL_TREE, instance_ptr, parms); + parms = expr_tree_cons (NULL_TREE, instance_ptr, parms); } - parmtypes = tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes); + parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (instance_ptr), parmtypes); if (last == NULL_TREE) last = parmtypes; @@ -2170,10 +2171,10 @@ build_method_call (instance, name, parms, basetype_path, flags) tree tmplist; flags |= LOOKUP_HAS_IN_CHARGE; - tmplist = tree_cons (NULL_TREE, integer_zero_node, + tmplist = expr_tree_cons (NULL_TREE, integer_zero_node, TREE_CHAIN (parms)); TREE_CHAIN (parms) = tmplist; - tmplist = tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes)); + tmplist = scratch_tree_cons (NULL_TREE, integer_type_node, TREE_CHAIN (parmtypes)); TREE_CHAIN (parmtypes) = tmplist; } basetype = BINFO_TYPE (tmp); @@ -2224,7 +2225,7 @@ build_method_call (instance, name, parms, basetype_path, flags) else my_friendly_abort (167); - friend_parms = tree_cons (NULL_TREE, parm, TREE_CHAIN (parms)); + friend_parms = expr_tree_cons (NULL_TREE, parm, TREE_CHAIN (parms)); cp->h_len = len; cp->harshness = (struct harshness_code *) @@ -2274,7 +2275,7 @@ build_method_call (instance, name, parms, basetype_path, flags) #endif ever_seen++; if (pass > 0) - found_fns = tree_cons (NULL_TREE, function, found_fns); + found_fns = scratch_tree_cons (NULL_TREE, function, found_fns); /* Not looking for friends here. */ if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE @@ -2605,7 +2606,7 @@ build_method_call (instance, name, parms, basetype_path, flags) instance_ptr = convert_pointer_to (basetype, instance_ptr); instance = build_indirect_ref (instance_ptr, NULL_PTR); } - parms = tree_cons (NULL_TREE, instance_ptr, + parms = expr_tree_cons (NULL_TREE, instance_ptr, convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, sub_flags)); } else @@ -2653,7 +2654,7 @@ build_method_call (instance, name, parms, basetype_path, flags) || TREE_OPERAND (instance, 0) != instance_ptr) instance = build_indirect_ref (instance_ptr, NULL_PTR); } - parms = tree_cons (NULL_TREE, instance_ptr, + parms = expr_tree_cons (NULL_TREE, instance_ptr, convert_arguments (NULL_TREE, TREE_CHAIN (TYPE_ARG_TYPES (fntype)), TREE_CHAIN (parms), function, LOOKUP_NORMAL)); } @@ -2841,13 +2842,13 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete) if (TREE_CODE (function) == TEMPLATE_DECL) { int ntparms = DECL_NTPARMS (function); - tree targs = make_tree_vec (ntparms); + tree targs = make_scratch_vec (ntparms); int i; i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (function), &TREE_VEC_ELT (targs, 0), TYPE_ARG_TYPES (TREE_TYPE (function)), - parms, &template_cost, 0, 0); + parms, NULL_TREE, &template_cost, 0, 0); if (i == 0) { function = instantiate_template (function, targs); @@ -2884,7 +2885,7 @@ build_overload_call_real (fnname, parms, flags, final_cp, require_complete) passed to calling function. */ cp->h_len = parmlength; cp->harshness = (struct harshness_code *) - oballoc ((parmlength + 1) * sizeof (struct harshness_code)); + scratchalloc ((parmlength + 1) * sizeof (struct harshness_code)); compute_conversion_costs (function, parms, cp, parmlength); @@ -3021,9 +3022,7 @@ build_conv (code, type, from) rank = STD_RANK; break; - case LVALUE_CONV: case QUAL_CONV: - case RVALUE_CONV: if (rank < EXACT_RANK) rank = EXACT_RANK; @@ -3380,7 +3379,7 @@ add_function_candidate (candidates, fn, arglist, flags) } len = list_length (argnode); - convs = make_tree_vec (len); + convs = make_scratch_vec (len); for (i = 0; i < len; ++i) { @@ -3429,7 +3428,7 @@ add_function_candidate (candidates, fn, arglist, flags) break; } - cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate)); + cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate)); cand->fn = fn; cand->convs = convs; @@ -3455,7 +3454,7 @@ add_conv_candidate (candidates, fn, obj, arglist) tree totype = TREE_TYPE (TREE_TYPE (fn)); tree parmlist = TYPE_ARG_TYPES (TREE_TYPE (totype)); int i, len = list_length (arglist) + 1; - tree convs = make_tree_vec (len); + tree convs = make_scratch_vec (len); tree parmnode = parmlist; tree argnode = arglist; int viable = 1; @@ -3506,7 +3505,7 @@ add_conv_candidate (candidates, fn, obj, arglist) break; } - cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate)); + cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate)); cand->fn = fn; cand->convs = convs; @@ -3535,7 +3534,7 @@ build_builtin_candidate (candidates, fnname, type1, type2, types[0] = type1; types[1] = type2; - convs = make_tree_vec (args[2] ? 3 : (args[1] ? 2 : 1)); + convs = make_scratch_vec (args[2] ? 3 : (args[1] ? 2 : 1)); for (i = 0; i < 2; ++i) { @@ -3566,7 +3565,7 @@ build_builtin_candidate (candidates, fnname, type1, type2, viable = 0; } - cand = (struct z_candidate *) oballoc (sizeof (struct z_candidate)); + cand = (struct z_candidate *) scratchalloc (sizeof (struct z_candidate)); cand->fn = fnname; cand->convs = convs; @@ -4075,10 +4074,10 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags) if (code == COND_EXPR) { if (real_lvalue_p (args[i])) - types[i] = tree_cons + types[i] = scratch_tree_cons (NULL_TREE, build_reference_type (argtypes[i]), types[i]); - types[i] = tree_cons + types[i] = scratch_tree_cons (NULL_TREE, TYPE_MAIN_VARIANT (argtypes[i]), types[i]); } @@ -4096,37 +4095,37 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags) continue; if (code == COND_EXPR && TREE_CODE (type) == REFERENCE_TYPE) - types[i] = tree_cons (NULL_TREE, type, types[i]); + types[i] = scratch_tree_cons (NULL_TREE, type, types[i]); type = non_reference (type); if (i != 0 || ! ref1) { type = TYPE_MAIN_VARIANT (type_decays_to (type)); if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE) - types[i] = tree_cons (NULL_TREE, type, types[i]); + types[i] = scratch_tree_cons (NULL_TREE, type, types[i]); if (INTEGRAL_TYPE_P (type)) type = type_promotes_to (type); } if (! value_member (type, types[i])) - types[i] = tree_cons (NULL_TREE, type, types[i]); + types[i] = scratch_tree_cons (NULL_TREE, type, types[i]); } } else { if (code == COND_EXPR && real_lvalue_p (args[i])) - types[i] = tree_cons + types[i] = scratch_tree_cons (NULL_TREE, build_reference_type (argtypes[i]), types[i]); type = non_reference (argtypes[i]); if (i != 0 || ! ref1) { type = TYPE_MAIN_VARIANT (type_decays_to (type)); if (code == COND_EXPR && TREE_CODE (type) == ENUMERAL_TYPE) - types[i] = tree_cons (NULL_TREE, type, types[i]); + types[i] = scratch_tree_cons (NULL_TREE, type, types[i]); if (INTEGRAL_TYPE_P (type)) type = type_promotes_to (type); } - types[i] = tree_cons (NULL_TREE, type, types[i]); + types[i] = scratch_tree_cons (NULL_TREE, type, types[i]); } } @@ -4146,19 +4145,29 @@ add_builtin_candidates (candidates, code, code2, fnname, args, flags) return candidates; } +/* If TMPL can be successfully instantiated as indicated by + EXPLICIT_TARGS and ARGLIST, adds the instantiation to CANDIDATES. + + TMPL is the template. EXPLICIT_TARGS are any explicit template arguments. + ARGLIST is the arguments provided at the call-site. The RETURN_TYPE + is the desired type for conversion operators. FLAGS are as for + add_function_candidate. */ + static struct z_candidate * -add_template_candidate (candidates, tmpl, arglist, return_type, flags) +add_template_candidate (candidates, tmpl, explicit_targs, + arglist, return_type, flags) struct z_candidate *candidates; - tree tmpl, arglist, return_type; + tree tmpl, explicit_targs, arglist, return_type; int flags; { int ntparms = DECL_NTPARMS (tmpl); - tree targs = make_tree_vec (ntparms); + tree targs = make_scratch_vec (ntparms); struct z_candidate *cand; int i; tree fn; - i = fn_type_unification (tmpl, targs, arglist, return_type, 0); + i = fn_type_unification (tmpl, explicit_targs, targs, arglist, + return_type, 0); if (i != 0) return candidates; @@ -4179,12 +4188,12 @@ add_template_conv_candidate (candidates, tmpl, obj, arglist, return_type) tree tmpl, obj, arglist, return_type; { int ntparms = DECL_NTPARMS (tmpl); - tree targs = make_tree_vec (ntparms); + tree targs = make_scratch_vec (ntparms); struct z_candidate *cand; int i; tree fn; - i = fn_type_unification (tmpl, targs, arglist, return_type, 0); + i = fn_type_unification (tmpl, NULL_TREE, targs, arglist, return_type, 0); if (i != 0) return candidates; @@ -4297,10 +4306,10 @@ build_user_type_conversion_1 (totype, expr, flags) { tree t = build_int_2 (0, 0); TREE_TYPE (t) = build_pointer_type (totype); - args = build_tree_list (NULL_TREE, expr); + args = build_scratch_list (NULL_TREE, expr); if (TYPE_USES_VIRTUAL_BASECLASSES (totype)) - args = tree_cons (NULL_TREE, integer_one_node, args); - args = tree_cons (NULL_TREE, t, args); + args = scratch_tree_cons (NULL_TREE, integer_one_node, args); + args = scratch_tree_cons (NULL_TREE, t, args); ctors = TREE_VALUE (ctors); } @@ -4311,10 +4320,10 @@ build_user_type_conversion_1 (totype, expr, flags) if (TREE_CODE (ctors) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, ctors, templates); + templates = scratch_tree_cons (NULL_TREE, ctors, templates); candidates = add_template_candidate (candidates, ctors, - args, NULL_TREE, flags); + NULL_TREE, args, NULL_TREE, flags); } else candidates = add_function_candidate (candidates, ctors, @@ -4328,7 +4337,7 @@ build_user_type_conversion_1 (totype, expr, flags) } if (convs) - args = build_tree_list (NULL_TREE, build_this (expr)); + args = build_scratch_list (NULL_TREE, build_this (expr)); for (; convs; convs = TREE_CHAIN (convs)) { @@ -4353,10 +4362,10 @@ build_user_type_conversion_1 (totype, expr, flags) { if (TREE_CODE (fn) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, fn, templates); + templates = scratch_tree_cons (NULL_TREE, fn, templates); candidates = - add_template_candidate (candidates, fn, args, - totype, flags); + add_template_candidate (candidates, fn, NULL_TREE, + args, totype, flags); } else candidates = add_function_candidate (candidates, fn, @@ -4411,9 +4420,10 @@ build_user_type_conversion_1 (totype, expr, flags) p = &(TREE_OPERAND (*p, 0)); /* Pedantically, normal function declarations are never considered - to refer to template instantiations, but we won't implement that - until we implement full template instantiation syntax. */ - if (templates && ! cand->template && ! DECL_INITIAL (cand->fn) + to refer to template instantiations, so we only do this with + -fguiding-decls. */ + if (flag_guiding_decls && templates && ! cand->template + && !DECL_INITIAL (cand->fn) && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE) add_maybe_template (cand->fn, templates); @@ -4421,7 +4431,7 @@ build_user_type_conversion_1 (totype, expr, flags) (USER_CONV, (DECL_CONSTRUCTOR_P (cand->fn) ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))), - NULL_TREE, cand->fn, cand->convs, cand->basetype_path); + expr, cand->fn, cand->convs, cand->basetype_path); ICS_USER_FLAG (cand->second_conv) = 1; if (cand->viable == -1) ICS_BAD_FLAG (cand->second_conv) = 1; @@ -4473,8 +4483,17 @@ build_new_function_call (fn, args, obj) tree fn, args, obj; { struct z_candidate *candidates = 0, *cand; - - if (obj == NULL_TREE && TREE_CODE (fn) == TREE_LIST) + tree explicit_targs = NULL_TREE; + int template_only = 0; + + if (TREE_CODE (fn) == TEMPLATE_ID_EXPR) + { + explicit_targs = TREE_OPERAND (fn, 1); + fn = TREE_OPERAND (fn, 0); + template_only = 1; + } + + if (obj == NULL_TREE && really_overloaded_fn (fn)) { tree t; tree templates = NULL_TREE; @@ -4488,11 +4507,12 @@ build_new_function_call (fn, args, obj) { if (TREE_CODE (t) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, t, templates); + templates = scratch_tree_cons (NULL_TREE, t, templates); candidates = add_template_candidate - (candidates, t, args, NULL_TREE, LOOKUP_NORMAL); + (candidates, t, explicit_targs, args, NULL_TREE, + LOOKUP_NORMAL); } - else + else if (! template_only) candidates = add_function_candidate (candidates, t, args, LOOKUP_NORMAL); } @@ -4519,9 +4539,10 @@ build_new_function_call (fn, args, obj) } /* Pedantically, normal function declarations are never considered - to refer to template instantiations, but we won't implement that - until we implement full template instantiation syntax. */ - if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)) + to refer to template instantiations, so we only do this with + -fguiding-decls. */ + if (flag_guiding_decls && templates && ! cand->template + && ! DECL_INITIAL (cand->fn)) add_maybe_template (cand->fn, templates); return build_over_call (cand->fn, cand->convs, args, LOOKUP_NORMAL); @@ -4549,16 +4570,17 @@ build_object_call (obj, args) if (fns) { tree fn = TREE_VALUE (fns); - mem_args = tree_cons (NULL_TREE, build_this (obj), args); + mem_args = scratch_tree_cons (NULL_TREE, build_this (obj), args); for (; fn; fn = DECL_CHAIN (fn)) { if (TREE_CODE (fn) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, fn, templates); - candidates = add_template_candidate (candidates, fn, - mem_args, NULL_TREE, - LOOKUP_NORMAL); + templates = scratch_tree_cons (NULL_TREE, fn, templates); + candidates + = add_template_candidate (candidates, fn, NULL_TREE, + mem_args, NULL_TREE, + LOOKUP_NORMAL); } else candidates = add_function_candidate @@ -4582,7 +4604,7 @@ build_object_call (obj, args) { if (TREE_CODE (fn) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, fn, templates); + templates = scratch_tree_cons (NULL_TREE, fn, templates); candidates = add_template_conv_candidate (candidates, fn, obj, @@ -4672,6 +4694,14 @@ build_new_op (code, flags, arg1, arg2, arg3) || arg3 == error_mark_node) return error_mark_node; + /* This can happen if a template takes all non-type parameters, e.g. + undeclared_template<1, 5, 72>a; */ + if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL) + { + cp_error ("`%D' must be declared before use", arg1); + return error_mark_node; + } + if (code == MODIFY_EXPR) { code2 = TREE_CODE (arg3); @@ -4688,7 +4718,7 @@ build_new_op (code, flags, arg1, arg2, arg3) { tree rval; - arglist = tree_cons (NULL_TREE, arg2, arg3); + arglist = scratch_tree_cons (NULL_TREE, arg2, arg3); if (flags & LOOKUP_GLOBAL) return build_new_function_call (lookup_name_nonclass (fnname), arglist, NULL_TREE); @@ -4716,9 +4746,9 @@ build_new_op (code, flags, arg1, arg2, arg3) if (flags & LOOKUP_GLOBAL) return build_new_function_call (lookup_name_nonclass (fnname), - build_tree_list (NULL_TREE, arg1), NULL_TREE); + build_scratch_list (NULL_TREE, arg1), NULL_TREE); - arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2)); + arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2)); arg1 = TREE_TYPE (arg1); @@ -4784,12 +4814,12 @@ build_new_op (code, flags, arg1, arg2, arg3) /* + Koenig lookup */ if (arg2 && arg3) - arglist = tree_cons (NULL_TREE, arg1, tree_cons - (NULL_TREE, arg2, build_tree_list (NULL_TREE, arg3))); + arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons + (NULL_TREE, arg2, build_scratch_list (NULL_TREE, arg3))); else if (arg2) - arglist = tree_cons (NULL_TREE, arg1, build_tree_list (NULL_TREE, arg2)); + arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2)); else - arglist = build_tree_list (NULL_TREE, arg1); + arglist = build_scratch_list (NULL_TREE, arg1); if (fns && TREE_CODE (fns) == TREE_LIST) fns = TREE_VALUE (fns); @@ -4797,9 +4827,11 @@ build_new_op (code, flags, arg1, arg2, arg3) { if (TREE_CODE (fns) == TEMPLATE_DECL) { - templates = decl_tree_cons (NULL_TREE, fns, templates); - candidates = add_template_candidate - (candidates, fns, arglist, TREE_TYPE (fnname), flags); + templates = scratch_tree_cons (NULL_TREE, fns, templates); + candidates + = add_template_candidate (candidates, fns, NULL_TREE, + arglist, TREE_TYPE (fnname), + flags); } else candidates = add_function_candidate (candidates, fns, arglist, flags); @@ -4813,7 +4845,7 @@ build_new_op (code, flags, arg1, arg2, arg3) if (fns) { tree fn = TREE_VALUE (fns); - mem_arglist = tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist)); + mem_arglist = scratch_tree_cons (NULL_TREE, build_this (arg1), TREE_CHAIN (arglist)); for (; fn; fn = DECL_CHAIN (fn)) { tree this_arglist; @@ -4826,10 +4858,11 @@ build_new_op (code, flags, arg1, arg2, arg3) if (TREE_CODE (fn) == TEMPLATE_DECL) { /* A member template. */ - templates = decl_tree_cons (NULL_TREE, fn, templates); - candidates = add_template_candidate - (candidates, fn, this_arglist, - TREE_TYPE (fnname), LOOKUP_NORMAL); + templates = scratch_tree_cons (NULL_TREE, fn, templates); + candidates + = add_template_candidate (candidates, fn, NULL_TREE, + this_arglist, TREE_TYPE + (fnname), LOOKUP_NORMAL); } else candidates = add_function_candidate @@ -4928,9 +4961,10 @@ build_new_op (code, flags, arg1, arg2, arg3) enforce_access (cand->basetype_path, cand->fn); /* Pedantically, normal function declarations are never considered - to refer to template instantiations, but we won't implement that - until we implement full template instantiation syntax. */ - if (templates && ! cand->template && ! DECL_INITIAL (cand->fn) + to refer to template instantiations, so we only do this with + -fguiding-decls. */ + if (flag_guiding_decls && templates && ! cand->template + && ! DECL_INITIAL (cand->fn) && TREE_CODE (TREE_TYPE (cand->fn)) != METHOD_TYPE) add_maybe_template (cand->fn, templates); @@ -5100,10 +5134,10 @@ convert_like (convs, expr) tree t = build_int_2 (0, 0); TREE_TYPE (t) = build_pointer_type (DECL_CONTEXT (fn)); - args = build_tree_list (NULL_TREE, expr); + args = build_scratch_list (NULL_TREE, expr); if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn))) - args = tree_cons (NULL_TREE, integer_one_node, args); - args = tree_cons (NULL_TREE, t, args); + args = scratch_tree_cons (NULL_TREE, integer_one_node, args); + args = scratch_tree_cons (NULL_TREE, t, args); } else args = build_this (expr); @@ -5198,19 +5232,19 @@ build_over_call (fn, convs, args, flags) int is_method = 0; if (args && TREE_CODE (args) != TREE_LIST) - args = build_tree_list (NULL_TREE, args); + args = build_scratch_list (NULL_TREE, args); arg = args; /* The implicit parameters to a constructor are not considered by overload resolution, and must be of the proper type. */ if (DECL_CONSTRUCTOR_P (fn)) { - converted_args = tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args); + converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args); arg = TREE_CHAIN (arg); parm = TREE_CHAIN (parm); if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn))) { - converted_args = tree_cons + converted_args = expr_tree_cons (NULL_TREE, TREE_VALUE (arg), converted_args); arg = TREE_CHAIN (arg); parm = TREE_CHAIN (parm); @@ -5233,7 +5267,7 @@ build_over_call (fn, convs, args, flags) cp_pedwarn ("passing `%T' as `this' argument of `%#D' discards %s", TREE_TYPE (argtype), fn, p); } - converted_args = tree_cons + converted_args = expr_tree_cons (NULL_TREE, convert_force (TREE_VALUE (parm), TREE_VALUE (arg), CONV_C_CAST), converted_args); parm = TREE_CHAIN (parm); @@ -5277,7 +5311,7 @@ build_over_call (fn, convs, args, flags) && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))) val = default_conversion (val); #endif - converted_args = tree_cons (NULL_TREE, val, converted_args); + converted_args = expr_tree_cons (NULL_TREE, val, converted_args); } /* Default arguments */ @@ -5290,7 +5324,7 @@ build_over_call (fn, convs, args, flags) not in tsubst. */ arg = tsubst_expr (arg, DECL_TI_ARGS (fn), TREE_VEC_LENGTH (DECL_TI_ARGS (fn)), NULL_TREE); - converted_args = tree_cons + converted_args = expr_tree_cons (NULL_TREE, convert_default_arg (TREE_VALUE (parm), arg), converted_args); } @@ -5313,7 +5347,7 @@ build_over_call (fn, convs, args, flags) /* Convert `short' and `char' to full-size `int'. */ val = default_conversion (val); - converted_args = tree_cons (NULL_TREE, val, converted_args); + converted_args = expr_tree_cons (NULL_TREE, val, converted_args); } converted_args = nreverse (converted_args); @@ -5417,9 +5451,10 @@ build_over_call (fn, convs, args, flags) fn = build_call (fn, TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))), converted_args); if (TREE_TYPE (fn) == void_type_node) return fn; + fn = require_complete_type (fn); if (IS_AGGR_TYPE (TREE_TYPE (fn))) fn = build_cplus_new (TREE_TYPE (fn), fn); - return convert_from_reference (require_complete_type (fn)); + return convert_from_reference (fn); } static tree @@ -5428,10 +5463,19 @@ build_new_method_call (instance, name, args, basetype_path, flags) int flags; { struct z_candidate *candidates = 0, *cand; + tree explicit_targs = NULL_TREE; tree basetype, mem_args, fns, instance_ptr; tree pretty_name; tree user_args = args; tree templates = NULL_TREE; + int template_only = 0; + + if (TREE_CODE (name) == TEMPLATE_ID_EXPR) + { + explicit_targs = TREE_OPERAND (name, 1); + name = TREE_OPERAND (name, 0); + template_only = 1; + } /* If there is an extra argument for controlling virtual bases, remove it for error reporting. */ @@ -5494,7 +5538,7 @@ build_new_method_call (instance, name, args, basetype_path, flags) } pretty_name - = (name == ctor_identifier ? constructor_name_full (basetype) : name); + = (name == ctor_identifier ? constructor_name (basetype) : name); fns = lookup_fnfields (basetype_path, name, 1); @@ -5507,9 +5551,9 @@ build_new_method_call (instance, name, args, basetype_path, flags) && ! (flags & LOOKUP_HAS_IN_CHARGE)) { flags |= LOOKUP_HAS_IN_CHARGE; - args = tree_cons (NULL_TREE, integer_one_node, args); + args = scratch_tree_cons (NULL_TREE, integer_one_node, args); } - mem_args = tree_cons (NULL_TREE, instance_ptr, args); + mem_args = scratch_tree_cons (NULL_TREE, instance_ptr, args); for (; t; t = DECL_CHAIN (t)) { tree this_arglist; @@ -5527,14 +5571,14 @@ build_new_method_call (instance, name, args, basetype_path, flags) if (TREE_CODE (t) == TEMPLATE_DECL) { /* A member template. */ - templates = decl_tree_cons (NULL_TREE, t, templates); + templates = scratch_tree_cons (NULL_TREE, t, templates); candidates = - add_template_candidate (candidates, t, + add_template_candidate (candidates, t, explicit_targs, this_arglist, TREE_TYPE (name), LOOKUP_NORMAL); } - else + else if (! template_only) candidates = add_function_candidate (candidates, t, this_arglist, flags); @@ -5582,9 +5626,10 @@ build_new_method_call (instance, name, args, basetype_path, flags) flags |= LOOKUP_NONVIRTUAL; /* Pedantically, normal function declarations are never considered - to refer to template instantiations, but we won't implement that - until we implement full template instantiation syntax. */ - if (templates && ! cand->template && ! DECL_INITIAL (cand->fn)) + to refer to template instantiations, so we only do this with + -fguiding-decls. */ + if (flag_guiding_decls && templates && ! cand->template + && ! DECL_INITIAL (cand->fn)) add_maybe_template (cand->fn, templates); return build_over_call @@ -5603,6 +5648,11 @@ compare_qual (ics1, ics2) tree to1 = TREE_TYPE (ics1); tree to2 = TREE_TYPE (ics2); + if (TYPE_PTRMEMFUNC_P (to1)) + to1 = TYPE_PTRMEMFUNC_FN_TYPE (to1); + if (TYPE_PTRMEMFUNC_P (to2)) + to2 = TYPE_PTRMEMFUNC_FN_TYPE (to2); + to1 = TREE_TYPE (to1); to2 = TREE_TYPE (to2); @@ -5635,6 +5685,11 @@ static int is_subseq (ics1, ics2) tree ics1, ics2; { + /* Do not consider lvalue transformations here. */ + if (TREE_CODE (ics2) == RVALUE_CONV + || TREE_CODE (ics2) == LVALUE_CONV) + return 0; + for (;; ics2 = TREE_OPERAND (ics2, 0)) { if (TREE_CODE (ics2) == TREE_CODE (ics1) @@ -6070,10 +6125,10 @@ joust (cand1, cand2) break; if (i == TREE_VEC_LENGTH (cand1->convs)) return 1; -#if 0 + /* Kludge around broken overloading rules whereby - bool ? void *const & : void *const & is ambiguous. */ - /* Huh? Explain the problem better. */ + Integer a, b; test ? a : b; is ambiguous, since there's a builtin + that takes references and another that takes values. */ if (cand1->fn == ansi_opname[COND_EXPR]) { tree c1 = TREE_VEC_ELT (cand1->convs, 1); @@ -6089,7 +6144,6 @@ joust (cand1, cand2) return -1; } } -#endif } tweak: diff --git a/gcc/cp/class.c b/gcc/cp/class.c index af735e98fcf..70db2ff547f 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1,5 +1,5 @@ /* Functions related to building classes and their related objects. - Copyright (C) 1987, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -72,7 +72,7 @@ struct class_level int unused; }; -/* The currect_class_ptr is the pointer to the current class. +/* The current_class_ptr is the pointer to the current class. current_class_ref is the actual current class. */ tree current_class_ptr, current_class_ref; @@ -96,7 +96,6 @@ static tree get_derived_offset PROTO((tree, tree)); static tree get_basefndecls PROTO((tree, tree)); static void set_rtti_entry PROTO((tree, tree, tree)); static tree build_vtable PROTO((tree, tree)); -static tree build_type_pathname PROTO((char *, tree, tree)); static void prepare_fresh_vtable PROTO((tree, tree)); static void fixup_vtable_deltas1 PROTO((tree, tree)); static void fixup_vtable_deltas PROTO((tree, int, tree)); @@ -270,6 +269,7 @@ build_vbase_path (code, type, expr, path, alias_this) { tree reverse_path = NULL_TREE; + push_expression_obstack (); while (path) { tree r = copy_node (path); @@ -278,6 +278,7 @@ build_vbase_path (code, type, expr, path, alias_this) path = BINFO_INHERITANCE_CHAIN (path); } path = reverse_path; + pop_obstacks (); } basetype = BINFO_TYPE (path); @@ -340,7 +341,8 @@ build_vbase_path (code, type, expr, path, alias_this) if (null_expr) { TREE_OPERAND (expr, 2) = nonnull_expr; - TREE_TYPE (TREE_OPERAND (expr, 1)) = TREE_TYPE (nonnull_expr); + TREE_TYPE (expr) = TREE_TYPE (TREE_OPERAND (expr, 1)) + = TREE_TYPE (nonnull_expr); } else expr = nonnull_expr; @@ -447,9 +449,9 @@ build_vtable_entry (delta, pfn) else { extern int flag_huge_objects; - tree elems = tree_cons (NULL_TREE, delta, - tree_cons (NULL_TREE, integer_zero_node, - build_tree_list (NULL_TREE, pfn))); + tree elems = expr_tree_cons (NULL_TREE, delta, + expr_tree_cons (NULL_TREE, integer_zero_node, + build_expr_list (NULL_TREE, pfn))); tree entry = build (CONSTRUCTOR, vtable_entry_type, NULL_TREE, elems); /* DELTA is constructed by `size_int', which means it may be an @@ -586,8 +588,8 @@ get_vtable_name (type) tree type; { tree type_id = build_typename_overload (type); - char *buf = (char *)alloca (strlen (VTABLE_NAME_FORMAT) - + IDENTIFIER_LENGTH (type_id) + 2); + char *buf = (char *) alloca (strlen (VTABLE_NAME_FORMAT) + + IDENTIFIER_LENGTH (type_id) + 2); char *ptr = IDENTIFIER_POINTER (type_id); int i; for (i = 0; ptr[i] == OPERATOR_TYPENAME_FORMAT[i]; i++) ; @@ -735,69 +737,6 @@ build_vtable (binfo, type) return decl; } -/* Given a base type PARENT, and a derived type TYPE, build - a name which distinguishes exactly the PARENT member of TYPE's type. - - FORMAT is a string which controls how sprintf formats the name - we have generated. - - For example, given - - class A; class B; class C : A, B; - - it is possible to distinguish "A" from "C's A". And given - - class L; - class A : L; class B : L; class C : A, B; - - it is possible to distinguish "L" from "A's L", and also from - "C's L from A". - - Make sure to use the DECL_ASSEMBLER_NAME of the TYPE_NAME of the - type, as template have DECL_NAMEs like: X, whereas the - DECL_ASSEMBLER_NAME is set to be something the assembler can handle. */ - -static tree -build_type_pathname (format, parent, type) - char *format; - tree parent, type; -{ - extern struct obstack temporary_obstack; - char *first, *base, *name; - int i; - tree id; - - parent = TYPE_MAIN_VARIANT (parent); - - /* Remember where to cut the obstack to. */ - first = obstack_base (&temporary_obstack); - - /* Put on TYPE+PARENT. */ - obstack_grow (&temporary_obstack, - TYPE_ASSEMBLER_NAME_STRING (type), - TYPE_ASSEMBLER_NAME_LENGTH (type)); -#ifdef JOINER - obstack_1grow (&temporary_obstack, JOINER); -#else - obstack_1grow (&temporary_obstack, '_'); -#endif - obstack_grow0 (&temporary_obstack, - TYPE_ASSEMBLER_NAME_STRING (parent), - TYPE_ASSEMBLER_NAME_LENGTH (parent)); - i = obstack_object_size (&temporary_obstack); - base = obstack_base (&temporary_obstack); - obstack_finish (&temporary_obstack); - - /* Put on FORMAT+TYPE+PARENT. */ - obstack_blank (&temporary_obstack, strlen (format) + i + 1); - name = obstack_base (&temporary_obstack); - sprintf (name, format, base); - id = get_identifier (name); - obstack_free (&temporary_obstack, first); - - return id; -} - extern tree signed_size_zero_node; /* Give TYPE a new virtual function table which is initialized @@ -808,20 +747,83 @@ extern tree signed_size_zero_node; FOR_TYPE is the derived type which caused this table to be needed. - BINFO is the type association which provided TYPE for FOR_TYPE. */ + BINFO is the type association which provided TYPE for FOR_TYPE. + + The order in which vtables are built (by calling this function) for + an object must remain the same, otherwise a binary incompatibility + can result. */ static void prepare_fresh_vtable (binfo, for_type) tree binfo, for_type; { - tree basetype = BINFO_TYPE (binfo); + tree basetype; tree orig_decl = BINFO_VTABLE (binfo); - /* This name is too simplistic. We can have multiple basetypes for - for_type, and we really want different names. (mrs) */ - tree name = build_type_pathname (VTABLE_NAME_FORMAT, basetype, for_type); - tree new_decl = build_decl (VAR_DECL, name, TREE_TYPE (orig_decl)); + tree name; + tree new_decl; tree offset; + tree path = binfo; + char *buf, *buf2; + char joiner = '_'; + int i; + +#ifdef JOINER + joiner = JOINER; +#endif + + basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (binfo)); + + buf2 = TYPE_ASSEMBLER_NAME_STRING (basetype); + i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1; + + /* We know that the vtable that we are going to create doesn't exist + yet in the global namespace, and when we finish, it will be + pushed into the global namespace. In complex MI hierarchies, we + have to loop while the name we are thinking of adding is globally + defined, adding more name components to the vtable name as we + loop, until the name is unique. This is because in complex MI + cases, we might have the same base more than once. This means + that the order in which this function is called for vtables must + remain the same, otherwise binary compatibility can be + compromised. */ + + while (1) + { + char *buf1 = (char *) alloca (TYPE_ASSEMBLER_NAME_LENGTH (for_type) + 1 + i); + char *new_buf2; + + sprintf (buf1, "%s%c%s", TYPE_ASSEMBLER_NAME_STRING (for_type), joiner, + buf2); + buf = (char *) alloca (strlen (VTABLE_NAME_FORMAT) + strlen (buf1) + 1); + sprintf (buf, VTABLE_NAME_FORMAT, buf1); + name = get_identifier (buf); + + /* If this name doesn't clash, then we can use it, otherwise + we add more to the name until it is unique. */ + + if (! IDENTIFIER_GLOBAL_VALUE (name)) + break; + + /* Set values for next loop through, if the name isn't unique. */ + + path = BINFO_INHERITANCE_CHAIN (path); + + /* We better not run out of stuff to make it unique. */ + my_friendly_assert (path != NULL_TREE, 368); + + basetype = TYPE_MAIN_VARIANT (BINFO_TYPE (path)); + /* We better not run out of stuff to make it unique. */ + my_friendly_assert (for_type != basetype, 369); + + i = TYPE_ASSEMBLER_NAME_LENGTH (basetype) + 1 + i; + new_buf2 = (char *) alloca (i); + sprintf (new_buf2, "%s%c%s", + TYPE_ASSEMBLER_NAME_STRING (basetype), joiner, buf2); + buf2 = new_buf2; + } + + new_decl = build_decl (VAR_DECL, name, TREE_TYPE (orig_decl)); /* Remember which class this vtable is really for. */ DECL_CONTEXT (new_decl) = for_type; @@ -2079,6 +2081,53 @@ finish_struct_methods (t, fn_fields, nonprivate_method) obstack_free (current_obstack, baselink_vec); } + /* Now, figure out what any member template specializations were + specializing. */ + for (i = 0; i < TREE_VEC_LENGTH (method_vec); ++i) + { + tree fn; + for (fn = TREE_VEC_ELT (method_vec, i); + fn != NULL_TREE; + fn = DECL_CHAIN (fn)) + if (DECL_TEMPLATE_SPECIALIZATION (fn)) + { + tree f; + tree spec_args; + + /* If there is a template, and t uses template parms, we + are dealing with a specialization of a member + template in a template class, and we must grab the + template, rather than the function. */ + if (DECL_TI_TEMPLATE (fn) && uses_template_parms (t)) + f = DECL_TI_TEMPLATE (fn); + else + f = fn; + + /* We want the specialization arguments, which will be the + innermost ones. */ + if (DECL_TI_ARGS (f) + && TREE_CODE (DECL_TI_ARGS (f)) == TREE_VEC) + spec_args + = TREE_VEC_ELT (DECL_TI_ARGS (f), 0); + else + spec_args = DECL_TI_ARGS (f); + + check_explicit_specialization + (lookup_template_function (DECL_NAME (f), spec_args), + f, 0, 1); + + /* Now, the assembler name will be correct for fn, so we + make its RTL. */ + DECL_RTL (f) = 0; + make_decl_rtl (f, NULL_PTR, 1); + if (f != fn) + { + DECL_RTL (fn) = 0; + make_decl_rtl (fn, NULL_PTR, 1); + } + } + } + return method_vec; } @@ -3277,7 +3326,7 @@ finish_struct_1 (t, warn_anon) fdecl = lookup_fnfields (binfo, sname, 0); if (fdecl) - access_decls = tree_cons (access, fdecl, access_decls); + access_decls = scratch_tree_cons (access, fdecl, access_decls); else cp_error_at ("no members matching `%D' in `%#T'", x, ctype); continue; @@ -4877,6 +4926,8 @@ instantiate_type (lhstype, rhs, complain) tree lhstype, rhs; int complain; { + tree explicit_targs = NULL_TREE; + if (TREE_CODE (lhstype) == UNKNOWN_TYPE) { if (complain) @@ -4991,6 +5042,13 @@ instantiate_type (lhstype, rhs, complain) return rhs; } + case TEMPLATE_ID_EXPR: + { + explicit_targs = TREE_OPERAND (rhs, 1); + rhs = TREE_OPERAND (rhs, 0); + } + /* fall through */ + case TREE_LIST: { tree elem, baselink, name; @@ -5025,14 +5083,17 @@ instantiate_type (lhstype, rhs, complain) if (globals > 0) { elem = get_first_fn (rhs); - while (elem) - if (! comptypes (lhstype, TREE_TYPE (elem), 1)) - elem = DECL_CHAIN (elem); - else - { - mark_used (elem); - return elem; - } + /* If there are explicit_targs, only a template function + can match. */ + if (explicit_targs == NULL_TREE) + while (elem) + if (! comptypes (lhstype, TREE_TYPE (elem), 1)) + elem = DECL_CHAIN (elem); + else + { + mark_used (elem); + return elem; + } /* No exact match found, look for a compatible template. */ { @@ -5041,12 +5102,13 @@ instantiate_type (lhstype, rhs, complain) if (TREE_CODE (elem) == TEMPLATE_DECL) { int n = DECL_NTPARMS (elem); - tree t = make_tree_vec (n); + tree t = make_scratch_vec (n); int i, d = 0; i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (elem), &TREE_VEC_ELT (t, 0), TYPE_ARG_TYPES (TREE_TYPE (elem)), - TYPE_ARG_TYPES (lhstype), &d, 0, 1); + TYPE_ARG_TYPES (lhstype), explicit_targs, &d, + 1, 1); if (i == 0) { if (save_elem) @@ -5068,38 +5130,47 @@ instantiate_type (lhstype, rhs, complain) } } - /* No match found, look for a compatible function. */ - elem = get_first_fn (rhs); - while (elem && comp_target_types (lhstype, - TREE_TYPE (elem), 1) <= 0) - elem = DECL_CHAIN (elem); - if (elem) + /* If there are explicit_targs, only a template function + can match. */ + if (explicit_targs == NULL_TREE) { - tree save_elem = elem; - elem = DECL_CHAIN (elem); + /* No match found, look for a compatible function. */ + elem = get_first_fn (rhs); while (elem && comp_target_types (lhstype, - TREE_TYPE (elem), 0) <= 0) + TREE_TYPE (elem), 1) <= 0) elem = DECL_CHAIN (elem); if (elem) { - if (complain) + tree save_elem = elem; + elem = DECL_CHAIN (elem); + while (elem + && comp_target_types (lhstype, + TREE_TYPE (elem), 0) <= 0) + elem = DECL_CHAIN (elem); + if (elem) { - cp_error ("cannot resolve overload to target type `%#T'", - lhstype); - cp_error_at (" ambiguity between `%#D'", save_elem); - cp_error_at (" and `%#D', at least", elem); + if (complain) + { + cp_error + ("cannot resolve overload to target type `%#T'", + lhstype); + cp_error_at (" ambiguity between `%#D'", + save_elem); + cp_error_at (" and `%#D', at least", elem); + } + return error_mark_node; } - return error_mark_node; + mark_used (save_elem); + return save_elem; } - mark_used (save_elem); - return save_elem; } if (complain) { cp_error ("cannot resolve overload to target type `%#T'", lhstype); - cp_error (" because no suitable overload of function `%D' exists", - TREE_PURPOSE (rhs)); + cp_error + (" because no suitable overload of function `%D' exists", + TREE_PURPOSE (rhs)); } return error_mark_node; } @@ -5336,8 +5407,8 @@ get_vfield_name (type) binfo = BINFO_BASETYPE (binfo, 0); type = BINFO_TYPE (binfo); - buf = (char *)alloca (sizeof (VFIELD_NAME_FORMAT) - + TYPE_NAME_LENGTH (type) + 2); + buf = (char *) alloca (sizeof (VFIELD_NAME_FORMAT) + + TYPE_NAME_LENGTH (type) + 2); sprintf (buf, VFIELD_NAME_FORMAT, TYPE_NAME_STRING (type)); return get_identifier (buf); } diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index 6c6dff78c5c..65d20a71e5e 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -113,6 +113,14 @@ DEFTREECODE (USING_DECL, "using_decl", "d", 0) /* An un-parsed default argument. Looks like an IDENTIFIER_NODE. */ DEFTREECODE (DEFAULT_ARG, "default_arg", "c", 2) +/* A template-id, like foo. The first operand is the template. + The second is the list of explicitly specified arguments. The + template will be a FUNCTION_DECL, TEMPLATE_DECL, or a list of + overloaded functions and templates if the template-id refers to + a global template. If the template-id refers to a member template, + the template will will be an IDENTIFIER_NODE. */ +DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", "e", 2) + /* A whole bunch of tree codes for the initial, superficial parsing of templates. */ DEFTREECODE (LOOKUP_EXPR, "lookup_expr", "e", 2) diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 0daf874dde4..06a8c647103 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -257,6 +257,10 @@ extern int warn_sign_promo; extern int warn_extern_inline; +/* Non-zero means warn when an old-style cast is used. */ + +extern int warn_old_style_cast; + /* Nonzero means to treat bitfields as unsigned unless they say `signed'. */ extern int flag_signed_bitfields; @@ -307,6 +311,14 @@ extern int flag_handle_signatures; inline by default. */ extern int flag_default_inline; + +/* The name-mangling scheme to use. Versions of gcc before 2.8 use + version 0. */ +extern int name_mangling_version; + +/* Nonzero means that guiding declarations are allowed. */ +extern int flag_guiding_decls; + /* C++ language-specific tree codes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, @@ -928,11 +940,10 @@ struct lang_decl_flags unsigned saved_inline : 1; unsigned use_template : 2; - unsigned c_static : 1; unsigned nonconverting : 1; unsigned declared_inline : 1; unsigned not_really_extern : 1; - unsigned dummy : 4; + unsigned dummy : 5; tree access; tree context; @@ -1394,11 +1405,6 @@ extern int flag_new_for_scope; /* We know what we're doing with this decl now. */ #define DECL_INTERFACE_KNOWN(NODE) DECL_LANG_FLAG_5 (NODE) -/* This decl was declared or deduced to have internal linkage. This is - only meaningful if TREE_PUBLIC is set. */ -#define DECL_C_STATIC(NODE) \ - (DECL_LANG_SPECIFIC (NODE)->decl_flags.c_static) - /* This function was declared inline. This flag controls the linkage semantics of 'inline'; whether or not the function is inlined is controlled by DECL_INLINE. */ @@ -1414,10 +1420,6 @@ extern int flag_new_for_scope; #define DECL_REALLY_EXTERN(NODE) \ (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE)) -#define DECL_PUBLIC(NODE) \ - (TREE_CODE (NODE) == FUNCTION_DECL \ - ? ! DECL_C_STATIC (NODE) : TREE_PUBLIC (NODE)) - #define THUNK_DELTA(DECL) ((DECL)->decl.frame_size.i) /* ...and for unexpanded-parameterized-type nodes. */ @@ -2202,7 +2204,6 @@ extern void expand_throw PROTO((tree)); extern tree build_throw PROTO((tree)); /* in expr.c */ -/* skip cplus_expand_expr */ extern void init_cplus_expand PROTO((void)); extern void fixup_result_decl PROTO((tree, struct rtx_def *)); extern int extract_init PROTO((tree, tree)); @@ -2287,6 +2288,7 @@ extern tree snarf_defarg PROTO((void)); extern void add_defarg_fn PROTO((tree)); extern void do_pending_defargs PROTO((void)); extern int identifier_type PROTO((tree)); +extern void yyhook PROTO((int)); /* in method.c */ extern void init_method PROTO((void)); @@ -2295,6 +2297,7 @@ extern void report_type_mismatch PROTO((struct candidate *, tree, char *)); extern char *build_overload_name PROTO((tree, int, int)); extern tree build_static_name PROTO((tree, tree)); extern tree build_decl_overload PROTO((tree, tree, int)); +extern tree build_template_decl_overload PROTO((tree, tree, tree, tree, tree, int)); extern tree build_typename_overload PROTO((tree)); extern tree build_overload_with_type PROTO((tree, tree)); extern tree build_opfncall PROTO((enum tree_code, int, tree, tree, tree)); @@ -2312,18 +2315,24 @@ extern tree tsubst_chain PROTO((tree, tree)); extern void begin_member_template_processing PROTO((tree)); extern void end_member_template_processing PROTO((void)); extern void begin_template_parm_list PROTO((void)); +extern void begin_specialization PROTO((void)); +extern void reset_specialization PROTO((void)); +extern void end_specialization PROTO((void)); +extern tree determine_explicit_specialization PROTO((tree, tree, tree *, int, int)); +extern int check_explicit_specialization PROTO((tree, tree, int, int)); extern tree process_template_parm PROTO((tree, tree)); extern tree end_template_parm_list PROTO((tree)); extern void end_template_decl PROTO((void)); extern tree current_template_args PROTO((void)); extern void push_template_decl PROTO((tree)); extern tree lookup_template_class PROTO((tree, tree, tree)); +extern tree lookup_template_function PROTO((tree, tree)); extern int uses_template_parms PROTO((tree)); extern tree instantiate_class_template PROTO((tree)); extern tree instantiate_template PROTO((tree, tree)); extern void overload_template_name PROTO((tree)); -extern int fn_type_unification PROTO((tree, tree, tree, tree, int)); -extern int type_unification PROTO((tree, tree *, tree, tree, int *, int, int)); +extern int fn_type_unification PROTO((tree, tree, tree, tree, tree, int)); +extern int type_unification PROTO((tree, tree *, tree, tree, tree, int *, int, int)); struct tinst_level *tinst_for_decl PROTO((void)); extern void mark_decl_instantiated PROTO((tree, int)); extern int more_specialized PROTO((tree, tree)); @@ -2343,6 +2352,7 @@ extern tree most_specialized_class PROTO((tree, tree)); extern int more_specialized_class PROTO((tree, tree)); extern void do_pushlevel PROTO((void)); extern int is_member_template PROTO((tree)); +extern int processing_specialization; /* in repo.c */ extern void repo_template_used PROTO((tree)); @@ -2462,6 +2472,10 @@ extern int cp_tree_equal PROTO((tree, tree)); extern int can_free PROTO((struct obstack *, tree)); extern tree mapcar PROTO((tree, tree (*) (tree))); extern void debug_binfo PROTO((tree)); +#define scratchalloc expralloc +#define scratch_tree_cons expr_tree_cons +#define build_scratch_list build_expr_list +#define make_scratch_vec make_temp_vec /* in typeck.c */ extern tree condition_conversion PROTO((tree)); diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index b488c0d343e..29964928005 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -579,7 +579,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl) && ! CLASSTYPE_ABSTRACT_VIRTUALS (type) && (rval = build_method_call (NULL_TREE, ctor_identifier, - build_tree_list (NULL_TREE, expr), TYPE_BINFO (type), + build_expr_list (NULL_TREE, expr), TYPE_BINFO (type), LOOKUP_NO_CONVERSION|LOOKUP_SPECULATIVELY | LOOKUP_ONLYCONVERTING))) { @@ -589,7 +589,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl) { tree t = get_temp_name (type, toplevel_bindings_p ()); init = build_method_call (t, ctor_identifier, - build_tree_list (NULL_TREE, expr), + build_expr_list (NULL_TREE, expr), TYPE_BINFO (type), LOOKUP_NORMAL|LOOKUP_NO_CONVERSION | LOOKUP_ONLYCONVERTING); @@ -604,7 +604,7 @@ convert_to_reference (reftype, expr, convtype, flags, decl) else { init = build_method_call (NULL_TREE, ctor_identifier, - build_tree_list (NULL_TREE, expr), + build_expr_list (NULL_TREE, expr), TYPE_BINFO (type), LOOKUP_NORMAL|LOOKUP_NO_CONVERSION |LOOKUP_ONLYCONVERTING); @@ -711,18 +711,18 @@ convert_to_aggr (type, expr, msgp, protect) can_be_private = 0; can_be_protected = IDENTIFIER_CLASS_VALUE (name) || name == current_class_name; - parmlist = build_tree_list (NULL_TREE, expr); - parmtypes = tree_cons (NULL_TREE, TREE_TYPE (expr), void_list_node); + parmlist = build_expr_list (NULL_TREE, expr); + parmtypes = scratch_tree_cons (NULL_TREE, TREE_TYPE (expr), void_list_node); if (TYPE_USES_VIRTUAL_BASECLASSES (basetype)) { - parmtypes = tree_cons (NULL_TREE, integer_type_node, parmtypes); - parmlist = tree_cons (NULL_TREE, integer_one_node, parmlist); + parmtypes = expr_tree_cons (NULL_TREE, integer_type_node, parmtypes); + parmlist = scratch_tree_cons (NULL_TREE, integer_one_node, parmlist); } /* The type of the first argument will be filled in inside the loop. */ - parmlist = tree_cons (NULL_TREE, integer_zero_node, parmlist); - parmtypes = tree_cons (NULL_TREE, build_pointer_type (basetype), parmtypes); + parmlist = expr_tree_cons (NULL_TREE, integer_zero_node, parmlist); + parmtypes = scratch_tree_cons (NULL_TREE, build_pointer_type (basetype), parmtypes); /* No exact conversion was found. See if an approximate one will do. */ @@ -1119,7 +1119,7 @@ ocp_convert (type, expr, convtype, flags) } if (ctor) ctor = build_method_call (NULL_TREE, ctor_identifier, - build_tree_list (NULL_TREE, ctor), + build_expr_list (NULL_TREE, ctor), TYPE_BINFO (type), flags); if (ctor) return build_cplus_new (type, ctor); @@ -1139,7 +1139,7 @@ ocp_convert (type, expr, convtype, flags) if (TYPE_HAS_CONSTRUCTOR (complete_type (type))) ctor = build_method_call (NULL_TREE, ctor_identifier, - build_tree_list (NULL_TREE, e), + build_expr_list (NULL_TREE, e), TYPE_BINFO (type), (flags & LOOKUP_NORMAL) | LOOKUP_SPECULATIVELY diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index fb499bb28fe..7b3af601c29 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1,5 +1,5 @@ /* Process declarations and variables for C compiler. - Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -42,6 +42,14 @@ Boston, MA 02111-1307, USA. */ #include "output.h" #include "except.h" +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef NEED_DECLARATION_FREE +extern void free PROTO((void *)); +#endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @@ -157,9 +165,9 @@ static tree maybe_build_cleanup_1 PROTO((tree, tree)); static tree lookup_name_real PROTO((tree, int, int)); static void warn_extern_redeclared_static PROTO((tree, tree)); static void grok_reference_init PROTO((tree, tree, tree, tree *)); -static tree grokfndecl PROTO((tree, tree, tree, int, +static tree grokfndecl PROTO((tree, tree, tree, tree, int, enum overload_flags, - tree, tree, tree, int, int, int, int)); + tree, tree, tree, int, int, int, int, int, int)); static tree grokvardecl PROTO((tree, tree, RID_BIT_TYPE *, int, int)); static tree lookup_tag PROTO((enum tree_code, tree, struct binding_level *, int)); @@ -2159,6 +2167,7 @@ pushtag (name, type, globalize) DECL_IGNORED_P (d) = 1; TYPE_CONTEXT (type) = DECL_CONTEXT (d); + DECL_ASSEMBLER_NAME (d) = DECL_NAME (d); DECL_ASSEMBLER_NAME (d) = get_identifier (build_overload_name (type, 1, 1)); } @@ -2308,7 +2317,7 @@ decls_match (newdecl, olddecl) tree oldargs = DECL_TEMPLATE_PARMS (olddecl); int i; - /* Run through all the levels of template parmaters, checking + /* Run through all the levels of template parameters, checking that they match. */ while (newargs && oldargs) { @@ -2460,7 +2469,7 @@ duplicate_decls (newdecl, olddecl) /* If you declare a built-in or predefined function name as static, the old definition is overridden, but optionally warn this was a bad choice of name. Ditto for overloads. */ - if (! DECL_PUBLIC (newdecl) + if (! TREE_PUBLIC (newdecl) || (TREE_CODE (newdecl) == FUNCTION_DECL && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))) { @@ -2563,6 +2572,20 @@ duplicate_decls (newdecl, olddecl) cp_error_at ("previous declaration as `%#D'", olddecl); } } + else if ((TREE_CODE (olddecl) == FUNCTION_DECL + && DECL_TEMPLATE_SPECIALIZATION (olddecl) + && (!DECL_TEMPLATE_SPECIALIZATION (newdecl) + || (DECL_TI_TEMPLATE (newdecl) + != DECL_TI_TEMPLATE (olddecl)))) + || (TREE_CODE (newdecl) == FUNCTION_DECL + && DECL_TEMPLATE_SPECIALIZATION (newdecl) + && (!DECL_TEMPLATE_SPECIALIZATION (olddecl) + || (DECL_TI_TEMPLATE (olddecl) != DECL_TI_TEMPLATE + (newdecl))))) + /* It's OK to have a template specialization and a non-template + with the same type, or to have specializations of two + different templates with the same type. */ + return 0; else { char *errmsg = redeclaration_error_message (newdecl, olddecl); @@ -2601,8 +2624,9 @@ duplicate_decls (newdecl, olddecl) } } - if (TREE_CODE (olddecl) == FUNCTION_DECL - && ! DECL_USE_TEMPLATE (olddecl)) + if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl)) + ; + else if (TREE_CODE (olddecl) == FUNCTION_DECL) { tree t1 = TYPE_ARG_TYPES (TREE_TYPE (olddecl)); tree t2 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)); @@ -2834,9 +2858,6 @@ duplicate_decls (newdecl, olddecl) if (! DECL_EXTERNAL (olddecl)) DECL_EXTERNAL (newdecl) = 0; - if (TREE_CODE (newdecl) == FUNCTION_DECL) - DECL_C_STATIC (newdecl) |= DECL_C_STATIC (olddecl); - if (DECL_LANG_SPECIFIC (newdecl)) { DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl); @@ -2845,6 +2866,9 @@ duplicate_decls (newdecl, olddecl) if (TREE_CODE (newdecl) == FUNCTION_DECL) { + if (DECL_TEMPLATE_INSTANTIATION (olddecl) && + !DECL_TEMPLATE_INSTANTIATION (newdecl)) + DECL_USE_TEMPLATE (olddecl) = DECL_USE_TEMPLATE (newdecl); DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl); /* If either decl says `inline', this fn is inline, unless its @@ -3030,7 +3054,9 @@ pushdecl (x) char *file; int line; #endif - + if (TREE_CODE (name) == TEMPLATE_ID_EXPR) + name = TREE_OPERAND (name, 0); + t = lookup_name_current_level (name); if (t == error_mark_node) { @@ -3198,7 +3224,7 @@ pushdecl (x) /* If the first global decl has external linkage, warn if we later see static one. */ - if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && DECL_PUBLIC (x)) + if (IDENTIFIER_GLOBAL_VALUE (name) == NULL_TREE && TREE_PUBLIC (x)) TREE_PUBLIC (name) = 1; /* Don't install an artificial TYPE_DECL if we already have @@ -4317,7 +4343,9 @@ make_typename_type (context, name) { tree t, d; - if (TREE_CODE (name) == TYPE_DECL) + if (TREE_CODE_CLASS (TREE_CODE (name)) == 't') + name = TYPE_IDENTIFIER (name); + else if (TREE_CODE (name) == TYPE_DECL) name = DECL_NAME (name); else if (TREE_CODE (name) != IDENTIFIER_NODE) my_friendly_abort (2000); @@ -4325,7 +4353,11 @@ make_typename_type (context, name) if (! uses_template_parms (context) || context == current_class_type) { - t = lookup_field (context, name, 0, 1); + if (IS_AGGR_TYPE (context)) + t = lookup_field (context, name, 0, 1); + else + t = NULL_TREE; + if (t == NULL_TREE) { cp_error ("no type named `%#T' in `%#T'", name, context); @@ -4378,6 +4410,10 @@ lookup_name_real (name, prefer_type, nonclass) yylex = 1; prefer_type = looking_for_typename; + /* std:: becomes :: for now. */ + if (got_scope == std_node) + got_scope = void_type_node; + if (got_scope) type = got_scope; else if (got_object != error_mark_node) @@ -4965,11 +5001,6 @@ init_decl_processing () TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node); layout_type (TREE_TYPE (null_pointer_node)); - if (flag_ansi) - TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0); - else - TREE_TYPE (null_node) = build_pointer_type (void_type_node); - /* Used for expressions that do nothing, but are not errors. */ void_zero_node = build_int_2 (0, 0); TREE_TYPE (void_zero_node) = void_type_node; @@ -5093,7 +5124,7 @@ init_decl_processing () else delta_type_node = short_integer_type_node; - builtin_function ("__builtin_constant_p", int_ftype_int, + builtin_function ("__builtin_constant_p", default_function_type, BUILT_IN_CONSTANT_P, NULL_PTR); builtin_return_address_fndecl @@ -5282,7 +5313,14 @@ init_decl_processing () TYPE_MODE (unknown_type_node) = TYPE_MODE (void_type_node); /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */ TREE_TYPE (unknown_type_node) = unknown_type_node; - /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same result. */ + + if (flag_ansi) + TREE_TYPE (null_node) = type_for_size (POINTER_SIZE, 0); + else + TREE_TYPE (null_node) = build_pointer_type (unknown_type_node); + + /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same + result. */ TYPE_POINTER_TO (unknown_type_node) = unknown_type_node; TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node; @@ -6283,6 +6321,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) int temporary = allocation_temporary_p (); char *asmspec = NULL; int was_readonly = 0; + int already_used = 0; /* If this is 0, then we did not change obstacks. */ if (! decl) @@ -6347,7 +6386,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) /* If we have installed this as the canonical typedef for this type, and that type has not been defined yet, delay emitting - the debug informaion for it, as we will emit it later. */ + the debug information for it, as we will emit it later. */ if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl && TYPE_SIZE (TREE_TYPE (decl)) == NULL_TREE) TYPE_DECL_SUPPRESS_DEBUG (decl) = 1; @@ -6621,7 +6660,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) && current_function_decl && DECL_CONTEXT (decl) == current_function_decl && DECL_THIS_INLINE (current_function_decl) - && DECL_PUBLIC (current_function_decl)) + && TREE_PUBLIC (current_function_decl)) { if (DECL_INTERFACE_KNOWN (current_function_decl)) { @@ -6842,6 +6881,7 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) { /* Compute and store the initial value. */ expand_decl_init (decl); + already_used = TREE_USED (decl) || TREE_USED (type); if (init || TYPE_NEEDS_CONSTRUCTING (type)) { @@ -6854,10 +6894,19 @@ cp_finish_decl (decl, init, asmspec_tree, need_pop, flags) was initialized was ever used. Don't do this if it has a destructor, so we don't complain about the 'resource allocation is initialization' idiom. */ + /* Now set attribute((unused)) on types so decls of + of that type will be marked used. (see TREE_USED, above.) + This avoids the warning problems this particular code + tried to work around. */ + if (TYPE_NEEDS_CONSTRUCTING (type) + && ! already_used && cleanup == NULL_TREE && DECL_NAME (decl)) TREE_USED (decl) = 0; + + if (already_used) + TREE_USED (decl) = 1; } /* Cleanup any temporaries needed for the initial value. */ @@ -7009,7 +7058,7 @@ expand_static_init (decl, init) end_anon_func (); mark_addressable (cleanup); cleanup = build_unary_op (ADDR_EXPR, cleanup, 0); - fcall = build_function_call (Atexit, tree_cons (NULL_TREE, cleanup, NULL_TREE)); + fcall = build_function_call (Atexit, expr_tree_cons (NULL_TREE, cleanup, NULL_TREE)); expand_expr_stmt (fcall); } @@ -7170,14 +7219,16 @@ bad_specifiers (object, type, virtualp, quals, inlinep, friendp, raises) not look, and -1 if we should not call `grokclassfn' at all. */ static tree -grokfndecl (ctype, type, declarator, virtualp, flags, quals, - raises, attrlist, check, publicp, inlinep, funcdef_flag) +grokfndecl (ctype, type, declarator, orig_declarator, virtualp, flags, quals, + raises, attrlist, check, friendp, publicp, inlinep, funcdef_flag, + template_count) tree ctype, type; tree declarator; + tree orig_declarator; int virtualp; enum overload_flags flags; tree quals, raises, attrlist; - int check, publicp, inlinep, funcdef_flag; + int check, friendp, publicp, inlinep, funcdef_flag, template_count; { tree cname, decl; int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE; @@ -7197,7 +7248,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, decl = build_lang_decl (FUNCTION_DECL, declarator, type); /* propagate volatile out from type to decl */ if (TYPE_VOLATILE (type)) - TREE_THIS_VOLATILE (decl) = 1; + TREE_THIS_VOLATILE (decl) = 1; /* Should probably propagate const out from type to decl I bet (mrs). */ if (staticp) @@ -7209,10 +7260,6 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, if (ctype) DECL_CLASS_CONTEXT (decl) = ctype; - /* All function decls start out public; we'll fix their linkage later (at - definition or EOF) if appropriate. */ - TREE_PUBLIC (decl) = 1; - if (ctype == NULL_TREE && ! strcmp (IDENTIFIER_POINTER (declarator), "main")) { if (inlinep) @@ -7223,8 +7270,12 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, publicp = 1; } + TREE_PUBLIC (decl) = publicp; if (! publicp) - DECL_C_STATIC (decl) = 1; + { + DECL_INTERFACE_KNOWN (decl) = 1; + DECL_NOT_REALLY_EXTERN (decl) = 1; + } if (inlinep) DECL_THIS_INLINE (decl) = DECL_INLINE (decl) = 1; @@ -7241,7 +7292,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, grok_op_properties (decl, virtualp, check < 0); if (ctype && hack_decl_function_context (decl)) - DECL_NO_STATIC_CHAIN (decl) = 1; + DECL_NO_STATIC_CHAIN (decl) = 1; for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) if (TREE_PURPOSE (t) @@ -7252,6 +7303,11 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, } /* Caller will do the rest of this. */ + check_explicit_specialization (orig_declarator, decl, + template_count, + funcdef_flag ? 2 : + (friendp ? 3 : 0)); + if (check < 0) return decl; @@ -7269,6 +7325,7 @@ grokfndecl (ctype, type, declarator, virtualp, flags, quals, DECL_CONSTRUCTOR_P (decl) = 1; grokclassfn (ctype, declarator, decl, flags, quals); + if (check) { tmp = check_classfn (ctype, decl); @@ -7593,6 +7650,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) enum overload_flags flags = NO_SPECIAL; tree quals = NULL_TREE; tree raises = NULL_TREE; + int template_count = 0; RIDBIT_RESET_ALL (specbits); if (decl_context == FUNCDEF) @@ -7681,6 +7739,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) init = TREE_OPERAND (decl, 1); decl = start_decl (declarator, declspecs, 1); + /* Look for __unused__ attribute */ + if (TREE_USED (TREE_TYPE (decl))) + TREE_USED (decl) = 1; finish_decl (decl, init, NULL_TREE); return 0; } @@ -7706,9 +7767,27 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) } ctype = NULL_TREE; break; + + case TEMPLATE_ID_EXPR: + { + tree fns = TREE_OPERAND (decl, 0); + + if (TREE_CODE (fns) == LOOKUP_EXPR) + fns = TREE_OPERAND (fns, 0); + + if (TREE_CODE (fns) == IDENTIFIER_NODE) + dname = fns; + else if (really_overloaded_fn (fns)) + dname = DECL_NAME (get_first_fn (fns)); + else + dname = DECL_NAME (fns); + } + /* fall through */ case IDENTIFIER_NODE: - dname = decl; + if (TREE_CODE (decl) == IDENTIFIER_NODE) + dname = decl; + next = 0; if (is_rid (dname)) @@ -7718,7 +7797,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) name = IDENTIFIER_POINTER (dname); } if (! IDENTIFIER_OPNAME_P (dname) - /* Linux headers use '__op'. Arrgh. */ + /* GNU/Linux headers use '__op'. Arrgh. */ || IDENTIFIER_TYPENAME_P (dname) && ! TREE_TYPE (dname)) name = IDENTIFIER_POINTER (dname); else @@ -8404,7 +8483,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) Descend through it, creating more complex types, until we reach the declared identifier (or NULL_TREE, in an absolute declarator). */ - while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE) + while (declarator && TREE_CODE (declarator) != IDENTIFIER_NODE + && TREE_CODE (declarator) != TEMPLATE_ID_EXPR) { /* Each level of DECLARATOR is either an ARRAY_REF (for ...[..]), an INDIRECT_REF (for *...), @@ -8658,6 +8738,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) if (inner_decl && TREE_CODE (inner_decl) == SCOPE_REF) inner_decl = TREE_OPERAND (inner_decl, 1); + if (inner_decl && TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR) + inner_decl = dname; + /* Pick up type qualifiers which should be applied to `this'. */ quals = TREE_OPERAND (declarator, 2); @@ -8667,9 +8750,11 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) /* Say it's a definition only for the CALL_EXPR closest to the identifier. */ funcdecl_p - = inner_decl && (TREE_CODE (inner_decl) == IDENTIFIER_NODE - || TREE_CODE (inner_decl) == BIT_NOT_EXPR); - + = inner_decl + && (TREE_CODE (inner_decl) == IDENTIFIER_NODE + || TREE_CODE (inner_decl) == TEMPLATE_ID_EXPR + || TREE_CODE (inner_decl) == BIT_NOT_EXPR); + if (ctype == NULL_TREE && decl_context == FIELD && funcdecl_p @@ -8958,6 +9043,8 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) resolve to. The code here just needs to build up appropriate member types. */ tree sname = TREE_OPERAND (declarator, 1); + tree t; + /* Destructors can have their visibilities changed as well. */ if (TREE_CODE (sname) == BIT_NOT_EXPR) sname = TREE_OPERAND (sname, 0); @@ -9009,6 +9096,18 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) } ctype = TREE_OPERAND (declarator, 0); + t = ctype; + while (t != NULL_TREE) + { + if (CLASSTYPE_TEMPLATE_INFO (t)) + template_count += 1; + t = TYPE_MAIN_DECL (t); + if (DECL_LANG_SPECIFIC (t)) + t = DECL_CLASS_CONTEXT (t); + else + t = NULL_TREE; + } + if (sname == NULL_TREE) goto done_scoping; @@ -9427,10 +9526,13 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */ publicp = (! friendp || ! staticp); - decl = grokfndecl (ctype, type, declarator, + decl = grokfndecl (ctype, type, + TREE_CODE (declarator) != TEMPLATE_ID_EXPR + ? declarator : dname, + declarator, virtualp, flags, quals, raises, attrlist, - friendp ? -1 : 0, publicp, inlinep, - funcdef_flag); + friendp ? -1 : 0, friendp, publicp, inlinep, + funcdef_flag, template_count); if (decl == NULL_TREE) return NULL_TREE; #if 0 @@ -9448,9 +9550,10 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) members of other classes. */ /* All method decls are public, so tell grokfndecl to set TREE_PUBLIC, also. */ - decl = grokfndecl (ctype, type, declarator, + decl = grokfndecl (ctype, type, declarator, declarator, virtualp, flags, quals, raises, attrlist, - friendp ? -1 : 0, 1, 0, funcdef_flag); + friendp ? -1 : 0, friendp, 1, 0, funcdef_flag, + template_count); if (decl == NULL_TREE) return NULL_TREE; } @@ -9575,12 +9678,17 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) } else if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE) { - tree original_name = declarator; + tree original_name; int publicp = 0; if (! declarator) return NULL_TREE; + if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR) + original_name = dname; + else + original_name = declarator; + if (RIDBIT_SETP (RID_AUTO, specbits)) error ("storage class `auto' invalid for function `%s'", name); else if (RIDBIT_SETP (RID_REGISTER, specbits)) @@ -9618,7 +9726,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) && IDENTIFIER_POINTER (original_name)[1] == '_' && strncmp (IDENTIFIER_POINTER (original_name)+2, "builtin_", 8) == 0)) /* Plain overloading: will not be grok'd by grokclassfn. */ - declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0); + if (name_mangling_version < 1 + || TREE_CODE (declarator) != TEMPLATE_ID_EXPR) + declarator = build_decl_overload (dname, TYPE_ARG_TYPES (type), 0); } else if (TREE_CODE (type) == FUNCTION_TYPE && staticp < 2) type = build_cplus_method_type (build_type_variant (ctype, constp, volatilep), @@ -9629,16 +9739,19 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) || RIDBIT_SETP (RID_EXTERN, specbits) || !RIDBIT_SETP (RID_STATIC, specbits)); - decl = grokfndecl (ctype, type, original_name, + decl = grokfndecl (ctype, type, original_name, declarator, virtualp, flags, quals, raises, attrlist, - friendp ? 2 : 1, - publicp, inlinep, funcdef_flag); + friendp ? 2 : 1, friendp, + publicp, inlinep, funcdef_flag, + template_count); if (decl == NULL_TREE) return NULL_TREE; - if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c) + if (ctype == NULL_TREE && DECL_LANGUAGE (decl) != lang_c + && (!DECL_TEMPLATE_SPECIALIZATION (decl) || + name_mangling_version < 1)) DECL_ASSEMBLER_NAME (decl) = current_namespace_id (declarator); - + if (staticp == 1) { int illegal_static = 0; @@ -10043,7 +10156,7 @@ grokparms (first_parm, funcdef_flag) TREE_CHAIN (last_decl) = decl; last_decl = decl; } - if (TREE_PERMANENT (list_node)) + if (! current_function_decl && TREE_PERMANENT (list_node)) { TREE_PURPOSE (list_node) = init; TREE_VALUE (list_node) = type; @@ -11221,7 +11334,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) && ! CLASSTYPE_GOT_SEMICOLON (restype)) { cp_error ("semicolon missing after declaration of `%#T'", restype); - shadow_tag (build_tree_list (NULL_TREE, restype)); + shadow_tag (build_expr_list (NULL_TREE, restype)); CLASSTYPE_GOT_SEMICOLON (restype) = 1; if (TREE_CODE (fntype) == FUNCTION_TYPE) fntype = build_function_type (integer_type_node, @@ -11296,7 +11409,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) } if (warn_about_return_type) - warning ("return-type defaults to `int'"); + pedwarn ("return-type defaults to `int'"); /* Effective C++ rule 15. See also c_expand_return. */ if (warn_ecpp @@ -11345,11 +11458,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) = (interface_only || (DECL_THIS_INLINE (decl1) && ! flag_implement_inlines)); else - { - DECL_EXTERNAL (decl1) = 0; - if (DECL_C_STATIC (decl1)) - TREE_PUBLIC (decl1) = 0; - } + DECL_EXTERNAL (decl1) = 0; DECL_NOT_REALLY_EXTERN (decl1) = 0; DECL_INTERFACE_KNOWN (decl1) = 1; } @@ -11365,11 +11474,7 @@ start_function (declspecs, declarator, attrs, pre_parsed_p) && ! hack_decl_function_context (decl1)) DECL_DEFER_OUTPUT (decl1) = 1; else - { - DECL_INTERFACE_KNOWN (decl1) = 1; - if (DECL_C_STATIC (decl1)) - TREE_PUBLIC (decl1) = 0; - } + DECL_INTERFACE_KNOWN (decl1) = 1; } if (ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)) @@ -11683,8 +11788,6 @@ store_parm_decls () expand_start_bindings (0); } - last_parm_cleanup_insn = get_last_insn (); - if (! processing_template_decl && flag_exceptions) { /* Do the starting of the exception specifications, if we have any. */ @@ -11692,6 +11795,7 @@ store_parm_decls () expand_start_eh_spec (); } + last_parm_cleanup_insn = get_last_insn (); last_dtor_insn = get_last_insn (); } @@ -11747,7 +11851,7 @@ store_return_init (return_id, init) add_tree (build_min_nt (RETURN_INIT, return_id, copy_to_permanent (init))); else - cp_finish_decl (decl, init, NULL_TREE, 0, LOOKUP_ONLYCONVERTING); + cp_finish_decl (decl, init, NULL_TREE, 0, 0); } } @@ -11925,7 +12029,7 @@ finish_function (lineno, call_poplevel, nested) expand_expr_stmt (build_scoped_method_call (current_class_ref, vb, dtor_identifier, - build_tree_list (NULL_TREE, integer_zero_node))); + build_expr_list (NULL_TREE, integer_zero_node))); } vbases = TREE_CHAIN (vbases); } @@ -11950,8 +12054,8 @@ finish_function (lineno, call_poplevel, nested) error_mark_node), NULL_PTR), ansi_opname[(int) DELETE_EXPR], - tree_cons (NULL_TREE, current_class_ptr, - build_tree_list (NULL_TREE, virtual_size)), + expr_tree_cons (NULL_TREE, current_class_ptr, + build_expr_list (NULL_TREE, virtual_size)), NULL_TREE, LOOKUP_NORMAL); else if (TYPE_USES_VIRTUAL_BASECLASSES (current_class_type)) exprstmt = build_x_delete (ptr_type_node, current_class_ptr, 0, @@ -11973,7 +12077,7 @@ finish_function (lineno, call_poplevel, nested) poplevel (2, 0, 0); /* XXX change to 1 */ /* Back to the top of destructor. */ - /* Dont execute destructor code if `this' is NULL. */ + /* Don't execute destructor code if `this' is NULL. */ start_sequence (); @@ -12268,7 +12372,7 @@ finish_function (lineno, call_poplevel, nested) { /* If this function returns non-void and control can drop through, complain. */ - cp_pedwarn ("control reaches end of non-void function `%D'", fndecl); + cp_warning ("control reaches end of non-void function `%D'", fndecl); } /* With just -W, complain only if function returns both with and without a value. */ @@ -12587,8 +12691,8 @@ maybe_build_cleanup_1 (decl, auto_delete) if (TYPE_USES_VIRTUAL_BASECLASSES (type) && ! TYPE_HAS_DESTRUCTOR (type)) - rval = build_compound_expr (tree_cons (NULL_TREE, rval, - build_tree_list (NULL_TREE, build_vbase_delete (type, decl)))); + rval = build_compound_expr (expr_tree_cons (NULL_TREE, rval, + build_expr_list (NULL_TREE, build_vbase_delete (type, decl)))); if (TREE_CODE (decl) != PARM_DECL) resume_momentary (temp); diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 0f313f5e7ec..b51e6602fa6 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -37,8 +37,7 @@ Boston, MA 02111-1307, USA. */ #include "lex.h" #include "output.h" #include "except.h" - -extern tree get_file_function_name (); +#include "expr.h" #ifdef HAVE_STDLIB_H #include @@ -268,8 +267,11 @@ int warn_ecpp; int warn_sign_promo; -/* Nonzero means `$' can be in an identifier. - See cccp.c for reasons why this breaks some obscure ANSI C programs. */ +/* Nonzero means warn when an old-style cast is used. */ + +int warn_old_style_cast; + +/* Nonzero means `$' can be in an identifier. */ #ifndef DOLLARS_IN_IDENTIFIERS #define DOLLARS_IN_IDENTIFIERS 1 @@ -406,6 +408,14 @@ int flag_weak = 1; int max_tinst_depth = 17; +/* The name-mangling scheme to use. Must be 1 or greater to support + template functions with identical types, but different template + arguments. */ +int name_mangling_version = 1; + +/* Nonzero means that guiding declarations are allowed. */ +int flag_guiding_decls; + /* Table of language-dependent -f options. STRING is the option name. VARIABLE is the address of the variable. ON_VALUE is the value to store in VARIABLE @@ -465,7 +475,7 @@ lang_decode_option (p) char *p; { if (!strcmp (p, "-ftraditional") || !strcmp (p, "-traditional")) - dollars_in_ident = 1, flag_writable_strings = 1, + flag_writable_strings = 1, flag_this_is_variable = 1, flag_new_for_scope = 0; /* The +e options are for cfront compatibility. They come in as `-+eN', to kludge around gcc.c's argument handling. */ @@ -526,6 +536,17 @@ lang_decode_option (p) flag_implicit_templates = 0; found = 1; } + else if (!strcmp (p, "guiding-decls")) + { + flag_guiding_decls = 1; + name_mangling_version = 0; + found = 1; + } + else if (!strcmp (p, "no-guiding-decls")) + { + flag_guiding_decls = 0; + found = 1; + } else if (!strncmp (p, "template-depth-", 15)) { char *endp = p + 15; @@ -542,6 +563,22 @@ lang_decode_option (p) max_tinst_depth = atoi (p + 15); template_depth_lose: ; } + else if (!strncmp (p, "name-mangling-version-", 22)) + { + char *endp = p + 22; + while (*endp) + { + if (*endp >= '0' && *endp <= '9') + endp++; + else + { + error ("Invalid option `%s'", p - 2); + goto mangling_version_lose; + } + } + name_mangling_version = atoi (p + 22); + mangling_version_lose: ; + } else for (j = 0; !found && j < sizeof (lang_f_options) / sizeof (lang_f_options[0]); j++) @@ -614,6 +651,8 @@ lang_decode_option (p) warn_ecpp = setting; else if (!strcmp (p, "sign-promo")) warn_sign_promo = setting; + else if (!strcmp (p, "old-style-cast")) + warn_old_style_cast = setting; else if (!strcmp (p, "comment")) ; /* cpp handles this one. */ else if (!strcmp (p, "comments")) @@ -650,7 +689,7 @@ lang_decode_option (p) else return 0; } else if (!strcmp (p, "-ansi")) - dollars_in_ident = 0, flag_no_nonansi_builtin = 1, flag_ansi = 1, + flag_no_nonansi_builtin = 1, flag_ansi = 1, flag_no_gnu_keywords = 1, flag_operator_names = 1; #ifdef SPEW_DEBUG /* Undocumented, only ever used when you're invoking cc1plus by hand, since @@ -1395,14 +1434,19 @@ check_classfn (ctype, function) if (comptypes (TREE_TYPE (TREE_TYPE (function)), TREE_TYPE (TREE_TYPE (fndecl)), 1) - && compparms (p1, p2, 3)) + && compparms (p1, p2, 3) + && (DECL_TEMPLATE_SPECIALIZATION (function) + == DECL_TEMPLATE_SPECIALIZATION (fndecl)) + && (!DECL_TEMPLATE_SPECIALIZATION (function) + || (DECL_TI_TEMPLATE (function) + == DECL_TI_TEMPLATE (fndecl)))) return fndecl; - if (is_member_template (fndecl)) + if (is_member_template (fndecl)) /* This function might be an instantiation or specialization of fndecl. */ templates = - tree_cons (NULL_TREE, fndecl, templates); + scratch_tree_cons (NULL_TREE, fndecl, templates); } #endif fndecl = DECL_CHAIN (fndecl); @@ -1418,7 +1462,7 @@ check_classfn (ctype, function) the names don't match, there is some specialization occurring. */ templates = - tree_cons (NULL_TREE, fndecl, templates); + scratch_tree_cons (NULL_TREE, fndecl, templates); } } @@ -2173,7 +2217,7 @@ finish_anon_union (anon_union_decl) DECL_INITIAL (decl) = NULL_TREE; /* If there's a cleanup to do, it belongs in the TREE_PURPOSE of the following TREE_LIST. */ - elems = tree_cons (NULL_TREE, decl, elems); + elems = scratch_tree_cons (NULL_TREE, decl, elems); TREE_TYPE (elems) = type; } if (static_p) @@ -2545,8 +2589,9 @@ finish_prevtable_vardecl (prev, vars) && !DECL_ABSTRACT_VIRTUAL_P (method)) { SET_CLASSTYPE_INTERFACE_KNOWN (ctype); - CLASSTYPE_VTABLE_NEEDS_WRITING (ctype) = ! DECL_EXTERNAL (method); - CLASSTYPE_INTERFACE_ONLY (ctype) = DECL_EXTERNAL (method); + CLASSTYPE_VTABLE_NEEDS_WRITING (ctype) + = ! DECL_REALLY_EXTERN (method); + CLASSTYPE_INTERFACE_ONLY (ctype) = DECL_REALLY_EXTERN (method); break; } } @@ -2766,8 +2811,6 @@ import_export_decl (decl) else comdat_linkage (decl); } - else if (DECL_C_STATIC (decl)) - TREE_PUBLIC (decl) = 0; else comdat_linkage (decl); @@ -2839,9 +2882,6 @@ finish_file () at_eof = 1; - if (flag_detailed_statistics) - dump_tree_statistics (); - /* Bad parse errors. Just forget about it. */ if (! global_bindings_p () || current_class_type) return; @@ -3086,7 +3126,7 @@ finish_file () expand_expr (expand_vec_init (decl, TREE_VEC_ELT (init, 0), TREE_VEC_ELT (init, 1), TREE_VEC_ELT (init, 2), 0), - const0_rtx, VOIDmode, 0); + const0_rtx, VOIDmode, EXPAND_NORMAL); } else expand_assignment (decl, init, 0, 0); @@ -3221,11 +3261,10 @@ finish_file () DECL_EXTERNAL (decl) = 0; reconsider = 1; /* We can't inline this function after it's been - emitted, so just disable inlining. We want a - variant of output_inline_function that doesn't - prevent subsequent integration... */ - flag_no_inline = 1; - temporary_allocation (); + emitted. We want a variant of + output_inline_function that doesn't prevent + subsequent integration... */ + DECL_INLINE (decl) = 0; output_inline_function (decl); permanent_allocation (1); } @@ -3244,14 +3283,6 @@ finish_file () walk_vtables ((void (*) PROTO((tree, tree))) 0, prune_vtable_vardecl); - for (vars = getdecls (); vars; vars = TREE_CHAIN (vars)) - { - if (TREE_CODE (vars) == FUNCTION_DECL - && ! DECL_INTERFACE_KNOWN (vars) - && DECL_C_STATIC (vars)) - TREE_PUBLIC (vars) = 0; - } - if (write_virtuals == 2) { /* Now complain about an virtual function tables promised @@ -3272,7 +3303,10 @@ finish_file () varconst_time += this_time - start_time; if (flag_detailed_statistics) - dump_time_statistics (); + { + dump_tree_statistics (); + dump_time_statistics (); + } } /* This is something of the form 'A()()()()()+1' that has turned out to be an @@ -3345,6 +3379,9 @@ reparse_absdcl_as_casts (decl, expr) expr = build_c_cast (type, expr); } + if (warn_old_style_cast) + warning ("use of old-style cast"); + return expr; } @@ -3368,6 +3405,12 @@ build_expr_from_tree (t) else return do_identifier (TREE_OPERAND (t, 0), 0); + case TEMPLATE_ID_EXPR: + return lookup_template_function (build_expr_from_tree + (TREE_OPERAND (t, 0)), + build_expr_from_tree + (TREE_OPERAND (t, 1))); + case INDIRECT_REF: return build_x_indirect_ref (build_expr_from_tree (TREE_OPERAND (t, 0)), "unary *"); @@ -3554,7 +3597,7 @@ build_expr_from_tree (t) chain = TREE_CHAIN (t); if (chain && chain != void_type_node) chain = build_expr_from_tree (chain); - return tree_cons (purpose, value, chain); + return expr_tree_cons (purpose, value, chain); } case COMPONENT_REF: @@ -3601,7 +3644,7 @@ reparse_decl_as_expr (type, decl) { decl = build_expr_from_tree (decl); if (type) - return build_functional_cast (type, build_tree_list (NULL_TREE, decl)); + return build_functional_cast (type, build_expr_list (NULL_TREE, decl)); else return decl; } diff --git a/gcc/cp/error.c b/gcc/cp/error.c index 4f4c5996bb7..d6c6586b9dd 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -101,7 +101,7 @@ static void dump_function_name PROTO((tree)); static void dump_expr_list PROTO((tree)); static void dump_global_iord PROTO((tree)); static void dump_readonly_or_volatile PROTO((tree, enum pad)); -static void dump_char PROTO((char)); +static void dump_char PROTO((int)); static char *aggr_variety PROTO((tree)); static tree ident_fndecl PROTO((tree)); @@ -924,11 +924,77 @@ dump_function_name (t) } else dump_decl (name, 0); + + if ((DECL_TEMPLATE_SPECIALIZATION (t) || DECL_IMPLICIT_INSTANTIATION (t)) + && (DECL_CLASS_CONTEXT (t) == NULL_TREE || is_member_template (t))) + { + tree args = DECL_TEMPLATE_INFO (t) + ? DECL_TI_ARGS (t) : NULL_TREE; + + OB_PUTC ('<'); + + /* Be careful only to print things when we have them, so as not + to crash producing error messages. */ + if (args) + { + if (TREE_CODE (args) == TREE_LIST) + { + tree arg; + int need_comma = 0; + + for (arg = args; arg; arg = TREE_CHAIN (arg)) + { + tree a = TREE_VALUE (arg); + + if (need_comma) + OB_PUTS (", "); + + if (a) + { + if (TREE_CODE_CLASS (TREE_CODE (a)) == 't') + dump_type (a, 0); + else + dump_expr (a, 0); + } + + need_comma = 1; + } + } + else if (TREE_CODE (args) == TREE_VEC) + { + int i; + int need_comma = 0; + + if (TREE_VEC_LENGTH (args) > 0 + && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC) + args = TREE_VEC_ELT (args, 0); + + for (i = 0; i < TREE_VEC_LENGTH (args); i++) + { + tree a = TREE_VEC_ELT (args, i); + + if (need_comma) + OB_PUTS (", "); + + if (a) + { + if (TREE_CODE_CLASS (TREE_CODE (a)) == 't') + dump_type (a, 0); + else + dump_expr (a, 0); + } + + need_comma = 1; + } + } + } + OB_PUTC ('>'); + } } static void dump_char (c) - char c; + int c; { switch (c) { @@ -1698,7 +1764,10 @@ args_as_string (p, v) OB_INIT (); for (; p; p = TREE_CHAIN (p)) { - dump_type (error_type (TREE_VALUE (p)), v); + if (TREE_VALUE (p) == null_node) + OB_PUTS ("NULL"); + else + dump_type (error_type (TREE_VALUE (p)), v); if (TREE_CHAIN (p)) OB_PUTS (", "); } diff --git a/gcc/cp/except.c b/gcc/cp/except.c index 355485af399..a1a96f28337 100644 --- a/gcc/cp/except.c +++ b/gcc/cp/except.c @@ -1,5 +1,5 @@ /* Handle exceptional things in C++. - Copyright (C) 1989, 92-95, 1996 Free Software Foundation, Inc. + Copyright (C) 1989, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann Rewritten by Mike Stump , based upon an initial re-implementation courtesy Tad Hunt. @@ -180,8 +180,6 @@ static tree Unwind; /* Holds a ready to emit call to "terminate". */ static tree TerminateFunctionCall; -static tree empty_fndecl; - /* ====================================================================== */ @@ -196,14 +194,6 @@ static tree empty_fndecl; /* Holds the pc for doing "throw" */ static tree saved_pc; -/* Holds the type of the thing being thrown. */ -static tree saved_throw_type; -/* Holds the value being thrown. */ -static tree saved_throw_value; -/* Holds the cleanup for the value being thrown. */ -static tree saved_cleanup; -/* Indicates if we are in a catch clause. */ -static tree saved_in_catch; extern int throw_used; extern rtx catch_clauses; @@ -290,12 +280,6 @@ init_exception_processing () tree_cons (NULL_TREE, ptr_type_node, void_list_node)), NOT_BUILT_IN, NULL_PTR); - empty_fndecl - = builtin_function ("__empty", - vtype, - NOT_BUILT_IN, NULL_PTR); - DECL_EXTERNAL (empty_fndecl) = 1; - TREE_PUBLIC (empty_fndecl) = 1; Unexpected = default_conversion (unexpected_fndecl); Terminate = default_conversion (terminate_fndecl); @@ -310,47 +294,140 @@ init_exception_processing () pop_lang_context (); - declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE); - d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_pc")); - d = start_decl (d, declspecs, 0); - DECL_COMMON (d) = 1; - cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0); - saved_pc = lookup_name (get_identifier ("__eh_pc"), 0); - - declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE); - d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_type")); - d = start_decl (d, declspecs, 0); - DECL_COMMON (d) = 1; - cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0); - saved_throw_type = lookup_name (get_identifier ("__eh_type"), 0); - - declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE); - d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_value")); - d = start_decl (d, declspecs, 0); - DECL_COMMON (d) = 1; - cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0); - saved_throw_value = lookup_name (get_identifier ("__eh_value"), 0); - - declspecs = tree_cons (NULL_TREE, get_identifier ("void"), NULL_TREE); - d = build_parse_node (INDIRECT_REF, get_identifier ("__eh_cleanup")); - d = make_call_declarator (d, void_list_node, NULL_TREE, NULL_TREE); - d = start_decl (d, declspecs, 0); - DECL_COMMON (d) = 1; - cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0); - saved_cleanup = lookup_name (get_identifier ("__eh_cleanup"), 0); - - declspecs = tree_cons (NULL_TREE, get_identifier ("bool"), NULL_TREE); - d = get_identifier ("__eh_in_catch"); - d = start_decl (d, declspecs, 0); - DECL_COMMON (d) = 1; - cp_finish_decl (d, NULL_TREE, NULL_TREE, 1, 0); - saved_in_catch = lookup_name (get_identifier ("__eh_in_catch"), 0); + d = build_decl (VAR_DECL, get_identifier ("__eh_pc"), ptr_type_node); + TREE_PUBLIC (d) = 1; + DECL_EXTERNAL (d) = 1; + DECL_ARTIFICIAL (d) = 1; + cp_finish_decl (d, NULL_TREE, NULL_TREE, 0, 0); + saved_pc = d; /* If we use setjmp/longjmp EH, arrange for all cleanup actions to be protected with __terminate. */ protect_cleanup_actions_with_terminate = 1; } +/* Retrieve a pointer to the cp_eh_info node for the current exception. */ + +static tree +call_eh_info () +{ + tree fn; + + fn = get_identifier ("__cp_exception_info"); + if (IDENTIFIER_GLOBAL_VALUE (fn)) + fn = IDENTIFIER_GLOBAL_VALUE (fn); + else + { + tree t, fields[6]; + + /* Declare cp_eh_info * __cp_exception_info (void), + as defined in exception.cc. */ + push_obstacks_nochange (); + end_temporary_allocation (); + + /* struct cp_eh_info. This must match exception.cc. Note that this + type is not pushed anywhere. */ + t = make_lang_type (RECORD_TYPE); + fields[0] = build_lang_field_decl (FIELD_DECL, get_identifier ("value"), + ptr_type_node); + fields[1] = build_lang_field_decl (FIELD_DECL, get_identifier ("type"), + ptr_type_node); + fields[2] = build_lang_field_decl + (FIELD_DECL, get_identifier ("cleanup"), + build_pointer_type (build_function_type + (ptr_type_node, tree_cons + (NULL_TREE, ptr_type_node, void_list_node)))); + fields[3] = build_lang_field_decl (FIELD_DECL, get_identifier ("caught"), + boolean_type_node); + fields[4] = build_lang_field_decl (FIELD_DECL, get_identifier ("next"), + build_pointer_type (t)); + fields[5] = build_lang_field_decl + (FIELD_DECL, get_identifier ("handlers"), long_integer_type_node); + /* N.B.: The fourth field LEN is expected to be + the number of fields - 1, not the total number of fields. */ + finish_builtin_type (t, "cp_eh_info", fields, 5, ptr_type_node); + t = build_pointer_type (t); + + /* And now the function. */ + fn = build_lang_decl (FUNCTION_DECL, fn, + build_function_type (t, void_list_node)); + DECL_EXTERNAL (fn) = 1; + TREE_PUBLIC (fn) = 1; + DECL_ARTIFICIAL (fn) = 1; + pushdecl_top_level (fn); + make_function_rtl (fn); + assemble_external (fn); + pop_obstacks (); + } + return build_function_call (fn, NULL_TREE); +} + +/* Retrieve a pointer to the cp_eh_info node for the current exception + and save it in the current binding level. */ + +static void +push_eh_info () +{ + tree decl, fn = call_eh_info (); + + /* Remember the pointer to the current exception info; it won't change + during this catch block. */ + decl = build_decl (VAR_DECL, get_identifier ("__exception_info"), + TREE_TYPE (fn)); + DECL_ARTIFICIAL (decl) = 1; + DECL_INITIAL (decl) = fn; + decl = pushdecl (decl); + cp_finish_decl (decl, fn, NULL_TREE, 0, 0); +} + +/* Returns a reference to the cp_eh_info node for the current exception. */ + +static tree +get_eh_info () +{ + /* Look for the pointer pushed in push_eh_info. */ + tree t = lookup_name (get_identifier ("__exception_info"), 0); + return build_indirect_ref (t, NULL_PTR); +} + +/* Returns a reference to the current exception object. */ + +static tree +get_eh_value () +{ + return build_component_ref (get_eh_info (), get_identifier ("value"), + NULL_TREE, 0); +} + +/* Returns a reference to the current exception type. */ + +static tree +get_eh_type () +{ + return build_component_ref (get_eh_info (), get_identifier ("type"), + NULL_TREE, 0); +} + +/* Returns a reference to whether or not the current exception + has been caught. */ + +static tree +get_eh_caught () +{ + return build_component_ref (get_eh_info (), get_identifier ("caught"), + NULL_TREE, 0); +} + +/* Returns a reference to whether or not the current exception + has been caught. */ + +static tree +get_eh_handlers () +{ + return build_component_ref (get_eh_info (), get_identifier ("handlers"), + NULL_TREE, 0); +} + /* Build a type value for use at runtime for a type that is matched against by the exception handling system. */ @@ -396,25 +473,66 @@ build_eh_type (exp) return build_eh_type_type (TREE_TYPE (exp)); } -/* This routine creates the cleanup for the exception handling object. */ +/* Build up a call to __cp_pop_exception, to destroy the exception object + for the current catch block. HANDLER is either true or false, telling + the library whether or not it is being called from an exception handler; + if it is, it avoids destroying the object on rethrow. */ + +static tree +do_pop_exception (handler) + tree handler; +{ + tree fn, cleanup; + fn = get_identifier ("__cp_pop_exception"); + if (IDENTIFIER_GLOBAL_VALUE (fn)) + fn = IDENTIFIER_GLOBAL_VALUE (fn); + else + { + /* Declare void __cp_pop_exception (void *), + as defined in exception.cc. */ + push_obstacks_nochange (); + end_temporary_allocation (); + fn = build_lang_decl + (FUNCTION_DECL, fn, + build_function_type (void_type_node, tree_cons + (NULL_TREE, ptr_type_node, tree_cons + (NULL_TREE, boolean_type_node, + void_list_node)))); + DECL_EXTERNAL (fn) = 1; + TREE_PUBLIC (fn) = 1; + DECL_ARTIFICIAL (fn) = 1; + pushdecl_top_level (fn); + make_function_rtl (fn); + assemble_external (fn); + pop_obstacks (); + } + + /* Arrange to do a dynamically scoped cleanup upon exit from this region. */ + cleanup = lookup_name (get_identifier ("__exception_info"), 0); + cleanup = build_function_call (fn, expr_tree_cons + (NULL_TREE, cleanup, expr_tree_cons + (NULL_TREE, handler, NULL_TREE))); + return cleanup; +} + +/* This routine creates the cleanup for the current exception. */ static void push_eh_cleanup () { /* All cleanups must last longer than normal. */ int yes = suspend_momentary (); + expand_decl_cleanup_no_eh (NULL_TREE, do_pop_exception (boolean_false_node)); + resume_momentary (yes); - /* Arrange to do a dynamically scoped cleanup upon exit from this region. */ - tree cleanup = build_function_call (saved_cleanup, NULL_TREE); - cleanup = build (COMPOUND_EXPR, void_type_node, cleanup, - build_modify_expr (saved_in_catch, NOP_EXPR, - build_modify_expr (saved_throw_type, NOP_EXPR, integer_zero_node))); - expand_decl_cleanup (NULL_TREE, cleanup); + expand_expr (build_unary_op (PREINCREMENT_EXPR, get_eh_handlers (), 1), + const0_rtx, VOIDmode, EXPAND_NORMAL); - resume_momentary (yes); + /* We don't destroy the exception object on rethrow, so we can't use + the normal cleanup mechanism for it. */ + expand_eh_region_start (); } - /* call this to start a catch block. Typename is the typename, and identifier is the variable to place the object in or NULL if the variable doesn't matter. If typename is NULL, that means its a "catch (...)" or catch @@ -447,7 +565,19 @@ expand_start_catch_block (declspecs, declarator) if (! doing_eh (1)) return; - /* Create a binding level for the parm. */ + /* If we are not doing setjmp/longjmp EH, because we are reordered + out of line, we arrange to rethrow in the outer context so as to + skip through the terminate region we are nested in, should we + encounter an exception in the catch handler. We also need to do + this because we are not physically within the try block, if any, + that contains this catch block. + + Matches the end in expand_end_catch_block. */ + if (! exceptions_via_longjmp) + expand_eh_region_start (); + + /* Create a binding level for the eh_info and the exception object + cleanup. */ pushlevel (0); expand_start_bindings (0); @@ -456,25 +586,21 @@ expand_start_catch_block (declspecs, declarator) emit_line_note (input_filename, lineno); + push_eh_info (); + if (declspecs) { - tree exp; - rtx call_rtx, return_value_rtx; - tree init_type; - decl = grokdeclarator (declarator, declspecs, CATCHPARM, 1, NULL_TREE); if (decl == NULL_TREE) - { - error ("invalid catch parameter"); - - /* This is cheap, but we want to maintain the data - structures. */ - - expand_eh_region_start (); + error ("invalid catch parameter"); + } - return; - } + if (decl) + { + tree exp; + rtx call_rtx, return_value_rtx; + tree init_type; /* Make sure we mark the catch param as used, otherwise we'll get a warning about an unused ((anonymous)). */ @@ -486,12 +612,12 @@ expand_start_catch_block (declspecs, declarator) && TREE_CODE (init_type) != POINTER_TYPE) init_type = build_reference_type (init_type); - exp = saved_throw_value; - exp = tree_cons (NULL_TREE, + exp = get_eh_value (); + exp = expr_tree_cons (NULL_TREE, build_eh_type_type (TREE_TYPE (decl)), - tree_cons (NULL_TREE, - saved_throw_type, - tree_cons (NULL_TREE, exp, NULL_TREE))); + expr_tree_cons (NULL_TREE, + get_eh_type (), + expr_tree_cons (NULL_TREE, exp, NULL_TREE))); exp = build_function_call (CatchMatch, exp); call_rtx = expand_call (exp, NULL_RTX, 0); assemble_external (TREE_OPERAND (CatchMatch, 0)); @@ -507,35 +633,43 @@ expand_start_catch_block (declspecs, declarator) push_eh_cleanup (); - init = convert_from_reference (save_expr (make_tree (init_type, call_rtx))); + /* Create a binding level for the parm. */ + pushlevel (0); + expand_start_bindings (0); + + init = convert_from_reference (make_tree (init_type, call_rtx)); + + /* If the constructor for the catch parm exits via an exception, we + must call terminate. See eh23.C. */ + if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))) + { + /* Generate the copy constructor call directly so we can wrap it. + See also expand_default_init. */ + init = ocp_convert (TREE_TYPE (decl), init, + CONV_IMPLICIT|CONV_FORCE_TEMP, 0); + init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init, + TerminateFunctionCall); + } - /* Do we need the below two lines? */ /* Let `cp_finish_decl' know that this initializer is ok. */ DECL_INITIAL (decl) = init; decl = pushdecl (decl); + cp_finish_decl (decl, init, NULL_TREE, 0, LOOKUP_ONLYCONVERTING); } else { push_eh_cleanup (); + /* Create a binding level for the parm. */ + pushlevel (0); + expand_start_bindings (0); + /* Fall into the catch all section. */ } - emit_move_insn (DECL_RTL (saved_in_catch), const1_rtx); - - /* If we are not doing setjmp/longjmp EH, because we are reordered - out of line, we arrange to rethrow in the outer context so as to - skip through the terminate region we are nested in, should we - encounter an exception in the catch handler. - - If we are doing setjmp/longjmp EH, we need to skip through the EH - object cleanup region. This isn't quite right, as we really need - to clean the object up, but we cannot do that until we track - multiple EH objects. - - Matches the end in expand_end_catch_block. */ - expand_eh_region_start (); + init = build_modify_expr (get_eh_caught (), NOP_EXPR, integer_one_node); + expand_expr (init, const0_rtx, VOIDmode, EXPAND_NORMAL); emit_line_note (input_filename, lineno); } @@ -549,43 +683,42 @@ expand_start_catch_block (declspecs, declarator) void expand_end_catch_block () { - rtx start_region_label_rtx; - rtx end_region_label_rtx; - tree decls, t; - if (! doing_eh (1)) return; - t = make_node (RTL_EXPR); - TREE_TYPE (t) = void_type_node; - RTL_EXPR_RTL (t) = const0_rtx; - TREE_SIDE_EFFECTS (t) = 1; - start_sequence_for_rtl_expr (t); + /* Cleanup the EH parameter. */ + expand_end_bindings (getdecls (), kept_level_p (), 0); + poplevel (kept_level_p (), 1, 0); + + /* Matches push_eh_cleanup. */ + expand_eh_region_end (do_pop_exception (boolean_true_node)); - if (exceptions_via_longjmp) - { - /* If we are doing setjmp/longjmp EH, we need to skip through - the EH object cleanup region. This isn't quite right, as we - really need to clean the object up, but we cannot do that - until we track multiple EH objects. */ + /* Cleanup the EH object. */ + expand_end_bindings (getdecls (), kept_level_p (), 0); + poplevel (kept_level_p (), 1, 0); - emit_library_call (sjpopnthrow_libfunc, 0, VOIDmode, 0); - emit_barrier (); - } - else + if (! exceptions_via_longjmp) { /* If we are not doing setjmp/longjmp EH, we need an extra region around the whole catch block to skip through the terminate region we are nested in. */ - expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack))); - } + tree t = make_node (RTL_EXPR); + TREE_TYPE (t) = void_type_node; + RTL_EXPR_RTL (t) = const0_rtx; + TREE_SIDE_EFFECTS (t) = 1; + do_pending_stack_adjust (); + start_sequence_for_rtl_expr (t); - RTL_EXPR_SEQUENCE (t) = get_insns (); - end_sequence (); + expand_internal_throw (outer_context_label_stack->u.rlabel); - /* Matches the start in expand_start_catch_block. */ - expand_eh_region_end (t); + do_pending_stack_adjust (); + RTL_EXPR_SEQUENCE (t) = get_insns (); + end_sequence (); + + /* For the rethrow region. */ + expand_eh_region_end (t); + } /* Fall to outside the try statement when done executing handler and we fall off end of handler. This is jump Lresume in the @@ -594,10 +727,6 @@ expand_end_catch_block () expand_leftover_cleanups (); - /* Cleanup the EH parameter. */ - expand_end_bindings (getdecls (), kept_level_p (), 0); - poplevel (kept_level_p (), 1, 0); - /* label we emit to jump to if this catch block didn't match. */ /* This the closing } in the `if (eq) {' of the documentation. */ emit_label (pop_label_entry (&false_label_stack)); @@ -618,7 +747,7 @@ do_unwind (inner_throw_label) rtx temp; /* Call to __builtin_return_address. */ - params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); + params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); fcall = build_function_call (BuiltinReturnAddress, params); next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0); /* In the return, the new pc is pc+8, as the value coming in is @@ -671,14 +800,14 @@ do_unwind (inner_throw_label) #if 0 /* I would like to do this here, but the move below doesn't seem to work. */ /* Call to __builtin_return_address. */ - params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); + params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); fcall = build_function_call (BuiltinReturnAddress, params); next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0); emit_move_insn (next_pc, inner_throw_label); /* So, for now, just pass throw label to stack unwinder. */ #endif - params = tree_cons (NULL_TREE, make_tree (ptr_type_node, + params = expr_tree_cons (NULL_TREE, make_tree (ptr_type_node, inner_throw_label), NULL_TREE); do_function_call (Unwind, params, NULL_TREE); @@ -746,13 +875,15 @@ expand_builtin_throw () /* These two can be frontend specific. If wanted, they can go in expand_throw. */ /* Do we have a valid object we are throwing? */ - emit_cmp_insn (DECL_RTL (saved_throw_type), const0_rtx, EQ, NULL_RTX, - GET_MODE (DECL_RTL (saved_throw_type)), 0, 0); + t = call_eh_info (); + emit_cmp_insn (expand_expr (t, NULL_RTX, Pmode, 0), + const0_rtx, EQ, NULL_RTX, + GET_MODE (DECL_RTL (t)), 0, 0); emit_jump_insn (gen_beq (gotta_call_terminate)); /* search for an exception handler for the saved_pc */ handler = do_function_call (FirstExceptionMatch, - tree_cons (NULL_TREE, saved_pc, + expr_tree_cons (NULL_TREE, saved_pc, NULL_TREE), ptr_type_node); assemble_external (TREE_OPERAND (FirstExceptionMatch, 0)); @@ -800,7 +931,7 @@ expand_builtin_throw () emit_move_insn (next_pc, gen_rtx (MEM, Pmode, plus_constant (hard_frame_pointer_rtx, -4))); #else - params = tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); + params = expr_tree_cons (NULL_TREE, integer_zero_node, NULL_TREE); fcall = build_function_call (BuiltinReturnAddress, params); next_pc = expand_expr (fcall, NULL_RTX, Pmode, 0); #endif @@ -843,7 +974,8 @@ expand_builtin_throw () #ifdef DONT_ACCESS_GBLS_AFTER_EPILOGUE if (DONT_ACCESS_GBLS_AFTER_EPILOGUE) { - t = make_tree (build_pointer_type (TREE_TYPE (empty_fndecl)), + t = build_function_type (void_type_node, void_list_node); + t = make_tree (build_pointer_type (t), hard_function_value (ptr_type_node, NULL_TREE)); t = build_function_call (t, NULL_TREE); @@ -925,6 +1057,7 @@ expand_end_eh_spec (raises) TREE_TYPE (expr) = void_type_node; RTL_EXPR_RTL (expr) = const0_rtx; TREE_SIDE_EFFECTS (expr) = 1; + do_pending_stack_adjust (); start_sequence_for_rtl_expr (expr); cont = gen_label_rtx (); emit_move_insn (ret, gen_rtx (LABEL_REF, Pmode, cont)); @@ -934,6 +1067,7 @@ expand_end_eh_spec (raises) do_function_call (Terminate, NULL_TREE, NULL_TREE); assemble_external (TREE_OPERAND (Terminate, 0)); emit_barrier (); + do_pending_stack_adjust (); RTL_EXPR_SEQUENCE (expr) = get_insns (); end_sequence (); @@ -943,6 +1077,7 @@ expand_end_eh_spec (raises) TREE_TYPE (expr) = void_type_node; RTL_EXPR_RTL (expr) = const0_rtx; TREE_SIDE_EFFECTS (expr) = 1; + do_pending_stack_adjust (); start_sequence_for_rtl_expr (expr); cont = gen_label_rtx (); @@ -960,6 +1095,9 @@ expand_end_eh_spec (raises) emit_label (check); emit_move_insn (flag, const1_rtx); cont = gen_label_rtx (); + + push_eh_info (); + while (raises) { tree exp; @@ -968,12 +1106,12 @@ expand_end_eh_spec (raises) if (match_type) { /* check TREE_VALUE (raises) here */ - exp = saved_throw_value; - exp = tree_cons (NULL_TREE, + exp = get_eh_value (); + exp = expr_tree_cons (NULL_TREE, build_eh_type_type (match_type), - tree_cons (NULL_TREE, - saved_throw_type, - tree_cons (NULL_TREE, exp, NULL_TREE))); + expr_tree_cons (NULL_TREE, + get_eh_type (), + expr_tree_cons (NULL_TREE, exp, NULL_TREE))); exp = build_function_call (CatchMatch, exp); assemble_external (TREE_OPERAND (CatchMatch, 0)); @@ -987,6 +1125,7 @@ expand_end_eh_spec (raises) emit_indirect_jump (ret); emit_label (end); + do_pending_stack_adjust (); RTL_EXPR_SEQUENCE (expr) = get_insns (); end_sequence (); @@ -1000,8 +1139,10 @@ expand_end_eh_spec (raises) void expand_exception_blocks () { + do_pending_stack_adjust (); push_to_sequence (catch_clauses); expand_leftover_cleanups (); + do_pending_stack_adjust (); catch_clauses = get_insns (); end_sequence (); @@ -1012,8 +1153,10 @@ expand_exception_blocks () if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))) { expand_end_eh_spec (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (current_function_decl))); + do_pending_stack_adjust (); push_to_sequence (catch_clauses); expand_leftover_cleanups (); + do_pending_stack_adjust (); catch_clauses = get_insns (); end_sequence (); } @@ -1064,7 +1207,7 @@ start_anon_func () interface_unknown = 1; params = void_list_node; - /* tcf stands for throw clean funciton. */ + /* tcf stands for throw clean function. */ sprintf (name, "__tcf_%d", counter++); t = make_call_declarator (get_identifier (name), params, NULL_TREE, NULL_TREE); @@ -1113,6 +1256,8 @@ expand_throw (exp) tree exp; { rtx label; + tree fn; + static tree cleanup_type; if (! doing_eh (1)) return; @@ -1120,12 +1265,26 @@ expand_throw (exp) if (exp) { tree throw_type; - tree cleanup = empty_fndecl, e; + tree cleanup = NULL_TREE, e; /* throw expression */ /* First, decay it. */ exp = decay_conversion (exp); + /* cleanup_type is void (*)(void *, int), + the internal type of a destructor. */ + if (cleanup_type == NULL_TREE) + { + push_obstacks_nochange (); + end_temporary_allocation (); + cleanup_type = build_pointer_type + (build_function_type + (void_type_node, tree_cons + (NULL_TREE, ptr_type_node, tree_cons + (NULL_TREE, integer_type_node, void_list_node)))); + pop_obstacks (); + } + if (TREE_CODE (TREE_TYPE (exp)) == POINTER_TYPE) { throw_type = build_eh_type (exp); @@ -1137,7 +1296,7 @@ expand_throw (exp) /* Make a copy of the thrown object. WP 15.1.5 */ exp = build_new (NULL_TREE, TREE_TYPE (exp), - build_tree_list (NULL_TREE, exp), + build_expr_list (NULL_TREE, exp), 0); if (exp == error_mark_node) @@ -1146,33 +1305,83 @@ expand_throw (exp) object = build_indirect_ref (exp, NULL_PTR); throw_type = build_eh_type (object); - /* Build __tcf_ function. */ - cleanup = start_anon_func (); - object = build_delete (TREE_TYPE (exp), saved_throw_value, - integer_three_node, LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0); - expand_expr (object, const0_rtx, VOIDmode, 0); - end_anon_func (); - mark_addressable (cleanup); + if (TYPE_HAS_DESTRUCTOR (TREE_TYPE (object))) + { + cleanup = lookup_fnfields (TYPE_BINFO (TREE_TYPE (object)), + dtor_identifier, 0); + cleanup = TREE_VALUE (cleanup); + mark_addressable (cleanup); + /* Pretend it's a normal function. */ + cleanup = build1 (ADDR_EXPR, cleanup_type, cleanup); + } } - if (cleanup == empty_fndecl) - assemble_external (empty_fndecl); - - e = build_modify_expr (saved_throw_type, NOP_EXPR, throw_type); - expand_expr (e, const0_rtx, VOIDmode, 0); + if (cleanup == NULL_TREE) + { + cleanup = build_int_2 (0, 0); + TREE_TYPE (cleanup) = cleanup_type; + } - e = build_modify_expr (saved_throw_value, NOP_EXPR, exp); - e = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (e), e); - expand_expr (e, const0_rtx, VOIDmode, 0); + fn = get_identifier ("__cp_push_exception"); + if (IDENTIFIER_GLOBAL_VALUE (fn)) + fn = IDENTIFIER_GLOBAL_VALUE (fn); + else + { + /* Declare __cp_push_exception (void*, void*, void (*)(void*, int)), + as defined in exception.cc. */ + tree tmp; + push_obstacks_nochange (); + end_temporary_allocation (); + tmp = tree_cons + (NULL_TREE, ptr_type_node, tree_cons + (NULL_TREE, ptr_type_node, tree_cons + (NULL_TREE, cleanup_type, void_list_node))); + fn = build_lang_decl (FUNCTION_DECL, fn, + build_function_type (void_type_node, tmp)); + DECL_EXTERNAL (fn) = 1; + TREE_PUBLIC (fn) = 1; + DECL_ARTIFICIAL (fn) = 1; + pushdecl_top_level (fn); + make_function_rtl (fn); + assemble_external (fn); + pop_obstacks (); + } - cleanup = build_unary_op (ADDR_EXPR, cleanup, 0); - cleanup = build_modify_expr (saved_cleanup, NOP_EXPR, cleanup); - expand_expr (cleanup, const0_rtx, VOIDmode, 0); + /* The throw expression is a full-expression. */ + exp = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (exp), exp); + e = expr_tree_cons (NULL_TREE, exp, expr_tree_cons + (NULL_TREE, throw_type, expr_tree_cons + (NULL_TREE, cleanup, NULL_TREE))); + e = build_function_call (fn, e); + expand_expr (e, const0_rtx, VOIDmode, 0); } else { - /* rethrow current exception */ - /* This part is easy, as we don't have to do anything else. */ + /* rethrow current exception; note that it's no longer caught. */ + + tree fn = get_identifier ("__uncatch_exception"); + if (IDENTIFIER_GLOBAL_VALUE (fn)) + fn = IDENTIFIER_GLOBAL_VALUE (fn); + else + { + /* Declare void __uncatch_exception (void) + as defined in exception.cc. */ + push_obstacks_nochange (); + end_temporary_allocation (); + fn = build_lang_decl (FUNCTION_DECL, fn, + build_function_type (void_type_node, + void_list_node)); + DECL_EXTERNAL (fn) = 1; + TREE_PUBLIC (fn) = 1; + DECL_ARTIFICIAL (fn) = 1; + pushdecl_top_level (fn); + make_function_rtl (fn); + assemble_external (fn); + pop_obstacks (); + } + + exp = build_function_call (fn, NULL_TREE); + expand_expr (exp, const0_rtx, VOIDmode, EXPAND_NORMAL); } if (exceptions_via_longjmp) diff --git a/gcc/cp/exception.cc b/gcc/cp/exception.cc index 839525faafe..caaf5892282 100644 --- a/gcc/cp/exception.cc +++ b/gcc/cp/exception.cc @@ -73,6 +73,100 @@ unexpected () __unexpected_func (); } +/* C++-specific state about the current exception. + This must match init_exception_processing(). + + Note that handlers and caught are not redundant; when rethrown, an + exception can have multiple active handlers and still be considered + uncaught. */ + +struct cp_eh_info +{ + void *value; + void *type; + void (*cleanup)(void *, int); + bool caught; + cp_eh_info *next; + long handlers; +}; + +/* Language-specific EH info pointer, defined in libgcc2. */ + +extern cp_eh_info *__eh_info; // actually void* + +/* Is P the type_info node for a pointer of some kind? */ + +extern bool __is_pointer (void *); + +/* Compiler hook to return a pointer to the info for the current exception. + Used by get_eh_info (). */ + +extern "C" cp_eh_info * +__cp_exception_info (void) +{ + return __eh_info; +} + +/* Compiler hook to push a new exception onto the stack. + Used by expand_throw(). */ + +extern "C" void +__cp_push_exception (void *value, void *type, void (*cleanup)(void *, int)) +{ + cp_eh_info *p = new cp_eh_info; + p->value = value; + p->type = type; + p->cleanup = cleanup; + p->handlers = 0; + p->caught = false; + p->next = __eh_info; + __eh_info = p; +} + +/* Compiler hook to pop an exception that has been finalized. Used by + push_eh_cleanup(). P is the info for the exception caught by the + current catch block, and HANDLER determines if we've been called from + an exception handler; if so, we avoid destroying the object on rethrow. */ + +extern "C" void +__cp_pop_exception (cp_eh_info *p, bool handler) +{ + cp_eh_info **q = &__eh_info; + + --p->handlers; + + if (p->handlers > 0 || (handler && p == *q)) + return; + + for (; *q; q = &((*q)->next)) + if (*q == p) + break; + + if (! *q) + terminate (); + + *q = p->next; + + if (p->cleanup) + /* 3 is a magic value for destructors; see build_delete(). */ + p->cleanup (p->value, 3); + else if (__is_pointer (p->type)) + /* do nothing; pointers are passed directly in p->value. */; + else + delete p->value; + + delete p; +} + +extern "C" void +__uncatch_exception (void) +{ + cp_eh_info *p = __cp_exception_info (); + if (p) + p->caught = false; + /* otherwise __throw will call terminate(); don't crash here. */ +} + extern "C" void __throw_bad_cast (void) { @@ -85,18 +179,13 @@ __throw_bad_typeid (void) throw bad_typeid (); } -extern "C" void -__throw_bad_exception (void) -{ - throw bad_exception (); -} +/* Has the current exception been caught? */ bool uncaught_exception () { - extern void *__eh_type; - extern bool __eh_in_catch; - return __eh_type && ! __eh_in_catch; + cp_eh_info *p = __cp_exception_info (); + return p && ! p->caught; } const char * exception:: diff --git a/gcc/cp/expr.c b/gcc/cp/expr.c index 1967b76ea44..2162b0d7cf0 100644 --- a/gcc/cp/expr.c +++ b/gcc/cp/expr.c @@ -30,10 +30,12 @@ Boston, MA 02111-1307, USA. */ static tree extract_aggr_init PROTO((tree, tree)); static tree extract_scalar_init PROTO((tree, tree)); +static rtx cplus_expand_expr PROTO((tree, rtx, enum machine_mode, + enum expand_modifier)); /* Hook used by expand_expr to expand language-specific tree codes. */ -rtx +static rtx cplus_expand_expr (exp, target, tmode, modifier) tree exp; rtx target; @@ -110,7 +112,7 @@ cplus_expand_expr (exp, target, tmode, modifier) parameter value. */ mark_addressable (slot); if (TREE_PERMANENT (args)) - args = tree_cons (0, build1 (ADDR_EXPR, type, slot), + args = expr_tree_cons (0, build1 (ADDR_EXPR, type, slot), TREE_CHAIN (args)); else TREE_VALUE (args) = build1 (ADDR_EXPR, type, slot); diff --git a/gcc/cp/friend.c b/gcc/cp/friend.c index f73ed97e3c7..28c0bb44a68 100644 --- a/gcc/cp/friend.c +++ b/gcc/cp/friend.c @@ -380,9 +380,27 @@ do_friend (ctype, declarator, decl, parmdecls, flags, quals, funcdef_flag) if (funcdef_flag) DECL_CLASS_CONTEXT (decl) = current_class_type; - /* We can call pushdecl here, because the TREE_CHAIN of this - FUNCTION_DECL is not needed for other purposes. */ - decl = pushdecl (decl); + if (! DECL_USE_TEMPLATE (decl)) + { + /* We can call pushdecl here, because the TREE_CHAIN of this + FUNCTION_DECL is not needed for other purposes. Don't do this + for a template instantiation. */ + decl = pushdecl (decl); + + if (! funcdef_flag && ! flag_guiding_decls + && current_template_parms && uses_template_parms (decl)) + { + static int explained; + cp_warning ("friend declaration `%#D'", decl); + warning (" will not be treated as a template instantiation"); + if (! explained) + { + warning (" unless you compile with -fguiding-decls"); + warning (" or add <> after the function name"); + explained = 1; + } + } + } make_decl_rtl (decl, NULL_PTR, 1); add_friend (current_class_type, decl); diff --git a/gcc/cp/g++FAQ.texi b/gcc/cp/g++FAQ.texi index 09c812bc585..f0064f346b1 100644 --- a/gcc/cp/g++FAQ.texi +++ b/gcc/cp/g++FAQ.texi @@ -401,7 +401,7 @@ places Eberhard Mattes did the EMX port. His address is mattes@@azu.informatik.uni-stuttgart.de. -Read the FAQ file included with the distribution before harrassing the author. +Read the FAQ file included with the distribution before harassing the author. @cindex Apple support @cindex Macintosh support @@ -1901,7 +1901,7 @@ still be true when 2.8.0 is released. As of version 2.7.0, g++ has exception support on most but not all platforms (no support on MIPS-based platforms yet), but -it doesn't work right if optimizaton is enabled, which means the +it doesn't work right if optimization is enabled, which means the exception implementation is still not really ready for production use. diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c index beb8c570f96..66b27565766 100644 --- a/gcc/cp/g++spec.c +++ b/gcc/cp/g++spec.c @@ -1,3 +1,23 @@ +/* Specific flags and argument handling of the C++ front-end. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + #include "config.h" #include diff --git a/gcc/cp/gxxint.texi b/gcc/cp/gxxint.texi index 587f0a293ac..5f7346561c5 100644 --- a/gcc/cp/gxxint.texi +++ b/gcc/cp/gxxint.texi @@ -238,6 +238,13 @@ The functions @code{convert_to_aggr} and @code{build_method_call} use a given candidate function (that's how we get the list of candidates for @code{ideal_candidate}). +@item The Explicit Keyword + +The use of @code{explicit} on a constructor is used by @code{grokdeclarator} +to set the field @code{DECL_NONCONVERTING_P}. That value is used by +@code{build_method_call} and @code{build_user_type_conversion_1} to decide +if a particular constructor should be used as a candidate for conversions. + @end itemize @node Glossary, Macros, Implementation Specifics, Top @@ -1418,7 +1425,7 @@ Major disadvantages when enabling exceptions are: @itemize @bullet @item Code that uses caller saved registers, can't, when flow can be -transfered into that code from an exception handler. In high performace +transferred into that code from an exception handler. In high performance code this should not usually be true, so the effects should be minimal. @end itemize @@ -1471,7 +1478,7 @@ This can be passed in many ways, currently a tree is used. Another possibility would be insns for the handler, or a label that denotes a handler. I have a feeling insns might be the the best way to pass it. Semantics are, if an exception is thrown inside the region, control is -transfered unconditionally to the handler. If control passes through +transferred unconditionally to the handler. If control passes through the handler, then the backend is to rethrow the exception, in the context of the end of the original region. The handler is protected by the conventional mechanisms; it is the frontend's responsibility to @@ -1669,12 +1676,23 @@ For example @code{Foo::\u0319::Bar} is encoded as @subsection Templates -A template instantiation is encoded as the letter @samp{t}, +A class template instantiation is encoded as the letter @samp{t}, followed by the encoding of the template name, followed the number of template parameters, followed by encoding of the template parameters. If a template parameter is a type, it is written as a @samp{Z} followed by the encoding of the type. +A function template specialization (either an instantiation or an +explicit specialization) is encoded by an @samp{H} followed by the +encoding of the template parameters, as described above, followed by +an @samp{_}, the encoding of the argument types template function (not the +specialization), another @samp{_}, and the return type. (Like the +argument types, the return type is the return type of the function +template, not the specialization.) Template parameters in the argument +and return types are encoded by an @samp{X} for type parameters, or a +@samp{Y} for constant parameters, and an index indicating their position +in the template parameter list declaration. + @subsection Arrays C++ array types are mangled by emitting @samp{A}, followed by @@ -1720,6 +1738,9 @@ Encodes the C++ and Java @code{float} types. @item F Used to indicate a function type. +@item H +Used to indicate a template function. + @item i Encodes the C++ and Java @code{int} types. @@ -1775,6 +1796,12 @@ Encodes the C++ @code{wchar_t} type, and the Java @code{char} types. @item x Encodes the GNU C++ @code{long long} type, and the Java @code{long} type. +@item X +Encodes a template type parameter, when part of a function type. + +@item Y +Encodes a template constant parameter, when part of a function type. + @item Z Used for template type parameters. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1f032e07c13..ca23848abaf 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1,5 +1,5 @@ /* Handle initialization things in C++. - Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA. */ #include "flags.h" #include "output.h" #include "except.h" +#include "expr.h" extern void compiler_error (); @@ -172,7 +173,7 @@ perform_member_init (member, name, init, explicit) /* Since `init' is already a TREE_LIST on the current_member_init_list, only build it into one if we aren't already a list. */ if (init != NULL_TREE && TREE_CODE (init) != TREE_LIST) - init = build_tree_list (NULL_TREE, init); + init = build_expr_list (NULL_TREE, init); decl = build_component_ref (current_class_ref, name, NULL_TREE, explicit); @@ -488,7 +489,7 @@ build_partial_cleanup_for (binfo) { return build_scoped_method_call (current_class_ref, binfo, dtor_identifier, - build_tree_list (NULL_TREE, integer_zero_node)); + build_expr_list (NULL_TREE, integer_zero_node)); } /* Perform whatever initializations have yet to be done on the base @@ -1265,7 +1266,17 @@ expand_default_init (binfo, true_exp, exp, init, alias_this, flags) && TREE_CODE (init) == TARGET_EXPR && TREE_TYPE (init) == type)) init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); - expand_assignment (exp, init, 0, 0); + if (TREE_CODE (init) == TRY_CATCH_EXPR) + /* We need to protect the initialization of a catch parm + with a call to terminate(), which shows up as a TRY_CATCH_EXPR + around the TARGET_EXPR for the copy constructor. See + expand_start_catch_block. */ + TREE_OPERAND (init, 0) = build (INIT_EXPR, TREE_TYPE (exp), exp, + TREE_OPERAND (init, 0)); + else + init = build (INIT_EXPR, TREE_TYPE (exp), exp, init); + TREE_SIDE_EFFECTS (init) = 1; + expand_expr_stmt (init); return; } @@ -1286,14 +1297,14 @@ expand_default_init (binfo, true_exp, exp, init, alias_this, flags) return; } else - parms = build_tree_list (NULL_TREE, init); + parms = build_expr_list (NULL_TREE, init); if (TYPE_USES_VIRTUAL_BASECLASSES (type)) { if (true_exp == exp) - parms = tree_cons (NULL_TREE, integer_one_node, parms); + parms = expr_tree_cons (NULL_TREE, integer_one_node, parms); else - parms = tree_cons (NULL_TREE, integer_zero_node, parms); + parms = expr_tree_cons (NULL_TREE, integer_zero_node, parms); flags |= LOOKUP_HAS_IN_CHARGE; } @@ -1433,7 +1444,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags) /* Unify the initialization targets. */ DECL_RTL (TREE_OPERAND (init, 0)) = DECL_RTL (exp); else - DECL_RTL (TREE_OPERAND (init, 0)) = expand_expr (exp, NULL_RTX, VOIDmode, 0); + DECL_RTL (TREE_OPERAND (init, 0)) = expand_expr (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL); expand_expr_stmt (init); return; @@ -1472,7 +1483,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags) if (exp == DECL_RESULT (current_function_decl)) DECL_INITIAL (exp) = init; TREE_SIDE_EFFECTS (init) = 1; - expand_expr (init, const0_rtx, VOIDmode, 0); + expand_expr (init, const0_rtx, VOIDmode, EXPAND_NORMAL); free_temp_slots (); return; } @@ -1548,7 +1559,7 @@ expand_aggr_init_1 (binfo, true_exp, exp, init, alias_this, flags) { /* See if there is a constructor for``type'' that takes a ``ttype''-typed object. */ - tree parms = build_tree_list (NULL_TREE, init); + tree parms = build_expr_list (NULL_TREE, init); tree as_cons = NULL_TREE; if (TYPE_HAS_CONSTRUCTOR (type)) as_cons = build_method_call (exp, ctor_identifier, @@ -1681,7 +1692,7 @@ build_member_call (type, name, parmlist) tree type, name, parmlist; { tree t; - tree method_name = name; + tree method_name; int dtor = 0; int dont_use_this = 0; tree basetype_path, decl; @@ -1690,6 +1701,11 @@ build_member_call (type, name, parmlist) return build_x_function_call (do_scoped_id (name, 0), parmlist, current_class_ref); + if (TREE_CODE (name) != TEMPLATE_ID_EXPR) + method_name = name; + else + method_name = TREE_OPERAND (name, 0); + if (TREE_CODE (method_name) == BIT_NOT_EXPR) { method_name = TREE_OPERAND (method_name, 0); @@ -1758,7 +1774,10 @@ build_member_call (type, name, parmlist) || method_name == constructor_name_full (type)) return build_functional_cast (type, parmlist); if (t = lookup_fnfields (basetype_path, method_name, 0)) - return build_method_call (decl, method_name, parmlist, basetype_path, + return build_method_call (decl, + TREE_CODE (name) == TEMPLATE_ID_EXPR + ? name : method_name, + parmlist, basetype_path, LOOKUP_NORMAL|LOOKUP_NONVIRTUAL); if (TREE_CODE (name) == IDENTIFIER_NODE && ((t = lookup_field (TYPE_BINFO (type), name, 1, 0)))) @@ -2122,7 +2141,7 @@ resolve_offset_ref (exp) member = cp_convert (ptrdiff_type_node, build_unary_op (ADDR_EXPR, member, 0)); - /* Pointer to data mebers are offset by one, so that a null + /* Pointer to data members are offset by one, so that a null pointer with a real value of 0 is distinguishable from an offset of the first member of a structure. */ member = build_binary_op (MINUS_EXPR, member, @@ -2499,7 +2518,7 @@ build_new (placement, decl, init, use_global_new) { rval = build_builtin_call (build_pointer_type (true_type), has_array ? BIVN : BIN, - build_tree_list (NULL_TREE, size)); + build_expr_list (NULL_TREE, size)); TREE_CALLS_NEW (rval) = 1; } @@ -2529,8 +2548,8 @@ build_new (placement, decl, init, use_global_new) rval = cp_convert (build_pointer_type (true_type), rval); TREE_CALLS_NEW (rval) = 1; TREE_SIDE_EFFECTS (rval) = 1; - rval = build_compound_expr (tree_cons (NULL_TREE, exp1, - build_tree_list (NULL_TREE, rval))); + rval = build_compound_expr (expr_tree_cons (NULL_TREE, exp1, + build_expr_list (NULL_TREE, rval))); } if (rval == error_mark_node) @@ -2581,7 +2600,7 @@ build_new (placement, decl, init, use_global_new) if (rval && TYPE_USES_VIRTUAL_BASECLASSES (true_type)) { - init = tree_cons (NULL_TREE, integer_one_node, init); + init = expr_tree_cons (NULL_TREE, integer_one_node, init); flags |= LOOKUP_HAS_IN_CHARGE; } @@ -2641,7 +2660,7 @@ build_new (placement, decl, init, use_global_new) do_pending_stack_adjust (); start_sequence_for_rtl_expr (xval); emit_note (0, -1); - rtxval = expand_expr (alloc_expr, NULL_RTX, VOIDmode, 0); + rtxval = expand_expr (alloc_expr, NULL_RTX, VOIDmode, EXPAND_NORMAL); do_pending_stack_adjust (); TREE_SIDE_EFFECTS (xval) = 1; RTL_EXPR_SEQUENCE (xval) = get_insns (); @@ -2708,7 +2727,7 @@ build_new (placement, decl, init, use_global_new) if (pending_sizes) rval = build_compound_expr (chainon (pending_sizes, - build_tree_list (NULL_TREE, rval))); + build_expr_list (NULL_TREE, rval))); return rval; } @@ -2776,7 +2795,7 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, 1)); /* This is the real size */ virtual_size = size_binop (PLUS_EXPR, virtual_size, BI_header_size); - body = build_tree_list (NULL_TREE, + body = build_expr_list (NULL_TREE, build_x_delete (ptype, base_tbd, 2 | use_global_delete, virtual_size)); @@ -2788,24 +2807,24 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, else body = NULL_TREE; - body = tree_cons (NULL_TREE, + body = expr_tree_cons (NULL_TREE, build_delete (ptype, tbase, auto_delete, LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1), body); - body = tree_cons (NULL_TREE, + body = expr_tree_cons (NULL_TREE, build_modify_expr (tbase, NOP_EXPR, build (MINUS_EXPR, ptype, tbase, size_exp)), body); - body = tree_cons (NULL_TREE, + body = expr_tree_cons (NULL_TREE, build (EXIT_EXPR, void_type_node, build (EQ_EXPR, boolean_type_node, base, tbase)), body); loop = build (LOOP_EXPR, void_type_node, build_compound_expr (body)); - loop = tree_cons (NULL_TREE, tbase_init, - tree_cons (NULL_TREE, loop, NULL_TREE)); + loop = expr_tree_cons (NULL_TREE, tbase_init, + expr_tree_cons (NULL_TREE, loop, NULL_TREE)); loop = build_compound_expr (loop); no_destructor: @@ -2846,8 +2865,8 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, if (loop && deallocate_expr != integer_zero_node) { - body = tree_cons (NULL_TREE, loop, - tree_cons (NULL_TREE, deallocate_expr, NULL_TREE)); + body = expr_tree_cons (NULL_TREE, loop, + expr_tree_cons (NULL_TREE, deallocate_expr, NULL_TREE)); body = build_compound_expr (body); } else @@ -3099,7 +3118,7 @@ expand_vec_init (decl, base, maxindex, init, from_array) (rval, build_binary_op (MINUS_EXPR, maxindex, iterator, 1), type); - expand_expr (e1, const0_rtx, VOIDmode, 0); + expand_expr (e1, const0_rtx, VOIDmode, EXPAND_NORMAL); RTL_EXPR_SEQUENCE (cleanup) = get_insns (); end_sequence (); @@ -3149,7 +3168,7 @@ build_x_delete (type, addr, which_delete, virtual_size) rval = build_opfncall (code, LOOKUP_NORMAL, addr, virtual_size, NULL_TREE); else rval = build_builtin_call (void_type_node, use_vec_delete ? BIVD : BID, - build_tree_list (NULL_TREE, addr)); + build_expr_list (NULL_TREE, addr)); return rval; } @@ -3200,7 +3219,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) { /* Call the builtin operator delete. */ return build_builtin_call (void_type_node, BID, - build_tree_list (NULL_TREE, addr)); + build_expr_list (NULL_TREE, addr)); } if (TREE_SIDE_EFFECTS (addr)) addr = save_expr (addr); @@ -3258,7 +3277,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) /* Call the builtin operator delete. */ return build_builtin_call (void_type_node, BID, - build_tree_list (NULL_TREE, addr)); + build_expr_list (NULL_TREE, addr)); } /* Below, we will reverse the order in which these calls are made. @@ -3275,7 +3294,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) tree cond = fold (build (BIT_AND_EXPR, integer_type_node, auto_delete, integer_one_node)); tree call = build_builtin_call - (void_type_node, BID, build_tree_list (NULL_TREE, addr)); + (void_type_node, BID, build_expr_list (NULL_TREE, addr)); cond = fold (build (COND_EXPR, void_type_node, cond, call, void_zero_node)); @@ -3289,7 +3308,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) passed_auto_delete = auto_delete; expr = build_method_call - (ref, dtor_identifier, build_tree_list (NULL_TREE, passed_auto_delete), + (ref, dtor_identifier, build_expr_list (NULL_TREE, passed_auto_delete), NULL_TREE, flags); if (do_delete) @@ -3328,14 +3347,14 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) cond = build (COND_EXPR, void_type_node, build (BIT_AND_EXPR, integer_type_node, auto_delete, integer_one_node), build_builtin_call (void_type_node, BID, - build_tree_list (NULL_TREE, addr)), + build_expr_list (NULL_TREE, addr)), void_zero_node); } else cond = NULL_TREE; if (cond) - exprstmt = build_tree_list (NULL_TREE, cond); + exprstmt = build_expr_list (NULL_TREE, cond); if (base_binfo && ! TREE_VIA_VIRTUAL (base_binfo) @@ -3350,8 +3369,8 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) expr = build_scoped_method_call (ref, base_binfo, dtor_identifier, - build_tree_list (NULL_TREE, this_auto_delete)); - exprstmt = tree_cons (NULL_TREE, expr, exprstmt); + build_expr_list (NULL_TREE, this_auto_delete)); + exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt); } /* Take care of the remaining baseclasses. */ @@ -3364,9 +3383,9 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) expr = build_scoped_method_call (ref, base_binfo, dtor_identifier, - build_tree_list (NULL_TREE, integer_zero_node)); + build_expr_list (NULL_TREE, integer_zero_node)); - exprstmt = tree_cons (NULL_TREE, expr, exprstmt); + exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt); } for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member)) @@ -3378,7 +3397,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) tree this_member = build_component_ref (ref, DECL_NAME (member), NULL_TREE, 0); tree this_type = TREE_TYPE (member); expr = build_delete (this_type, this_member, integer_two_node, flags, 0); - exprstmt = tree_cons (NULL_TREE, expr, exprstmt); + exprstmt = expr_tree_cons (NULL_TREE, expr, exprstmt); } } @@ -3405,7 +3424,7 @@ build_vbase_delete (type, decl) { tree this_addr = convert_force (build_pointer_type (BINFO_TYPE (vbases)), addr, 0); - result = tree_cons (NULL_TREE, + result = expr_tree_cons (NULL_TREE, build_delete (TREE_TYPE (this_addr), this_addr, integer_zero_node, LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 0), diff --git a/gcc/cp/lang-options.h b/gcc/cp/lang-options.h index 73b37fb7d1d..045584965f8 100644 --- a/gcc/cp/lang-options.h +++ b/gcc/cp/lang-options.h @@ -48,6 +48,8 @@ Boston, MA 02111-1307, USA. */ "-fno-external-templates", "-ffor-scope", "-fno-for-scope", + "-fguiding-decls", + "-fno-guiding-decls", "-fgnu-keywords", "-fno-gnu-keywords", "-fhandle-exceptions", @@ -64,6 +66,7 @@ Boston, MA 02111-1307, USA. */ "-fno-labels-ok", "-fmemoize-lookups", "-fno-memoize-lookups", + "-fname-mangling-version-", "-fnonnull-objects", "-fno-nonnull-objects", "-foperator-names", @@ -108,3 +111,5 @@ Boston, MA 02111-1307, USA. */ "-Wno-effc++", "-Wsign-promo", "-Wno-sign-promo", + "-Wold-style-cast", + "-Wno-old-style-cast", diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h index 11f0db28cb8..381bec56ecb 100644 --- a/gcc/cp/lang-specs.h +++ b/gcc/cp/lang-specs.h @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ %{C:%{!E:%eGNU C++ does not support -C without using -E}}\ %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\ -undef -D__GNUC__=%v1 -D__GNUG__=%v1 -D__cplusplus -D__GNUC_MINOR__=%v2\ - %{ansi:-trigraphs -$ -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\ + %{ansi:-trigraphs -D__STRICT_ANSI__} %{!undef:%{!ansi:%p} %P}\ %{!fno-exceptions:-D__EXCEPTIONS}\ %c %{O*:%{!O0:-D__OPTIMIZE__}} %{trigraphs}\ %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\ diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c index 8bd9c57624a..f634b213505 100644 --- a/gcc/cp/lex.c +++ b/gcc/cp/lex.c @@ -1,5 +1,5 @@ /* Separate lexical analyzer for GNU C++. - Copyright (C) 1987, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -39,6 +39,13 @@ Boston, MA 02111-1307, USA. */ #include "obstack.h" #include "c-pragma.h" +/* MULTIBYTE_CHARS support only works for native compilers. + ??? Ideally what we want is to model widechar support after + the current floating point support. */ +#ifdef CROSS_COMPILE +#undef MULTIBYTE_CHARS +#endif + #ifdef MULTIBYTE_CHARS #include #include @@ -93,10 +100,16 @@ static void reinit_parse_for_expr PROTO((struct obstack *)); /* Given a file name X, return the nondirectory portion. Keep in mind that X can be computed more than once. */ -#ifndef FILE_NAME_NONDIRECTORY -#define FILE_NAME_NONDIRECTORY(X) \ - (rindex (X, '/') != 0 ? rindex (X, '/') + 1 : X) -#endif +char * +file_name_nondirectory (x) + char *x; +{ + char *tmp = (char *) rindex (x, '/'); + if (tmp) + return (char *) (tmp + 1); + else + return x; +} /* This obstack is needed to hold text. It is not safe to use TOKEN_BUFFER because `check_newline' calls `yylex'. */ @@ -387,6 +400,10 @@ lang_init () put_back (check_newline ()); if (flag_gnu_xref) GNU_xref_begin (input_filename); init_repo (input_filename); + + /* See comments in toplev.c before the call to lang_init. */ + if (flag_exceptions == 2) + flag_exceptions = 1; } void @@ -1129,7 +1146,7 @@ set_typedecl_interface_info (prev, vars) tree type = TREE_TYPE (vars); CLASSTYPE_INTERFACE_ONLY (type) = TREE_INT_CST_LOW (fileinfo) - = interface_strcmp (FILE_NAME_NONDIRECTORY (DECL_SOURCE_FILE (vars))); + = interface_strcmp (file_name_nondirectory (DECL_SOURCE_FILE (vars))); } static int @@ -1783,7 +1800,6 @@ snarf_defarg () int len; char *buf; tree arg; - struct pending_inline *t; reinit_parse_for_expr (&inline_text_obstack); len = obstack_object_size (&inline_text_obstack); @@ -1869,8 +1885,6 @@ do_pending_defargs () tree defarg_fn = TREE_VALUE (defarg_fns); if (defarg_parm == NULL_TREE) { - tree p; - push_nested_class (TREE_PURPOSE (defarg_fns), 1); pushlevel (0); if (is_member_template (defarg_fn)) @@ -1879,6 +1893,7 @@ do_pending_defargs () if (TREE_CODE (defarg_fn) == FUNCTION_DECL) { #if 0 + tree p; for (p = DECL_ARGUMENTS (defarg_fn); p; p = TREE_CHAIN (p)) pushdecl (copy_node (p)); #endif @@ -1988,10 +2003,16 @@ cons_up_default_function (type, full_name, kind) { tree declarator = make_call_declarator (name, args, NULL_TREE, NULL_TREE); + int saved_processing_specialization; if (retref) declarator = build_parse_node (ADDR_EXPR, declarator); - + + /* The following is in case we're generating the default + implementation in the midst of handling a specialization. */ + saved_processing_specialization = processing_specialization; + processing_specialization = 0; fn = grokfield (declarator, declspecs, NULL_TREE, NULL_TREE, NULL_TREE); + processing_specialization = saved_processing_specialization; } if (fn == void_type_node) @@ -2430,7 +2451,7 @@ linenum: { while (ifiles->next) ifiles = ifiles->next; - ifiles->filename = FILE_NAME_NONDIRECTORY (input_filename); + ifiles->filename = file_name_nondirectory (input_filename); } main_input_filename = input_filename; @@ -2729,6 +2750,15 @@ identifier_type (decl) { if (TREE_CODE (DECL_RESULT (decl)) == TYPE_DECL) return PTYPENAME; + else if (looking_for_template) + return PFUNCNAME; + } + if (looking_for_template && really_overloaded_fn (decl)) + { + tree t; + for (t = TREE_VALUE (decl); t != NULL_TREE; t = DECL_CHAIN (t)) + if (DECL_FUNCTION_TEMPLATE_P (t)) + return PFUNCNAME; } if (TREE_CODE (decl) == NAMESPACE_DECL) return NSNAME; @@ -3086,13 +3116,12 @@ real_yylex () break; case '$': - if (dollars_in_ident) - { - dollar_seen = 1; - goto letter; - } - value = '$'; - goto done; + if (! dollars_in_ident) + error ("`$' in identifier"); + else if (pedantic) + pedwarn ("`$' in identifier"); + dollar_seen = 1; + goto letter; case 'L': /* Capital L may start a wide-string or wide-character constant. */ @@ -3143,8 +3172,14 @@ real_yylex () input sources. */ while (isalnum (c) || (c == '_') || c == '$') { - if (c == '$' && ! dollars_in_ident) - break; + if (c == '$') + { + if (! dollars_in_ident) + error ("`$' in identifier"); + else if (pedantic) + pedwarn ("`$' in identifier"); + } + if (p >= token_buffer + maxtoken) p = extend_token_buffer (p); @@ -3167,8 +3202,14 @@ real_yylex () while (isalnum (c) || (c == '_') || c == '$') { - if (c == '$' && ! dollars_in_ident) - break; + if (c == '$') + { + if (! dollars_in_ident) + error ("`$' in identifier"); + else if (pedantic) + pedwarn ("`$' in identifier"); + } + if (p >= token_buffer + maxtoken) p = extend_token_buffer (p); @@ -3785,17 +3826,14 @@ real_yylex () yylval.ttype = build_int_2 (low, high); TREE_TYPE (yylval.ttype) = long_long_unsigned_type_node; + /* Calculate the ANSI type. */ if (!spec_long && !spec_unsigned && int_fits_type_p (yylval.ttype, integer_type_node)) - { - type = integer_type_node; - } + type = integer_type_node; else if (!spec_long && (base != 10 || spec_unsigned) && int_fits_type_p (yylval.ttype, unsigned_type_node)) - { - /* Nondecimal constants try unsigned even in traditional C. */ - type = unsigned_type_node; - } + /* Nondecimal constants try unsigned even in traditional C. */ + type = unsigned_type_node; else if (!spec_unsigned && !spec_long_long && int_fits_type_p (yylval.ttype, long_integer_type_node)) type = long_integer_type_node; @@ -3807,31 +3845,28 @@ real_yylex () && int_fits_type_p (yylval.ttype, long_long_integer_type_node)) type = long_long_integer_type_node; - else if (int_fits_type_p (yylval.ttype, - long_long_unsigned_type_node)) + else type = long_long_unsigned_type_node; - else - { - type = long_long_integer_type_node; - warning ("integer constant out of range"); + if (!int_fits_type_p (yylval.ttype, type) && !warn) + pedwarn ("integer constant out of range"); - if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type)) - warning ("decimal integer constant is so large that it is unsigned"); - if (spec_imag) - { - if (TYPE_PRECISION (type) - <= TYPE_PRECISION (integer_type_node)) - yylval.ttype - = build_complex (NULL_TREE, integer_zero_node, - cp_convert (integer_type_node, - yylval.ttype)); - else - error ("complex integer constant is too wide for `__complex int'"); - } - } + if (base == 10 && ! spec_unsigned && TREE_UNSIGNED (type)) + warning ("decimal integer constant is so large that it is unsigned"); - TREE_TYPE (yylval.ttype) = type; + if (spec_imag) + { + if (TYPE_PRECISION (type) + <= TYPE_PRECISION (integer_type_node)) + yylval.ttype + = build_complex (NULL_TREE, integer_zero_node, + cp_convert (integer_type_node, + yylval.ttype)); + else + error ("complex integer constant is too wide for `__complex int'"); + } + else + TREE_TYPE (yylval.ttype) = type; } put_back (c); @@ -4036,15 +4071,9 @@ real_yylex () bzero (widep + (len * WCHAR_BYTES), WCHAR_BYTES); #else { - union { long l; char c[sizeof (long)]; } u; - int big_endian; char *wp, *cp; - /* Determine whether host is little or big endian. */ - u.l = 1; - big_endian = u.c[sizeof (long) - 1]; - wp = widep + (big_endian ? WCHAR_BYTES - 1 : 0); - + wp = widep + (BYTES_BIG_ENDIAN ? WCHAR_BYTES - 1 : 0); bzero (widep, (p - token_buffer) * WCHAR_BYTES); for (cp = token_buffer + 1; cp < p; cp++) *wp = *cp, wp += WCHAR_BYTES; @@ -4447,7 +4476,7 @@ make_lang_type (code) pi[--i] = 0; TYPE_LANG_SPECIFIC (t) = (struct lang_type *) pi; - CLASSTYPE_AS_LIST (t) = build_tree_list (NULL_TREE, t); + CLASSTYPE_AS_LIST (t) = build_expr_list (NULL_TREE, t); SET_CLASSTYPE_INTERFACE_UNKNOWN_X (t, interface_unknown); CLASSTYPE_INTERFACE_ONLY (t) = interface_only; CLASSTYPE_VBASE_SIZE (t) = integer_zero_node; @@ -4586,7 +4615,7 @@ handle_cp_pragma (pname) tree fileinfo = IDENTIFIER_CLASS_VALUE (get_time_identifier (input_filename)); char *main_filename = input_filename; - main_filename = FILE_NAME_NONDIRECTORY (main_filename); + main_filename = file_name_nondirectory (main_filename); token = real_yylex (); @@ -4616,7 +4645,7 @@ handle_cp_pragma (pname) main_input_filename = input_filename; #ifdef AUTO_IMPLEMENT - filename = FILE_NAME_NONDIRECTORY (main_input_filename); + filename = file_name_nondirectory (main_input_filename); fi = get_time_identifier (filename); fi = IDENTIFIER_CLASS_VALUE (fi); TREE_INT_CST_LOW (fi) = 0; @@ -4641,7 +4670,7 @@ handle_cp_pragma (pname) tree fileinfo = IDENTIFIER_CLASS_VALUE (get_time_identifier (input_filename)); char *main_filename = main_input_filename ? main_input_filename : input_filename; - main_filename = FILE_NAME_NONDIRECTORY (main_filename); + main_filename = file_name_nondirectory (main_filename); token = real_yylex (); if (token != END_OF_LINE) { diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 8a50dabac99..0e407fe1ab8 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -71,6 +71,10 @@ static char *thunk_printable_name PROTO((tree)); static void do_build_assign_ref PROTO((tree)); static void do_build_copy_constructor PROTO((tree)); static tree largest_union_member PROTO((tree)); +static tree build_decl_overload_real PROTO((tree, tree, tree, tree, + tree, int)); +static void build_template_parm_names PROTO((tree, tree)); +static void build_underscore_int PROTO((int)); # define OB_INIT() (scratch_firstobj ? (obstack_free (&scratch_obstack, scratch_firstobj), 0) : 0) # define OB_PUTC(C) (obstack_1grow (&scratch_obstack, (C))) @@ -383,9 +387,16 @@ build_overload_nested_name (decl) if (DECL_CONTEXT (decl)) { tree context = DECL_CONTEXT (decl); - if (TREE_CODE_CLASS (TREE_CODE (context)) == 't') - context = TYPE_NAME (context); - build_overload_nested_name (context); + /* For a template type parameter, we want to output an 'Xn' + rather than 'T' or some such. */ + if (TREE_CODE (context) == TEMPLATE_TYPE_PARM) + build_overload_name (context, 0, 0); + else + { + if (TREE_CODE_CLASS (TREE_CODE (context)) == 't') + context = TYPE_NAME (context); + build_overload_nested_name (context); + } } if (TREE_CODE (decl) == FUNCTION_DECL) @@ -406,6 +417,17 @@ build_overload_nested_name (decl) build_overload_identifier (decl); } +static void +build_underscore_int (i) + int i; +{ + if (i > 9) + OB_PUTC ('_'); + icat (i); + if (i > 9) + OB_PUTC ('_'); +} + /* Encoding for an INTEGER_CST value. */ static void @@ -413,18 +435,7 @@ build_overload_int (value, in_template) tree value; int in_template; { - if (TREE_CODE (value) == TEMPLATE_CONST_PARM) - { - OB_PUTC ('Y'); - if (TEMPLATE_CONST_IDX (value) > 9) - OB_PUTC ('_'); - icat (TEMPLATE_CONST_IDX (value)); - if (TEMPLATE_CONST_IDX (value) > 9) - OB_PUTC ('_'); - return; - } - else if (in_template - && TREE_CODE (value) != INTEGER_CST) + if (in_template && TREE_CODE (value) != INTEGER_CST) /* We don't ever want this output, but it's inconvenient not to be able to build the string. This should cause assembler errors we'll notice. */ @@ -468,6 +479,14 @@ build_overload_value (type, value, in_template) numeric_output_need_bar = 0; } + if (TREE_CODE (value) == TEMPLATE_CONST_PARM) + { + OB_PUTC ('Y'); + build_underscore_int (TEMPLATE_CONST_IDX (value)); + build_underscore_int (TEMPLATE_CONST_LEVEL (value)); + return; + } + if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (TREE_TYPE (type)) == OFFSET_TYPE) { @@ -633,6 +652,41 @@ build_overload_value (type, value, in_template) } } + +/* Add encodings for the vector of template parameters in PARMLIST, + given the vector of arguments to be substituted in ARGLIST. */ + +static void +build_template_parm_names (parmlist, arglist) + tree parmlist; + tree arglist; +{ + int i, nparms; + + nparms = TREE_VEC_LENGTH (parmlist); + icat (nparms); + for (i = 0; i < nparms; i++) + { + tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i)); + tree arg = TREE_VEC_ELT (arglist, i); + if (TREE_CODE (parm) == TYPE_DECL) + { + /* This parameter is a type. */ + OB_PUTC ('Z'); + build_overload_name (arg, 0, 0); + } + else + { + parm = tsubst (parm, arglist, + TREE_VEC_LENGTH (arglist), NULL_TREE); + /* It's a PARM_DECL. */ + build_overload_name (TREE_TYPE (parm), 0, 0); + build_overload_value (parm, arg, uses_template_parms (arglist)); + } + } + } + + static void build_overload_identifier (name) tree name; @@ -643,36 +697,15 @@ build_overload_identifier (name) && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (TREE_TYPE (name)))) { tree template, parmlist, arglist, tname; - int i, nparms; template = CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (name)); arglist = TREE_VALUE (template); template = TREE_PURPOSE (template); tname = DECL_NAME (template); parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template); - nparms = TREE_VEC_LENGTH (parmlist); OB_PUTC ('t'); icat (IDENTIFIER_LENGTH (tname)); OB_PUTID (tname); - icat (nparms); - for (i = 0; i < nparms; i++) - { - tree parm = TREE_VALUE (TREE_VEC_ELT (parmlist, i)); - tree arg = TREE_VEC_ELT (arglist, i); - if (TREE_CODE (parm) == TYPE_DECL) - { - /* This parameter is a type. */ - OB_PUTC ('Z'); - build_overload_name (arg, 0, 0); - } - else - { - parm = tsubst (parm, arglist, - TREE_VEC_LENGTH (arglist), NULL_TREE); - /* It's a PARM_DECL. */ - build_overload_name (TREE_TYPE (parm), 0, 0); - build_overload_value (parm, arg, uses_template_parms (arglist)); - } - } + build_template_parm_names (parmlist, arglist); } else { @@ -1012,22 +1045,18 @@ build_overload_name (parmtypes, begin, end) case TEMPLATE_TYPE_PARM: OB_PUTC ('X'); - if (TEMPLATE_TYPE_IDX (parmtype) > 9) - OB_PUTC ('_'); - icat (TEMPLATE_TYPE_IDX (parmtype)); - if (TEMPLATE_TYPE_IDX (parmtype) > 9) - OB_PUTC ('_'); + build_underscore_int (TEMPLATE_TYPE_IDX (parmtype)); + build_underscore_int (TEMPLATE_TYPE_LEVEL (parmtype)); break; case TYPENAME_TYPE: - /* We don't ever want this output, but it's inconvenient not to - be able to build the string. This should cause assembler - errors we'll notice. */ - { - static int n; - sprintf (digit_buffer, " *%d", n++); - OB_PUTCP (digit_buffer); - } + /* When mangling the type of a function template whose + declaration looks like: + + template void foo(typename T::U) + + we have to mangle these. */ + build_qualified_name (parmtype); break; default: @@ -1067,7 +1096,7 @@ build_static_name (context, name) #else OB_PUTS ("__static_"); build_qualified_name (context); - OB_PUTC (' '); + OB_PUTC ('_'); #endif OB_PUTID (name); OB_FINISH (); @@ -1075,19 +1104,14 @@ build_static_name (context, name) return get_identifier ((char *)obstack_base (&scratch_obstack)); } -/* Change the name of a function definition so that it may be - overloaded. NAME is the name of the function to overload, - PARMS is the parameter list (which determines what name the - final function obtains). - - FOR_METHOD is 1 if this overload is being performed - for a method, rather than a function type. It is 2 if - this overload is being performed for a constructor. */ - -tree -build_decl_overload (dname, parms, for_method) +static tree +build_decl_overload_real (dname, parms, ret_type, tparms, targs, + for_method) tree dname; tree parms; + tree ret_type; + tree tparms; + tree targs; int for_method; { char *name = IDENTIFIER_POINTER (dname); @@ -1121,6 +1145,8 @@ build_decl_overload (dname, parms, for_method) /* We can get away without doing this. */ OB_PUTC ('M'); #endif + if (tparms != NULL_TREE) + OB_PUTC ('H'); { tree this_type = TREE_VALUE (parms); @@ -1132,13 +1158,21 @@ build_decl_overload (dname, parms, for_method) TREE_CHAIN (parms)); } } + else if (tparms) + OB_PUTC ('H'); else OB_PUTC ('F'); + if (tparms) + { + build_template_parm_names (tparms, targs); + OB_PUTC ('_'); + } + if (parms == NULL_TREE) - OB_PUTC2 ('e', '\0'); + OB_PUTC ('e'); else if (parms == void_list_node) - OB_PUTC2 ('v', '\0'); + OB_PUTC ('v'); else { ALLOCATE_TYPEVEC (parms); @@ -1151,14 +1185,23 @@ build_decl_overload (dname, parms, for_method) TREE_USED (TREE_VALUE (parms)) = 1; if (TREE_CHAIN (parms)) - build_overload_name (TREE_CHAIN (parms), 0, 1); + build_overload_name (TREE_CHAIN (parms), 0, 0); else - OB_PUTC2 ('e', '\0'); + OB_PUTC ('e'); } else - build_overload_name (parms, 0, 1); + build_overload_name (parms, 0, 0); DEALLOCATE_TYPEVEC (parms); } + + if (ret_type != NULL_TREE && for_method != 2) + { + /* Add the return type. */ + OB_PUTC ('_'); + build_overload_name (ret_type, 0, 0); + } + + OB_FINISH (); { tree n = get_identifier (obstack_base (&scratch_obstack)); if (IDENTIFIER_OPNAME_P (dname)) @@ -1167,6 +1210,43 @@ build_decl_overload (dname, parms, for_method) } } +/* Change the name of a function definition so that it may be + overloaded. NAME is the name of the function to overload, + PARMS is the parameter list (which determines what name the + final function obtains). + + FOR_METHOD is 1 if this overload is being performed + for a method, rather than a function type. It is 2 if + this overload is being performed for a constructor. */ + +tree +build_decl_overload (dname, parms, for_method) + tree dname; + tree parms; + int for_method; +{ + return build_decl_overload_real (dname, parms, NULL_TREE, NULL_TREE, + NULL_TREE, for_method); +} + + +/* Like build_decl_overload, but for template functions. */ + +tree +build_template_decl_overload (dname, parms, ret_type, tparms, targs, + for_method) + tree dname; + tree parms; + tree ret_type; + tree tparms; + tree targs; + int for_method; +{ + return build_decl_overload_real (dname, parms, ret_type, tparms, targs, + for_method); +} + + /* Build an overload name for the type expression TYPE. */ tree @@ -1295,7 +1375,7 @@ build_opfncall (code, flags, xarg1, xarg2, arg3) case VEC_NEW_EXPR: case NEW_EXPR: { - tree args = tree_cons (NULL_TREE, xarg2, arg3); + tree args = expr_tree_cons (NULL_TREE, xarg2, arg3); fnname = ansi_opname[(int) code]; if (flags & LOOKUP_GLOBAL) return build_overload_call (fnname, args, flags & LOOKUP_COMPLAIN); @@ -1321,7 +1401,7 @@ build_opfncall (code, flags, xarg1, xarg2, arg3) fnname = ansi_opname[(int) code]; if (flags & LOOKUP_GLOBAL) return build_overload_call (fnname, - build_tree_list (NULL_TREE, xarg1), + build_expr_list (NULL_TREE, xarg1), flags & LOOKUP_COMPLAIN); arg1 = TREE_TYPE (xarg1); @@ -1345,8 +1425,8 @@ build_opfncall (code, flags, xarg1, xarg2, arg3) (build_indirect_ref (build1 (NOP_EXPR, arg1, error_mark_node), NULL_PTR), - fnname, tree_cons (NULL_TREE, xarg1, - build_tree_list (NULL_TREE, xarg2)), + fnname, expr_tree_cons (NULL_TREE, xarg1, + build_expr_list (NULL_TREE, xarg2)), NULL_TREE, flags); #if 0 /* This can happen when operator delete is protected. */ @@ -1524,25 +1604,25 @@ build_opfncall (code, flags, xarg1, xarg2, arg3) } else if (code == COND_EXPR) { - parms = tree_cons (NULL_TREE, xarg2, build_tree_list (NULL_TREE, arg3)); + parms = expr_tree_cons (NULL_TREE, xarg2, build_expr_list (NULL_TREE, arg3)); rval = build_method_call (xarg1, fnname, parms, NULL_TREE, flags); } else if (code == METHOD_CALL_EXPR) { /* must be a member function. */ - parms = tree_cons (NULL_TREE, xarg2, arg3); + parms = expr_tree_cons (NULL_TREE, xarg2, arg3); return build_method_call (xarg1, fnname, parms, NULL_TREE, LOOKUP_NORMAL); } else if (fields1) { - parms = build_tree_list (NULL_TREE, xarg2); + parms = build_expr_list (NULL_TREE, xarg2); rval = build_method_call (xarg1, fnname, parms, NULL_TREE, flags); } else { - parms = tree_cons (NULL_TREE, xarg1, - build_tree_list (NULL_TREE, xarg2)); + parms = expr_tree_cons (NULL_TREE, xarg1, + build_expr_list (NULL_TREE, xarg2)); rval = build_overload_call (fnname, parms, flags); } @@ -1839,14 +1919,21 @@ emit_thunk (thunk_fndecl) t = build_int_2 (delta, -1 * (delta < 0)); TREE_TYPE (t) = signed_type (sizetype); t = fold (build (PLUS_EXPR, TREE_TYPE (a), a, t)); - t = tree_cons (NULL_TREE, t, NULL_TREE); + t = expr_tree_cons (NULL_TREE, t, NULL_TREE); for (a = TREE_CHAIN (a); a; a = TREE_CHAIN (a)) - t = tree_cons (NULL_TREE, a, t); + t = expr_tree_cons (NULL_TREE, a, t); t = nreverse (t); t = build_call (function, TREE_TYPE (TREE_TYPE (function)), t); c_expand_return (t); finish_function (lineno, 0, 0); + + /* Don't let the backend defer this function. */ + if (DECL_DEFER_OUTPUT (thunk_fndecl)) + { + output_inline_function (thunk_fndecl); + permanent_allocation (1); + } #endif /* ASM_OUTPUT_MI_THUNK */ } @@ -2022,7 +2109,7 @@ do_build_assign_ref (fndecl) CONV_IMPLICIT|CONV_CONST, LOOKUP_COMPLAIN, NULL_TREE); p = convert_from_reference (p); p = build_member_call (basetype, ansi_opname [MODIFY_EXPR], - build_tree_list (NULL_TREE, p)); + build_expr_list (NULL_TREE, p)); expand_expr_stmt (p); } for (; fields; fields = TREE_CHAIN (fields)) @@ -2100,6 +2187,9 @@ synthesize_method (fndecl) int nested = (current_function_decl != NULL_TREE); tree context = hack_decl_function_context (fndecl); + if (at_eof) + import_export_decl (fndecl); + if (! context) push_to_top_level (); else if (nested) diff --git a/gcc/cp/parse.c b/gcc/cp/parse.c index 4d7298e608f..86fd51669a2 100644 --- a/gcc/cp/parse.c +++ b/gcc/cp/parse.c @@ -1,5 +1,6 @@ -/* A Bison parser, made from parse.y with Bison version GNU Bison version 1.24 +/* A Bison parser, made from parse.y + by Bison version A2.5 (Andrew Consortium) */ #define YYBISON 1 /* Identify Bison output. */ @@ -7,89 +8,90 @@ #define IDENTIFIER 258 #define TYPENAME 259 #define SELFNAME 260 -#define SCSPEC 261 -#define TYPESPEC 262 -#define CV_QUALIFIER 263 -#define CONSTANT 264 -#define STRING 265 -#define ELLIPSIS 266 -#define SIZEOF 267 -#define ENUM 268 -#define IF 269 -#define ELSE 270 -#define WHILE 271 -#define DO 272 -#define FOR 273 -#define SWITCH 274 -#define CASE 275 -#define DEFAULT 276 -#define BREAK 277 -#define CONTINUE 278 -#define RETURN 279 -#define GOTO 280 -#define ASM_KEYWORD 281 -#define GCC_ASM_KEYWORD 282 -#define TYPEOF 283 -#define ALIGNOF 284 -#define SIGOF 285 -#define ATTRIBUTE 286 -#define EXTENSION 287 -#define LABEL 288 -#define REALPART 289 -#define IMAGPART 290 -#define AGGR 291 -#define VISSPEC 292 -#define DELETE 293 -#define NEW 294 -#define THIS 295 -#define OPERATOR 296 -#define CXX_TRUE 297 -#define CXX_FALSE 298 -#define NAMESPACE 299 -#define TYPENAME_KEYWORD 300 -#define USING 301 -#define LEFT_RIGHT 302 -#define TEMPLATE 303 -#define TYPEID 304 -#define DYNAMIC_CAST 305 -#define STATIC_CAST 306 -#define REINTERPRET_CAST 307 -#define CONST_CAST 308 -#define SCOPE 309 -#define EMPTY 310 -#define PTYPENAME 311 -#define NSNAME 312 -#define THROW 313 -#define ASSIGN 314 -#define OROR 315 -#define ANDAND 316 -#define MIN_MAX 317 -#define EQCOMPARE 318 -#define ARITHCOMPARE 319 -#define LSHIFT 320 -#define RSHIFT 321 -#define POINTSAT_STAR 322 -#define DOT_STAR 323 -#define UNARY 324 -#define PLUSPLUS 325 -#define MINUSMINUS 326 -#define HYPERUNARY 327 -#define PAREN_STAR_PAREN 328 -#define POINTSAT 329 -#define TRY 330 -#define CATCH 331 -#define TYPENAME_ELLIPSIS 332 -#define PRE_PARSED_FUNCTION_DECL 333 -#define EXTERN_LANG_STRING 334 -#define ALL 335 -#define PRE_PARSED_CLASS_DECL 336 -#define DEFARG 337 -#define DEFARG_MARKER 338 -#define TYPENAME_DEFN 339 -#define IDENTIFIER_DEFN 340 -#define PTYPENAME_DEFN 341 -#define END_OF_LINE 342 -#define END_OF_SAVED_INPUT 343 +#define PFUNCNAME 261 +#define SCSPEC 262 +#define TYPESPEC 263 +#define CV_QUALIFIER 264 +#define CONSTANT 265 +#define STRING 266 +#define ELLIPSIS 267 +#define SIZEOF 268 +#define ENUM 269 +#define IF 270 +#define ELSE 271 +#define WHILE 272 +#define DO 273 +#define FOR 274 +#define SWITCH 275 +#define CASE 276 +#define DEFAULT 277 +#define BREAK 278 +#define CONTINUE 279 +#define RETURN 280 +#define GOTO 281 +#define ASM_KEYWORD 282 +#define GCC_ASM_KEYWORD 283 +#define TYPEOF 284 +#define ALIGNOF 285 +#define SIGOF 286 +#define ATTRIBUTE 287 +#define EXTENSION 288 +#define LABEL 289 +#define REALPART 290 +#define IMAGPART 291 +#define AGGR 292 +#define VISSPEC 293 +#define DELETE 294 +#define NEW 295 +#define THIS 296 +#define OPERATOR 297 +#define CXX_TRUE 298 +#define CXX_FALSE 299 +#define NAMESPACE 300 +#define TYPENAME_KEYWORD 301 +#define USING 302 +#define LEFT_RIGHT 303 +#define TEMPLATE 304 +#define TYPEID 305 +#define DYNAMIC_CAST 306 +#define STATIC_CAST 307 +#define REINTERPRET_CAST 308 +#define CONST_CAST 309 +#define SCOPE 310 +#define EMPTY 311 +#define PTYPENAME 312 +#define NSNAME 313 +#define THROW 314 +#define ASSIGN 315 +#define OROR 316 +#define ANDAND 317 +#define MIN_MAX 318 +#define EQCOMPARE 319 +#define ARITHCOMPARE 320 +#define LSHIFT 321 +#define RSHIFT 322 +#define POINTSAT_STAR 323 +#define DOT_STAR 324 +#define UNARY 325 +#define PLUSPLUS 326 +#define MINUSMINUS 327 +#define HYPERUNARY 328 +#define PAREN_STAR_PAREN 329 +#define POINTSAT 330 +#define TRY 331 +#define CATCH 332 +#define TYPENAME_ELLIPSIS 333 +#define PRE_PARSED_FUNCTION_DECL 334 +#define EXTERN_LANG_STRING 335 +#define ALL 336 +#define PRE_PARSED_CLASS_DECL 337 +#define DEFARG 338 +#define DEFARG_MARKER 339 +#define TYPENAME_DEFN 340 +#define IDENTIFIER_DEFN 341 +#define PTYPENAME_DEFN 342 +#define END_OF_LINE 343 +#define END_OF_SAVED_INPUT 344 #line 29 "parse.y" @@ -163,7 +165,7 @@ empty_parms () #line 101 "parse.y" typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE; -#line 284 "parse.y" +#line 289 "parse.y" /* List of types and structure classes of the current declaration. */ static tree current_declspecs = NULL_TREE; @@ -182,23 +184,6 @@ static tree current_aggr; #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) extern void yyprint PROTO((FILE *, int, YYSTYPE)); extern tree combine_strings PROTO((tree)); - -#ifndef YYLTYPE -typedef - struct yyltype - { - int timestamp; - int first_line; - int first_column; - int last_line; - int last_column; - char *text; - } - yyltype; - -#define YYLTYPE yyltype -#endif - #include #ifndef __cplusplus @@ -209,26 +194,26 @@ typedef -#define YYFINAL 1467 +#define YYFINAL 1529 #define YYFLAG -32768 -#define YYNTBASE 113 +#define YYNTBASE 114 -#define YYTRANSLATE(x) ((unsigned)(x) <= 343 ? yytranslate[x] : 366) +#define YYTRANSLATE(x) ((unsigned)(x) <= 344 ? yytranslate[x] : 376) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 111, 2, 2, 2, 82, 70, 2, 93, - 109, 80, 78, 59, 79, 92, 81, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 62, 60, 74, - 64, 75, 65, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 112, 2, 2, 2, 83, 71, 2, 94, + 110, 81, 79, 60, 80, 93, 82, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 63, 61, 75, + 65, 76, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 94, 2, 112, 69, 2, 2, 2, 2, 2, 2, + 95, 2, 113, 70, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 58, 68, 110, 88, 2, 2, 2, 2, + 2, 2, 59, 69, 111, 89, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -247,10 +232,10 @@ static const char yytranslate[] = { 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 61, 63, 66, 67, 71, 72, 73, 76, - 77, 83, 84, 85, 86, 87, 89, 90, 91, 95, + 56, 57, 58, 62, 64, 67, 68, 72, 73, 74, + 77, 78, 84, 85, 86, 87, 88, 90, 91, 92, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108 + 106, 107, 108, 109 }; #if YYDEBUG != 0 @@ -279,423 +264,440 @@ static const short yyprhs[] = { 0, 691, 694, 698, 703, 705, 708, 714, 716, 720, 724, 728, 732, 736, 740, 744, 748, 752, 756, 760, 764, 768, 772, 776, 780, 784, 788, 792, 798, 802, 806, - 808, 811, 815, 817, 819, 821, 823, 825, 827, 829, - 831, 834, 837, 841, 843, 845, 849, 851, 853, 855, - 857, 861, 865, 869, 870, 875, 880, 883, 888, 891, - 894, 896, 901, 903, 911, 919, 927, 935, 940, 945, - 948, 951, 953, 958, 961, 964, 967, 973, 977, 983, - 987, 992, 999, 1002, 1004, 1007, 1009, 1012, 1014, 1016, - 1018, 1021, 1022, 1025, 1028, 1032, 1036, 1040, 1043, 1046, - 1049, 1051, 1053, 1055, 1058, 1061, 1064, 1067, 1069, 1071, - 1073, 1075, 1078, 1081, 1085, 1089, 1093, 1098, 1100, 1103, - 1106, 1109, 1111, 1113, 1115, 1118, 1121, 1124, 1126, 1128, - 1131, 1134, 1138, 1140, 1143, 1145, 1147, 1149, 1154, 1159, - 1164, 1169, 1171, 1173, 1175, 1177, 1181, 1183, 1187, 1189, - 1193, 1194, 1199, 1200, 1207, 1211, 1212, 1219, 1223, 1224, - 1231, 1235, 1236, 1243, 1247, 1248, 1250, 1252, 1255, 1262, - 1264, 1268, 1269, 1271, 1276, 1283, 1288, 1290, 1292, 1294, - 1296, 1298, 1302, 1303, 1306, 1308, 1311, 1315, 1320, 1322, - 1324, 1328, 1333, 1340, 1344, 1350, 1352, 1357, 1361, 1365, - 1366, 1370, 1374, 1378, 1379, 1382, 1385, 1386, 1394, 1399, - 1400, 1407, 1411, 1414, 1417, 1421, 1426, 1427, 1428, 1438, - 1440, 1441, 1443, 1444, 1446, 1448, 1451, 1454, 1457, 1460, - 1463, 1466, 1470, 1475, 1479, 1482, 1486, 1487, 1489, 1493, - 1496, 1499, 1501, 1503, 1504, 1507, 1511, 1513, 1518, 1520, - 1524, 1526, 1530, 1535, 1540, 1545, 1548, 1551, 1555, 1559, - 1561, 1562, 1564, 1567, 1572, 1576, 1578, 1581, 1584, 1587, - 1590, 1593, 1596, 1599, 1601, 1604, 1607, 1610, 1615, 1620, - 1623, 1625, 1631, 1636, 1638, 1641, 1642, 1644, 1648, 1649, - 1651, 1655, 1657, 1659, 1661, 1663, 1668, 1673, 1678, 1683, - 1688, 1692, 1697, 1702, 1707, 1712, 1716, 1718, 1722, 1724, - 1728, 1731, 1733, 1740, 1741, 1744, 1746, 1749, 1750, 1753, - 1758, 1763, 1766, 1771, 1775, 1779, 1782, 1785, 1789, 1791, - 1793, 1796, 1798, 1801, 1804, 1809, 1814, 1818, 1822, 1825, - 1827, 1831, 1835, 1838, 1841, 1845, 1847, 1851, 1855, 1858, - 1861, 1865, 1867, 1872, 1876, 1881, 1885, 1887, 1890, 1893, - 1895, 1898, 1903, 1908, 1911, 1913, 1915, 1917, 1919, 1922, - 1925, 1928, 1931, 1934, 1937, 1939, 1942, 1945, 1949, 1951, - 1955, 1958, 1962, 1965, 1968, 1972, 1974, 1978, 1983, 1987, - 1990, 1993, 1995, 1999, 2002, 2005, 2007, 2010, 2014, 2016, - 2020, 2022, 2029, 2034, 2039, 2043, 2049, 2053, 2057, 2061, - 2064, 2066, 2068, 2071, 2074, 2077, 2078, 2079, 2080, 2082, - 2084, 2087, 2091, 2093, 2096, 2097, 2103, 2104, 2105, 2112, - 2114, 2115, 2120, 2122, 2124, 2126, 2129, 2130, 2131, 2138, - 2140, 2141, 2142, 2150, 2151, 2152, 2160, 2161, 2162, 2163, - 2164, 2179, 2180, 2181, 2191, 2192, 2198, 2199, 2207, 2208, - 2213, 2216, 2219, 2222, 2226, 2233, 2242, 2253, 2266, 2271, - 2275, 2278, 2281, 2283, 2285, 2286, 2287, 2294, 2295, 2296, - 2302, 2304, 2307, 2308, 2309, 2310, 2319, 2321, 2323, 2327, - 2331, 2334, 2337, 2340, 2343, 2346, 2348, 2351, 2352, 2354, - 2355, 2357, 2359, 2360, 2362, 2364, 2368, 2373, 2375, 2379, - 2380, 2382, 2384, 2386, 2389, 2392, 2395, 2397, 2399, 2402, - 2405, 2408, 2411, 2412, 2416, 2418, 2420, 2422, 2425, 2428, - 2431, 2436, 2439, 2442, 2445, 2448, 2451, 2454, 2456, 2459, - 2461, 2464, 2466, 2468, 2469, 2470, 2472, 2473, 2478, 2481, - 2483, 2485, 2489, 2490, 2494, 2498, 2502, 2504, 2507, 2510, - 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534, 2537, 2540, - 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570, - 2573, 2577, 2580, 2583, 2586, 2589, 2593, 2596, 2599, 2604, - 2609, 2613 + 808, 811, 815, 817, 819, 821, 823, 825, 830, 834, + 839, 843, 849, 855, 861, 863, 865, 867, 869, 872, + 875, 879, 884, 889, 891, 893, 895, 899, 901, 903, + 905, 907, 911, 915, 919, 920, 925, 930, 933, 938, + 941, 944, 946, 951, 953, 961, 969, 977, 985, 990, + 995, 998, 1001, 1003, 1008, 1011, 1014, 1020, 1024, 1027, + 1030, 1036, 1040, 1046, 1050, 1055, 1062, 1065, 1067, 1070, + 1072, 1075, 1077, 1079, 1081, 1084, 1085, 1088, 1091, 1095, + 1099, 1103, 1106, 1109, 1112, 1114, 1116, 1118, 1121, 1124, + 1127, 1130, 1132, 1134, 1136, 1138, 1141, 1144, 1148, 1152, + 1156, 1161, 1163, 1166, 1169, 1172, 1174, 1176, 1178, 1181, + 1184, 1187, 1189, 1191, 1194, 1197, 1201, 1203, 1206, 1208, + 1210, 1212, 1217, 1222, 1227, 1232, 1234, 1236, 1238, 1240, + 1244, 1246, 1250, 1252, 1256, 1257, 1262, 1263, 1270, 1274, + 1275, 1282, 1286, 1287, 1294, 1298, 1299, 1306, 1310, 1311, + 1313, 1315, 1318, 1325, 1327, 1331, 1332, 1334, 1339, 1346, + 1351, 1353, 1355, 1357, 1359, 1361, 1365, 1366, 1369, 1371, + 1374, 1378, 1383, 1385, 1387, 1391, 1396, 1403, 1407, 1413, + 1415, 1420, 1424, 1428, 1429, 1433, 1437, 1441, 1442, 1445, + 1448, 1449, 1457, 1462, 1463, 1470, 1474, 1477, 1480, 1483, + 1484, 1485, 1486, 1497, 1499, 1500, 1502, 1503, 1505, 1507, + 1510, 1513, 1516, 1519, 1522, 1525, 1529, 1534, 1538, 1541, + 1545, 1546, 1548, 1552, 1555, 1558, 1560, 1562, 1563, 1566, + 1570, 1572, 1577, 1579, 1583, 1585, 1587, 1592, 1597, 1600, + 1603, 1607, 1611, 1613, 1614, 1616, 1619, 1624, 1628, 1630, + 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1653, 1656, 1659, + 1662, 1667, 1672, 1675, 1677, 1683, 1688, 1690, 1693, 1694, + 1696, 1700, 1701, 1703, 1707, 1709, 1711, 1713, 1715, 1720, + 1725, 1730, 1735, 1740, 1744, 1749, 1754, 1759, 1764, 1768, + 1770, 1774, 1776, 1780, 1783, 1785, 1792, 1793, 1796, 1798, + 1801, 1802, 1805, 1810, 1815, 1818, 1823, 1827, 1831, 1834, + 1837, 1841, 1843, 1845, 1848, 1850, 1852, 1855, 1858, 1863, + 1868, 1872, 1876, 1879, 1881, 1885, 1889, 1892, 1895, 1899, + 1901, 1905, 1909, 1912, 1915, 1919, 1921, 1926, 1930, 1935, + 1939, 1941, 1944, 1947, 1950, 1953, 1956, 1958, 1961, 1966, + 1971, 1974, 1976, 1978, 1980, 1982, 1985, 1988, 1991, 1994, + 1997, 1999, 2002, 2005, 2007, 2010, 2013, 2016, 2019, 2022, + 2025, 2028, 2031, 2033, 2036, 2039, 2043, 2045, 2049, 2052, + 2056, 2059, 2062, 2066, 2068, 2072, 2077, 2081, 2084, 2087, + 2089, 2093, 2096, 2099, 2101, 2104, 2108, 2110, 2114, 2116, + 2123, 2128, 2133, 2137, 2143, 2147, 2151, 2155, 2158, 2160, + 2162, 2165, 2168, 2171, 2172, 2173, 2174, 2176, 2178, 2181, + 2185, 2187, 2190, 2191, 2197, 2198, 2199, 2206, 2208, 2209, + 2214, 2216, 2218, 2220, 2223, 2224, 2225, 2232, 2234, 2235, + 2236, 2244, 2245, 2246, 2254, 2255, 2256, 2257, 2258, 2273, + 2274, 2275, 2285, 2286, 2292, 2293, 2301, 2302, 2307, 2310, + 2313, 2316, 2320, 2327, 2336, 2347, 2360, 2365, 2369, 2372, + 2375, 2377, 2379, 2380, 2381, 2388, 2389, 2390, 2396, 2398, + 2401, 2402, 2403, 2404, 2413, 2415, 2417, 2421, 2425, 2428, + 2431, 2434, 2437, 2440, 2442, 2445, 2446, 2448, 2449, 2451, + 2453, 2454, 2456, 2458, 2462, 2467, 2469, 2473, 2474, 2476, + 2478, 2480, 2483, 2486, 2489, 2491, 2493, 2496, 2499, 2502, + 2505, 2506, 2510, 2512, 2514, 2516, 2519, 2522, 2525, 2530, + 2533, 2536, 2539, 2542, 2545, 2548, 2550, 2553, 2555, 2558, + 2560, 2562, 2563, 2564, 2566, 2567, 2572, 2575, 2577, 2579, + 2583, 2584, 2588, 2592, 2596, 2598, 2601, 2604, 2607, 2610, + 2613, 2616, 2619, 2622, 2625, 2628, 2631, 2634, 2637, 2640, + 2643, 2646, 2649, 2652, 2655, 2658, 2661, 2664, 2667, 2671, + 2674, 2677, 2680, 2683, 2687, 2690, 2693, 2698, 2703, 2707 }; static const short yyrhs[] = { -1, - 114, 0, 0, 115, 121, 0, 114, 121, 0, 114, - 0, 0, 0, 0, 32, 0, 26, 0, 27, 0, - 0, 122, 123, 0, 139, 138, 0, 135, 0, 134, - 0, 120, 93, 190, 109, 60, 0, 128, 58, 116, - 110, 0, 128, 117, 139, 118, 138, 0, 128, 117, - 135, 118, 0, 0, 44, 154, 58, 124, 116, 110, - 0, 0, 44, 58, 125, 116, 110, 0, 44, 154, - 64, 127, 60, 0, 126, 60, 0, 46, 44, 127, - 60, 0, 119, 123, 0, 46, 281, 0, 46, 290, - 281, 0, 46, 290, 182, 0, 182, 0, 281, 0, - 290, 281, 0, 290, 182, 0, 99, 0, 128, 99, - 0, 0, 48, 74, 130, 131, 75, 0, 48, 74, - 75, 0, 133, 0, 131, 59, 133, 0, 239, 0, - 239, 154, 0, 45, 0, 45, 154, 0, 132, 0, - 132, 64, 196, 0, 357, 0, 357, 64, 180, 0, - 129, 123, 0, 129, 1, 0, 207, 60, 0, 200, - 206, 60, 0, 197, 205, 60, 0, 200, 60, 0, - 157, 60, 0, 197, 60, 0, 1, 60, 0, 1, - 110, 0, 60, 0, 191, 0, 150, 0, 0, 149, - 0, 149, 60, 0, 0, 108, 0, 145, 137, 136, - 302, 0, 145, 137, 327, 0, 145, 137, 1, 0, - 0, 286, 5, 93, 141, 348, 109, 269, 360, 0, - 286, 5, 47, 269, 360, 0, 0, 290, 286, 5, - 93, 142, 348, 109, 269, 360, 0, 290, 286, 5, - 47, 269, 360, 0, 0, 286, 159, 93, 143, 348, - 109, 269, 360, 0, 286, 159, 47, 269, 360, 0, - 0, 290, 286, 159, 93, 144, 348, 109, 269, 360, - 0, 290, 286, 159, 47, 269, 360, 0, 197, 194, - 0, 200, 278, 0, 278, 0, 200, 140, 0, 140, - 0, 5, 93, 348, 109, 269, 360, 0, 5, 47, - 269, 360, 0, 159, 93, 348, 109, 269, 360, 0, - 159, 47, 269, 360, 0, 200, 146, 0, 146, 0, - 197, 194, 0, 200, 278, 0, 278, 0, 200, 140, - 0, 140, 0, 129, 147, 0, 24, 3, 0, 148, - 224, 0, 148, 93, 174, 109, 0, 148, 47, 0, - 62, 151, 152, 0, 0, 0, 153, 0, 152, 59, - 153, 0, 152, 1, 0, 93, 174, 109, 0, 47, - 0, 155, 93, 174, 109, 0, 155, 47, 0, 275, - 93, 174, 109, 0, 275, 47, 0, 282, 93, 174, - 109, 0, 282, 47, 0, 3, 0, 4, 0, 5, - 0, 56, 0, 57, 0, 3, 0, 56, 0, 57, - 0, 105, 0, 104, 0, 106, 0, 48, 203, 60, - 0, 48, 197, 194, 0, 48, 278, 0, 48, 140, - 0, 6, 48, 203, 60, 0, 6, 48, 197, 194, - 0, 6, 48, 278, 0, 6, 48, 140, 0, 56, - 74, 161, 160, 0, 56, 74, 160, 0, 4, 74, - 161, 160, 0, 4, 74, 160, 0, 159, 0, 5, - 74, 161, 160, 0, 5, 74, 160, 0, 75, 0, - 77, 0, 162, 0, 161, 59, 162, 0, 196, 0, - 180, 0, 79, 0, 78, 0, 86, 0, 87, 0, - 111, 0, 173, 0, 180, 0, 47, 0, 93, 164, - 109, 0, 47, 0, 93, 168, 109, 0, 0, 168, - 0, 1, 0, 0, 338, 194, 208, 217, 64, 169, - 225, 0, 164, 0, 110, 0, 299, 295, 110, 0, - 299, 295, 1, 110, 0, 299, 1, 110, 0, 0, - 58, 172, 170, 0, 311, 0, 180, 59, 180, 0, - 180, 59, 1, 0, 173, 59, 180, 0, 173, 59, - 1, 0, 180, 0, 173, 0, 185, 0, 119, 179, - 0, 80, 179, 0, 70, 179, 0, 88, 179, 0, - 163, 179, 0, 67, 154, 0, 12, 175, 0, 12, - 93, 196, 109, 0, 29, 175, 0, 29, 93, 196, - 109, 0, 187, 268, 0, 187, 268, 177, 0, 187, - 176, 268, 0, 187, 176, 268, 177, 0, 187, 93, - 196, 109, 0, 187, 93, 196, 109, 177, 0, 187, - 176, 93, 196, 109, 0, 187, 176, 93, 196, 109, - 177, 0, 188, 179, 0, 188, 94, 112, 179, 0, - 188, 94, 164, 112, 179, 0, 34, 179, 0, 35, - 179, 0, 93, 174, 109, 0, 58, 174, 110, 0, - 93, 174, 109, 0, 47, 0, 93, 203, 109, 0, - 64, 225, 0, 93, 196, 109, 0, 178, 93, 196, - 109, 0, 175, 0, 178, 175, 0, 178, 58, 226, - 237, 110, 0, 179, 0, 180, 83, 180, 0, 180, - 84, 180, 0, 180, 78, 180, 0, 180, 79, 180, - 0, 180, 80, 180, 0, 180, 81, 180, 0, 180, - 82, 180, 0, 180, 76, 180, 0, 180, 77, 180, - 0, 180, 73, 180, 0, 180, 74, 180, 0, 180, - 75, 180, 0, 180, 72, 180, 0, 180, 71, 180, - 0, 180, 70, 180, 0, 180, 68, 180, 0, 180, - 69, 180, 0, 180, 67, 180, 0, 180, 66, 180, - 0, 180, 65, 343, 62, 180, 0, 180, 64, 180, - 0, 180, 63, 180, 0, 61, 0, 61, 180, 0, - 88, 358, 154, 0, 365, 0, 3, 0, 56, 0, - 57, 0, 181, 0, 4, 0, 5, 0, 181, 0, - 80, 183, 0, 70, 183, 0, 93, 183, 109, 0, - 280, 0, 181, 0, 93, 183, 109, 0, 181, 0, - 9, 0, 189, 0, 190, 0, 93, 164, 109, 0, - 93, 183, 109, 0, 93, 1, 109, 0, 0, 93, - 186, 303, 109, 0, 185, 93, 174, 109, 0, 185, - 47, 0, 185, 94, 164, 112, 0, 185, 86, 0, - 185, 87, 0, 40, 0, 8, 93, 174, 109, 0, - 284, 0, 50, 74, 196, 75, 93, 164, 109, 0, - 51, 74, 196, 75, 93, 164, 109, 0, 52, 74, - 196, 75, 93, 164, 109, 0, 53, 74, 196, 75, - 93, 164, 109, 0, 49, 93, 164, 109, 0, 49, - 93, 196, 109, 0, 290, 3, 0, 290, 365, 0, - 283, 0, 283, 93, 174, 109, 0, 283, 47, 0, - 192, 182, 0, 192, 283, 0, 192, 182, 93, 174, - 109, 0, 192, 182, 47, 0, 192, 283, 93, 174, - 109, 0, 192, 283, 47, 0, 192, 88, 7, 47, - 0, 192, 7, 54, 88, 7, 47, 0, 192, 1, - 0, 39, 0, 290, 39, 0, 38, 0, 290, 188, - 0, 42, 0, 43, 0, 10, 0, 190, 10, 0, - 0, 185, 92, 0, 185, 91, 0, 203, 205, 60, - 0, 197, 205, 60, 0, 200, 206, 60, 0, 197, - 60, 0, 200, 60, 0, 119, 193, 0, 274, 0, - 278, 0, 47, 0, 195, 47, 0, 201, 293, 0, - 270, 293, 0, 203, 293, 0, 201, 0, 270, 0, - 201, 0, 198, 0, 200, 203, 0, 203, 199, 0, - 203, 202, 199, 0, 200, 203, 199, 0, 200, 203, - 202, 0, 200, 203, 202, 199, 0, 6, 0, 199, - 204, 0, 199, 6, 0, 199, 218, 0, 218, 0, - 270, 0, 6, 0, 200, 8, 0, 200, 6, 0, - 200, 218, 0, 218, 0, 203, 0, 270, 203, 0, - 203, 202, 0, 270, 203, 202, 0, 204, 0, 202, - 204, 0, 232, 0, 7, 0, 275, 0, 28, 93, - 164, 109, 0, 28, 93, 196, 109, 0, 30, 93, - 164, 109, 0, 30, 93, 196, 109, 0, 7, 0, - 8, 0, 232, 0, 209, 0, 205, 59, 211, 0, - 213, 0, 206, 59, 211, 0, 215, 0, 207, 59, - 211, 0, 0, 120, 93, 190, 109, 0, 0, 194, - 208, 217, 64, 210, 225, 0, 194, 208, 217, 0, - 0, 194, 208, 217, 64, 212, 225, 0, 194, 208, - 217, 0, 0, 278, 208, 217, 64, 214, 225, 0, - 278, 208, 217, 0, 0, 278, 208, 217, 64, 216, - 225, 0, 278, 208, 217, 0, 0, 218, 0, 219, - 0, 218, 219, 0, 31, 93, 93, 220, 109, 109, - 0, 221, 0, 220, 59, 221, 0, 0, 222, 0, - 222, 93, 3, 109, 0, 222, 93, 3, 59, 174, - 109, 0, 222, 93, 174, 109, 0, 154, 0, 6, - 0, 7, 0, 8, 0, 154, 0, 223, 59, 154, - 0, 0, 64, 225, 0, 180, 0, 58, 110, 0, - 58, 226, 110, 0, 58, 226, 59, 110, 0, 1, - 0, 225, 0, 226, 59, 225, 0, 94, 180, 112, - 225, 0, 226, 59, 20, 180, 62, 225, 0, 154, - 62, 225, 0, 226, 59, 154, 62, 225, 0, 98, - 0, 227, 137, 136, 302, 0, 227, 137, 327, 0, - 227, 137, 1, 0, 0, 229, 228, 138, 0, 103, - 180, 108, 0, 103, 1, 108, 0, 0, 231, 230, - 0, 231, 1, 0, 0, 13, 154, 58, 233, 266, - 238, 110, 0, 13, 154, 58, 110, 0, 0, 13, - 58, 234, 266, 238, 110, 0, 13, 58, 110, 0, - 13, 154, 0, 13, 288, 0, 45, 286, 154, 0, - 45, 290, 286, 154, 0, 0, 0, 246, 252, 254, - 110, 217, 235, 231, 236, 229, 0, 246, 0, 0, - 59, 0, 0, 59, 0, 36, 0, 239, 6, 0, - 239, 7, 0, 239, 8, 0, 239, 36, 0, 239, - 154, 0, 239, 156, 0, 239, 286, 154, 0, 239, - 290, 286, 154, 0, 239, 290, 154, 0, 239, 158, - 0, 239, 286, 158, 0, 0, 240, 0, 241, 243, - 247, 0, 242, 247, 0, 239, 58, 0, 245, 0, - 244, 0, 0, 62, 358, 0, 62, 358, 248, 0, - 249, 0, 248, 59, 358, 249, 0, 250, 0, 251, - 358, 250, 0, 275, 0, 45, 286, 154, 0, 45, - 290, 286, 154, 0, 30, 93, 164, 109, 0, 30, - 93, 196, 109, 0, 37, 358, 0, 6, 358, 0, - 251, 37, 358, 0, 251, 6, 358, 0, 58, 0, - 0, 253, 0, 253, 255, 0, 254, 37, 62, 255, - 0, 254, 37, 62, 0, 256, 0, 255, 256, 0, - 257, 60, 0, 257, 110, 0, 147, 62, 0, 147, - 95, 0, 147, 24, 0, 147, 58, 0, 60, 0, - 119, 256, 0, 197, 258, 0, 200, 259, 0, 278, - 208, 217, 224, 0, 140, 208, 217, 224, 0, 62, - 180, 0, 1, 0, 200, 146, 208, 217, 224, 0, - 146, 208, 217, 224, 0, 126, 0, 129, 257, 0, - 0, 260, 0, 258, 59, 261, 0, 0, 263, 0, - 259, 59, 265, 0, 262, 0, 263, 0, 264, 0, - 265, 0, 274, 208, 217, 224, 0, 4, 62, 180, - 217, 0, 278, 208, 217, 224, 0, 140, 208, 217, - 224, 0, 3, 62, 180, 217, 0, 62, 180, 217, - 0, 274, 208, 217, 224, 0, 4, 62, 180, 217, - 0, 278, 208, 217, 224, 0, 3, 62, 180, 217, - 0, 62, 180, 217, 0, 267, 0, 266, 59, 267, - 0, 154, 0, 154, 64, 180, 0, 338, 291, 0, - 338, 0, 93, 196, 109, 94, 164, 112, 0, 0, - 269, 8, 0, 8, 0, 270, 8, 0, 0, 271, - 164, 0, 271, 93, 174, 109, 0, 271, 93, 348, - 109, 0, 271, 47, 0, 271, 93, 1, 109, 0, - 80, 270, 274, 0, 70, 270, 274, 0, 80, 274, - 0, 70, 274, 0, 289, 269, 274, 0, 277, 0, - 285, 0, 290, 285, 0, 276, 0, 290, 276, 0, - 286, 285, 0, 277, 273, 269, 360, 0, 277, 94, - 272, 112, 0, 277, 94, 112, 0, 93, 274, 109, - 0, 286, 285, 0, 285, 0, 80, 270, 278, 0, - 70, 270, 278, 0, 80, 278, 0, 70, 278, 0, - 289, 269, 278, 0, 184, 0, 80, 270, 278, 0, - 70, 270, 278, 0, 80, 279, 0, 70, 279, 0, - 289, 269, 278, 0, 280, 0, 184, 273, 269, 360, - 0, 93, 279, 109, 0, 184, 94, 272, 112, 0, - 184, 94, 112, 0, 282, 0, 286, 182, 0, 286, - 181, 0, 282, 0, 290, 282, 0, 203, 93, 174, - 109, 0, 203, 93, 183, 109, 0, 203, 195, 0, - 4, 0, 5, 0, 158, 0, 287, 0, 286, 287, - 0, 4, 54, 0, 5, 54, 0, 57, 54, 0, - 158, 54, 0, 290, 285, 0, 276, 0, 290, 276, - 0, 286, 80, 0, 290, 286, 80, 0, 54, 0, - 80, 269, 291, 0, 80, 269, 0, 70, 269, 291, - 0, 70, 269, 0, 289, 269, 0, 289, 269, 291, - 0, 292, 0, 94, 164, 112, 0, 292, 94, 272, - 112, 0, 80, 270, 293, 0, 80, 293, 0, 80, - 270, 0, 80, 0, 70, 270, 293, 0, 70, 293, - 0, 70, 270, 0, 70, 0, 289, 269, 0, 289, - 269, 293, 0, 294, 0, 93, 293, 109, 0, 90, - 0, 294, 93, 348, 109, 269, 360, 0, 294, 47, - 269, 360, 0, 294, 94, 272, 112, 0, 294, 94, - 112, 0, 93, 349, 109, 269, 360, 0, 178, 269, - 360, 0, 195, 269, 360, 0, 94, 272, 112, 0, - 94, 112, 0, 310, 0, 296, 0, 295, 310, 0, - 295, 296, 0, 1, 60, 0, 0, 0, 0, 300, - 0, 301, 0, 300, 301, 0, 33, 223, 60, 0, - 303, 0, 1, 303, 0, 0, 58, 304, 297, 170, - 298, 0, 0, 0, 14, 306, 297, 166, 307, 308, - 0, 303, 0, 0, 297, 309, 311, 298, 0, 303, - 0, 311, 0, 193, 0, 164, 60, 0, 0, 0, - 305, 15, 312, 308, 313, 298, 0, 305, 0, 0, - 0, 16, 314, 297, 166, 315, 171, 298, 0, 0, - 0, 17, 316, 308, 16, 317, 165, 60, 0, 0, - 0, 0, 0, 18, 318, 93, 341, 319, 297, 167, - 60, 320, 343, 109, 321, 171, 298, 0, 0, 0, - 19, 297, 93, 168, 109, 322, 308, 323, 298, 0, - 0, 20, 180, 62, 324, 310, 0, 0, 20, 180, - 11, 180, 62, 325, 310, 0, 0, 21, 62, 326, - 310, 0, 22, 60, 0, 23, 60, 0, 24, 60, - 0, 24, 164, 60, 0, 120, 342, 93, 190, 109, - 60, 0, 120, 342, 93, 190, 62, 344, 109, 60, - 0, 120, 342, 93, 190, 62, 344, 62, 344, 109, - 60, 0, 120, 342, 93, 190, 62, 344, 62, 344, - 62, 347, 109, 60, 0, 25, 80, 164, 60, 0, - 25, 154, 60, 0, 340, 310, 0, 340, 110, 0, - 60, 0, 330, 0, 0, 0, 95, 328, 136, 303, - 329, 333, 0, 0, 0, 95, 331, 303, 332, 333, - 0, 334, 0, 333, 334, 0, 0, 0, 0, 96, - 335, 297, 339, 336, 303, 337, 298, 0, 201, 0, - 270, 0, 93, 11, 109, 0, 93, 357, 109, 0, - 3, 62, 0, 56, 62, 0, 4, 62, 0, 5, - 62, 0, 343, 60, 0, 193, 0, 58, 170, 0, - 0, 8, 0, 0, 164, 0, 1, 0, 0, 345, - 0, 346, 0, 345, 59, 346, 0, 10, 93, 164, - 109, 0, 10, 0, 347, 59, 10, 0, 0, 349, - 0, 196, 0, 353, 0, 354, 11, 0, 353, 11, - 0, 196, 11, 0, 11, 0, 97, 0, 353, 97, - 0, 196, 97, 0, 353, 62, 0, 196, 62, 0, - 0, 64, 351, 352, 0, 102, 0, 225, 0, 355, - 0, 357, 350, 0, 354, 356, 0, 354, 359, 0, - 354, 359, 64, 225, 0, 353, 59, 0, 196, 59, - 0, 198, 194, 0, 201, 194, 0, 203, 194, 0, - 198, 293, 0, 198, 0, 200, 278, 0, 357, 0, - 357, 350, 0, 355, 0, 196, 0, 0, 0, 278, - 0, 0, 61, 93, 362, 109, 0, 61, 47, 0, - 196, 0, 361, 0, 362, 59, 361, 0, 0, 80, - 269, 363, 0, 70, 269, 363, 0, 289, 269, 363, - 0, 41, 0, 364, 80, 0, 364, 81, 0, 364, - 82, 0, 364, 78, 0, 364, 79, 0, 364, 70, - 0, 364, 68, 0, 364, 69, 0, 364, 88, 0, - 364, 59, 0, 364, 73, 0, 364, 74, 0, 364, - 75, 0, 364, 72, 0, 364, 63, 0, 364, 64, - 0, 364, 76, 0, 364, 77, 0, 364, 86, 0, - 364, 87, 0, 364, 67, 0, 364, 66, 0, 364, - 111, 0, 364, 65, 62, 0, 364, 71, 0, 364, - 91, 0, 364, 83, 0, 364, 47, 0, 364, 94, - 112, 0, 364, 39, 0, 364, 38, 0, 364, 39, - 94, 112, 0, 364, 38, 94, 112, 0, 364, 338, - 363, 0, 364, 1, 0 + 115, 0, 0, 116, 122, 0, 115, 122, 0, 115, + 0, 0, 0, 0, 33, 0, 27, 0, 28, 0, + 0, 123, 124, 0, 140, 139, 0, 136, 0, 135, + 0, 121, 94, 194, 110, 61, 0, 129, 59, 117, + 111, 0, 129, 118, 140, 119, 139, 0, 129, 118, + 136, 119, 0, 0, 45, 155, 59, 125, 117, 111, + 0, 0, 45, 59, 126, 117, 111, 0, 45, 155, + 65, 128, 61, 0, 127, 61, 0, 47, 45, 128, + 61, 0, 120, 124, 0, 47, 287, 0, 47, 300, + 287, 0, 47, 300, 185, 0, 185, 0, 287, 0, + 300, 287, 0, 300, 185, 0, 100, 0, 129, 100, + 0, 0, 49, 75, 131, 132, 76, 0, 49, 75, + 76, 0, 134, 0, 132, 60, 134, 0, 244, 0, + 244, 155, 0, 46, 0, 46, 155, 0, 133, 0, + 133, 65, 200, 0, 367, 0, 367, 65, 181, 0, + 130, 124, 0, 130, 1, 0, 211, 61, 0, 204, + 210, 61, 0, 201, 209, 61, 0, 204, 61, 0, + 158, 61, 0, 201, 61, 0, 1, 61, 0, 1, + 111, 0, 61, 0, 195, 0, 151, 0, 0, 150, + 0, 150, 61, 0, 0, 109, 0, 146, 138, 137, + 312, 0, 146, 138, 337, 0, 146, 138, 1, 0, + 0, 292, 5, 94, 142, 358, 110, 274, 370, 0, + 292, 5, 48, 274, 370, 0, 0, 300, 292, 5, + 94, 143, 358, 110, 274, 370, 0, 300, 292, 5, + 48, 274, 370, 0, 0, 292, 160, 94, 144, 358, + 110, 274, 370, 0, 292, 160, 48, 274, 370, 0, + 0, 300, 292, 160, 94, 145, 358, 110, 274, 370, + 0, 300, 292, 160, 48, 274, 370, 0, 201, 198, + 0, 204, 284, 0, 284, 0, 204, 141, 0, 141, + 0, 5, 94, 358, 110, 274, 370, 0, 5, 48, + 274, 370, 0, 160, 94, 358, 110, 274, 370, 0, + 160, 48, 274, 370, 0, 204, 147, 0, 147, 0, + 201, 198, 0, 204, 284, 0, 284, 0, 204, 141, + 0, 141, 0, 130, 148, 0, 25, 3, 0, 149, + 228, 0, 149, 94, 175, 110, 0, 149, 48, 0, + 63, 152, 153, 0, 0, 0, 154, 0, 153, 60, + 154, 0, 153, 1, 0, 94, 175, 110, 0, 48, + 0, 156, 94, 175, 110, 0, 156, 48, 0, 280, + 94, 175, 110, 0, 280, 48, 0, 294, 94, 175, + 110, 0, 294, 48, 0, 3, 0, 4, 0, 5, + 0, 57, 0, 58, 0, 3, 0, 57, 0, 58, + 0, 106, 0, 105, 0, 107, 0, 49, 207, 61, + 0, 49, 201, 198, 0, 49, 284, 0, 49, 141, + 0, 7, 49, 207, 61, 0, 7, 49, 201, 198, + 0, 7, 49, 284, 0, 7, 49, 141, 0, 57, + 75, 162, 161, 0, 57, 75, 161, 0, 4, 75, + 162, 161, 0, 4, 75, 161, 0, 160, 0, 5, + 75, 162, 161, 0, 5, 75, 161, 0, 76, 0, + 78, 0, 163, 0, 162, 60, 163, 0, 200, 0, + 181, 0, 80, 0, 79, 0, 87, 0, 88, 0, + 112, 0, 174, 0, 181, 0, 48, 0, 94, 165, + 110, 0, 48, 0, 94, 169, 110, 0, 0, 169, + 0, 1, 0, 0, 348, 198, 212, 221, 65, 170, + 229, 0, 165, 0, 111, 0, 309, 305, 111, 0, + 309, 305, 1, 111, 0, 309, 1, 111, 0, 0, + 59, 173, 171, 0, 321, 0, 181, 60, 181, 0, + 181, 60, 1, 0, 174, 60, 181, 0, 174, 60, + 1, 0, 181, 0, 174, 0, 189, 0, 120, 180, + 0, 81, 180, 0, 71, 180, 0, 89, 180, 0, + 164, 180, 0, 68, 155, 0, 13, 176, 0, 13, + 94, 200, 110, 0, 30, 176, 0, 30, 94, 200, + 110, 0, 191, 273, 0, 191, 273, 178, 0, 191, + 177, 273, 0, 191, 177, 273, 178, 0, 191, 94, + 200, 110, 0, 191, 94, 200, 110, 178, 0, 191, + 177, 94, 200, 110, 0, 191, 177, 94, 200, 110, + 178, 0, 192, 180, 0, 192, 95, 113, 180, 0, + 192, 95, 165, 113, 180, 0, 35, 180, 0, 36, + 180, 0, 94, 175, 110, 0, 59, 175, 111, 0, + 94, 175, 110, 0, 48, 0, 94, 207, 110, 0, + 65, 229, 0, 94, 200, 110, 0, 179, 94, 200, + 110, 0, 176, 0, 179, 176, 0, 179, 59, 230, + 242, 111, 0, 180, 0, 181, 84, 181, 0, 181, + 85, 181, 0, 181, 79, 181, 0, 181, 80, 181, + 0, 181, 81, 181, 0, 181, 82, 181, 0, 181, + 83, 181, 0, 181, 77, 181, 0, 181, 78, 181, + 0, 181, 74, 181, 0, 181, 75, 181, 0, 181, + 76, 181, 0, 181, 73, 181, 0, 181, 72, 181, + 0, 181, 71, 181, 0, 181, 69, 181, 0, 181, + 70, 181, 0, 181, 68, 181, 0, 181, 67, 181, + 0, 181, 66, 353, 63, 181, 0, 181, 65, 181, + 0, 181, 64, 181, 0, 62, 0, 62, 181, 0, + 89, 368, 155, 0, 183, 0, 375, 0, 3, 0, + 57, 0, 58, 0, 6, 75, 162, 161, 0, 6, + 75, 161, 0, 375, 75, 162, 161, 0, 375, 75, + 161, 0, 49, 155, 75, 162, 161, 0, 49, 6, + 75, 162, 161, 0, 49, 375, 75, 162, 161, 0, + 182, 0, 4, 0, 5, 0, 182, 0, 81, 186, + 0, 71, 186, 0, 94, 186, 110, 0, 3, 75, + 162, 161, 0, 58, 75, 162, 161, 0, 286, 0, + 182, 0, 187, 0, 94, 186, 110, 0, 182, 0, + 10, 0, 193, 0, 194, 0, 94, 165, 110, 0, + 94, 186, 110, 0, 94, 1, 110, 0, 0, 94, + 190, 313, 110, 0, 189, 94, 175, 110, 0, 189, + 48, 0, 189, 95, 165, 113, 0, 189, 87, 0, + 189, 88, 0, 41, 0, 9, 94, 175, 110, 0, + 290, 0, 51, 75, 200, 76, 94, 165, 110, 0, + 52, 75, 200, 76, 94, 165, 110, 0, 53, 75, + 200, 76, 94, 165, 110, 0, 54, 75, 200, 76, + 94, 165, 110, 0, 50, 94, 165, 110, 0, 50, + 94, 200, 110, 0, 300, 3, 0, 300, 375, 0, + 289, 0, 289, 94, 175, 110, 0, 289, 48, 0, + 196, 184, 0, 196, 184, 94, 175, 110, 0, 196, + 184, 48, 0, 196, 185, 0, 196, 289, 0, 196, + 185, 94, 175, 110, 0, 196, 185, 48, 0, 196, + 289, 94, 175, 110, 0, 196, 289, 48, 0, 196, + 89, 8, 48, 0, 196, 8, 55, 89, 8, 48, + 0, 196, 1, 0, 40, 0, 300, 40, 0, 39, + 0, 300, 192, 0, 43, 0, 44, 0, 11, 0, + 194, 11, 0, 0, 189, 93, 0, 189, 92, 0, + 207, 209, 61, 0, 201, 209, 61, 0, 204, 210, + 61, 0, 201, 61, 0, 204, 61, 0, 120, 197, + 0, 279, 0, 284, 0, 48, 0, 199, 48, 0, + 205, 303, 0, 275, 303, 0, 207, 303, 0, 205, + 0, 275, 0, 205, 0, 202, 0, 204, 207, 0, + 207, 203, 0, 207, 206, 203, 0, 204, 207, 203, + 0, 204, 207, 206, 0, 204, 207, 206, 203, 0, + 7, 0, 203, 208, 0, 203, 7, 0, 203, 222, + 0, 222, 0, 275, 0, 7, 0, 204, 9, 0, + 204, 7, 0, 204, 222, 0, 222, 0, 207, 0, + 275, 207, 0, 207, 206, 0, 275, 207, 206, 0, + 208, 0, 206, 208, 0, 236, 0, 8, 0, 281, + 0, 29, 94, 165, 110, 0, 29, 94, 200, 110, + 0, 31, 94, 165, 110, 0, 31, 94, 200, 110, + 0, 8, 0, 9, 0, 236, 0, 213, 0, 209, + 60, 215, 0, 217, 0, 210, 60, 215, 0, 219, + 0, 211, 60, 215, 0, 0, 121, 94, 194, 110, + 0, 0, 198, 212, 221, 65, 214, 229, 0, 198, + 212, 221, 0, 0, 198, 212, 221, 65, 216, 229, + 0, 198, 212, 221, 0, 0, 284, 212, 221, 65, + 218, 229, 0, 284, 212, 221, 0, 0, 284, 212, + 221, 65, 220, 229, 0, 284, 212, 221, 0, 0, + 222, 0, 223, 0, 222, 223, 0, 32, 94, 94, + 224, 110, 110, 0, 225, 0, 224, 60, 225, 0, + 0, 226, 0, 226, 94, 3, 110, 0, 226, 94, + 3, 60, 175, 110, 0, 226, 94, 175, 110, 0, + 155, 0, 7, 0, 8, 0, 9, 0, 155, 0, + 227, 60, 155, 0, 0, 65, 229, 0, 181, 0, + 59, 111, 0, 59, 230, 111, 0, 59, 230, 60, + 111, 0, 1, 0, 229, 0, 230, 60, 229, 0, + 95, 181, 113, 229, 0, 230, 60, 21, 181, 63, + 229, 0, 155, 63, 229, 0, 230, 60, 155, 63, + 229, 0, 99, 0, 231, 138, 137, 312, 0, 231, + 138, 337, 0, 231, 138, 1, 0, 0, 233, 232, + 139, 0, 104, 181, 109, 0, 104, 1, 109, 0, + 0, 235, 234, 0, 235, 1, 0, 0, 14, 155, + 59, 237, 271, 243, 111, 0, 14, 155, 59, 111, + 0, 0, 14, 59, 238, 271, 243, 111, 0, 14, + 59, 111, 0, 14, 155, 0, 14, 298, 0, 46, + 294, 0, 0, 0, 0, 251, 257, 239, 259, 111, + 221, 240, 235, 241, 233, 0, 251, 0, 0, 60, + 0, 0, 60, 0, 37, 0, 244, 7, 0, 244, + 8, 0, 244, 9, 0, 244, 37, 0, 244, 155, + 0, 244, 157, 0, 244, 292, 155, 0, 244, 300, + 292, 155, 0, 244, 300, 155, 0, 244, 159, 0, + 244, 292, 159, 0, 0, 245, 0, 246, 248, 252, + 0, 247, 252, 0, 244, 59, 0, 250, 0, 249, + 0, 0, 63, 368, 0, 63, 368, 253, 0, 254, + 0, 253, 60, 368, 254, 0, 255, 0, 256, 368, + 255, 0, 294, 0, 280, 0, 31, 94, 165, 110, + 0, 31, 94, 200, 110, 0, 38, 368, 0, 7, + 368, 0, 256, 38, 368, 0, 256, 7, 368, 0, + 59, 0, 0, 258, 0, 258, 260, 0, 259, 38, + 63, 260, 0, 259, 38, 63, 0, 261, 0, 260, + 261, 0, 262, 61, 0, 262, 111, 0, 148, 63, + 0, 148, 96, 0, 148, 25, 0, 148, 59, 0, + 61, 0, 120, 261, 0, 201, 263, 0, 204, 264, + 0, 284, 212, 221, 228, 0, 141, 212, 221, 228, + 0, 63, 181, 0, 1, 0, 204, 147, 212, 221, + 228, 0, 147, 212, 221, 228, 0, 127, 0, 130, + 262, 0, 0, 265, 0, 263, 60, 266, 0, 0, + 268, 0, 264, 60, 270, 0, 267, 0, 268, 0, + 269, 0, 270, 0, 279, 212, 221, 228, 0, 4, + 63, 181, 221, 0, 284, 212, 221, 228, 0, 141, + 212, 221, 228, 0, 3, 63, 181, 221, 0, 63, + 181, 221, 0, 279, 212, 221, 228, 0, 4, 63, + 181, 221, 0, 284, 212, 221, 228, 0, 3, 63, + 181, 221, 0, 63, 181, 221, 0, 272, 0, 271, + 60, 272, 0, 155, 0, 155, 65, 181, 0, 348, + 301, 0, 348, 0, 94, 200, 110, 95, 165, 113, + 0, 0, 274, 9, 0, 9, 0, 275, 9, 0, + 0, 276, 165, 0, 276, 94, 175, 110, 0, 276, + 94, 358, 110, 0, 276, 48, 0, 276, 94, 1, + 110, 0, 81, 275, 279, 0, 71, 275, 279, 0, + 81, 279, 0, 71, 279, 0, 299, 274, 279, 0, + 283, 0, 291, 0, 300, 291, 0, 280, 0, 282, + 0, 300, 282, 0, 292, 291, 0, 283, 278, 274, + 370, 0, 283, 95, 277, 113, 0, 283, 95, 113, + 0, 94, 279, 110, 0, 292, 291, 0, 291, 0, + 81, 275, 284, 0, 71, 275, 284, 0, 81, 284, + 0, 71, 284, 0, 299, 274, 284, 0, 188, 0, + 81, 275, 284, 0, 71, 275, 284, 0, 81, 285, + 0, 71, 285, 0, 299, 274, 284, 0, 286, 0, + 188, 278, 274, 370, 0, 94, 285, 110, 0, 188, + 95, 277, 113, 0, 188, 95, 113, 0, 288, 0, + 292, 187, 0, 292, 185, 0, 292, 184, 0, 292, + 182, 0, 292, 184, 0, 288, 0, 300, 288, 0, + 207, 94, 175, 110, 0, 207, 94, 186, 110, 0, + 207, 199, 0, 4, 0, 5, 0, 159, 0, 293, + 0, 292, 293, 0, 4, 55, 0, 5, 55, 0, + 58, 55, 0, 159, 55, 0, 295, 0, 300, 295, + 0, 296, 155, 0, 297, 0, 296, 297, 0, 4, + 55, 0, 5, 55, 0, 159, 55, 0, 57, 55, + 0, 3, 55, 0, 58, 55, 0, 300, 291, 0, + 282, 0, 300, 282, 0, 292, 81, 0, 300, 292, + 81, 0, 55, 0, 81, 274, 301, 0, 81, 274, + 0, 71, 274, 301, 0, 71, 274, 0, 299, 274, + 0, 299, 274, 301, 0, 302, 0, 95, 165, 113, + 0, 302, 95, 277, 113, 0, 81, 275, 303, 0, + 81, 303, 0, 81, 275, 0, 81, 0, 71, 275, + 303, 0, 71, 303, 0, 71, 275, 0, 71, 0, + 299, 274, 0, 299, 274, 303, 0, 304, 0, 94, + 303, 110, 0, 91, 0, 304, 94, 358, 110, 274, + 370, 0, 304, 48, 274, 370, 0, 304, 95, 277, + 113, 0, 304, 95, 113, 0, 94, 359, 110, 274, + 370, 0, 179, 274, 370, 0, 199, 274, 370, 0, + 95, 277, 113, 0, 95, 113, 0, 320, 0, 306, + 0, 305, 320, 0, 305, 306, 0, 1, 61, 0, + 0, 0, 0, 310, 0, 311, 0, 310, 311, 0, + 34, 227, 61, 0, 313, 0, 1, 313, 0, 0, + 59, 314, 307, 171, 308, 0, 0, 0, 15, 316, + 307, 167, 317, 318, 0, 313, 0, 0, 307, 319, + 321, 308, 0, 313, 0, 321, 0, 197, 0, 165, + 61, 0, 0, 0, 315, 16, 322, 318, 323, 308, + 0, 315, 0, 0, 0, 17, 324, 307, 167, 325, + 172, 308, 0, 0, 0, 18, 326, 318, 17, 327, + 166, 61, 0, 0, 0, 0, 0, 19, 328, 94, + 351, 329, 307, 168, 61, 330, 353, 110, 331, 172, + 308, 0, 0, 0, 20, 307, 94, 169, 110, 332, + 318, 333, 308, 0, 0, 21, 181, 63, 334, 320, + 0, 0, 21, 181, 12, 181, 63, 335, 320, 0, + 0, 22, 63, 336, 320, 0, 23, 61, 0, 24, + 61, 0, 25, 61, 0, 25, 165, 61, 0, 121, + 352, 94, 194, 110, 61, 0, 121, 352, 94, 194, + 63, 354, 110, 61, 0, 121, 352, 94, 194, 63, + 354, 63, 354, 110, 61, 0, 121, 352, 94, 194, + 63, 354, 63, 354, 63, 357, 110, 61, 0, 26, + 81, 165, 61, 0, 26, 155, 61, 0, 350, 320, + 0, 350, 111, 0, 61, 0, 340, 0, 0, 0, + 96, 338, 137, 313, 339, 343, 0, 0, 0, 96, + 341, 313, 342, 343, 0, 344, 0, 343, 344, 0, + 0, 0, 0, 97, 345, 307, 349, 346, 313, 347, + 308, 0, 205, 0, 275, 0, 94, 12, 110, 0, + 94, 367, 110, 0, 3, 63, 0, 57, 63, 0, + 4, 63, 0, 5, 63, 0, 353, 61, 0, 197, + 0, 59, 171, 0, 0, 9, 0, 0, 165, 0, + 1, 0, 0, 355, 0, 356, 0, 355, 60, 356, + 0, 11, 94, 165, 110, 0, 11, 0, 357, 60, + 11, 0, 0, 359, 0, 200, 0, 363, 0, 364, + 12, 0, 363, 12, 0, 200, 12, 0, 12, 0, + 98, 0, 363, 98, 0, 200, 98, 0, 363, 63, + 0, 200, 63, 0, 0, 65, 361, 362, 0, 103, + 0, 229, 0, 365, 0, 367, 360, 0, 364, 366, + 0, 364, 369, 0, 364, 369, 65, 229, 0, 363, + 60, 0, 200, 60, 0, 202, 198, 0, 205, 198, + 0, 207, 198, 0, 202, 303, 0, 202, 0, 204, + 284, 0, 367, 0, 367, 360, 0, 365, 0, 200, + 0, 0, 0, 284, 0, 0, 62, 94, 372, 110, + 0, 62, 48, 0, 200, 0, 371, 0, 372, 60, + 371, 0, 0, 81, 274, 373, 0, 71, 274, 373, + 0, 299, 274, 373, 0, 42, 0, 374, 81, 0, + 374, 82, 0, 374, 83, 0, 374, 79, 0, 374, + 80, 0, 374, 71, 0, 374, 69, 0, 374, 70, + 0, 374, 89, 0, 374, 60, 0, 374, 74, 0, + 374, 75, 0, 374, 76, 0, 374, 73, 0, 374, + 64, 0, 374, 65, 0, 374, 77, 0, 374, 78, + 0, 374, 87, 0, 374, 88, 0, 374, 68, 0, + 374, 67, 0, 374, 112, 0, 374, 66, 63, 0, + 374, 72, 0, 374, 92, 0, 374, 84, 0, 374, + 48, 0, 374, 95, 113, 0, 374, 40, 0, 374, + 39, 0, 374, 40, 95, 113, 0, 374, 39, 95, + 113, 0, 374, 348, 373, 0, 374, 1, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 305, 307, 321, 324, 325, 329, 331, 334, 339, 343, - 349, 351, 354, 357, 361, 364, 366, 368, 371, 373, - 376, 379, 381, 383, 385, 387, 389, 391, 397, 401, - 404, 406, 410, 412, 413, 415, 419, 422, 428, 431, - 433, 437, 440, 444, 457, 459, 461, 465, 475, 477, - 479, 483, 487, 492, 495, 497, 501, 503, 504, 511, - 512, 513, 516, 519, 523, 525, 526, 529, 531, 534, - 537, 539, 543, 553, 555, 565, 574, 576, 586, 595, - 597, 607, 616, 618, 630, 638, 645, 650, 657, 664, - 667, 669, 671, 677, 687, 689, 692, 695, 697, 700, - 702, 720, 729, 732, 734, 738, 751, 771, 774, 776, - 777, 780, 787, 793, 795, 797, 799, 802, 806, 812, - 814, 815, 816, 817, 820, 822, 823, 826, 828, 829, - 832, 836, 839, 841, 843, 846, 849, 851, 859, 866, - 872, 878, 884, 887, 894, 902, 904, 912, 915, 919, - 922, 925, 928, 930, 932, 934, 938, 941, 944, 949, - 953, 958, 962, 965, 967, 971, 991, 998, 1001, 1003, - 1004, 1005, 1008, 1019, 1028, 1032, 1036, 1039, 1041, 1045, - 1048, 1051, 1055, 1058, 1060, 1062, 1064, 1071, 1082, 1084, - 1086, 1088, 1094, 1097, 1100, 1103, 1106, 1110, 1113, 1116, - 1120, 1122, 1126, 1130, 1132, 1136, 1139, 1146, 1149, 1151, - 1159, 1168, 1174, 1181, 1183, 1185, 1198, 1201, 1203, 1205, - 1207, 1209, 1211, 1213, 1215, 1217, 1219, 1221, 1223, 1225, - 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1245, 1247, - 1249, 1266, 1269, 1270, 1271, 1272, 1275, 1277, 1278, 1281, - 1283, 1285, 1287, 1291, 1293, 1294, 1298, 1306, 1307, 1308, - 1316, 1324, 1332, 1334, 1342, 1363, 1370, 1377, 1379, 1388, - 1393, 1416, 1460, 1461, 1465, 1469, 1473, 1477, 1479, 1483, - 1485, 1493, 1495, 1500, 1506, 1508, 1513, 1528, 1543, 1554, - 1566, 1574, 1583, 1627, 1630, 1634, 1637, 1641, 1644, 1649, - 1651, 1655, 1668, 1671, 1678, 1685, 1690, 1692, 1697, 1699, - 1706, 1708, 1712, 1716, 1722, 1726, 1729, 1732, 1735, 1745, - 1747, 1750, 1754, 1757, 1760, 1763, 1766, 1772, 1778, 1780, - 1785, 1787, 1796, 1799, 1801, 1804, 1810, 1812, 1822, 1826, - 1829, 1832, 1837, 1840, 1848, 1850, 1852, 1854, 1857, 1860, - 1875, 1894, 1897, 1899, 1902, 1904, 1907, 1909, 1912, 1914, - 1917, 1920, 1924, 1943, 1945, 1965, 1971, 1972, 1978, 1987, - 1989, 1999, 2008, 2010, 2022, 2025, 2029, 2032, 2036, 2041, - 2044, 2048, 2051, 2053, 2055, 2057, 2064, 2066, 2067, 2068, - 2072, 2075, 2079, 2082, 2088, 2090, 2093, 2096, 2099, 2105, - 2108, 2111, 2113, 2115, 2117, 2121, 2127, 2135, 2137, 2141, - 2143, 2148, 2151, 2154, 2156, 2158, 2162, 2166, 2171, 2175, - 2178, 2183, 2187, 2190, 2193, 2196, 2200, 2235, 2241, 2247, - 2259, 2261, 2264, 2266, 2271, 2273, 2275, 2277, 2279, 2283, - 2288, 2293, 2299, 2304, 2309, 2311, 2315, 2320, 2323, 2330, - 2358, 2364, 2366, 2369, 2372, 2374, 2378, 2380, 2384, 2410, - 2439, 2441, 2443, 2445, 2466, 2489, 2491, 2495, 2521, 2530, - 2613, 2620, 2623, 2631, 2642, 2651, 2655, 2670, 2673, 2678, - 2680, 2682, 2684, 2686, 2688, 2693, 2699, 2701, 2704, 2707, - 2709, 2720, 2725, 2728, 2730, 2749, 2752, 2753, 2764, 2767, - 2768, 2779, 2781, 2784, 2786, 2789, 2796, 2804, 2811, 2817, - 2823, 2831, 2835, 2840, 2844, 2847, 2856, 2858, 2862, 2865, - 2870, 2874, 2879, 2889, 2892, 2896, 2900, 2908, 2913, 2919, - 2922, 2924, 2926, 2932, 2935, 2937, 2939, 2941, 2945, 2948, - 2969, 2977, 2978, 2982, 2987, 2990, 2992, 2994, 2996, 3000, - 3006, 3009, 3011, 3013, 3015, 3019, 3022, 3025, 3027, 3029, - 3031, 3035, 3038, 3041, 3043, 3045, 3047, 3056, 3062, 3068, - 3070, 3074, 3077, 3079, 3083, 3085, 3086, 3089, 3091, 3097, - 3112, 3118, 3128, 3142, 3151, 3152, 3156, 3159, 3165, 3171, - 3174, 3176, 3178, 3180, 3184, 3188, 3192, 3195, 3200, 3203, - 3205, 3207, 3209, 3211, 3213, 3215, 3217, 3221, 3225, 3229, - 3233, 3234, 3236, 3238, 3240, 3242, 3244, 3246, 3248, 3250, - 3258, 3260, 3261, 3262, 3265, 3273, 3278, 3285, 3287, 3292, - 3294, 3297, 3311, 3314, 3317, 3326, 3338, 3349, 3369, 3379, - 3382, 3390, 3402, 3405, 3408, 3411, 3427, 3430, 3441, 3442, - 3446, 3461, 3480, 3492, 3506, 3520, 3533, 3552, 3570, 3589, - 3597, 3618, 3636, 3649, 3650, 3653, 3653, 3656, 3656, 3659, - 3659, 3665, 3671, 3674, 3679, 3686, 3695, 3704, 3713, 3721, - 3734, 3736, 3740, 3742, 3745, 3752, 3755, 3763, 3779, 3790, - 3802, 3804, 3807, 3817, 3827, 3838, 3840, 3842, 3845, 3862, - 3868, 3876, 3878, 3880, 3884, 3887, 3888, 3896, 3900, 3904, - 3907, 3908, 3914, 3917, 3920, 3922, 3926, 3931, 3934, 3944, - 3949, 3950, 3958, 3964, 3969, 3973, 3978, 3982, 3986, 3990, - 3995, 4006, 4020, 4024, 4027, 4029, 4033, 4037, 4040, 4043, - 4045, 4049, 4051, 4058, 4065, 4068, 4071, 4075, 4079, 4085, - 4089, 4094, 4096, 4099, 4104, 4110, 4120, 4123, 4125, 4129, - 4134, 4136, 4143, 4146, 4148, 4150, 4156, 4161, 4164, 4166, - 4168, 4170, 4172, 4174, 4176, 4178, 4180, 4182, 4184, 4186, - 4188, 4190, 4192, 4194, 4196, 4198, 4200, 4202, 4204, 4206, - 4208, 4210, 4212, 4214, 4216, 4218, 4220, 4222, 4224, 4226, - 4229, 4231 + 310, 312, 326, 329, 330, 334, 336, 339, 344, 348, + 354, 356, 359, 362, 366, 369, 371, 373, 376, 378, + 381, 384, 386, 388, 390, 392, 394, 396, 402, 406, + 409, 411, 415, 417, 418, 420, 424, 427, 433, 436, + 438, 443, 446, 450, 463, 465, 467, 471, 481, 483, + 485, 489, 498, 508, 511, 513, 517, 519, 520, 527, + 528, 529, 532, 535, 539, 541, 542, 545, 547, 550, + 553, 555, 559, 569, 571, 581, 590, 592, 602, 611, + 613, 623, 632, 634, 646, 654, 661, 666, 673, 680, + 683, 685, 687, 693, 703, 705, 708, 711, 713, 716, + 718, 741, 750, 753, 755, 759, 772, 792, 795, 797, + 798, 801, 808, 814, 816, 818, 820, 822, 825, 830, + 832, 833, 834, 835, 838, 840, 841, 844, 846, 847, + 850, 854, 857, 859, 861, 864, 867, 869, 877, 884, + 890, 896, 902, 905, 912, 920, 922, 930, 933, 937, + 940, 943, 946, 948, 950, 952, 956, 959, 962, 967, + 971, 976, 980, 983, 985, 989, 1009, 1016, 1019, 1021, + 1022, 1023, 1026, 1037, 1046, 1050, 1054, 1057, 1059, 1063, + 1066, 1069, 1073, 1076, 1078, 1080, 1082, 1089, 1102, 1104, + 1106, 1108, 1114, 1117, 1120, 1123, 1126, 1130, 1133, 1136, + 1140, 1142, 1146, 1150, 1152, 1156, 1159, 1166, 1169, 1171, + 1179, 1188, 1194, 1201, 1203, 1205, 1218, 1221, 1223, 1225, + 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, + 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1265, 1267, + 1269, 1286, 1289, 1290, 1291, 1292, 1293, 1296, 1299, 1301, + 1304, 1309, 1312, 1314, 1318, 1320, 1321, 1324, 1326, 1328, + 1330, 1334, 1337, 1341, 1343, 1344, 1345, 1349, 1357, 1358, + 1359, 1367, 1375, 1383, 1385, 1393, 1414, 1421, 1428, 1430, + 1439, 1444, 1467, 1511, 1512, 1516, 1520, 1524, 1528, 1530, + 1534, 1536, 1544, 1546, 1551, 1557, 1561, 1566, 1571, 1573, + 1578, 1593, 1608, 1619, 1631, 1639, 1648, 1692, 1695, 1699, + 1702, 1706, 1709, 1714, 1716, 1720, 1733, 1736, 1743, 1750, + 1755, 1757, 1762, 1764, 1771, 1773, 1777, 1781, 1787, 1791, + 1794, 1797, 1800, 1810, 1812, 1815, 1819, 1822, 1825, 1828, + 1831, 1837, 1843, 1845, 1850, 1852, 1861, 1864, 1866, 1869, + 1875, 1877, 1887, 1891, 1894, 1897, 1902, 1905, 1913, 1915, + 1917, 1919, 1922, 1925, 1940, 1959, 1962, 1964, 1967, 1969, + 1972, 1974, 1977, 1979, 1982, 1985, 1989, 2008, 2010, 2030, + 2036, 2037, 2043, 2052, 2054, 2064, 2073, 2075, 2087, 2090, + 2094, 2097, 2101, 2106, 2109, 2113, 2116, 2118, 2120, 2122, + 2129, 2131, 2132, 2133, 2137, 2140, 2144, 2147, 2153, 2155, + 2158, 2161, 2164, 2170, 2173, 2176, 2178, 2180, 2182, 2186, + 2192, 2200, 2202, 2206, 2208, 2213, 2216, 2219, 2221, 2223, + 2227, 2231, 2236, 2240, 2243, 2248, 2252, 2255, 2258, 2262, + 2264, 2299, 2305, 2311, 2323, 2325, 2328, 2330, 2335, 2337, + 2339, 2341, 2343, 2347, 2352, 2357, 2363, 2368, 2373, 2375, + 2379, 2384, 2387, 2394, 2422, 2428, 2430, 2433, 2436, 2438, + 2442, 2444, 2448, 2474, 2503, 2506, 2507, 2528, 2551, 2553, + 2557, 2583, 2592, 2675, 2682, 2685, 2693, 2704, 2713, 2717, + 2732, 2735, 2740, 2742, 2744, 2746, 2748, 2750, 2755, 2761, + 2763, 2766, 2769, 2771, 2782, 2787, 2790, 2792, 2816, 2819, + 2820, 2831, 2834, 2835, 2846, 2848, 2851, 2853, 2856, 2863, + 2871, 2878, 2884, 2890, 2898, 2902, 2907, 2911, 2914, 2923, + 2925, 2929, 2932, 2937, 2941, 2946, 2956, 2959, 2963, 2967, + 2975, 2980, 2986, 2989, 2991, 2993, 2999, 3002, 3004, 3006, + 3008, 3012, 3015, 3036, 3046, 3048, 3049, 3053, 3058, 3061, + 3063, 3065, 3067, 3071, 3077, 3080, 3082, 3084, 3086, 3090, + 3093, 3096, 3098, 3100, 3102, 3106, 3109, 3112, 3114, 3116, + 3118, 3125, 3136, 3140, 3145, 3149, 3154, 3156, 3160, 3163, + 3165, 3169, 3171, 3172, 3175, 3177, 3183, 3198, 3204, 3210, + 3224, 3226, 3230, 3242, 3248, 3259, 3266, 3272, 3274, 3275, + 3276, 3284, 3293, 3294, 3298, 3301, 3307, 3313, 3316, 3318, + 3320, 3322, 3326, 3330, 3334, 3337, 3342, 3345, 3347, 3349, + 3351, 3353, 3355, 3357, 3359, 3363, 3367, 3371, 3375, 3376, + 3378, 3380, 3382, 3384, 3386, 3388, 3390, 3392, 3400, 3402, + 3403, 3404, 3407, 3415, 3420, 3427, 3429, 3434, 3436, 3439, + 3453, 3456, 3459, 3468, 3480, 3491, 3511, 3521, 3524, 3532, + 3544, 3547, 3550, 3553, 3569, 3572, 3583, 3584, 3588, 3603, + 3622, 3634, 3648, 3662, 3675, 3694, 3712, 3731, 3739, 3760, + 3778, 3791, 3792, 3795, 3795, 3798, 3798, 3801, 3801, 3807, + 3813, 3816, 3821, 3828, 3837, 3846, 3855, 3863, 3876, 3878, + 3882, 3884, 3887, 3894, 3897, 3905, 3921, 3932, 3944, 3946, + 3949, 3959, 3969, 3980, 3982, 3984, 3987, 4004, 4010, 4018, + 4020, 4022, 4026, 4029, 4030, 4038, 4042, 4046, 4049, 4050, + 4056, 4059, 4062, 4064, 4068, 4073, 4076, 4086, 4091, 4092, + 4100, 4106, 4111, 4115, 4120, 4124, 4128, 4132, 4137, 4148, + 4162, 4166, 4169, 4171, 4175, 4179, 4182, 4185, 4187, 4191, + 4193, 4200, 4207, 4210, 4213, 4217, 4221, 4227, 4231, 4236, + 4238, 4241, 4246, 4252, 4262, 4265, 4267, 4271, 4276, 4278, + 4285, 4288, 4290, 4292, 4298, 4303, 4306, 4308, 4310, 4312, + 4314, 4316, 4318, 4320, 4322, 4324, 4326, 4328, 4330, 4332, + 4334, 4336, 4338, 4340, 4342, 4344, 4346, 4348, 4350, 4352, + 4354, 4356, 4358, 4360, 4362, 4364, 4366, 4368, 4371, 4373 }; +#endif + + +#if YYDEBUG != 0 static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER", -"TYPENAME","SELFNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT","STRING", -"ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH","CASE","DEFAULT", -"BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","GCC_ASM_KEYWORD","TYPEOF", -"ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART","AGGR", -"VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE", +"TYPENAME","SELFNAME","PFUNCNAME","SCSPEC","TYPESPEC","CV_QUALIFIER","CONSTANT", +"STRING","ELLIPSIS","SIZEOF","ENUM","IF","ELSE","WHILE","DO","FOR","SWITCH", +"CASE","DEFAULT","BREAK","CONTINUE","RETURN","GOTO","ASM_KEYWORD","GCC_ASM_KEYWORD", +"TYPEOF","ALIGNOF","SIGOF","ATTRIBUTE","EXTENSION","LABEL","REALPART","IMAGPART", +"AGGR","VISSPEC","DELETE","NEW","THIS","OPERATOR","CXX_TRUE","CXX_FALSE","NAMESPACE", "TYPENAME_KEYWORD","USING","LEFT_RIGHT","TEMPLATE","TYPEID","DYNAMIC_CAST","STATIC_CAST", "REINTERPRET_CAST","CONST_CAST","SCOPE","EMPTY","PTYPENAME","NSNAME","'{'","','", "';'","THROW","':'","ASSIGN","'='","'?'","OROR","ANDAND","'|'","'^'","'&'","MIN_MAX", @@ -716,16 +718,17 @@ static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER" "template_arg","unop","expr","paren_expr_or_null","paren_cond_or_null","xcond", "condition","@10","compstmtend","already_scoped_stmt","@11","nontrivial_exprlist", "nonnull_exprlist","unary_expr","new_placement","new_initializer","regcast_or_absdcl", -"cast_expr","expr_no_commas","notype_unqualified_id","unqualified_id","expr_or_declarator", -"direct_notype_declarator","primary","@12","new","delete","boolean.literal", -"string","nodecls","object","decl","declarator","fcast_or_absdcl","type_id", -"typed_declspecs","typed_declspecs1","reserved_declspecs","declmods","typed_typespecs", -"reserved_typespecquals","typespec","typespecqual_reserved","initdecls","notype_initdecls", -"nomods_initdecls","maybeasm","initdcl0","@13","initdcl","@14","notype_initdcl0", -"@15","nomods_initdcl0","@16","maybe_attribute","attributes","attribute","attribute_list", -"attrib","any_word","identifiers_or_typenames","maybe_init","init","initlist", -"fn.defpen","pending_inline","pending_inlines","defarg_again","pending_defargs", -"structsp","@17","@18","@19","@20","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype", +"cast_expr","expr_no_commas","notype_unqualified_id","template_id","object_template_id", +"unqualified_id","expr_or_declarator","notype_template_declarator","direct_notype_declarator", +"primary","@12","new","delete","boolean.literal","string","nodecls","object", +"decl","declarator","fcast_or_absdcl","type_id","typed_declspecs","typed_declspecs1", +"reserved_declspecs","declmods","typed_typespecs","reserved_typespecquals","typespec", +"typespecqual_reserved","initdecls","notype_initdecls","nomods_initdecls","maybeasm", +"initdcl0","@13","initdcl","@14","notype_initdcl0","@15","nomods_initdcl0","@16", +"maybe_attribute","attributes","attribute","attribute_list","attrib","any_word", +"identifiers_or_typenames","maybe_init","init","initlist","fn.defpen","pending_inline", +"pending_inlines","defarg_again","pending_defargs","structsp","@17","@18","@19", +"@20","@21","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype", "named_class_head_sans_basetype_defn","named_complex_class_head_sans_basetype", "do_xref_defn","named_class_head","unnamed_class_head","class_head","maybe_base_class_list", "base_class_list","base_class","base_class.1","base_class_access_list","left_curly", @@ -734,107 +737,110 @@ static const char * const yytname[] = { "$","error","$undefined.","IDENTIFIER" "component_declarator","after_type_component_declarator0","notype_component_declarator0", "after_type_component_declarator","notype_component_declarator","enumlist","enumerator", "new_type_id","cv_qualifiers","nonempty_cv_qualifiers","suspend_mom","nonmomentary_expr", -"maybe_parmlist","after_type_declarator","complete_type_name","nested_type", -"direct_after_type_declarator","notype_declarator","complex_notype_declarator", +"maybe_parmlist","after_type_declarator","nonnested_type","complete_type_name", +"nested_type","direct_after_type_declarator","notype_declarator","complex_notype_declarator", "complex_direct_notype_declarator","qualified_id","notype_qualified_id","overqualified_id", "functional_cast","type_name","nested_name_specifier","nested_name_specifier_1", -"complex_type_name","ptr_to_mem","global_scope","new_declarator","direct_new_declarator", -"absdcl","direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel", -"maybe_label_decls","label_decls","label_decl","compstmt_or_error","compstmt", -"@21","simple_if","@22","@23","implicitly_scoped_stmt","@24","stmt","simple_stmt", -"@25","@26","@27","@28","@29","@30","@31","@32","@33","@34","@35","@36","@37", -"@38","@39","function_try_block","@40","@41","try_block","@42","@43","handler_seq", -"handler","@44","@45","@46","type_specifier_seq","handler_args","label_colon", -"for.init.statement","maybe_cv_qualifier","xexpr","asm_operands","nonnull_asm_operands", -"asm_operand","asm_clobbers","parmlist","complex_parmlist","defarg","@47","defarg1", -"parms","parms_comma","named_parm","full_parm","parm","see_typename","bad_parm", -"exception_specification_opt","ansi_raise_identifier","ansi_raise_identifiers", -"conversion_declarator","operator","operator_name","" +"typename_sub","typename_sub0","typename_sub1","typename_sub2","complex_type_name", +"ptr_to_mem","global_scope","new_declarator","direct_new_declarator","absdcl", +"direct_abstract_declarator","stmts","errstmt",".pushlevel",".poplevel","maybe_label_decls", +"label_decls","label_decl","compstmt_or_error","compstmt","@22","simple_if", +"@23","@24","implicitly_scoped_stmt","@25","stmt","simple_stmt","@26","@27", +"@28","@29","@30","@31","@32","@33","@34","@35","@36","@37","@38","@39","@40", +"function_try_block","@41","@42","try_block","@43","@44","handler_seq","handler", +"@45","@46","@47","type_specifier_seq","handler_args","label_colon","for.init.statement", +"maybe_cv_qualifier","xexpr","asm_operands","nonnull_asm_operands","asm_operand", +"asm_clobbers","parmlist","complex_parmlist","defarg","@48","defarg1","parms", +"parms_comma","named_parm","full_parm","parm","see_typename","bad_parm","exception_specification_opt", +"ansi_raise_identifier","ansi_raise_identifiers","conversion_declarator","operator", +"operator_name", NULL }; #endif static const short yyr1[] = { 0, - 113, 113, 115, 114, 114, 116, 116, 117, 118, 119, - 120, 120, 122, 121, 123, 123, 123, 123, 123, 123, - 123, 124, 123, 125, 123, 123, 123, 123, 123, 126, - 126, 126, 127, 127, 127, 127, 128, 128, 130, 129, - 129, 131, 131, 132, 132, 132, 132, 133, 133, 133, - 133, 134, 134, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 136, 136, 137, 137, 137, 138, 138, 139, - 139, 139, 141, 140, 140, 142, 140, 140, 143, 140, - 140, 144, 140, 140, 145, 145, 145, 145, 145, 146, - 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, - 147, 148, 149, 149, 149, 150, 151, 152, 152, 152, - 152, 153, 153, 153, 153, 153, 153, 153, 153, 154, - 154, 154, 154, 154, 155, 155, 155, 156, 156, 156, - 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, - 158, 158, 158, 159, 159, 160, 160, 161, 161, 162, - 162, 163, 163, 163, 163, 163, 164, 164, 165, 165, - 166, 166, 167, 167, 167, 169, 168, 168, 170, 170, - 170, 170, 172, 171, 171, 173, 173, 173, 173, 174, - 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 176, 176, 177, 177, 177, - 177, 178, 178, 179, 179, 179, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 181, 181, 181, 181, 181, 182, 182, 182, 183, - 183, 183, 183, 184, 184, 184, 185, 185, 185, 185, - 185, 185, 185, 186, 185, 185, 185, 185, 185, 185, - 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, - 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, - 185, 185, 185, 187, 187, 188, 188, 189, 189, 190, - 190, 191, 192, 192, 193, 193, 193, 193, 193, 193, - 194, 194, 195, 195, 196, 196, 196, 196, 196, 197, - 197, 198, 198, 198, 198, 198, 198, 199, 199, 199, - 199, 199, 200, 200, 200, 200, 200, 200, 201, 201, - 201, 201, 202, 202, 203, 203, 203, 203, 203, 203, - 203, 204, 204, 204, 205, 205, 206, 206, 207, 207, - 208, 208, 210, 209, 209, 212, 211, 211, 214, 213, - 213, 216, 215, 215, 217, 217, 218, 218, 219, 220, - 220, 221, 221, 221, 221, 221, 222, 222, 222, 222, - 223, 223, 224, 224, 225, 225, 225, 225, 225, 226, - 226, 226, 226, 226, 226, 227, 228, 228, 228, 229, - 229, 230, 230, 231, 231, 231, 233, 232, 232, 234, - 232, 232, 232, 232, 232, 232, 235, 236, 232, 232, - 237, 237, 238, 238, 239, 239, 239, 239, 239, 240, - 241, 242, 242, 242, 242, 242, 243, 244, 244, 244, - 245, 246, 246, 247, 247, 247, 248, 248, 249, 249, - 250, 250, 250, 250, 250, 251, 251, 251, 251, 252, - 253, 254, 254, 254, 254, 255, 255, 256, 256, 256, - 256, 256, 256, 256, 256, 257, 257, 257, 257, 257, - 257, 257, 257, 257, 257, 258, 258, 258, 259, 259, - 259, 260, 260, 261, 261, 262, 262, 263, 263, 263, - 263, 264, 264, 265, 265, 265, 266, 266, 267, 267, - 268, 268, 268, 269, 269, 270, 270, 271, 272, 273, - 273, 273, 273, 274, 274, 274, 274, 274, 274, 275, - 275, 275, 275, 276, 277, 277, 277, 277, 277, 277, - 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, - 279, 279, 280, 280, 280, 280, 280, 281, 282, 283, - 283, 284, 284, 284, 285, 285, 285, 286, 286, 287, - 287, 287, 287, 288, 288, 288, 289, 289, 290, 291, - 291, 291, 291, 291, 291, 291, 292, 292, 293, 293, - 293, 293, 293, 293, 293, 293, 293, 293, 293, 294, - 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, - 295, 295, 295, 295, 296, 297, 298, 299, 299, 300, - 300, 301, 302, 302, 304, 303, 306, 307, 305, 308, - 309, 308, 310, 310, 311, 311, 312, 313, 311, 311, - 314, 315, 311, 316, 317, 311, 318, 319, 320, 321, - 311, 322, 323, 311, 324, 311, 325, 311, 326, 311, - 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 328, 329, 327, 331, 332, 330, - 333, 333, 335, 336, 337, 334, 338, 338, 339, 339, - 340, 340, 340, 340, 341, 341, 341, 342, 342, 343, - 343, 343, 344, 344, 345, 345, 346, 347, 347, 348, - 348, 348, 349, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 351, 350, 352, 352, 353, 353, 353, 353, - 353, 354, 354, 355, 355, 355, 355, 355, 355, 356, - 356, 357, 357, 358, 359, 359, 360, 360, 360, 361, - 362, 362, 363, 363, 363, 363, 364, 365, 365, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - 365, 365 + 114, 114, 116, 115, 115, 117, 117, 118, 119, 120, + 121, 121, 123, 122, 124, 124, 124, 124, 124, 124, + 124, 125, 124, 126, 124, 124, 124, 124, 124, 127, + 127, 127, 128, 128, 128, 128, 129, 129, 131, 130, + 130, 132, 132, 133, 133, 133, 133, 134, 134, 134, + 134, 135, 135, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 137, 137, 138, 138, 138, 139, 139, 140, + 140, 140, 142, 141, 141, 143, 141, 141, 144, 141, + 141, 145, 141, 141, 146, 146, 146, 146, 146, 147, + 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, + 148, 149, 150, 150, 150, 151, 152, 153, 153, 153, + 153, 154, 154, 154, 154, 154, 154, 154, 154, 155, + 155, 155, 155, 155, 156, 156, 156, 157, 157, 157, + 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, + 159, 159, 159, 160, 160, 161, 161, 162, 162, 163, + 163, 164, 164, 164, 164, 164, 165, 165, 166, 166, + 167, 167, 168, 168, 168, 170, 169, 169, 171, 171, + 171, 171, 173, 172, 172, 174, 174, 174, 174, 175, + 175, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 177, 177, 178, 178, 178, + 178, 179, 179, 180, 180, 180, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 182, 182, 182, 182, 182, 182, 183, 183, 183, + 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, + 186, 187, 187, 188, 188, 188, 188, 189, 189, 189, + 189, 189, 189, 189, 190, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 191, 191, 192, + 192, 193, 193, 194, 194, 195, 196, 196, 197, 197, + 197, 197, 197, 197, 198, 198, 199, 199, 200, 200, + 200, 200, 200, 201, 201, 202, 202, 202, 202, 202, + 202, 203, 203, 203, 203, 203, 204, 204, 204, 204, + 204, 204, 205, 205, 205, 205, 206, 206, 207, 207, + 207, 207, 207, 207, 207, 208, 208, 208, 209, 209, + 210, 210, 211, 211, 212, 212, 214, 213, 213, 216, + 215, 215, 218, 217, 217, 220, 219, 219, 221, 221, + 222, 222, 223, 224, 224, 225, 225, 225, 225, 225, + 226, 226, 226, 226, 227, 227, 228, 228, 229, 229, + 229, 229, 229, 230, 230, 230, 230, 230, 230, 231, + 232, 232, 232, 233, 233, 234, 234, 235, 235, 235, + 237, 236, 236, 238, 236, 236, 236, 236, 236, 239, + 240, 241, 236, 236, 242, 242, 243, 243, 244, 244, + 244, 244, 244, 245, 246, 247, 247, 247, 247, 247, + 248, 249, 249, 249, 250, 251, 251, 252, 252, 252, + 253, 253, 254, 254, 255, 255, 255, 255, 256, 256, + 256, 256, 257, 258, 259, 259, 259, 259, 260, 260, + 261, 261, 261, 261, 261, 261, 261, 261, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 263, 263, + 263, 264, 264, 264, 265, 265, 266, 266, 267, 267, + 268, 268, 268, 268, 269, 269, 270, 270, 270, 271, + 271, 272, 272, 273, 273, 273, 274, 274, 275, 275, + 276, 277, 278, 278, 278, 278, 279, 279, 279, 279, + 279, 279, 280, 280, 281, 281, 281, 282, 283, 283, + 283, 283, 283, 283, 284, 284, 284, 284, 284, 284, + 285, 285, 285, 285, 285, 285, 286, 286, 286, 286, + 286, 286, 287, 287, 288, 288, 289, 289, 290, 290, + 290, 291, 291, 291, 292, 292, 293, 293, 293, 293, + 294, 294, 295, 296, 296, 297, 297, 297, 297, 297, + 297, 298, 298, 298, 299, 299, 300, 301, 301, 301, + 301, 301, 301, 301, 302, 302, 303, 303, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 305, 305, + 305, 305, 306, 307, 308, 309, 309, 310, 310, 311, + 312, 312, 314, 313, 316, 317, 315, 318, 319, 318, + 320, 320, 321, 321, 322, 323, 321, 321, 324, 325, + 321, 326, 327, 321, 328, 329, 330, 331, 321, 332, + 333, 321, 334, 321, 335, 321, 336, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 338, 339, 337, 341, 342, 340, 343, 343, + 345, 346, 347, 344, 348, 348, 349, 349, 350, 350, + 350, 350, 351, 351, 351, 352, 352, 353, 353, 353, + 354, 354, 355, 355, 356, 357, 357, 358, 358, 358, + 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, + 361, 360, 362, 362, 363, 363, 363, 363, 363, 364, + 364, 365, 365, 365, 365, 365, 365, 366, 366, 367, + 367, 368, 369, 369, 370, 370, 370, 371, 372, 372, + 373, 373, 373, 373, 374, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, 375, 375 }; static const short yyr2[] = { 0, @@ -862,2562 +868,2634 @@ static const short yyr2[] = { 0, 2, 3, 4, 1, 2, 5, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 1, - 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 3, 1, 1, 3, 1, 1, 1, 1, - 3, 3, 3, 0, 4, 4, 2, 4, 2, 2, - 1, 4, 1, 7, 7, 7, 7, 4, 4, 2, - 2, 1, 4, 2, 2, 2, 5, 3, 5, 3, - 4, 6, 2, 1, 2, 1, 2, 1, 1, 1, - 2, 0, 2, 2, 3, 3, 3, 2, 2, 2, - 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, - 1, 2, 2, 3, 3, 3, 4, 1, 2, 2, - 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, - 2, 3, 1, 2, 1, 1, 1, 4, 4, 4, - 4, 1, 1, 1, 1, 3, 1, 3, 1, 3, - 0, 4, 0, 6, 3, 0, 6, 3, 0, 6, - 3, 0, 6, 3, 0, 1, 1, 2, 6, 1, - 3, 0, 1, 4, 6, 4, 1, 1, 1, 1, - 1, 3, 0, 2, 1, 2, 3, 4, 1, 1, - 3, 4, 6, 3, 5, 1, 4, 3, 3, 0, - 3, 3, 3, 0, 2, 2, 0, 7, 4, 0, - 6, 3, 2, 2, 3, 4, 0, 0, 9, 1, - 0, 1, 0, 1, 1, 2, 2, 2, 2, 2, - 2, 3, 4, 3, 2, 3, 0, 1, 3, 2, - 2, 1, 1, 0, 2, 3, 1, 4, 1, 3, - 1, 3, 4, 4, 4, 2, 2, 3, 3, 1, - 0, 1, 2, 4, 3, 1, 2, 2, 2, 2, - 2, 2, 2, 1, 2, 2, 2, 4, 4, 2, - 1, 5, 4, 1, 2, 0, 1, 3, 0, 1, - 3, 1, 1, 1, 1, 4, 4, 4, 4, 4, - 3, 4, 4, 4, 4, 3, 1, 3, 1, 3, - 2, 1, 6, 0, 2, 1, 2, 0, 2, 4, - 4, 2, 4, 3, 3, 2, 2, 3, 1, 1, - 2, 1, 2, 2, 4, 4, 3, 3, 2, 1, - 3, 3, 2, 2, 3, 1, 3, 3, 2, 2, - 3, 1, 4, 3, 4, 3, 1, 2, 2, 1, - 2, 4, 4, 2, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 2, 1, 2, 2, 3, 1, 3, - 2, 3, 2, 2, 3, 1, 3, 4, 3, 2, - 2, 1, 3, 2, 2, 1, 2, 3, 1, 3, - 1, 6, 4, 4, 3, 5, 3, 3, 3, 2, - 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, - 2, 3, 1, 2, 0, 5, 0, 0, 6, 1, - 0, 4, 1, 1, 1, 2, 0, 0, 6, 1, - 0, 0, 7, 0, 0, 7, 0, 0, 0, 0, - 14, 0, 0, 9, 0, 5, 0, 7, 0, 4, - 2, 2, 2, 3, 6, 8, 10, 12, 4, 3, - 2, 2, 1, 1, 0, 0, 6, 0, 0, 5, - 1, 2, 0, 0, 0, 8, 1, 1, 3, 3, - 2, 2, 2, 2, 2, 1, 2, 0, 1, 0, - 1, 1, 0, 1, 1, 3, 4, 1, 3, 0, - 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 0, 3, 1, 1, 1, 2, 2, 2, - 4, 2, 2, 2, 2, 2, 2, 1, 2, 1, - 2, 1, 1, 0, 0, 1, 0, 4, 2, 1, - 1, 3, 0, 3, 3, 3, 1, 2, 2, 2, + 2, 3, 1, 1, 1, 1, 1, 4, 3, 4, + 3, 5, 5, 5, 1, 1, 1, 1, 2, 2, + 3, 4, 4, 1, 1, 1, 3, 1, 1, 1, + 1, 3, 3, 3, 0, 4, 4, 2, 4, 2, + 2, 1, 4, 1, 7, 7, 7, 7, 4, 4, + 2, 2, 1, 4, 2, 2, 5, 3, 2, 2, + 5, 3, 5, 3, 4, 6, 2, 1, 2, 1, + 2, 1, 1, 1, 2, 0, 2, 2, 3, 3, + 3, 2, 2, 2, 1, 1, 1, 2, 2, 2, + 2, 1, 1, 1, 1, 2, 2, 3, 3, 3, + 4, 1, 2, 2, 2, 1, 1, 1, 2, 2, + 2, 1, 1, 2, 2, 3, 1, 2, 1, 1, + 1, 4, 4, 4, 4, 1, 1, 1, 1, 3, + 1, 3, 1, 3, 0, 4, 0, 6, 3, 0, + 6, 3, 0, 6, 3, 0, 6, 3, 0, 1, + 1, 2, 6, 1, 3, 0, 1, 4, 6, 4, + 1, 1, 1, 1, 1, 3, 0, 2, 1, 2, + 3, 4, 1, 1, 3, 4, 6, 3, 5, 1, + 4, 3, 3, 0, 3, 3, 3, 0, 2, 2, + 0, 7, 4, 0, 6, 3, 2, 2, 2, 0, + 0, 0, 10, 1, 0, 1, 0, 1, 1, 2, + 2, 2, 2, 2, 2, 3, 4, 3, 2, 3, + 0, 1, 3, 2, 2, 1, 1, 0, 2, 3, + 1, 4, 1, 3, 1, 1, 4, 4, 2, 2, + 3, 3, 1, 0, 1, 2, 4, 3, 1, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, + 4, 4, 2, 1, 5, 4, 1, 2, 0, 1, + 3, 0, 1, 3, 1, 1, 1, 1, 4, 4, + 4, 4, 4, 3, 4, 4, 4, 4, 3, 1, + 3, 1, 3, 2, 1, 6, 0, 2, 1, 2, + 0, 2, 4, 4, 2, 4, 3, 3, 2, 2, + 3, 1, 1, 2, 1, 1, 2, 2, 4, 4, + 3, 3, 2, 1, 3, 3, 2, 2, 3, 1, + 3, 3, 2, 2, 3, 1, 4, 3, 4, 3, + 1, 2, 2, 2, 2, 2, 1, 2, 4, 4, + 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, + 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 2, 2, 3, 1, 3, 2, 3, + 2, 2, 3, 1, 3, 4, 3, 2, 2, 1, + 3, 2, 2, 1, 2, 3, 1, 3, 1, 6, + 4, 4, 3, 5, 3, 3, 3, 2, 1, 1, + 2, 2, 2, 0, 0, 0, 1, 1, 2, 3, + 1, 2, 0, 5, 0, 0, 6, 1, 0, 4, + 1, 1, 1, 2, 0, 0, 6, 1, 0, 0, + 7, 0, 0, 7, 0, 0, 0, 0, 14, 0, + 0, 9, 0, 5, 0, 7, 0, 4, 2, 2, + 2, 3, 6, 8, 10, 12, 4, 3, 2, 2, + 1, 1, 0, 0, 6, 0, 0, 5, 1, 2, + 0, 0, 0, 8, 1, 1, 3, 3, 2, 2, + 2, 2, 2, 1, 2, 0, 1, 0, 1, 1, + 0, 1, 1, 3, 4, 1, 3, 0, 1, 1, + 1, 2, 2, 2, 1, 1, 2, 2, 2, 2, + 0, 3, 1, 1, 1, 2, 2, 2, 4, 2, + 2, 2, 2, 2, 2, 1, 2, 1, 2, 1, + 1, 0, 0, 1, 0, 4, 2, 1, 1, 3, + 0, 3, 3, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 2, 2, 2, 3, 2, 2, 4, 4, - 3, 2 + 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, + 2, 2, 2, 3, 2, 2, 4, 4, 3, 2 }; static const short yydefact[] = { 3, - 13, 13, 5, 0, 4, 0, 244, 575, 576, 334, - 346, 526, 0, 11, 12, 0, 0, 0, 10, 435, - 767, 0, 0, 0, 0, 589, 245, 246, 62, 0, - 0, 754, 0, 37, 0, 0, 14, 0, 8, 0, - 17, 16, 68, 89, 65, 0, 577, 143, 255, 556, - 0, 321, 0, 320, 339, 0, 359, 338, 377, 345, - 0, 448, 447, 454, 453, 452, 430, 333, 347, 542, - 87, 254, 567, 540, 0, 578, 524, 0, 0, 243, - 60, 61, 580, 0, 581, 0, 0, 120, 121, 122, - 123, 124, 420, 423, 0, 585, 0, 424, 0, 0, - 0, 0, 121, 122, 123, 124, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 334, 39, - 134, 0, 0, 339, 133, 0, 582, 0, 554, 0, - 0, 0, 553, 0, 0, 0, 0, 255, 0, 528, - 0, 254, 524, 29, 0, 27, 3, 38, 0, 53, - 52, 69, 15, 0, 0, 393, 66, 58, 583, 528, - 0, 524, 59, 0, 0, 0, 85, 0, 355, 311, - 539, 312, 550, 0, 524, 336, 335, 57, 88, 322, - 0, 357, 337, 86, 328, 352, 353, 323, 341, 343, - 332, 354, 0, 54, 378, 436, 437, 438, 439, 451, - 129, 128, 130, 440, 441, 445, 0, 0, 454, 754, - 450, 470, 471, 527, 340, 0, 0, 375, 576, 587, - 143, 569, 544, 579, 0, 543, 541, 0, 802, 798, - 797, 795, 777, 782, 783, 0, 789, 788, 774, 775, - 773, 792, 781, 778, 779, 780, 784, 785, 771, 772, - 768, 769, 770, 794, 786, 787, 776, 793, 0, 790, - 697, 339, 698, 763, 526, 258, 300, 0, 0, 0, - 0, 296, 294, 271, 298, 299, 0, 0, 0, 0, - 0, 240, 0, 0, 146, 147, 153, 152, 0, 154, - 155, 0, 0, 156, 0, 142, 0, 148, 0, 214, - 0, 217, 151, 257, 182, 0, 0, 259, 260, 0, - 150, 318, 339, 319, 570, 282, 273, 0, 0, 145, - 0, 138, 0, 339, 137, 422, 0, 417, 586, 584, - 0, 157, 158, 0, 0, 0, 382, 3, 22, 0, - 425, 0, 248, 249, 0, 247, 33, 34, 0, 568, - 32, 31, 41, 0, 132, 131, 140, 0, 552, 0, - 551, 242, 252, 0, 560, 251, 0, 559, 0, 256, - 564, 0, 0, 13, 0, 0, 9, 9, 102, 72, - 107, 685, 0, 64, 63, 71, 105, 0, 0, 103, - 67, 566, 0, 0, 532, 0, 757, 0, 537, 0, - 536, 0, 0, 0, 0, 524, 375, 0, 56, 528, - 524, 549, 0, 325, 326, 0, 55, 375, 330, 329, - 331, 324, 344, 361, 360, 442, 446, 444, 0, 449, - 455, 0, 0, 342, 0, 374, 376, 524, 73, 524, - 79, 525, 555, 576, 588, 143, 0, 0, 791, 796, - 341, 524, 524, 0, 524, 801, 0, 0, 0, 189, - 0, 0, 191, 204, 205, 0, 0, 0, 0, 0, - 241, 188, 185, 184, 186, 0, 0, 0, 0, 0, - 257, 0, 0, 0, 183, 0, 141, 187, 0, 0, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 13, 13, 5, 0, 4, 0, 245, 592, 593, 0, + 348, 360, 539, 0, 11, 12, 0, 0, 0, 10, + 449, 795, 0, 0, 0, 0, 617, 246, 247, 62, + 0, 0, 782, 0, 37, 0, 0, 14, 0, 8, + 0, 17, 16, 68, 89, 65, 0, 594, 143, 265, + 243, 266, 570, 0, 335, 0, 334, 353, 0, 373, + 352, 391, 359, 0, 462, 461, 468, 467, 466, 444, + 347, 555, 361, 556, 87, 264, 581, 553, 0, 595, + 537, 0, 0, 244, 60, 61, 0, 597, 0, 598, + 0, 0, 0, 120, 121, 122, 123, 124, 434, 437, + 0, 613, 0, 438, 0, 0, 0, 0, 121, 122, + 123, 124, 24, 0, 0, 0, 0, 0, 0, 0, + 439, 601, 0, 604, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 348, 39, 134, 0, 0, 353, 133, + 0, 599, 0, 0, 568, 0, 0, 0, 567, 0, + 0, 0, 0, 265, 0, 541, 0, 264, 537, 29, + 0, 27, 3, 38, 0, 53, 52, 69, 15, 0, + 0, 407, 66, 58, 600, 541, 0, 537, 59, 0, + 0, 0, 85, 0, 369, 325, 552, 326, 564, 0, + 537, 350, 349, 57, 88, 336, 0, 371, 351, 86, + 342, 366, 367, 337, 355, 357, 346, 368, 0, 54, + 392, 450, 451, 452, 453, 465, 129, 128, 130, 454, + 455, 459, 0, 0, 468, 782, 464, 483, 440, 540, + 354, 0, 0, 389, 593, 0, 615, 143, 585, 586, + 582, 558, 596, 0, 557, 554, 0, 830, 826, 825, + 823, 805, 810, 811, 0, 817, 816, 802, 803, 801, + 820, 809, 806, 807, 808, 812, 813, 799, 800, 796, + 797, 798, 822, 814, 815, 804, 821, 0, 818, 725, + 353, 726, 791, 0, 245, 539, 269, 314, 0, 0, + 0, 0, 310, 308, 282, 312, 313, 0, 0, 0, + 0, 0, 247, 240, 0, 0, 153, 152, 0, 154, + 155, 0, 0, 156, 0, 0, 148, 0, 214, 0, + 217, 151, 268, 182, 0, 0, 270, 271, 0, 150, + 332, 353, 333, 587, 293, 284, 0, 0, 146, 147, + 142, 0, 145, 0, 249, 0, 138, 0, 353, 137, + 436, 0, 431, 614, 612, 0, 157, 158, 0, 0, + 0, 396, 3, 22, 0, 610, 606, 607, 609, 611, + 608, 120, 121, 122, 123, 124, 603, 605, 602, 256, + 257, 0, 255, 33, 34, 0, 584, 583, 32, 31, + 41, 0, 132, 131, 140, 0, 0, 566, 0, 565, + 242, 260, 0, 574, 259, 0, 573, 0, 267, 578, + 0, 0, 13, 0, 0, 9, 9, 102, 72, 107, + 713, 0, 64, 63, 71, 105, 0, 0, 103, 67, + 580, 0, 0, 545, 0, 785, 0, 550, 0, 549, + 0, 0, 0, 0, 537, 389, 0, 56, 541, 537, + 563, 0, 339, 340, 0, 55, 389, 344, 343, 345, + 338, 358, 375, 374, 456, 460, 458, 0, 463, 469, + 484, 356, 0, 388, 390, 537, 73, 0, 0, 0, + 537, 79, 538, 569, 593, 616, 143, 0, 0, 819, + 824, 355, 537, 537, 0, 537, 829, 251, 0, 0, + 0, 0, 189, 0, 0, 191, 204, 205, 0, 0, + 0, 0, 0, 241, 188, 185, 184, 186, 0, 0, + 0, 0, 0, 268, 0, 0, 0, 183, 0, 262, + 187, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 269, 270, 304, 303, 0, 0, - 0, 0, 0, 193, 522, 0, 201, 301, 293, 0, - 754, 285, 286, 0, 0, 313, 606, 602, 611, 0, - 528, 524, 524, 524, 315, 609, 0, 574, 317, 0, - 0, 316, 284, 0, 280, 295, 297, 571, 0, 281, - 144, 136, 135, 519, 433, 517, 419, 0, 348, 0, - 0, 349, 350, 351, 388, 389, 390, 387, 0, 380, - 383, 0, 3, 0, 426, 28, 36, 35, 46, 0, - 48, 42, 753, 748, 0, 318, 339, 44, 319, 752, - 50, 139, 558, 557, 256, 561, 0, 19, 21, 68, - 108, 302, 0, 635, 70, 633, 399, 0, 395, 394, - 181, 0, 180, 529, 565, 0, 727, 728, 0, 722, - 339, 0, 721, 723, 755, 737, 0, 0, 563, 535, - 534, 0, 0, 548, 0, 365, 356, 547, 0, 757, - 538, 327, 358, 371, 375, 443, 754, 0, 754, 0, - 456, 457, 459, 754, 461, 491, 576, 0, 0, 484, - 0, 0, 494, 0, 100, 95, 0, 143, 496, 499, - 0, 476, 0, 98, 0, 375, 0, 372, 757, 720, - 757, 720, 524, 76, 524, 82, 800, 799, 763, 763, - 763, 0, 0, 0, 574, 0, 0, 0, 0, 339, - 0, 0, 0, 263, 0, 261, 262, 0, 212, 149, - 244, 575, 576, 245, 246, 0, 0, 400, 431, 0, - 239, 238, 712, 711, 0, 236, 235, 233, 234, 232, - 231, 230, 227, 228, 229, 225, 226, 220, 221, 222, - 223, 224, 218, 219, 0, 0, 0, 0, 0, 0, - 195, 209, 0, 0, 194, 524, 524, 0, 524, 521, - 596, 0, 0, 0, 0, 288, 0, 290, 0, 605, - 604, 601, 600, 753, 0, 0, 620, 0, 0, 757, - 314, 757, 607, 524, 720, 528, 606, 602, 0, 0, - 524, 0, 0, 0, 0, 0, 0, 434, 0, 433, - 179, 178, 177, 176, 382, 0, 0, 25, 0, 26, - 47, 0, 40, 0, 606, 602, 0, 744, 524, 747, - 749, 745, 746, 440, 0, 18, 20, 125, 113, 126, - 127, 0, 106, 109, 0, 0, 0, 0, 634, 626, - 396, 0, 104, 533, 530, 726, 743, 732, 730, 0, - 531, 725, 742, 731, 729, 724, 756, 739, 750, 740, - 733, 738, 759, 0, 363, 546, 545, 369, 368, 467, - 0, 466, 0, 0, 754, 754, 754, 0, 524, 720, - 490, 485, 101, 495, 375, 375, 482, 483, 480, 481, - 524, 720, 244, 575, 0, 361, 96, 486, 497, 502, - 503, 361, 361, 0, 0, 361, 94, 487, 500, 361, - 477, 478, 479, 375, 0, 427, 362, 0, 75, 0, - 81, 0, 757, 720, 757, 720, 765, 764, 766, 272, - 190, 192, 278, 279, 0, 0, 0, 0, 262, 265, - 0, 0, 0, 0, 213, 0, 266, 268, 207, 206, - 197, 0, 196, 211, 0, 0, 593, 591, 0, 594, - 528, 202, 0, 0, 291, 0, 0, 603, 599, 610, - 524, 619, 617, 618, 608, 757, 0, 615, 0, 572, - 573, 0, 283, 520, 518, 421, 0, 381, 379, 244, - 0, 23, 43, 49, 605, 601, 606, 602, 0, 540, - 0, 524, 607, 51, 0, 111, 0, 115, 0, 117, - 0, 119, 0, 686, 628, 0, 397, 606, 602, 0, - 257, 0, 570, 751, 0, 0, 760, 761, 0, 0, - 0, 366, 0, 0, 462, 0, 0, 469, 468, 460, - 757, 0, 393, 393, 757, 0, 0, 0, 375, 375, - 0, 375, 375, 0, 375, 0, 393, 0, 414, 373, - 524, 524, 78, 0, 84, 0, 0, 0, 0, 0, - 0, 404, 0, 0, 401, 216, 237, 0, 198, 199, - 208, 210, 592, 590, 597, 595, 0, 203, 0, 287, - 289, 757, 613, 524, 614, 418, 0, 384, 386, 605, - 601, 544, 607, 112, 110, 0, 0, 0, 0, 0, - 169, 627, 0, 629, 630, 398, 0, 573, 741, 735, - 736, 734, 0, 758, 364, 370, 0, 464, 465, 463, - 458, 91, 524, 489, 493, 93, 524, 375, 375, 511, - 393, 244, 575, 0, 498, 504, 505, 361, 361, 393, - 393, 0, 393, 501, 488, 0, 757, 757, 524, 524, - 0, 0, 0, 0, 402, 0, 0, 0, 200, 598, - 292, 616, 757, 0, 114, 116, 118, 693, 687, 691, - 391, 0, 636, 0, 244, 575, 576, 637, 651, 654, - 657, 626, 0, 0, 0, 0, 0, 0, 245, 683, - 688, 0, 708, 0, 645, 0, 0, 339, 0, 622, - 643, 650, 621, 644, 684, 0, 631, 262, 762, 367, - 757, 757, 510, 507, 509, 0, 0, 375, 375, 375, - 506, 508, 492, 416, 0, 415, 410, 74, 80, 757, - 757, 274, 275, 276, 277, 0, 405, 523, 612, 385, - 626, 692, 0, 632, 625, 172, 701, 703, 704, 626, - 626, 626, 0, 0, 0, 669, 671, 672, 673, 0, - 0, 0, 702, 0, 310, 709, 0, 646, 308, 361, - 0, 309, 0, 361, 0, 0, 0, 170, 624, 623, - 647, 682, 681, 90, 92, 375, 375, 516, 393, 393, - 0, 0, 429, 77, 83, 403, 0, 392, 0, 0, - 641, 640, 0, 0, 0, 0, 665, 0, 674, 0, - 680, 689, 0, 306, 307, 0, 0, 0, 305, 171, - 626, 515, 513, 512, 514, 413, 412, 406, 65, 68, - 0, 694, 161, 0, 638, 652, 0, 655, 628, 706, - 658, 0, 168, 0, 339, 0, 0, 0, 670, 679, - 0, 0, 648, 0, 411, 0, 0, 0, 0, 626, - 0, 627, 0, 707, 626, 705, 662, 361, 667, 666, - 690, 713, 0, 627, 409, 0, 408, 699, 700, 695, - 162, 639, 173, 627, 175, 642, 159, 0, 0, 0, - 626, 375, 0, 0, 0, 714, 715, 675, 649, 407, - 627, 628, 653, 0, 656, 165, 0, 164, 663, 0, - 668, 0, 713, 0, 0, 696, 174, 160, 659, 627, - 166, 0, 0, 676, 716, 0, 664, 0, 717, 0, - 0, 0, 167, 718, 0, 677, 660, 0, 0, 0, - 719, 678, 627, 661, 0, 0, 0 + 0, 0, 0, 0, 0, 0, 278, 280, 281, 318, + 317, 0, 0, 0, 0, 0, 193, 535, 0, 201, + 315, 307, 0, 782, 296, 299, 300, 0, 0, 327, + 634, 630, 639, 0, 541, 537, 537, 537, 329, 637, + 0, 591, 331, 0, 0, 330, 295, 0, 291, 309, + 311, 588, 0, 292, 141, 144, 248, 136, 135, 532, + 447, 530, 433, 0, 362, 0, 0, 363, 364, 365, + 402, 403, 404, 401, 0, 394, 397, 0, 3, 0, + 28, 36, 35, 46, 0, 48, 42, 781, 776, 0, + 332, 353, 44, 333, 780, 50, 139, 263, 572, 571, + 267, 575, 0, 19, 21, 68, 108, 316, 0, 663, + 70, 661, 413, 0, 409, 408, 181, 0, 180, 542, + 579, 0, 755, 756, 0, 750, 353, 0, 749, 751, + 783, 765, 0, 0, 577, 548, 547, 0, 0, 562, + 0, 379, 370, 561, 0, 785, 551, 341, 372, 385, + 389, 457, 592, 593, 782, 0, 782, 594, 470, 471, + 473, 782, 476, 475, 0, 0, 0, 0, 386, 785, + 748, 0, 0, 0, 785, 748, 537, 76, 537, 82, + 828, 827, 791, 791, 791, 250, 0, 0, 0, 591, + 0, 0, 0, 0, 353, 0, 0, 0, 274, 0, + 272, 273, 0, 212, 149, 245, 592, 593, 246, 247, + 0, 0, 414, 445, 0, 239, 238, 740, 739, 0, + 236, 235, 233, 234, 232, 231, 230, 227, 228, 229, + 225, 226, 220, 221, 222, 223, 224, 218, 219, 0, + 0, 0, 0, 0, 0, 195, 209, 0, 0, 194, + 537, 537, 0, 537, 534, 624, 0, 0, 0, 0, + 298, 0, 302, 0, 304, 0, 633, 632, 629, 628, + 781, 0, 0, 648, 0, 0, 785, 328, 785, 635, + 537, 748, 541, 634, 630, 0, 0, 537, 0, 0, + 0, 0, 0, 0, 448, 0, 447, 179, 178, 177, + 176, 396, 0, 0, 25, 0, 26, 47, 0, 40, + 0, 634, 630, 0, 772, 537, 775, 777, 0, 773, + 774, 454, 0, 18, 20, 125, 113, 126, 127, 0, + 106, 109, 0, 0, 0, 0, 662, 654, 410, 0, + 104, 546, 543, 754, 771, 760, 758, 0, 544, 753, + 770, 759, 757, 752, 784, 767, 778, 768, 761, 766, + 787, 0, 377, 560, 559, 383, 382, 480, 0, 479, + 782, 782, 782, 0, 504, 593, 0, 0, 497, 0, + 0, 507, 0, 100, 95, 0, 143, 509, 512, 0, + 489, 0, 98, 0, 389, 376, 0, 75, 0, 0, + 0, 0, 81, 0, 785, 748, 785, 748, 793, 792, + 794, 283, 190, 192, 289, 290, 0, 0, 0, 0, + 273, 276, 0, 0, 0, 0, 213, 0, 277, 279, + 207, 206, 197, 0, 196, 211, 0, 0, 621, 619, + 0, 622, 541, 202, 0, 0, 305, 0, 0, 0, + 631, 627, 638, 537, 647, 645, 646, 636, 785, 0, + 643, 0, 589, 590, 0, 294, 533, 531, 435, 0, + 395, 393, 245, 0, 23, 43, 49, 633, 629, 634, + 630, 0, 553, 0, 537, 635, 51, 0, 111, 0, + 115, 0, 117, 0, 119, 0, 714, 656, 0, 411, + 634, 630, 0, 268, 0, 587, 779, 0, 0, 788, + 789, 0, 0, 0, 380, 0, 0, 0, 482, 481, + 474, 537, 748, 503, 498, 101, 508, 389, 389, 495, + 496, 493, 494, 537, 748, 245, 592, 0, 375, 96, + 499, 510, 515, 516, 375, 375, 0, 0, 375, 94, + 500, 513, 375, 490, 491, 492, 389, 0, 441, 387, + 537, 253, 252, 254, 537, 78, 0, 84, 0, 0, + 0, 0, 0, 0, 418, 0, 0, 415, 216, 237, + 0, 198, 199, 208, 210, 620, 618, 625, 623, 0, + 203, 0, 297, 301, 303, 785, 641, 537, 642, 432, + 0, 398, 400, 633, 629, 558, 635, 112, 110, 0, + 0, 0, 0, 0, 169, 655, 0, 657, 658, 412, + 0, 590, 769, 763, 764, 762, 0, 786, 378, 384, + 0, 477, 478, 472, 785, 0, 407, 407, 785, 0, + 0, 0, 389, 389, 0, 389, 389, 0, 389, 0, + 407, 0, 428, 785, 785, 537, 537, 0, 0, 0, + 0, 416, 0, 0, 0, 200, 626, 306, 644, 785, + 0, 114, 116, 118, 721, 715, 719, 405, 0, 664, + 0, 245, 592, 593, 665, 679, 682, 685, 654, 0, + 0, 0, 0, 0, 0, 246, 711, 716, 0, 736, + 0, 673, 0, 0, 353, 0, 650, 671, 678, 649, + 672, 712, 0, 659, 273, 790, 381, 91, 537, 502, + 506, 93, 537, 389, 389, 524, 407, 245, 592, 0, + 511, 517, 518, 375, 375, 407, 407, 0, 407, 514, + 501, 0, 74, 80, 785, 785, 285, 286, 287, 288, + 0, 419, 536, 640, 399, 654, 720, 0, 660, 653, + 172, 729, 731, 732, 654, 654, 654, 0, 0, 0, + 697, 699, 700, 701, 0, 0, 0, 730, 0, 324, + 737, 0, 674, 322, 375, 0, 323, 0, 375, 0, + 0, 0, 170, 652, 651, 675, 710, 709, 785, 785, + 523, 520, 522, 0, 0, 389, 389, 389, 519, 521, + 505, 430, 0, 429, 424, 77, 83, 417, 0, 406, + 0, 0, 669, 668, 0, 0, 0, 0, 693, 0, + 702, 0, 708, 717, 0, 320, 321, 0, 0, 0, + 319, 171, 654, 90, 92, 389, 389, 529, 407, 407, + 0, 0, 443, 0, 722, 161, 0, 666, 680, 0, + 683, 656, 734, 686, 0, 168, 0, 353, 0, 0, + 0, 698, 707, 0, 0, 676, 528, 526, 525, 527, + 427, 426, 420, 65, 68, 0, 0, 0, 0, 654, + 0, 655, 0, 735, 654, 733, 690, 375, 695, 694, + 718, 741, 0, 655, 0, 425, 727, 728, 723, 162, + 667, 173, 655, 175, 670, 159, 0, 0, 0, 654, + 389, 0, 0, 0, 742, 743, 703, 677, 423, 0, + 422, 655, 656, 681, 0, 684, 165, 0, 164, 691, + 0, 696, 0, 741, 0, 0, 421, 724, 174, 160, + 687, 655, 166, 0, 0, 704, 744, 0, 692, 0, + 745, 0, 0, 0, 167, 746, 0, 705, 688, 0, + 0, 0, 747, 706, 655, 689, 0, 0, 0 }; -static const short yydefgoto[] = { 1465, - 374, 2, 375, 149, 609, 295, 217, 3, 4, 37, - 583, 338, 673, 345, 39, 674, 354, 590, 591, 592, - 41, 42, 383, 155, 153, 43, 675, 690, 934, 692, - 936, 45, 676, 677, 156, 157, 384, 611, 843, 844, - 564, 845, 205, 46, 47, 48, 296, 297, 298, 299, - 1214, 1409, 1355, 1427, 1364, 1448, 1122, 1404, 1422, 332, - 800, 300, 523, 765, 301, 302, 333, 304, 347, 363, - 50, 305, 483, 306, 307, 308, 309, 385, 310, 1215, - 424, 543, 630, 1216, 52, 188, 595, 54, 189, 461, - 190, 168, 181, 56, 407, 169, 1040, 425, 1137, 182, - 1041, 57, 928, 436, 58, 59, 579, 580, 581, 1192, - 390, 728, 729, 1349, 1350, 1313, 1246, 1166, 60, 568, - 327, 1069, 1247, 954, 809, 61, 62, 63, 64, 209, - 65, 66, 67, 211, 661, 662, 663, 664, 213, 432, - 433, 681, 682, 683, 908, 918, 909, 1155, 910, 911, - 1156, 1157, 565, 566, 524, 790, 68, 393, 394, 162, - 170, 69, 70, 171, 172, 141, 72, 116, 315, 316, - 317, 74, 318, 76, 98, 77, 319, 770, 771, 785, - 546, 1219, 1220, 1321, 1193, 1123, 1124, 1125, 615, 1221, - 850, 1222, 1270, 1380, 1323, 1357, 1223, 1224, 1341, 1394, - 1271, 1381, 1272, 1383, 1273, 1385, 1446, 1460, 1411, 1440, - 1368, 1413, 1328, 386, 612, 1119, 1225, 1284, 1371, 1189, - 1190, 1261, 1378, 1421, 1366, 1352, 1226, 1361, 1287, 735, - 1415, 1416, 1417, 1455, 632, 633, 872, 1036, 1132, 634, - 635, 636, 868, 637, 134, 870, 639, 1038, 1039, 456, - 79, 80 +static const short yydefgoto[] = { 1527, + 413, 2, 414, 165, 655, 315, 233, 3, 4, 38, + 629, 363, 932, 382, 40, 933, 392, 635, 636, 637, + 42, 43, 422, 171, 169, 44, 934, 721, 956, 726, + 958, 46, 935, 936, 172, 173, 423, 657, 881, 882, + 610, 883, 221, 47, 48, 49, 341, 316, 317, 318, + 1251, 1468, 1408, 1488, 1417, 1510, 1166, 1463, 1483, 357, + 837, 319, 566, 800, 320, 321, 358, 323, 51, 240, + 384, 402, 52, 53, 324, 526, 325, 326, 327, 328, + 424, 329, 1252, 463, 587, 330, 1253, 55, 204, 640, + 331, 205, 504, 206, 184, 197, 59, 446, 185, 1063, + 464, 1181, 198, 1064, 60, 947, 474, 61, 62, 625, + 626, 627, 1229, 429, 763, 764, 1434, 1435, 1403, 1364, + 1292, 63, 614, 352, 471, 1203, 1365, 976, 846, 64, + 65, 66, 67, 225, 68, 69, 70, 227, 709, 710, + 711, 712, 229, 716, 717, 940, 941, 942, 1091, 1101, + 1092, 1281, 1093, 1094, 1282, 1283, 611, 612, 567, 827, + 333, 432, 433, 178, 186, 72, 73, 74, 187, 188, + 157, 76, 131, 334, 335, 336, 78, 337, 80, 714, + 122, 123, 124, 104, 81, 338, 805, 806, 822, 590, + 1256, 1257, 1373, 1230, 1167, 1168, 1169, 661, 1258, 888, + 1259, 1315, 1440, 1375, 1410, 1260, 1261, 1393, 1454, 1316, + 1441, 1317, 1443, 1318, 1445, 1508, 1522, 1470, 1502, 1421, + 1472, 1380, 425, 658, 1163, 1262, 1329, 1424, 1226, 1227, + 1306, 1438, 1482, 1419, 1405, 1263, 1414, 1332, 770, 1474, + 1475, 1476, 1517, 678, 679, 910, 1059, 1176, 680, 681, + 682, 906, 683, 150, 908, 685, 1061, 1062, 497, 83, + 84 }; -static const short yypact[] = { 50, - 87,-32768,-32768, 9952,-32768, 49,-32768, 253, 292, 99, --32768,-32768, 597,-32768,-32768, 11, 33, 36,-32768,-32768, --32768, 951, 1750, 1374, 10142,-32768, 115, 138,-32768, 1341, - 1341,-32768, 3786,-32768, 9952, 124,-32768, 136, 283, 10022, --32768,-32768, 131,-32768, 277, 268, 265,-32768,-32768, 309, - 1471,-32768, 10161,-32768, 2041, 471,-32768, 282,-32768,-32768, - 945,-32768,-32768, 269,-32768,-32768, 306, 2571,-32768,-32768, - 1140,-32768,-32768,-32768, 564,-32768,-32768, 447, 6872,-32768, --32768,-32768,-32768, 8473,-32768, 8473, 10381,-32768, 253, 292, - 115, 138, 305, 320, 265,-32768, 447,-32768, 447, 8922, - 8922, 304,-32768,-32768,-32768,-32768,-32768, 210, 253, 292, - 115, 138, 822, 1028, 644,-32768, 1105, 1105,-32768, 342, --32768, 4035, 4233, 1647,-32768, 8473,-32768, 1607,-32768, 835, - 1028, 1607,-32768, 1305, 1791, 1791, 3786, 332, 334, 403, - 391, 433,-32768,-32768, 556,-32768, 483,-32768, 10083, 49, --32768,-32768,-32768, 578, 44, 374, 547,-32768,-32768, 503, - 287,-32768,-32768, 1906, 1906, 4070, 1140, 630,-32768,-32768, - 412,-32768,-32768, 974,-32768,-32768,-32768,-32768,-32768, 2041, - 659,-32768, 282, 1140,-32768,-32768,-32768, 2132, 2041,-32768, - 282,-32768, 4035,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 265, 822, 822, 269,-32768, --32768,-32768,-32768,-32768, 1261, 447, 525, 282, 442,-32768, - 445,-32768,-32768,-32768, 2275,-32768,-32768, 168,-32768, 530, - 534,-32768,-32768,-32768,-32768, 575,-32768,-32768,-32768,-32768, +static const short yypact[] = { 114, + 129,-32768,-32768, 10013,-32768, 40, 57, 45, 73, 68, + 155,-32768,-32768, 1229,-32768,-32768, 202, 239, 260,-32768, +-32768,-32768, 1097, 1036, 915, 10243,-32768, 264, 168,-32768, + 2214, 2214,-32768, 2014,-32768, 10013, 323,-32768, 317, 182, + 10072,-32768,-32768, 311,-32768, 398, 366, 389,-32768,-32768, +-32768,-32768, 246, 3367,-32768, 4571,-32768, 975, 284,-32768, + 414,-32768,-32768, 1604,-32768,-32768, 415,-32768,-32768, 438, + 10673,-32768,-32768,-32768, 1694,-32768,-32768,-32768, 2132,-32768, +-32768, 609, 7413, 377,-32768,-32768, 8981,-32768, 8529,-32768, + 8529, 8529, 10450,-32768, 45, 73, 264, 447, 408, 467, + 389,-32768, 609,-32768, 609, 8981, 8981, 450,-32768,-32768, +-32768,-32768,-32768, 207, 528, 419, 503, 556, 537, 578, +-32768,-32768, 814,-32768, 1121, 45, 73, 508, 264, 447, +-32768, 1164, 1000,-32768, 495,-32768, 5263, 5847, 1894,-32768, + 8529,-32768, 8981, 4134,-32768, 2240, 649, 4134,-32768, 1259, + 4258, 4258, 2014, 531, 552, 570, 559, 562,-32768,-32768, + 670,-32768, 573,-32768, 5005, 40,-32768,-32768,-32768, 694, + 130, 370, 642,-32768,-32768, 610, 212,-32768,-32768, 4314, + 4314, 5429, 1694, 399,-32768,-32768, 256,-32768,-32768, 2528, +-32768,-32768,-32768,-32768,-32768, 975, 492,-32768, 414, 1694, +-32768,-32768,-32768, 1501, 975,-32768, 414,-32768, 5263,-32768, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 389, 1289, 1289, 415,-32768,-32768,-32768,-32768,-32768, + 767, 609, 627, 414, 441, 1133,-32768, 338,-32768,-32768, +-32768,-32768,-32768, 4666,-32768,-32768, 231,-32768, 632, 645, +-32768,-32768,-32768,-32768, 674,-32768,-32768,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 528,-32768, --32768, 1261, 2571, 1100, 553,-32768,-32768, 9536, 9623, 9710, - 9710,-32768,-32768,-32768,-32768,-32768, 557, 584, 587, 591, - 595, 9009, 1305, 9710,-32768,-32768,-32768,-32768, 9710,-32768, --32768, 9710, 6964,-32768, 9710,-32768, 348,-32768, 9710,-32768, - 9096,-32768, 4842,-32768, 1803, 2784, 9183,-32768, 665, 317, --32768, 2005, 3364, 3137,-32768, 470,-32768, 1298, 2126,-32768, - 348,-32768, 4035, 1707,-32768,-32768, 1305, 585,-32768,-32768, - 590, 649, 10467, 594, 602, 612, 1542, 483,-32768, 644, --32768, 822, 253, 292, 670,-32768,-32768,-32768, 1105,-32768, --32768,-32768,-32768, 4353,-32768,-32768,-32768, 348,-32768, 237, --32768,-32768,-32768, 1607,-32768,-32768, 1607,-32768, 624,-32768, --32768, 2275, 68, 637, 641, 10381,-32768,-32768,-32768,-32768, --32768,-32768, 123,-32768,-32768,-32768,-32768, 7055, 9009,-32768, --32768,-32768, 9009, 643,-32768, 3923, 81, 2864,-32768, 2864, --32768, 2945, 2945, 4070, 661,-32768, 282, 4035,-32768, 646, --32768,-32768, 3239, 2132, 2041, 4035,-32768, 282,-32768,-32768, - 282, 2132,-32768, 559,-32768,-32768, 265,-32768, 822,-32768, - 1433, 2706, 78, 1261, 556, 697, 282,-32768,-32768,-32768, --32768,-32768,-32768, 666,-32768, 478, 674, 701,-32768,-32768, - 1261,-32768,-32768, 622,-32768,-32768, 9009, 553, 6964,-32768, - 479, 6964,-32768,-32768,-32768, 8922, 3603, 3603, 3603, 3603, - 10535,-32768,-32768,-32768,-32768, 685, 9797, 9797, 6964, 719, - 332, 724, 761, 728,-32768, 8922,-32768,-32768, 6717, 6964, --32768, 9009, 9009, 7146, 9009, 9009, 9009, 9009, 9009, 9009, - 9009, 9009, 9009, 9009, 9009, 9009, 9009, 9009, 9009, 9009, - 9009, 9009, 9009,-32768,-32768,-32768,-32768,-32768, 9009, 9009, - 9009, 8922, 1720, 444, 658, 7779,-32768,-32768,-32768, 789, - 838, 501, 504, 1586, 1028,-32768, 2339, 2339,-32768, 2211, - 737, 759, 808,-32768,-32768, 430, 8283, 352,-32768, 712, - 447,-32768,-32768, 9009,-32768,-32768,-32768,-32768, 474,-32768, --32768,-32768,-32768, 795, 809,-32768,-32768, 1305,-32768, 7510, - 7601,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 128,-32768, - 776, 762, 483, 813,-32768,-32768,-32768,-32768, 1284, 521, - 819,-32768,-32768, 794, 10436, 794, 2852, 945, 1784,-32768, - 825,-32768,-32768,-32768, 781,-32768, 833,-32768,-32768, 131, - 129, 841, 761,-32768,-32768,-32768,-32768, 6439, 10535,-32768, - 649, 797, 10467,-32768,-32768, 798,-32768,-32768, 802, 143, - 4802, 804,-32768, 135, 10239, 850, 852, 505,-32768,-32768, --32768, 2864, 2864,-32768, 3239, 855,-32768,-32768, 810, 81, --32768, 2132,-32768, 856, 282,-32768,-32768, 836,-32768, 1750, - 859,-32768,-32768, 194,-32768,-32768, 710, 1750, 857,-32768, - 9009, 4680,-32768, 5603, 750, 750, 275, 511, 2117, 10258, - 3693,-32768, 133, 750, 864, 282, 75,-32768, 81, 718, - 81, 718,-32768,-32768,-32768,-32768,-32768,-32768, 1225, 1225, - 1225, 858, 863, 9275, 808, 866, 871, 873, 853, 4275, - 869, 872, 898,-32768, 874,-32768,-32768, 882,-32768,-32768, - 930, 368, 726, 43, 346, 9009, 931,-32768, 935, 886, - 10535, 10535,-32768,-32768, 944, 10553, 4506, 5799, 3834, 1861, - 3609, 4108, 1491, 1491, 1491, 881, 881, 854, 854, 682, - 682, 682,-32768,-32768, 901, 900, 907, 910, 911, 3603, - 444,-32768, 7055, 9009,-32768,-32768,-32768, 9009,-32768,-32768, - 929, 9710, 916, 947, 993,-32768, 9009,-32768, 9009, 2454, --32768, 2454,-32768, 109, 936, 938,-32768, 940, 3603, 81, --32768, 81, 2475,-32768, 718, 946, 8560, 8560, 6158, 939, - 9096, 948, 974, 2126, 941, 954, 9009, 1305, 950, 809, --32768, 10535,-32768, 10535, 1542, 956, 9362,-32768, 958,-32768, --32768, 4353,-32768, 3603, 1450, 1450, 5033,-32768,-32768,-32768, --32768,-32768,-32768, 495, 9009,-32768,-32768,-32768,-32768, 115, - 138, 9009, 1007,-32768, 515, 526, 536, 761,-32768,-32768, --32768, 41,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 8378, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 852, 1011, --32768,-32768,-32768, 3603,-32768,-32768,-32768,-32768, 1012,-32768, - 8922,-32768, 822, 1028,-32768,-32768,-32768, 1387,-32768, 718, - 10535,-32768,-32768,-32768, 282, 282,-32768,-32768,-32768,-32768, --32768, 718, 1015, 742, 9009, 559,-32768, 1020,-32768,-32768, --32768, 362, 683, 564, 1028, 1029, 750, 1022,-32768, 1236, --32768,-32768,-32768, 282, 5193,-32768,-32768, 7055,-32768, 977, --32768, 979, 81, 718, 81, 718,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 990, 996, 997, 999, 781,-32768, - 5783, 7055, 6533, 983,-32768, 9009,-32768,-32768,-32768,-32768, - 354, 988,-32768,-32768, 989, 301, 339, 339, 991, 339, --32768,-32768, 9710, 1094,-32768, 1008, 1026,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 81, 1027,-32768, 1009,-32768, --32768, 981,-32768, 10535,-32768,-32768, 992,-32768,-32768, 142, - 1034,-32768,-32768,-32768, 1923, 1923, 2588, 2588, 5033,-32768, - 974,-32768, 2923, 4842, 1039,-32768, 129,-32768, 9009,-32768, - 9009,-32768, 9009,-32768, 30, 6626,-32768, 8652, 8652, 6253, - 236, 1041, 245,-32768, 7055, 6811,-32768,-32768, 149, 7055, - 7055,-32768, 1046, 1055,-32768, 822, 1433,-32768,-32768,-32768, - 81, 1059, 1056, 1056, 81, 1060, 9009, 9009, 3396, 282, - 3489, 282, 282, 1038, 282, 3764, 1056, 5467,-32768,-32768, --32768,-32768,-32768, 1067,-32768, 1072, 9009, 9009, 9009, 9009, - 7055,-32768, 9009, 1101,-32768,-32768, 10535, 9009,-32768, 354, --32768,-32768,-32768,-32768,-32768,-32768, 1071,-32768, 1137,-32768, --32768, 81,-32768,-32768,-32768,-32768, 9009,-32768,-32768, 1923, - 1923,-32768, 2923,-32768,-32768, 1076, 1077, 1078, 1095, 1305, --32768,-32768, 6065, 1157,-32768,-32768, 1083, 1085,-32768,-32768, --32768,-32768, 3603,-32768,-32768,-32768, 7055,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 3396, 3396,-32768, - 1056, 1133, 747, 9009,-32768,-32768,-32768, 559, 559, 1056, - 1056, 666, 1056,-32768,-32768, 5733, 81, 81,-32768,-32768, - 1088, 1089, 1096, 1097,-32768, 10490, 7055, 1091,-32768,-32768, --32768,-32768, 81, 1098,-32768,-32768,-32768,-32768, 1095,-32768, --32768, 730,-32768, 159, 1150, 768, 770,-32768,-32768,-32768, --32768,-32768, 9009, 1154, 1160, 1163, 8744, 465, 56,-32768, --32768, 8835, 1209, 1164,-32768, 3059, 10336, 3076, 5905,-32768, --32768, 1212,-32768,-32768,-32768, 7889,-32768, 259,-32768,-32768, - 81, 81,-32768,-32768,-32768, 9009, 9009, 3396, 282, 282, --32768,-32768,-32768,-32768, 7692,-32768,-32768,-32768,-32768, 81, - 81,-32768,-32768,-32768,-32768, 7055,-32768,-32768,-32768,-32768, --32768,-32768, 1305,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 761, 1139, 1143, 4882,-32768,-32768,-32768,-32768, 1179, - 9009, 1199,-32768, 761,-32768,-32768, 1168,-32768,-32768, 559, - 748,-32768, 803, 559, 9449, 806, 226,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768, 3396, 3396,-32768, 1056, 1056, - 1162, 5954, 1167,-32768,-32768,-32768, 1178,-32768, 540, 540, --32768,-32768, 1256, 6348, 8922, 9009,-32768, 7998,-32768, 1213, --32768,-32768, 556,-32768,-32768, 9884, 9884, 7237,-32768,-32768, - 761,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 277, 131, - 2649,-32768,-32768, 8922,-32768,-32768, 8190,-32768, 30,-32768, --32768, 1216,-32768, 1169, 191, 4035, 10513, 7998,-32768,-32768, - 1095, 52,-32768, 120,-32768, 1171, 1175, 761, 1177, 761, - 8094,-32768, 542,-32768,-32768,-32768,-32768, 559,-32768,-32768, - 1095, 1280, 1231,-32768,-32768, 123,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 9009, 1233, 7328, - 761, 282, 7998, 1203, 152, 1241,-32768,-32768,-32768,-32768, --32768, 30,-32768, 1195,-32768,-32768, 1251,-32768,-32768, 1249, --32768, 9009, 1280, 1254, 1280,-32768,-32768,-32768,-32768,-32768, --32768, 1208, 250,-32768,-32768, 7419,-32768, 7055,-32768, 1312, - 1275, 1228,-32768,-32768, 267,-32768,-32768, 1332, 1283, 8094, --32768,-32768,-32768,-32768, 1351, 1358,-32768 +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 620,-32768,-32768, + 767, 10673, 820, 8529,-32768, 668,-32768,-32768, 9596, 9683, + 9770, 9770,-32768,-32768,-32768,-32768,-32768, 679, 704, 708, + 714, 719, 447, 9068, 1259, 9770,-32768,-32768, 9770,-32768, +-32768, 9770, 6885,-32768, 9770, 270,-32768, 9770,-32768, 9155, +-32768, 10546,-32768, 1405, 3136, 9242,-32768, 786, 1307,-32768, + 752, 3651, 3496,-32768, 360,-32768, 1295, 2118,-32768,-32768, +-32768, 270,-32768, 270,-32768, 270,-32768, 5263, 1999,-32768, +-32768, 1259, 697,-32768,-32768, 693, 745, 10765, 705, 716, + 724, 1784, 573,-32768, 508,-32768,-32768,-32768,-32768,-32768, +-32768, 528, 419, 503, 556, 537,-32768,-32768,-32768, 45, + 73, 784,-32768,-32768,-32768, 1000,-32768,-32768,-32768,-32768, +-32768, 10666,-32768,-32768,-32768, 270, 270,-32768, 536,-32768, +-32768,-32768, 4134,-32768,-32768, 4134,-32768, 732,-32768,-32768, + 4666, 36, 741, 748, 10450,-32768,-32768,-32768,-32768,-32768, +-32768, 124,-32768,-32768,-32768,-32768, 6977, 9068,-32768,-32768, +-32768, 9068, 750,-32768, 6213, 103, 4770,-32768, 4770,-32768, + 4797, 4797, 5429, 757,-32768, 414, 5263,-32768, 761,-32768, +-32768, 5108, 1501, 975, 5263,-32768, 414,-32768,-32768, 414, + 1501,-32768, 673,-32768,-32768, 389,-32768, 1289,-32768, 1596, +-32768, 767, 670, 762, 414,-32768,-32768, 801, 807, 809, +-32768,-32768,-32768,-32768, 580,-32768, 374, 772, 775,-32768, +-32768, 767,-32768,-32768, 551,-32768,-32768,-32768, 270, 9068, + 668, 6885,-32768, 451, 6885,-32768,-32768,-32768, 8981, 10680, + 10680, 10680, 10680, 10833,-32768,-32768,-32768,-32768, 782, 9857, + 9857, 6885, 785, 531, 789, 841, 795,-32768, 8981,-32768, +-32768, 6694, 6885,-32768, 9068, 9068, 7069, 9068, 9068, 9068, + 9068, 9068, 9068, 9068, 9068, 9068, 9068, 9068, 9068, 9068, + 9068, 9068, 9068, 9068, 9068, 9068,-32768,-32768,-32768,-32768, +-32768, 9068, 9068, 9068, 8981, 4897, 439, 876, 7777,-32768, +-32768,-32768, 859, 914, 491, 516, 525, 1537, 649,-32768, + 1863, 1863,-32768, 2957, 813, 834, 882,-32768,-32768, 269, + 8337, 648,-32768, 730, 609,-32768,-32768, 9068,-32768,-32768, +-32768,-32768, 200,-32768,-32768,-32768,-32768,-32768,-32768, 872, + 881,-32768,-32768, 1259,-32768, 7506, 7598,-32768,-32768,-32768, +-32768,-32768,-32768,-32768, 78,-32768, 849, 835, 573, 884, +-32768,-32768,-32768, 1058, 187, 885,-32768,-32768, 3026, 10506, + 3026, 10131, 1604, 5167,-32768, 886,-32768,-32768,-32768,-32768, + 848,-32768, 898,-32768,-32768, 311, 322, 903, 841,-32768, +-32768,-32768,-32768, 6415, 10833,-32768, 745, 866, 10765,-32768, +-32768, 867,-32768,-32768, 869, 188, 10187, 870,-32768, 245, + 10299, 922, 923, 526,-32768,-32768,-32768, 4770, 4770,-32768, + 5108, 926,-32768,-32768, 883, 103,-32768, 1501,-32768, 933, + 414,-32768, 419, 503,-32768, 906,-32768, 578, 942,-32768, +-32768, 220,-32768,-32768, 1330, 3254, 58, 66,-32768, 103, + 1767, 8981, 8981, 8981, 103, 1767,-32768,-32768,-32768,-32768, +-32768,-32768, 618, 618, 618,-32768, 899, 904, 9335, 882, + 905, 913, 917, 948, 4231, 955, 958, 961,-32768, 934, +-32768,-32768, 941,-32768,-32768, 980, 684, 717, 286, 201, + 9068, 990,-32768, 994, 945, 10833, 10833,-32768,-32768, 993, + 3688, 4340, 3916, 4445, 4416, 2273, 2982, 2009, 2009, 2009, + 1064, 1064, 1243, 1243, 664, 664, 664,-32768,-32768, 950, + 957, 962, 966, 967, 10680, 439,-32768, 6977, 9068,-32768, +-32768,-32768, 9068,-32768,-32768, 977, 9770, 971, 1010, 1031, +-32768, 9068,-32768, 9068,-32768, 9068, 3128,-32768, 3128,-32768, + 205, 995, 999,-32768, 1007, 10680, 103,-32768, 103, 3833, +-32768, 1767, 1008, 8616, 8616, 6002, 1013, 9155, 1017, 3489, + 2118, 773, 1018, 9068, 1259, 992, 881,-32768, 10833,-32768, + 10833, 1784, 1021, 9422,-32768, 1029,-32768,-32768, 10666,-32768, + 10680, 2070, 2070, 3775,-32768,-32768,-32768,-32768, 2528,-32768, +-32768, 59, 9068,-32768,-32768, 528,-32768, 556, 537, 9068, + 1069,-32768, 553, 591, 611, 841,-32768,-32768,-32768, 31, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 8433,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 923, 1076,-32768,-32768, +-32768, 10680,-32768,-32768,-32768,-32768, 1085,-32768, 8981,-32768, +-32768,-32768,-32768, 1404,-32768, 608, 1191, 1082,-32768, 9068, + 5357,-32768, 3428, 291, 291, 365, 622, 1689, 10344, 5508, +-32768, 110, 291, 1095, 414,-32768, 6977,-32768, 1049, 270, + 270, 270,-32768, 1051, 103, 1767, 103, 1767,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 1070, 1072, 1077, 1078, + 848,-32768, 10697, 6977, 6510, 1073,-32768, 9068,-32768,-32768, +-32768,-32768, 388, 1071,-32768,-32768, 1083, 42, 633, 633, + 1074, 633,-32768,-32768, 9770, 1175,-32768, 1087, 1089, 1093, +-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 103, 1099, +-32768, 1092,-32768,-32768, 3635,-32768, 10833,-32768,-32768, 1096, +-32768,-32768, 142, 1100,-32768,-32768,-32768, 2358, 2358, 2480, + 2480, 3775,-32768, 2528,-32768, 2623, 10546, 1102,-32768, 322, +-32768, 9068,-32768, 9068,-32768, 9068,-32768, 64, 6602,-32768, + 8709, 8709, 6098, 305, 1106, 356,-32768, 6977, 6789,-32768, +-32768, 151, 6977, 6977,-32768, 1108, 1109, 1596,-32768,-32768, +-32768,-32768, 1767, 10833,-32768,-32768,-32768, 414, 414,-32768, +-32768,-32768,-32768,-32768, 1767, 297, 727, 9068, 673,-32768, + 1160,-32768,-32768,-32768, 181, 879, 2132, 649, 936, 291, + 1163,-32768, 1055,-32768,-32768,-32768, 414, 5635,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 1115,-32768, 1119, 9068, + 9068, 9068, 9068, 6977,-32768, 9068, 1168,-32768,-32768, 10833, + 9068,-32768, 388,-32768,-32768,-32768,-32768,-32768,-32768, 1122, +-32768, 1189,-32768,-32768,-32768, 103,-32768,-32768,-32768,-32768, + 9068,-32768,-32768, 2358, 2358,-32768, 2623,-32768,-32768, 1129, + 1130, 1132, 1147, 1259,-32768,-32768, 5908, 1217,-32768,-32768, + 1144, 1610,-32768,-32768,-32768,-32768, 10680,-32768,-32768,-32768, + 6977,-32768,-32768,-32768, 103, 1145, 1192, 1192, 103, 1146, + 9068, 9068, 10675, 414, 3067, 414, 414, 780, 414, 4911, + 1192, 7846,-32768, 103, 103,-32768,-32768, 1157, 1166, 1167, + 1170,-32768, 10788, 6977, 1161,-32768,-32768,-32768,-32768, 103, + 1171,-32768,-32768,-32768,-32768, 1147,-32768,-32768, 692,-32768, + 158, 1207, 766, 781,-32768,-32768,-32768,-32768,-32768, 9068, + 1226, 1234, 1235, 8802, 518, 428,-32768,-32768, 8894, 1296, + 1245,-32768, 5246, 10405, 10551, 5754,-32768,-32768, 1288,-32768, +-32768,-32768, 7941,-32768, 436,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 10675, 10675,-32768, 1192, 605, 893, 9068, +-32768,-32768,-32768, 673, 673, 1192, 1192, 580, 1192,-32768, +-32768, 4001,-32768,-32768, 103, 103,-32768,-32768,-32768,-32768, + 6977,-32768,-32768,-32768,-32768,-32768,-32768, 1259,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 841, 1213, 1215, 10584, +-32768,-32768,-32768,-32768, 1253, 9068, 1261,-32768, 841,-32768, +-32768, 1236,-32768,-32768, 673, 707,-32768, 779, 673, 9509, + 788, 164,-32768,-32768,-32768,-32768,-32768,-32768, 103, 103, +-32768,-32768,-32768, 9068, 9068, 10675, 414, 414,-32768,-32768, +-32768,-32768, 7690,-32768,-32768,-32768,-32768,-32768, 1237,-32768, + 638, 638,-32768,-32768, 1321, 6323, 8981, 9068,-32768, 8051, +-32768, 1281,-32768,-32768, 670,-32768,-32768, 9944, 9944, 7161, +-32768,-32768, 841,-32768,-32768, 10675, 10675,-32768, 1192, 1192, + 1239, 10719, 1246, 5696,-32768,-32768, 8981,-32768,-32768, 8243, +-32768, 64,-32768,-32768, 1290,-32768, 1240, 373, 5263, 10811, + 8051,-32768,-32768, 1147, 44,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 398, 311, 1244, 1247, 841, 1251, 841, + 8147,-32768, 647,-32768,-32768,-32768,-32768, 673,-32768,-32768, + 1147, 1352, 1305,-32768, 132,-32768,-32768,-32768,-32768,-32768, +-32768,-32768,-32768,-32768,-32768,-32768, 9068, 1306, 7253, 841, + 414, 8051, 1275, 257, 1310,-32768,-32768,-32768,-32768, 124, +-32768,-32768, 64,-32768, 1264,-32768,-32768, 1314,-32768,-32768, + 1312,-32768, 9068, 1352, 1332, 1352,-32768,-32768,-32768,-32768, +-32768,-32768,-32768, 1272, 274,-32768,-32768, 7345,-32768, 6977, +-32768, 1380, 1333, 1285,-32768,-32768, 171,-32768,-32768, 1386, + 1340, 8147,-32768,-32768,-32768,-32768, 1412, 1413,-32768 }; static const short yypgoto[] = {-32768, - 1360,-32768, -310,-32768, 987, 2, 0, 1367,-32768, 186, --32768,-32768, 300, 1031,-32768, 652,-32768,-32768,-32768, 550, --32768, 1224, -607, 26, -597, 1227, 103,-32768,-32768,-32768, --32768,-32768, 704, 711,-32768,-32768,-32768,-32768,-32768, 370, - 2028,-32768,-32768,-32768, 5001, 62, -16, 127, 902,-32768, - -6,-32768, 69,-32768, -1231,-32768, -1269, -64,-32768, 1315, - 1104, -236,-32768, -741, 4617, -223, 745, 3188, -61, 98, - 130,-32768,-32768,-32768, -297,-32768, -144,-32768,-32768, -1154, - -41, -306, 1565, 63, -163, -112, -1, 3967, -169, -4, - -137, -833, 182,-32768, -59,-32768,-32768, 176,-32768,-32768, --32768,-32768,-32768, 1054, 3161, -31,-32768, 588,-32768,-32768, - -994, -141, 782,-32768,-32768,-32768,-32768,-32768, -53,-32768, --32768,-32768,-32768,-32768, 598, -329,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1201,-32768, 367, 531,-32768,-32768,-32768, --32768, 497, -628, 746,-32768,-32768,-32768,-32768,-32768, 743, --32768, 358, 865, 619, 919, 2411, 144, 24, -392, 1274, - 2423, -408, 13,-32768, 4504, -127, 506, -77, 3487, 1136, --32768, 4377, 1553, 1277,-32768, 3972, 2377, -274,-32768, 3634, --32768,-32768, 228, -835, -950,-32768,-32768, 324, 54, -367, --32768,-32768,-32768,-32768, -1200,-32768, -1118, -1302,-32768,-32768, + 1415,-32768, -329,-32768, 1001, 9, 10, 1414,-32768, 69, +-32768,-32768, 226, 1056,-32768, 393,-32768,-32768,-32768, 565, +-32768, 1260, -657, -8, -649, 1262, 136,-32768,-32768,-32768, +-32768,-32768, 489, 496,-32768,-32768,-32768,-32768,-32768, 394, + 219,-32768,-32768,-32768, 5249, 77, 146, -30, 907,-32768, + 1490,-32768, 61,-32768, -1303,-32768, -1330, -83,-32768, 1186, + -230, -249,-32768, -767, 3615, 83, 1019, 3530,-32768, -97, + -79, 15, -49, 288,-32768,-32768,-32768, -313,-32768, -157, +-32768,-32768, -1173, -51, -330, 1866, 119, 808, -163, 22, + 80, -188, -4, -96, -917, 186,-32768, -70,-32768,-32768, + -176,-32768,-32768,-32768,-32768,-32768, 845, 540, 11,-32768, + 590,-32768,-32768, -1107, -415, 794,-32768,-32768,-32768,-32768, +-32768, -47,-32768,-32768,-32768,-32768,-32768,-32768, 598, -374, +-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1223,-32768, 381, + 542,-32768,-32768,-32768,-32768, 344, -904, 534,-32768,-32768, +-32768,-32768,-32768, 530,-32768, 273, 856, 629, 910, 2154, + 34, 3, -421, 1291, 1443, -461,-32768, 17,-32768, 2697, + -128, 328, -55, 4100, 1148,-32768, 4430, 1823, 2703, -5, + -110,-32768, 1357,-32768, 4154, 2763, -422,-32768, 4073,-32768, +-32768, 227, -868, -1069,-32768,-32768, 318, 8, -348,-32768, +-32768,-32768,-32768, -1246,-32768, -1199, -1315,-32768,-32768,-32768, -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 83,-32768,-32768,-32768,-32768,-32768, 93, - -1135,-32768,-32768,-32768, -49,-32768,-32768,-32768,-32768, -1281, - 32,-32768, 38,-32768, -579, -448, 608,-32768,-32768,-32768, --32768, -337,-32768, -335, -181,-32768, 350, 353,-32768, -190, --32768, -305 +-32768,-32768, 41,-32768,-32768,-32768,-32768,-32768, 67, -1205, +-32768,-32768,-32768, -66,-32768,-32768,-32768,-32768, -1307, 1, +-32768, 6,-32768, -682, -371, 597,-32768,-32768,-32768,-32768, + -386,-32768, -382, -158,-32768, 978, 330,-32768, 176,-32768, + -220 }; -#define YYLAST 10637 - - -static const short yytable[] = { 55, - 373, 192, 53, 36, 848, 35, 548, 365, 368, 167, - 415, 218, 837, 560, 1025, 616, 600, 649, 601, 963, - 124, 557, 665, 123, 598, 96, 195, 582, 431, 264, - 55, 460, 463, 53, 36, 55, 35, 348, 53, 36, - 352, 35, 1362, 892, 380, 434, 464, 465, 180, -1, - 420, 423, 921, 1262, 1382, 350, 351, 1285, 1144, 1145, - 473, 528, 1120, 215, 491, 474, 51, 414, 475, 320, - 192, 485, 1165, 161, 262, 488, 422, 528, 1405, 313, - 355, 313, 324, 527, 528, 123, -2, 122, 442, 1384, - 226, 786, 451, 331, 335, 313, 313, 51, 786, 1026, - 1300, -302, 51, 100, -123, 381, 44, 1303, 81, 357, - 930, 329, 932, 1392, 685, 718, 126, 1283, 180, 856, - 1395, 313, 1379, 613, 418, 101, 192, 121, 102, 126, - 139, 838, 8, 9, 192, 192, 221, 44, 382, 1121, - 1373, 638, 44, 451, 55, 862, 87, 53, 788, 323, - 1027, 195, 1437, 856, 705, 179, 1235, 1405, 82, 195, - 1393, 192, 140, 161, 1452, 1241, 1242, 857, 1243, 1360, - 858, 8, 444, 128, 132, 839, 607, -302, 1428, 1402, - 614, 381, 26, 927, 840, 841, 815, 686, 126, 322, - 594, 127, 922, 863, 161, 146, 864, 186, 187, 886, - 1107, 857, 846, 13, 858, 859, -753, 1133, 192, 1369, - 1429, 51, 321, 1433, 382, 987, 145, 719, 1265, 1089, - 144, 842, 263, 111, 112, 151, 20, 314, 226, 314, - 887, 865, 594, 366, 369, 23, 816, 536, 152, 859, - 109, 110, 923, 314, 314, 849, 620, 445, 532, 1390, - 1108, 44, 358, 473, 474, 1262, 525, 1134, 215, 192, - 1434, 557, 348, 139, 140, 140, 140, 339, 1266, 314, - 192, 588, 819, 340, 365, 368, 420, 423, 364, 367, - 487, 562, -255, 704, 420, 1265, 480, 587, 313, 446, - 687, -567, 111, 112, 1431, 140, 423, 600, 897, 869, - 154, 262, 652, 38, 561, -256, 83, 398, 400, 215, - 1052, 1450, 18, 423, 1344, 1345, 445, 529, 159, 7, - 343, 344, 1056, 530, 548, 1458, 84, 158, -255, -255, - 210, 226, 898, 395, 38, 1340, 899, -567, -567, 38, - 147, 602, 109, 110, -250, 85, 442, 536, 1179, 597, - 786, -256, -256, -567, 1074, -528, 1076, 21, 1451, -524, - 192, 192, -524, 212, 655, 86, 1274, -253, 192, 900, - 26, 124, 27, 28, 123, 1459, 594, 328, 786, 396, - 192, 148, 1291, 594, 1296, -311, 624, 14, 15, 195, - 482, 631, 26, 704, 111, 112, 337, 192, 791, 127, - 762, -528, 160, 989, 531, 195, 486, -124, 766, 1092, - -524, 786, -524, -524, 326, -524, 353, 763, 767, -311, - 387, 83, 285, -311, 286, 1317, -524, 55, -524, -121, - 680, 1406, 768, 672, 1319, 1320, 314, 388, 122, 921, - -250, 84, 370, 1419, -524, -524, 764, 1088, -524, 263, - 8, 9, 480, 1423, 313, 480, -311, 313, -528, 707, - -524, 313, 710, 710, 710, 710, 389, 88, 103, 104, - 1436, 594, 480, 525, 313, 880, 794, 882, 121, 665, - 1024, 313, 888, 480, 600, 313, 601, 734, 438, 1447, - 762, 440, 598, 678, 679, 85, 160, 599, 560, 371, - 366, 369, 111, 112, -528, 410, 557, 763, 937, 938, - 939, 272, 1464, 756, 420, 86, 553, 313, 262, 773, - 105, 106, 795, 796, 695, 536, 594, 26, 594, 193, - 194, 140, 140, 140, 439, 597, 764, 441, 142, 599, - 451, -562, 631, 192, 1281, 642, 643, 776, 972, 1410, - 778, 873, 828, -45, 832, 833, 482, 901, -45, 482, - 786, 1018, 554, 226, 491, 267, 7, 8, 219, -45, - 696, 704, 1020, 473, 474, 366, 715, 192, 1097, 822, - 379, 786, 1022, 647, 14, 15, 1353, 482, 1407, 833, - 180, 653, -7, 777, 215, 823, 779, 874, 192, 88, - 89, 90, 314, 902, 21, 314, 391, 1019, 846, 314, - 314, 314, 314, 314, 392, 895, 896, 435, 1021, 27, - 28, 964, 314, 447, 924, 109, 110, 448, 1023, 314, - 597, 594, 1354, 314, 1408, 594, 449, 907, 665, 450, - 142, 142, 142, 220, 802, 457, 7, 343, 344, 466, - 26, 32, 91, 92, 93, 40, 192, 467, 594, 705, - 468, 109, 110, 594, 469, 314, 263, 55, 470, 55, - 680, 142, 680, 672, 528, 180, 55, 111, 112, 680, - 780, 782, 672, 599, 21, 597, 40, 597, 408, 409, - 599, 40, 1093, 1094, 567, 1096, 594, 26, 569, 27, - 28, 220, 572, 1047, 1048, 1049, -312, 570, 14, 15, - 573, 26, 693, 111, 112, 8, 9, 416, 417, 85, - 574, 8, 9, 119, 11, 12, 594, 766, 627, 586, - 13, 32, 605, 678, 679, 678, 679, 767, 594, 86, - -312, 678, 678, 679, -312, 16, -6, 17, 18, 1098, - 608, 768, 1375, 20, 625, 710, 889, 648, 694, 966, - 688, 969, 23, 85, 512, 513, 1396, 111, 112, 644, - 594, 26, 594, 111, 112, 14, 15, -312, 599, 85, - -361, 906, 916, 86, 710, 697, 1070, -122, 1263, 1264, - 597, 220, 480, 714, 631, 83, 7, 8, 9, 86, - 83, 802, 890, 1058, 473, 474, 408, 1334, 1237, -361, - 1082, 1085, 698, -361, 628, 84, 226, 597, 614, 710, - 84, 83, 597, 85, 88, 89, 90, 716, 303, 1268, - 303, 1269, 717, 599, 21, 599, 719, 7, 109, 110, - 536, 84, 774, 86, 775, 594, 1060, 26, 787, 27, - 28, 789, 1062, 1063, 791, 631, 1060, 1065, 807, -361, - 1063, 416, 1335, 825, 408, 1339, 594, 808, 817, 710, - 303, 818, 820, 826, 1043, 21, 313, 91, 92, 365, - 368, 32, 824, 539, 1085, 597, 827, 541, 835, -253, - 27, 28, 836, 1129, 1131, 366, 715, 597, 1135, 1136, - 365, 368, 381, 314, 1322, 853, 854, 142, 142, 142, - 855, 705, 861, -752, 220, 871, 1332, 885, 875, 878, - 55, 876, 32, 680, 139, 925, 672, 945, 881, 597, - 120, 597, 314, 509, 510, 511, 512, 513, 599, 1175, - 780, 782, 599, 946, 8, 9, 947, 88, 89, 90, - 196, 197, 198, 88, 103, 104, 140, 1032, 507, 508, - 509, 510, 511, 512, 513, 599, 940, 314, 1005, 1006, - 599, 941, 948, 1322, 942, 221, 7, 8, 9, 943, - 199, 944, 949, 7, 8, 9, 678, 679, 485, 140, - 950, -120, 952, 953, 955, 1230, 111, 112, 26, 877, - 91, 92, 200, 599, 597, 956, 105, 106, 107, 957, - 1400, 958, 1322, 600, 21, 1377, 959, 314, 960, 961, - 445, 21, 971, 480, 314, 631, 471, 973, 616, 27, - 28, 109, 110, 599, 974, 1257, 27, 28, 929, 975, - 931, 109, 1162, 1322, 980, 599, 981, 990, 201, 202, - 203, 982, -99, 220, 14, 15, 991, 988, 705, 996, - 445, 32, 993, 55, 999, 1017, 680, 1002, 32, 672, - 1171, 1172, 1173, 1174, 1035, 1042, 1057, 599, 1061, 599, - 1066, 1178, 1077, 111, 112, 1071, -99, 1072, 1078, 1079, - -99, 1080, 1086, 111, 112, -256, 1090, 1091, 1239, 1240, - 1099, 1106, 1095, 109, 110, 366, 369, 7, 343, 344, - -256, -256, 473, 474, 1316, -256, 1100, 445, 1218, 388, - 1105, 1217, 1213, -99, 1212, 446, 366, 1127, 710, 678, - 679, -256, 619, 623, 1101, 1104, 140, 140, 140, 983, - 623, 984, 1109, -256, -256, 21, -256, 1114, -256, 1128, - 1110, 1111, 599, 26, 1138, 111, 112, 140, 140, 140, - 27, 28, 1177, 1139, 192, 14, 15, 1143, 1147, 452, - -361, 1110, 1111, 599, 1290, 1169, 1290, -256, -256, 453, - 1170, -256, 1180, 1181, 1185, 1186, 1187, 594, 1372, 1120, - 1188, 1228, 32, -256, 1236, 451, 1252, 1253, -361, -361, - 1280, 623, 1258, -361, 1254, 1255, 1260, 1218, 365, 368, - 1217, 1267, 180, 1212, 1218, 1276, 1286, 1217, 1213, 1277, - 1212, 1218, 1278, 1288, 1217, 1213, 1301, 1212, 109, 110, - 303, 1324, 442, 619, 418, 1325, 731, 732, 1329, 736, - 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, - 747, 748, 749, 750, 751, 752, 753, 754, 1331, -97, - 1333, 14, 15, 623, 1348, 623, 623, 186, 187, 1346, - 1351, 1358, 1370, 13, 1330, 1386, 314, 1387, 26, 1398, - 111, 112, 1073, 1399, 1075, 1401, 88, 89, 90, 1414, - 1418, 623, 1425, -97, 452, 1432, 20, -97, 623, 1435, - 7, 8, 9, 1438, 453, 23, 1453, 88, 103, 104, - 1439, 192, 1441, 1444, 812, 814, 1449, 734, 1363, 1218, - 1365, 1454, 1217, 1218, 1388, 1212, 1217, 1213, 1412, 1212, - -97, 480, 142, 313, 1456, 1103, 1457, 26, 21, 91, - 92, 1461, 1462, 7, 109, 110, 597, 1363, 12, 1365, - 1466, 224, 1218, 27, 28, 1217, 1213, 1467, 1212, 1, - 105, 106, 619, 1218, 610, 142, 1217, 1213, 5, 1212, - 584, 1003, 377, 224, 1374, 378, 1218, 109, 110, 1217, - 1213, 21, 1212, 917, 893, 32, 1115, 720, 1356, 224, - 8, 9, 1032, 224, 26, 1463, 27, 28, 1293, 852, - 1142, 1424, 998, 1363, 1146, 1365, 224, 997, 1218, 430, - 30, 1217, 1213, 1141, 1212, 891, 658, 115, 1050, 894, - 31, 1068, 919, 1164, 140, 1442, 995, 26, 32, 111, - 112, 660, 810, 33, 366, 1127, 8, 9, 657, 734, - 26, 761, 111, 112, 411, 533, 1299, 1227, 623, 1420, - 224, 1182, 7, 8, 9, 1218, 1397, 12, 1217, 1213, - 646, 1212, 658, 1391, 1443, 140, 140, 140, 263, 659, - 951, 654, 1445, 7, 8, 9, 1034, 660, 0, 642, - 643, 314, 0, 224, 0, 1229, 26, 0, 111, 112, - 21, 0, 622, 0, 599, 0, 536, 263, 0, 629, - 0, 0, 0, 26, 224, 27, 28, 619, 623, 0, - 0, 21, 142, 142, 142, 0, 1248, 1249, 0, 825, - 0, 623, 0, 623, 26, 0, 27, 28, 0, 826, - 163, 0, 1259, 142, 142, 142, 0, 32, 0, 539, - 164, 0, 827, 541, 88, 103, 104, 575, 576, 577, - 165, 994, 0, 263, 0, 0, 75, 0, 32, 0, - 702, 623, 0, 166, 0, 97, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 113, 117, 75, 0, 1014, - 1304, 1305, 130, 130, 0, 130, 623, 75, 7, 109, - 110, 0, 75, 0, 224, 0, 0, 105, 106, 1314, - 1315, 0, 0, 174, 623, 75, 0, 0, 0, 7, - 109, 110, 0, 207, 214, 0, 0, 0, 224, 0, - 97, 0, 755, 0, 757, 758, 21, 0, 0, 0, - 228, 97, 0, 0, 0, 0, 224, 0, 0, 75, - 0, 27, 28, 0, 0, 0, 0, 21, 311, 1059, - 311, 97, 185, 186, 187, 0, 0, 806, 0, 13, - 26, 0, 27, 28, 334, 336, 342, 117, 0, 0, - 117, 0, 619, 32, 174, 97, 30, 18, 0, 0, - 130, 0, 20, 360, 130, 0, 31, 130, 130, 130, - 311, 23, 0, 0, 32, 0, 619, 619, 0, 33, - 1087, 75, 0, 621, 0, 224, 356, 0, 879, 0, - 621, 0, 185, 186, 187, 0, 174, 174, 174, 13, - 0, 0, 0, 8, 9, 0, 11, 12, 0, 0, - 224, 0, 13, 0, 0, 0, 0, 18, 0, 926, - 0, 0, 20, 0, 0, 174, 0, 16, 0, 17, - 0, 23, 0, 109, 110, 20, 0, 0, 0, 0, - 429, 0, 0, 623, 23, 623, 563, 623, 97, 0, - 619, 621, 0, 26, 0, 111, 112, 130, 0, 619, - 619, 0, 0, 0, 619, 619, -333, 8, 9, -333, - 11, 214, 0, 7, 109, 110, 13, 0, 12, 0, - 142, 1148, 1149, 26, 0, 111, 112, 0, 0, 0, - 224, 16, 760, 17, -333, 97, 454, 0, 0, 20, - 0, 0, 0, 0, -333, 619, 224, 1176, 23, 0, - 536, 21, 0, 621, 0, 621, 621, 26, 0, 111, - 112, 142, 142, 142, 26, 0, 27, 28, 0, 514, - 0, 623, 0, 537, 0, 0, 0, 484, 97, 0, - 135, 621, 534, 538, 454, 454, 550, 965, 621, 0, - 136, -333, 0, 539, 0, 174, 540, 541, 32, 0, - 976, 619, 977, 137, 0, 0, 0, 0, 515, 516, - 0, 0, 117, 517, 518, 519, 520, 0, 1238, 0, - 0, 117, 0, 0, 0, 0, 97, 0, 7, 8, - 9, 0, 0, 12, 0, 0, 130, 0, 593, 130, - 1001, 619, 0, 0, 130, 7, 8, 9, 75, 0, - 214, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 1015, 21, 1275, 1053, 1054, - 174, 0, 174, 0, 174, 174, 174, 0, 0, 26, - 174, 27, 28, 21, 0, 174, 0, 0, 174, 536, - 0, 0, 0, 0, 0, 164, 26, 1067, 27, 28, - 1306, 1307, 0, 97, 75, 165, 0, 0, 0, 1312, - 0, 0, 825, 32, 0, 0, 0, 0, 166, 0, - 619, 0, 826, 0, 0, 0, 0, 0, 109, 110, - 32, 0, 539, 0, 0, 827, 541, 0, 621, 97, - 97, 97, 97, 703, 0, 0, 706, 0, 0, 0, - 708, 709, 711, 712, 713, 0, 0, 0, 0, 623, - 94, 0, 0, 484, 0, 0, 185, 186, 187, 108, - 311, 536, 0, 13, 730, 0, 0, 0, 26, 0, - 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 1367, 18, 0, 0, 537, 97, 20, 454, 621, 224, - 0, 224, 0, 0, 538, 23, 759, 534, 204, 454, - 454, 621, 550, 621, 539, 0, 0, 540, 541, 803, - 0, 0, 0, 805, 784, 0, 0, 0, 0, 0, - 0, 784, 1150, 1151, 0, 1160, 1161, 0, 1163, 903, - 904, 9, 1116, 0, 1117, 0, 1118, 0, 555, 8, - 9, 621, 0, 0, 0, 0, 0, 419, 186, 187, - 341, 113, 0, 0, 13, 0, 174, 803, 174, 174, - 207, 550, 0, 0, 0, 0, 621, 21, 0, 224, - 0, 362, 18, 272, 556, 0, 21, 20, 0, 0, - 26, 0, 27, 28, 621, 0, 23, 0, 905, 26, - 0, 111, 112, 174, 0, 0, 164, 803, 0, 0, - 224, 0, 619, 0, 174, 174, 165, 174, 0, 593, - 0, 1233, 1234, 0, 32, 0, 0, 0, 0, 166, - 1184, 0, 883, 0, 8, 9, 119, 11, 12, 0, - 117, 627, 0, 13, 75, 0, 75, 0, 0, 0, - 0, 914, 75, 75, 426, 428, 0, 0, 16, 0, - 17, 18, 97, 0, 97, 0, 20, 0, 0, 0, - 0, 454, 454, 454, 0, 23, 0, 536, 0, 0, - 0, 0, 454, 0, 26, 0, 111, 112, 224, 0, - 0, 0, 0, 0, 0, 0, 0, 7, 109, 110, - 537, 0, 442, 0, 0, 0, 0, 224, 0, 0, - 538, 1308, 1309, 1310, 0, 0, 0, 0, 0, 0, - 539, 0, 0, 540, 541, 0, 0, 628, 0, 0, - 472, 0, 97, 0, 0, 21, 0, 0, 0, 0, - 0, 0, 224, 0, 962, 0, 0, 0, 26, 0, - 27, 28, 454, 621, 454, 621, 0, 621, 0, 0, - 224, 97, 109, 110, 30, 454, 12, 97, 0, 803, - 803, 803, 0, 730, 31, 0, 992, 0, 0, 1342, - 1343, 0, 32, 784, 578, 0, 0, 33, 0, 585, - 0, 0, 0, 0, 97, 0, 97, 174, 174, 1011, - 78, 0, 0, 0, 0, 536, 593, 0, 1004, 99, - 0, 784, 26, 0, 111, 112, 0, 0, 0, 114, - 118, 78, 0, 0, 0, 0, 131, 131, 537, 131, - 0, 78, 1011, 0, 0, 0, 78, 0, 538, 0, - 0, 621, 0, 0, 784, 0, 97, 131, 539, 78, - 0, 540, 541, 0, 0, 0, 1046, 208, 1037, 0, - 97, 0, 97, 0, 216, 1044, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 216, 656, 109, 110, 0, - 0, 214, 0, 78, 0, 1430, 0, 1064, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 109, 110, - 0, 0, 442, 0, 0, 0, 97, 225, 97, 0, - 0, 349, 0, 0, 0, 0, 0, 0, 131, 216, - 536, 0, 0, 0, 131, 0, 0, 26, 131, 111, - 112, 131, 131, 131, 0, 0, 727, 0, 0, 454, - 454, 536, 454, 537, 0, 78, 0, 0, 26, 0, - 111, 112, 0, 538, 0, 0, 0, 0, 0, 0, - 131, 131, 131, 539, 537, 0, 540, 541, 0, 0, - 0, 0, 0, 372, 538, 0, 0, 174, 174, 174, - 174, 1011, 0, 0, 539, 174, 0, 540, 541, 131, - 0, 0, 397, 784, 8, 9, 0, 11, 214, 0, - 1011, 1011, 1011, 13, 0, 413, 399, 401, 405, 0, - 7, 8, 9, 0, 784, 12, 0, 0, 16, 97, - 17, 131, 0, 0, 0, 0, 20, 0, 0, 621, - 0, 0, 0, 174, 0, 23, 821, 0, 130, 0, - 75, 0, 0, 0, 26, 834, 111, 112, 21, 0, - 0, 0, 0, 0, 536, 0, 0, 0, 0, 216, - 131, 26, 0, 27, 28, 727, 0, 0, 0, 0, - 0, 0, 8, 9, 119, 11, 12, 1007, 0, 1376, - 0, 13, 174, 174, 0, 174, 0, 1008, 0, 0, - 0, 0, 0, 0, 0, 32, 16, 539, 17, 18, - 1009, 541, 216, 0, 20, 97, 535, 0, 131, 131, - 551, 0, 0, 23, 0, 559, 0, 1037, 0, 131, - 0, 0, 26, 0, 111, 112, 666, 0, 7, 8, - 667, 119, 11, 12, 0, 0, 349, 0, 13, 0, +#define YYLAST 10918 + + +static const short yytable[] = { 58, + 886, 592, 183, 412, 234, 645, 875, 454, 713, 646, + 208, 666, 36, 37, 379, 480, 283, 643, 121, 1048, + 1307, 139, 404, 407, 601, 56, 1075, 695, 985, 241, + 102, 58, 453, 628, 387, 1104, 58, 71, 949, 503, + 506, 461, 472, 954, 36, 37, 571, 138, 155, 36, + 37, 196, 388, 389, 571, 177, 1345, 56, 342, 71, + 344, 346, 56, 1348, 144, 148, 231, 470, 1415, 71, + 534, 211, 385, 662, 71, 1330, 571, 390, 281, 1270, + 1271, 1444, 332, 57, 332, 393, 332, 332, 349, 580, + 1049, 208, 492, 1291, 1442, 944, 241, 1164, 245, 88, + 85, 332, 332, 1439, 160, 57, 1452, 459, 462, 167, + 396, 483, 397, -1, 138, 57, 282, 604, -45, 89, + 57, 354, 54, -45, 659, 1464, 71, 90, -2, 457, + 419, 87, 1479, 196, -45, 739, 332, 852, 332, 45, + 241, 1050, 92, 492, 137, 653, 1426, 91, 208, 1010, + 86, 1135, 1499, 1453, 54, 238, 208, 208, 177, 54, + 58, 136, 280, 825, 684, 1489, 405, 408, 945, 1353, + 1105, 45, 57, 740, 1165, 946, 45, 753, 1359, 1360, + 1422, 1361, 660, 208, 403, 406, 56, 853, -316, 177, + -316, 195, 420, 1461, 420, 884, 155, 668, 71, 894, + 1514, 1151, 1413, 93, 675, -325, 1464, 15, 16, 211, + 1177, 348, 823, 437, 439, 1132, 894, 211, 1310, 823, + 1106, 1450, 142, 1490, 1310, 421, 922, 421, 347, 39, + 1520, 575, 100, 208, 8, 485, 343, 345, 293, -325, + 163, 114, 143, -325, 57, 1307, 859, 895, 245, 576, + 896, 1152, -781, 499, 27, 142, 900, 923, 568, 434, + 1178, 39, 860, -124, 895, 364, 39, 896, 1311, 737, + 693, 365, 1492, 1117, 1392, 1119, -325, 231, 699, 332, + 1521, 164, 220, 54, 208, 897, 395, 129, 130, 601, + 698, 1429, 1430, -541, 645, 106, 608, 1104, 907, 856, + 45, 208, 897, -541, 901, 435, 632, 902, 332, 385, + 887, 486, 404, 407, 754, 718, 831, 15, 16, 1494, + 281, 156, -375, 487, 876, 703, 704, 525, 231, 529, + 633, 790, 107, 792, 793, 1336, 1512, 1341, 141, -541, + 176, 377, 903, 209, 210, 339, 592, 340, -123, -541, + 449, -375, -265, 108, 245, -375, 459, 462, 282, 1191, + 141, 158, 832, 833, 459, 1216, 1495, 843, 401, 877, + 1319, 87, 1465, 507, 508, 462, 27, 162, 878, 879, + 202, 203, 986, 1513, 1478, 481, 14, 642, 516, 1080, + 1186, 517, 701, 1484, 518, 462, 41, 528, -265, -265, + 531, -375, 1190, -581, 280, 208, 208, 597, 570, 21, + 139, 1012, 1498, 208, -258, 880, 161, 426, 24, 168, + 580, 729, 170, 1081, 208, 644, 174, 1082, 41, 498, + 677, 482, 1509, 41, 427, 797, 138, 1369, 156, 156, + 156, 465, 467, 175, 208, 19, 1371, 1372, 71, -581, + -581, 284, 798, 598, 479, 1526, 405, 408, 447, 448, + 1083, 530, 713, 428, 823, -581, 739, 730, 644, 156, + 211, 641, 645, 367, 688, 689, 646, 226, 158, 158, + 158, 799, 1131, -267, 643, 211, 797, 605, 476, 606, + 1328, 607, 823, 89, 57, 90, 228, 332, 580, 568, + 332, 142, 141, 798, 332, 745, 745, 745, 745, 158, + 285, 380, 381, 10, 641, 91, 525, 332, 351, 525, + 94, 109, 110, 515, 332, 353, 823, 601, 332, -267, + -267, 1110, 799, 137, 477, 405, 750, 1047, 811, 126, + 127, 647, 648, 362, 739, -261, 918, 525, 920, 22, + 136, 455, 456, 924, 126, 127, 492, 368, 1125, 1128, + 332, 281, 27, 813, 28, 303, 1136, 1137, 987, 1139, + 391, 1140, 815, 911, 111, 112, 1469, 91, 884, 642, + 624, 998, 366, 999, 812, 1000, 677, 865, 534, 870, + 871, 370, 129, 130, 208, 199, 33, 207, 1326, 282, + 1041, 459, 516, 517, 379, 839, 713, 129, 130, 814, + 369, 245, 8, 9, 817, 819, 486, 644, 816, 912, + 604, 126, 127, 1024, 644, 871, 483, 727, 121, 208, + 141, 237, 371, 1128, 90, 196, 126, 127, 1043, 231, + -258, 483, 1173, 1175, 736, 280, 1042, 1179, 1180, 1038, + 208, 885, 126, 127, 91, 1072, -537, 740, 1045, -537, + 823, 409, 90, 641, 176, 129, 130, 1354, 410, 1084, + 641, -576, 27, 728, 129, 130, 642, 199, 207, 87, + 288, 823, 91, -7, 1044, 1406, 702, 27, 493, 129, + 130, 950, 951, 952, 1466, 828, 418, 208, 494, 15, + 16, 1073, 430, 801, 1046, 129, 130, -537, 1212, -537, + -537, 58, -537, 802, 644, 1085, 642, 332, 332, 332, + 473, 642, 431, -537, 931, -537, 488, 803, 156, 156, + 156, 1407, 491, 8, 9, 207, 490, 939, 88, 489, + 1467, -537, -537, 460, 207, -537, -121, 555, 556, 71, + 762, 1308, 1309, 839, 644, 126, 127, -537, 89, 644, + 641, 500, 1068, 1069, 1070, 1267, 447, 1386, 158, 158, + 158, 90, 509, 475, 202, 203, 8, 9, 510, -122, + 14, 88, 511, 126, 1288, 1456, 129, 130, 512, 1192, + 745, 91, 937, 513, 988, 57, 571, 1480, 1302, 580, + 641, 89, 615, 21, 616, 641, 27, 613, 129, 130, + 237, 1160, 24, 1161, 618, 1162, 372, 373, 374, 241, + 88, 745, 581, 126, 127, 619, 719, 642, 1313, 129, + 130, 677, 582, 620, 938, 90, 129, 130, 455, 1387, + 89, 651, 583, 1314, 631, 584, 585, 447, 1391, 405, + 750, -6, 858, 486, 642, 91, 745, 245, 654, 642, + 486, 872, 671, 1078, 1079, 644, 690, 817, 819, 644, + 375, 376, 1107, 694, 27, 722, 129, 130, 155, 126, + 127, 723, 762, 724, 731, 1368, 1090, 732, 207, 994, + 493, 749, 644, 677, 751, 1028, 1029, 644, 752, 660, + 494, 404, 407, -326, 754, 15, 16, 745, 959, 960, + 961, 641, 1055, 809, 332, 641, 516, 517, 126, 127, + 1221, 810, 404, 407, 740, 824, 58, 826, 58, 828, + 27, 644, 129, 130, 196, 58, 844, -326, 641, 931, + 845, -326, 854, 641, 857, 855, 801, 88, 931, 861, + 873, 642, 939, 642, 939, 1355, 802, -261, 874, 128, + -99, 939, 15, 16, 71, 420, 71, 89, 1374, 27, + 803, 129, 130, 71, -326, 891, 892, 641, 893, 899, + 1384, 201, 202, 203, 241, 475, -780, 909, 14, 644, + 913, 644, 460, 207, -99, 914, 475, 916, -99, 919, + 460, 921, 285, 380, 381, 10, 19, 937, 962, 937, + 57, 21, 57, 963, 964, 937, 937, 645, 1194, 57, + 24, 1437, 965, 967, 1196, 1197, 966, 642, 1194, 1199, + 968, -99, 1197, 969, 885, 641, 970, 641, 115, 116, + 117, 22, -120, 971, 1374, 405, 408, 241, 677, 938, + 972, 938, 974, 975, 977, 978, 28, 303, 938, 979, + 372, 373, 374, 1154, 1155, 644, 405, 1171, 642, 980, + 624, 993, 981, 1089, 1099, 982, 983, 1141, 997, -97, + 642, 15, 16, 995, 1154, 1155, 644, 740, 33, 1459, + 27, 1374, 118, 119, 1515, 1112, 1113, 1114, 996, 94, + 109, 110, 1019, 58, 1003, 322, 644, 322, 1004, 322, + 322, 641, 27, -97, 375, 376, 931, -97, 644, 1005, + 1011, 1374, 1013, 115, 116, 117, 1014, 1016, 1040, 939, + 1022, 662, 641, 516, 517, 94, 109, 110, 478, 1025, + 1058, 71, 550, 551, 552, 553, 554, 555, 556, 1065, + -97, 156, 641, 111, 112, 113, 135, 1108, 1111, 322, + 1115, 322, 1255, 1120, 641, 1121, 285, 380, 381, 10, + 1122, 1123, 745, 238, 22, 1249, 1250, 118, 119, 199, + 1133, 207, 1142, 1129, 937, 156, 1138, 57, 1254, 111, + 112, 158, 1134, 1127, 126, 127, 1143, 58, 1144, 639, + 71, 1335, 1145, 1335, 1149, 22, 1150, 208, 1148, 1153, + 931, 1158, 236, 1357, 1358, 1172, 207, 1182, 1183, 1195, + 28, 303, 1200, 939, 1206, 158, 938, 1425, 1207, 492, + 1214, 94, 95, 96, 1217, 71, 1218, 460, 1222, 1223, + 475, 1224, 639, 1225, 1255, 27, 57, 129, 130, 196, + 1164, 1255, 33, 1265, 1269, 1273, 427, 1249, 1255, 404, + 407, 94, 109, 110, 1249, 1250, 1297, 1127, 457, 1312, + 1254, 1249, 1250, 1303, 487, 1298, 1299, 1254, 937, 1300, + 1305, 57, 71, 27, 1254, 97, 98, 99, 1321, 71, + 692, 94, 95, 96, 1322, 1323, 71, 285, 8, 9, + 10, 700, 322, 1346, 1331, 1333, 1376, 572, 1377, 285, + 380, 381, 10, 1381, 573, 111, 112, 156, 156, 156, + 938, 1383, 514, 552, 553, 554, 555, 556, 57, 1385, + 1404, 528, 115, 703, 704, 57, 22, 1411, 156, 156, + 156, 1423, 57, 236, 1433, 97, 98, 1431, 22, 1447, + 1446, 28, 303, 1457, 1055, 236, 1458, 158, 158, 158, + 1460, 27, 1473, 28, 303, 1477, 1486, 1448, 1493, 1496, + 208, 1255, 1418, 1500, 1501, 1255, 1503, 1471, 158, 158, + 158, 1511, 1228, 33, 1249, 332, 118, 119, 1249, 1250, + 1516, 639, 1506, 1518, 1519, 574, 1523, 1254, 639, 642, + 1524, 1254, 1418, 405, 1171, 1255, 115, 703, 704, 71, + 282, 1528, 1529, 71, 1, 5, 1255, 656, 1249, 1250, + 630, 688, 689, 1026, 416, 1455, 417, 1100, 1076, 1249, + 1250, 1254, 1409, 1159, 706, 755, 1255, 644, 1525, 1338, + 282, 1021, 1254, 71, 1020, 665, 669, 469, 1184, 1249, + 1250, 1202, 557, 669, 71, 57, 280, 890, 27, 57, + 118, 119, 1254, 1327, 1418, 1071, 1077, 1255, 1102, 847, + 516, 517, 1290, 1018, 71, 796, 577, 450, 199, 378, + 1249, 1250, 1344, 641, 475, 1264, 280, 1497, 639, 57, + 1451, 558, 559, 1254, 1505, 1481, 560, 561, 562, 563, + 57, 1507, 282, 1057, 0, 71, 1266, 458, 202, 203, + 0, 0, 0, 0, 14, 0, 0, 1255, 669, 0, + 57, 0, 0, 0, 0, 0, 1370, 0, 639, 0, + 1249, 1250, 19, 639, 0, 0, 0, 21, 0, 285, + 126, 127, 10, 1254, 0, 917, 24, 322, 280, 0, + 665, 57, 0, 766, 767, 71, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 0, 0, 0, 22, 0, + 669, 0, 669, 669, 0, 236, 0, 0, 0, 0, + 0, 0, 0, 28, 303, 356, 360, 0, 115, 703, + 704, 57, 705, 0, 0, 0, 94, 95, 96, 669, + 212, 213, 214, 667, 0, 0, 669, 475, 475, 0, + 667, -267, 438, 440, 444, 33, 706, 156, 0, 0, + 0, 0, 0, 707, 849, 851, -267, -267, 0, 639, + 215, -267, 0, 639, 0, 0, 475, 0, 0, 0, + 27, 0, 118, 119, 0, 0, 0, -267, 27, 0, + 97, 98, 216, 0, 0, 0, 639, 158, 0, -267, + -267, 639, -267, 915, -267, 156, 156, 156, 0, 0, + 0, 0, 665, 0, 0, 667, 0, 0, 0, 0, + 0, 1086, 1087, 9, 10, 0, 0, 948, 0, 0, + 0, 0, 953, -267, -267, 639, 0, -267, 217, 218, + 219, 0, 0, 0, 0, 158, 158, 158, 0, -267, + 15, 16, 0, 0, 0, -375, 0, 0, 0, 0, + 22, 0, 475, 475, 0, 475, 475, 0, 475, 0, + 322, 322, 322, 27, 0, 28, 29, 667, 0, 667, + 667, 1088, 0, -375, -375, 0, 0, 669, -375, 180, + 0, 0, 0, 639, 0, 639, 0, 0, 0, 181, + 8, 9, 0, 134, 12, 13, 667, 33, 673, 973, + 14, 0, 182, 667, 0, 0, 94, 109, 110, 1109, + 621, 622, 623, 199, 207, 17, 0, 18, 19, 0, + 0, 0, 523, 21, 1006, 0, 1007, 0, 0, 0, + 0, 0, 24, 475, 475, 0, 665, 669, 0, 0, + 0, 27, 0, 129, 130, 0, 79, 0, 0, 0, + 669, 0, 669, 0, 669, 0, 103, 0, 0, 639, + 111, 112, 0, 0, 0, 0, 0, 132, 79, 0, + 0, 0, 0, 146, 146, 0, 146, 0, 79, 0, + 639, 0, 1017, 79, 674, 0, 126, 127, 0, 0, + 0, 13, 669, 0, 0, 0, 190, 0, 79, 686, + 639, 687, 0, 438, 440, 444, 223, 0, 0, 0, + 0, 1037, 639, 103, 697, 475, 475, 475, 669, 0, + 201, 202, 203, 0, 247, 103, 0, 14, 0, 0, + 580, 0, 0, 0, 0, 79, 669, 27, 0, 129, + 130, 670, 1187, 1188, 667, 19, 0, 103, 0, 0, + 21, 0, 1116, 581, 1118, 475, 475, 0, 0, 24, + 0, 0, 0, 582, 0, 0, 0, 0, 1074, 0, + 132, 1201, 0, 583, 394, 132, 584, 585, 0, 190, + 103, 0, 0, 0, 0, 665, 146, 0, 0, 399, + 146, 359, 361, 146, 146, 146, 0, 0, 0, 0, + 0, 0, 0, 0, 667, 0, 1147, 79, 0, 0, + 0, 523, 665, 665, 523, 0, 1130, 667, 742, 667, + 0, 667, 190, 190, 190, 201, 202, 203, 0, 0, + 475, 523, 14, 0, 0, 0, 7, 126, 127, 10, + 0, 0, 523, 0, 0, 0, 769, 0, 0, 0, + 19, 190, 0, 0, 0, 21, 0, 1276, 1277, 667, + 1286, 1287, 0, 1289, 24, 0, 468, 0, 0, 0, + 0, 0, 791, 0, 103, 22, 0, 0, 808, 609, + 669, 0, 669, 0, 669, 667, 146, 665, 27, 0, + 28, 29, 7, 8, 9, 10, 665, 665, 13, 0, + 0, 665, 665, 667, 151, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 152, 0, 0, 0, 0, 0, + 0, 0, 33, 0, 103, 495, 1193, 153, 0, 0, + 0, 22, 0, 0, 0, 0, 0, 580, 1351, 1352, + 599, 8, 9, 1219, 27, 0, 28, 29, 0, 0, + 686, 687, 0, 697, 7, 8, 235, 10, 0, 0, + 862, 0, 665, 0, 1213, 0, 0, 103, 0, 0, + 863, 578, 0, 495, 495, 594, 293, 600, 33, 22, + 583, 0, 1268, 864, 585, 0, 1272, 0, 0, 669, + 190, 0, 27, 22, 129, 130, 0, 0, 527, 0, + 236, 1293, 1294, 0, 0, 0, 0, 132, 28, 29, + 0, 0, 0, 0, 0, 0, 0, 1304, 0, 665, + 1398, 1399, 1400, 0, 0, 0, 0, 0, 132, 1274, + 1275, 639, 237, 0, 103, 0, 7, 126, 127, 10, + 33, 0, 13, 0, 0, 146, 0, 667, 146, 667, + 0, 667, 665, 146, 244, 0, 0, 79, 0, 0, + 1427, 1428, 7, 126, 127, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 22, 0, 638, 1320, 190, + 0, 190, 0, 190, 190, 190, 0, 0, 27, 190, + 28, 29, 1366, 1367, 190, 0, 0, 190, 0, 0, + 0, 22, 0, 0, 31, 0, 0, 0, 236, 0, + 0, 0, 991, 0, 32, 0, 28, 29, 1356, 0, + 676, 0, 33, 0, 438, 440, 444, 34, 0, 0, + 0, 0, 411, 0, 0, 1491, 0, 0, 0, 665, + 237, 0, 0, 0, 0, 523, 1394, 1395, 33, 0, + 0, 436, 103, 103, 103, 103, 667, 0, 0, 0, + 444, 0, 0, 0, 452, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556, 669, 0, + 7, 8, 9, 10, 0, 0, 230, 738, 0, 0, + 741, 0, 1396, 1397, 743, 744, 746, 747, 748, 0, + 1095, 1402, 0, 0, 0, 0, 0, 527, 103, 0, + 495, 0, 0, 0, 0, 0, 1420, 0, 765, 22, + 0, 578, 0, 495, 495, 580, 594, 0, 1066, 0, + 0, 0, 27, 840, 28, 29, 0, 842, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 862, 0, + 794, 0, 0, 0, 0, 0, 0, 0, 863, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 583, 821, + 0, 864, 585, 0, 0, 0, 821, 0, 0, 0, + 0, 190, 869, 190, 190, 223, 594, 0, 0, 0, + 686, 687, 438, 440, 444, 0, 0, 0, 697, 0, + 0, 0, 7, 8, 9, 10, 0, 0, 13, 0, + 0, 0, 0, 438, 440, 444, 0, 0, 0, 190, + 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, + 190, 190, 0, 190, 0, 0, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 667, 0, 580, 665, 0, + 7, 8, 9, 10, 27, 0, 28, 29, 79, 0, + 0, 0, 523, 103, 0, 0, 638, 0, 103, 0, + 1030, 0, 0, 0, 0, 495, 495, 495, 0, 0, + 1031, 0, 0, 0, 0, 0, 0, 495, 33, 22, + 583, 0, 0, 1032, 585, 0, 236, 0, 0, 0, + 0, 0, 0, 0, 28, 29, 676, 0, 0, 0, + 0, 676, 0, 0, 0, 0, 686, 687, 691, 697, + 0, 0, 0, 696, 0, 0, 0, 0, 237, 1208, + 1209, 1210, 1211, 0, 0, 0, 33, 103, 0, 0, + 1215, 0, 0, 0, 0, 7, 8, 9, 10, 720, + 0, 483, 0, 0, 725, 0, 0, 1284, 0, 495, + 0, 495, 0, 0, 0, 0, 733, 734, 103, 735, + 0, 0, 495, 0, 103, 0, 840, 840, 840, 0, + 984, 0, 0, 1015, 22, 0, 0, 0, 0, 0, + 580, 0, 0, 0, 0, 0, 0, 27, 0, 28, + 29, 103, 0, 103, 190, 190, 1034, 0, 0, 0, + 0, 765, 0, 862, 0, 0, 0, 676, 0, 0, + 75, 821, 0, 863, 0, 0, 0, 0, 0, 0, + 0, 33, 0, 583, 0, 0, 864, 585, 0, 0, + 1034, 0, 140, 0, 638, 0, 1027, 145, 149, 821, + 0, 0, 75, 1325, 103, 0, 0, 75, 0, 0, + 829, 830, 0, 0, 0, 829, 0, 0, 0, 132, + 0, 0, 200, 79, 0, 79, 0, 0, 0, 0, + 1097, 79, 79, 821, 0, 0, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 105, 1060, 103, 0, + 103, 243, 444, 0, 1067, 0, 125, 133, 82, 350, + 0, 0, 0, 147, 147, 0, 147, 0, 82, 0, + 0, 0, 0, 82, 0, 243, 0, 0, 0, 0, + 0, 495, 495, 0, 495, 1382, 147, 0, 82, 0, + 0, 676, 0, 676, 0, 0, 224, 0, 0, 0, + 438, 440, 444, 232, 243, 0, 0, 0, 0, 0, + 398, 0, 0, 0, 400, 232, 0, 0, 243, 0, + 190, 190, 190, 190, 1034, 82, 0, 0, 190, 0, + 0, 75, 0, 0, 0, 769, 1416, 0, 0, 0, + 0, 0, 0, 1034, 1034, 1034, 145, 149, 0, 523, + 955, 0, 957, 0, 0, 0, 0, 0, 0, 0, + 386, 0, 243, 0, 0, 103, 1416, 821, 0, 147, + 232, 0, 0, 0, 0, 0, 147, 103, 0, 0, + 147, 0, 0, 147, 147, 147, 0, 0, 821, 0, + 1198, 0, 0, 0, 0, 243, 0, 82, 0, 0, + 79, 0, 0, 0, 0, 0, 0, 0, 676, 0, + 484, 0, 147, 147, 147, 0, 0, 0, 0, 243, + 676, 0, 0, 0, 989, 990, 1485, 992, 1416, 0, + 8, 9, 0, 134, 12, 13, 0, 0, 673, 0, + 14, 147, 0, 0, 0, 0, 190, 190, 0, 190, + 0, 0, 1504, 0, 1009, 17, 0, 18, 19, 0, + 0, 0, 0, 21, 0, 0, 0, 769, 0, 103, + 0, 0, 24, 0, 580, 0, 147, 0, 0, 0, + 0, 27, 0, 129, 130, 0, 0, 190, 0, 1036, + 0, 0, 146, 0, 79, 0, 0, 581, 7, 8, + 9, 10, 0, 0, 0, 0, 0, 582, 0, 243, + 0, 0, 1060, 0, 232, 147, 0, 583, 0, 0, + 584, 585, 0, 0, 674, 545, 546, 547, 548, 549, + 550, 551, 552, 553, 554, 555, 556, 22, 0, 1278, + 1279, 9, 10, 580, 0, 190, 869, 190, 0, 0, + 27, 0, 28, 29, 0, 0, 0, 232, 0, 0, + 0, 579, 0, 147, 147, 595, 862, 0, 0, 649, + 603, 243, 650, 0, 0, 0, 863, 652, 22, 0, + 147, 140, 0, 0, 33, 0, 583, 0, 0, 864, + 585, 27, 0, 28, 29, 0, 0, 386, 0, 1280, + 0, 126, 127, 398, 0, 400, 230, 180, 0, 8, + 9, 0, 0, 12, 13, 0, 0, 181, 484, 14, + 0, 0, 0, 0, 232, 33, 0, 1146, 0, 0, + 182, 0, 1034, 0, 17, 147, 18, 0, 147, 0, + 243, 0, 21, 147, 0, 580, 0, 82, 0, 0, + 0, 24, 27, 0, 129, 130, 0, 0, 1157, 0, + 27, 0, 129, 130, 564, 0, 0, 243, 581, 147, + 0, 147, 0, 147, 147, 147, 0, 0, 582, 147, + 1034, 1034, 1034, 0, 147, 0, 0, 147, 583, 0, + 0, 584, 585, 0, 0, 1185, 103, 0, 0, 565, + 0, 0, 715, 0, 0, 0, 0, 1189, 0, 0, + 0, 190, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 925, 527, 7, 8, 926, 10, + 134, 12, 13, 0, 1204, 0, 0, 14, 1205, 638, + 0, 0, 232, 232, 232, 232, 0, 0, 0, 0, + 243, 0, 17, 0, 18, 19, 20, 0, 0, 0, + 21, -485, 0, 0, 0, 22, 243, 0, 0, 24, + 927, 1220, 928, 0, 0, 0, 0, 0, 27, 0, + 28, 29, 0, 0, 929, 0, 930, 0, 0, 0, + 0, 0, 0, 0, 31, 0, 0, 0, 232, 0, + 147, 0, 0, 0, 32, 0, 868, 0, 0, 0, + 0, 0, 33, 147, 147, 0, 595, 34, 0, 0, + 0, 0, 0, 841, 0, 0, 0, 0, 0, 1295, + 1296, 0, 0, 0, -485, 603, 0, 0, 0, 7, + 8, 9, 10, 0, 0, 0, 0, 905, 0, 0, + 0, 0, 0, 0, 649, 650, 0, 652, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + 0, 147, 595, 147, 147, 224, 595, 0, 22, 0, + 0, 0, 943, 0, 0, 0, 0, 0, 0, 715, + 0, 27, 1349, 28, 29, 0, 1350, 179, 925, 0, + 7, 8, 926, 10, 134, 12, 13, 180, 0, 147, + 0, 14, 0, 595, 0, 0, 0, 181, 0, 0, + 147, 147, 0, 147, 0, 33, 17, 0, 18, 19, + 182, 0, 0, 0, 21, 0, 0, 0, 0, 22, + 0, 0, 0, 24, 927, 0, 928, 0, 82, 0, + 0, 0, 27, 232, 28, 29, 0, 0, 232, 0, + 930, 285, 8, 9, 10, 147, 147, 147, 31, 8, + 9, 0, 0, 12, 230, 0, 0, 147, 32, 14, + 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, + 0, 34, 0, 0, 17, 0, 18, 0, 0, 0, + 22, 0, 21, 50, 0, 0, 0, 236, 0, 0, + 0, 24, 243, 580, 243, 28, 303, 0, 0, 0, + 27, 0, 129, 130, 0, 50, 0, 232, 145, 149, + 50, 50, 0, 154, 0, 50, 581, 0, 0, 237, + 50, 243, 0, 0, 0, 0, 582, 33, 0, 147, + 0, 147, 0, 50, 0, 50, 583, 0, 232, 584, + 585, 0, 147, 0, 232, 0, 841, 841, 841, 0, + 0, 0, 0, 603, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 0, 16, 0, 17, 18, 19, 0, 0, - 131, 20, -472, 131, 0, 0, 21, 0, 131, 0, - 23, 668, 78, 669, 0, 0, 0, 0, 0, 26, - 0, 27, 28, 0, 0, 670, 0, 671, 174, 803, - 174, 0, 0, 0, 131, 30, 131, 0, 131, 131, - 131, 0, 0, 0, 131, 31, 0, 8, 9, 131, - 11, 12, 131, 32, 0, 0, 13, 0, 33, 0, - 0, 0, 0, 0, 0, 0, 0, 216, 78, 0, - 0, 16, 0, 17, 0, -472, 645, 0, 0, 20, - 640, 650, 641, 0, 399, 401, 405, 0, 23, 0, - 0, 0, 0, 0, 0, 651, 0, 26, 0, 111, - 112, 521, 578, 216, 216, 216, 216, 1011, 689, 0, - 691, 0, 0, 0, 7, 8, 9, 185, 186, 187, - 0, 0, 699, 700, 13, 701, 7, 8, 9, 0, - 0, 214, 0, 0, 0, 0, 522, 0, 0, 0, - 0, 0, 18, 0, 0, 0, 0, 20, 1011, 1011, - 1011, 0, 21, 0, 0, 0, 23, 0, 536, 216, - 0, 131, 484, 97, 21, 26, 0, 27, 28, 0, - 1045, 0, 0, 131, 131, 593, 551, 26, 174, 27, - 28, 825, 0, 804, 0, 7, 8, 9, 0, 0, - 442, 826, 0, 164, 0, 559, 0, 0, 0, 32, - 0, 539, 0, 165, 827, 541, 0, 7, 8, 9, - 0, 32, 12, 792, 793, 0, 166, 0, 792, 0, - 0, 0, 0, 21, 0, 114, 0, 0, 0, 536, - 131, 551, 131, 131, 208, 551, 26, 0, 27, 28, - 1084, 0, 0, 0, 0, 21, 0, 216, 0, 0, - 0, 0, 825, 0, 0, 0, 0, 0, 26, 0, - 27, 28, 826, 0, 0, 0, 0, 131, 0, 0, - 32, 551, 539, 0, 402, 827, 541, 0, 131, 131, - 0, 131, 0, 0, 403, 0, 0, 0, 0, 0, - 0, 0, 32, 0, 0, 0, 884, 404, 0, 0, - 0, 0, 0, 0, 118, 0, 0, 0, 78, 0, - 78, 0, 0, 1084, 0, 915, 78, 78, 0, 0, - 0, 7, 8, 9, 640, 641, 216, 651, 216, 0, - 0, 0, 0, 1140, 0, 131, 131, 131, 7, 8, - 9, 185, 186, 187, 0, 0, 131, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, - 0, 912, 0, 933, 0, 935, 18, 0, 0, 0, - 0, 20, 26, 0, 27, 28, 21, 0, 1289, 0, - 23, 0, 536, 0, 0, 0, 0, 0, 164, 26, - 0, 27, 28, 0, 0, 0, 216, 0, 165, 0, - 8, 9, 0, 11, 214, 164, 32, 1191, 0, 13, - 0, 166, 0, 0, 0, 165, 131, 0, 131, 0, - 0, 0, 0, 32, 16, 216, 17, 0, 1295, 131, - 0, 216, 20, 804, 804, 804, 967, 968, 0, 970, - 559, 23, 0, 536, 0, 0, 0, 0, 0, 0, - 26, 49, 111, 112, 0, 0, 0, 0, 216, 0, - 216, 131, 131, 551, 986, 0, 537, 0, 0, 0, - 0, 0, 49, 183, 0, 191, 538, 49, 49, 0, - 138, 0, 49, 0, 0, 0, 539, 49, 0, 540, - 541, 0, 0, 0, 0, 1282, 804, 0, 49, 1013, - 49, 7, 8, 9, 0, 0, 442, 399, 401, 405, - 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 222, 0, 216, 0, 216, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 216, 21, - 0, 0, 405, 183, 191, 0, 0, 0, 0, 0, - 1318, 0, 26, 0, 27, 28, 0, 0, 0, 1051, - 0, 78, 346, 0, 346, 346, 0, 0, 164, 49, - 216, 1055, 216, 0, 0, 49, 0, 222, 165, 49, - 0, 0, 138, 138, 138, 0, 32, 0, 0, 0, - 0, 166, 0, 0, 0, 0, 49, 0, 0, 0, - 191, 0, 0, 131, 131, 0, 131, 0, 421, 191, - 0, 49, 49, 138, 0, 0, 0, 0, 0, 0, - 0, 222, 0, 0, 0, 0, 0, 109, 110, 0, - 186, 187, 0, 0, 0, 0, 13, 0, 437, 0, - 49, 131, 131, 131, 131, 551, 0, 0, 0, 131, - 0, 1102, 0, 216, 0, 0, 0, 0, 0, 20, - 0, 0, 0, 0, 804, 804, 804, 0, 23, 0, - 536, 0, 49, 0, 0, 0, 0, 26, 0, 111, - 112, 0, 1113, 216, 0, 0, 18, 640, 641, 399, - 401, 405, 0, 537, 0, 651, 0, 131, 0, 0, - 0, 0, 131, 538, 78, 0, 0, 0, 0, 0, - 399, 401, 405, 539, 0, 0, 547, 541, 492, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 481, 1167, 1168, 1158, 191, 0, 131, 131, 0, 131, - 73, 1152, 1153, 9, 0, 0, 0, 346, 0, 0, - 0, 0, 0, 0, 0, 222, 0, 0, 0, 216, - 49, 73, 0, 0, 1183, 0, 73, 73, 0, 73, - 0, 73, 0, 0, 0, 0, 73, 346, 0, 21, - 0, 0, 640, 641, 0, 651, 346, 73, 0, 73, - 0, 0, 26, 0, 27, 28, 0, 0, 0, 0, - 1154, 49, 0, 1231, 49, 0, 0, 1232, 164, 49, - 0, 0, 0, 49, 0, 0, 0, 437, 165, 0, - 0, 0, 0, 73, 421, 191, 32, 0, 437, 1250, - 1251, 166, 421, 0, 0, 49, 0, 49, 0, 138, - 138, 138, 131, 551, 131, 49, 0, 0, 0, 0, - 49, 0, 0, 49, 0, 0, 8, 9, 73, 11, - 12, 0, 0, 0, 73, 13, 0, 0, 73, 49, - 0, 73, 73, 73, 0, 0, 0, 0, 0, 0, - 16, 0, 17, 0, 0, 73, 0, 0, 20, 0, - 0, 0, 0, 0, 0, 0, 481, 23, 0, 481, - 73, 73, 73, 0, 0, 0, 26, 0, 111, 112, - 0, 0, 0, 0, 481, 481, 481, 0, 0, 0, - 0, 804, 0, 0, 0, 0, 0, 481, 0, 73, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 666, 0, 7, 8, 667, 119, 11, - 12, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 73, 804, 804, 804, 0, 0, 405, 0, 0, - 16, 222, 17, 18, 19, 0, 0, 216, 20, -473, - 0, 0, 0, 21, 481, 0, 0, 23, 668, 0, - 669, 0, 131, 0, 0, 0, 26, 0, 27, 28, - 0, 0, 670, 0, 671, 183, 0, 191, 399, 401, - 405, 0, 30, 0, 0, 0, 1152, 109, 110, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 32, 49, 49, 49, 49, 33, 0, 0, 7, 109, - 110, 191, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -473, 0, 21, 558, 0, 0, 0, 73, - 0, 0, 421, 0, 0, 437, 0, 26, 49, 27, - 28, 0, 49, 0, 0, 1154, 21, 0, 0, 49, - 49, 0, 49, 30, 0, 0, 0, 0, 0, 26, - 183, 27, 28, 31, 0, 0, 437, 0, 0, 0, - 73, 32, 0, 73, 0, 135, 33, 0, 73, 49, - 0, 49, 73, 0, 0, 136, 49, 49, 49, 0, - 0, 0, 0, 32, 0, 0, 0, 0, 137, 0, - 0, 0, 0, 0, 73, 0, 73, 0, 73, 73, - 73, 481, 0, 0, 73, 0, 0, 0, 0, 73, - 0, 0, 73, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 73, 0, - 0, 0, 0, 626, 0, 7, 8, 9, 119, 11, - 265, 266, 267, 627, 268, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 545, 549, 552, 0, 0, - 16, 269, 17, 18, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 0, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - 0, 0, 0, 282, 481, 481, 481, 0, 0, 283, - 222, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 289, 0, 143, 0, 0, 0, 290, 291, - 292, 0, 49, 49, 138, 293, 0, 0, 0, 628, - 0, 558, 175, 0, 0, 0, 0, 0, 0, 0, - 0, -720, 0, 294, 0, 0, 0, 7, 8, 9, - 0, 0, 0, 0, 0, 261, 0, 1031, 0, 0, - 312, 0, 312, 0, 0, 437, 437, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 312, 0, 0, - 0, 0, 7, 8, 9, 21, 0, 0, 0, 0, - 73, 73, 73, 73, 437, 0, 0, 0, 26, 0, - 27, 28, 312, 175, 0, 0, 0, 847, 0, 0, - 0, 222, 0, 0, 164, 0, 143, 143, 143, 0, - 21, 0, 49, 0, 165, 0, 0, 73, 0, 0, - 0, 73, 32, 26, 0, 27, 28, 166, 73, 73, - 0, 73, 0, 0, 0, 175, 175, 406, 0, 402, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, - 0, 0, 0, 0, 0, 0, 0, 32, 73, 0, - 73, 0, 404, 0, 175, 73, 73, 73, 0, 0, - 781, 783, 0, 0, 0, 0, 0, 0, 0, 222, - 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, - 512, 513, 49, 49, 138, 138, 138, 0, 222, 0, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1031, 1031, 1031, 0, 437, - 437, 0, 437, 437, 0, 437, 0, 830, 0, 545, - 549, 0, 552, 0, 0, 455, 8, 9, 176, 11, - 177, 0, 0, 0, 0, 13, 0, 0, 49, 0, - 0, 0, 0, 49, 0, 49, 0, 0, 0, 312, - 16, 0, 17, 18, 549, 0, 0, 0, 20, 0, - 0, 0, 261, 0, 0, 0, 0, 23, 109, 110, - 0, 186, 187, 544, 544, 544, 26, 13, 111, 112, - 558, 0, 0, 0, 175, 0, 0, 49, 49, 0, - 49, 0, 0, 0, 0, 0, 0, 0, 437, 437, - 20, 73, 73, 73, 0, 0, 0, 0, 0, 23, - 596, 536, 0, 0, 0, 0, 0, 0, 26, 0, - 111, 112, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 549, 537, 0, 1033, 0, 0, 0, - 0, 0, 0, 0, 538, 0, 8, 9, 119, 11, - 12, 0, 596, 0, 539, 13, 0, 540, 541, 175, - 0, 175, 0, 406, 406, 406, 0, 183, 191, 175, - 16, 0, 17, 18, 175, 0, 0, 175, 20, 0, - 0, 0, 0, 0, 0, 0, 0, 589, 437, 437, - 437, 0, 0, 49, 49, 49, 26, 0, 111, 112, - 0, 73, 0, 978, 0, 979, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 312, 985, 173, 312, 0, - 781, 783, 312, 312, 312, 312, 312, 0, 0, 0, - 0, 0, 0, 0, 0, 312, 0, 0, 0, 0, - 0, 223, 312, 0, 227, 0, 312, 0, 781, 783, - 0, 0, 0, 0, 0, 0, 437, 437, 0, 0, - 0, 0, 0, 223, 0, 330, 0, 0, 0, 0, - 0, 0, 1031, 0, 0, 0, 0, 0, 312, 261, - 0, 73, 73, 73, 73, 73, 769, 0, 173, 73, - 0, 0, 0, 847, 0, 0, 596, 71, 544, 544, - 0, 544, 0, 596, 1033, 1033, 1033, 0, 544, 0, - 0, 0, 0, 1031, 1031, 1031, 0, 0, 125, 0, - 0, 0, 0, 129, 133, 0, 0, 0, 71, 0, - 173, 173, 173, 71, 0, 0, 0, 73, 0, 0, - 412, 0, 73, 49, 73, 0, 184, 0, 0, 0, - 0, 0, 0, 0, 0, 829, 0, 829, 829, 173, - 544, 0, 437, 497, 498, 499, 500, 501, 502, 503, - 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, - 325, 0, 227, 0, 0, 0, 73, 73, 0, 73, - 0, 596, 829, 0, 223, 0, 0, 0, 0, 0, - 0, 0, 0, 175, 175, 0, 175, 0, 0, 0, + 0, 232, 50, 232, 147, 147, 595, 943, 0, 943, + 0, 0, 0, 0, 1096, 1103, 943, 285, 8, 9, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 127, 0, 383, 202, 203, + 841, 383, 383, 0, 14, 0, 50, 0, 0, 0, + 0, 0, 0, 50, 232, 239, 22, 50, 0, 0, + 154, 154, 154, 236, 0, 0, 715, 21, 0, 133, + 0, 28, 303, 82, 50, 82, 24, 0, 580, 0, + 1098, 82, 82, 0, 0, 27, 0, 129, 130, 50, + 50, 154, 0, 0, 0, 486, 0, 243, 232, 239, + 232, 581, 0, 33, 398, 400, 0, 0, 0, 0, + 0, 582, 484, 0, 0, 0, 243, 0, 50, 0, + 0, 583, 0, 0, 591, 585, 0, 0, 0, 0, + 0, 147, 147, 0, 147, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 50, 0, 0, 0, 7, 8, 9, + 10, 134, 12, 13, 0, 0, 673, 0, 14, 0, + 147, 147, 147, 147, 595, 0, 0, 0, 147, 243, + 0, 0, 715, 17, 943, 18, 19, 0, 0, 0, + 0, 21, 0, 841, 841, 841, 22, 0, 0, 0, + 24, 0, 580, 0, 0, 0, 0, 0, 0, 27, + 715, 28, 29, 0, 0, 232, 126, 127, 0, 0, + 0, 483, 524, 0, 0, 1030, 0, 232, 0, 0, + 649, 650, 0, 652, 0, 1031, 0, 0, 383, 0, + 0, 0, 0, 33, 0, 583, 239, 0, 1032, 585, + 82, 0, 674, 0, 0, 0, 0, 50, 0, 0, + 580, 0, 0, 0, 0, 0, 0, 27, 0, 129, + 130, 1285, 0, 0, 383, 0, 1285, 0, 943, 0, + 243, 0, 0, 581, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 582, 0, 383, 147, 147, 0, 147, + 0, 0, 0, 583, 0, 0, 584, 585, 0, 0, + 0, 0, 50, 0, 0, 50, 0, 0, 0, 232, + 50, 0, 0, 0, 50, 586, 586, 586, 0, 0, + 1339, 0, 0, 0, 0, 0, 0, 147, 0, 0, + 0, 0, 147, 0, 82, 0, 50, 0, 50, 0, + 154, 154, 154, 0, 0, 0, 50, 0, 0, 0, + 0, 50, 0, 0, 50, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 1362, 0, -442, -442, -442, -442, -442, -442, -442, + 0, 0, -442, 0, -442, 147, 595, 147, 0, 0, + 0, 0, 0, 0, 0, -442, 0, -442, -442, 0, + 0, 524, -442, 0, 524, 0, 0, -442, 0, 0, + 0, 0, -442, 0, 0, 0, -442, 0, -442, 524, + 524, 524, 0, 0, 0, -442, 0, -442, -442, -442, + -442, -442, 524, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, 0, -442, -442, -442, + 0, -442, -442, -442, -442, -442, -442, 0, -442, -442, + 0, 0, 841, 77, 1363, 0, 0, 239, 0, -442, + -442, -442, 0, -442, 0, 0, 0, 0, 0, 0, + 524, 0, 0, 0, 0, 77, 0, 0, 0, 0, + 77, 77, 0, 77, 0, 77, 7, 126, 127, 10, + 77, 0, 230, 0, 0, 0, 0, 0, 0, 0, + 841, 841, 841, 77, 0, 77, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 232, 0, 50, 50, + 50, 50, 0, 0, 0, 22, 0, 0, 0, 0, + 0, 147, 0, 0, 0, 0, 0, 159, 27, 0, + 28, 29, 77, 0, 0, 586, 586, 0, 586, 0, + 0, 0, 0, 0, 31, 838, 50, 191, 0, 0, + 50, 0, 0, 0, 32, 0, 0, 50, 50, 0, + 50, 0, 33, 0, 0, 0, 0, 34, 0, 0, + 0, 0, 0, 0, 126, 127, 77, 0, 202, 203, + 0, 0, 0, 77, 14, 50, 0, 77, 0, 0, + 77, 77, 77, 586, 0, 586, 586, 0, 586, 0, + 7, 126, 127, 10, 77, 0, 13, 21, 524, 0, + 0, 0, 0, 0, 0, 0, 24, 0, 580, 77, + 77, 77, 0, 0, 0, 27, 0, 129, 130, 0, + 191, 586, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 581, 0, 0, 159, 159, 159, 0, 77, 0, + 0, 582, 27, 0, 28, 29, 7, 8, 9, 10, + 0, 583, 13, 0, 584, 585, 0, 0, 151, 0, + 0, 0, 0, 191, 191, 445, 0, 0, 152, 0, + 0, 0, 0, 77, 0, 0, 33, 0, 0, 0, + 0, 153, 0, 0, 0, 22, 0, 0, 0, 586, + 0, 0, 191, 524, 524, 524, 0, 0, 27, 239, + 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 180, 0, 0, 0, 0, 0, + 0, 50, 50, 154, 181, 0, 0, 0, 239, 0, + 0, 0, 33, 589, 593, 596, 0, 182, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 556, 0, 0, 1054, 0, 0, + 0, 586, 0, 586, 0, 0, 496, 602, 0, 0, + 0, 0, 0, 0, 586, 0, 0, 77, 838, 838, + 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 0, 50, 0, 0, 0, 0, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 586, 586, 586, 0, + 0, 0, 0, 189, 588, 588, 588, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 191, 77, 0, 0, 77, 0, 0, 242, 0, + 77, 246, 838, 0, 77, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 0, 0, 242, 0, 355, 0, 77, 0, 77, 0, + 77, 77, 77, 0, 239, 0, 77, 0, 0, 0, + 0, 77, 0, 0, 77, 0, 0, 50, 50, 154, + 154, 154, 0, 239, 0, 50, 189, 0, 0, 0, + 0, 0, 0, 7, 8, 9, 10, 192, 12, 193, + 1054, 1054, 1054, 0, 14, 0, 0, 0, 0, 0, + 191, 0, 191, 0, 445, 445, 445, 0, 0, 17, + 191, 18, 19, 0, 0, 191, 0, 21, 191, 189, + 189, 189, 22, 0, 0, 0, 24, 0, 0, 451, + 0, 0, 0, 0, 0, 27, 239, 28, 29, 0, + 0, 194, 0, 0, 0, 0, 0, 50, 189, 0, + 0, 31, 586, 586, 586, 586, 586, 0, 0, 0, + 586, 32, 0, 818, 820, 0, 0, 0, 0, 33, + 0, 246, 0, 0, 34, 838, 838, 838, 7, 126, + 127, 10, 0, 0, 483, 0, 242, 0, 602, 0, + 0, 0, 0, 50, 50, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 359, 0, 0, 0, 361, 0, 0, 978, 979, - 781, 783, 0, 0, 0, 0, 985, 0, 0, 0, - 175, 0, 71, 0, 0, 0, 596, 0, 596, 0, - 0, 781, 783, 0, 0, 0, 0, 129, 133, 0, - 455, 455, 455, 0, 0, 0, 0, 0, 0, 0, - 666, 544, 7, 8, 667, 119, 11, 12, 0, 0, - 0, 0, 13, 0, 223, 227, 0, 0, 0, 173, - 0, 0, 73, 73, 73, 0, 0, 16, 0, 17, - 18, 19, 0, 0, 0, 20, 0, 0, 0, 0, - 21, 0, 0, 0, 23, 668, 312, 669, 443, 0, - 0, 0, 0, 26, 0, 27, 28, 0, 0, 670, - 0, 671, 0, 978, 979, 0, 985, 0, 0, 30, - 0, 544, 0, 544, 0, 312, 0, 0, 0, 31, - 0, 596, 0, 0, 544, 596, 0, 32, 544, 544, - 544, 0, 33, 0, 173, 0, 173, 0, 173, 173, - 173, 1033, 0, 0, 173, 0, 0, 0, 596, 173, - 312, 0, 173, 596, 0, 0, 829, 829, 1012, 0, - 0, 0, 0, 0, 7, 8, 9, 185, 186, 187, - 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 1033, 1033, 1033, 0, 596, 0, 0, 0, - 0, 1012, 18, 0, 0, 0, 0, 20, 0, 0, - 312, 0, 21, 0, 0, 0, 23, 312, 536, 0, - 0, 0, 73, 0, 0, 26, 596, 27, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 603, 596, 0, - 604, 825, 0, 0, 0, 606, 0, 0, 0, 125, - 0, 826, 0, 0, 0, 0, 0, 0, 0, 32, - 0, 539, 1326, 0, 860, 541, 0, 0, 0, 0, - 596, 359, 596, 361, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 443, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 223, 227, 542, 542, - 542, 0, 0, 0, 0, 684, 0, 0, 769, 769, - 0, 769, 0, 1327, 492, 493, 494, 495, 496, 497, - 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 0, 0, 0, 0, - 173, 0, 173, 173, 0, 596, 829, 829, 1012, 1012, - 1012, 0, 0, 0, 829, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 596, 0, 0, 1012, - 1012, 1012, 0, 0, 0, 0, 0, 173, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 173, 173, - 0, 173, 0, 95, 95, 0, 0, 0, 0, 0, - 95, 95, 175, 95, 0, 7, 8, 9, 119, 11, - 12, 0, 0, 627, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 173, 0, 0, 0, 0, - 16, 206, 17, 18, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 21, 0, 0, 0, 23, 0, 536, - 0, 829, 829, 0, 829, 0, 26, 0, 27, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 831, 312, - 0, 0, 1007, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1008, 95, 95, 95, 0, 95, 95, 0, - 32, 0, 539, 0, 0, 1009, 541, 0, 95, 628, - 95, 95, 95, 0, 0, 95, 95, 95, 867, 0, - 0, 0, 0, 0, 0, 603, 604, 0, 606, 0, - 0, 0, 0, 542, 542, 0, 542, 0, 0, 0, - 0, 0, 0, 801, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 684, 0, 684, 0, 223, - 227, 223, 913, 920, 684, 0, 0, 175, 0, 175, - 0, 0, 0, 666, 0, 7, 8, 667, 119, 11, - 12, 173, 173, 1010, 0, 13, 0, 427, 95, 0, - 542, 0, 542, 542, 0, 542, 0, 0, 0, 0, - 16, 0, 17, 18, 19, 95, 0, 0, 20, -475, - 0, 0, 0, 21, 0, 0, 1010, 23, 668, 0, - 669, 0, 0, 0, 0, 0, 26, 542, 27, 28, - 0, 0, 670, 0, 671, 0, 0, 0, 0, 0, - 0, 0, 30, 0, 95, 0, 406, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, - 412, 261, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, -475, 0, 312, 0, 0, 406, 406, 406, - 95, 0, 95, 95, 0, 0, 0, 596, 0, 0, - 261, 0, 0, 0, 0, 0, 542, 0, 129, 133, - 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, - 95, 0, 95, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 867, 0, 589, 593, 0, 596, 0, 0, 0, + 27, 804, 28, 29, 50, 0, 0, 0, 0, 50, + 0, 50, 0, 0, 588, 588, 31, 588, 77, 77, + 77, 77, 0, 0, 588, 0, 32, 0, 0, 593, + 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, + 0, 0, 0, 0, 0, 0, 242, 246, 586, 586, + 0, 586, 7, 8, 9, 10, 77, 189, 230, 0, + 77, 0, 50, 50, 50, 0, 0, 77, 77, 0, + 77, 0, 866, 0, 866, 866, 0, 588, 0, 7, + 8, 9, 10, 0, 0, 13, 0, 0, 0, 0, + 0, 22, 0, 0, 0, 77, 0, 593, 0, 0, + 0, 0, 0, 0, 27, 0, 28, 29, 0, 0, + 866, 0, 0, 0, 0, 0, 0, 0, 22, 0, + 180, 191, 191, 0, 191, 0, 0, 0, 0, 0, + 181, 27, 0, 28, 29, 0, 0, 0, 33, 0, + 0, 0, 0, 182, 0, 0, 189, 441, 189, 1054, + 189, 189, 189, 0, 0, 0, 189, 442, 0, 0, + 0, 189, 0, 0, 189, 33, 496, 496, 496, 1001, + 443, 1002, 0, 0, 0, 0, 0, 0, 588, 0, + 8, 9, 1008, 0, 12, 13, 818, 820, 0, 0, + 14, 0, 0, 1278, 126, 127, 10, 1054, 1054, 1054, + 0, 0, 0, 0, 0, 17, 0, 18, 0, 0, + 0, 0, 0, 21, 818, 820, 0, 0, 0, 0, + 602, 0, 24, 0, 0, 0, 0, 0, 50, 0, + 0, 27, 22, 129, 130, 0, 0, 0, 0, 0, + 0, 77, 77, 77, 0, 27, 0, 28, 29, 0, + 588, 0, 588, 1280, 0, 0, 0, 0, 0, 0, + 0, 31, 0, 588, 0, 0, 0, 588, 588, 588, + 795, 32, 0, 0, 0, 0, 0, 1056, 0, 33, + 0, 0, 0, 0, 34, 6, 0, 7, 8, 9, + 10, 11, 12, 13, 0, 866, 866, 1035, 14, 0, + 0, 0, 0, 242, 246, 0, 0, 0, 0, 0, + 77, 0, 77, 17, 0, 18, 19, 77, 77, 77, + 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, + 24, 1035, 0, 415, 0, 0, 0, 0, 0, 27, + 0, 28, 29, 0, 0, 30, 0, 0, 189, 0, + 189, 189, 0, 0, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, + 0, 191, 0, 33, 0, 0, 0, 0, 34, 0, + 1001, 1002, 818, 820, 0, 0, 189, 0, 1008, 0, + 7, 8, 9, 10, 0, 0, 483, 189, 189, 0, + 189, 0, 0, 818, 820, 0, 0, 77, 77, 77, + 77, 77, 0, 0, 0, 77, 0, 0, 0, 0, + 0, 0, 804, 804, 246, 804, 0, 0, 0, 22, + 1056, 1056, 1056, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 27, 0, 28, 29, 0, 0, 0, -347, + 8, 9, -347, -347, 12, 230, 0, 0, 180, 0, + 14, 866, 866, 1035, 1035, 1035, 0, 0, 181, 866, + 0, 0, 0, 0, 0, 17, 33, 18, -347, 0, + 0, 182, 0, 21, 1035, 1035, 1035, 77, -347, 0, + 0, 0, 24, 0, 580, 0, 0, 0, 0, 0, + 0, 27, 0, 129, 130, 0, 1001, 1002, 0, 1008, + 0, 0, 0, 0, 0, 0, 0, 581, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 582, 7, 8, + 9, 10, 0, 77, 77, -347, 77, 583, 0, 0, + 584, 585, 101, 0, 0, 7, 8, 9, 10, 242, + 246, 242, 120, 101, 0, 0, 0, 0, 0, 101, + 101, 0, 101, 0, 0, 0, 0, 22, 0, 0, + 0, 189, 189, 1033, 77, 0, 0, 0, 242, 77, + 27, 77, 28, 29, 22, 0, 1334, 866, 866, 0, + 866, 0, 222, 0, 0, 0, 180, 27, 0, 28, + 29, 0, 0, 0, 0, 0, 181, 1033, 0, 0, + 0, 0, 0, 180, 33, 0, 0, 0, 0, 182, + 0, 0, 0, 181, 0, 0, 0, 0, 191, 0, + 0, 33, 77, 77, 77, 0, 182, 925, 0, 7, + 8, 926, 10, 134, 12, 13, 0, 189, 0, 0, + 14, 120, 0, 120, 0, 0, 101, 0, 0, 0, + 101, 101, 0, 0, 0, 17, 0, 18, 19, 20, + 0, 0, 101, 21, 101, 101, 101, 0, 22, 101, + 101, 101, 24, 927, 0, 928, 191, 0, 191, 0, + 0, 27, 0, 28, 29, 0, 0, 929, 0, 930, + 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, + 0, 7, 8, 9, 10, 0, 0, 32, 0, 1056, + 0, 0, 0, 0, 242, 33, 0, 0, 0, 0, + 34, 0, 0, 0, 0, 0, 0, 189, 189, 189, + 189, 1033, 0, 1156, 0, 189, 0, 0, 0, 0, + 22, 466, 101, 0, 0, 0, 0, 0, 0, 0, + 1033, 1033, 1033, 27, 0, 28, 29, 1056, 1056, 1056, + 0, 0, 101, 445, 0, 0, 0, 0, 0, 441, + 0, 0, 0, 0, 0, 0, 0, 0, 925, 442, + 7, 8, 926, 10, 134, 12, 13, 33, 77, 0, + 0, 14, 443, 0, 0, 0, 451, 0, 0, 0, + 0, 101, 0, 0, 0, 0, 17, 0, 18, 19, + 20, 445, 445, 445, 21, -486, 0, 0, 0, 22, + 0, 0, 0, 24, 927, 0, 928, 0, 0, 0, + 0, 0, 27, 0, 28, 29, 0, 0, 929, 0, + 930, 0, 191, 0, 0, 0, 0, 101, 31, 101, + 101, 0, 0, 189, 189, 0, 189, 0, 32, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, + 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 0, 0, -486, 0, + 0, 0, 0, 0, 189, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 925, 0, 7, 8, 926, + 10, 134, 12, 13, 0, 0, 0, 101, 14, 0, + 0, 101, 0, 0, 101, 0, 0, 0, 0, 101, + 0, 0, 0, 17, 0, 18, 19, 20, 0, 0, + 0, 21, -488, 0, 0, 0, 22, 0, 0, 0, + 24, 927, 189, 928, 189, 0, 0, 0, 0, 27, + 0, 28, 29, 0, 0, 929, 0, 930, 0, 8, + 9, 0, 134, 12, 13, 31, 0, 1436, 0, 14, + 0, 0, 0, 0, 0, 32, 101, 0, 708, 0, + 0, 0, 0, 33, 17, 0, 18, 19, 34, 0, + 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 24, 0, 101, 0, -488, 0, 0, 0, 0, + 27, 0, 129, 130, 1342, 0, 1232, 1233, 1234, 10, + 134, 12, 286, 287, 288, 0, 289, 14, 1235, 1033, + 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, + 15, 16, 17, 290, 18, 19, 20, 0, 291, 292, + 21, 0, 293, 294, 295, 22, 296, 297, 0, 24, + 0, 0, 0, 298, 299, 300, 301, 302, 27, 0, + 1246, 303, 660, 0, 1247, 304, 101, 1033, 1033, 1033, + 0, 305, 0, 0, 306, 0, 101, 101, 0, 101, + 101, 0, 307, 308, 309, 0, 0, 0, 0, 0, + 310, 311, 312, 0, 0, 0, 0, 313, 189, 1248, + 8, 9, 0, 192, 12, 193, 0, 0, 0, 0, + 14, 0, 0, 0, 1343, 314, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 0, 18, 19, 0, + 0, 0, 120, 21, 0, 0, 0, 0, 0, 0, + 0, 222, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 0, 129, 130, 708, 0, 0, 1231, 0, + 1232, 1233, 1234, 10, 134, 12, 286, 287, 288, 0, + 289, 14, 1235, 0, 1236, 1237, 1238, 1239, 1240, 1241, + 1242, 1243, 1244, 1245, 15, 16, 17, 290, 18, 19, + 20, 0, 291, 292, 21, 0, 293, 294, 295, 22, + 296, 297, 0, 24, 0, 0, 0, 298, 299, 300, + 301, 302, 27, 708, 1246, 303, 660, 0, 1247, 304, + 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, + 0, 101, 101, 101, 0, 0, 307, 308, 309, 0, + 0, 0, 0, 101, 310, 311, 312, 0, 0, 0, + 0, 313, 519, 1248, 285, 8, 9, 10, 134, 12, + 286, 287, 288, 673, 289, 14, 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 95, 0, 0, 95, 223, 0, - 0, 0, 95, 0, 0, 0, 261, 0, 0, 0, - 0, 173, 173, 173, 173, 1010, 0, 1112, 0, 173, - 0, 0, 0, 0, 0, 0, 542, 0, 542, 0, - 0, 0, 0, 0, 1010, 1010, 1010, 0, 0, 542, - 0, 0, 0, 801, 801, 801, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 684, 95, - 0, 0, 0, 0, 0, 0, 0, 173, 0, 0, - 0, 542, 542, 542, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 666, 0, 7, - 8, 667, 119, 11, 12, 0, 801, 0, 0, 13, - 0, 0, 0, 0, 0, 0, 173, 173, 0, 173, - 0, 0, 0, 0, 16, 0, 17, 18, 19, 0, - 0, 0, 20, -474, 0, 0, 0, 21, 359, 361, - 0, 23, 668, 0, 669, 0, 443, 0, 0, 0, - 26, 0, 27, 28, 0, 95, 670, 0, 671, 0, - 0, 0, 0, 0, 95, 95, 30, 95, 95, 0, + 17, 290, 18, 19, 20, 0, 291, 292, 21, 0, + 293, 294, 295, 22, 296, 297, 0, 24, 0, 580, + 0, 298, 299, 300, 301, 302, 27, 0, 28, 303, + -275, 0, 0, 304, 0, 101, 0, 101, 0, 305, + 0, 0, 834, 0, 0, 0, 0, 0, 101, 0, + 307, 308, 835, 0, 0, 0, 0, 0, 310, 311, + 312, 0, 583, 0, 0, 836, 585, 0, 519, 674, + 7, 8, 9, 10, 134, 12, 286, 287, 288, 673, + 289, 14, 0, 314, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 290, 18, 19, + 20, 0, 291, 292, 21, 0, 293, 294, 295, 22, + 296, 297, 0, 24, 0, 580, 0, 298, 299, 300, + 301, 302, 27, 0, 28, 29, -275, 0, 0, 304, + 0, 0, 0, 0, 0, 305, 0, 0, 1051, 0, + 0, 0, 708, 0, 0, 101, 307, 308, 1052, 0, + 0, 0, 0, 0, 310, 311, 312, 0, 583, 0, + 0, 1053, 585, 0, 0, 674, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, + 0, 0, 0, 672, 0, 285, 8, 9, 10, 134, + 12, 286, 287, 288, 673, 289, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 101, 101, 0, + 101, 17, 290, 18, 19, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 0, 0, 298, 299, 300, 301, 302, 27, 0, 28, + 303, 0, 0, 0, 304, 0, 0, 0, 0, 0, + 305, 0, 0, 306, 0, 0, 0, 0, 708, 0, + 0, 307, 308, 309, 0, 0, 0, 0, 0, 310, + 311, 312, 0, 0, 0, 0, 313, 0, 0, 0, + 674, 0, 0, 0, 0, 0, 708, 0, 0, 0, + 0, 0, -748, 768, 314, 285, 8, 9, 10, 134, + 12, 286, 287, 288, 0, 289, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 0, 17, 290, 18, 19, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 0, 0, 298, 299, 300, 301, 302, 27, 0, 28, + 303, 1412, 0, -738, 304, 0, 0, 0, 0, 0, + 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 0, 0, 0, 0, 0, 310, + 311, 312, 0, 0, 0, 663, 313, 756, 757, 758, + 10, 0, 12, 501, 287, 288, 0, 289, 14, 0, + 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 290, 18, 101, 20, 101, 291, + 292, 21, 0, 293, 294, 295, 22, 296, 297, 0, + 24, 0, 0, 0, 298, 299, 300, 301, 302, 27, + 0, 759, 760, 664, 0, 0, 304, 0, 0, 0, + 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, + 0, 0, 0, 307, 308, 309, 0, 0, 0, 0, + 0, 310, 311, 312, 0, 0, 0, 0, 313, 761, + 663, 0, 756, 757, 758, 10, 0, 12, 501, 287, + 288, 0, 289, 14, 0, 889, 314, 0, 0, 0, + 1126, 0, 0, 0, 0, 0, 0, 0, 17, 290, + 18, 0, 20, 0, 291, 292, 21, 0, 293, 294, + 295, 22, 296, 297, 0, 24, 0, 0, 0, 298, + 299, 300, 301, 302, 27, 0, 759, 760, 664, 0, + 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, + 306, 0, 0, 0, 0, 0, 0, 0, 307, 308, + 309, 0, 0, 0, 0, 0, 310, 311, 312, 0, + 0, 0, 663, 313, 756, 757, 758, 10, 0, 12, + 501, 287, 288, 0, 289, 14, 0, 0, 0, 0, + -446, 314, 1126, 0, 0, 0, 0, 0, 0, 0, + 17, 290, 18, 0, 20, 0, 291, 292, 21, 0, + 293, 294, 295, 22, 296, 297, 0, 24, 0, 0, + 0, 298, 299, 300, 301, 302, 27, 0, 759, 760, + 664, 0, 0, 304, 0, 0, 0, 0, 0, 305, + 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, + 307, 308, 309, 0, 0, 0, 0, 0, 310, 311, + 312, 0, 0, 0, 663, 313, 756, 757, 758, 10, + 0, 12, 501, 287, 288, 0, 289, 14, 0, 0, + 0, 0, 1170, 314, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 290, 18, 0, 20, 0, 291, 292, + 21, 0, 293, 294, 295, 22, 296, 297, 0, 24, + 0, 0, 0, 298, 299, 300, 301, 302, 27, 0, + 759, 760, 664, 0, 0, 304, 0, 0, 0, 0, + 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, + 0, 0, 307, 308, 309, 0, 0, 0, 0, 0, + 310, 311, 312, 0, 0, 0, 0, 313, 761, 663, + 0, 285, 8, 9, 10, 0, 12, 501, 287, 288, + 0, 289, 14, 0, 0, 314, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 290, 18, + 0, 20, 0, 291, 292, 21, 0, 293, 294, 295, + 22, 296, 297, 0, 24, 0, 0, 0, 298, 299, + 300, 301, 302, 27, 0, 28, 303, 664, 0, 0, + 304, 0, 0, 0, 0, 0, 305, 0, 0, 306, + 0, 0, 0, 0, 0, 0, 0, 307, 308, 309, + 0, 0, 0, 0, 0, 310, 311, 312, 0, 0, + 0, 0, 313, 0, 0, 519, 0, 285, 8, 9, + 10, 1174, 12, 286, 287, 288, 0, 289, 14, 0, + 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 290, 18, 0, 20, 0, 291, + 292, 21, 0, 293, 294, 295, 22, 296, 297, 0, + 24, 0, 0, 0, 298, 299, 300, 301, 302, 27, + 0, 28, 303, -275, 0, 0, 304, 0, 0, 0, + 0, 0, 305, 0, 0, 520, 0, 0, 0, 0, + 0, 0, 0, 307, 308, 521, 0, 0, 0, 0, + 0, 310, 311, 312, 0, 0, 0, 663, 522, 285, + 8, 9, 10, 0, 12, 501, 287, 288, 0, 289, + 14, 0, 0, 0, 0, 0, 314, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 290, 18, 0, 20, + 0, 291, 292, 21, 0, 293, 294, 295, 22, 296, + 297, 0, 24, 0, 0, 0, 298, 299, 300, 301, + 302, 27, 0, 28, 303, 664, 0, 0, 304, 0, + 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, + 0, 0, 0, 0, 0, 307, 308, 309, 0, 0, + 0, 0, 0, 310, 311, 312, 0, 0, 0, 768, + 313, 285, 8, 9, 10, 0, 12, 501, 287, 288, + 0, 289, 14, 0, 0, 0, 0, 0, 314, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 290, 18, + 0, 20, 0, 291, 292, 21, 0, 293, 294, 295, + 22, 296, 297, 0, 24, 0, 0, 0, 298, 299, + 300, 301, 302, 27, 0, 28, 303, 0, 0, 0, + 304, -738, 0, 0, 0, 0, 305, 0, 0, 306, + 0, 0, 0, 0, 0, 0, 0, 307, 308, 309, + 0, 0, 0, 0, 0, 310, 311, 312, 0, 0, + 0, 519, 313, 7, 8, 9, 10, 0, 12, 286, + 287, 288, 0, 289, 14, 0, 0, 0, 0, 0, + 314, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 290, 18, 0, 20, 0, 291, 292, 21, 0, 293, + 294, 295, 22, 296, 297, 0, 24, 0, 0, 0, + 298, 299, 300, 301, 302, 27, 0, 28, 29, -275, + 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, + 0, 1388, 0, 0, 0, 0, 0, 0, 0, 307, + 308, 1389, 0, 0, 0, 0, 0, 310, 311, 312, + 0, 0, 0, 1487, 1390, 285, 8, 9, 10, 0, + 12, 286, 287, 288, 0, 289, 14, 0, 0, 0, + 0, 0, 314, 0, 0, 0, 0, 0, 0, 0, + 0, 17, 290, 18, 0, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 0, 0, 298, 299, 300, 301, 302, 27, 0, 28, + 303, 0, 0, -163, 304, 0, 0, 0, 0, 0, + 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 0, 0, 0, 0, 0, 310, + 311, 312, 0, 0, 0, 768, 313, 285, 8, 9, + 10, 0, 12, 501, 287, 288, 0, 289, 14, 0, + 0, 0, 0, 0, 314, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 290, 18, 0, 20, 0, 291, + 292, 21, 0, 293, 294, 295, 22, 296, 297, 0, + 24, 0, 0, 0, 298, 299, 300, 301, 302, 27, + 0, 28, 303, 0, 0, 0, 304, 0, 0, 0, + 0, 0, 305, 248, 0, 306, 8, 9, 0, 0, + 12, 13, 0, 307, 308, 309, 14, 0, 0, 0, + 0, 310, 311, 312, 0, 0, 0, 0, 313, 0, + 0, 17, 0, 18, 0, 0, 0, 0, 0, 21, + 0, 249, 250, 0, -738, 0, 314, 0, 24, 0, + 251, 0, 0, 0, 0, 0, 0, 27, 0, 129, + 130, 0, 252, 0, 0, 0, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 0, 0, 274, + 275, 276, 0, 0, 277, 0, 848, 278, 285, 8, + 9, 10, 0, 12, 501, 287, 288, 0, 289, 14, + 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 290, 18, 0, 20, 0, + 291, 292, 21, 0, 293, 294, 295, 22, 296, 297, + 0, 24, 0, 0, 0, 298, 299, 300, 301, 302, + 27, 0, 28, 303, 0, 0, 0, 304, 0, 0, + 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, + 0, 0, 0, 0, 307, 308, 309, 0, 0, 0, + 0, 0, 310, 311, 312, 0, 0, 0, 850, 313, + 285, 8, 9, 10, 0, 12, 501, 287, 288, 0, + 289, 14, 0, 0, 0, 0, 0, 314, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 290, 18, 0, + 20, 0, 291, 292, 21, 0, 293, 294, 295, 22, + 296, 297, 0, 24, 0, 0, 0, 298, 299, 300, + 301, 302, 27, 0, 28, 303, 0, 0, 0, 304, + 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, + 0, 0, 0, 0, 0, 0, 307, 308, 309, 0, + 0, 0, 0, 0, 310, 311, 312, 0, 0, 0, + 1401, 313, 285, 8, 9, 10, 0, 12, 501, 287, + 288, 0, 289, 14, 0, 0, 0, 0, 0, 314, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 290, + 18, 0, 20, 0, 291, 292, 21, 0, 293, 294, + 295, 22, 296, 297, 0, 24, 0, 0, 0, 298, + 299, 300, 301, 302, 27, 0, 28, 303, 0, 0, + 0, 304, 0, 0, 0, 0, 0, 305, 0, 0, + 306, 0, 0, 0, 0, 0, 0, 0, 307, 308, + 309, 0, 0, 0, 0, 0, 310, 311, 312, 285, + 8, 9, 10, 313, 12, 501, 287, 288, 0, 289, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 314, 0, 0, 0, 17, 290, 18, 0, 20, + 0, 291, 292, 21, 0, 293, 294, 295, 22, 296, + 297, 0, 24, 0, 0, 0, 298, 299, 300, 301, + 302, 27, 0, 28, 303, 0, 0, 0, 304, 0, + 0, 0, 0, 0, 305, 0, 925, 306, 7, 8, + 926, 10, 134, 12, 13, 307, 308, 309, 0, 14, + 0, 0, 0, 310, 311, 312, 0, 0, 0, 0, + 313, 0, 0, 0, 17, 0, 18, 19, 20, 0, + 0, 0, 21, -487, 0, 0, 0, 22, 314, 807, + 0, 24, 927, 0, 928, 0, 0, 0, 0, 0, + 27, 0, 28, 29, 0, 0, 929, 0, 930, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, - 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, - 0, 0, 0, 0, 1159, 0, 0, 0, 0, 1159, - 0, 684, 0, 0, 0, 0, -474, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 173, 0, 173, 0, 0, 0, 206, 0, - 0, 0, 0, 666, 0, 7, 8, 667, 119, 11, - 12, 0, 0, 603, 604, 13, 606, 0, 0, 0, - 0, 542, 542, 542, 542, 542, 0, 0, 0, 542, - 16, 0, 17, 18, 0, 0, 0, 0, 20, 0, - 0, 0, 0, 21, 801, 801, 801, 23, 668, 0, - 669, 0, 0, 0, 0, 0, 26, 0, 27, 28, - 95, 0, 0, 0, 671, 0, 0, 0, 95, 0, - 0, 1010, 30, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, - 32, 0, 0, 0, 0, 33, 0, 0, 0, 95, - 95, 95, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 1010, 1010, 1010, 0, 0, 0, 0, 0, - 1294, 0, 0, 0, 0, 0, 542, 542, 0, 542, - 0, 0, 0, 1244, 0, -428, -428, -428, -428, -428, - -428, 0, 173, -428, 0, -428, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, -428, 0, -428, -428, - 0, 0, 0, -428, 0, 0, 0, 0, -428, 0, - 0, 0, 0, -428, 0, 0, 0, -428, 0, -428, - 95, 0, 95, 0, 0, 0, -428, 0, -428, -428, - -428, -428, -428, 95, -428, -428, -428, -428, -428, -428, - -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, - -428, -428, -428, -428, -428, -428, -428, 0, -428, -428, - -428, 0, -428, -428, -428, -428, -428, -428, 0, -428, - -428, 0, 0, 0, 0, 1245, 0, 0, 0, 0, - -428, -428, -428, 0, -428, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, - 511, 512, 513, 95, 95, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1081, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1297, 0, 1195, 1196, 1197, - 119, 11, 265, 266, 267, 95, 268, 13, 1198, 0, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, - 14, 15, 16, 269, 17, 18, 19, 0, 270, 271, - 20, 0, 272, 273, 274, 21, 275, 276, 0, 23, - 0, 0, 0, 277, 278, 279, 280, 281, 26, 0, - 1209, 28, 614, 0, 1210, 282, 0, 95, 95, 0, - 95, 283, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 0, 287, 288, 289, 0, 0, 0, 0, 0, - 290, 291, 292, 0, 0, 0, 0, 293, 0, 1211, + 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 0, 0, 0, 34, + 0, 0, 0, 1232, 1233, 1234, 10, 134, 12, 286, + 287, 288, 0, 289, 14, 1235, -487, 1236, 1237, 1238, + 1239, 1240, 1241, 1242, 1243, 1244, 1245, 15, 16, 17, + 290, 18, 19, 20, 0, 291, 292, 21, 0, 293, + 294, 295, 22, 296, 297, 0, 24, 0, 0, 0, + 298, 299, 300, 301, 302, 27, 0, 1246, 303, 660, + 0, 1247, 304, 0, 0, 0, 0, 0, 305, 0, + 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, + 308, 309, 0, 0, 0, 0, 0, 310, 311, 312, + 0, 0, 0, 0, 313, 0, 1248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1298, 294, 492, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 0, 1347, 314, 1232, 1233, 1234, 10, 134, 12, 286, + 287, 288, 0, 289, 14, 1235, 0, 1236, 1237, 1238, + 1239, 1240, 1241, 1242, 1243, 1244, 1245, 15, 16, 17, + 290, 18, 19, 20, 0, 291, 292, 21, 0, 293, + 294, 295, 22, 296, 297, 0, 24, 0, 0, 0, + 298, 299, 300, 301, 302, 27, 0, 1246, 303, 660, + 0, 1247, 304, 0, 0, 0, 0, 0, 305, 0, + 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, + 308, 309, 0, 0, 0, 0, 0, 310, 311, 312, + 0, 0, 0, 0, 313, 0, 1248, 0, 0, 1232, + 1233, 1234, 10, 134, 12, 286, 287, 288, 0, 289, + 14, 1235, 314, 1236, 1237, 1238, 1239, 1240, 1241, 1242, + 1243, 1244, 1245, 15, 16, 17, 290, 18, 19, 20, + 0, 291, 292, 21, 0, 293, 294, 295, 22, 296, + 297, 0, 24, 0, 0, 0, 298, 299, 300, 301, + 302, 27, 0, 1246, 303, 1462, 0, 1247, 304, 0, + 0, 0, 0, 0, 305, 0, 0, 306, 0, 0, + 0, 0, 0, 0, 0, 307, 308, 309, 0, 0, + 0, 0, 0, 310, 311, 312, 0, 0, 0, 0, + 313, 0, 1248, 0, 0, 1232, 1233, 1234, 10, 134, + 12, 286, 287, 288, 0, 289, 14, 1235, 314, 1236, + 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 15, + 16, 17, 290, 18, 19, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 0, 0, 298, 299, 300, 301, 302, 27, 0, 1246, + 303, 0, 0, 1247, 304, 0, 0, 0, 0, 0, + 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 0, 0, 0, 0, 0, 310, + 311, 312, 0, 0, 0, 0, 313, 0, 1248, 285, + 8, 9, 10, 134, 12, 286, 287, 288, 673, 289, + 14, 0, 0, 0, 314, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 290, 18, 19, 20, + 0, 291, 292, 21, 0, 293, 294, 295, 22, 296, + 297, 0, 24, 0, 580, 0, 298, 299, 300, 301, + 302, 27, 0, 28, 303, 0, 0, 0, 304, 0, + 0, 0, 0, 0, 305, 0, 0, 834, 0, 0, + 0, 0, 0, 0, 0, 307, 308, 835, 0, 0, + 0, 0, 0, 310, 311, 312, 0, 583, 0, 0, + 836, 585, 0, 0, 674, 7, 8, 9, 10, 134, + 12, 286, 287, 288, 673, 289, 14, 0, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1347, 0, 0, 95, 1194, 95, 1195, 1196, 1197, - 119, 11, 265, 266, 267, 0, 268, 13, 1198, 0, - 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, - 14, 15, 16, 269, 17, 18, 19, 0, 270, 271, - 20, 0, 272, 273, 274, 21, 275, 276, 0, 23, - 0, 0, 0, 277, 278, 279, 280, 281, 26, 0, - 1209, 28, 614, 0, 1210, 282, 0, 0, 0, 0, - 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 0, 287, 288, 289, 0, 0, 0, 0, 0, - 290, 291, 292, 0, 0, 0, 0, 293, 476, 1211, - 7, 8, 9, 119, 11, 265, 266, 267, 627, 268, - 13, 0, 0, 0, 0, 294, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 269, 17, 18, 19, - 0, 270, 271, 20, 0, 272, 273, 274, 21, 275, - 276, 0, 23, 0, 536, 0, 277, 278, 279, 280, - 281, 26, 0, 27, 28, -264, 0, 0, 282, 0, - 0, 0, 0, 0, 283, 0, 0, 797, 0, 0, - 0, 0, 0, 0, 0, 287, 288, 798, 0, 0, - 0, 0, 0, 290, 291, 292, 0, 539, 0, 0, - 799, 541, 0, 476, 628, 7, 8, 9, 119, 11, - 265, 266, 267, 627, 268, 13, 0, 0, 294, 0, + 0, 17, 290, 18, 19, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 580, 0, 298, 299, 300, 301, 302, 27, 0, 28, + 29, 0, 0, 0, 304, 0, 0, 0, 0, 0, + 305, 0, 0, 1051, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 1052, 0, 0, 0, 0, 0, 310, + 311, 312, 0, 583, 0, 0, 1053, 585, 0, 0, + 674, 285, 8, 9, 10, 0, 12, 286, 287, 288, + 0, 289, 14, 0, 314, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 290, 18, + 0, 20, 0, 291, 292, 21, 0, 293, 294, 295, + 22, 296, 297, 0, 24, 0, 0, 0, 298, 299, + 300, 301, 302, 27, 0, 28, 303, 0, 0, 0, + 304, 0, 0, 0, 0, 0, 305, 0, 0, 306, + 0, 0, 0, 0, 339, 0, 340, 307, 308, 309, + 0, 0, 0, 0, 0, 310, 311, 312, 285, 8, + 9, 10, 313, 12, 286, 287, 288, 0, 289, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 269, 17, 18, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 536, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - -264, 0, 0, 282, 0, 0, 0, 0, 0, 283, - 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 1029, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 539, 0, 0, 1030, 541, 0, 733, 628, - 7, 8, 9, 119, 11, 265, 266, 267, 0, 268, - 13, 0, 0, 294, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 269, 17, 18, 19, - 0, 270, 271, 20, 0, 272, 273, 274, 21, 275, - 276, 0, 23, 0, 0, 0, 277, 278, 279, 280, - 281, 26, 0, 27, 28, 1359, 0, -710, 282, 0, - 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 287, 288, 289, 0, 0, - 0, 0, 0, 290, 291, 292, 0, 0, 0, 617, - 293, 721, 722, 723, 0, 11, 458, 266, 267, 0, - 268, 13, 0, 0, 0, 0, 0, 0, 294, 0, - 0, 0, 0, 0, 0, 0, 16, 269, 17, 0, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 724, 725, 618, 0, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 0, 0, - 0, 293, 726, 617, 0, 721, 722, 723, 0, 11, - 458, 266, 267, 0, 268, 13, 0, 0, 851, 294, - 0, 0, 1083, 0, 0, 0, 0, 0, 0, 0, - 16, 269, 17, 0, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 0, - 0, 277, 278, 279, 280, 281, 26, 0, 724, 725, - 618, 0, 0, 282, 0, 0, 0, 0, 0, 283, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 289, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 0, 0, 0, 293, 617, 0, 721, 722, - 723, 0, 11, 458, 266, 267, 0, 268, 13, 0, - 0, 0, -432, 294, 0, 1083, 0, 0, 0, 0, - 0, 0, 0, 16, 269, 17, 0, 19, 0, 270, - 271, 20, 0, 272, 273, 274, 21, 275, 276, 0, - 23, 0, 0, 0, 277, 278, 279, 280, 281, 26, - 0, 724, 725, 618, 0, 0, 282, 0, 0, 0, - 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, - 0, 0, 0, 287, 288, 289, 0, 0, 0, 0, - 0, 290, 291, 292, 0, 0, 0, 617, 293, 721, - 722, 723, 0, 11, 458, 266, 267, 0, 268, 13, - 0, 0, 0, 0, 0, 1126, 294, 0, 0, 0, - 0, 0, 0, 0, 16, 269, 17, 0, 19, 0, - 270, 271, 20, 0, 272, 273, 274, 21, 275, 276, - 0, 23, 0, 0, 0, 277, 278, 279, 280, 281, - 26, 0, 724, 725, 618, 0, 0, 282, 0, 0, - 0, 0, 0, 283, 0, 0, 284, 0, 0, 0, - 0, 0, 0, 0, 287, 288, 289, 0, 0, 0, - 0, 0, 290, 291, 292, 0, 0, 0, 0, 293, - 726, 617, 0, 7, 8, 9, 0, 11, 458, 266, - 267, 0, 268, 13, 0, 0, 0, 294, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 16, 269, - 17, 0, 19, 0, 270, 271, 20, 0, 272, 273, - 274, 21, 275, 276, 0, 23, 0, 0, 0, 277, - 278, 279, 280, 281, 26, 0, 27, 28, 618, 0, - 0, 282, 229, 0, 0, 8, 9, 283, 11, 12, - 284, 0, 0, 0, 13, 0, 0, 0, 287, 288, - 289, 0, 0, 0, 0, 0, 290, 291, 292, 16, - 0, 17, 0, 293, 0, 0, 0, 20, 0, 230, - 231, 0, 1130, 0, 0, 0, 23, 0, 232, 0, - 0, 294, 0, 0, 0, 26, 0, 111, 112, 0, - 233, 0, 0, 0, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 0, 0, 255, 256, 257, - 0, 0, 258, 0, 476, 259, 7, 8, 9, 0, - 11, 265, 266, 267, 0, 268, 13, 0, 0, 0, - 0, 0, 260, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 269, 17, 0, 19, 0, 270, 271, 20, - 0, 272, 273, 274, 21, 275, 276, 0, 23, 0, - 0, 0, 277, 278, 279, 280, 281, 26, 0, 27, - 28, -264, 0, 0, 282, 0, 0, 0, 0, 0, - 283, 0, 0, 477, 0, 0, 0, 0, 0, 0, - 0, 287, 288, 478, 0, 0, 0, 0, 0, 290, - 291, 292, 0, 0, 0, 617, 479, 7, 8, 9, - 0, 11, 458, 266, 267, 0, 268, 13, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, - 0, 0, 16, 269, 17, 0, 19, 0, 270, 271, - 20, 0, 272, 273, 274, 21, 275, 276, 0, 23, - 0, 0, 0, 277, 278, 279, 280, 281, 26, 0, - 27, 28, 618, 0, 0, 282, 0, 0, 0, 0, - 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 0, 287, 288, 289, 0, 0, 0, 0, 0, - 290, 291, 292, 0, 0, 0, 733, 293, 7, 8, - 9, 0, 11, 458, 266, 267, 0, 268, 13, 0, - 0, 0, 0, 0, 0, 294, 0, 0, 0, 0, - 0, 0, 0, 16, 269, 17, 0, 19, 0, 270, - 271, 20, 0, 272, 273, 274, 21, 275, 276, 0, - 23, 0, 0, 0, 277, 278, 279, 280, 281, 26, - 0, 27, 28, 0, 0, 0, 282, -710, 0, 0, - 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, - 0, 0, 0, 287, 288, 289, 0, 0, 0, 0, - 0, 290, 291, 292, 0, 0, 0, 476, 293, 7, - 8, 9, 0, 11, 265, 266, 267, 0, 268, 13, - 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, - 0, 0, 0, 0, 16, 269, 17, 0, 19, 0, - 270, 271, 20, 0, 272, 273, 274, 21, 275, 276, - 0, 23, 0, 0, 0, 277, 278, 279, 280, 281, - 26, 0, 27, 28, -264, 0, 0, 282, 0, 0, - 0, 0, 0, 283, 0, 0, 1336, 0, 0, 0, - 0, 0, 0, 0, 287, 288, 1337, 0, 0, 0, - 0, 0, 290, 291, 292, 0, 0, 0, 1426, 1338, - 7, 8, 9, 0, 11, 265, 266, 267, 0, 268, - 13, 0, 0, 0, 0, 0, 0, 294, 0, 0, - 0, 0, 0, 0, 0, 16, 269, 17, 0, 19, - 0, 270, 271, 20, 0, 272, 273, 274, 21, 275, - 276, 0, 23, 0, 0, 0, 277, 278, 279, 280, - 281, 26, 0, 27, 28, 0, 0, -163, 282, 0, - 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 287, 288, 289, 0, 0, - 0, 0, 0, 290, 291, 292, 0, 0, 0, 733, - 293, 7, 8, 9, 0, 11, 458, 266, 267, 0, - 268, 13, 0, 0, 0, 0, 0, 0, 294, 0, - 0, 0, 0, 0, 0, 0, 16, 269, 17, 0, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 27, 28, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 0, 0, - 811, 293, 7, 8, 9, 0, 11, 458, 266, 267, - 0, 268, 13, 0, 0, 0, 0, -710, 0, 294, - 0, 0, 0, 0, 0, 0, 0, 16, 269, 17, - 0, 19, 0, 270, 271, 20, 0, 272, 273, 274, - 21, 275, 276, 0, 23, 0, 0, 0, 277, 278, - 279, 280, 281, 26, 0, 27, 28, 0, 0, 0, - 282, 0, 0, 0, 0, 0, 283, 0, 0, 284, - 0, 0, 0, 0, 0, 0, 0, 287, 288, 289, - 0, 0, 0, 0, 0, 290, 291, 292, 0, 0, - 0, 813, 293, 7, 8, 9, 0, 11, 458, 266, - 267, 0, 268, 13, 0, 0, 0, 0, 0, 0, - 294, 0, 0, 0, 0, 0, 0, 0, 16, 269, - 17, 0, 19, 0, 270, 271, 20, 0, 272, 273, - 274, 21, 275, 276, 0, 23, 0, 0, 0, 277, - 278, 279, 280, 281, 26, 0, 27, 28, 0, 0, - 0, 282, 0, 0, 0, 0, 0, 283, 0, 0, - 284, 0, 0, 0, 0, 0, 0, 0, 287, 288, - 289, 0, 0, 0, 0, 0, 290, 291, 292, 0, - 0, 0, 1311, 293, 7, 8, 9, 0, 11, 458, - 266, 267, 0, 268, 13, 0, 0, 0, 0, 0, - 0, 294, 0, 0, 0, 0, 0, 0, 0, 16, - 269, 17, 0, 19, 0, 270, 271, 20, 0, 272, - 273, 274, 21, 275, 276, 0, 23, 0, 0, 0, - 277, 278, 279, 280, 281, 26, 0, 27, 28, 0, - 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, - 0, 284, 0, 0, 0, 0, 0, 0, 0, 287, - 288, 289, 0, 0, 0, 0, 0, 290, 291, 292, - 0, 7, 8, 9, 293, 11, 458, 266, 267, 0, - 268, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 16, 269, 17, 0, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 27, 28, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 0, 0, - 0, 293, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 772, 1195, 1196, 1197, 119, 11, 265, 266, 267, 0, - 268, 13, 1198, 0, 1199, 1200, 1201, 1202, 1203, 1204, - 1205, 1206, 1207, 1208, 14, 15, 16, 269, 17, 18, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 1209, 28, 614, 0, 1210, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 0, 0, - 0, 293, 0, 1211, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1302, 294, - 1195, 1196, 1197, 119, 11, 265, 266, 267, 0, 268, - 13, 1198, 0, 1199, 1200, 1201, 1202, 1203, 1204, 1205, - 1206, 1207, 1208, 14, 15, 16, 269, 17, 18, 19, - 0, 270, 271, 20, 0, 272, 273, 274, 21, 275, - 276, 0, 23, 0, 0, 0, 277, 278, 279, 280, - 281, 26, 0, 1209, 28, 614, 0, 1210, 282, 0, - 0, 0, 0, 0, 283, 0, 0, 284, 0, 0, - 0, 0, 0, 0, 0, 287, 288, 289, 0, 0, - 0, 0, 0, 290, 291, 292, 0, 0, 0, 0, - 293, 0, 1211, 0, 0, 0, 1195, 1196, 1197, 119, - 11, 265, 266, 267, 0, 268, 13, 1198, 294, 1199, - 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 14, - 15, 16, 269, 17, 18, 19, 0, 270, 271, 20, - 0, 272, 273, 274, 21, 275, 276, 0, 23, 0, - 0, 0, 277, 278, 279, 280, 281, 26, 0, 1209, - 28, 1403, 0, 1210, 282, 0, 0, 0, 0, 0, - 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, - 0, 287, 288, 289, 0, 0, 0, 0, 0, 290, - 291, 292, 0, 0, 0, 0, 293, 0, 1211, 0, - 0, 0, 1195, 1196, 1197, 119, 11, 265, 266, 267, - 0, 268, 13, 1198, 294, 1199, 1200, 1201, 1202, 1203, - 1204, 1205, 1206, 1207, 1208, 14, 15, 16, 269, 17, - 18, 19, 0, 270, 271, 20, 0, 272, 273, 274, - 21, 275, 276, 0, 23, 0, 0, 0, 277, 278, - 279, 280, 281, 26, 0, 1209, 28, 0, 0, 1210, - 282, 0, 0, 0, 0, 0, 283, 0, 0, 284, - 0, 0, 0, 0, 0, 0, 0, 287, 288, 289, - 0, 0, 0, 0, 0, 290, 291, 292, 0, 0, - 0, 0, 293, 0, 1211, 7, 8, 9, 119, 11, - 265, 266, 267, 627, 268, 13, 0, 0, 0, 0, - 294, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 269, 17, 18, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 536, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, - 0, 0, 797, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 798, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 539, 0, 0, 799, 541, 0, 0, 628, - 7, 8, 9, 119, 11, 265, 266, 267, 627, 268, - 13, 0, 0, 294, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 16, 269, 17, 18, 19, - 0, 270, 271, 20, 0, 272, 273, 274, 21, 275, - 276, 0, 23, 0, 536, 0, 277, 278, 279, 280, - 281, 26, 0, 27, 28, 0, 0, 0, 282, 0, - 0, 0, 0, 0, 283, 0, 0, 1028, 0, 0, - 0, 0, 0, 0, 0, 287, 288, 1029, 0, 0, - 0, 0, 0, 290, 291, 292, 0, 539, 0, 0, - 1030, 541, 0, 0, 628, 7, 8, 9, 0, 11, - 265, 266, 267, 0, 268, 13, 0, 0, 294, 0, + 314, 0, 0, 0, 17, 290, 18, 0, 20, 0, + 291, 292, 21, 0, 293, 294, 295, 22, 296, 297, + 0, 24, 0, 580, 0, 298, 299, 300, 301, 302, + 27, 0, 28, 303, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 305, 0, 0, 834, 0, 0, 0, + 0, 0, 0, 0, 307, 308, 835, 0, 0, 0, + 0, 0, 310, 311, 312, 0, 583, 0, 0, 836, + 585, 7, 8, 9, 10, 0, 12, 286, 287, 288, + 0, 289, 14, 0, 0, 0, 0, 314, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 17, 290, 18, + 0, 20, 0, 291, 292, 21, 0, 293, 294, 295, + 22, 296, 297, 0, 24, 0, 580, 0, 298, 299, + 300, 301, 302, 27, 0, 28, 29, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 305, 0, 0, 1051, + 0, 0, 0, 0, 0, 0, 0, 307, 308, 1052, + 0, 0, 0, 0, 0, 310, 311, 312, 0, 583, + 0, 0, 1053, 585, 285, 8, 9, 10, 0, 12, + 501, 287, 288, 0, 289, 14, 0, 0, 0, 0, + 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 17, 290, 18, 0, 20, 0, 291, 292, 21, 0, + 293, 294, 295, 22, 296, 297, 0, 24, 0, 0, + 0, 298, 299, 300, 301, 302, 27, 0, 28, 303, + 0, 0, 1324, 304, 0, 0, 0, 0, 0, 305, + 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, + 307, 308, 309, 0, 0, 0, 0, 0, 310, 311, + 312, 0, 0, 0, 0, 313, 285, 8, 9, 10, + 134, 12, 286, 287, 288, 0, 289, 14, 0, 0, + 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 290, 18, 19, 20, 0, 291, 292, + 21, 0, 293, 294, 295, 22, 296, 297, 0, 24, + 0, 0, 0, 298, 299, 300, 301, 302, 27, 0, + 28, 303, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 305, 0, 0, 306, 0, 0, 0, 0, 0, + 0, 0, 307, 308, 309, 0, 0, 0, 0, 0, + 310, 311, 312, 285, 8, 9, 10, 313, 12, 286, + 287, 288, 0, 289, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 314, 0, 0, 0, 17, + 290, 18, 0, 20, 0, 291, 292, 21, 0, 293, + 294, 295, 22, 296, 297, 0, 24, 0, 0, 0, + 298, 299, 300, 301, 302, 27, 0, 28, 303, 0, + 0, 0, 304, 0, 0, 0, 0, 0, 305, 0, + 0, 306, 0, 0, 0, 0, 0, 0, 0, 307, + 308, 309, 0, 0, 0, 0, 0, 310, 311, 312, + 285, 8, 9, 10, 313, 12, 501, 287, 288, 0, + 289, 14, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 314, 0, 0, 0, 17, 290, 18, 0, + 20, 0, 291, 292, 21, 0, 293, 294, 295, 22, + 296, 297, 0, 24, 0, 0, 0, 298, 299, 300, + 301, 302, 27, 0, 28, 303, 0, 0, 0, 304, + 0, 0, 0, 0, 0, 305, 0, 0, 306, 0, + 0, 0, 0, 0, 0, 0, 307, 308, 309, 0, + 0, 0, 0, 0, 310, 311, 312, 285, 8, 9, + 10, 313, 12, 501, 287, 288, 0, 289, 14, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 314, + 0, 0, 0, 17, 290, 18, 0, 20, 0, 291, + 292, 21, 0, 293, 294, 295, 22, 296, 297, 0, + 24, 0, 0, 0, 298, 299, 300, 301, 302, 27, + 0, 28, 303, 532, 0, 0, 0, 0, 0, 0, + 0, 0, 305, 0, 0, 306, 0, 0, 0, 0, + 0, 0, 0, 307, 308, 309, 0, 0, 0, 0, + 0, 310, 311, 312, 285, 8, 9, 10, 533, 12, + 501, 287, 288, 0, 289, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, + 17, 290, 18, 0, 20, 0, 291, 292, 21, 0, + 293, 294, 295, 22, 296, 297, 0, 24, 0, 0, + 0, 298, 299, 300, 301, 302, 27, 0, 28, 303, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, + 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, + 307, 308, 309, 0, 0, 0, 0, 0, 310, 311, + 312, 0, 0, 0, 0, 313, 569, 285, 8, 9, + 10, 0, 12, 501, 287, 288, 0, 289, 14, 0, + 0, 0, 0, 314, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 290, 18, 0, 20, 0, 291, + 292, 21, 0, 293, 294, 295, 22, 296, 297, 0, + 24, 0, 0, 0, 298, 299, 300, 301, 302, 27, + 0, 28, 303, 0, 0, 0, 304, 0, 0, 0, + 0, 0, 305, 0, 0, 520, 0, 0, 0, 0, + 0, 0, 0, 307, 308, 521, 0, 0, 0, 0, + 0, 310, 311, 312, 1023, 8, 9, 10, 522, 12, + 501, 287, 288, 0, 289, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 314, 0, 0, 0, + 17, 290, 18, 0, 20, 0, 291, 292, 21, 0, + 293, 294, 295, 22, 296, 297, 0, 24, 0, 0, + 0, 298, 299, 300, 301, 302, 27, 0, 28, 303, + 0, 0, 0, 304, 0, 0, 0, 0, 0, 305, + 0, 0, 306, 0, 0, 0, 0, 0, 0, 0, + 307, 308, 309, 0, 0, 0, 0, 0, 310, 311, + 312, 7, 8, 9, 10, 313, 12, 501, 287, 288, + 0, 289, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 314, 0, 0, 0, 17, 290, 18, + 0, 20, 0, 291, 292, 21, 0, 293, 294, 295, + 22, 296, 297, 0, 24, 0, 0, 0, 298, 299, + 300, 301, 302, 27, 0, 28, 29, 0, 0, 0, + 304, 0, 0, 0, 0, 0, 305, 0, 0, 1388, + 0, 0, 0, 0, 0, 0, 0, 307, 308, 1389, + 0, 0, 0, 0, 0, 310, 311, 312, 285, 8, + 9, 10, 1390, 12, 501, 287, 288, 0, 289, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 269, 17, 0, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 0, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - 0, 0, 0, 282, 0, 0, 0, 0, 0, 283, - 0, 0, 284, 0, 0, 0, 0, 285, 0, 286, - 287, 288, 289, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 7, 8, 9, 293, 11, 265, 266, 267, - 0, 268, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 16, 269, 17, - 0, 19, 0, 270, 271, 20, 0, 272, 273, 274, - 21, 275, 276, 0, 23, 0, 536, 0, 277, 278, - 279, 280, 281, 26, 0, 27, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 283, 0, 0, 797, - 0, 0, 0, 0, 0, 0, 0, 287, 288, 798, - 0, 0, 0, 0, 0, 290, 291, 292, 0, 539, - 0, 0, 799, 541, 7, 8, 9, 0, 11, 265, - 266, 267, 0, 268, 13, 0, 0, 0, 0, 0, - 294, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 269, 17, 0, 19, 0, 270, 271, 20, 0, 272, - 273, 274, 21, 275, 276, 0, 23, 0, 536, 0, - 277, 278, 279, 280, 281, 26, 0, 27, 28, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, - 0, 1028, 0, 0, 0, 0, 0, 0, 0, 287, - 288, 1029, 0, 0, 0, 0, 0, 290, 291, 292, - 0, 539, 0, 0, 1030, 541, 7, 8, 9, 0, - 11, 458, 266, 267, 0, 268, 13, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 0, 0, 0, 0, - 0, 16, 269, 17, 0, 19, 0, 270, 271, 20, - 0, 272, 273, 274, 21, 275, 276, 0, 23, 0, - 0, 0, 277, 278, 279, 280, 281, 26, 0, 27, - 28, 0, 0, 1279, 282, 0, 0, 0, 0, 0, - 283, 0, 0, 284, 0, 0, 0, 0, 0, 0, - 0, 287, 288, 289, 0, 0, 0, 0, 0, 290, - 291, 292, 0, 0, 0, 0, 293, 7, 8, 9, - 119, 11, 265, 266, 267, 0, 268, 13, 0, 0, - 0, 0, 0, 0, 294, 0, 0, 0, 0, 0, - 0, 0, 16, 269, 17, 18, 19, 0, 270, 271, - 20, 0, 272, 273, 274, 21, 275, 276, 0, 23, - 0, 0, 0, 277, 278, 279, 280, 281, 26, 0, - 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 283, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 0, 287, 288, 289, 0, 0, 0, 0, 0, - 290, 291, 292, 0, 7, 8, 9, 293, 11, 265, - 266, 267, 0, 268, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 0, 0, 16, - 269, 17, 0, 19, 0, 270, 271, 20, 0, 272, - 273, 274, 21, 275, 276, 0, 23, 0, 0, 0, - 277, 278, 279, 280, 281, 26, 0, 27, 28, 0, - 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, - 0, 284, 0, 0, 0, 0, 0, 0, 0, 287, - 288, 289, 0, 0, 0, 0, 0, 290, 291, 292, - 0, 7, 8, 9, 293, 11, 458, 266, 267, 0, - 268, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 16, 269, 17, 0, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 27, 28, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 289, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 7, 8, - 9, 293, 11, 458, 266, 267, 0, 268, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 0, 0, 16, 269, 17, 0, 19, 0, 270, - 271, 20, 0, 272, 273, 274, 21, 275, 276, 0, - 23, 0, 0, 0, 277, 278, 279, 280, 281, 26, - 0, 27, 28, 489, 0, 0, 0, 0, 0, 0, - 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, - 0, 0, 0, 287, 288, 289, 0, 0, 0, 0, - 0, 290, 291, 292, 0, 7, 8, 9, 490, 11, - 458, 266, 267, 0, 268, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, - 16, 269, 17, 0, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 0, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 289, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 0, 0, 0, 293, 526, 7, 8, 9, - 0, 11, 458, 266, 267, 0, 268, 13, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 0, 0, 0, - 0, 0, 16, 269, 17, 0, 19, 0, 270, 271, - 20, 0, 272, 273, 274, 21, 275, 276, 0, 23, - 0, 0, 0, 277, 278, 279, 280, 281, 26, 0, - 27, 28, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 283, 0, 0, 477, 0, 0, 0, 0, 0, - 0, 0, 287, 288, 478, 0, 0, 0, 0, 0, - 290, 291, 292, 0, 1000, 8, 9, 479, 11, 458, - 266, 267, 0, 268, 13, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 0, 0, 0, 16, - 269, 17, 0, 19, 0, 270, 271, 20, 0, 272, - 273, 274, 21, 275, 276, 0, 23, 0, 0, 0, - 277, 278, 279, 280, 281, 26, 0, 27, 28, 0, - 0, 0, 282, 0, 0, 0, 0, 0, 283, 0, - 0, 284, 0, 0, 0, 0, 0, 0, 0, 287, - 288, 289, 0, 0, 0, 0, 0, 290, 291, 292, - 0, 7, 8, 9, 293, 11, 458, 266, 267, 0, - 268, 13, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 0, 0, 0, 16, 269, 17, 0, - 19, 0, 270, 271, 20, 0, 272, 273, 274, 21, - 275, 276, 0, 23, 0, 0, 0, 277, 278, 279, - 280, 281, 26, 0, 27, 28, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 283, 0, 0, 1336, 0, - 0, 0, 0, 0, 0, 0, 287, 288, 1337, 0, - 0, 0, 0, 0, 290, 291, 292, 0, 7, 8, - 9, 1338, 11, 458, 266, 267, 0, 268, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 0, 0, 0, 16, 269, 17, 0, 19, 0, 270, - 271, 20, 0, 272, 273, 274, 21, 275, 276, 0, - 23, 0, 0, 0, 277, 278, 279, 280, 281, 26, - 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 283, 0, 0, 284, 0, 0, 0, 0, - 0, 0, 0, 287, 288, 289, 0, 0, 0, 0, - 0, 290, 291, 292, 0, 7, 8, 9, 459, 11, - 458, 266, 267, 0, 268, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 0, 0, 0, - 16, 269, 17, 0, 19, 0, 270, 271, 20, 0, - 272, 273, 274, 21, 275, 276, 0, 23, 0, 0, - 0, 277, 278, 279, 280, 281, 26, 0, 27, 28, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, - 287, 288, 289, 0, 0, 0, 0, 0, 290, 291, - 292, 0, 7, 8, 9, 462, 11, 458, 266, 267, - 0, 268, 13, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 0, 0, 0, 16, 269, 17, - 0, 19, 0, 270, 271, 20, 0, 272, 273, 274, - 21, 275, 276, 0, 23, 0, 0, 0, 277, 278, - 279, 280, 281, 26, 0, 27, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 283, 0, 0, 284, - 0, 0, 0, 0, 0, 0, 0, 287, 288, 289, - 0, 0, 0, 0, 0, 290, 291, 292, 0, 7, - 8, 9, 293, 11, 458, 266, 267, 0, 268, 13, + 314, 0, 0, 0, 17, 290, 18, 0, 20, 0, + 291, 292, 21, 0, 293, 294, 295, 22, 296, 297, + 0, 24, 0, 0, 0, 298, 299, 300, 301, 302, + 27, 0, 28, 303, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 305, 0, 0, 306, 0, 0, 0, + 0, 0, 0, 0, 307, 308, 309, 0, 0, 0, + 0, 0, 310, 311, 312, 285, 8, 9, 10, 502, + 12, 501, 287, 288, 0, 289, 14, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 314, 0, 0, + 0, 17, 290, 18, 0, 20, 0, 291, 292, 21, + 0, 293, 294, 295, 22, 296, 297, 0, 24, 0, + 0, 0, 298, 299, 300, 301, 302, 27, 0, 28, + 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 305, 0, 0, 306, 0, 0, 0, 0, 0, 0, + 0, 307, 308, 309, 0, 0, 0, 0, 0, 310, + 311, 312, 285, 8, 9, 10, 505, 12, 501, 287, + 288, 0, 289, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 314, 0, 0, 0, 17, 290, + 18, 0, 20, 0, 291, 292, 21, 0, 293, 294, + 295, 22, 296, 297, 0, 24, 0, 0, 0, 298, + 299, 300, 301, 302, 27, 0, 28, 303, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, + 306, 0, 0, 0, 0, 0, 0, 0, 307, 308, + 309, 0, 0, 0, 0, 0, 310, 311, 312, 285, + 8, 9, 10, 313, 12, 501, 287, 288, 0, 289, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 314, 0, 0, 0, 17, 290, 18, 0, 20, + 0, 291, 292, 21, 0, 293, 294, 295, 22, 296, + 297, 0, 24, 0, 0, 0, 298, 299, 300, 301, + 302, 27, 0, 28, 303, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 305, 0, 0, 520, 0, 0, + 0, 0, 0, 0, 0, 307, 308, 521, 0, 0, + 0, 0, 0, 310, 311, 312, 7, 8, 9, 10, + 522, 12, 286, 287, 288, 0, 289, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 314, 0, + 0, 0, 17, 290, 18, 0, 20, 0, 291, 292, + 21, 0, 293, 294, 295, 22, 296, 297, 0, 24, + 0, 0, 0, 298, 299, 300, 301, 302, 27, 0, + 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 305, 0, 6, 1388, 7, 8, 9, 10, 11, + 12, 13, 307, 308, 1389, 0, 14, 0, 0, 0, + 310, 311, 312, 0, 0, 0, 0, 1390, 0, 15, + 16, 17, 0, 18, 19, 20, 0, 0, 0, 21, + 0, 0, 0, 0, 22, 314, 0, 23, 24, 25, + 0, 26, 0, 0, 0, 0, 0, 27, 0, 28, + 29, 0, 166, 30, 7, 8, 9, 10, 11, 12, + 13, 0, 0, 31, 0, 14, 0, 0, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 15, 16, + 17, 33, 18, 19, 20, 0, 34, 0, 21, 0, + 0, 0, 35, 22, 0, 0, 23, 24, 25, 0, + 26, 0, 0, 0, 0, 0, 27, 0, 28, 29, + 0, 0, 30, 7, 8, 9, 10, 201, 202, 203, + 0, 0, 31, 0, 14, 0, 0, 0, 0, 0, + 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 33, 0, 19, 0, 0, 34, 0, 21, 0, 0, + 0, 35, 22, 0, 0, 0, 24, 0, 580, 0, + 0, 0, 0, 0, 0, 27, 0, 28, 29, 7, + 8, 9, 10, 201, 202, 203, 0, 0, 0, 0, + 14, 862, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 863, 0, 0, 0, 0, 0, 0, 19, 33, + 0, 583, 0, 21, 864, 585, 0, 0, 22, 0, + 0, 0, 24, 0, 580, 0, 0, 0, 0, 0, + 0, 27, 0, 28, 29, 7, 8, 9, 10, 134, + 12, 13, 0, 0, 0, 0, 14, 862, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 863, 0, 0, + 0, 17, 0, 18, 19, 33, 0, 583, 0, 21, + 898, 585, 0, 0, 22, 0, 0, 0, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, + 29, 7, 8, 9, 10, 134, 12, 13, 0, 0, + 904, 0, 14, 31, 0, 0, 0, 135, 0, 0, + 0, 0, 0, 32, 0, 0, 0, 17, 0, 18, + 19, 33, 0, 0, 0, 21, 34, 0, 0, 0, + 22, 0, 0, 0, 24, 0, 1086, 8, 926, 10, + 192, 12, 193, 27, 0, 28, 29, 14, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 0, 0, 17, 0, 18, 19, 0, 0, 0, 32, + 21, 0, 0, 0, 0, 22, 0, 33, 0, 24, + 0, 0, 34, 0, 0, 0, 0, 0, 27, 0, + 28, 29, 0, 0, 0, 0, 1088, 7, 8, 9, + 10, 192, 12, 193, 31, 0, 0, 0, 14, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, + 0, 0, 33, 17, 0, 18, 19, 34, 0, 0, + 0, 21, 0, 0, 0, 0, 22, 0, 0, 0, + 24, 0, 7, 8, 9, 10, 134, 12, 13, 27, + 0, 28, 29, 14, 0, 1337, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 0, 0, 17, 0, + 18, 19, 0, 0, 0, 32, 21, 0, 0, 0, + 0, 22, 0, 33, 0, 24, 0, 0, 34, 0, + 0, 0, 0, 0, 27, 0, 28, 29, 7, 8, + 9, 10, 192, 12, 193, 0, 0, 0, 0, 14, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 17, 0, 18, 19, 33, 0, + 0, 0, 21, 34, 0, 0, 0, 22, 0, 0, + 0, 24, 0, 7, 8, 9, 10, 201, 202, 203, + 27, 0, 28, 29, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, + 0, 0, 19, 0, 0, 0, 32, 21, 0, 0, + 0, 0, 22, 0, 33, 1378, 24, 0, 580, 34, + 0, 0, 0, 0, 0, 27, 0, 28, 29, 535, + 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, + 546, 180, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 181, 0, 0, 0, 0, 0, 0, 0, 33, + 0, 0, 0, 0, 1340, 0, 1379, 535, 536, 537, + 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, + 548, 549, 550, 551, 552, 553, 554, 555, 556, 8, + 9, 0, 134, 12, 13, 0, 8, 9, 0, 14, + 12, 230, 0, 8, 9, 0, 14, 12, 13, 0, + 0, 0, 0, 14, 17, 0, 18, 19, 0, 0, + 0, 17, 21, 18, 0, 0, 19, 0, 17, 21, + 18, 634, 0, 0, 0, 0, 21, 0, 24, 0, + 27, 0, 129, 130, 0, 24, 0, 27, 0, 129, + 130, 0, 0, 0, 27, 0, 129, 130, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, + 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, + 555, 556, 535, 536, 537, 538, 539, 540, 541, 542, + 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, + 553, 554, 555, 556, 0, 0, 0, 0, 0, 1124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 0, 0, 0, 16, 269, 17, 0, 19, 0, - 270, 271, 20, 0, 272, 273, 274, 21, 275, 276, - 0, 23, 0, 0, 0, 277, 278, 279, 280, 281, - 26, 0, 27, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 283, 0, 0, 477, 0, 0, 0, - 0, 0, 0, 0, 287, 288, 478, 0, 0, 0, - 0, 0, 290, 291, 292, 0, 7, 8, 9, 479, - 11, 265, 266, 267, 0, 268, 13, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 0, 0, - 0, 16, 269, 17, 0, 19, 0, 270, 271, 20, - 0, 272, 273, 274, 21, 275, 276, 0, 23, 0, - 0, 0, 277, 278, 279, 280, 281, 26, 0, 27, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 283, 0, 6, 1336, 7, 8, 9, 10, 11, 12, - 0, 287, 288, 1337, 13, 0, 0, 0, 0, 290, - 291, 292, 0, 0, 0, 0, 1338, 14, 15, 16, - 0, 17, 18, 19, 0, 0, 0, 20, 0, 0, - 0, 0, 21, 0, 294, 22, 23, 24, 0, 25, - 0, 0, 0, 0, 0, 26, 0, 27, 28, 0, - 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 150, 0, 7, 8, 9, 10, 11, 12, - 0, 31, 0, 0, 13, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 33, 0, 0, 14, 15, 16, - 34, 17, 18, 19, 0, 0, 0, 20, 0, 0, - 0, 0, 21, 0, 0, 22, 23, 24, 0, 25, - 0, 0, 0, 0, 0, 26, 0, 27, 28, 0, - 0, 29, 0, 6, 0, 7, 8, 9, 10, 11, - 12, 30, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 31, 0, 0, 0, 0, 0, 0, 0, 32, - 16, 0, 17, 18, 33, 0, 0, 0, 20, 0, - 34, 0, 0, 21, 0, 0, 0, 23, 0, 0, - 376, 0, 0, 0, 0, 0, 26, 0, 27, 28, - 0, 0, 29, 0, 7, 8, 9, 119, 11, 12, - 0, 0, 30, 0, 13, 0, 0, 0, 0, 0, - 0, 0, 31, 7, 8, 9, 176, 11, 177, 16, - 32, 17, 18, 13, 0, 33, 0, 20, 0, 0, - 0, 0, 21, 0, 0, 0, 23, 0, 16, 0, - 17, 18, 0, 0, 0, 26, 20, 27, 28, 0, - 0, 21, 0, 0, 0, 23, 0, 0, 0, 0, - 0, 30, 0, 0, 26, 120, 27, 28, 0, 0, - 178, 31, 0, 0, 0, 0, 0, 0, 0, 32, - 30, 0, 0, 0, 33, 0, 0, 0, 0, 0, - 31, 7, 8, 9, 119, 11, 12, 0, 32, 866, - 0, 13, 0, 33, 0, 0, 0, 0, 0, 0, - 903, 8, 667, 176, 11, 177, 16, 0, 17, 18, - 13, 0, 0, 0, 20, 0, 0, 0, 0, 21, - 0, 0, 0, 23, 0, 16, 0, 17, 18, 0, - 0, 0, 26, 20, 27, 28, 0, 0, 21, 0, - 0, 0, 23, 0, 0, 0, 0, 0, 30, 0, - 0, 26, 0, 27, 28, 0, 0, 0, 31, 905, - 0, 0, 0, 0, 0, 0, 32, 30, 0, 0, - 0, 33, 0, 0, 0, 0, 0, 31, 7, 8, - 9, 176, 11, 177, 0, 32, 0, 0, 13, 0, - 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 16, 0, 17, 18, 0, 0, 0, - 0, 20, 0, 0, 0, 0, 21, 0, 0, 0, - 23, 0, 0, 7, 8, 9, 119, 11, 12, 26, - 0, 27, 28, 13, 0, 1292, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 16, 0, - 17, 18, 0, 0, 0, 31, 20, 0, 0, 0, - 0, 21, 0, 32, 0, 23, 0, 0, 33, 0, - 0, 0, 0, 0, 26, 0, 27, 28, 7, 8, - 9, 176, 11, 177, 0, 0, 0, 0, 13, 0, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 31, 0, 0, 16, 0, 17, 18, 0, 32, 0, - 0, 20, 0, 33, 0, 0, 21, 0, 0, 0, - 23, 0, 0, 0, 0, 0, 0, 0, 0, 26, - 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, - 0, 0, 0, 32, 0, 571, 0, 0, 33, 492, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, - 513, 1256, 492, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, - 510, 511, 512, 513, 1389, 492, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513, 492, 493, 494, - 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, - 505, 506, 507, 508, 509, 510, 511, 512, 513, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 511, 512, 513 + 0, 0, 0, 0, 617, 0, 0, 1432, 535, 536, + 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, + 1301, 535, 536, 537, 538, 539, 540, 541, 542, 543, + 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, + 554, 555, 556, 1449, 535, 536, 537, 538, 539, 540, + 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, + 551, 552, 553, 554, 555, 556, 535, 536, 537, 538, + 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, + 549, 550, 551, 552, 553, 554, 555, 556 }; static const short yycheck[] = { 4, - 145, 55, 4, 4, 612, 4, 313, 135, 136, 51, - 180, 71, 610, 319, 850, 383, 354, 410, 354, 761, - 25, 319, 431, 25, 354, 13, 58, 338, 210, 79, - 35, 268, 269, 35, 35, 40, 35, 115, 40, 40, - 118, 40, 1324, 672, 1, 215, 270, 271, 53, 0, - 188, 189, 681, 1189, 1357, 117, 118, 1212, 1053, 1054, - 284, 10, 33, 68, 301, 289, 4, 180, 292, 86, - 124, 295, 1067, 50, 79, 299, 189, 10, 1381, 84, - 122, 86, 87, 307, 10, 87, 0, 25, 8, 1359, - 78, 540, 262, 100, 101, 100, 101, 35, 547, 59, - 1219, 58, 40, 93, 62, 62, 4, 1226, 60, 126, - 690, 99, 692, 62, 37, 483, 74, 62, 123, 11, - 1, 126, 1354, 1, 184, 93, 180, 25, 93, 74, - 33, 3, 4, 5, 188, 189, 75, 35, 95, 110, - 1341, 61, 40, 313, 149, 11, 48, 149, 541, 87, - 110, 183, 1422, 11, 461, 53, 1151, 1460, 110, 191, - 109, 215, 33, 140, 1446, 1160, 1161, 59, 1163, 1324, - 62, 4, 5, 30, 31, 47, 109, 58, 1410, 1380, - 58, 62, 54, 109, 56, 57, 59, 110, 74, 87, - 354, 54, 60, 59, 171, 60, 62, 7, 8, 6, - 59, 59, 611, 13, 62, 97, 64, 59, 262, 1328, - 1411, 149, 86, 62, 95, 795, 93, 109, 60, 961, - 35, 93, 79, 56, 57, 40, 36, 84, 216, 86, - 37, 97, 396, 136, 137, 45, 109, 47, 108, 97, - 4, 5, 110, 100, 101, 613, 388, 80, 310, 1368, - 109, 149, 126, 477, 478, 1391, 306, 109, 263, 313, - 109, 559, 340, 166, 135, 136, 137, 58, 110, 126, - 324, 349, 583, 64, 402, 403, 414, 415, 135, 136, - 297, 323, 47, 93, 422, 60, 293, 349, 293, 228, - 435, 47, 56, 57, 1413, 166, 434, 635, 24, 635, - 24, 306, 415, 4, 321, 47, 54, 164, 165, 314, - 890, 62, 31, 451, 1309, 1310, 80, 1, 54, 3, - 4, 5, 902, 7, 631, 59, 74, 60, 93, 94, - 62, 319, 58, 47, 35, 110, 62, 93, 94, 40, - 58, 358, 4, 5, 109, 54, 8, 47, 1090, 354, - 799, 93, 94, 109, 934, 47, 936, 41, 109, 8, - 414, 415, 11, 58, 424, 74, 1202, 109, 422, 95, - 54, 376, 56, 57, 376, 109, 540, 58, 827, 93, - 434, 99, 1216, 547, 1218, 24, 393, 26, 27, 421, - 293, 396, 54, 93, 56, 57, 93, 451, 47, 54, - 47, 93, 94, 796, 88, 437, 59, 62, 70, 109, - 59, 860, 61, 62, 110, 64, 75, 64, 80, 58, - 47, 54, 75, 62, 77, 1261, 75, 432, 77, 62, - 432, 1382, 94, 432, 1270, 1271, 293, 64, 376, 1068, - 109, 74, 109, 1394, 93, 94, 93, 94, 97, 306, - 4, 5, 459, 1404, 459, 462, 95, 462, 47, 466, - 109, 466, 467, 468, 469, 470, 93, 3, 4, 5, - 1421, 635, 479, 523, 479, 657, 47, 659, 376, 888, - 848, 486, 664, 490, 822, 490, 822, 494, 47, 1440, - 47, 47, 822, 432, 432, 54, 94, 354, 804, 109, - 403, 404, 56, 57, 93, 94, 804, 64, 699, 700, - 701, 38, 1463, 520, 652, 74, 47, 522, 523, 526, - 56, 57, 93, 94, 47, 47, 690, 54, 692, 59, - 60, 402, 403, 404, 93, 540, 93, 93, 33, 396, - 710, 109, 547, 597, 80, 402, 403, 47, 772, 1385, - 47, 47, 594, 59, 596, 597, 459, 47, 64, 462, - 1009, 47, 93, 551, 801, 10, 3, 4, 5, 75, - 93, 93, 47, 797, 798, 478, 479, 631, 971, 59, - 3, 1030, 47, 408, 26, 27, 47, 490, 47, 631, - 595, 416, 110, 93, 599, 75, 93, 93, 652, 3, - 4, 5, 459, 93, 41, 462, 60, 93, 1017, 466, - 467, 468, 469, 470, 112, 675, 676, 93, 93, 56, - 57, 763, 479, 94, 684, 4, 5, 94, 93, 486, - 635, 795, 93, 490, 93, 799, 62, 679, 1047, 112, - 135, 136, 137, 80, 547, 93, 3, 4, 5, 93, - 54, 88, 56, 57, 58, 4, 710, 74, 822, 966, - 74, 4, 5, 827, 74, 522, 523, 672, 74, 674, - 672, 166, 674, 672, 10, 680, 681, 56, 57, 681, - 537, 538, 681, 540, 41, 690, 35, 692, 59, 60, - 547, 40, 967, 968, 110, 970, 860, 54, 109, 56, - 57, 80, 109, 885, 886, 887, 24, 59, 26, 27, - 109, 54, 47, 56, 57, 4, 5, 59, 60, 54, - 109, 4, 5, 6, 7, 8, 890, 70, 11, 60, - 13, 88, 109, 672, 672, 674, 674, 80, 902, 74, - 58, 680, 681, 681, 62, 28, 110, 30, 31, 973, - 110, 94, 1350, 36, 112, 760, 47, 112, 93, 764, - 64, 768, 45, 54, 83, 84, 1374, 56, 57, 109, - 934, 54, 936, 56, 57, 26, 27, 95, 635, 54, - 31, 679, 680, 74, 789, 112, 928, 62, 59, 60, - 795, 80, 799, 109, 799, 54, 3, 4, 5, 74, - 54, 704, 93, 62, 1028, 1029, 59, 60, 62, 60, - 952, 953, 112, 64, 97, 74, 804, 822, 58, 824, - 74, 54, 827, 54, 3, 4, 5, 109, 84, 62, - 86, 62, 109, 690, 41, 692, 109, 3, 4, 5, - 47, 74, 54, 74, 7, 1009, 906, 54, 112, 56, - 57, 93, 912, 913, 47, 860, 916, 917, 64, 110, - 920, 59, 60, 70, 59, 60, 1030, 59, 93, 874, - 126, 110, 60, 80, 881, 41, 881, 56, 57, 1007, - 1008, 88, 64, 90, 1026, 890, 93, 94, 64, 109, - 56, 57, 60, 1035, 1036, 798, 799, 902, 1040, 1041, - 1028, 1029, 62, 760, 1272, 109, 109, 402, 403, 404, - 109, 1218, 109, 64, 80, 64, 1284, 59, 64, 64, - 925, 112, 88, 925, 827, 62, 925, 75, 93, 934, - 74, 936, 789, 80, 81, 82, 83, 84, 795, 1081, - 797, 798, 799, 75, 4, 5, 75, 3, 4, 5, - 6, 7, 8, 3, 4, 5, 827, 860, 78, 79, - 80, 81, 82, 83, 84, 822, 109, 824, 825, 826, - 827, 109, 75, 1341, 109, 914, 3, 4, 5, 109, - 36, 109, 109, 3, 4, 5, 925, 925, 1212, 860, - 109, 62, 62, 59, 109, 1137, 56, 57, 54, 650, - 56, 57, 58, 860, 1009, 62, 56, 57, 58, 109, - 1378, 112, 1380, 1351, 41, 1351, 110, 874, 109, 109, - 80, 41, 94, 1030, 881, 1030, 282, 112, 1396, 56, - 57, 4, 5, 890, 88, 1177, 56, 57, 689, 47, - 691, 4, 5, 1411, 109, 902, 109, 109, 104, 105, - 106, 112, 24, 80, 26, 27, 109, 112, 1365, 110, - 80, 88, 109, 1068, 109, 59, 1068, 110, 88, 1068, - 1077, 1078, 1079, 1080, 64, 64, 62, 934, 59, 936, - 59, 1088, 93, 56, 57, 109, 58, 109, 93, 93, - 62, 93, 110, 56, 57, 11, 109, 109, 1158, 1159, - 7, 110, 112, 4, 5, 1008, 1009, 3, 4, 5, - 26, 27, 1336, 1337, 1256, 31, 109, 80, 1123, 64, - 112, 1123, 1123, 95, 1123, 1064, 1029, 1030, 1133, 1068, - 1068, 47, 388, 389, 109, 109, 1007, 1008, 1009, 790, - 396, 792, 109, 59, 60, 41, 62, 109, 64, 109, - 1007, 1008, 1009, 54, 109, 56, 57, 1028, 1029, 1030, - 56, 57, 62, 109, 1218, 26, 27, 109, 109, 70, - 31, 1028, 1029, 1030, 1216, 109, 1218, 93, 94, 80, - 109, 97, 112, 47, 109, 109, 109, 1351, 1333, 33, - 96, 109, 88, 109, 62, 1365, 109, 109, 59, 60, - 1207, 457, 112, 64, 109, 109, 109, 1212, 1336, 1337, - 1212, 62, 1217, 1212, 1219, 62, 8, 1219, 1219, 60, - 1219, 1226, 60, 60, 1226, 1226, 15, 1226, 4, 5, - 486, 93, 8, 489, 1294, 93, 492, 493, 60, 495, - 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, - 506, 507, 508, 509, 510, 511, 512, 513, 60, 24, - 93, 26, 27, 519, 98, 521, 522, 7, 8, 108, - 93, 16, 60, 13, 1281, 60, 1133, 109, 54, 109, - 56, 57, 933, 109, 935, 109, 3, 4, 5, 10, - 60, 547, 60, 58, 70, 93, 36, 62, 554, 59, - 3, 4, 5, 109, 80, 45, 1448, 3, 4, 5, - 60, 1365, 64, 60, 570, 571, 109, 1324, 1325, 1324, - 1325, 10, 1324, 1328, 1366, 1324, 1328, 1328, 1388, 1328, - 95, 1338, 827, 1338, 60, 986, 109, 54, 41, 56, - 57, 10, 60, 3, 4, 5, 1351, 1354, 8, 1354, - 0, 75, 1357, 56, 57, 1357, 1357, 0, 1357, 0, - 56, 57, 618, 1368, 378, 860, 1368, 1368, 2, 1368, - 340, 822, 149, 97, 1349, 149, 1381, 4, 5, 1381, - 1381, 41, 1381, 680, 674, 88, 1017, 486, 1320, 113, - 4, 5, 1295, 117, 54, 1460, 56, 57, 1217, 618, - 1051, 1408, 815, 1410, 1055, 1410, 130, 810, 1413, 209, - 70, 1413, 1413, 1047, 1413, 671, 30, 44, 888, 674, - 80, 925, 680, 1066, 1295, 1432, 808, 54, 88, 56, - 57, 45, 568, 93, 1337, 1338, 4, 5, 6, 1446, - 54, 523, 56, 57, 171, 310, 1219, 1124, 704, 1396, - 174, 1102, 3, 4, 5, 1460, 1374, 8, 1460, 1460, - 407, 1460, 30, 1371, 1433, 1336, 1337, 1338, 1325, 37, - 726, 418, 1435, 3, 4, 5, 869, 45, -1, 1336, - 1337, 1338, -1, 207, -1, 1133, 54, -1, 56, 57, - 41, -1, 389, -1, 1351, -1, 47, 1354, -1, 396, - -1, -1, -1, 54, 228, 56, 57, 763, 764, -1, - -1, 41, 1007, 1008, 1009, -1, 1167, 1168, -1, 70, - -1, 777, -1, 779, 54, -1, 56, 57, -1, 80, - 60, -1, 1183, 1028, 1029, 1030, -1, 88, -1, 90, - 70, -1, 93, 94, 3, 4, 5, 6, 7, 8, - 80, 807, -1, 1410, -1, -1, 4, -1, 88, -1, - 457, 817, -1, 93, -1, 13, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 23, 24, 25, -1, 835, - 1231, 1232, 30, 31, -1, 33, 842, 35, 3, 4, - 5, -1, 40, -1, 318, -1, -1, 56, 57, 1250, - 1251, -1, -1, 51, 860, 53, -1, -1, -1, 3, - 4, 5, -1, 61, 8, -1, -1, -1, 342, -1, - 68, -1, 519, -1, 521, 522, 41, -1, -1, -1, - 78, 79, -1, -1, -1, -1, 360, -1, -1, 87, - -1, 56, 57, -1, -1, -1, -1, 41, 84, 905, - 86, 99, 6, 7, 8, -1, -1, 554, -1, 13, - 54, -1, 56, 57, 100, 101, 114, 115, -1, -1, - 118, -1, 928, 88, 122, 123, 70, 31, -1, -1, - 128, -1, 36, 131, 132, -1, 80, 135, 136, 137, - 126, 45, -1, -1, 88, -1, 952, 953, -1, 93, - 956, 149, -1, 389, -1, 429, 60, -1, 655, -1, - 396, -1, 6, 7, 8, -1, 164, 165, 166, 13, - -1, -1, -1, 4, 5, -1, 7, 8, -1, -1, - 454, -1, 13, -1, -1, -1, -1, 31, -1, 686, - -1, -1, 36, -1, -1, 193, -1, 28, -1, 30, - -1, 45, -1, 4, 5, 36, -1, -1, -1, -1, - 208, -1, -1, 1019, 45, 1021, 60, 1023, 216, -1, - 1026, 457, -1, 54, -1, 56, 57, 225, -1, 1035, - 1036, -1, -1, -1, 1040, 1041, 3, 4, 5, 6, - 7, 8, -1, 3, 4, 5, 13, -1, 8, -1, - 1295, 1057, 1058, 54, -1, 56, 57, -1, -1, -1, - 534, 28, 93, 30, 31, 263, 264, -1, -1, 36, - -1, -1, -1, -1, 41, 1081, 550, 1083, 45, -1, - 47, 41, -1, 519, -1, 521, 522, 54, -1, 56, - 57, 1336, 1337, 1338, 54, -1, 56, 57, -1, 47, - -1, 1107, -1, 70, -1, -1, -1, 293, 306, -1, - 70, 547, 310, 80, 312, 313, 314, 764, 554, -1, - 80, 88, -1, 90, -1, 323, 93, 94, 88, -1, - 777, 1137, 779, 93, -1, -1, -1, -1, 86, 87, - -1, -1, 340, 91, 92, 93, 94, -1, 1154, -1, - -1, 349, -1, -1, -1, -1, 354, -1, 3, 4, - 5, -1, -1, 8, -1, -1, 364, -1, 354, 367, - 817, 1177, -1, -1, 372, 3, 4, 5, 376, -1, - 8, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 842, 41, 1203, 895, 896, - 398, -1, 400, -1, 402, 403, 404, -1, -1, 54, - 408, 56, 57, 41, -1, 413, -1, -1, 416, 47, - -1, -1, -1, -1, -1, 70, 54, 924, 56, 57, - 1236, 1237, -1, 431, 432, 80, -1, -1, -1, 1245, - -1, -1, 70, 88, -1, -1, -1, -1, 93, -1, - 1256, -1, 80, -1, -1, -1, -1, -1, 4, 5, - 88, -1, 90, -1, -1, 93, 94, -1, 704, 467, - 468, 469, 470, 459, -1, -1, 462, -1, -1, -1, - 466, 467, 468, 469, 470, -1, -1, -1, -1, 1295, - 13, -1, -1, 479, -1, -1, 6, 7, 8, 22, - 486, 47, -1, 13, 490, -1, -1, -1, 54, -1, - 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, - 1326, 31, -1, -1, 70, 523, 36, 525, 764, 803, - -1, 805, -1, -1, 80, 45, 522, 535, 61, 537, - 538, 777, 540, 779, 90, -1, -1, 93, 94, 547, - -1, -1, -1, 551, 540, -1, -1, -1, -1, -1, - -1, 547, 1059, 1060, -1, 1062, 1063, -1, 1065, 3, - 4, 5, 1019, -1, 1021, -1, 1023, -1, 3, 4, - 5, 817, -1, -1, -1, -1, -1, 6, 7, 8, - 113, 589, -1, -1, 13, -1, 594, 595, 596, 597, - 598, 599, -1, -1, -1, -1, 842, 41, -1, 883, - -1, 134, 31, 38, 39, -1, 41, 36, -1, -1, - 54, -1, 56, 57, 860, -1, 45, -1, 62, 54, - -1, 56, 57, 631, -1, -1, 70, 635, -1, -1, - 914, -1, 1448, -1, 642, 643, 80, 645, -1, 635, - -1, 1148, 1149, -1, 88, -1, -1, -1, -1, 93, - 1107, -1, 660, -1, 4, 5, 6, 7, 8, -1, - 668, 11, -1, 13, 672, -1, 674, -1, -1, -1, - -1, 679, 680, 681, 207, 208, -1, -1, 28, -1, - 30, 31, 690, -1, 692, -1, 36, -1, -1, -1, - -1, 699, 700, 701, -1, 45, -1, 47, -1, -1, - -1, -1, 710, -1, 54, -1, 56, 57, 992, -1, - -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, - 70, -1, 8, -1, -1, -1, -1, 1011, -1, -1, - 80, 1238, 1239, 1240, -1, -1, -1, -1, -1, -1, - 90, -1, -1, 93, 94, -1, -1, 97, -1, -1, - 283, -1, 760, -1, -1, 41, -1, -1, -1, -1, - -1, -1, 1046, -1, 760, -1, -1, -1, 54, -1, - 56, 57, 780, 1019, 782, 1021, -1, 1023, -1, -1, - 1064, 789, 4, 5, 70, 793, 8, 795, -1, 797, - 798, 799, -1, 789, 80, -1, 804, -1, -1, 1306, - 1307, -1, 88, 799, 337, -1, -1, 93, -1, 342, - -1, -1, -1, -1, 822, -1, 824, 825, 826, 827, - 4, -1, -1, -1, -1, 47, 822, -1, 824, 13, - -1, 827, 54, -1, 56, 57, -1, -1, -1, 23, - 24, 25, -1, -1, -1, -1, 30, 31, 70, 33, - -1, 35, 860, -1, -1, -1, 40, -1, 80, -1, - -1, 1107, -1, -1, 860, -1, 874, 51, 90, 53, - -1, 93, 94, -1, -1, -1, 884, 61, 874, -1, - 888, -1, 890, -1, 68, 881, -1, -1, -1, -1, - -1, -1, -1, -1, 902, 79, 429, 4, 5, -1, - -1, 8, -1, 87, -1, 1412, -1, 915, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 925, 4, 5, - -1, -1, 8, -1, -1, -1, 934, 77, 936, -1, - -1, 115, -1, -1, -1, -1, -1, -1, 122, 123, - 47, -1, -1, -1, 128, -1, -1, 54, 132, 56, - 57, 135, 136, 137, -1, -1, 489, -1, -1, 967, - 968, 47, 970, 70, -1, 149, -1, -1, 54, -1, - 56, 57, -1, 80, -1, -1, -1, -1, -1, -1, - 164, 165, 166, 90, 70, -1, 93, 94, -1, -1, - -1, -1, -1, 143, 80, -1, -1, 1005, 1006, 1007, - 1008, 1009, -1, -1, 90, 1013, -1, 93, 94, 193, - -1, -1, 162, 1009, 4, 5, -1, 7, 8, -1, - 1028, 1029, 1030, 13, -1, 175, 164, 165, 166, -1, - 3, 4, 5, -1, 1030, 8, -1, -1, 28, 1047, - 30, 225, -1, -1, -1, -1, 36, -1, -1, 1295, - -1, -1, -1, 1061, -1, 45, 589, -1, 1066, -1, - 1068, -1, -1, -1, 54, 598, 56, 57, 41, -1, - -1, -1, -1, -1, 47, -1, -1, -1, -1, 263, - 264, 54, -1, 56, 57, 618, -1, -1, -1, -1, - -1, -1, 4, 5, 6, 7, 8, 70, -1, 11, - -1, 13, 1110, 1111, -1, 1113, -1, 80, -1, -1, - -1, -1, -1, -1, -1, 88, 28, 90, 30, 31, - 93, 94, 306, -1, 36, 1133, 310, -1, 312, 313, - 314, -1, -1, 45, -1, 319, -1, 1133, -1, 323, - -1, -1, 54, -1, 56, 57, 1, -1, 3, 4, - 5, 6, 7, 8, -1, -1, 340, -1, 13, -1, + 658, 332, 54, 161, 75, 392, 656, 196, 470, 392, + 58, 427, 4, 4, 125, 236, 83, 392, 24, 888, + 1226, 26, 151, 152, 338, 4, 931, 449, 796, 79, + 14, 36, 196, 363, 132, 940, 41, 4, 721, 289, + 290, 205, 231, 726, 36, 36, 11, 26, 34, 41, + 41, 56, 132, 133, 11, 53, 1256, 36, 89, 26, + 91, 92, 41, 1263, 31, 32, 71, 226, 1376, 36, + 320, 61, 128, 422, 41, 1249, 11, 133, 83, 1187, + 1188, 1412, 87, 4, 89, 137, 91, 92, 93, 48, + 60, 139, 281, 1201, 1410, 38, 146, 34, 82, 55, + 61, 106, 107, 1407, 36, 26, 63, 204, 205, 41, + 141, 9, 143, 0, 93, 36, 83, 338, 60, 75, + 41, 105, 4, 65, 1, 1441, 93, 55, 0, 200, + 1, 75, 1, 138, 76, 94, 141, 60, 143, 4, + 190, 111, 75, 332, 26, 110, 1393, 75, 196, 832, + 111, 110, 1483, 110, 36, 79, 204, 205, 156, 41, + 165, 26, 83, 585, 62, 1469, 152, 153, 111, 1277, + 61, 36, 93, 504, 111, 110, 41, 526, 1286, 1287, + 1380, 1289, 59, 231, 151, 152, 165, 110, 59, 187, + 59, 56, 63, 1440, 63, 657, 182, 428, 165, 12, + 1508, 60, 1376, 49, 435, 25, 1522, 27, 28, 199, + 60, 93, 584, 180, 181, 983, 12, 207, 61, 591, + 111, 1421, 55, 1470, 61, 96, 7, 96, 93, 4, + 60, 329, 14, 281, 4, 5, 91, 92, 39, 59, + 59, 23, 75, 63, 165, 1451, 60, 60, 232, 329, + 63, 110, 65, 284, 55, 55, 12, 38, 325, 48, + 110, 36, 76, 63, 60, 59, 41, 63, 111, 500, + 447, 65, 1472, 956, 111, 958, 96, 282, 455, 284, + 110, 100, 64, 165, 332, 98, 141, 57, 58, 603, + 454, 1399, 1400, 48, 681, 94, 348, 1202, 681, 629, + 165, 349, 98, 48, 60, 94, 386, 63, 313, 365, + 659, 81, 441, 442, 110, 473, 48, 27, 28, 63, + 325, 34, 32, 247, 3, 4, 5, 313, 333, 60, + 386, 562, 94, 564, 565, 1253, 63, 1255, 75, 94, + 95, 123, 98, 60, 61, 76, 677, 78, 63, 94, + 95, 61, 48, 94, 338, 65, 453, 454, 325, 63, + 75, 34, 94, 95, 461, 1133, 110, 598, 150, 48, + 1239, 75, 1442, 291, 292, 472, 55, 61, 57, 58, + 8, 9, 798, 110, 1454, 48, 14, 392, 306, 25, + 1073, 309, 463, 1463, 312, 492, 4, 315, 94, 95, + 318, 111, 1085, 48, 325, 453, 454, 48, 326, 37, + 415, 833, 1482, 461, 110, 94, 94, 48, 46, 109, + 48, 48, 25, 59, 472, 392, 61, 63, 36, 284, + 435, 94, 1502, 41, 65, 48, 415, 1306, 151, 152, + 153, 223, 224, 55, 492, 32, 1315, 1316, 415, 94, + 95, 75, 65, 94, 236, 1525, 442, 443, 60, 61, + 96, 316, 924, 94, 836, 110, 94, 94, 435, 182, + 460, 392, 859, 55, 441, 442, 859, 63, 151, 152, + 153, 94, 95, 48, 859, 475, 48, 342, 48, 344, + 63, 346, 864, 75, 415, 55, 59, 502, 48, 566, + 505, 55, 75, 65, 509, 510, 511, 512, 513, 182, + 3, 4, 5, 6, 435, 75, 502, 522, 111, 505, + 3, 4, 5, 305, 529, 59, 898, 841, 533, 94, + 95, 947, 94, 415, 94, 521, 522, 886, 48, 4, + 5, 396, 397, 94, 94, 110, 705, 533, 707, 42, + 415, 60, 61, 712, 4, 5, 745, 55, 974, 975, + 565, 566, 55, 48, 57, 58, 989, 990, 799, 992, + 76, 993, 48, 48, 57, 58, 1445, 75, 1040, 584, + 362, 812, 55, 814, 94, 816, 591, 639, 838, 641, + 642, 55, 57, 58, 642, 56, 89, 58, 81, 566, + 48, 698, 520, 521, 715, 591, 1068, 57, 58, 94, + 55, 595, 4, 5, 581, 582, 81, 584, 94, 94, + 841, 4, 5, 854, 591, 677, 9, 48, 634, 677, + 75, 81, 55, 1049, 55, 640, 4, 5, 48, 644, + 110, 9, 1058, 1059, 499, 566, 94, 1063, 1064, 880, + 698, 657, 4, 5, 75, 48, 9, 988, 48, 12, + 1032, 110, 55, 584, 95, 57, 58, 63, 110, 48, + 591, 110, 55, 94, 57, 58, 681, 138, 139, 75, + 11, 1053, 75, 111, 94, 48, 468, 55, 71, 57, + 58, 722, 723, 724, 48, 48, 3, 745, 81, 27, + 28, 94, 61, 71, 94, 57, 58, 60, 1124, 62, + 63, 716, 65, 81, 681, 94, 721, 722, 723, 724, + 94, 726, 113, 76, 716, 78, 95, 95, 441, 442, + 443, 94, 113, 4, 5, 196, 63, 716, 55, 95, + 94, 94, 95, 204, 205, 98, 63, 84, 85, 716, + 532, 60, 61, 739, 721, 4, 5, 110, 75, 726, + 681, 94, 921, 922, 923, 1181, 60, 61, 441, 442, + 443, 55, 94, 234, 8, 9, 4, 5, 75, 63, + 14, 55, 75, 4, 5, 1435, 57, 58, 75, 63, + 795, 75, 716, 75, 799, 716, 11, 1455, 1214, 48, + 721, 75, 110, 37, 60, 726, 55, 111, 57, 58, + 81, 1042, 46, 1044, 110, 1046, 3, 4, 5, 869, + 55, 826, 71, 4, 5, 110, 65, 832, 63, 57, + 58, 836, 81, 110, 716, 55, 57, 58, 60, 61, + 75, 110, 91, 63, 61, 94, 95, 60, 61, 835, + 836, 111, 634, 81, 859, 75, 861, 841, 111, 864, + 81, 643, 113, 934, 935, 832, 110, 834, 835, 836, + 57, 58, 943, 113, 55, 75, 57, 58, 864, 4, + 5, 75, 664, 75, 113, 1301, 938, 113, 349, 807, + 71, 110, 859, 898, 110, 862, 863, 864, 110, 59, + 81, 1030, 1031, 25, 110, 27, 28, 912, 733, 734, + 735, 832, 898, 55, 919, 836, 834, 835, 4, 5, + 1151, 8, 1051, 1052, 1255, 113, 931, 94, 933, 48, + 55, 898, 57, 58, 939, 940, 65, 59, 859, 931, + 60, 63, 94, 864, 61, 111, 71, 55, 940, 65, + 65, 956, 931, 958, 933, 63, 81, 110, 61, 45, + 25, 940, 27, 28, 931, 63, 933, 75, 1317, 55, + 95, 57, 58, 940, 96, 110, 110, 898, 110, 110, + 1329, 7, 8, 9, 1034, 446, 65, 65, 14, 956, + 65, 958, 453, 454, 59, 113, 457, 65, 63, 94, + 461, 60, 3, 4, 5, 6, 32, 931, 110, 933, + 931, 37, 933, 110, 110, 939, 940, 1404, 1089, 940, + 46, 1404, 110, 76, 1095, 1096, 110, 1032, 1099, 1100, + 76, 96, 1103, 76, 1040, 956, 76, 958, 3, 4, + 5, 42, 63, 110, 1393, 1031, 1032, 1097, 1053, 931, + 110, 933, 63, 60, 110, 63, 57, 58, 940, 110, + 3, 4, 5, 1030, 1031, 1032, 1052, 1053, 1073, 113, + 852, 95, 111, 938, 939, 110, 110, 995, 48, 25, + 1085, 27, 28, 113, 1051, 1052, 1053, 1418, 89, 1438, + 55, 1440, 57, 58, 1510, 950, 951, 952, 89, 3, + 4, 5, 111, 1108, 110, 87, 1073, 89, 110, 91, + 92, 1032, 55, 59, 57, 58, 1108, 63, 1085, 113, + 113, 1470, 110, 3, 4, 5, 110, 110, 60, 1108, + 110, 1480, 1053, 1051, 1052, 3, 4, 5, 6, 111, + 65, 1108, 79, 80, 81, 82, 83, 84, 85, 65, + 96, 864, 1073, 57, 58, 59, 75, 63, 110, 141, + 110, 143, 1167, 94, 1085, 94, 3, 4, 5, 6, + 94, 94, 1177, 1097, 42, 1167, 1167, 57, 58, 640, + 110, 642, 8, 111, 1108, 898, 113, 1108, 1167, 57, + 58, 864, 110, 975, 4, 5, 110, 1202, 110, 392, + 1167, 1253, 110, 1255, 113, 42, 111, 1255, 110, 110, + 1202, 110, 49, 1284, 1285, 110, 677, 110, 110, 60, + 57, 58, 60, 1202, 110, 898, 1108, 1385, 110, 1418, + 63, 3, 4, 5, 113, 1202, 48, 698, 110, 110, + 701, 110, 435, 97, 1249, 55, 1167, 57, 58, 1254, + 34, 1256, 89, 110, 110, 110, 65, 1249, 1263, 1388, + 1389, 3, 4, 5, 1256, 1256, 110, 1049, 1339, 63, + 1249, 1263, 1263, 113, 1198, 110, 110, 1256, 1202, 110, + 110, 1202, 1249, 55, 1263, 57, 58, 59, 63, 1256, + 446, 3, 4, 5, 61, 61, 1263, 3, 4, 5, + 6, 457, 284, 16, 9, 61, 94, 1, 94, 3, + 4, 5, 6, 61, 8, 57, 58, 1030, 1031, 1032, + 1202, 61, 304, 81, 82, 83, 84, 85, 1249, 94, + 94, 1249, 3, 4, 5, 1256, 42, 17, 1051, 1052, + 1053, 61, 1263, 49, 99, 57, 58, 109, 42, 110, + 61, 57, 58, 110, 1340, 49, 110, 1030, 1031, 1032, + 110, 55, 11, 57, 58, 61, 61, 1419, 94, 60, + 1418, 1376, 1377, 110, 61, 1380, 65, 1448, 1051, 1052, + 1053, 110, 1164, 89, 1376, 1390, 57, 58, 1380, 1380, + 11, 584, 61, 61, 110, 89, 11, 1376, 591, 1404, + 61, 1380, 1407, 1389, 1390, 1410, 3, 4, 5, 1376, + 1377, 0, 0, 1380, 0, 2, 1421, 417, 1410, 1410, + 365, 1388, 1389, 859, 165, 1434, 165, 939, 933, 1421, + 1421, 1410, 1372, 1040, 31, 529, 1441, 1404, 1522, 1254, + 1407, 852, 1421, 1410, 847, 427, 428, 225, 1068, 1441, + 1441, 1108, 48, 435, 1421, 1376, 1377, 664, 55, 1380, + 57, 58, 1441, 1245, 1469, 924, 933, 1472, 939, 614, + 1388, 1389, 1200, 845, 1441, 566, 329, 187, 939, 123, + 1472, 1472, 1256, 1404, 945, 1168, 1407, 1480, 681, 1410, + 1424, 87, 88, 1472, 1494, 1455, 92, 93, 94, 95, + 1421, 1496, 1469, 907, -1, 1472, 1177, 7, 8, 9, + -1, -1, -1, -1, 14, -1, -1, 1522, 500, -1, + 1441, -1, -1, -1, -1, -1, 1308, -1, 721, -1, + 1522, 1522, 32, 726, -1, -1, -1, 37, -1, 3, + 4, 5, 6, 1522, -1, 701, 46, 529, 1469, -1, + 532, 1472, -1, 535, 536, 1522, 538, 539, 540, 541, + 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, + 552, 553, 554, 555, 556, -1, -1, -1, 42, -1, + 562, -1, 564, 565, -1, 49, -1, -1, -1, -1, + -1, -1, -1, 57, 58, 106, 107, -1, 3, 4, + 5, 1522, 7, -1, -1, -1, 3, 4, 5, 591, + 7, 8, 9, 428, -1, -1, 598, 1078, 1079, -1, + 435, 12, 180, 181, 182, 89, 31, 1340, -1, -1, + -1, -1, -1, 38, 616, 617, 27, 28, -1, 832, + 37, 32, -1, 836, -1, -1, 1107, -1, -1, -1, + 55, -1, 57, 58, -1, -1, -1, 48, 55, -1, + 57, 58, 59, -1, -1, -1, 859, 1340, -1, 60, + 61, 864, 63, 696, 65, 1388, 1389, 1390, -1, -1, + -1, -1, 664, -1, -1, 500, -1, -1, -1, -1, + -1, 3, 4, 5, 6, -1, -1, 720, -1, -1, + -1, -1, 725, 94, 95, 898, -1, 98, 105, 106, + 107, -1, -1, -1, -1, 1388, 1389, 1390, -1, 110, + 27, 28, -1, -1, -1, 32, -1, -1, -1, -1, + 42, -1, 1193, 1194, -1, 1196, 1197, -1, 1199, -1, + 722, 723, 724, 55, -1, 57, 58, 562, -1, 564, + 565, 63, -1, 60, 61, -1, -1, 739, 65, 71, + -1, -1, -1, 956, -1, 958, -1, -1, -1, 81, + 4, 5, -1, 7, 8, 9, 591, 89, 12, 761, + 14, -1, 94, 598, -1, -1, 3, 4, 5, 945, + 7, 8, 9, 1254, 1255, 29, -1, 31, 32, -1, + -1, -1, 313, 37, 827, -1, 829, -1, -1, -1, + -1, -1, 46, 1274, 1275, -1, 798, 799, -1, -1, + -1, 55, -1, 57, 58, -1, 4, -1, -1, -1, + 812, -1, 814, -1, 816, -1, 14, -1, -1, 1032, + 57, 58, -1, -1, -1, -1, -1, 25, 26, -1, + -1, -1, -1, 31, 32, -1, 34, -1, 36, -1, + 1053, -1, 844, 41, 98, -1, 4, 5, -1, -1, + -1, 9, 854, -1, -1, -1, 54, -1, 56, 437, + 1073, 439, -1, 441, 442, 443, 64, -1, -1, -1, + -1, 873, 1085, 71, 452, 1356, 1357, 1358, 880, -1, + 7, 8, 9, -1, 82, 83, -1, 14, -1, -1, + 48, -1, -1, -1, -1, 93, 898, 55, -1, 57, + 58, 432, 1078, 1079, 739, 32, -1, 105, -1, -1, + 37, -1, 955, 71, 957, 1396, 1397, -1, -1, 46, + -1, -1, -1, 81, -1, -1, -1, -1, 930, -1, + 128, 1107, -1, 91, 61, 133, 94, 95, -1, 137, + 138, -1, -1, -1, -1, 947, 144, -1, -1, 147, + 148, 106, 107, 151, 152, 153, -1, -1, -1, -1, + -1, -1, -1, -1, 799, -1, 1009, 165, -1, -1, + -1, 502, 974, 975, 505, -1, 978, 812, 509, 814, + -1, 816, 180, 181, 182, 7, 8, 9, -1, -1, + 1471, 522, 14, -1, -1, -1, 3, 4, 5, 6, + -1, -1, 533, -1, -1, -1, 537, -1, -1, -1, + 32, 209, -1, -1, -1, 37, -1, 1193, 1194, 854, + 1196, 1197, -1, 1199, 46, -1, 224, -1, -1, -1, + -1, -1, 563, -1, 232, 42, -1, -1, 569, 61, + 1042, -1, 1044, -1, 1046, 880, 244, 1049, 55, -1, + 57, 58, 3, 4, 5, 6, 1058, 1059, 9, -1, + -1, 1063, 1064, 898, 71, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 81, -1, -1, -1, -1, -1, + -1, -1, 89, -1, 282, 283, 1088, 94, -1, -1, + -1, 42, -1, -1, -1, -1, -1, 48, 1274, 1275, + 3, 4, 5, 1146, 55, -1, 57, 58, -1, -1, + 688, 689, -1, 691, 3, 4, 5, 6, -1, -1, + 71, -1, 1124, -1, 1126, -1, -1, 325, -1, -1, + 81, 329, -1, 331, 332, 333, 39, 40, 89, 42, + 91, -1, 1185, 94, 95, -1, 1189, -1, -1, 1151, + 348, -1, 55, 42, 57, 58, -1, -1, 313, -1, + 49, 1204, 1205, -1, -1, -1, -1, 365, 57, 58, + -1, -1, -1, -1, -1, -1, -1, 1220, -1, 1181, + 1356, 1357, 1358, -1, -1, -1, -1, -1, 386, 1191, + 1192, 1404, 81, -1, 392, -1, 3, 4, 5, 6, + 89, -1, 9, -1, -1, 403, -1, 1042, 406, 1044, + -1, 1046, 1214, 411, 81, -1, -1, 415, -1, -1, + 1396, 1397, 3, 4, 5, 6, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 42, -1, 392, 1240, 437, + -1, 439, -1, 441, 442, 443, -1, -1, 55, 447, + 57, 58, 1295, 1296, 452, -1, -1, 455, -1, -1, + -1, 42, -1, -1, 71, -1, -1, -1, 49, -1, + -1, -1, 803, -1, 81, -1, 57, 58, 1280, -1, + 435, -1, 89, -1, 862, 863, 864, 94, -1, -1, + -1, -1, 159, -1, -1, 1471, -1, -1, -1, 1301, + 81, -1, -1, -1, -1, 836, 1349, 1350, 89, -1, + -1, 178, 510, 511, 512, 513, 1151, -1, -1, -1, + 898, -1, -1, -1, 191, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 1340, -1, + 3, 4, 5, 6, -1, -1, 9, 502, -1, -1, + 505, -1, 1354, 1355, 509, 510, 511, 512, 513, -1, + 938, 1363, -1, -1, -1, -1, -1, 522, 566, -1, + 568, -1, -1, -1, -1, -1, 1378, -1, 533, 42, + -1, 579, -1, 581, 582, 48, 584, -1, 919, -1, + -1, -1, 55, 591, 57, 58, -1, 595, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 71, -1, + 565, -1, -1, -1, -1, -1, -1, -1, 81, -1, + -1, -1, -1, -1, -1, -1, 89, -1, 91, 584, + -1, 94, 95, -1, -1, -1, 591, -1, -1, -1, + -1, 639, 640, 641, 642, 643, 644, -1, -1, -1, + 1028, 1029, 1030, 1031, 1032, -1, -1, -1, 1036, -1, + -1, -1, 3, 4, 5, 6, -1, -1, 9, -1, + -1, -1, -1, 1051, 1052, 1053, -1, -1, -1, 677, + -1, -1, -1, 681, -1, -1, -1, -1, -1, -1, + 688, 689, -1, 691, -1, -1, -1, -1, -1, -1, + -1, 42, -1, -1, -1, 1340, -1, 48, 1510, -1, + 3, 4, 5, 6, 55, -1, 57, 58, 716, -1, + -1, -1, 1053, 721, -1, -1, 681, -1, 726, -1, + 71, -1, -1, -1, -1, 733, 734, 735, -1, -1, + 81, -1, -1, -1, -1, -1, -1, 745, 89, 42, + 91, -1, -1, 94, 95, -1, 49, -1, -1, -1, + -1, -1, -1, -1, 57, 58, 721, -1, -1, -1, + -1, 726, -1, -1, -1, -1, 1154, 1155, 445, 1157, + -1, -1, -1, 450, -1, -1, -1, -1, 81, 1120, + 1121, 1122, 1123, -1, -1, -1, 89, 795, -1, -1, + 1131, -1, -1, -1, -1, 3, 4, 5, 6, 476, + -1, 9, -1, -1, 481, -1, -1, 1195, -1, 817, + -1, 819, -1, -1, -1, -1, 493, 494, 826, 496, + -1, -1, 830, -1, 832, -1, 834, 835, 836, -1, + 795, -1, -1, 841, 42, -1, -1, -1, -1, -1, + 48, -1, -1, -1, -1, -1, -1, 55, -1, 57, + 58, 859, -1, 861, 862, 863, 864, -1, -1, -1, + -1, 826, -1, 71, -1, -1, -1, 832, -1, -1, + 4, 836, -1, 81, -1, -1, -1, -1, -1, -1, + -1, 89, -1, 91, -1, -1, 94, 95, -1, -1, + 898, -1, 26, -1, 859, -1, 861, 31, 32, 864, + -1, -1, 36, 1244, 912, -1, -1, 41, -1, -1, + 587, 588, -1, -1, -1, 592, -1, -1, -1, 927, + -1, -1, 56, 931, -1, 933, -1, -1, -1, -1, + 938, 939, 940, 898, -1, -1, 4, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 14, 912, 956, -1, + 958, 79, 1340, -1, 919, -1, 24, 25, 26, 93, + -1, -1, -1, 31, 32, -1, 34, -1, 36, -1, + -1, -1, -1, 41, -1, 103, -1, -1, -1, -1, + -1, 989, 990, -1, 992, 1326, 54, -1, 56, -1, + -1, 956, -1, 958, -1, -1, 64, -1, -1, -1, + 1388, 1389, 1390, 71, 132, -1, -1, -1, -1, -1, + 144, -1, -1, -1, 148, 83, -1, -1, 146, -1, + 1028, 1029, 1030, 1031, 1032, 93, -1, -1, 1036, -1, + -1, 165, -1, -1, -1, 1376, 1377, -1, -1, -1, + -1, -1, -1, 1051, 1052, 1053, 180, 181, -1, 1390, + 727, -1, 729, -1, -1, -1, -1, -1, -1, -1, + 128, -1, 190, -1, -1, 1073, 1407, 1032, -1, 137, + 138, -1, -1, -1, -1, -1, 144, 1085, -1, -1, + 148, -1, -1, 151, 152, 153, -1, -1, 1053, -1, + 1098, -1, -1, -1, -1, 223, -1, 165, -1, -1, + 1108, -1, -1, -1, -1, -1, -1, -1, 1073, -1, + 244, -1, 180, 181, 182, -1, -1, -1, -1, 247, + 1085, -1, -1, -1, 801, 802, 1467, 804, 1469, -1, + 4, 5, -1, 7, 8, 9, -1, -1, 12, -1, + 14, 209, -1, -1, -1, -1, 1154, 1155, -1, 1157, + -1, -1, 1493, -1, 831, 29, -1, 31, 32, -1, + -1, -1, -1, 37, -1, -1, -1, 1508, -1, 1177, + -1, -1, 46, -1, 48, -1, 244, -1, -1, -1, + -1, 55, -1, 57, 58, -1, -1, 1195, -1, 866, + -1, -1, 1200, -1, 1202, -1, -1, 71, 3, 4, + 5, 6, -1, -1, -1, -1, -1, 81, -1, 337, + -1, -1, 1177, -1, 282, 283, -1, 91, -1, -1, + 94, 95, -1, -1, 98, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 42, -1, 3, + 4, 5, 6, 48, -1, 1253, 1254, 1255, -1, -1, + 55, -1, 57, 58, -1, -1, -1, 325, -1, -1, + -1, 329, -1, 331, 332, 333, 71, -1, -1, 403, + 338, 399, 406, -1, -1, -1, 81, 411, 42, -1, + 348, 415, -1, -1, 89, -1, 91, -1, -1, 94, + 95, 55, -1, 57, 58, -1, -1, 365, -1, 63, + -1, 4, 5, 437, -1, 439, 9, 71, -1, 4, + 5, -1, -1, 8, 9, -1, -1, 81, 452, 14, + -1, -1, -1, -1, 392, 89, -1, 1004, -1, -1, + 94, -1, 1340, -1, 29, 403, 31, -1, 406, -1, + 468, -1, 37, 411, -1, 48, -1, 415, -1, -1, + -1, 46, 55, -1, 57, 58, -1, -1, 1035, -1, + 55, -1, 57, 58, 59, -1, -1, 495, 71, 437, + -1, 439, -1, 441, 442, 443, -1, -1, 81, 447, + 1388, 1389, 1390, -1, 452, -1, -1, 455, 91, -1, + -1, 94, 95, -1, -1, 1072, 1404, -1, -1, 94, + -1, -1, 470, -1, -1, -1, -1, 1084, -1, -1, + -1, 1419, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, 1390, 3, 4, 5, 6, + 7, 8, 9, -1, 1111, -1, -1, 14, 1115, 1404, + -1, -1, 510, 511, 512, 513, -1, -1, -1, -1, + 578, -1, 29, -1, 31, 32, 33, -1, -1, -1, + 37, 38, -1, -1, -1, 42, 594, -1, -1, 46, + 47, 1148, 49, -1, -1, -1, -1, -1, 55, -1, + 57, 58, -1, -1, 61, -1, 63, -1, -1, -1, + -1, -1, -1, -1, 71, -1, -1, -1, 566, -1, + 568, -1, -1, -1, 81, -1, 640, -1, -1, -1, + -1, -1, 89, 581, 582, -1, 584, 94, -1, -1, + -1, -1, -1, 591, -1, -1, -1, -1, -1, 1206, + 1207, -1, -1, -1, 111, 603, -1, -1, -1, 3, + 4, 5, 6, -1, -1, -1, -1, 681, -1, -1, + -1, -1, -1, -1, 688, 689, -1, 691, -1, -1, + -1, -1, -1, -1, -1, -1, 634, -1, -1, -1, + -1, 639, 640, 641, 642, 643, 644, -1, 42, -1, + -1, -1, 716, -1, -1, -1, -1, -1, -1, 657, + -1, 55, 1269, 57, 58, -1, 1273, 61, 1, -1, + 3, 4, 5, 6, 7, 8, 9, 71, -1, 677, + -1, 14, -1, 681, -1, -1, -1, 81, -1, -1, + 688, 689, -1, 691, -1, 89, 29, -1, 31, 32, + 94, -1, -1, -1, 37, -1, -1, -1, -1, 42, + -1, -1, -1, 46, 47, -1, 49, -1, 716, -1, + -1, -1, 55, 721, 57, 58, -1, -1, 726, -1, + 63, 3, 4, 5, 6, 733, 734, 735, 71, 4, + 5, -1, -1, 8, 9, -1, -1, 745, 81, 14, + -1, -1, -1, -1, -1, -1, 89, -1, -1, -1, + -1, 94, -1, -1, 29, -1, 31, -1, -1, -1, + 42, -1, 37, 4, -1, -1, -1, 49, -1, -1, + -1, 46, 840, 48, 842, 57, 58, -1, -1, -1, + 55, -1, 57, 58, -1, 26, -1, 795, 862, 863, + 31, 32, -1, 34, -1, 36, 71, -1, -1, 81, + 41, 869, -1, -1, -1, -1, 81, 89, -1, 817, + -1, 819, -1, 54, -1, 56, 91, -1, 826, 94, + 95, -1, 830, -1, 832, -1, 834, 835, 836, -1, + -1, -1, -1, 841, -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 354, -1, -1, 28, -1, 30, 31, 32, -1, -1, - 364, 36, 37, 367, -1, -1, 41, -1, 372, -1, - 45, 46, 376, 48, -1, -1, -1, -1, -1, 54, - -1, 56, 57, -1, -1, 60, -1, 62, 1216, 1217, - 1218, -1, -1, -1, 398, 70, 400, -1, 402, 403, - 404, -1, -1, -1, 408, 80, -1, 4, 5, 413, - 7, 8, 416, 88, -1, -1, 13, -1, 93, -1, - -1, -1, -1, -1, -1, -1, -1, 431, 432, -1, - -1, 28, -1, 30, -1, 110, 406, -1, -1, 36, - 398, 411, 400, -1, 402, 403, 404, -1, 45, -1, - -1, -1, -1, -1, -1, 413, -1, 54, -1, 56, - 57, 58, 815, 467, 468, 469, 470, 1295, 438, -1, - 440, -1, -1, -1, 3, 4, 5, 6, 7, 8, - -1, -1, 452, 453, 13, 455, 3, 4, 5, -1, - -1, 8, -1, -1, -1, -1, 93, -1, -1, -1, - -1, -1, 31, -1, -1, -1, -1, 36, 1336, 1337, - 1338, -1, 41, -1, -1, -1, 45, -1, 47, 523, - -1, 525, 1338, 1351, 41, 54, -1, 56, 57, -1, - 883, -1, -1, 537, 538, 1351, 540, 54, 1366, 56, - 57, 70, -1, 547, -1, 3, 4, 5, -1, -1, - 8, 80, -1, 70, -1, 559, -1, -1, -1, 88, - -1, 90, -1, 80, 93, 94, -1, 3, 4, 5, - -1, 88, 8, 543, 544, -1, 93, -1, 548, -1, - -1, -1, -1, 41, -1, 589, -1, -1, -1, 47, - 594, 595, 596, 597, 598, 599, 54, -1, 56, 57, - 953, -1, -1, -1, -1, 41, -1, 611, -1, -1, - -1, -1, 70, -1, -1, -1, -1, -1, 54, -1, - 56, 57, 80, -1, -1, -1, -1, 631, -1, -1, - 88, 635, 90, -1, 70, 93, 94, -1, 642, 643, - -1, 645, -1, -1, 80, -1, -1, -1, -1, -1, - -1, -1, 88, -1, -1, -1, 660, 93, -1, -1, - -1, -1, -1, -1, 668, -1, -1, -1, 672, -1, - 674, -1, -1, 1026, -1, 679, 680, 681, -1, -1, - -1, 3, 4, 5, 642, 643, 690, 645, 692, -1, - -1, -1, -1, 1046, -1, 699, 700, 701, 3, 4, - 5, 6, 7, 8, -1, -1, 710, -1, 13, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 41, - -1, 679, -1, 693, -1, 695, 31, -1, -1, -1, - -1, 36, 54, -1, 56, 57, 41, -1, 60, -1, - 45, -1, 47, -1, -1, -1, -1, -1, 70, 54, - -1, 56, 57, -1, -1, -1, 760, -1, 80, -1, - 4, 5, -1, 7, 8, 70, 88, 1120, -1, 13, - -1, 93, -1, -1, -1, 80, 780, -1, 782, -1, - -1, -1, -1, 88, 28, 789, 30, -1, 93, 793, - -1, 795, 36, 797, 798, 799, 766, 767, -1, 769, - 804, 45, -1, 47, -1, -1, -1, -1, -1, -1, - 54, 4, 56, 57, -1, -1, -1, -1, 822, -1, - 824, 825, 826, 827, 794, -1, 70, -1, -1, -1, - -1, -1, 25, 53, -1, 55, 80, 30, 31, -1, - 33, -1, 35, -1, -1, -1, 90, 40, -1, 93, - 94, -1, -1, -1, -1, 1208, 860, -1, 51, 829, - 53, 3, 4, 5, -1, -1, 8, 825, 826, 827, - 874, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 75, -1, 888, -1, 890, -1, -1, -1, - -1, -1, -1, -1, 87, -1, -1, -1, 902, 41, - -1, -1, 860, 123, 124, -1, -1, -1, -1, -1, - 1263, -1, 54, -1, 56, 57, -1, -1, -1, 889, - -1, 925, 115, -1, 117, 118, -1, -1, 70, 122, - 934, 901, 936, -1, -1, 128, -1, 130, 80, 132, - -1, -1, 135, 136, 137, -1, 88, -1, -1, -1, - -1, 93, -1, -1, -1, -1, 149, -1, -1, -1, - 180, -1, -1, 967, 968, -1, 970, -1, 188, 189, - -1, 164, 165, 166, -1, -1, -1, -1, -1, -1, - -1, 174, -1, -1, -1, -1, -1, 4, 5, -1, - 7, 8, -1, -1, -1, -1, 13, -1, 218, -1, - 193, 1005, 1006, 1007, 1008, 1009, -1, -1, -1, 1013, - -1, 981, -1, 1017, -1, -1, -1, -1, -1, 36, - -1, -1, -1, -1, 1028, 1029, 1030, -1, 45, -1, - 47, -1, 225, -1, -1, -1, -1, 54, -1, 56, - 57, -1, 1012, 1047, -1, -1, 31, 1005, 1006, 1007, - 1008, 1009, -1, 70, -1, 1013, -1, 1061, -1, -1, - -1, -1, 1066, 80, 1068, -1, -1, -1, -1, -1, - 1028, 1029, 1030, 90, -1, -1, 93, 94, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 293, 1071, 1072, 1061, 324, -1, 1110, 1111, -1, 1113, - 4, 3, 4, 5, -1, -1, -1, 310, -1, -1, - -1, -1, -1, -1, -1, 318, -1, -1, -1, 1133, - 323, 25, -1, -1, 1104, -1, 30, 31, -1, 33, - -1, 35, -1, -1, -1, -1, 40, 340, -1, 41, - -1, -1, 1110, 1111, -1, 1113, 349, 51, -1, 53, - -1, -1, 54, -1, 56, 57, -1, -1, -1, -1, - 62, 364, -1, 1143, 367, -1, -1, 1147, 70, 372, - -1, -1, -1, 376, -1, -1, -1, 407, 80, -1, - -1, -1, -1, 87, 414, 415, 88, -1, 418, 1169, - 1170, 93, 422, -1, -1, 398, -1, 400, -1, 402, - 403, 404, 1216, 1217, 1218, 408, -1, -1, -1, -1, - 413, -1, -1, 416, -1, -1, 4, 5, 122, 7, - 8, -1, -1, -1, 128, 13, -1, -1, 132, 432, - -1, 135, 136, 137, -1, -1, -1, -1, -1, -1, - 28, -1, 30, -1, -1, 149, -1, -1, 36, -1, - -1, -1, -1, -1, -1, -1, 459, 45, -1, 462, - 164, 165, 166, -1, -1, -1, 54, -1, 56, 57, - -1, -1, -1, -1, 477, 478, 479, -1, -1, -1, - -1, 1295, -1, -1, -1, -1, -1, 490, -1, 193, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 1, -1, 3, 4, 5, 6, 7, - 8, -1, -1, -1, -1, 13, -1, -1, -1, -1, - -1, 225, 1336, 1337, 1338, -1, -1, 1295, -1, -1, - 28, 534, 30, 31, 32, -1, -1, 1351, 36, 37, - -1, -1, -1, 41, 547, -1, -1, 45, 46, -1, - 48, -1, 1366, -1, -1, -1, 54, -1, 56, 57, - -1, -1, 60, -1, 62, 595, -1, 597, 1336, 1337, - 1338, -1, 70, -1, -1, -1, 3, 4, 5, -1, - -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, - 88, 594, 595, 596, 597, 93, -1, -1, 3, 4, - 5, 631, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 110, -1, 41, 319, -1, -1, -1, 323, - -1, -1, 652, -1, -1, 655, -1, 54, 631, 56, - 57, -1, 635, -1, -1, 62, 41, -1, -1, 642, - 643, -1, 645, 70, -1, -1, -1, -1, -1, 54, - 680, 56, 57, 80, -1, -1, 686, -1, -1, -1, - 364, 88, -1, 367, -1, 70, 93, -1, 372, 672, - -1, 674, 376, -1, -1, 80, 679, 680, 681, -1, - -1, -1, -1, 88, -1, -1, -1, -1, 93, -1, - -1, -1, -1, -1, 398, -1, 400, -1, 402, 403, - 404, 704, -1, -1, 408, -1, -1, -1, -1, 413, - -1, -1, 416, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 432, -1, - -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 312, 313, 314, -1, -1, - 28, 29, 30, 31, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, -1, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - -1, -1, -1, 61, 797, 798, 799, -1, -1, 67, - 803, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, 33, -1, -1, -1, 86, 87, - 88, -1, 825, 826, 827, 93, -1, -1, -1, 97, - -1, 535, 51, -1, -1, -1, -1, -1, -1, -1, - -1, 109, -1, 111, -1, -1, -1, 3, 4, 5, - -1, -1, -1, -1, -1, 79, -1, 860, -1, -1, - 84, -1, 86, -1, -1, 895, 896, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 100, 101, -1, -1, - -1, -1, 3, 4, 5, 41, -1, -1, -1, -1, - 594, 595, 596, 597, 924, -1, -1, -1, 54, -1, - 56, 57, 126, 122, -1, -1, -1, 611, -1, -1, - -1, 914, -1, -1, 70, -1, 135, 136, 137, -1, - 41, -1, 925, -1, 80, -1, -1, 631, -1, -1, - -1, 635, 88, 54, -1, 56, 57, 93, 642, 643, - -1, 645, -1, -1, -1, 164, 165, 166, -1, 70, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, - -1, -1, -1, -1, -1, -1, -1, 88, 672, -1, - 674, -1, 93, -1, 193, 679, 680, 681, -1, -1, - 537, 538, -1, -1, -1, -1, -1, -1, -1, 992, + -1, 859, 93, 861, 862, 863, 864, 931, -1, 933, + -1, -1, -1, -1, 938, 939, 940, 3, 4, 5, + 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4, 5, -1, 128, 8, 9, + 898, 132, 133, -1, 14, -1, 137, -1, -1, -1, + -1, -1, -1, 144, 912, 146, 42, 148, -1, -1, + 151, 152, 153, 49, -1, -1, 924, 37, -1, 927, + -1, 57, 58, 931, 165, 933, 46, -1, 48, -1, + 938, 939, 940, -1, -1, 55, -1, 57, 58, 180, + 181, 182, -1, -1, -1, 81, -1, 1015, 956, 190, + 958, 71, -1, 89, 1028, 1029, -1, -1, -1, -1, + -1, 81, 1036, -1, -1, -1, 1034, -1, 209, -1, + -1, 91, -1, -1, 94, 95, -1, -1, -1, -1, + -1, 989, 990, -1, 992, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 1005, 1006, 1007, 1008, 1009, -1, 1011, -1, - 1013, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1028, 1029, 1030, -1, 1059, - 1060, -1, 1062, 1063, -1, 1065, -1, 594, -1, 596, - 597, -1, 599, -1, -1, 264, 4, 5, 6, 7, - 8, -1, -1, -1, -1, 13, -1, -1, 1061, -1, - -1, -1, -1, 1066, -1, 1068, -1, -1, -1, 293, - 28, -1, 30, 31, 631, -1, -1, -1, 36, -1, - -1, -1, 306, -1, -1, -1, -1, 45, 4, 5, - -1, 7, 8, 312, 313, 314, 54, 13, 56, 57, - 804, -1, -1, -1, 323, -1, -1, 1110, 1111, -1, - 1113, -1, -1, -1, -1, -1, -1, -1, 1148, 1149, - 36, 825, 826, 827, -1, -1, -1, -1, -1, 45, - 354, 47, -1, -1, -1, -1, -1, -1, 54, -1, - 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 710, 70, -1, 860, -1, -1, -1, - -1, -1, -1, -1, 80, -1, 4, 5, 6, 7, - 8, -1, 396, -1, 90, 13, -1, 93, 94, 398, - -1, 400, -1, 402, 403, 404, -1, 1217, 1218, 408, - 28, -1, 30, 31, 413, -1, -1, 416, 36, -1, - -1, -1, -1, -1, -1, -1, -1, 45, 1238, 1239, - 1240, -1, -1, 1216, 1217, 1218, 54, -1, 56, 57, - -1, 925, -1, 780, -1, 782, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 459, 793, 51, 462, -1, - 797, 798, 466, 467, 468, 469, 470, -1, -1, -1, - -1, -1, -1, -1, -1, 479, -1, -1, -1, -1, - -1, 75, 486, -1, 78, -1, 490, -1, 825, 826, - -1, -1, -1, -1, -1, -1, 1306, 1307, -1, -1, - -1, -1, -1, 97, -1, 99, -1, -1, -1, -1, - -1, -1, 1295, -1, -1, -1, -1, -1, 522, 523, - -1, 1005, 1006, 1007, 1008, 1009, 525, -1, 122, 1013, - -1, -1, -1, 1017, -1, -1, 540, 4, 537, 538, - -1, 540, -1, 547, 1028, 1029, 1030, -1, 547, -1, - -1, -1, -1, 1336, 1337, 1338, -1, -1, 25, -1, - -1, -1, -1, 30, 31, -1, -1, -1, 35, -1, - 164, 165, 166, 40, -1, -1, -1, 1061, -1, -1, - 174, -1, 1066, 1366, 1068, -1, 53, -1, -1, -1, - -1, -1, -1, -1, -1, 594, -1, 596, 597, 193, - 599, -1, 1412, 68, 69, 70, 71, 72, 73, 74, + 83, 84, 85, 244, -1, -1, -1, 3, 4, 5, + 6, 7, 8, 9, -1, -1, 12, -1, 14, -1, + 1028, 1029, 1030, 1031, 1032, -1, -1, -1, 1036, 1097, + -1, -1, 1040, 29, 1108, 31, 32, -1, -1, -1, + -1, 37, -1, 1051, 1052, 1053, 42, -1, -1, -1, + 46, -1, 48, -1, -1, -1, -1, -1, -1, 55, + 1068, 57, 58, -1, -1, 1073, 4, 5, -1, -1, + -1, 9, 313, -1, -1, 71, -1, 1085, -1, -1, + 1154, 1155, -1, 1157, -1, 81, -1, -1, 329, -1, + -1, -1, -1, 89, -1, 91, 337, -1, 94, 95, + 1108, -1, 98, -1, -1, -1, -1, 348, -1, -1, + 48, -1, -1, -1, -1, -1, -1, 55, -1, 57, + 58, 1195, -1, -1, 365, -1, 1200, -1, 1202, -1, + 1198, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 81, -1, 386, 1154, 1155, -1, 1157, + -1, -1, -1, 91, -1, -1, 94, 95, -1, -1, + -1, -1, 403, -1, -1, 406, -1, -1, -1, 1177, + 411, -1, -1, -1, 415, 331, 332, 333, -1, -1, + 1254, -1, -1, -1, -1, -1, -1, 1195, -1, -1, + -1, -1, 1200, -1, 1202, -1, 437, -1, 439, -1, + 441, 442, 443, -1, -1, -1, 447, -1, -1, -1, + -1, 452, -1, -1, 455, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 1, -1, 3, 4, 5, 6, 7, 8, 9, + -1, -1, 12, -1, 14, 1253, 1254, 1255, -1, -1, + -1, -1, -1, -1, -1, 25, -1, 27, 28, -1, + -1, 502, 32, -1, 505, -1, -1, 37, -1, -1, + -1, -1, 42, -1, -1, -1, 46, -1, 48, 520, + 521, 522, -1, -1, -1, 55, -1, 57, 58, 59, + 60, 61, 533, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, -1, 87, 88, 89, + -1, 91, 92, 93, 94, 95, 96, -1, 98, 99, + -1, -1, 1340, 4, 104, -1, -1, 578, -1, 109, + 110, 111, -1, 113, -1, -1, -1, -1, -1, -1, + 591, -1, -1, -1, -1, 26, -1, -1, -1, -1, + 31, 32, -1, 34, -1, 36, 3, 4, 5, 6, + 41, -1, 9, -1, -1, -1, -1, -1, -1, -1, + 1388, 1389, 1390, 54, -1, 56, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1404, -1, 639, 640, + 641, 642, -1, -1, -1, 42, -1, -1, -1, -1, + -1, 1419, -1, -1, -1, -1, -1, 34, 55, -1, + 57, 58, 93, -1, -1, 581, 582, -1, 584, -1, + -1, -1, -1, -1, 71, 591, 677, 54, -1, -1, + 681, -1, -1, -1, 81, -1, -1, 688, 689, -1, + 691, -1, 89, -1, -1, -1, -1, 94, -1, -1, + -1, -1, -1, -1, 4, 5, 137, -1, 8, 9, + -1, -1, -1, 144, 14, 716, -1, 148, -1, -1, + 151, 152, 153, 639, -1, 641, 642, -1, 644, -1, + 3, 4, 5, 6, 165, -1, 9, 37, 739, -1, + -1, -1, -1, -1, -1, -1, 46, -1, 48, 180, + 181, 182, -1, -1, -1, 55, -1, 57, 58, -1, + 137, 677, -1, -1, -1, -1, -1, -1, -1, 42, + -1, 71, -1, -1, 151, 152, 153, -1, 209, -1, + -1, 81, 55, -1, 57, 58, 3, 4, 5, 6, + -1, 91, 9, -1, 94, 95, -1, -1, 71, -1, + -1, -1, -1, 180, 181, 182, -1, -1, 81, -1, + -1, -1, -1, 244, -1, -1, 89, -1, -1, -1, + -1, 94, -1, -1, -1, 42, -1, -1, -1, 745, + -1, -1, 209, 834, 835, 836, -1, -1, 55, 840, + 57, 58, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, + -1, 862, 863, 864, 81, -1, -1, -1, 869, -1, + -1, -1, 89, 331, 332, 333, -1, 94, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, -1, -1, 898, -1, -1, + -1, 817, -1, 819, -1, -1, 283, 338, -1, -1, + -1, -1, -1, -1, 830, -1, -1, 348, 834, 835, + 836, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 931, -1, 933, -1, -1, -1, -1, 938, 939, 940, + -1, -1, -1, -1, -1, -1, 862, 863, 864, -1, + -1, -1, -1, 54, 331, 332, 333, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 87, -1, 216, -1, -1, -1, 1110, 1111, -1, 1113, - -1, 635, 631, -1, 228, -1, -1, -1, -1, -1, - -1, -1, -1, 642, 643, -1, 645, -1, -1, -1, + 85, 348, 403, -1, -1, 406, -1, -1, 79, -1, + 411, 82, 898, -1, 415, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + -1, -1, 103, -1, 105, -1, 437, -1, 439, -1, + 441, 442, 443, -1, 1015, -1, 447, -1, -1, -1, + -1, 452, -1, -1, 455, -1, -1, 1028, 1029, 1030, + 1031, 1032, -1, 1034, -1, 1036, 137, -1, -1, -1, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 1051, 1052, 1053, -1, 14, -1, -1, -1, -1, -1, + 437, -1, 439, -1, 441, 442, 443, -1, -1, 29, + 447, 31, 32, -1, -1, 452, -1, 37, 455, 180, + 181, 182, 42, -1, -1, -1, 46, -1, -1, 190, + -1, -1, -1, -1, -1, 55, 1097, 57, 58, -1, + -1, 61, -1, -1, -1, -1, -1, 1108, 209, -1, + -1, 71, 1028, 1029, 1030, 1031, 1032, -1, -1, -1, + 1036, 81, -1, 581, 582, -1, -1, -1, -1, 89, + -1, 232, -1, -1, 94, 1051, 1052, 1053, 3, 4, + 5, 6, -1, -1, 9, -1, 247, -1, 579, -1, + -1, -1, -1, 1154, 1155, -1, 1157, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 128, -1, -1, -1, 132, -1, -1, 1005, 1006, - 1007, 1008, -1, -1, -1, -1, 1013, -1, -1, -1, - 679, -1, 149, -1, -1, -1, 690, -1, 692, -1, - -1, 1028, 1029, -1, -1, -1, -1, 164, 165, -1, - 699, 700, 701, -1, -1, -1, -1, -1, -1, -1, - 1, 710, 3, 4, 5, 6, 7, 8, -1, -1, - -1, -1, 13, -1, 318, 319, -1, -1, -1, 323, - -1, -1, 1216, 1217, 1218, -1, -1, 28, -1, 30, - 31, 32, -1, -1, -1, 36, -1, -1, -1, -1, - 41, -1, -1, -1, 45, 46, 760, 48, 225, -1, - -1, -1, -1, 54, -1, 56, 57, -1, -1, 60, - -1, 62, -1, 1110, 1111, -1, 1113, -1, -1, 70, - -1, 780, -1, 782, -1, 789, -1, -1, -1, 80, - -1, 795, -1, -1, 793, 799, -1, 88, 797, 798, - 799, -1, 93, -1, 398, -1, 400, -1, 402, 403, - 404, 1295, -1, -1, 408, -1, -1, -1, 822, 413, - 824, -1, 416, 827, -1, -1, 825, 826, 827, -1, - -1, -1, -1, -1, 3, 4, 5, 6, 7, 8, - -1, -1, -1, -1, 13, -1, -1, -1, -1, -1, - -1, -1, 1336, 1337, 1338, -1, 860, -1, -1, -1, - -1, 860, 31, -1, -1, -1, -1, 36, -1, -1, - 874, -1, 41, -1, -1, -1, 45, 881, 47, -1, - -1, -1, 1366, -1, -1, 54, 890, 56, 57, -1, - -1, -1, -1, -1, -1, -1, -1, 364, 902, -1, - 367, 70, -1, -1, -1, 372, -1, -1, -1, 376, - -1, 80, -1, -1, -1, -1, -1, -1, -1, 88, - -1, 90, 11, -1, 93, 94, -1, -1, -1, -1, - 934, 398, 936, 400, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 413, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 550, 551, 312, 313, - 314, -1, -1, -1, -1, 432, -1, -1, 967, 968, - -1, 970, -1, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, -1, -1, -1, -1, - 594, -1, 596, 597, -1, 1009, 1005, 1006, 1007, 1008, - 1009, -1, -1, -1, 1013, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 1030, -1, -1, 1028, - 1029, 1030, -1, -1, -1, -1, -1, 631, -1, -1, - -1, -1, -1, 13, -1, -1, -1, -1, 642, 643, - -1, 645, -1, 23, 24, -1, -1, -1, -1, -1, - 30, 31, 1061, 33, -1, 3, 4, 5, 6, 7, - 8, -1, -1, 11, -1, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 679, -1, -1, -1, -1, - 28, 61, 30, 31, -1, -1, -1, -1, 36, -1, - -1, -1, -1, 41, -1, -1, -1, 45, -1, 47, - -1, 1110, 1111, -1, 1113, -1, 54, -1, 56, 57, - -1, -1, -1, -1, -1, -1, -1, -1, 595, 1133, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 80, 113, 114, 115, -1, 117, 118, -1, - 88, -1, 90, -1, -1, 93, 94, -1, 128, 97, - 130, 131, 132, -1, -1, 135, 136, 137, 635, -1, - -1, -1, -1, -1, -1, 642, 643, -1, 645, -1, - -1, -1, -1, 537, 538, -1, 540, -1, -1, -1, - -1, -1, -1, 547, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 672, -1, 674, -1, 803, - 804, 805, 679, 680, 681, -1, -1, 1216, -1, 1218, - -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, - 8, 825, 826, 827, -1, 13, -1, 207, 208, -1, - 594, -1, 596, 597, -1, 599, -1, -1, -1, -1, - 28, -1, 30, 31, 32, 225, -1, -1, 36, 37, - -1, -1, -1, 41, -1, -1, 860, 45, 46, -1, - 48, -1, -1, -1, -1, -1, 54, 631, 56, 57, - -1, -1, 60, -1, 62, -1, -1, -1, -1, -1, - -1, -1, 70, -1, 264, -1, 1295, -1, -1, -1, - -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, - 88, -1, -1, -1, -1, 93, -1, -1, -1, -1, - 914, 1325, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 110, -1, 1338, -1, -1, 1336, 1337, 1338, - 310, -1, 312, 313, -1, -1, -1, 1351, -1, -1, - 1354, -1, -1, -1, -1, -1, 710, -1, 825, 826, - -1, -1, -1, -1, -1, -1, -1, 1366, -1, -1, - 340, -1, 342, -1, -1, -1, -1, -1, -1, 349, + -1, -1, -1, -1, -1, -1, -1, 42, -1, -1, + -1, 639, -1, 641, 642, -1, 644, -1, -1, -1, + 55, 568, 57, 58, 1195, -1, -1, -1, -1, 1200, + -1, 1202, -1, -1, 581, 582, 71, 584, 639, 640, + 641, 642, -1, -1, 591, -1, 81, -1, -1, 677, + -1, -1, -1, -1, 89, -1, -1, -1, -1, 94, + -1, -1, -1, -1, -1, -1, 337, 338, 1154, 1155, + -1, 1157, 3, 4, 5, 6, 677, 348, 9, -1, + 681, -1, 1253, 1254, 1255, -1, -1, 688, 689, -1, + 691, -1, 639, -1, 641, 642, -1, 644, -1, 3, + 4, 5, 6, -1, -1, 9, -1, -1, -1, -1, + -1, 42, -1, -1, -1, 716, -1, 745, -1, -1, + -1, -1, -1, -1, 55, -1, 57, 58, -1, -1, + 677, -1, -1, -1, -1, -1, -1, -1, 42, -1, + 71, 688, 689, -1, 691, -1, -1, -1, -1, -1, + 81, 55, -1, 57, 58, -1, -1, -1, 89, -1, + -1, -1, -1, 94, -1, -1, 437, 71, 439, 1340, + 441, 442, 443, -1, -1, -1, 447, 81, -1, -1, + -1, 452, -1, -1, 455, 89, 733, 734, 735, 817, + 94, 819, -1, -1, -1, -1, -1, -1, 745, -1, + 4, 5, 830, -1, 8, 9, 834, 835, -1, -1, + 14, -1, -1, 3, 4, 5, 6, 1388, 1389, 1390, + -1, -1, -1, -1, -1, 29, -1, 31, -1, -1, + -1, -1, -1, 37, 862, 863, -1, -1, -1, -1, + 841, -1, 46, -1, -1, -1, -1, -1, 1419, -1, + -1, 55, 42, 57, 58, -1, -1, -1, -1, -1, + -1, 862, 863, 864, -1, 55, -1, 57, 58, -1, + 817, -1, 819, 63, -1, -1, -1, -1, -1, -1, + -1, 71, -1, 830, -1, -1, -1, 834, 835, 836, + 94, 81, -1, -1, -1, -1, -1, 898, -1, 89, + -1, -1, -1, -1, 94, 1, -1, 3, 4, 5, + 6, 7, 8, 9, -1, 862, 863, 864, 14, -1, + -1, -1, -1, 594, 595, -1, -1, -1, -1, -1, + 931, -1, 933, 29, -1, 31, 32, 938, 939, 940, + -1, 37, -1, -1, -1, -1, 42, -1, -1, -1, + 46, 898, -1, 49, -1, -1, -1, -1, -1, 55, + -1, 57, 58, -1, -1, 61, -1, -1, 639, -1, + 641, 642, -1, -1, -1, 71, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 81, -1, -1, -1, -1, + -1, 938, -1, 89, -1, -1, -1, -1, 94, -1, + 1028, 1029, 1030, 1031, -1, -1, 677, -1, 1036, -1, + 3, 4, 5, 6, -1, -1, 9, 688, 689, -1, + 691, -1, -1, 1051, 1052, -1, -1, 1028, 1029, 1030, + 1031, 1032, -1, -1, -1, 1036, -1, -1, -1, -1, + -1, -1, 989, 990, 715, 992, -1, -1, -1, 42, + 1051, 1052, 1053, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 55, -1, 57, 58, -1, -1, -1, 3, + 4, 5, 6, 7, 8, 9, -1, -1, 71, -1, + 14, 1028, 1029, 1030, 1031, 1032, -1, -1, 81, 1036, + -1, -1, -1, -1, -1, 29, 89, 31, 32, -1, + -1, 94, -1, 37, 1051, 1052, 1053, 1108, 42, -1, + -1, -1, 46, -1, 48, -1, -1, -1, -1, -1, + -1, 55, -1, 57, 58, -1, 1154, 1155, -1, 1157, + -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 81, 3, 4, + 5, 6, -1, 1154, 1155, 89, 1157, 91, -1, -1, + 94, 95, 14, -1, -1, 3, 4, 5, 6, 840, + 841, 842, 24, 25, -1, -1, -1, -1, -1, 31, + 32, -1, 34, -1, -1, -1, -1, 42, -1, -1, + -1, 862, 863, 864, 1195, -1, -1, -1, 869, 1200, + 55, 1202, 57, 58, 42, -1, 61, 1154, 1155, -1, + 1157, -1, 64, -1, -1, -1, 71, 55, -1, 57, + 58, -1, -1, -1, -1, -1, 81, 898, -1, -1, + -1, -1, -1, 71, 89, -1, -1, -1, -1, 94, + -1, -1, -1, 81, -1, -1, -1, -1, 1195, -1, + -1, 89, 1253, 1254, 1255, -1, 94, 1, -1, 3, + 4, 5, 6, 7, 8, 9, -1, 938, -1, -1, + 14, 123, -1, 125, -1, -1, 128, -1, -1, -1, + 132, 133, -1, -1, -1, 29, -1, 31, 32, 33, + -1, -1, 144, 37, 146, 147, 148, -1, 42, 151, + 152, 153, 46, 47, -1, 49, 1253, -1, 1255, -1, + -1, 55, -1, 57, 58, -1, -1, 61, -1, 63, + -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, + -1, 3, 4, 5, 6, -1, -1, 81, -1, 1340, + -1, -1, -1, -1, 1015, 89, -1, -1, -1, -1, + 94, -1, -1, -1, -1, -1, -1, 1028, 1029, 1030, + 1031, 1032, -1, 1034, -1, 1036, -1, -1, -1, -1, + 42, 223, 224, -1, -1, -1, -1, -1, -1, -1, + 1051, 1052, 1053, 55, -1, 57, 58, 1388, 1389, 1390, + -1, -1, 244, 1340, -1, -1, -1, -1, -1, 71, + -1, -1, -1, -1, -1, -1, -1, -1, 1, 81, + 3, 4, 5, 6, 7, 8, 9, 89, 1419, -1, + -1, 14, 94, -1, -1, -1, 1097, -1, -1, -1, + -1, 283, -1, -1, -1, -1, 29, -1, 31, 32, + 33, 1388, 1389, 1390, 37, 38, -1, -1, -1, 42, + -1, -1, -1, 46, 47, -1, 49, -1, -1, -1, + -1, -1, 55, -1, 57, 58, -1, -1, 61, -1, + 63, -1, 1419, -1, -1, -1, -1, 329, 71, 331, + 332, -1, -1, 1154, 1155, -1, 1157, -1, 81, -1, + -1, -1, -1, -1, -1, -1, 89, -1, -1, -1, + -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 365, -1, -1, -1, -1, 111, -1, + -1, -1, -1, -1, 1195, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 386, 1, -1, 3, 4, 5, + 6, 7, 8, 9, -1, -1, -1, 399, 14, -1, + -1, 403, -1, -1, 406, -1, -1, -1, -1, 411, + -1, -1, -1, 29, -1, 31, 32, 33, -1, -1, + -1, 37, 38, -1, -1, -1, 42, -1, -1, -1, + 46, 47, 1253, 49, 1255, -1, -1, -1, -1, 55, + -1, 57, 58, -1, -1, 61, -1, 63, -1, 4, + 5, -1, 7, 8, 9, 71, -1, 12, -1, 14, + -1, -1, -1, -1, -1, 81, 468, -1, 470, -1, + -1, -1, -1, 89, 29, -1, 31, 32, 94, -1, + -1, -1, 37, -1, -1, -1, -1, -1, -1, -1, + -1, 46, -1, 495, -1, 111, -1, -1, -1, -1, + 55, -1, 57, 58, 1, -1, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, 13, 14, 15, 1340, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, -1, 35, 36, + 37, -1, 39, 40, 41, 42, 43, 44, -1, 46, + -1, -1, -1, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, -1, 61, 62, 568, 1388, 1389, 1390, + -1, 68, -1, -1, 71, -1, 578, 579, -1, 581, + 582, -1, 79, 80, 81, -1, -1, -1, -1, -1, + 87, 88, 89, -1, -1, -1, -1, 94, 1419, 96, + 4, 5, -1, 7, 8, 9, -1, -1, -1, -1, + 14, -1, -1, -1, 111, 112, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 29, -1, 31, 32, -1, + -1, -1, 634, 37, -1, -1, -1, -1, -1, -1, + -1, 643, 46, -1, -1, -1, -1, -1, -1, -1, + -1, 55, -1, 57, 58, 657, -1, -1, 1, -1, + 3, 4, 5, 6, 7, 8, 9, 10, 11, -1, + 13, 14, 15, -1, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, -1, 35, 36, 37, -1, 39, 40, 41, 42, + 43, 44, -1, 46, -1, -1, -1, 50, 51, 52, + 53, 54, 55, 715, 57, 58, 59, -1, 61, 62, + -1, -1, -1, -1, -1, 68, -1, -1, 71, -1, + -1, 733, 734, 735, -1, -1, 79, 80, 81, -1, + -1, -1, -1, 745, 87, 88, 89, -1, -1, -1, + -1, 94, 1, 96, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, -1, -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 360, -1, -1, -1, 364, -1, -1, 367, 992, -1, - -1, -1, 372, -1, -1, -1, 1410, -1, -1, -1, - -1, 1005, 1006, 1007, 1008, 1009, -1, 1011, -1, 1013, - -1, -1, -1, -1, -1, -1, 780, -1, 782, -1, - -1, -1, -1, -1, 1028, 1029, 1030, -1, -1, 793, - -1, -1, -1, 797, 798, 799, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 925, 429, - -1, -1, -1, -1, -1, -1, -1, 1061, -1, -1, - -1, 825, 826, 827, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 454, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, - 4, 5, 6, 7, 8, -1, 860, -1, -1, 13, - -1, -1, -1, -1, -1, -1, 1110, 1111, -1, 1113, - -1, -1, -1, -1, 28, -1, 30, 31, 32, -1, - -1, -1, 36, 37, -1, -1, -1, 41, 1005, 1006, - -1, 45, 46, -1, 48, -1, 1013, -1, -1, -1, - 54, -1, 56, 57, -1, 525, 60, -1, 62, -1, - -1, -1, -1, -1, 534, 535, 70, 537, 538, -1, - -1, -1, -1, -1, -1, -1, 80, -1, -1, -1, - -1, -1, -1, -1, 88, -1, -1, -1, -1, 93, - -1, -1, -1, -1, 1061, -1, -1, -1, -1, 1066, - -1, 1068, -1, -1, -1, -1, 110, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 589, - -1, -1, 1216, -1, 1218, -1, -1, -1, 598, -1, - -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, - 8, -1, -1, 1110, 1111, 13, 1113, -1, -1, -1, - -1, 1005, 1006, 1007, 1008, 1009, -1, -1, -1, 1013, - 28, -1, 30, 31, -1, -1, -1, -1, 36, -1, - -1, -1, -1, 41, 1028, 1029, 1030, 45, 46, -1, - 48, -1, -1, -1, -1, -1, 54, -1, 56, 57, - 660, -1, -1, -1, 62, -1, -1, -1, 668, -1, - -1, 1295, 70, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 80, -1, -1, -1, -1, -1, -1, -1, - 88, -1, -1, -1, -1, 93, -1, -1, -1, 699, - 700, 701, -1, -1, -1, -1, -1, -1, -1, -1, - 710, -1, 1336, 1337, 1338, -1, -1, -1, -1, -1, - 1217, -1, -1, -1, -1, -1, 1110, 1111, -1, 1113, + 29, 30, 31, 32, 33, -1, 35, 36, 37, -1, + 39, 40, 41, 42, 43, 44, -1, 46, -1, 48, + -1, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, -1, -1, 62, -1, 817, -1, 819, -1, 68, + -1, -1, 71, -1, -1, -1, -1, -1, 830, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, 88, + 89, -1, 91, -1, -1, 94, 95, -1, 1, 98, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, -1, 112, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, + 33, -1, 35, 36, 37, -1, 39, 40, 41, 42, + 43, 44, -1, 46, -1, 48, -1, 50, 51, 52, + 53, 54, 55, -1, 57, 58, 59, -1, -1, 62, + -1, -1, -1, -1, -1, 68, -1, -1, 71, -1, + -1, -1, 924, -1, -1, 927, 79, 80, 81, -1, + -1, -1, -1, -1, 87, 88, 89, -1, 91, -1, + -1, 94, 95, -1, -1, 98, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, - 8, -1, 1366, 11, -1, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 24, -1, 26, 27, - -1, -1, -1, 31, -1, -1, -1, -1, 36, -1, - -1, -1, -1, 41, -1, -1, -1, 45, -1, 47, - 780, -1, 782, -1, -1, -1, 54, -1, 56, 57, - 58, 59, 60, 793, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, -1, 86, 87, - 88, -1, 90, 91, 92, 93, 94, 95, -1, 97, - 98, -1, -1, -1, -1, 103, -1, -1, -1, -1, - 108, 109, 110, -1, 112, 63, 64, 65, 66, 67, + 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 989, 990, -1, + 992, 29, 30, 31, 32, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + -1, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, -1, -1, -1, 62, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, 1040, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, -1, -1, -1, -1, 94, -1, -1, -1, + 98, -1, -1, -1, -1, -1, 1068, -1, -1, -1, + -1, -1, 110, 1, 112, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1098, -1, -1, -1, + -1, 29, 30, 31, 32, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + -1, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, 59, -1, 61, 62, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, -1, -1, -1, 1, 94, 3, 4, 5, + 6, -1, 8, 9, 10, 11, -1, 13, 14, -1, + -1, -1, -1, -1, 112, -1, -1, -1, -1, -1, + -1, -1, -1, 29, 30, 31, 1198, 33, 1200, 35, + 36, 37, -1, 39, 40, 41, 42, 43, 44, -1, + 46, -1, -1, -1, 50, 51, 52, 53, 54, 55, + -1, 57, 58, 59, -1, -1, 62, -1, -1, -1, + -1, -1, 68, -1, -1, 71, -1, -1, -1, -1, + -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, + -1, 87, 88, 89, -1, -1, -1, -1, 94, 95, + 1, -1, 3, 4, 5, 6, -1, 8, 9, 10, + 11, -1, 13, 14, -1, 111, 112, -1, -1, -1, + 21, -1, -1, -1, -1, -1, -1, -1, 29, 30, + 31, -1, 33, -1, 35, 36, 37, -1, 39, 40, + 41, 42, 43, 44, -1, 46, -1, -1, -1, 50, + 51, 52, 53, 54, 55, -1, 57, 58, 59, -1, + -1, 62, -1, -1, -1, -1, -1, 68, -1, -1, + 71, -1, -1, -1, -1, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, 87, 88, 89, -1, + -1, -1, 1, 94, 3, 4, 5, 6, -1, 8, + 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, + 111, 112, 21, -1, -1, -1, -1, -1, -1, -1, + 29, 30, 31, -1, 33, -1, 35, 36, 37, -1, + 39, 40, 41, 42, 43, 44, -1, 46, -1, -1, + -1, 50, 51, 52, 53, 54, 55, -1, 57, 58, + 59, -1, -1, 62, -1, -1, -1, -1, -1, 68, + -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, 88, + 89, -1, -1, -1, 1, 94, 3, 4, 5, 6, + -1, 8, 9, 10, 11, -1, 13, 14, -1, -1, + -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, + -1, -1, 29, 30, 31, -1, 33, -1, 35, 36, + 37, -1, 39, 40, 41, 42, 43, 44, -1, 46, + -1, -1, -1, 50, 51, 52, 53, 54, 55, -1, + 57, 58, 59, -1, -1, 62, -1, -1, -1, -1, + -1, 68, -1, -1, 71, -1, -1, -1, -1, -1, + -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, + 87, 88, 89, -1, -1, -1, -1, 94, 95, 1, + -1, 3, 4, 5, 6, -1, 8, 9, 10, 11, + -1, 13, 14, -1, -1, 112, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, + -1, 33, -1, 35, 36, 37, -1, 39, 40, 41, + 42, 43, 44, -1, 46, -1, -1, -1, 50, 51, + 52, 53, 54, 55, -1, 57, 58, 59, -1, -1, + 62, -1, -1, -1, -1, -1, 68, -1, -1, 71, + -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, 87, 88, 89, -1, -1, + -1, -1, 94, -1, -1, 1, -1, 3, 4, 5, + 6, 103, 8, 9, 10, 11, -1, 13, 14, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 29, 30, 31, -1, 33, -1, 35, + 36, 37, -1, 39, 40, 41, 42, 43, 44, -1, + 46, -1, -1, -1, 50, 51, 52, 53, 54, 55, + -1, 57, 58, 59, -1, -1, 62, -1, -1, -1, + -1, -1, 68, -1, -1, 71, -1, -1, -1, -1, + -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, + -1, 87, 88, 89, -1, -1, -1, 1, 94, 3, + 4, 5, 6, -1, 8, 9, 10, 11, -1, 13, + 14, -1, -1, -1, -1, -1, 112, -1, -1, -1, + -1, -1, -1, -1, -1, 29, 30, 31, -1, 33, + -1, 35, 36, 37, -1, 39, 40, 41, 42, 43, + 44, -1, 46, -1, -1, -1, 50, 51, 52, 53, + 54, 55, -1, 57, 58, 59, -1, -1, 62, -1, + -1, -1, -1, -1, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, 79, 80, 81, -1, -1, + -1, -1, -1, 87, 88, 89, -1, -1, -1, 1, + 94, 3, 4, 5, 6, -1, 8, 9, 10, 11, + -1, 13, 14, -1, -1, -1, -1, -1, 112, -1, + -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, + -1, 33, -1, 35, 36, 37, -1, 39, 40, 41, + 42, 43, 44, -1, 46, -1, -1, -1, 50, 51, + 52, 53, 54, 55, -1, 57, 58, -1, -1, -1, + 62, 63, -1, -1, -1, -1, 68, -1, -1, 71, + -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, 87, 88, 89, -1, -1, + -1, 1, 94, 3, 4, 5, 6, -1, 8, 9, + 10, 11, -1, 13, 14, -1, -1, -1, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, 29, + 30, 31, -1, 33, -1, 35, 36, 37, -1, 39, + 40, 41, 42, 43, 44, -1, 46, -1, -1, -1, + 50, 51, 52, 53, 54, 55, -1, 57, 58, 59, + -1, -1, 62, -1, -1, -1, -1, -1, 68, -1, + -1, 71, -1, -1, -1, -1, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, 87, 88, 89, + -1, -1, -1, 1, 94, 3, 4, 5, 6, -1, + 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, + -1, -1, 112, -1, -1, -1, -1, -1, -1, -1, + -1, 29, 30, 31, -1, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + -1, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, -1, -1, 61, 62, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, -1, -1, -1, 1, 94, 3, 4, 5, + 6, -1, 8, 9, 10, 11, -1, 13, 14, -1, + -1, -1, -1, -1, 112, -1, -1, -1, -1, -1, + -1, -1, -1, 29, 30, 31, -1, 33, -1, 35, + 36, 37, -1, 39, 40, 41, 42, 43, 44, -1, + 46, -1, -1, -1, 50, 51, 52, 53, 54, 55, + -1, 57, 58, -1, -1, -1, 62, -1, -1, -1, + -1, -1, 68, 1, -1, 71, 4, 5, -1, -1, + 8, 9, -1, 79, 80, 81, 14, -1, -1, -1, + -1, 87, 88, 89, -1, -1, -1, -1, 94, -1, + -1, 29, -1, 31, -1, -1, -1, -1, -1, 37, + -1, 39, 40, -1, 110, -1, 112, -1, 46, -1, + 48, -1, -1, -1, -1, -1, -1, 55, -1, 57, + 58, -1, 60, -1, -1, -1, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 883, 884, -1, -1, -1, -1, -1, + 78, 79, 80, 81, 82, 83, 84, -1, -1, 87, + 88, 89, -1, -1, 92, -1, 1, 95, 3, 4, + 5, 6, -1, 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, 112, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, - 6, 7, 8, 9, 10, 915, 12, 13, 14, -1, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, 35, - 36, -1, 38, 39, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 49, 50, 51, 52, 53, 54, -1, - 56, 57, 58, -1, 60, 61, -1, 967, 968, -1, - 970, 67, -1, -1, 70, -1, -1, -1, -1, -1, - -1, -1, 78, 79, 80, -1, -1, -1, -1, -1, - 86, 87, 88, -1, -1, -1, -1, 93, -1, 95, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 110, 111, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, -1, -1, - -1, -1, -1, -1, -1, -1, 1046, -1, -1, -1, + -1, -1, -1, -1, 29, 30, 31, -1, 33, -1, + 35, 36, 37, -1, 39, 40, 41, 42, 43, 44, + -1, 46, -1, -1, -1, 50, 51, 52, 53, 54, + 55, -1, 57, 58, -1, -1, -1, 62, -1, -1, + -1, -1, -1, 68, -1, -1, 71, -1, -1, -1, + -1, -1, -1, -1, 79, 80, 81, -1, -1, -1, + -1, -1, 87, 88, 89, -1, -1, -1, 1, 94, + 3, 4, 5, 6, -1, 8, 9, 10, 11, -1, + 13, 14, -1, -1, -1, -1, -1, 112, -1, -1, + -1, -1, -1, -1, -1, -1, 29, 30, 31, -1, + 33, -1, 35, 36, 37, -1, 39, 40, 41, 42, + 43, 44, -1, 46, -1, -1, -1, 50, 51, 52, + 53, 54, 55, -1, 57, 58, -1, -1, -1, 62, + -1, -1, -1, -1, -1, 68, -1, -1, 71, -1, + -1, -1, -1, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, -1, 87, 88, 89, -1, -1, -1, + 1, 94, 3, 4, 5, 6, -1, 8, 9, 10, + 11, -1, 13, 14, -1, -1, -1, -1, -1, 112, + -1, -1, -1, -1, -1, -1, -1, -1, 29, 30, + 31, -1, 33, -1, 35, 36, 37, -1, 39, 40, + 41, 42, 43, 44, -1, 46, -1, -1, -1, 50, + 51, 52, 53, 54, 55, -1, 57, 58, -1, -1, + -1, 62, -1, -1, -1, -1, -1, 68, -1, -1, + 71, -1, -1, -1, -1, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, 87, 88, 89, 3, + 4, 5, 6, 94, 8, 9, 10, 11, -1, 13, + 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 112, -1, -1, -1, 29, 30, 31, -1, 33, + -1, 35, 36, 37, -1, 39, 40, 41, 42, 43, + 44, -1, 46, -1, -1, -1, 50, 51, 52, 53, + 54, 55, -1, 57, 58, -1, -1, -1, 62, -1, + -1, -1, -1, -1, 68, -1, 1, 71, 3, 4, + 5, 6, 7, 8, 9, 79, 80, 81, -1, 14, + -1, -1, -1, 87, 88, 89, -1, -1, -1, -1, + 94, -1, -1, -1, 29, -1, 31, 32, 33, -1, + -1, -1, 37, 38, -1, -1, -1, 42, 112, 113, + -1, 46, 47, -1, 49, -1, -1, -1, -1, -1, + 55, -1, 57, 58, -1, -1, 61, -1, 63, -1, + -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 81, -1, -1, -1, + -1, -1, -1, -1, 89, -1, -1, -1, -1, 94, + -1, -1, -1, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, 13, 14, 15, 111, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, 35, 36, 37, -1, 39, + 40, 41, 42, 43, 44, -1, 46, -1, -1, -1, + 50, 51, 52, 53, 54, 55, -1, 57, 58, 59, + -1, 61, 62, -1, -1, -1, -1, -1, 68, -1, + -1, 71, -1, -1, -1, -1, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, 87, 88, 89, + -1, -1, -1, -1, 94, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 108, -1, -1, 1064, 1, 1066, 3, 4, 5, - 6, 7, 8, 9, 10, -1, 12, 13, 14, -1, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, -1, 34, 35, - 36, -1, 38, 39, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 49, 50, 51, 52, 53, 54, -1, - 56, 57, 58, -1, 60, 61, -1, -1, -1, -1, - -1, 67, -1, -1, 70, -1, -1, -1, -1, -1, - -1, -1, 78, 79, 80, -1, -1, -1, -1, -1, - 86, 87, 88, -1, -1, -1, -1, 93, 1, 95, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, -1, -1, -1, -1, 111, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, 36, -1, 38, 39, 40, 41, 42, - 43, -1, 45, -1, 47, -1, 49, 50, 51, 52, - 53, 54, -1, 56, 57, 58, -1, -1, 61, -1, - -1, -1, -1, -1, 67, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 78, 79, 80, -1, -1, - -1, -1, -1, 86, 87, 88, -1, 90, -1, -1, - 93, 94, -1, 1, 97, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, -1, -1, 111, -1, + -1, 111, 112, 3, 4, 5, 6, 7, 8, 9, + 10, 11, -1, 13, 14, 15, -1, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, -1, 35, 36, 37, -1, 39, + 40, 41, 42, 43, 44, -1, 46, -1, -1, -1, + 50, 51, 52, 53, 54, 55, -1, 57, 58, 59, + -1, 61, 62, -1, -1, -1, -1, -1, 68, -1, + -1, 71, -1, -1, -1, -1, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, 87, 88, 89, + -1, -1, -1, -1, 94, -1, 96, -1, -1, 3, + 4, 5, 6, 7, 8, 9, 10, 11, -1, 13, + 14, 15, 112, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + -1, 35, 36, 37, -1, 39, 40, 41, 42, 43, + 44, -1, 46, -1, -1, -1, 50, 51, 52, 53, + 54, 55, -1, 57, 58, 59, -1, 61, 62, -1, + -1, -1, -1, -1, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, 79, 80, 81, -1, -1, + -1, -1, -1, 87, 88, 89, -1, -1, -1, -1, + 94, -1, 96, -1, -1, 3, 4, 5, 6, 7, + 8, 9, 10, 11, -1, 13, 14, 15, 112, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + -1, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, -1, -1, 61, 62, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, -1, -1, -1, -1, 94, -1, 96, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, -1, -1, -1, 112, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, + -1, 35, 36, 37, -1, 39, 40, 41, 42, 43, + 44, -1, 46, -1, 48, -1, 50, 51, 52, 53, + 54, 55, -1, 57, 58, -1, -1, -1, 62, -1, + -1, -1, -1, -1, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, 79, 80, 81, -1, -1, + -1, -1, -1, 87, 88, 89, -1, 91, -1, -1, + 94, 95, -1, -1, 98, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, -1, 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 28, 29, 30, 31, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, 47, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - 58, -1, -1, 61, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, 90, -1, -1, 93, 94, -1, 1, 97, - 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, - 13, -1, -1, 111, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, 36, -1, 38, 39, 40, 41, 42, - 43, -1, 45, -1, -1, -1, 49, 50, 51, 52, - 53, 54, -1, 56, 57, 58, -1, 60, 61, -1, - -1, -1, -1, -1, 67, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 78, 79, 80, -1, -1, - -1, -1, -1, 86, 87, 88, -1, -1, -1, 1, - 93, 3, 4, 5, -1, 7, 8, 9, 10, -1, - 12, 13, -1, -1, -1, -1, -1, -1, 111, -1, - -1, -1, -1, -1, -1, -1, 28, 29, 30, -1, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, 58, -1, -1, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, -1, -1, - -1, 93, 94, 1, -1, 3, 4, 5, -1, 7, - 8, 9, 10, -1, 12, 13, -1, -1, 110, 111, - -1, -1, 20, -1, -1, -1, -1, -1, -1, -1, - 28, 29, 30, -1, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, -1, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - 58, -1, -1, 61, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, -1, -1, -1, 93, 1, -1, 3, 4, - 5, -1, 7, 8, 9, 10, -1, 12, 13, -1, - -1, -1, 110, 111, -1, 20, -1, -1, -1, -1, - -1, -1, -1, 28, 29, 30, -1, 32, -1, 34, - 35, 36, -1, 38, 39, 40, 41, 42, 43, -1, - 45, -1, -1, -1, 49, 50, 51, 52, 53, 54, - -1, 56, 57, 58, -1, -1, 61, -1, -1, -1, - -1, -1, 67, -1, -1, 70, -1, -1, -1, -1, - -1, -1, -1, 78, 79, 80, -1, -1, -1, -1, - -1, 86, 87, 88, -1, -1, -1, 1, 93, 3, - 4, 5, -1, 7, 8, 9, 10, -1, 12, 13, - -1, -1, -1, -1, -1, 110, 111, -1, -1, -1, - -1, -1, -1, -1, 28, 29, 30, -1, 32, -1, - 34, 35, 36, -1, 38, 39, 40, 41, 42, 43, - -1, 45, -1, -1, -1, 49, 50, 51, 52, 53, - 54, -1, 56, 57, 58, -1, -1, 61, -1, -1, - -1, -1, -1, 67, -1, -1, 70, -1, -1, -1, - -1, -1, -1, -1, 78, 79, 80, -1, -1, -1, - -1, -1, 86, 87, 88, -1, -1, -1, -1, 93, - 94, 1, -1, 3, 4, 5, -1, 7, 8, 9, - 10, -1, 12, 13, -1, -1, -1, 111, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 28, 29, - 30, -1, 32, -1, 34, 35, 36, -1, 38, 39, - 40, 41, 42, 43, -1, 45, -1, -1, -1, 49, - 50, 51, 52, 53, 54, -1, 56, 57, 58, -1, - -1, 61, 1, -1, -1, 4, 5, 67, 7, 8, - 70, -1, -1, -1, 13, -1, -1, -1, 78, 79, - 80, -1, -1, -1, -1, -1, 86, 87, 88, 28, - -1, 30, -1, 93, -1, -1, -1, 36, -1, 38, - 39, -1, 102, -1, -1, -1, 45, -1, 47, -1, - -1, 111, -1, -1, -1, 54, -1, 56, 57, -1, - 59, -1, -1, -1, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, -1, -1, 86, 87, 88, - -1, -1, 91, -1, 1, 94, 3, 4, 5, -1, - 7, 8, 9, 10, -1, 12, 13, -1, -1, -1, - -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, - -1, 28, 29, 30, -1, 32, -1, 34, 35, 36, - -1, 38, 39, 40, 41, 42, 43, -1, 45, -1, - -1, -1, 49, 50, 51, 52, 53, 54, -1, 56, - 57, 58, -1, -1, 61, -1, -1, -1, -1, -1, - 67, -1, -1, 70, -1, -1, -1, -1, -1, -1, - -1, 78, 79, 80, -1, -1, -1, -1, -1, 86, - 87, 88, -1, -1, -1, 1, 93, 3, 4, 5, - -1, 7, 8, 9, 10, -1, 12, 13, -1, -1, - -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, - -1, -1, 28, 29, 30, -1, 32, -1, 34, 35, - 36, -1, 38, 39, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 49, 50, 51, 52, 53, 54, -1, - 56, 57, 58, -1, -1, 61, -1, -1, -1, -1, - -1, 67, -1, -1, 70, -1, -1, -1, -1, -1, - -1, -1, 78, 79, 80, -1, -1, -1, -1, -1, - 86, 87, 88, -1, -1, -1, 1, 93, 3, 4, - 5, -1, 7, 8, 9, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, 111, -1, -1, -1, -1, - -1, -1, -1, 28, 29, 30, -1, 32, -1, 34, - 35, 36, -1, 38, 39, 40, 41, 42, 43, -1, - 45, -1, -1, -1, 49, 50, 51, 52, 53, 54, - -1, 56, 57, -1, -1, -1, 61, 62, -1, -1, - -1, -1, 67, -1, -1, 70, -1, -1, -1, -1, - -1, -1, -1, 78, 79, 80, -1, -1, -1, -1, - -1, 86, 87, 88, -1, -1, -1, 1, 93, 3, - 4, 5, -1, 7, 8, 9, 10, -1, 12, 13, - -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, - -1, -1, -1, -1, 28, 29, 30, -1, 32, -1, - 34, 35, 36, -1, 38, 39, 40, 41, 42, 43, - -1, 45, -1, -1, -1, 49, 50, 51, 52, 53, - 54, -1, 56, 57, 58, -1, -1, 61, -1, -1, - -1, -1, -1, 67, -1, -1, 70, -1, -1, -1, - -1, -1, -1, -1, 78, 79, 80, -1, -1, -1, - -1, -1, 86, 87, 88, -1, -1, -1, 1, 93, - 3, 4, 5, -1, 7, 8, 9, 10, -1, 12, - 13, -1, -1, -1, -1, -1, -1, 111, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, -1, 32, - -1, 34, 35, 36, -1, 38, 39, 40, 41, 42, - 43, -1, 45, -1, -1, -1, 49, 50, 51, 52, - 53, 54, -1, 56, 57, -1, -1, 60, 61, -1, - -1, -1, -1, -1, 67, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 78, 79, 80, -1, -1, - -1, -1, -1, 86, 87, 88, -1, -1, -1, 1, - 93, 3, 4, 5, -1, 7, 8, 9, 10, -1, - 12, 13, -1, -1, -1, -1, -1, -1, 111, -1, - -1, -1, -1, -1, -1, -1, 28, 29, 30, -1, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, -1, -1, -1, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, -1, -1, - 1, 93, 3, 4, 5, -1, 7, 8, 9, 10, - -1, 12, 13, -1, -1, -1, -1, 109, -1, 111, - -1, -1, -1, -1, -1, -1, -1, 28, 29, 30, - -1, 32, -1, 34, 35, 36, -1, 38, 39, 40, - 41, 42, 43, -1, 45, -1, -1, -1, 49, 50, - 51, 52, 53, 54, -1, 56, 57, -1, -1, -1, - 61, -1, -1, -1, -1, -1, 67, -1, -1, 70, - -1, -1, -1, -1, -1, -1, -1, 78, 79, 80, - -1, -1, -1, -1, -1, 86, 87, 88, -1, -1, - -1, 1, 93, 3, 4, 5, -1, 7, 8, 9, - 10, -1, 12, 13, -1, -1, -1, -1, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, 28, 29, - 30, -1, 32, -1, 34, 35, 36, -1, 38, 39, - 40, 41, 42, 43, -1, 45, -1, -1, -1, 49, - 50, 51, 52, 53, 54, -1, 56, 57, -1, -1, - -1, 61, -1, -1, -1, -1, -1, 67, -1, -1, - 70, -1, -1, -1, -1, -1, -1, -1, 78, 79, - 80, -1, -1, -1, -1, -1, 86, 87, 88, -1, - -1, -1, 1, 93, 3, 4, 5, -1, 7, 8, - 9, 10, -1, 12, 13, -1, -1, -1, -1, -1, - -1, 111, -1, -1, -1, -1, -1, -1, -1, 28, - 29, 30, -1, 32, -1, 34, 35, 36, -1, 38, - 39, 40, 41, 42, 43, -1, 45, -1, -1, -1, - 49, 50, 51, 52, 53, 54, -1, 56, 57, -1, - -1, -1, 61, -1, -1, -1, -1, -1, 67, -1, - -1, 70, -1, -1, -1, -1, -1, -1, -1, 78, - 79, 80, -1, -1, -1, -1, -1, 86, 87, 88, - -1, 3, 4, 5, 93, 7, 8, 9, 10, -1, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 111, -1, -1, -1, 28, 29, 30, -1, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, -1, -1, -1, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, -1, -1, - -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, - 112, 3, 4, 5, 6, 7, 8, 9, 10, -1, - 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, 58, -1, 60, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, -1, -1, - -1, 93, -1, 95, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 110, 111, - 3, 4, 5, 6, 7, 8, 9, 10, -1, 12, - 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - -1, 34, 35, 36, -1, 38, 39, 40, 41, 42, - 43, -1, 45, -1, -1, -1, 49, 50, 51, 52, - 53, 54, -1, 56, 57, 58, -1, 60, 61, -1, - -1, -1, -1, -1, 67, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 78, 79, 80, -1, -1, - -1, -1, -1, 86, 87, 88, -1, -1, -1, -1, - 93, -1, 95, -1, -1, -1, 3, 4, 5, 6, - 7, 8, 9, 10, -1, 12, 13, 14, 111, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, -1, 34, 35, 36, - -1, 38, 39, 40, 41, 42, 43, -1, 45, -1, - -1, -1, 49, 50, 51, 52, 53, 54, -1, 56, - 57, 58, -1, 60, 61, -1, -1, -1, -1, -1, - 67, -1, -1, 70, -1, -1, -1, -1, -1, -1, - -1, 78, 79, 80, -1, -1, -1, -1, -1, 86, - 87, 88, -1, -1, -1, -1, 93, -1, 95, -1, - -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, - -1, 12, 13, 14, 111, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, -1, 34, 35, 36, -1, 38, 39, 40, - 41, 42, 43, -1, 45, -1, -1, -1, 49, 50, - 51, 52, 53, 54, -1, 56, 57, -1, -1, 60, - 61, -1, -1, -1, -1, -1, 67, -1, -1, 70, - -1, -1, -1, -1, -1, -1, -1, 78, 79, 80, - -1, -1, -1, -1, -1, 86, 87, 88, -1, -1, - -1, -1, 93, -1, 95, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, -1, -1, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 28, 29, 30, 31, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, 47, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - -1, -1, -1, 61, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, 90, -1, -1, 93, 94, -1, -1, 97, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, -1, -1, 111, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, - -1, 34, 35, 36, -1, 38, 39, 40, 41, 42, - 43, -1, 45, -1, 47, -1, 49, 50, 51, 52, - 53, 54, -1, 56, 57, -1, -1, -1, 61, -1, - -1, -1, -1, -1, 67, -1, -1, 70, -1, -1, - -1, -1, -1, -1, -1, 78, 79, 80, -1, -1, - -1, -1, -1, 86, 87, 88, -1, 90, -1, -1, - 93, 94, -1, -1, 97, 3, 4, 5, -1, 7, - 8, 9, 10, -1, 12, 13, -1, -1, 111, -1, + -1, 29, 30, 31, 32, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + 48, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, -1, -1, -1, 62, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, -1, 91, -1, -1, 94, 95, -1, -1, + 98, 3, 4, 5, 6, -1, 8, 9, 10, 11, + -1, 13, 14, -1, 112, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, + -1, 33, -1, 35, 36, 37, -1, 39, 40, 41, + 42, 43, 44, -1, 46, -1, -1, -1, 50, 51, + 52, 53, 54, 55, -1, 57, 58, -1, -1, -1, + 62, -1, -1, -1, -1, -1, 68, -1, -1, 71, + -1, -1, -1, -1, 76, -1, 78, 79, 80, 81, + -1, -1, -1, -1, -1, 87, 88, 89, 3, 4, + 5, 6, 94, 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 28, 29, 30, -1, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, -1, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - -1, -1, -1, 61, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, 75, -1, 77, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, 3, 4, 5, 93, 7, 8, 9, 10, - -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 111, -1, -1, -1, 28, 29, 30, - -1, 32, -1, 34, 35, 36, -1, 38, 39, 40, - 41, 42, 43, -1, 45, -1, 47, -1, 49, 50, - 51, 52, 53, 54, -1, 56, 57, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 67, -1, -1, 70, - -1, -1, -1, -1, -1, -1, -1, 78, 79, 80, - -1, -1, -1, -1, -1, 86, 87, 88, -1, 90, - -1, -1, 93, 94, 3, 4, 5, -1, 7, 8, - 9, 10, -1, 12, 13, -1, -1, -1, -1, -1, - 111, -1, -1, -1, -1, -1, -1, -1, -1, 28, - 29, 30, -1, 32, -1, 34, 35, 36, -1, 38, - 39, 40, 41, 42, 43, -1, 45, -1, 47, -1, - 49, 50, 51, 52, 53, 54, -1, 56, 57, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 67, -1, - -1, 70, -1, -1, -1, -1, -1, -1, -1, 78, - 79, 80, -1, -1, -1, -1, -1, 86, 87, 88, - -1, 90, -1, -1, 93, 94, 3, 4, 5, -1, - 7, 8, 9, 10, -1, 12, 13, -1, -1, -1, - -1, -1, 111, -1, -1, -1, -1, -1, -1, -1, - -1, 28, 29, 30, -1, 32, -1, 34, 35, 36, - -1, 38, 39, 40, 41, 42, 43, -1, 45, -1, - -1, -1, 49, 50, 51, 52, 53, 54, -1, 56, - 57, -1, -1, 60, 61, -1, -1, -1, -1, -1, - 67, -1, -1, 70, -1, -1, -1, -1, -1, -1, - -1, 78, 79, 80, -1, -1, -1, -1, -1, 86, - 87, 88, -1, -1, -1, -1, 93, 3, 4, 5, - 6, 7, 8, 9, 10, -1, 12, 13, -1, -1, - -1, -1, -1, -1, 111, -1, -1, -1, -1, -1, - -1, -1, 28, 29, 30, 31, 32, -1, 34, 35, - 36, -1, 38, 39, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 49, 50, 51, 52, 53, 54, -1, - 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 67, -1, -1, 70, -1, -1, -1, -1, -1, - -1, -1, 78, 79, 80, -1, -1, -1, -1, -1, - 86, 87, 88, -1, 3, 4, 5, 93, 7, 8, - 9, 10, -1, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 111, -1, -1, -1, 28, - 29, 30, -1, 32, -1, 34, 35, 36, -1, 38, - 39, 40, 41, 42, 43, -1, 45, -1, -1, -1, - 49, 50, 51, 52, 53, 54, -1, 56, 57, -1, - -1, -1, 61, -1, -1, -1, -1, -1, 67, -1, - -1, 70, -1, -1, -1, -1, -1, -1, -1, 78, - 79, 80, -1, -1, -1, -1, -1, 86, 87, 88, - -1, 3, 4, 5, 93, 7, 8, 9, 10, -1, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 111, -1, -1, -1, 28, 29, 30, -1, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, -1, -1, -1, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, 3, 4, - 5, 93, 7, 8, 9, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, - -1, -1, -1, 28, 29, 30, -1, 32, -1, 34, - 35, 36, -1, 38, 39, 40, 41, 42, 43, -1, - 45, -1, -1, -1, 49, 50, 51, 52, 53, 54, - -1, 56, 57, 58, -1, -1, -1, -1, -1, -1, - -1, -1, 67, -1, -1, 70, -1, -1, -1, -1, - -1, -1, -1, 78, 79, 80, -1, -1, -1, -1, - -1, 86, 87, 88, -1, 3, 4, 5, 93, 7, - 8, 9, 10, -1, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, - 28, 29, 30, -1, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, -1, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, -1, -1, -1, 93, 94, 3, 4, 5, - -1, 7, 8, 9, 10, -1, 12, 13, -1, -1, - -1, -1, -1, 111, -1, -1, -1, -1, -1, -1, - -1, -1, 28, 29, 30, -1, 32, -1, 34, 35, - 36, -1, 38, 39, 40, 41, 42, 43, -1, 45, - -1, -1, -1, 49, 50, 51, 52, 53, 54, -1, - 56, 57, -1, -1, -1, 61, -1, -1, -1, -1, - -1, 67, -1, -1, 70, -1, -1, -1, -1, -1, - -1, -1, 78, 79, 80, -1, -1, -1, -1, -1, - 86, 87, 88, -1, 3, 4, 5, 93, 7, 8, - 9, 10, -1, 12, 13, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 111, -1, -1, -1, 28, - 29, 30, -1, 32, -1, 34, 35, 36, -1, 38, - 39, 40, 41, 42, 43, -1, 45, -1, -1, -1, - 49, 50, 51, 52, 53, 54, -1, 56, 57, -1, - -1, -1, 61, -1, -1, -1, -1, -1, 67, -1, - -1, 70, -1, -1, -1, -1, -1, -1, -1, 78, - 79, 80, -1, -1, -1, -1, -1, 86, 87, 88, - -1, 3, 4, 5, 93, 7, 8, 9, 10, -1, - 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 111, -1, -1, -1, 28, 29, 30, -1, - 32, -1, 34, 35, 36, -1, 38, 39, 40, 41, - 42, 43, -1, 45, -1, -1, -1, 49, 50, 51, - 52, 53, 54, -1, 56, 57, -1, -1, -1, 61, - -1, -1, -1, -1, -1, 67, -1, -1, 70, -1, - -1, -1, -1, -1, -1, -1, 78, 79, 80, -1, - -1, -1, -1, -1, 86, 87, 88, -1, 3, 4, - 5, 93, 7, 8, 9, 10, -1, 12, 13, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, - -1, -1, -1, 28, 29, 30, -1, 32, -1, 34, - 35, 36, -1, 38, 39, 40, 41, 42, 43, -1, - 45, -1, -1, -1, 49, 50, 51, 52, 53, 54, - -1, 56, 57, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 67, -1, -1, 70, -1, -1, -1, -1, - -1, -1, -1, 78, 79, 80, -1, -1, -1, -1, - -1, 86, 87, 88, -1, 3, 4, 5, 93, 7, - 8, 9, 10, -1, 12, 13, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 111, -1, -1, -1, - 28, 29, 30, -1, 32, -1, 34, 35, 36, -1, - 38, 39, 40, 41, 42, 43, -1, 45, -1, -1, - -1, 49, 50, 51, 52, 53, 54, -1, 56, 57, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 67, - -1, -1, 70, -1, -1, -1, -1, -1, -1, -1, - 78, 79, 80, -1, -1, -1, -1, -1, 86, 87, - 88, -1, 3, 4, 5, 93, 7, 8, 9, 10, - -1, 12, 13, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 111, -1, -1, -1, 28, 29, 30, - -1, 32, -1, 34, 35, 36, -1, 38, 39, 40, - 41, 42, 43, -1, 45, -1, -1, -1, 49, 50, - 51, 52, 53, 54, -1, 56, 57, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 67, -1, -1, 70, - -1, -1, -1, -1, -1, -1, -1, 78, 79, 80, - -1, -1, -1, -1, -1, 86, 87, 88, -1, 3, - 4, 5, 93, 7, 8, 9, 10, -1, 12, 13, + 112, -1, -1, -1, 29, 30, 31, -1, 33, -1, + 35, 36, 37, -1, 39, 40, 41, 42, 43, 44, + -1, 46, -1, 48, -1, 50, 51, 52, 53, 54, + 55, -1, 57, 58, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 68, -1, -1, 71, -1, -1, -1, + -1, -1, -1, -1, 79, 80, 81, -1, -1, -1, + -1, -1, 87, 88, 89, -1, 91, -1, -1, 94, + 95, 3, 4, 5, 6, -1, 8, 9, 10, 11, + -1, 13, 14, -1, -1, -1, -1, 112, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 29, 30, 31, + -1, 33, -1, 35, 36, 37, -1, 39, 40, 41, + 42, 43, 44, -1, 46, -1, 48, -1, 50, 51, + 52, 53, 54, 55, -1, 57, 58, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 68, -1, -1, 71, + -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, 87, 88, 89, -1, 91, + -1, -1, 94, 95, 3, 4, 5, 6, -1, 8, + 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, + 112, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 29, 30, 31, -1, 33, -1, 35, 36, 37, -1, + 39, 40, 41, 42, 43, 44, -1, 46, -1, -1, + -1, 50, 51, 52, 53, 54, 55, -1, 57, 58, + -1, -1, 61, 62, -1, -1, -1, -1, -1, 68, + -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, 88, + 89, -1, -1, -1, -1, 94, 3, 4, 5, 6, + 7, 8, 9, 10, 11, -1, 13, 14, -1, -1, + -1, -1, -1, 112, -1, -1, -1, -1, -1, -1, + -1, -1, 29, 30, 31, 32, 33, -1, 35, 36, + 37, -1, 39, 40, 41, 42, 43, 44, -1, 46, + -1, -1, -1, 50, 51, 52, 53, 54, 55, -1, + 57, 58, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 68, -1, -1, 71, -1, -1, -1, -1, -1, + -1, -1, 79, 80, 81, -1, -1, -1, -1, -1, + 87, 88, 89, 3, 4, 5, 6, 94, 8, 9, + 10, 11, -1, 13, 14, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 112, -1, -1, -1, 29, + 30, 31, -1, 33, -1, 35, 36, 37, -1, 39, + 40, 41, 42, 43, 44, -1, 46, -1, -1, -1, + 50, 51, 52, 53, 54, 55, -1, 57, 58, -1, + -1, -1, 62, -1, -1, -1, -1, -1, 68, -1, + -1, 71, -1, -1, -1, -1, -1, -1, -1, 79, + 80, 81, -1, -1, -1, -1, -1, 87, 88, 89, + 3, 4, 5, 6, 94, 8, 9, 10, 11, -1, + 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 112, -1, -1, -1, 29, 30, 31, -1, + 33, -1, 35, 36, 37, -1, 39, 40, 41, 42, + 43, 44, -1, 46, -1, -1, -1, 50, 51, 52, + 53, 54, 55, -1, 57, 58, -1, -1, -1, 62, + -1, -1, -1, -1, -1, 68, -1, -1, 71, -1, + -1, -1, -1, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, -1, 87, 88, 89, 3, 4, 5, + 6, 94, 8, 9, 10, 11, -1, 13, 14, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, + -1, -1, -1, 29, 30, 31, -1, 33, -1, 35, + 36, 37, -1, 39, 40, 41, 42, 43, 44, -1, + 46, -1, -1, -1, 50, 51, 52, 53, 54, 55, + -1, 57, 58, 59, -1, -1, -1, -1, -1, -1, + -1, -1, 68, -1, -1, 71, -1, -1, -1, -1, + -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, + -1, 87, 88, 89, 3, 4, 5, 6, 94, 8, + 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 112, -1, -1, -1, + 29, 30, 31, -1, 33, -1, 35, 36, 37, -1, + 39, 40, 41, 42, 43, 44, -1, 46, -1, -1, + -1, 50, 51, 52, 53, 54, 55, -1, 57, 58, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 68, + -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, 88, + 89, -1, -1, -1, -1, 94, 95, 3, 4, 5, + 6, -1, 8, 9, 10, 11, -1, 13, 14, -1, + -1, -1, -1, 112, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 29, 30, 31, -1, 33, -1, 35, + 36, 37, -1, 39, 40, 41, 42, 43, 44, -1, + 46, -1, -1, -1, 50, 51, 52, 53, 54, 55, + -1, 57, 58, -1, -1, -1, 62, -1, -1, -1, + -1, -1, 68, -1, -1, 71, -1, -1, -1, -1, + -1, -1, -1, 79, 80, 81, -1, -1, -1, -1, + -1, 87, 88, 89, 3, 4, 5, 6, 94, 8, + 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 112, -1, -1, -1, + 29, 30, 31, -1, 33, -1, 35, 36, 37, -1, + 39, 40, 41, 42, 43, 44, -1, 46, -1, -1, + -1, 50, 51, 52, 53, 54, 55, -1, 57, 58, + -1, -1, -1, 62, -1, -1, -1, -1, -1, 68, + -1, -1, 71, -1, -1, -1, -1, -1, -1, -1, + 79, 80, 81, -1, -1, -1, -1, -1, 87, 88, + 89, 3, 4, 5, 6, 94, 8, 9, 10, 11, + -1, 13, 14, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 112, -1, -1, -1, 29, 30, 31, + -1, 33, -1, 35, 36, 37, -1, 39, 40, 41, + 42, 43, 44, -1, 46, -1, -1, -1, 50, 51, + 52, 53, 54, 55, -1, 57, 58, -1, -1, -1, + 62, -1, -1, -1, -1, -1, 68, -1, -1, 71, + -1, -1, -1, -1, -1, -1, -1, 79, 80, 81, + -1, -1, -1, -1, -1, 87, 88, 89, 3, 4, + 5, 6, 94, 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 111, -1, -1, -1, 28, 29, 30, -1, 32, -1, - 34, 35, 36, -1, 38, 39, 40, 41, 42, 43, - -1, 45, -1, -1, -1, 49, 50, 51, 52, 53, - 54, -1, 56, 57, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 67, -1, -1, 70, -1, -1, -1, - -1, -1, -1, -1, 78, 79, 80, -1, -1, -1, - -1, -1, 86, 87, 88, -1, 3, 4, 5, 93, - 7, 8, 9, 10, -1, 12, 13, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 111, -1, -1, - -1, 28, 29, 30, -1, 32, -1, 34, 35, 36, - -1, 38, 39, 40, 41, 42, 43, -1, 45, -1, - -1, -1, 49, 50, 51, 52, 53, 54, -1, 56, - 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 67, -1, 1, 70, 3, 4, 5, 6, 7, 8, - -1, 78, 79, 80, 13, -1, -1, -1, -1, 86, - 87, 88, -1, -1, -1, -1, 93, 26, 27, 28, - -1, 30, 31, 32, -1, -1, -1, 36, -1, -1, - -1, -1, 41, -1, 111, 44, 45, 46, -1, 48, - -1, -1, -1, -1, -1, 54, -1, 56, 57, -1, - -1, 60, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 70, 1, -1, 3, 4, 5, 6, 7, 8, - -1, 80, -1, -1, 13, -1, -1, -1, -1, 88, - -1, -1, -1, -1, 93, -1, -1, 26, 27, 28, - 99, 30, 31, 32, -1, -1, -1, 36, -1, -1, - -1, -1, 41, -1, -1, 44, 45, 46, -1, 48, - -1, -1, -1, -1, -1, 54, -1, 56, 57, -1, - -1, 60, -1, 1, -1, 3, 4, 5, 6, 7, - 8, 70, -1, -1, -1, 13, -1, -1, -1, -1, - -1, 80, -1, -1, -1, -1, -1, -1, -1, 88, - 28, -1, 30, 31, 93, -1, -1, -1, 36, -1, - 99, -1, -1, 41, -1, -1, -1, 45, -1, -1, - 48, -1, -1, -1, -1, -1, 54, -1, 56, 57, - -1, -1, 60, -1, 3, 4, 5, 6, 7, 8, - -1, -1, 70, -1, 13, -1, -1, -1, -1, -1, - -1, -1, 80, 3, 4, 5, 6, 7, 8, 28, - 88, 30, 31, 13, -1, 93, -1, 36, -1, -1, - -1, -1, 41, -1, -1, -1, 45, -1, 28, -1, - 30, 31, -1, -1, -1, 54, 36, 56, 57, -1, - -1, 41, -1, -1, -1, 45, -1, -1, -1, -1, - -1, 70, -1, -1, 54, 74, 56, 57, -1, -1, - 60, 80, -1, -1, -1, -1, -1, -1, -1, 88, - 70, -1, -1, -1, 93, -1, -1, -1, -1, -1, - 80, 3, 4, 5, 6, 7, 8, -1, 88, 11, - -1, 13, -1, 93, -1, -1, -1, -1, -1, -1, - 3, 4, 5, 6, 7, 8, 28, -1, 30, 31, - 13, -1, -1, -1, 36, -1, -1, -1, -1, 41, - -1, -1, -1, 45, -1, 28, -1, 30, 31, -1, - -1, -1, 54, 36, 56, 57, -1, -1, 41, -1, - -1, -1, 45, -1, -1, -1, -1, -1, 70, -1, - -1, 54, -1, 56, 57, -1, -1, -1, 80, 62, - -1, -1, -1, -1, -1, -1, 88, 70, -1, -1, - -1, 93, -1, -1, -1, -1, -1, 80, 3, 4, - 5, 6, 7, 8, -1, 88, -1, -1, 13, -1, - 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 28, -1, 30, 31, -1, -1, -1, - -1, 36, -1, -1, -1, -1, 41, -1, -1, -1, - 45, -1, -1, 3, 4, 5, 6, 7, 8, 54, - -1, 56, 57, 13, -1, 60, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, -1, -1, 28, -1, - 30, 31, -1, -1, -1, 80, 36, -1, -1, -1, - -1, 41, -1, 88, -1, 45, -1, -1, 93, -1, - -1, -1, -1, -1, 54, -1, 56, 57, 3, 4, - 5, 6, 7, 8, -1, -1, -1, -1, 13, -1, - 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 80, -1, -1, 28, -1, 30, 31, -1, 88, -1, - -1, 36, -1, 93, -1, -1, 41, -1, -1, -1, - 45, -1, -1, -1, -1, -1, -1, -1, -1, 54, - -1, 56, 57, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 70, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 80, -1, -1, -1, -1, - -1, -1, -1, 88, -1, 59, -1, -1, 93, 63, + 112, -1, -1, -1, 29, 30, 31, -1, 33, -1, + 35, 36, 37, -1, 39, 40, 41, 42, 43, 44, + -1, 46, -1, -1, -1, 50, 51, 52, 53, 54, + 55, -1, 57, 58, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 68, -1, -1, 71, -1, -1, -1, + -1, -1, -1, -1, 79, 80, 81, -1, -1, -1, + -1, -1, 87, 88, 89, 3, 4, 5, 6, 94, + 8, 9, 10, 11, -1, 13, 14, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 112, -1, -1, + -1, 29, 30, 31, -1, 33, -1, 35, 36, 37, + -1, 39, 40, 41, 42, 43, 44, -1, 46, -1, + -1, -1, 50, 51, 52, 53, 54, 55, -1, 57, + 58, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 68, -1, -1, 71, -1, -1, -1, -1, -1, -1, + -1, 79, 80, 81, -1, -1, -1, -1, -1, 87, + 88, 89, 3, 4, 5, 6, 94, 8, 9, 10, + 11, -1, 13, 14, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 112, -1, -1, -1, 29, 30, + 31, -1, 33, -1, 35, 36, 37, -1, 39, 40, + 41, 42, 43, 44, -1, 46, -1, -1, -1, 50, + 51, 52, 53, 54, 55, -1, 57, 58, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, + 71, -1, -1, -1, -1, -1, -1, -1, 79, 80, + 81, -1, -1, -1, -1, -1, 87, 88, 89, 3, + 4, 5, 6, 94, 8, 9, 10, 11, -1, 13, + 14, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 112, -1, -1, -1, 29, 30, 31, -1, 33, + -1, 35, 36, 37, -1, 39, 40, 41, 42, 43, + 44, -1, 46, -1, -1, -1, 50, 51, 52, 53, + 54, 55, -1, 57, 58, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 68, -1, -1, 71, -1, -1, + -1, -1, -1, -1, -1, 79, 80, 81, -1, -1, + -1, -1, -1, 87, 88, 89, 3, 4, 5, 6, + 94, 8, 9, 10, 11, -1, 13, 14, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 112, -1, + -1, -1, 29, 30, 31, -1, 33, -1, 35, 36, + 37, -1, 39, 40, 41, 42, 43, 44, -1, 46, + -1, -1, -1, 50, 51, 52, 53, 54, 55, -1, + 57, 58, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 68, -1, 1, 71, 3, 4, 5, 6, 7, + 8, 9, 79, 80, 81, -1, 14, -1, -1, -1, + 87, 88, 89, -1, -1, -1, -1, 94, -1, 27, + 28, 29, -1, 31, 32, 33, -1, -1, -1, 37, + -1, -1, -1, -1, 42, 112, -1, 45, 46, 47, + -1, 49, -1, -1, -1, -1, -1, 55, -1, 57, + 58, -1, 1, 61, 3, 4, 5, 6, 7, 8, + 9, -1, -1, 71, -1, 14, -1, -1, -1, -1, + -1, -1, -1, 81, -1, -1, -1, -1, 27, 28, + 29, 89, 31, 32, 33, -1, 94, -1, 37, -1, + -1, -1, 100, 42, -1, -1, 45, 46, 47, -1, + 49, -1, -1, -1, -1, -1, 55, -1, 57, 58, + -1, -1, 61, 3, 4, 5, 6, 7, 8, 9, + -1, -1, 71, -1, 14, -1, -1, -1, -1, -1, + -1, -1, 81, -1, -1, -1, -1, -1, -1, -1, + 89, -1, 32, -1, -1, 94, -1, 37, -1, -1, + -1, 100, 42, -1, -1, -1, 46, -1, 48, -1, + -1, -1, -1, -1, -1, 55, -1, 57, 58, 3, + 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, + 14, 71, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 81, -1, -1, -1, -1, -1, -1, 32, 89, + -1, 91, -1, 37, 94, 95, -1, -1, 42, -1, + -1, -1, 46, -1, 48, -1, -1, -1, -1, -1, + -1, 55, -1, 57, 58, 3, 4, 5, 6, 7, + 8, 9, -1, -1, -1, -1, 14, 71, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 81, -1, -1, + -1, 29, -1, 31, 32, 89, -1, 91, -1, 37, + 94, 95, -1, -1, 42, -1, -1, -1, 46, -1, + -1, -1, -1, -1, -1, -1, -1, 55, -1, 57, + 58, 3, 4, 5, 6, 7, 8, 9, -1, -1, + 12, -1, 14, 71, -1, -1, -1, 75, -1, -1, + -1, -1, -1, 81, -1, -1, -1, 29, -1, 31, + 32, 89, -1, -1, -1, 37, 94, -1, -1, -1, + 42, -1, -1, -1, 46, -1, 3, 4, 5, 6, + 7, 8, 9, 55, -1, 57, 58, 14, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, + -1, -1, 29, -1, 31, 32, -1, -1, -1, 81, + 37, -1, -1, -1, -1, 42, -1, 89, -1, 46, + -1, -1, 94, -1, -1, -1, -1, -1, 55, -1, + 57, 58, -1, -1, -1, -1, 63, 3, 4, 5, + 6, 7, 8, 9, 71, -1, -1, -1, 14, -1, + -1, -1, -1, -1, 81, -1, -1, -1, -1, -1, + -1, -1, 89, 29, -1, 31, 32, 94, -1, -1, + -1, 37, -1, -1, -1, -1, 42, -1, -1, -1, + 46, -1, 3, 4, 5, 6, 7, 8, 9, 55, + -1, 57, 58, 14, -1, 61, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 71, -1, -1, 29, -1, + 31, 32, -1, -1, -1, 81, 37, -1, -1, -1, + -1, 42, -1, 89, -1, 46, -1, -1, 94, -1, + -1, -1, -1, -1, 55, -1, 57, 58, 3, 4, + 5, 6, 7, 8, 9, -1, -1, -1, -1, 14, + 71, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 81, -1, -1, -1, 29, -1, 31, 32, 89, -1, + -1, -1, 37, 94, -1, -1, -1, 42, -1, -1, + -1, 46, -1, 3, 4, 5, 6, 7, 8, 9, + 55, -1, 57, 58, 14, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, + -1, -1, 32, -1, -1, -1, 81, 37, -1, -1, + -1, -1, 42, -1, 89, 12, 46, -1, 48, 94, + -1, -1, -1, -1, -1, 55, -1, 57, 58, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 71, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 81, -1, -1, -1, -1, -1, -1, -1, 89, + -1, -1, -1, -1, 94, -1, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 4, + 5, -1, 7, 8, 9, -1, 4, 5, -1, 14, + 8, 9, -1, 4, 5, -1, 14, 8, 9, -1, + -1, -1, -1, 14, 29, -1, 31, 32, -1, -1, + -1, 29, 37, 31, -1, -1, 32, -1, 29, 37, + 31, 46, -1, -1, -1, -1, 37, -1, 46, -1, + 55, -1, 57, 58, -1, 46, -1, 55, -1, 57, + 58, -1, -1, -1, 55, -1, 57, 58, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 63, 64, 65, + 84, 85, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, -1, -1, -1, -1, -1, 113, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 60, -1, -1, 109, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 67, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84 + 78, 79, 80, 81, 82, 83, 84, 85 }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/local/share/bison.simple" +#line 3 "/usr/share/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -3610,7 +3688,7 @@ __yy_memcpy (char *from, char *to, int count) #endif #endif -#line 192 "/usr/local/share/bison.simple" +#line 192 "/usr/share/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -3909,7 +3987,7 @@ yyreduce: switch (yyn) { case 2: -#line 308 "parse.y" +#line 313 "parse.y" { /* In case there were missing closebraces, get us back to the global binding level. */ @@ -3919,98 +3997,98 @@ case 2: ; break;} case 3: -#line 322 "parse.y" +#line 327 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 4: -#line 324 "parse.y" +#line 329 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 5: -#line 326 "parse.y" +#line 331 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 8: -#line 335 "parse.y" +#line 340 "parse.y" { have_extern_spec = 1; used_extern_spec = 0; yyval.ttype = NULL_TREE; ; break;} case 9: -#line 340 "parse.y" +#line 345 "parse.y" { have_extern_spec = 0; ; break;} case 10: -#line 345 "parse.y" +#line 350 "parse.y" { yyval.itype = pedantic; pedantic = 0; ; break;} case 13: -#line 355 "parse.y" +#line 360 "parse.y" { if (pending_lang_change) do_pending_lang_change(); ; break;} case 14: -#line 357 "parse.y" +#line 362 "parse.y" { if (! toplevel_bindings_p () && ! pseudo_global_level_p()) pop_everything (); ; break;} case 15: -#line 363 "parse.y" +#line 368 "parse.y" { if (pending_inlines) do_pending_inlines (); ; break;} case 16: -#line 365 "parse.y" +#line 370 "parse.y" { if (pending_inlines) do_pending_inlines (); ; break;} case 17: -#line 367 "parse.y" +#line 372 "parse.y" { if (pending_inlines) do_pending_inlines (); ; break;} case 18: -#line 369 "parse.y" +#line 374 "parse.y" { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype); assemble_asm (yyvsp[-2].ttype); ; break;} case 19: -#line 372 "parse.y" +#line 377 "parse.y" { pop_lang_context (); ; break;} case 20: -#line 374 "parse.y" +#line 379 "parse.y" { if (pending_inlines) do_pending_inlines (); pop_lang_context (); ; break;} case 21: -#line 377 "parse.y" +#line 382 "parse.y" { if (pending_inlines) do_pending_inlines (); pop_lang_context (); ; break;} case 22: -#line 380 "parse.y" +#line 385 "parse.y" { push_namespace (yyvsp[-1].ttype); ; break;} case 23: -#line 382 "parse.y" +#line 387 "parse.y" { pop_namespace (); ; break;} case 24: -#line 384 "parse.y" +#line 389 "parse.y" { push_namespace (NULL_TREE); ; break;} case 25: -#line 386 "parse.y" +#line 391 "parse.y" { pop_namespace (); ; break;} case 26: -#line 388 "parse.y" +#line 393 "parse.y" { do_namespace_alias (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 27: -#line 390 "parse.y" +#line 395 "parse.y" { do_toplevel_using_decl (yyvsp[-1].ttype); ; break;} case 28: -#line 392 "parse.y" +#line 397 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) yyvsp[-1].ttype = lastiddecl; @@ -4018,61 +4096,62 @@ case 28: ; break;} case 29: -#line 398 "parse.y" +#line 403 "parse.y" { pedantic = yyvsp[-1].itype; ; break;} case 30: -#line 403 "parse.y" +#line 408 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 31: -#line 405 "parse.y" +#line 410 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 32: -#line 407 "parse.y" +#line 412 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 35: -#line 414 "parse.y" +#line 419 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 36: -#line 416 "parse.y" +#line 421 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 37: -#line 421 "parse.y" +#line 426 "parse.y" { push_lang_context (yyvsp[0].ttype); ; break;} case 38: -#line 423 "parse.y" +#line 428 "parse.y" { if (current_lang_name != yyvsp[0].ttype) cp_error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name); pop_lang_context (); push_lang_context (yyvsp[0].ttype); ; break;} case 39: -#line 430 "parse.y" +#line 435 "parse.y" { begin_template_parm_list (); ; break;} case 40: -#line 432 "parse.y" +#line 437 "parse.y" { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ; break;} case 41: -#line 434 "parse.y" -{ yyval.ttype = NULL_TREE; ; +#line 439 "parse.y" +{ begin_specialization(); + yyval.ttype = NULL_TREE; ; break;} case 42: -#line 439 "parse.y" +#line 445 "parse.y" { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ; break;} case 43: -#line 441 "parse.y" +#line 447 "parse.y" { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 44: -#line 446 "parse.y" +#line 452 "parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ttpa: @@ -4086,61 +4165,71 @@ case 44: ; break;} case 45: -#line 458 "parse.y" +#line 464 "parse.y" { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); goto ttpa; ; break;} case 46: -#line 460 "parse.y" +#line 466 "parse.y" { yyval.ttype = build_tree_list (class_type_node, NULL_TREE); ; break;} case 47: -#line 462 "parse.y" +#line 468 "parse.y" { yyval.ttype = build_tree_list (class_type_node, yyvsp[0].ttype); ; break;} case 48: -#line 474 "parse.y" +#line 480 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} case 49: -#line 476 "parse.y" +#line 482 "parse.y" { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ; break;} case 50: -#line 478 "parse.y" +#line 484 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ; break;} case 51: -#line 480 "parse.y" +#line 486 "parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ; break;} case 52: -#line 486 "parse.y" -{ end_template_decl (); ; +#line 492 "parse.y" +{ + if (yyvsp[-1].ttype) + end_template_decl (); + else + end_specialization (); + ; break;} case 53: -#line 489 "parse.y" -{ end_template_decl (); ; +#line 500 "parse.y" +{ + if (yyvsp[-1].ttype) + end_template_decl (); + else + end_specialization (); + ; break;} case 54: -#line 494 "parse.y" +#line 510 "parse.y" {; break;} case 55: -#line 496 "parse.y" +#line 512 "parse.y" {; break;} case 56: -#line 498 "parse.y" +#line 514 "parse.y" { note_list_got_semicolon (yyvsp[-2].ftype.t); ; break;} case 57: -#line 502 "parse.y" +#line 518 "parse.y" { pedwarn ("empty declaration"); ; break;} case 59: -#line 505 "parse.y" +#line 521 "parse.y" { tree t, attrs; split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs); @@ -4149,27 +4238,27 @@ case 59: ; break;} case 63: -#line 518 "parse.y" +#line 534 "parse.y" { yyval.itype = 0; ; break;} case 64: -#line 520 "parse.y" +#line 536 "parse.y" { yyval.itype = 1; ; break;} case 70: -#line 536 "parse.y" +#line 552 "parse.y" { finish_function (lineno, (int)yyvsp[-1].itype, 0); ; break;} case 71: -#line 538 "parse.y" +#line 554 "parse.y" { ; break;} case 72: -#line 540 "parse.y" +#line 556 "parse.y" { ; break;} case 73: -#line 545 "parse.y" +#line 561 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype); if (yyvsp[-2].ttype != current_class_type) @@ -4180,11 +4269,11 @@ case 73: ; break;} case 74: -#line 554 "parse.y" +#line 570 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 75: -#line 556 "parse.y" +#line 572 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype); if (yyvsp[-4].ttype != current_class_type) @@ -4196,7 +4285,7 @@ case 75: ; break;} case 76: -#line 566 "parse.y" +#line 582 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype); if (yyvsp[-2].ttype != current_class_type) @@ -4207,11 +4296,11 @@ case 76: ; break;} case 77: -#line 575 "parse.y" +#line 591 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 78: -#line 577 "parse.y" +#line 593 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype); if (yyvsp[-4].ttype != current_class_type) @@ -4223,7 +4312,7 @@ case 78: ; break;} case 79: -#line 587 "parse.y" +#line 603 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype); if (yyvsp[-2].ttype != current_class_type) @@ -4234,11 +4323,11 @@ case 79: ; break;} case 80: -#line 596 "parse.y" +#line 612 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 81: -#line 598 "parse.y" +#line 614 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype); if (yyvsp[-4].ttype != current_class_type) @@ -4250,7 +4339,7 @@ case 81: ; break;} case 82: -#line 608 "parse.y" +#line 624 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, yyvsp[-1].ttype); if (yyvsp[-2].ttype != current_class_type) @@ -4261,11 +4350,11 @@ case 82: ; break;} case 83: -#line 617 "parse.y" +#line 633 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 84: -#line 619 "parse.y" +#line 635 "parse.y" { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-4].ttype, yyvsp[-3].ttype); if (yyvsp[-4].ttype != current_class_type) @@ -4277,7 +4366,7 @@ case 84: ; break;} case 85: -#line 632 "parse.y" +#line 648 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-1].ftype.t, &specs, &attrs); if (! start_function (specs, yyvsp[0].ttype, attrs, 0)) @@ -4286,7 +4375,7 @@ case 85: yyval.ttype = NULL_TREE; ; break;} case 86: -#line 639 "parse.y" +#line 655 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs); if (! start_function (specs, yyvsp[0].ttype, attrs, 0)) @@ -4295,14 +4384,14 @@ case 86: yyval.ttype = NULL_TREE; ; break;} case 87: -#line 646 "parse.y" +#line 662 "parse.y" { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0)) YYERROR1; reinit_parse_for_function (); yyval.ttype = NULL_TREE; ; break;} case 88: -#line 651 "parse.y" +#line 667 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-1].ttype, &specs, &attrs); if (! start_function (specs, yyvsp[0].ttype, attrs, 0)) @@ -4311,30 +4400,30 @@ case 88: yyval.ttype = NULL_TREE; ; break;} case 89: -#line 658 "parse.y" +#line 674 "parse.y" { if (! start_function (NULL_TREE, yyval.ttype, NULL_TREE, 0)) YYERROR1; reinit_parse_for_function (); yyval.ttype = NULL_TREE; ; break;} case 90: -#line 666 "parse.y" +#line 682 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 91: -#line 668 "parse.y" +#line 684 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 92: -#line 670 "parse.y" +#line 686 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 93: -#line 672 "parse.y" +#line 688 "parse.y" { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} case 94: -#line 679 "parse.y" +#line 695 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ttype); yyval.ttype = start_method (specs, yyvsp[0].ttype); rest_of_mdef: @@ -4345,37 +4434,42 @@ case 94: reinit_parse_for_method (yychar, yyval.ttype); ; break;} case 95: -#line 688 "parse.y" +#line 704 "parse.y" { yyval.ttype = start_method (NULL_TREE, yyvsp[0].ttype); goto rest_of_mdef; ; break;} case 96: -#line 690 "parse.y" +#line 706 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ; break;} case 97: -#line 693 "parse.y" +#line 709 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ttype); yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ; break;} case 98: -#line 696 "parse.y" +#line 712 "parse.y" { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ; break;} case 99: -#line 698 "parse.y" +#line 714 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ttype); yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ; break;} case 100: -#line 701 "parse.y" +#line 717 "parse.y" { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ; break;} case 101: -#line 703 "parse.y" +#line 719 "parse.y" { - end_template_decl (); - if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype)) + if (yyvsp[-1].ttype) + end_template_decl (); + else + end_specialization (); + + if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype) + && !DECL_TEMPLATE_SPECIALIZATION (yyvsp[0].ttype)) { yyval.ttype = DECL_TI_TEMPLATE (yyvsp[0].ttype); check_member_template (yyval.ttype); @@ -4390,7 +4484,7 @@ case 101: ; break;} case 102: -#line 722 "parse.y" +#line 743 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); @@ -4398,31 +4492,31 @@ case 102: ; break;} case 103: -#line 731 "parse.y" +#line 752 "parse.y" { store_return_init (yyval.ttype, yyvsp[0].ttype); ; break;} case 104: -#line 733 "parse.y" +#line 754 "parse.y" { store_return_init (yyval.ttype, yyvsp[-1].ttype); ; break;} case 105: -#line 735 "parse.y" +#line 756 "parse.y" { store_return_init (yyval.ttype, NULL_TREE); ; break;} case 106: -#line 740 "parse.y" +#line 761 "parse.y" { if (yyvsp[0].itype == 0) error ("no base initializers given following ':'"); setup_vtbl_ptr (); /* Always keep the BLOCK node associated with the outermost - pair of curley braces of a function. These are needed + pair of curly braces of a function. These are needed for correct operation of dwarfout.c. */ keep_next_level (); ; break;} case 107: -#line 753 "parse.y" +#line 774 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); @@ -4441,15 +4535,15 @@ case 107: ; break;} case 108: -#line 773 "parse.y" +#line 794 "parse.y" { yyval.itype = 0; ; break;} case 109: -#line 775 "parse.y" +#line 796 "parse.y" { yyval.itype = 1; ; break;} case 112: -#line 782 "parse.y" +#line 803 "parse.y" { if (current_class_name) pedwarn ("anachronistic old style base class initializer"); @@ -4457,7 +4551,7 @@ case 112: ; break;} case 113: -#line 788 "parse.y" +#line 809 "parse.y" { if (current_class_name) pedwarn ("anachronistic old style base class initializer"); @@ -4465,71 +4559,69 @@ case 113: ; break;} case 114: -#line 794 "parse.y" +#line 815 "parse.y" { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 115: -#line 796 "parse.y" +#line 817 "parse.y" { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ; break;} case 116: -#line 798 "parse.y" +#line 819 "parse.y" { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 117: -#line 800 "parse.y" +#line 821 "parse.y" { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ; break;} case 118: -#line 803 "parse.y" -{ - do_member_init (OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype); - ; +#line 823 "parse.y" +{ expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-3].ttype), + yyvsp[-1].ttype); ; break;} case 119: -#line 807 "parse.y" -{ - do_member_init (OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), void_type_node); - ; +#line 826 "parse.y" +{ expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-1].ttype), + void_type_node); ; break;} case 131: -#line 834 "parse.y" +#line 852 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE); yyungetc (';', 1); ; break;} case 132: -#line 837 "parse.y" +#line 855 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); do_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ; break;} case 133: -#line 840 "parse.y" +#line 858 "parse.y" { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 134: -#line 842 "parse.y" +#line 860 "parse.y" { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ; break;} case 135: -#line 844 "parse.y" +#line 862 "parse.y" { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-3].ttype); yyungetc (';', 1); ; break;} case 136: -#line 847 "parse.y" +#line 865 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); do_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-3].ttype); ; break;} case 137: -#line 850 "parse.y" +#line 868 "parse.y" { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} case 138: -#line 852 "parse.y" +#line 870 "parse.y" { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ; break;} case 139: -#line 861 "parse.y" +#line 879 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4537,7 +4629,7 @@ case 139: ; break;} case 140: -#line 867 "parse.y" +#line 885 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4545,7 +4637,7 @@ case 140: ; break;} case 141: -#line 873 "parse.y" +#line 891 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4553,7 +4645,7 @@ case 141: ; break;} case 142: -#line 879 "parse.y" +#line 897 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4561,7 +4653,7 @@ case 142: ; break;} case 144: -#line 889 "parse.y" +#line 907 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4569,7 +4661,7 @@ case 144: ; break;} case 145: -#line 895 "parse.y" +#line 913 "parse.y" { yyval.ttype = lookup_template_class (yyvsp[-2].ttype, NULL_TREE, NULL_TREE); if (yyval.ttype != error_mark_node) @@ -4577,7 +4669,7 @@ case 145: ; break;} case 147: -#line 905 "parse.y" +#line 923 "parse.y" { /* Handle `Class>' without space in the `>>' */ pedwarn ("`>>' should be `> >' in template class name"); @@ -4585,75 +4677,75 @@ case 147: ; break;} case 148: -#line 914 "parse.y" +#line 932 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ; break;} case 149: -#line 916 "parse.y" +#line 934 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 150: -#line 921 "parse.y" +#line 939 "parse.y" { yyval.ttype = groktypename (yyvsp[0].ftype.t); ; break;} case 152: -#line 927 "parse.y" +#line 945 "parse.y" { yyval.code = NEGATE_EXPR; ; break;} case 153: -#line 929 "parse.y" +#line 947 "parse.y" { yyval.code = CONVERT_EXPR; ; break;} case 154: -#line 931 "parse.y" +#line 949 "parse.y" { yyval.code = PREINCREMENT_EXPR; ; break;} case 155: -#line 933 "parse.y" +#line 951 "parse.y" { yyval.code = PREDECREMENT_EXPR; ; break;} case 156: -#line 935 "parse.y" +#line 953 "parse.y" { yyval.code = TRUTH_NOT_EXPR; ; break;} case 157: -#line 940 "parse.y" +#line 958 "parse.y" { yyval.ttype = build_x_compound_expr (yyval.ttype); ; break;} case 159: -#line 946 "parse.y" +#line 964 "parse.y" { error ("ANSI C++ forbids an empty condition for `%s'", cond_stmt_keyword); yyval.ttype = integer_zero_node; ; break;} case 160: -#line 950 "parse.y" +#line 968 "parse.y" { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ; break;} case 161: -#line 955 "parse.y" +#line 973 "parse.y" { error ("ANSI C++ forbids an empty condition for `%s'", cond_stmt_keyword); yyval.ttype = integer_zero_node; ; break;} case 162: -#line 959 "parse.y" +#line 977 "parse.y" { yyval.ttype = condition_conversion (yyvsp[-1].ttype); ; break;} case 163: -#line 964 "parse.y" +#line 982 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 164: -#line 966 "parse.y" +#line 984 "parse.y" { yyval.ttype = condition_conversion (yyval.ttype); ; break;} case 165: -#line 968 "parse.y" +#line 986 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 166: -#line 973 "parse.y" +#line 991 "parse.y" { { tree d; for (d = getdecls (); d; d = TREE_CHAIN (d)) @@ -4673,7 +4765,7 @@ case 166: ; break;} case 167: -#line 991 "parse.y" +#line 1009 "parse.y" { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype, 1, LOOKUP_ONLYCONVERTING); resume_momentary (yyvsp[-2].itype); @@ -4683,7 +4775,7 @@ case 167: ; break;} case 173: -#line 1010 "parse.y" +#line 1028 "parse.y" { if (processing_template_decl) { @@ -4694,7 +4786,7 @@ case 173: ; break;} case 174: -#line 1019 "parse.y" +#line 1037 "parse.y" { if (processing_template_decl) { @@ -4706,50 +4798,50 @@ case 174: ; break;} case 176: -#line 1034 "parse.y" -{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, - build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; +#line 1052 "parse.y" +{ yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, + build_expr_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 177: -#line 1037 "parse.y" -{ yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, - build_tree_list (NULL_TREE, error_mark_node)); ; +#line 1055 "parse.y" +{ yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, + build_expr_list (NULL_TREE, error_mark_node)); ; break;} case 178: -#line 1040 "parse.y" -{ chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; +#line 1058 "parse.y" +{ chainon (yyval.ttype, build_expr_list (NULL_TREE, yyvsp[0].ttype)); ; break;} case 179: -#line 1042 "parse.y" -{ chainon (yyval.ttype, build_tree_list (NULL_TREE, error_mark_node)); ; +#line 1060 "parse.y" +{ chainon (yyval.ttype, build_expr_list (NULL_TREE, error_mark_node)); ; break;} case 180: -#line 1047 "parse.y" -{ yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ; +#line 1065 "parse.y" +{ yyval.ttype = build_expr_list (NULL_TREE, yyval.ttype); ; break;} case 182: -#line 1053 "parse.y" +#line 1071 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} case 183: -#line 1056 "parse.y" +#line 1074 "parse.y" { yyval.ttype = yyvsp[0].ttype; pedantic = yyvsp[-1].itype; ; break;} case 184: -#line 1059 "parse.y" +#line 1077 "parse.y" { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ; break;} case 185: -#line 1061 "parse.y" +#line 1079 "parse.y" { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ; break;} case 186: -#line 1063 "parse.y" +#line 1081 "parse.y" { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ; break;} case 187: -#line 1065 "parse.y" +#line 1083 "parse.y" { yyval.ttype = build_x_unary_op (yyvsp[-1].code, yyvsp[0].ttype); if (yyvsp[-1].code == NEGATE_EXPR && TREE_CODE (yyvsp[0].ttype) == INTEGER_CST) TREE_NEGATED_INT (yyval.ttype) = 1; @@ -4757,8 +4849,10 @@ case 187: ; break;} case 188: -#line 1072 "parse.y" +#line 1090 "parse.y" { tree label = lookup_label (yyvsp[0].ttype); + if (pedantic) + pedwarn ("ANSI C++ forbids `&&'"); if (label == NULL_TREE) yyval.ttype = null_pointer_node; else @@ -4770,115 +4864,115 @@ case 188: ; break;} case 189: -#line 1083 "parse.y" +#line 1103 "parse.y" { yyval.ttype = expr_sizeof (yyvsp[0].ttype); ; break;} case 190: -#line 1085 "parse.y" +#line 1105 "parse.y" { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ftype.t)); ; break;} case 191: -#line 1087 "parse.y" +#line 1107 "parse.y" { yyval.ttype = grok_alignof (yyvsp[0].ttype); ; break;} case 192: -#line 1089 "parse.y" +#line 1109 "parse.y" { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ftype.t)); check_for_new_type ("alignof", yyvsp[-1].ftype); ; break;} case 193: -#line 1095 "parse.y" +#line 1115 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); check_for_new_type ("new", yyvsp[0].ftype); ; break;} case 194: -#line 1098 "parse.y" +#line 1118 "parse.y" { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); check_for_new_type ("new", yyvsp[-1].ftype); ; break;} case 195: -#line 1101 "parse.y" +#line 1121 "parse.y" { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); check_for_new_type ("new", yyvsp[0].ftype); ; break;} case 196: -#line 1104 "parse.y" +#line 1124 "parse.y" { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); check_for_new_type ("new", yyvsp[-1].ftype); ; break;} case 197: -#line 1107 "parse.y" +#line 1127 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-3].itype); check_for_new_type ("new", yyvsp[-1].ftype); ; break;} case 198: -#line 1111 "parse.y" +#line 1131 "parse.y" { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-4].itype); check_for_new_type ("new", yyvsp[-2].ftype); ; break;} case 199: -#line 1114 "parse.y" +#line 1134 "parse.y" { yyval.ttype = build_new (yyvsp[-3].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-4].itype); check_for_new_type ("new", yyvsp[-1].ftype); ; break;} case 200: -#line 1117 "parse.y" +#line 1137 "parse.y" { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); check_for_new_type ("new", yyvsp[-2].ftype); ; break;} case 201: -#line 1121 "parse.y" +#line 1141 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ; break;} case 202: -#line 1123 "parse.y" +#line 1143 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype); if (yychar == YYEMPTY) yychar = YYLEX; ; break;} case 203: -#line 1127 "parse.y" +#line 1147 "parse.y" { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype); if (yychar == YYEMPTY) yychar = YYLEX; ; break;} case 204: -#line 1131 "parse.y" +#line 1151 "parse.y" { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ; break;} case 205: -#line 1133 "parse.y" +#line 1153 "parse.y" { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ; break;} case 206: -#line 1138 "parse.y" +#line 1158 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 207: -#line 1140 "parse.y" +#line 1160 "parse.y" { yyval.ttype = yyvsp[-1].ttype; pedwarn ("old style placement syntax, use () instead"); ; break;} case 208: -#line 1148 "parse.y" +#line 1168 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} case 209: -#line 1150 "parse.y" +#line 1170 "parse.y" { yyval.ttype = NULL_TREE; ; break;} case 210: -#line 1152 "parse.y" +#line 1172 "parse.y" { cp_error ("`%T' is not a valid expression", yyvsp[-1].ftype.t); yyval.ttype = error_mark_node; ; break;} case 211: -#line 1160 "parse.y" +#line 1180 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids initialization of new expression with `='"); @@ -4886,25 +4980,25 @@ case 211: ; break;} case 212: -#line 1170 "parse.y" +#line 1190 "parse.y" { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node); TREE_PARMLIST (yyvsp[-1].ftype.t) = 1; yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); check_for_new_type ("cast", yyvsp[-1].ftype); ; break;} case 213: -#line 1175 "parse.y" +#line 1195 "parse.y" { yyvsp[-1].ftype.t = tree_cons (NULL_TREE, yyvsp[-1].ftype.t, void_list_node); TREE_PARMLIST (yyvsp[-1].ftype.t) = 1; yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE); check_for_new_type ("cast", yyvsp[-1].ftype); ; break;} case 215: -#line 1184 "parse.y" +#line 1204 "parse.y" { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ; break;} case 216: -#line 1186 "parse.y" +#line 1206 "parse.y" { tree init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); @@ -4917,134 +5011,172 @@ case 216: ; break;} case 218: -#line 1202 "parse.y" +#line 1222 "parse.y" { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ; break;} case 219: -#line 1204 "parse.y" +#line 1224 "parse.y" { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ; break;} case 220: -#line 1206 "parse.y" +#line 1226 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 221: -#line 1208 "parse.y" +#line 1228 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 222: -#line 1210 "parse.y" +#line 1230 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 223: -#line 1212 "parse.y" +#line 1232 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 224: -#line 1214 "parse.y" +#line 1234 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 225: -#line 1216 "parse.y" +#line 1236 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 226: -#line 1218 "parse.y" +#line 1238 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 227: -#line 1220 "parse.y" +#line 1240 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 228: -#line 1222 "parse.y" +#line 1242 "parse.y" { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ; break;} case 229: -#line 1224 "parse.y" +#line 1244 "parse.y" { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ; break;} case 230: -#line 1226 "parse.y" +#line 1246 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 231: -#line 1228 "parse.y" +#line 1248 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 232: -#line 1230 "parse.y" +#line 1250 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 233: -#line 1232 "parse.y" +#line 1252 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 234: -#line 1234 "parse.y" +#line 1254 "parse.y" { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ; break;} case 235: -#line 1236 "parse.y" +#line 1256 "parse.y" { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ; break;} case 236: -#line 1238 "parse.y" +#line 1258 "parse.y" { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ; break;} case 237: -#line 1240 "parse.y" +#line 1260 "parse.y" { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} case 238: -#line 1242 "parse.y" +#line 1262 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype); if (yyval.ttype != error_mark_node) C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ; break;} case 239: -#line 1246 "parse.y" +#line 1266 "parse.y" { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ; break;} case 240: -#line 1248 "parse.y" +#line 1268 "parse.y" { yyval.ttype = build_throw (NULL_TREE); ; break;} case 241: -#line 1250 "parse.y" +#line 1270 "parse.y" { yyval.ttype = build_throw (yyvsp[0].ttype); ; break;} case 242: -#line 1268 "parse.y" +#line 1288 "parse.y" { yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ; break;} +case 248: +#line 1298 "parse.y" +{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ; + break;} +case 249: +#line 1300 "parse.y" +{ yyval.ttype = lookup_template_function (yyvsp[-2].ttype, NULL_TREE); ; + break;} +case 250: +#line 1302 "parse.y" +{ yyval.ttype = lookup_template_function + (do_identifier (yyvsp[-3].ttype, 1), yyvsp[-1].ttype); ; + break;} case 251: -#line 1284 "parse.y" -{ yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ; +#line 1305 "parse.y" +{ yyval.ttype = lookup_template_function + (do_identifier (yyvsp[-2].ttype, 1), NULL_TREE); ; break;} case 252: -#line 1286 "parse.y" -{ yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ; +#line 1311 "parse.y" +{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} case 253: -#line 1288 "parse.y" +#line 1313 "parse.y" +{ yyval.ttype = lookup_template_function (DECL_NAME (yyvsp[-3].ttype), yyvsp[-1].ttype); ; + break;} +case 254: +#line 1315 "parse.y" +{ yyval.ttype = lookup_template_function (DECL_NAME (yyvsp[-3].ttype), yyvsp[-1].ttype); ; + break;} +case 259: +#line 1327 "parse.y" +{ yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ; + break;} +case 260: +#line 1329 "parse.y" +{ yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ; + break;} +case 261: +#line 1331 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} -case 256: -#line 1295 "parse.y" +case 262: +#line 1336 "parse.y" +{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ; + break;} +case 263: +#line 1338 "parse.y" +{ yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ; + break;} +case 267: +#line 1346 "parse.y" { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ; break;} -case 257: -#line 1300 "parse.y" +case 268: +#line 1351 "parse.y" { if (TREE_CODE (yyval.ttype) == BIT_NOT_EXPR) yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyval.ttype, 0)); - else + else if (TREE_CODE (yyval.ttype) != TEMPLATE_ID_EXPR) yyval.ttype = do_identifier (yyval.ttype, 1); ; break;} -case 260: -#line 1309 "parse.y" +case 271: +#line 1360 "parse.y" { if (processing_template_decl) push_obstacks (&permanent_obstack, &permanent_obstack); @@ -5053,8 +5185,8 @@ case 260: pop_obstacks (); ; break;} -case 261: -#line 1317 "parse.y" +case 272: +#line 1368 "parse.y" { char class; yyval.ttype = yyvsp[-1].ttype; class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); @@ -5063,8 +5195,8 @@ case 261: /* This inhibits warnings in truthvalue_conversion. */ C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ; break;} -case 262: -#line 1325 "parse.y" +case 273: +#line 1376 "parse.y" { char class; yyval.ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype); class = TREE_CODE_CLASS (TREE_CODE (yyval.ttype)); @@ -5073,12 +5205,12 @@ case 262: /* This inhibits warnings in truthvalue_conversion. */ C_SET_EXP_ORIGINAL_CODE (yyval.ttype, ERROR_MARK); ; break;} -case 263: -#line 1333 "parse.y" +case 274: +#line 1384 "parse.y" { yyval.ttype = error_mark_node; ; break;} -case 264: -#line 1335 "parse.y" +case 275: +#line 1386 "parse.y" { if (current_function_decl == 0) { error ("braced-group within expression allowed only inside a function"); @@ -5087,8 +5219,8 @@ case 264: keep_next_level (); yyval.ttype = expand_start_stmt_expr (); ; break;} -case 265: -#line 1343 "parse.y" +case 276: +#line 1394 "parse.y" { tree rtl_exp; if (pedantic) pedwarn ("ANSI C++ forbids braced-groups within expressions"); @@ -5110,8 +5242,8 @@ case 265: yyval.ttype = yyvsp[-1].ttype; ; break;} -case 266: -#line 1364 "parse.y" +case 277: +#line 1415 "parse.y" { yyval.ttype = build_x_function_call (yyvsp[-3].ttype, yyvsp[-1].ttype, current_class_ref); if (TREE_CODE (yyval.ttype) == CALL_EXPR @@ -5119,8 +5251,8 @@ case 266: yyval.ttype = require_complete_type (yyval.ttype); ; break;} -case 267: -#line 1371 "parse.y" +case 278: +#line 1422 "parse.y" { yyval.ttype = build_x_function_call (yyval.ttype, NULL_TREE, current_class_ref); if (TREE_CODE (yyval.ttype) == CALL_EXPR @@ -5128,12 +5260,12 @@ case 267: yyval.ttype = require_complete_type (yyval.ttype); ; break;} -case 268: -#line 1378 "parse.y" +case 279: +#line 1429 "parse.y" { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ; break;} -case 269: -#line 1380 "parse.y" +case 280: +#line 1431 "parse.y" { /* If we get an OFFSET_REF, turn it into what it really means (e.g., a COMPONENT_REF). This way if we've got, say, a reference to a static member that's being operated @@ -5143,14 +5275,14 @@ case 269: yyval.ttype = resolve_offset_ref (yyval.ttype); yyval.ttype = build_x_unary_op (POSTINCREMENT_EXPR, yyval.ttype); ; break;} -case 270: -#line 1389 "parse.y" +case 281: +#line 1440 "parse.y" { if (TREE_CODE (yyval.ttype) == OFFSET_REF) yyval.ttype = resolve_offset_ref (yyval.ttype); yyval.ttype = build_x_unary_op (POSTDECREMENT_EXPR, yyval.ttype); ; break;} -case 271: -#line 1394 "parse.y" +case 282: +#line 1445 "parse.y" { if (current_class_ptr) { #ifdef WARNING_ABOUT_CCD @@ -5174,8 +5306,8 @@ case 271: } ; break;} -case 272: -#line 1417 "parse.y" +case 283: +#line 1468 "parse.y" { tree type; tree id = yyval.ttype; @@ -5220,46 +5352,46 @@ case 272: } ; break;} -case 274: -#line 1462 "parse.y" +case 285: +#line 1513 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("dynamic_cast", yyvsp[-4].ftype); yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ; break;} -case 275: -#line 1466 "parse.y" +case 286: +#line 1517 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("static_cast", yyvsp[-4].ftype); yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ; break;} -case 276: -#line 1470 "parse.y" +case 287: +#line 1521 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype); yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ; break;} -case 277: -#line 1474 "parse.y" +case 288: +#line 1525 "parse.y" { tree type = groktypename (yyvsp[-4].ftype.t); check_for_new_type ("const_cast", yyvsp[-4].ftype); yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ; break;} -case 278: -#line 1478 "parse.y" +case 289: +#line 1529 "parse.y" { yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ; break;} -case 279: -#line 1480 "parse.y" +case 290: +#line 1531 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); check_for_new_type ("typeid", yyvsp[-1].ftype); yyval.ttype = get_typeid (TYPE_MAIN_VARIANT (type)); ; break;} -case 280: -#line 1484 "parse.y" +case 291: +#line 1535 "parse.y" { yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ; break;} -case 281: -#line 1486 "parse.y" +case 292: +#line 1537 "parse.y" { got_scope = NULL_TREE; if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) @@ -5268,38 +5400,58 @@ case 281: yyval.ttype = yyvsp[0].ttype; ; break;} -case 282: -#line 1494 "parse.y" +case 293: +#line 1545 "parse.y" { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ; break;} -case 283: -#line 1496 "parse.y" +case 294: +#line 1547 "parse.y" { if (processing_template_decl) yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-3].ttype), yyvsp[-1].ttype, NULL_TREE); else yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), yyvsp[-1].ttype); ; break;} -case 284: -#line 1501 "parse.y" +case 295: +#line 1552 "parse.y" { if (processing_template_decl) yyval.ttype = build_min_nt (CALL_EXPR, copy_to_permanent (yyvsp[-1].ttype), NULL_TREE, NULL_TREE); else yyval.ttype = build_member_call (OP0 (yyval.ttype), OP1 (yyval.ttype), NULL_TREE); ; break;} -case 285: -#line 1507 "parse.y" +case 296: +#line 1558 "parse.y" +{ + yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); + ; + break;} +case 297: +#line 1562 "parse.y" +{ + yyval.ttype = build_method_call (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, + NULL_TREE, LOOKUP_NORMAL); + ; + break;} +case 298: +#line 1567 "parse.y" +{ + yyval.ttype = build_method_call (yyvsp[-2].ttype, yyvsp[-1].ttype, NULL_TREE, + NULL_TREE, LOOKUP_NORMAL); + ; + break;} +case 299: +#line 1572 "parse.y" { yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ; break;} -case 286: -#line 1509 "parse.y" +case 300: +#line 1574 "parse.y" { if (processing_template_decl) yyval.ttype = build_min_nt (COMPONENT_REF, yyvsp[-1].ttype, copy_to_permanent (yyvsp[0].ttype)); else yyval.ttype = build_object_ref (yyval.ttype, OP0 (yyvsp[0].ttype), OP1 (yyvsp[0].ttype)); ; break;} -case 287: -#line 1514 "parse.y" +case 301: +#line 1579 "parse.y" { #if 0 /* This is a future direction of this code, but because @@ -5315,8 +5467,8 @@ case 287: #endif ; break;} -case 288: -#line 1529 "parse.y" +case 302: +#line 1594 "parse.y" { #if 0 /* This is a future direction of this code, but because @@ -5332,8 +5484,8 @@ case 288: #endif ; break;} -case 289: -#line 1544 "parse.y" +case 303: +#line 1609 "parse.y" { if (IS_SIGNATURE (OP0 (yyvsp[-3].ttype))) { @@ -5345,8 +5497,8 @@ case 289: yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-3].ttype), OP1 (yyvsp[-3].ttype), yyvsp[-1].ttype); ; break;} -case 290: -#line 1555 "parse.y" +case 304: +#line 1620 "parse.y" { if (IS_SIGNATURE (OP0 (yyvsp[-1].ttype))) { @@ -5358,8 +5510,8 @@ case 290: yyval.ttype = build_scoped_method_call (yyval.ttype, OP0 (yyvsp[-1].ttype), OP1 (yyvsp[-1].ttype), NULL_TREE); ; break;} -case 291: -#line 1567 "parse.y" +case 305: +#line 1632 "parse.y" { if (IDENTIFIER_GLOBAL_VALUE (yyvsp[-1].ttype) && (TREE_CODE (TREE_TYPE (yyvsp[-3].ttype)) @@ -5368,8 +5520,8 @@ case 291: yyval.ttype = cp_convert (void_type_node, yyvsp[-3].ttype); ; break;} -case 292: -#line 1575 "parse.y" +case 306: +#line 1640 "parse.y" { if (yyvsp[-4].ttype != yyvsp[-1].ttype) cp_error ("destructor specifier `%T::~%T()' must have matching names", yyvsp[-4].ttype, yyvsp[-1].ttype); @@ -5379,266 +5531,266 @@ case 292: yyval.ttype = cp_convert (void_type_node, yyvsp[-5].ttype); ; break;} -case 293: -#line 1584 "parse.y" +case 307: +#line 1649 "parse.y" { yyval.ttype = error_mark_node; ; break;} -case 294: -#line 1629 "parse.y" +case 308: +#line 1694 "parse.y" { yyval.itype = 0; ; break;} -case 295: -#line 1631 "parse.y" +case 309: +#line 1696 "parse.y" { got_scope = NULL_TREE; yyval.itype = 1; ; break;} -case 296: -#line 1636 "parse.y" +case 310: +#line 1701 "parse.y" { yyval.itype = 0; ; break;} -case 297: -#line 1638 "parse.y" +case 311: +#line 1703 "parse.y" { got_scope = NULL_TREE; yyval.itype = 1; ; break;} -case 298: -#line 1643 "parse.y" +case 312: +#line 1708 "parse.y" { yyval.ttype = boolean_true_node; ; break;} -case 299: -#line 1645 "parse.y" +case 313: +#line 1710 "parse.y" { yyval.ttype = boolean_false_node; ; break;} -case 301: -#line 1652 "parse.y" +case 315: +#line 1717 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} -case 302: -#line 1657 "parse.y" +case 316: +#line 1722 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); setup_vtbl_ptr (); /* Always keep the BLOCK node associated with the outermost - pair of curley braces of a function. These are needed + pair of curly braces of a function. These are needed for correct operation of dwarfout.c. */ keep_next_level (); ; break;} -case 303: -#line 1670 "parse.y" +case 317: +#line 1735 "parse.y" { got_object = TREE_TYPE (yyval.ttype); ; break;} -case 304: -#line 1672 "parse.y" +case 318: +#line 1737 "parse.y" { yyval.ttype = build_x_arrow (yyval.ttype); got_object = TREE_TYPE (yyval.ttype); ; break;} -case 305: -#line 1680 "parse.y" +case 319: +#line 1745 "parse.y" { resume_momentary (yyvsp[-1].itype); if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t))) note_got_semicolon (yyvsp[-2].ftype.t); ; break;} -case 306: -#line 1686 "parse.y" +case 320: +#line 1751 "parse.y" { resume_momentary (yyvsp[-1].itype); note_list_got_semicolon (yyvsp[-2].ftype.t); ; break;} -case 307: -#line 1691 "parse.y" +case 321: +#line 1756 "parse.y" { resume_momentary (yyvsp[-1].itype); ; break;} -case 308: -#line 1693 "parse.y" +case 322: +#line 1758 "parse.y" { shadow_tag (yyvsp[-1].ftype.t); note_list_got_semicolon (yyvsp[-1].ftype.t); ; break;} -case 309: -#line 1698 "parse.y" +case 323: +#line 1763 "parse.y" { warning ("empty declaration"); ; break;} -case 310: -#line 1700 "parse.y" +case 324: +#line 1765 "parse.y" { pedantic = yyvsp[-1].itype; ; break;} -case 313: -#line 1714 "parse.y" +case 327: +#line 1779 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (), NULL_TREE, NULL_TREE); ; break;} -case 314: -#line 1717 "parse.y" +case 328: +#line 1782 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE, NULL_TREE); ; break;} -case 315: -#line 1724 "parse.y" +case 329: +#line 1789 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 316: -#line 1727 "parse.y" +case 330: +#line 1792 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 317: -#line 1730 "parse.y" +case 331: +#line 1795 "parse.y" { yyval.ftype.t = build_decl_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 318: -#line 1733 "parse.y" +case 332: +#line 1798 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 319: -#line 1736 "parse.y" +case 333: +#line 1801 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 322: -#line 1752 "parse.y" +case 336: +#line 1817 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 323: -#line 1755 "parse.y" +case 337: +#line 1820 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 324: -#line 1758 "parse.y" +case 338: +#line 1823 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ; break;} -case 325: -#line 1761 "parse.y" +case 339: +#line 1826 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 326: -#line 1764 "parse.y" +case 340: +#line 1829 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 327: -#line 1767 "parse.y" +case 341: +#line 1832 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ttype))); yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ; break;} -case 328: -#line 1774 "parse.y" +case 342: +#line 1839 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyval.ttype)); yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ; break;} -case 329: -#line 1779 "parse.y" +case 343: +#line 1844 "parse.y" { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ; break;} -case 330: -#line 1781 "parse.y" +case 344: +#line 1846 "parse.y" { if (extra_warnings) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} -case 331: -#line 1786 "parse.y" +case 345: +#line 1851 "parse.y" { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} -case 332: -#line 1788 "parse.y" +case 346: +#line 1853 "parse.y" { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ; break;} -case 333: -#line 1798 "parse.y" +case 347: +#line 1863 "parse.y" { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ; break;} -case 334: -#line 1800 "parse.y" +case 348: +#line 1865 "parse.y" { yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ; break;} -case 335: -#line 1802 "parse.y" +case 349: +#line 1867 "parse.y" { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); TREE_STATIC (yyval.ttype) = 1; ; break;} -case 336: -#line 1805 "parse.y" +case 350: +#line 1870 "parse.y" { if (extra_warnings && TREE_STATIC (yyval.ttype)) warning ("`%s' is not at beginning of declaration", IDENTIFIER_POINTER (yyvsp[0].ttype)); yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ; break;} -case 337: -#line 1811 "parse.y" +case 351: +#line 1876 "parse.y" { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ; break;} -case 338: -#line 1813 "parse.y" +case 352: +#line 1878 "parse.y" { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ; break;} -case 339: -#line 1824 "parse.y" +case 353: +#line 1889 "parse.y" { yyval.ftype.t = get_decl_list (yyvsp[0].ftype.t); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 340: -#line 1827 "parse.y" +case 354: +#line 1892 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 341: -#line 1830 "parse.y" +case 355: +#line 1895 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 342: -#line 1833 "parse.y" +case 356: +#line 1898 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ; break;} -case 343: -#line 1839 "parse.y" +case 357: +#line 1904 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ; break;} -case 344: -#line 1841 "parse.y" +case 358: +#line 1906 "parse.y" { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ; break;} -case 346: -#line 1851 "parse.y" +case 360: +#line 1916 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ; break;} -case 347: -#line 1853 "parse.y" +case 361: +#line 1918 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ; break;} -case 348: -#line 1855 "parse.y" +case 362: +#line 1920 "parse.y" { yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; ; break;} -case 349: -#line 1858 "parse.y" +case 363: +#line 1923 "parse.y" { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; ; break;} -case 350: -#line 1861 "parse.y" +case 364: +#line 1926 "parse.y" { tree type = TREE_TYPE (yyvsp[-1].ttype); yyval.ftype.new_type_flag = 0; @@ -5654,8 +5806,8 @@ case 350: } ; break;} -case 351: -#line 1876 "parse.y" +case 365: +#line 1941 "parse.y" { tree type = groktypename (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = 0; @@ -5671,24 +5823,24 @@ case 351: } ; break;} -case 352: -#line 1896 "parse.y" +case 366: +#line 1961 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ; break;} -case 353: -#line 1898 "parse.y" +case 367: +#line 1963 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ; break;} -case 361: -#line 1919 "parse.y" +case 375: +#line 1984 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 362: -#line 1921 "parse.y" +case 376: +#line 1986 "parse.y" { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ; break;} -case 363: -#line 1926 "parse.y" +case 377: +#line 1991 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); if (current_declspecs @@ -5705,13 +5857,13 @@ case 363: yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ; break;} -case 364: -#line 1943 "parse.y" +case 378: +#line 2008 "parse.y" { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); yyval.itype = yyvsp[-2].itype; ; break;} -case 365: -#line 1946 "parse.y" +case 379: +#line 2011 "parse.y" { tree d; split_specs_attrs (yyvsp[-3].ttype, ¤t_declspecs, &prefix_attributes); @@ -5730,36 +5882,36 @@ case 365: cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes); cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ; break;} -case 366: -#line 1967 "parse.y" +case 380: +#line 2032 "parse.y" { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ; break;} -case 367: -#line 1971 "parse.y" +case 381: +#line 2036 "parse.y" { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ; break;} -case 368: -#line 1973 "parse.y" +case 382: +#line 2038 "parse.y" { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ; break;} -case 369: -#line 1980 "parse.y" +case 383: +#line 2045 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ; break;} -case 370: -#line 1987 "parse.y" +case 384: +#line 2052 "parse.y" { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); yyval.itype = yyvsp[-2].itype; ; break;} -case 371: -#line 1990 "parse.y" +case 385: +#line 2055 "parse.y" { tree d; split_specs_attrs (yyvsp[-3].ttype, ¤t_declspecs, &prefix_attributes); @@ -5768,21 +5920,21 @@ case 371: cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes); cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ; break;} -case 372: -#line 2001 "parse.y" +case 386: +#line 2066 "parse.y" { current_declspecs = NULL_TREE; prefix_attributes = NULL_TREE; yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1); cplus_decl_attributes (yyval.ttype, yyvsp[-1].ttype, prefix_attributes); ; break;} -case 373: -#line 2008 "parse.y" +case 387: +#line 2073 "parse.y" { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); yyval.itype = yyvsp[-2].itype; ; break;} -case 374: -#line 2011 "parse.y" +case 388: +#line 2076 "parse.y" { tree d; current_declspecs = NULL_TREE; prefix_attributes = NULL_TREE; @@ -5791,121 +5943,121 @@ case 374: cplus_decl_attributes (d, yyvsp[0].ttype, prefix_attributes); cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ; break;} -case 375: -#line 2024 "parse.y" +case 389: +#line 2089 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 376: -#line 2026 "parse.y" +case 390: +#line 2091 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 377: -#line 2031 "parse.y" +case 391: +#line 2096 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 378: -#line 2033 "parse.y" +case 392: +#line 2098 "parse.y" { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 379: -#line 2038 "parse.y" +case 393: +#line 2103 "parse.y" { yyval.ttype = yyvsp[-2].ttype; ; break;} -case 380: -#line 2043 "parse.y" +case 394: +#line 2108 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 381: -#line 2045 "parse.y" +case 395: +#line 2110 "parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} -case 382: -#line 2050 "parse.y" +case 396: +#line 2115 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 383: -#line 2052 "parse.y" +case 397: +#line 2117 "parse.y" { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ; break;} -case 384: -#line 2054 "parse.y" +case 398: +#line 2119 "parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ; break;} -case 385: -#line 2056 "parse.y" +case 399: +#line 2121 "parse.y" { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ; break;} -case 386: -#line 2058 "parse.y" +case 400: +#line 2123 "parse.y" { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} -case 391: -#line 2074 "parse.y" +case 405: +#line 2139 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ; break;} -case 392: -#line 2076 "parse.y" +case 406: +#line 2141 "parse.y" { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} -case 393: -#line 2081 "parse.y" +case 407: +#line 2146 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 394: -#line 2083 "parse.y" +case 408: +#line 2148 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 396: -#line 2091 "parse.y" +case 410: +#line 2156 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE); TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ; break;} -case 397: -#line 2094 "parse.y" +case 411: +#line 2159 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ; break;} -case 398: -#line 2097 "parse.y" +case 412: +#line 2162 "parse.y" { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ; break;} -case 399: -#line 2100 "parse.y" +case 413: +#line 2165 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 400: -#line 2107 "parse.y" +case 414: +#line 2172 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ; break;} -case 401: -#line 2109 "parse.y" -{ yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; +case 415: +#line 2174 "parse.y" +{ yyval.ttype = expr_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} -case 402: -#line 2112 "parse.y" -{ yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ; +case 416: +#line 2177 "parse.y" +{ yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ; break;} -case 403: -#line 2114 "parse.y" -{ yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ; +case 417: +#line 2179 "parse.y" +{ yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ; break;} -case 404: -#line 2116 "parse.y" -{ yyval.ttype = build_tree_list (yyval.ttype, yyvsp[0].ttype); ; +case 418: +#line 2181 "parse.y" +{ yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ; break;} -case 405: -#line 2118 "parse.y" -{ yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ; +case 419: +#line 2183 "parse.y" +{ yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ; break;} -case 406: -#line 2123 "parse.y" +case 420: +#line 2188 "parse.y" { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype), NULL_TREE, 1); reinit_parse_for_function (); ; break;} -case 407: -#line 2129 "parse.y" +case 421: +#line 2194 "parse.y" { int nested = (hack_decl_function_context (current_function_decl) != NULL_TREE); @@ -5913,97 +6065,96 @@ case 407: process_next_inline (yyvsp[-3].ttype); ; break;} -case 408: -#line 2136 "parse.y" +case 422: +#line 2201 "parse.y" { process_next_inline (yyvsp[-2].ttype); ; break;} -case 409: -#line 2138 "parse.y" +case 423: +#line 2203 "parse.y" { process_next_inline (yyvsp[-2].ttype); ; break;} -case 412: -#line 2150 "parse.y" +case 426: +#line 2215 "parse.y" { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ; break;} -case 413: -#line 2152 "parse.y" +case 427: +#line 2217 "parse.y" { replace_defarg (yyvsp[-2].ttype, error_mark_node); ; break;} -case 415: -#line 2157 "parse.y" +case 429: +#line 2222 "parse.y" { do_pending_defargs (); ; break;} -case 416: -#line 2159 "parse.y" +case 430: +#line 2224 "parse.y" { do_pending_defargs (); ; break;} -case 417: -#line 2164 "parse.y" +case 431: +#line 2229 "parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (yyvsp[-1].ttype); ; break;} -case 418: -#line 2167 "parse.y" +case 432: +#line 2232 "parse.y" { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype); yyval.ftype.new_type_flag = 1; resume_momentary ((int) yyvsp[-4].itype); check_for_missing_semicolon (yyvsp[-3].ttype); ; break;} -case 419: -#line 2172 "parse.y" +case 433: +#line 2237 "parse.y" { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype), NULL_TREE); yyval.ftype.new_type_flag = 1; check_for_missing_semicolon (yyval.ftype.t); ; break;} -case 420: -#line 2176 "parse.y" +case 434: +#line 2241 "parse.y" { yyvsp[0].itype = suspend_momentary (); yyval.ttype = start_enum (make_anon_name ()); ; break;} -case 421: -#line 2179 "parse.y" +case 435: +#line 2244 "parse.y" { yyval.ftype.t = finish_enum (yyvsp[-3].ttype, yyvsp[-2].ttype); resume_momentary ((int) yyvsp[-5].itype); check_for_missing_semicolon (yyvsp[-3].ttype); yyval.ftype.new_type_flag = 1; ; break;} -case 422: -#line 2184 "parse.y" +case 436: +#line 2249 "parse.y" { yyval.ftype.t = finish_enum (start_enum (make_anon_name()), NULL_TREE); yyval.ftype.new_type_flag = 1; check_for_missing_semicolon (yyval.ftype.t); ; break;} -case 423: -#line 2188 "parse.y" +case 437: +#line 2253 "parse.y" { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); yyval.ftype.new_type_flag = 0; ; break;} -case 424: -#line 2191 "parse.y" +case 438: +#line 2256 "parse.y" { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, NULL_TREE, 1); yyval.ftype.new_type_flag = 0; ; break;} -case 425: -#line 2194 "parse.y" -{ yyval.ftype.t = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); +case 439: +#line 2259 "parse.y" +{ yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ; break;} -case 426: -#line 2197 "parse.y" -{ yyval.ftype.t = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); - yyval.ftype.new_type_flag = 0; ; +case 440: +#line 2263 "parse.y" +{ reset_specialization(); ; break;} -case 427: -#line 2201 "parse.y" +case 441: +#line 2265 "parse.y" { int semi; tree id; - yyval.ttype = yyvsp[-4].ttype; + yyval.ttype = yyvsp[-5].ttype; #if 0 /* Need to rework class nesting in the presence of nested classes, etc. */ - shadow_tag (CLASSTYPE_AS_LIST (yyvsp[-4].ttype)); */ + shadow_tag (CLASSTYPE_AS_LIST (yyvsp[-5].ttype)); */ #endif if (yychar == YYEMPTY) yychar = YYLEX; @@ -6011,34 +6162,34 @@ case 427: /* finish_struct nukes this anyway; if finish_exception does too, then it can go. */ if (semi) - note_got_semicolon (yyvsp[-4].ttype); + note_got_semicolon (yyvsp[-5].ttype); - if (TREE_CODE (yyvsp[-4].ttype) == ENUMERAL_TYPE) + if (TREE_CODE (yyvsp[-5].ttype) == ENUMERAL_TYPE) ; else { - yyval.ttype = finish_struct (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi); + yyval.ttype = finish_struct (yyvsp[-5].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi); if (semi) note_got_semicolon (yyval.ttype); } pop_obstacks (); if (! semi) - check_for_missing_semicolon (yyvsp[-4].ttype); + check_for_missing_semicolon (yyvsp[-5].ttype); if (current_scope () == current_function_decl) do_pending_defargs (); ; break;} -case 428: -#line 2235 "parse.y" +case 442: +#line 2299 "parse.y" { if (pending_inlines && current_scope () == current_function_decl) do_pending_inlines (); ; break;} -case 429: -#line 2241 "parse.y" +case 443: +#line 2305 "parse.y" { yyval.ftype.t = yyvsp[-3].ttype; yyval.ftype.new_type_flag = 1; @@ -6046,8 +6197,8 @@ case 429: clear_inline_text_obstack (); ; break;} -case 430: -#line 2248 "parse.y" +case 444: +#line 2312 "parse.y" { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; @@ -6058,82 +6209,82 @@ case 430: yyval.ftype.t); ; break;} -case 434: -#line 2267 "parse.y" +case 448: +#line 2331 "parse.y" { if (pedantic && !in_system_header) pedwarn ("comma at end of enumerator list"); ; break;} -case 436: -#line 2274 "parse.y" +case 450: +#line 2338 "parse.y" { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} -case 437: -#line 2276 "parse.y" +case 451: +#line 2340 "parse.y" { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} -case 438: -#line 2278 "parse.y" +case 452: +#line 2342 "parse.y" { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ; break;} -case 439: -#line 2280 "parse.y" +case 453: +#line 2344 "parse.y" { error ("no body nor ';' separates two class, struct or union declarations"); ; break;} -case 440: -#line 2285 "parse.y" +case 454: +#line 2349 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 441: -#line 2290 "parse.y" +case 455: +#line 2354 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 442: -#line 2295 "parse.y" +case 456: +#line 2359 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 443: -#line 2300 "parse.y" +case 457: +#line 2364 "parse.y" { current_aggr = yyvsp[-3].ttype; yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 444: -#line 2305 "parse.y" +case 458: +#line 2369 "parse.y" { current_aggr = yyvsp[-2].ttype; yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype); ; break;} -case 445: -#line 2310 "parse.y" +case 459: +#line 2374 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 446: -#line 2312 "parse.y" +case 460: +#line 2376 "parse.y" { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 447: -#line 2317 "parse.y" +case 461: +#line 2381 "parse.y" { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 0); ; break;} -case 448: -#line 2322 "parse.y" +case 462: +#line 2386 "parse.y" { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, NULL_TREE, 1); ; break;} -case 449: -#line 2325 "parse.y" +case 463: +#line 2389 "parse.y" { yyval.ttype = yyvsp[-1].ttype; if (yyvsp[0].ttype) xref_basetypes (current_aggr, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 450: -#line 2331 "parse.y" +case 464: +#line 2395 "parse.y" { yyval.ttype = TREE_TYPE (yyvsp[-1].ttype); if (TREE_INT_CST_LOW (current_aggr) == union_type @@ -6160,29 +6311,29 @@ case 450: } ; break;} -case 451: -#line 2360 "parse.y" +case 465: +#line 2424 "parse.y" { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), NULL_TREE, 0); yyungetc ('{', 1); ; break;} -case 454: -#line 2371 "parse.y" +case 468: +#line 2435 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 455: -#line 2373 "parse.y" +case 469: +#line 2437 "parse.y" { yyungetc(':', 1); yyval.ttype = NULL_TREE; ; break;} -case 456: -#line 2375 "parse.y" +case 470: +#line 2439 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 458: -#line 2381 "parse.y" +case 472: +#line 2445 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} -case 459: -#line 2386 "parse.y" +case 473: +#line 2450 "parse.y" { tree type = TREE_TYPE (yyvsp[0].ttype); if (! is_aggr_type (type, 1)) @@ -6208,8 +6359,8 @@ case 459: yyval.ttype = build_tree_list (access_default_node, type); ; break;} -case 460: -#line 2411 "parse.y" +case 474: +#line 2475 "parse.y" { tree type = TREE_TYPE (yyvsp[0].ttype); if (current_aggr == signature_type_node) @@ -6237,16 +6388,12 @@ case 460: yyval.ttype = build_tree_list (yyval.ttype, type); ; break;} -case 462: -#line 2442 "parse.y" -{ yyval.ttype = TYPE_MAIN_DECL (make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype)); ; - break;} -case 463: -#line 2444 "parse.y" -{ yyval.ttype = TYPE_MAIN_DECL (make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype)); ; +case 475: +#line 2505 "parse.y" +{ yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ; break;} -case 464: -#line 2446 "parse.y" +case 477: +#line 2508 "parse.y" { if (current_aggr == signature_type_node) { @@ -6268,8 +6415,8 @@ case 464: } ; break;} -case 465: -#line 2467 "parse.y" +case 478: +#line 2529 "parse.y" { if (current_aggr == signature_type_node) { @@ -6291,14 +6438,14 @@ case 465: } ; break;} -case 467: -#line 2492 "parse.y" +case 480: +#line 2554 "parse.y" { if (yyval.ttype != ridpointers[(int)RID_VIRTUAL]) sorry ("non-virtual access"); yyval.ttype = access_default_virtual_node; ; break;} -case 468: -#line 2496 "parse.y" +case 481: +#line 2558 "parse.y" { int err = 0; if (yyvsp[-1].ttype == access_protected_node) { @@ -6325,8 +6472,8 @@ case 468: } ; break;} -case 469: -#line 2522 "parse.y" +case 482: +#line 2584 "parse.y" { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL]) sorry ("non-virtual access"); if (yyval.ttype == access_public_node) @@ -6334,8 +6481,8 @@ case 469: else if (yyval.ttype == access_private_node) yyval.ttype = access_private_virtual_node; ; break;} -case 470: -#line 2532 "parse.y" +case 483: +#line 2594 "parse.y" { tree t = yyvsp[-1].ttype; push_obstacks_nochange (); end_temporary_allocation (); @@ -6416,18 +6563,18 @@ case 470: #endif ; break;} -case 471: -#line 2615 "parse.y" +case 484: +#line 2677 "parse.y" { yyval.ttype = build_self_reference (); ; break;} -case 472: -#line 2622 "parse.y" +case 485: +#line 2684 "parse.y" { if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ; break;} -case 473: -#line 2624 "parse.y" +case 486: +#line 2686 "parse.y" { if (current_aggr == signature_type_node) yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype); @@ -6436,8 +6583,8 @@ case 473: if (yyvsp[-1].ttype) yyval.ttype = tree_cons (access_public_node, yyvsp[-1].ttype, yyval.ttype); ; break;} -case 474: -#line 2632 "parse.y" +case 487: +#line 2694 "parse.y" { tree visspec = yyvsp[-2].ttype; @@ -6449,20 +6596,20 @@ case 474: yyval.ttype = chainon (yyval.ttype, build_tree_list (visspec, yyvsp[0].ttype)); ; break;} -case 475: -#line 2643 "parse.y" +case 488: +#line 2705 "parse.y" { if (current_aggr == signature_type_node) error ("access specifier not allowed in signature"); ; break;} -case 476: -#line 2653 "parse.y" +case 489: +#line 2715 "parse.y" { if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; ; break;} -case 477: -#line 2656 "parse.y" +case 490: +#line 2718 "parse.y" { /* In pushdecl, we created a reverse list of names in this binding level. Make sure that the chain of what we're trying to add isn't the item itself @@ -6476,87 +6623,92 @@ case 477: } ; break;} -case 478: -#line 2672 "parse.y" +case 491: +#line 2734 "parse.y" { ; break;} -case 479: -#line 2674 "parse.y" +case 492: +#line 2736 "parse.y" { error ("missing ';' before right brace"); yyungetc ('}', 0); ; break;} -case 480: -#line 2679 "parse.y" +case 493: +#line 2741 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} -case 481: -#line 2681 "parse.y" +case 494: +#line 2743 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} -case 482: -#line 2683 "parse.y" +case 495: +#line 2745 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} -case 483: -#line 2685 "parse.y" +case 496: +#line 2747 "parse.y" { yyval.ttype = finish_method (yyval.ttype); ; break;} -case 484: -#line 2687 "parse.y" +case 497: +#line 2749 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 485: -#line 2689 "parse.y" +case 498: +#line 2751 "parse.y" { yyval.ttype = yyvsp[0].ttype; pedantic = yyvsp[-1].itype; ; break;} -case 486: -#line 2698 "parse.y" +case 499: +#line 2760 "parse.y" { yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 487: -#line 2700 "parse.y" +case 500: +#line 2762 "parse.y" { yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 488: -#line 2702 "parse.y" +case 501: +#line 2764 "parse.y" { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ; break;} -case 489: -#line 2705 "parse.y" +case 502: +#line 2767 "parse.y" { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ; break;} -case 490: -#line 2708 "parse.y" +case 503: +#line 2770 "parse.y" { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ; break;} -case 491: -#line 2710 "parse.y" +case 504: +#line 2772 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 492: -#line 2721 "parse.y" +case 505: +#line 2783 "parse.y" { tree specs, attrs; split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs); yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, attrs)); ; break;} -case 493: -#line 2726 "parse.y" +case 506: +#line 2788 "parse.y" { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ; break;} -case 494: -#line 2729 "parse.y" +case 507: +#line 2791 "parse.y" { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ; break;} -case 495: -#line 2731 "parse.y" +case 508: +#line 2793 "parse.y" { - end_template_decl (); - if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype)) + if (yyvsp[-1].ttype) + end_template_decl (); + else + end_specialization (); + + if (yyvsp[0].ttype && DECL_TEMPLATE_INFO (yyvsp[0].ttype) + && !DECL_TEMPLATE_SPECIALIZATION (yyvsp[0].ttype)) { yyval.ttype = DECL_TI_TEMPLATE (yyvsp[0].ttype); check_member_template (yyval.ttype); @@ -6570,12 +6722,12 @@ case 495: } ; break;} -case 496: -#line 2751 "parse.y" +case 509: +#line 2818 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 498: -#line 2754 "parse.y" +case 511: +#line 2821 "parse.y" { /* In this context, void_type_node encodes friends. They have been recorded elsewhere. */ @@ -6585,12 +6737,12 @@ case 498: yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} -case 499: -#line 2766 "parse.y" +case 512: +#line 2833 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 501: -#line 2769 "parse.y" +case 514: +#line 2836 "parse.y" { /* In this context, void_type_node encodes friends. They have been recorded elsewhere. */ @@ -6600,103 +6752,103 @@ case 501: yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} -case 506: -#line 2791 "parse.y" +case 519: +#line 2858 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} -case 507: -#line 2797 "parse.y" +case 520: +#line 2864 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 508: -#line 2806 "parse.y" +case 521: +#line 2873 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} -case 509: -#line 2812 "parse.y" +case 522: +#line 2879 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} -case 510: -#line 2818 "parse.y" +case 523: +#line 2885 "parse.y" { split_specs_attrs (yyvsp[-4].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-4].ttype = current_declspecs; yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 511: -#line 2824 "parse.y" +case 524: +#line 2891 "parse.y" { split_specs_attrs (yyvsp[-3].ttype, ¤t_declspecs, &prefix_attributes); yyvsp[-3].ttype = current_declspecs; yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 512: -#line 2833 "parse.y" +case 525: +#line 2900 "parse.y" { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} -case 513: -#line 2836 "parse.y" +case 526: +#line 2903 "parse.y" { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 514: -#line 2842 "parse.y" +case 527: +#line 2909 "parse.y" { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype, build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ; break;} -case 515: -#line 2845 "parse.y" +case 528: +#line 2912 "parse.y" { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 516: -#line 2848 "parse.y" +case 529: +#line 2915 "parse.y" { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype); cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ; break;} -case 518: -#line 2859 "parse.y" +case 531: +#line 2926 "parse.y" { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 519: -#line 2864 "parse.y" +case 532: +#line 2931 "parse.y" { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE); ; break;} -case 520: -#line 2866 "parse.y" +case 533: +#line 2933 "parse.y" { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype); ; break;} -case 521: -#line 2872 "parse.y" +case 534: +#line 2939 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 522: -#line 2875 "parse.y" +case 535: +#line 2942 "parse.y" { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 523: -#line 2880 "parse.y" +case 536: +#line 2947 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new"); @@ -6705,72 +6857,72 @@ case 523: yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag; ; break;} -case 524: -#line 2891 "parse.y" +case 537: +#line 2958 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 525: -#line 2893 "parse.y" +case 538: +#line 2960 "parse.y" { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} -case 526: -#line 2898 "parse.y" +case 539: +#line 2965 "parse.y" { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); yyval.ftype.new_type_flag = 0; ; break;} -case 527: -#line 2901 "parse.y" +case 540: +#line 2968 "parse.y" { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 528: -#line 2910 "parse.y" +case 541: +#line 2977 "parse.y" { yyval.itype = suspend_momentary (); ; break;} -case 529: -#line 2915 "parse.y" +case 542: +#line 2982 "parse.y" { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ; break;} -case 530: -#line 2921 "parse.y" +case 543: +#line 2988 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ; break;} -case 531: -#line 2923 "parse.y" +case 544: +#line 2990 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ; break;} -case 532: -#line 2925 "parse.y" +case 545: +#line 2992 "parse.y" { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ; break;} -case 533: -#line 2927 "parse.y" +case 546: +#line 2994 "parse.y" { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ; break;} -case 534: -#line 2934 "parse.y" +case 547: +#line 3001 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 535: -#line 2936 "parse.y" +case 548: +#line 3003 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 536: -#line 2938 "parse.y" +case 549: +#line 3005 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 537: -#line 2940 "parse.y" +case 550: +#line 3007 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 538: -#line 2942 "parse.y" +case 551: +#line 3009 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 540: -#line 2950 "parse.y" +case 553: +#line 3017 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) { @@ -6791,8 +6943,8 @@ case 540: yyval.ttype = yyvsp[0].ttype; ; break;} -case 541: -#line 2970 "parse.y" +case 554: +#line 3037 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype); @@ -6801,98 +6953,98 @@ case 541: got_scope = NULL_TREE; ; break;} -case 543: -#line 2979 "parse.y" +case 557: +#line 3050 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 544: -#line 2984 "parse.y" +case 558: +#line 3055 "parse.y" { yyval.ttype = get_type_decl (yyvsp[0].ttype); ; break;} -case 545: -#line 2989 "parse.y" +case 559: +#line 3060 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 546: -#line 2991 "parse.y" +case 560: +#line 3062 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} -case 547: -#line 2993 "parse.y" +case 561: +#line 3064 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} -case 548: -#line 2995 "parse.y" +case 562: +#line 3066 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} -case 549: -#line 2997 "parse.y" +case 563: +#line 3068 "parse.y" { push_nested_class (yyvsp[-1].ttype, 3); yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ; break;} -case 551: -#line 3008 "parse.y" +case 565: +#line 3079 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 552: -#line 3010 "parse.y" +case 566: +#line 3081 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 553: -#line 3012 "parse.y" +case 567: +#line 3083 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 554: -#line 3014 "parse.y" +case 568: +#line 3085 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 555: -#line 3016 "parse.y" +case 569: +#line 3087 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 557: -#line 3024 "parse.y" +case 571: +#line 3095 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 558: -#line 3026 "parse.y" +case 572: +#line 3097 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 559: -#line 3028 "parse.y" +case 573: +#line 3099 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 560: -#line 3030 "parse.y" +case 574: +#line 3101 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 561: -#line 3032 "parse.y" +case 575: +#line 3103 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 563: -#line 3040 "parse.y" +case 577: +#line 3111 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 564: -#line 3042 "parse.y" +case 578: +#line 3113 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} -case 565: -#line 3044 "parse.y" +case 579: +#line 3115 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} -case 566: -#line 3046 "parse.y" +case 580: +#line 3117 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} -case 567: -#line 3048 "parse.y" +case 581: +#line 3119 "parse.y" { if (OP0 (yyval.ttype) != current_class_type) { push_nested_class (OP0 (yyval.ttype), 3); @@ -6900,38 +7052,59 @@ case 567: } ; break;} -case 568: -#line 3058 "parse.y" +case 582: +#line 3126 "parse.y" +{ got_scope = NULL_TREE; + yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); + if (yyvsp[-1].ttype != current_class_type) + { + push_nested_class (yyvsp[-1].ttype, 3); + TREE_COMPLEXITY (yyval.ttype) = current_class_depth; + } + ; + break;} +case 583: +#line 3138 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ; break;} -case 569: -#line 3064 "parse.y" +case 584: +#line 3141 "parse.y" +{ got_scope = NULL_TREE; + yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ; + break;} +case 585: +#line 3147 "parse.y" { got_scope = NULL_TREE; yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ; break;} -case 571: -#line 3071 "parse.y" +case 586: +#line 3150 "parse.y" +{ got_scope = NULL_TREE; + yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ; + break;} +case 588: +#line 3157 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 572: -#line 3076 "parse.y" +case 589: +#line 3162 "parse.y" { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ; break;} -case 573: -#line 3078 "parse.y" +case 590: +#line 3164 "parse.y" { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ; break;} -case 574: -#line 3080 "parse.y" +case 591: +#line 3166 "parse.y" { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 579: -#line 3092 "parse.y" +case 596: +#line 3178 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 580: -#line 3099 "parse.y" +case 597: +#line 3185 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) { @@ -6946,32 +7119,89 @@ case 580: got_scope = yyval.ttype = TREE_TYPE (yyval.ttype); ; break;} -case 581: -#line 3113 "parse.y" +case 598: +#line 3199 "parse.y" { if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; got_scope = yyval.ttype = TREE_TYPE (yyval.ttype); ; break;} -case 582: -#line 3119 "parse.y" +case 599: +#line 3205 "parse.y" { if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) yyval.ttype = lastiddecl; - if (TREE_CODE (yyval.ttype) == NAMESPACE_DECL - && DECL_NAME (yyval.ttype) == get_identifier ("std")) - got_scope = void_type_node; - else - got_scope = yyval.ttype; + got_scope = yyval.ttype; ; break;} -case 583: -#line 3129 "parse.y" +case 600: +#line 3211 "parse.y" { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ; break;} -case 584: -#line 3144 "parse.y" +case 602: +#line 3227 "parse.y" +{ yyval.ttype = yyvsp[0].ttype; ; + break;} +case 603: +#line 3232 "parse.y" +{ + if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't') + yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); + else if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); + else + yyval.ttype = yyvsp[0].ttype; + ; + break;} +case 604: +#line 3244 "parse.y" +{ + if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); + ; + break;} +case 605: +#line 3249 "parse.y" +{ + if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't') + yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); + else if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype); + else + yyval.ttype = yyvsp[0].ttype; + ; + break;} +case 606: +#line 3261 "parse.y" +{ + if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) + yyval.ttype = lastiddecl; + got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); + ; + break;} +case 607: +#line 3267 "parse.y" +{ + if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE) + yyval.ttype = lastiddecl; + got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); + ; + break;} +case 608: +#line 3273 "parse.y" +{ got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ; + break;} +case 611: +#line 3277 "parse.y" +{ + if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE) + yyval.ttype = lastiddecl; + got_scope = yyval.ttype; + ; + break;} +case 612: +#line 3286 "parse.y" { if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE) yyval.ttype = identifier_typedecl_value (yyvsp[0].ttype); @@ -6980,157 +7210,157 @@ case 584: got_scope = NULL_TREE; ; break;} -case 586: -#line 3153 "parse.y" +case 614: +#line 3295 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 587: -#line 3158 "parse.y" +case 615: +#line 3300 "parse.y" { got_scope = NULL_TREE; ; break;} -case 588: -#line 3160 "parse.y" +case 616: +#line 3302 "parse.y" { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ; break;} -case 589: -#line 3167 "parse.y" +case 617: +#line 3309 "parse.y" { got_scope = void_type_node; ; break;} -case 590: -#line 3173 "parse.y" +case 618: +#line 3315 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 591: -#line 3175 "parse.y" +case 619: +#line 3317 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} -case 592: -#line 3177 "parse.y" +case 620: +#line 3319 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 593: -#line 3179 "parse.y" +case 621: +#line 3321 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ; break;} -case 594: -#line 3181 "parse.y" +case 622: +#line 3323 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg); ; break;} -case 595: -#line 3185 "parse.y" +case 623: +#line 3327 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 597: -#line 3194 "parse.y" +case 625: +#line 3336 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} -case 598: -#line 3196 "parse.y" +case 626: +#line 3338 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} -case 599: -#line 3202 "parse.y" +case 627: +#line 3344 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 600: -#line 3204 "parse.y" +case 628: +#line 3346 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 601: -#line 3206 "parse.y" +case 629: +#line 3348 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} -case 602: -#line 3208 "parse.y" +case 630: +#line 3350 "parse.y" { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ; break;} -case 603: -#line 3210 "parse.y" +case 631: +#line 3352 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 604: -#line 3212 "parse.y" +case 632: +#line 3354 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ; break;} -case 605: -#line 3214 "parse.y" +case 633: +#line 3356 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ; break;} -case 606: -#line 3216 "parse.y" +case 634: +#line 3358 "parse.y" { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ; break;} -case 607: -#line 3218 "parse.y" +case 635: +#line 3360 "parse.y" { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg); ; break;} -case 608: -#line 3222 "parse.y" +case 636: +#line 3364 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 610: -#line 3231 "parse.y" +case 638: +#line 3373 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} -case 612: -#line 3235 "parse.y" +case 640: +#line 3377 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 613: -#line 3237 "parse.y" +case 641: +#line 3379 "parse.y" { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 614: -#line 3239 "parse.y" +case 642: +#line 3381 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ; break;} -case 615: -#line 3241 "parse.y" +case 643: +#line 3383 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ; break;} -case 616: -#line 3243 "parse.y" +case 644: +#line 3385 "parse.y" { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 617: -#line 3245 "parse.y" +case 645: +#line 3387 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 618: -#line 3247 "parse.y" +case 646: +#line 3389 "parse.y" { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 619: -#line 3249 "parse.y" +case 647: +#line 3391 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ; break;} -case 620: -#line 3251 "parse.y" +case 648: +#line 3393 "parse.y" { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ; break;} -case 626: -#line 3275 "parse.y" +case 654: +#line 3417 "parse.y" { do_pushlevel (); ; break;} -case 627: -#line 3280 "parse.y" +case 655: +#line 3422 "parse.y" { yyval.ttype = do_poplevel (); ; break;} -case 629: -#line 3288 "parse.y" +case 657: +#line 3430 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids label declarations"); ; break;} -case 632: -#line 3299 "parse.y" +case 660: +#line 3441 "parse.y" { tree link; for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link)) { @@ -7140,12 +7370,12 @@ case 632: } ; break;} -case 633: -#line 3313 "parse.y" +case 661: +#line 3455 "parse.y" {; break;} -case 635: -#line 3319 "parse.y" +case 663: +#line 3461 "parse.y" { if (processing_template_decl) { @@ -7154,8 +7384,8 @@ case 635: } ; break;} -case 636: -#line 3327 "parse.y" +case 664: +#line 3469 "parse.y" { if (processing_template_decl) { @@ -7166,8 +7396,8 @@ case 636: yyval.ttype = yyvsp[0].ttype; ; break;} -case 637: -#line 3340 "parse.y" +case 665: +#line 3482 "parse.y" { if (processing_template_decl) { @@ -7178,8 +7408,8 @@ case 637: cond_stmt_keyword = "if"; ; break;} -case 638: -#line 3350 "parse.y" +case 666: +#line 3492 "parse.y" { if (processing_template_decl) { @@ -7199,8 +7429,8 @@ case 638: } ; break;} -case 639: -#line 3369 "parse.y" +case 667: +#line 3511 "parse.y" { if (processing_template_decl) { @@ -7210,12 +7440,12 @@ case 639: } ; break;} -case 640: -#line 3381 "parse.y" +case 668: +#line 3523 "parse.y" { finish_stmt (); ; break;} -case 641: -#line 3383 "parse.y" +case 669: +#line 3525 "parse.y" { if (processing_template_decl) { @@ -7224,8 +7454,8 @@ case 641: } ; break;} -case 642: -#line 3391 "parse.y" +case 670: +#line 3533 "parse.y" { if (processing_template_decl) { @@ -7236,16 +7466,16 @@ case 642: yyval.ttype = yyvsp[0].ttype; ; break;} -case 643: -#line 3404 "parse.y" +case 671: +#line 3546 "parse.y" { finish_stmt (); ; break;} -case 645: -#line 3410 "parse.y" +case 673: +#line 3552 "parse.y" { finish_stmt (); ; break;} -case 646: -#line 3412 "parse.y" +case 674: +#line 3554 "parse.y" { tree expr = yyvsp[-1].ttype; if (! processing_template_decl) @@ -7262,12 +7492,12 @@ case 646: clear_momentary (); finish_stmt (); ; break;} -case 647: -#line 3428 "parse.y" +case 675: +#line 3570 "parse.y" { if (! processing_template_decl) expand_start_else (); ; break;} -case 648: -#line 3430 "parse.y" +case 676: +#line 3572 "parse.y" { if (processing_template_decl) { @@ -7279,18 +7509,18 @@ case 648: expand_end_cond (); ; break;} -case 649: -#line 3441 "parse.y" +case 677: +#line 3583 "parse.y" { finish_stmt (); ; break;} -case 650: -#line 3443 "parse.y" +case 678: +#line 3585 "parse.y" { if (! processing_template_decl) expand_end_cond (); do_poplevel (); finish_stmt (); ; break;} -case 651: -#line 3447 "parse.y" +case 679: +#line 3589 "parse.y" { if (processing_template_decl) { @@ -7306,8 +7536,8 @@ case 651: cond_stmt_keyword = "while"; ; break;} -case 652: -#line 3462 "parse.y" +case 680: +#line 3604 "parse.y" { if (processing_template_decl) { @@ -7327,8 +7557,8 @@ case 652: } ; break;} -case 653: -#line 3481 "parse.y" +case 681: +#line 3623 "parse.y" { if (processing_template_decl) { @@ -7341,8 +7571,8 @@ case 653: finish_stmt (); ; break;} -case 654: -#line 3493 "parse.y" +case 682: +#line 3635 "parse.y" { if (processing_template_decl) { @@ -7357,8 +7587,8 @@ case 654: } ; break;} -case 655: -#line 3507 "parse.y" +case 683: +#line 3649 "parse.y" { if (processing_template_decl) { @@ -7373,8 +7603,8 @@ case 655: } ; break;} -case 656: -#line 3521 "parse.y" +case 684: +#line 3663 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-5].ttype, 1) = yyvsp[-1].ttype; @@ -7388,8 +7618,8 @@ case 656: finish_stmt (); ; break;} -case 657: -#line 3534 "parse.y" +case 685: +#line 3676 "parse.y" { if (processing_template_decl) { yyval.ttype = build_min_nt (FOR_STMT, NULL_TREE, NULL_TREE, @@ -7409,8 +7639,8 @@ case 657: } ; break;} -case 658: -#line 3553 "parse.y" +case 686: +#line 3695 "parse.y" { if (processing_template_decl) { @@ -7429,8 +7659,8 @@ case 658: } ; break;} -case 659: -#line 3571 "parse.y" +case 687: +#line 3713 "parse.y" { if (processing_template_decl) { @@ -7450,16 +7680,16 @@ case 659: } ; break;} -case 660: -#line 3592 "parse.y" +case 688: +#line 3734 "parse.y" { if (processing_template_decl) TREE_OPERAND (yyvsp[-9].ttype, 2) = yyvsp[-1].ttype; push_momentary (); ; break;} -case 661: -#line 3598 "parse.y" +case 689: +#line 3740 "parse.y" { if (processing_template_decl) { @@ -7481,8 +7711,8 @@ case 661: } finish_stmt (); ; break;} -case 662: -#line 3619 "parse.y" +case 690: +#line 3761 "parse.y" { if (processing_template_decl) { @@ -7500,8 +7730,8 @@ case 662: push_momentary (); ; break;} -case 663: -#line 3636 "parse.y" +case 691: +#line 3778 "parse.y" { if (processing_template_decl) { @@ -7515,60 +7745,60 @@ case 663: pop_switch (); ; break;} -case 664: -#line 3649 "parse.y" +case 692: +#line 3791 "parse.y" { finish_stmt (); ; break;} -case 665: -#line 3651 "parse.y" +case 693: +#line 3793 "parse.y" { do_case (yyvsp[-1].ttype, NULL_TREE); ; break;} -case 667: -#line 3654 "parse.y" +case 695: +#line 3796 "parse.y" { do_case (yyvsp[-3].ttype, yyvsp[-1].ttype); ; break;} -case 669: -#line 3657 "parse.y" +case 697: +#line 3799 "parse.y" { do_case (NULL_TREE, NULL_TREE); ; break;} -case 671: -#line 3660 "parse.y" +case 699: +#line 3802 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (BREAK_STMT)); else if ( ! expand_exit_something ()) error ("break statement not within loop or switch"); ; break;} -case 672: -#line 3666 "parse.y" +case 700: +#line 3808 "parse.y" { emit_line_note (input_filename, lineno); if (processing_template_decl) add_tree (build_min_nt (CONTINUE_STMT)); else if (! expand_continue_loop (0)) error ("continue statement not within a loop"); ; break;} -case 673: -#line 3672 "parse.y" +case 701: +#line 3814 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (NULL_TREE); ; break;} -case 674: -#line 3675 "parse.y" +case 702: +#line 3817 "parse.y" { emit_line_note (input_filename, lineno); c_expand_return (yyvsp[-1].ttype); finish_stmt (); ; break;} -case 675: -#line 3680 "parse.y" +case 703: +#line 3822 "parse.y" { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype); emit_line_note (input_filename, lineno); expand_asm (yyvsp[-2].ttype); finish_stmt (); ; break;} -case 676: -#line 3687 "parse.y" +case 704: +#line 3829 "parse.y" { if (TREE_CHAIN (yyvsp[-4].ttype)) yyvsp[-4].ttype = combine_strings (yyvsp[-4].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE, @@ -7577,8 +7807,8 @@ case 676: finish_stmt (); ; break;} -case 677: -#line 3696 "parse.y" +case 705: +#line 3838 "parse.y" { if (TREE_CHAIN (yyvsp[-6].ttype)) yyvsp[-6].ttype = combine_strings (yyvsp[-6].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, @@ -7587,8 +7817,8 @@ case 677: finish_stmt (); ; break;} -case 678: -#line 3706 "parse.y" +case 706: +#line 3848 "parse.y" { if (TREE_CHAIN (yyvsp[-8].ttype)) yyvsp[-8].ttype = combine_strings (yyvsp[-8].ttype); emit_line_note (input_filename, lineno); c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, @@ -7597,8 +7827,8 @@ case 678: finish_stmt (); ; break;} -case 679: -#line 3714 "parse.y" +case 707: +#line 3856 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7607,8 +7837,8 @@ case 679: expand_computed_goto (yyvsp[-1].ttype); } ; break;} -case 680: -#line 3722 "parse.y" +case 708: +#line 3864 "parse.y" { if (processing_template_decl) add_tree (build_min_nt (GOTO_STMT, yyvsp[-1].ttype)); @@ -7622,34 +7852,34 @@ case 680: } ; break;} -case 681: -#line 3735 "parse.y" +case 709: +#line 3877 "parse.y" { finish_stmt (); ; break;} -case 682: -#line 3737 "parse.y" +case 710: +#line 3879 "parse.y" { error ("label must be followed by statement"); yyungetc ('}', 0); finish_stmt (); ; break;} -case 683: -#line 3741 "parse.y" +case 711: +#line 3883 "parse.y" { finish_stmt (); ; break;} -case 685: -#line 3747 "parse.y" +case 713: +#line 3889 "parse.y" { if (! current_function_parms_stored) store_parm_decls (); expand_start_early_try_stmts (); ; break;} -case 686: -#line 3753 "parse.y" +case 714: +#line 3895 "parse.y" { expand_start_all_catch (); ; break;} -case 687: -#line 3755 "parse.y" +case 715: +#line 3897 "parse.y" { int nested = (hack_decl_function_context (current_function_decl) != NULL_TREE); @@ -7657,8 +7887,8 @@ case 687: finish_function (lineno, (int)yyvsp[-3].itype, nested); ; break;} -case 688: -#line 3765 "parse.y" +case 716: +#line 3907 "parse.y" { if (processing_template_decl) { @@ -7673,8 +7903,8 @@ case 688: } ; break;} -case 689: -#line 3779 "parse.y" +case 717: +#line 3921 "parse.y" { if (processing_template_decl) { @@ -7686,8 +7916,8 @@ case 689: expand_start_all_catch (); ; break;} -case 690: -#line 3790 "parse.y" +case 718: +#line 3932 "parse.y" { if (processing_template_decl) { @@ -7699,8 +7929,8 @@ case 690: expand_end_all_catch (); ; break;} -case 693: -#line 3809 "parse.y" +case 721: +#line 3951 "parse.y" { if (processing_template_decl) { @@ -7710,8 +7940,8 @@ case 693: } ; break;} -case 694: -#line 3818 "parse.y" +case 722: +#line 3960 "parse.y" { if (processing_template_decl) { @@ -7721,8 +7951,8 @@ case 694: } ; break;} -case 695: -#line 3827 "parse.y" +case 723: +#line 3969 "parse.y" { if (processing_template_decl) { @@ -7734,18 +7964,18 @@ case 695: expand_end_catch_block (); ; break;} -case 699: -#line 3847 "parse.y" +case 727: +#line 3989 "parse.y" { expand_start_catch_block (NULL_TREE, NULL_TREE); ; break;} -case 700: -#line 3863 "parse.y" +case 728: +#line 4005 "parse.y" { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype); expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t), TREE_VALUE (yyvsp[-1].ftype.t)); ; break;} -case 701: -#line 3870 "parse.y" +case 729: +#line 4012 "parse.y" { tree label; do_label: label = define_label (input_filename, lineno, yyvsp[-1].ttype); @@ -7753,130 +7983,130 @@ case 701: expand_label (label); ; break;} -case 702: -#line 3877 "parse.y" +case 730: +#line 4019 "parse.y" { goto do_label; ; break;} -case 703: -#line 3879 "parse.y" +case 731: +#line 4021 "parse.y" { goto do_label; ; break;} -case 704: -#line 3881 "parse.y" +case 732: +#line 4023 "parse.y" { goto do_label; ; break;} -case 705: -#line 3886 "parse.y" +case 733: +#line 4028 "parse.y" { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ; break;} -case 707: -#line 3889 "parse.y" +case 735: +#line 4031 "parse.y" { if (pedantic) pedwarn ("ANSI C++ forbids compound statements inside for initializations"); ; break;} -case 708: -#line 3898 "parse.y" +case 736: +#line 4040 "parse.y" { emit_line_note (input_filename, lineno); yyval.ttype = NULL_TREE; ; break;} -case 709: -#line 3901 "parse.y" +case 737: +#line 4043 "parse.y" { emit_line_note (input_filename, lineno); ; break;} -case 710: -#line 3906 "parse.y" +case 738: +#line 4048 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 712: -#line 3909 "parse.y" +case 740: +#line 4051 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 713: -#line 3916 "parse.y" +case 741: +#line 4058 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 716: -#line 3923 "parse.y" +case 744: +#line 4065 "parse.y" { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ; break;} -case 717: -#line 3928 "parse.y" +case 745: +#line 4070 "parse.y" { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ; break;} -case 718: -#line 3933 "parse.y" +case 746: +#line 4075 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ; break;} -case 719: -#line 3935 "parse.y" +case 747: +#line 4077 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ; break;} -case 720: -#line 3946 "parse.y" +case 748: +#line 4088 "parse.y" { yyval.ttype = empty_parms(); ; break;} -case 722: -#line 3951 "parse.y" +case 750: +#line 4093 "parse.y" { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ftype.t, void_list_node); TREE_PARMLIST (yyval.ttype) = 1; check_for_new_type ("inside parameter list", yyvsp[0].ftype); ; break;} -case 723: -#line 3960 "parse.y" +case 751: +#line 4102 "parse.y" { yyval.ttype = chainon (yyval.ttype, void_list_node); TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 724: -#line 3965 "parse.y" +case 752: +#line 4107 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 725: -#line 3970 "parse.y" +case 753: +#line 4112 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 726: -#line 3974 "parse.y" +case 754: +#line 4116 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 727: -#line 3979 "parse.y" +case 755: +#line 4121 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 728: -#line 3983 "parse.y" +case 756: +#line 4125 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 729: -#line 3987 "parse.y" +case 757: +#line 4129 "parse.y" { TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 730: -#line 3991 "parse.y" +case 758: +#line 4133 "parse.y" { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); TREE_PARMLIST (yyval.ttype) = 1; ; break;} -case 731: -#line 3996 "parse.y" +case 759: +#line 4138 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -7888,8 +8118,8 @@ case 731: yychar = ')'; ; break;} -case 732: -#line 4007 "parse.y" +case 760: +#line 4149 "parse.y" { /* This helps us recover from really nasty parse errors, for example, a missing right @@ -7901,99 +8131,99 @@ case 732: yychar = ')'; ; break;} -case 733: -#line 4022 "parse.y" +case 761: +#line 4164 "parse.y" { maybe_snarf_defarg (); ; break;} -case 734: -#line 4024 "parse.y" +case 762: +#line 4166 "parse.y" { yyval.ttype = yyvsp[0].ttype; ; break;} -case 737: -#line 4035 "parse.y" +case 765: +#line 4177 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ; break;} -case 738: -#line 4038 "parse.y" +case 766: +#line 4180 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ; break;} -case 739: -#line 4041 "parse.y" +case 767: +#line 4183 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[0].ftype); yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ; break;} -case 740: -#line 4044 "parse.y" +case 768: +#line 4186 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ; break;} -case 741: -#line 4046 "parse.y" +case 769: +#line 4188 "parse.y" { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ; break;} -case 743: -#line 4052 "parse.y" +case 771: +#line 4194 "parse.y" { check_for_new_type ("in a parameter list", yyvsp[-1].ftype); yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ; break;} -case 744: -#line 4062 "parse.y" +case 772: +#line 4204 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ; break;} -case 745: -#line 4066 "parse.y" +case 773: +#line 4208 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 746: -#line 4069 "parse.y" +case 774: +#line 4211 "parse.y" { yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 747: -#line 4072 "parse.y" +case 775: +#line 4214 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ftype.t); yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 748: -#line 4076 "parse.y" +case 776: +#line 4218 "parse.y" { tree specs = strip_attrs (yyvsp[0].ftype.t); yyval.ftype.t = build_tree_list (specs, NULL_TREE); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 749: -#line 4080 "parse.y" +case 777: +#line 4222 "parse.y" { tree specs = strip_attrs (yyvsp[-1].ttype); yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); yyval.ftype.new_type_flag = 0; ; break;} -case 750: -#line 4087 "parse.y" +case 778: +#line 4229 "parse.y" { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ; break;} -case 751: -#line 4090 "parse.y" +case 779: +#line 4232 "parse.y" { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ; break;} -case 754: -#line 4101 "parse.y" +case 782: +#line 4243 "parse.y" { see_typename (); ; break;} -case 755: -#line 4106 "parse.y" +case 783: +#line 4248 "parse.y" { error ("type specifier omitted for parameter"); yyval.ttype = build_tree_list (integer_type_node, NULL_TREE); ; break;} -case 756: -#line 4111 "parse.y" +case 784: +#line 4253 "parse.y" { error ("type specifier omitted for parameter"); if (TREE_CODE (yyval.ttype) == SCOPE_REF @@ -8002,194 +8232,194 @@ case 756: yyval.ttype = build_tree_list (integer_type_node, yyval.ttype); ; break;} -case 757: -#line 4122 "parse.y" +case 785: +#line 4264 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 758: -#line 4124 "parse.y" +case 786: +#line 4266 "parse.y" { yyval.ttype = yyvsp[-1].ttype; ; break;} -case 759: -#line 4126 "parse.y" +case 787: +#line 4268 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ; break;} -case 760: -#line 4131 "parse.y" +case 788: +#line 4273 "parse.y" { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ; break;} -case 762: -#line 4137 "parse.y" +case 790: +#line 4279 "parse.y" { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ; break;} -case 763: -#line 4145 "parse.y" +case 791: +#line 4287 "parse.y" { yyval.ttype = NULL_TREE; ; break;} -case 764: -#line 4147 "parse.y" +case 792: +#line 4289 "parse.y" { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 765: -#line 4149 "parse.y" +case 793: +#line 4291 "parse.y" { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ; break;} -case 766: -#line 4151 "parse.y" +case 794: +#line 4293 "parse.y" { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg); ; break;} -case 767: -#line 4158 "parse.y" +case 795: +#line 4300 "parse.y" { got_scope = NULL_TREE; ; break;} -case 768: -#line 4163 "parse.y" +case 796: +#line 4305 "parse.y" { yyval.ttype = ansi_opname[MULT_EXPR]; ; break;} -case 769: -#line 4165 "parse.y" +case 797: +#line 4307 "parse.y" { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ; break;} -case 770: -#line 4167 "parse.y" +case 798: +#line 4309 "parse.y" { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ; break;} -case 771: -#line 4169 "parse.y" +case 799: +#line 4311 "parse.y" { yyval.ttype = ansi_opname[PLUS_EXPR]; ; break;} -case 772: -#line 4171 "parse.y" +case 800: +#line 4313 "parse.y" { yyval.ttype = ansi_opname[MINUS_EXPR]; ; break;} -case 773: -#line 4173 "parse.y" +case 801: +#line 4315 "parse.y" { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ; break;} -case 774: -#line 4175 "parse.y" +case 802: +#line 4317 "parse.y" { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ; break;} -case 775: -#line 4177 "parse.y" +case 803: +#line 4319 "parse.y" { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ; break;} -case 776: -#line 4179 "parse.y" +case 804: +#line 4321 "parse.y" { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ; break;} -case 777: -#line 4181 "parse.y" +case 805: +#line 4323 "parse.y" { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ; break;} -case 778: -#line 4183 "parse.y" +case 806: +#line 4325 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 779: -#line 4185 "parse.y" +case 807: +#line 4327 "parse.y" { yyval.ttype = ansi_opname[LT_EXPR]; ; break;} -case 780: -#line 4187 "parse.y" +case 808: +#line 4329 "parse.y" { yyval.ttype = ansi_opname[GT_EXPR]; ; break;} -case 781: -#line 4189 "parse.y" +case 809: +#line 4331 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 782: -#line 4191 "parse.y" +case 810: +#line 4333 "parse.y" { yyval.ttype = ansi_assopname[yyvsp[0].code]; ; break;} -case 783: -#line 4193 "parse.y" +case 811: +#line 4335 "parse.y" { yyval.ttype = ansi_opname [MODIFY_EXPR]; ; break;} -case 784: -#line 4195 "parse.y" +case 812: +#line 4337 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 785: -#line 4197 "parse.y" +case 813: +#line 4339 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 786: -#line 4199 "parse.y" +case 814: +#line 4341 "parse.y" { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ; break;} -case 787: -#line 4201 "parse.y" +case 815: +#line 4343 "parse.y" { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ; break;} -case 788: -#line 4203 "parse.y" +case 816: +#line 4345 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ; break;} -case 789: -#line 4205 "parse.y" +case 817: +#line 4347 "parse.y" { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ; break;} -case 790: -#line 4207 "parse.y" +case 818: +#line 4349 "parse.y" { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ; break;} -case 791: -#line 4209 "parse.y" +case 819: +#line 4351 "parse.y" { yyval.ttype = ansi_opname[COND_EXPR]; ; break;} -case 792: -#line 4211 "parse.y" +case 820: +#line 4353 "parse.y" { yyval.ttype = ansi_opname[yyvsp[0].code]; ; break;} -case 793: -#line 4213 "parse.y" +case 821: +#line 4355 "parse.y" { yyval.ttype = ansi_opname[COMPONENT_REF]; ; break;} -case 794: -#line 4215 "parse.y" +case 822: +#line 4357 "parse.y" { yyval.ttype = ansi_opname[MEMBER_REF]; ; break;} -case 795: -#line 4217 "parse.y" +case 823: +#line 4359 "parse.y" { yyval.ttype = ansi_opname[CALL_EXPR]; ; break;} -case 796: -#line 4219 "parse.y" +case 824: +#line 4361 "parse.y" { yyval.ttype = ansi_opname[ARRAY_REF]; ; break;} -case 797: -#line 4221 "parse.y" +case 825: +#line 4363 "parse.y" { yyval.ttype = ansi_opname[NEW_EXPR]; ; break;} -case 798: -#line 4223 "parse.y" +case 826: +#line 4365 "parse.y" { yyval.ttype = ansi_opname[DELETE_EXPR]; ; break;} -case 799: -#line 4225 "parse.y" +case 827: +#line 4367 "parse.y" { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ; break;} -case 800: -#line 4227 "parse.y" +case 828: +#line 4369 "parse.y" { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ; break;} -case 801: -#line 4230 "parse.y" +case 829: +#line 4372 "parse.y" { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ; break;} -case 802: -#line 4232 "parse.y" +case 830: +#line 4374 "parse.y" { yyval.ttype = ansi_opname[ERROR_MARK]; ; break;} } /* the action file gets copied in in place of this dollarsign */ -#line 487 "/usr/local/share/bison.simple" +#line 487 "/usr/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -8385,7 +8615,7 @@ yyerrhandle: yystate = yyn; goto yynewstate; } -#line 4235 "parse.y" +#line 4377 "parse.y" #ifdef SPEW_DEBUG diff --git a/gcc/cp/parse.h b/gcc/cp/parse.h dissimilarity index 88% index 432766b00f2..f45eb6f8604 100644 --- a/gcc/cp/parse.h +++ b/gcc/cp/parse.h @@ -1,91 +1,92 @@ -typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE; -#define IDENTIFIER 258 -#define TYPENAME 259 -#define SELFNAME 260 -#define SCSPEC 261 -#define TYPESPEC 262 -#define CV_QUALIFIER 263 -#define CONSTANT 264 -#define STRING 265 -#define ELLIPSIS 266 -#define SIZEOF 267 -#define ENUM 268 -#define IF 269 -#define ELSE 270 -#define WHILE 271 -#define DO 272 -#define FOR 273 -#define SWITCH 274 -#define CASE 275 -#define DEFAULT 276 -#define BREAK 277 -#define CONTINUE 278 -#define RETURN 279 -#define GOTO 280 -#define ASM_KEYWORD 281 -#define GCC_ASM_KEYWORD 282 -#define TYPEOF 283 -#define ALIGNOF 284 -#define SIGOF 285 -#define ATTRIBUTE 286 -#define EXTENSION 287 -#define LABEL 288 -#define REALPART 289 -#define IMAGPART 290 -#define AGGR 291 -#define VISSPEC 292 -#define DELETE 293 -#define NEW 294 -#define THIS 295 -#define OPERATOR 296 -#define CXX_TRUE 297 -#define CXX_FALSE 298 -#define NAMESPACE 299 -#define TYPENAME_KEYWORD 300 -#define USING 301 -#define LEFT_RIGHT 302 -#define TEMPLATE 303 -#define TYPEID 304 -#define DYNAMIC_CAST 305 -#define STATIC_CAST 306 -#define REINTERPRET_CAST 307 -#define CONST_CAST 308 -#define SCOPE 309 -#define EMPTY 310 -#define PTYPENAME 311 -#define NSNAME 312 -#define THROW 313 -#define ASSIGN 314 -#define OROR 315 -#define ANDAND 316 -#define MIN_MAX 317 -#define EQCOMPARE 318 -#define ARITHCOMPARE 319 -#define LSHIFT 320 -#define RSHIFT 321 -#define POINTSAT_STAR 322 -#define DOT_STAR 323 -#define UNARY 324 -#define PLUSPLUS 325 -#define MINUSMINUS 326 -#define HYPERUNARY 327 -#define PAREN_STAR_PAREN 328 -#define POINTSAT 329 -#define TRY 330 -#define CATCH 331 -#define TYPENAME_ELLIPSIS 332 -#define PRE_PARSED_FUNCTION_DECL 333 -#define EXTERN_LANG_STRING 334 -#define ALL 335 -#define PRE_PARSED_CLASS_DECL 336 -#define DEFARG 337 -#define DEFARG_MARKER 338 -#define TYPENAME_DEFN 339 -#define IDENTIFIER_DEFN 340 -#define PTYPENAME_DEFN 341 -#define END_OF_LINE 342 -#define END_OF_SAVED_INPUT 343 - - -extern YYSTYPE yylval; -#define YYEMPTY -2 +typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE; +#define IDENTIFIER 258 +#define TYPENAME 259 +#define SELFNAME 260 +#define PFUNCNAME 261 +#define SCSPEC 262 +#define TYPESPEC 263 +#define CV_QUALIFIER 264 +#define CONSTANT 265 +#define STRING 266 +#define ELLIPSIS 267 +#define SIZEOF 268 +#define ENUM 269 +#define IF 270 +#define ELSE 271 +#define WHILE 272 +#define DO 273 +#define FOR 274 +#define SWITCH 275 +#define CASE 276 +#define DEFAULT 277 +#define BREAK 278 +#define CONTINUE 279 +#define RETURN 280 +#define GOTO 281 +#define ASM_KEYWORD 282 +#define GCC_ASM_KEYWORD 283 +#define TYPEOF 284 +#define ALIGNOF 285 +#define SIGOF 286 +#define ATTRIBUTE 287 +#define EXTENSION 288 +#define LABEL 289 +#define REALPART 290 +#define IMAGPART 291 +#define AGGR 292 +#define VISSPEC 293 +#define DELETE 294 +#define NEW 295 +#define THIS 296 +#define OPERATOR 297 +#define CXX_TRUE 298 +#define CXX_FALSE 299 +#define NAMESPACE 300 +#define TYPENAME_KEYWORD 301 +#define USING 302 +#define LEFT_RIGHT 303 +#define TEMPLATE 304 +#define TYPEID 305 +#define DYNAMIC_CAST 306 +#define STATIC_CAST 307 +#define REINTERPRET_CAST 308 +#define CONST_CAST 309 +#define SCOPE 310 +#define EMPTY 311 +#define PTYPENAME 312 +#define NSNAME 313 +#define THROW 314 +#define ASSIGN 315 +#define OROR 316 +#define ANDAND 317 +#define MIN_MAX 318 +#define EQCOMPARE 319 +#define ARITHCOMPARE 320 +#define LSHIFT 321 +#define RSHIFT 322 +#define POINTSAT_STAR 323 +#define DOT_STAR 324 +#define UNARY 325 +#define PLUSPLUS 326 +#define MINUSMINUS 327 +#define HYPERUNARY 328 +#define PAREN_STAR_PAREN 329 +#define POINTSAT 330 +#define TRY 331 +#define CATCH 332 +#define TYPENAME_ELLIPSIS 333 +#define PRE_PARSED_FUNCTION_DECL 334 +#define EXTERN_LANG_STRING 335 +#define ALL 336 +#define PRE_PARSED_CLASS_DECL 337 +#define DEFARG 338 +#define DEFARG_MARKER 339 +#define TYPENAME_DEFN 340 +#define IDENTIFIER_DEFN 341 +#define PTYPENAME_DEFN 342 +#define END_OF_LINE 343 +#define END_OF_SAVED_INPUT 344 + + +extern YYSTYPE yylval; +#define YYEMPTY -2 diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 7d9d5db7a34..0941e0f2b99 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -1,5 +1,5 @@ /* YACC parser for C++ syntax. - Copyright (C) 1988, 89, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1988, 89, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -110,6 +110,9 @@ empty_parms () %token TYPENAME %token SELFNAME +/* A template function. */ +%token PFUNCNAME + /* Reserved words that specify storage class. yylval contains an IDENTIFIER_NODE which indicates which one. */ %token SCSPEC @@ -162,7 +165,7 @@ empty_parms () %nonassoc IF %nonassoc ELSE -%left IDENTIFIER TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD +%left IDENTIFIER PFUNCNAME TYPENAME SELFNAME PTYPENAME SCSPEC TYPESPEC CV_QUALIFIER ENUM AGGR ELLIPSIS TYPEOF SIGOF OPERATOR NSNAME TYPENAME_KEYWORD %left '{' ',' ';' @@ -193,6 +196,7 @@ empty_parms () %type unop %type identifier IDENTIFIER TYPENAME CONSTANT expr nonnull_exprlist +%type PFUNCNAME %type paren_expr_or_null nontrivial_exprlist SELFNAME %type expr_no_commas cast_expr unary_expr primary string STRING %type reserved_declspecs boolean.literal @@ -224,6 +228,7 @@ empty_parms () %type fcast_or_absdcl regcast_or_absdcl %type expr_or_declarator complex_notype_declarator %type notype_unqualified_id unqualified_id qualified_id +%type template_id object_template_id notype_template_declarator %type overqualified_id notype_qualified_id any_id %type complex_direct_notype_declarator functional_cast %type complex_parmlist parms_comma @@ -258,12 +263,12 @@ empty_parms () %type template_type template_arg_list template_arg %type condition xcond paren_cond_or_null %type type_name nested_name_specifier nested_type ptr_to_mem -%type complete_type_name notype_identifier +%type complete_type_name notype_identifier nonnested_type %type complex_type_name nested_name_specifier_1 %type nomods_initdecls nomods_initdcl0 %type new_initializer new_placement %type using_decl .poplevel - +%type typename_sub typename_sub0 typename_sub1 typename_sub2 /* in order to recognize aggr tags as defining and thus shadowing. */ %token TYPENAME_DEFN IDENTIFIER_DEFN PTYPENAME_DEFN %type named_class_head_sans_basetype_defn @@ -431,7 +436,8 @@ template_header: template_parm_list '>' { $$ = end_template_parm_list ($4); } | TEMPLATE '<' '>' - { $$ = NULL_TREE; } + { begin_specialization(); + $$ = NULL_TREE; } ; template_parm_list: @@ -483,10 +489,20 @@ template_parm: template_def: template_header extdef - { end_template_decl (); } + { + if ($1) + end_template_decl (); + else + end_specialization (); + } | template_header error %prec EMPTY - { end_template_decl (); } + { + if ($1) + end_template_decl (); + else + end_specialization (); + } ; datadef: @@ -701,8 +717,13 @@ fn.def2: { $$ = start_method (NULL_TREE, $$); goto rest_of_mdef; } | template_header fn.def2 { - end_template_decl (); - if ($2 && DECL_TEMPLATE_INFO ($2)) + if ($1) + end_template_decl (); + else + end_specialization (); + + if ($2 && DECL_TEMPLATE_INFO ($2) + && !DECL_TEMPLATE_SPECIALIZATION ($2)) { $$ = DECL_TI_TEMPLATE ($2); check_member_template ($$); @@ -742,7 +763,7 @@ base_init: error ("no base initializers given following ':'"); setup_vtbl_ptr (); /* Always keep the BLOCK node associated with the outermost - pair of curley braces of a function. These are needed + pair of curly braces of a function. These are needed for correct operation of dwarfout.c. */ keep_next_level (); } @@ -794,19 +815,16 @@ member_init: { expand_member_init (current_class_ref, $1, $3); } | notype_identifier LEFT_RIGHT { expand_member_init (current_class_ref, $1, void_type_node); } - | complete_type_name '(' nonnull_exprlist ')' + | nonnested_type '(' nonnull_exprlist ')' { expand_member_init (current_class_ref, $1, $3); } - | complete_type_name LEFT_RIGHT + | nonnested_type LEFT_RIGHT { expand_member_init (current_class_ref, $1, void_type_node); } - /* GNU extension */ - | notype_qualified_id '(' nonnull_exprlist ')' - { - do_member_init (OP0 ($1), OP1 ($1), $3); - } - | notype_qualified_id LEFT_RIGHT - { - do_member_init (OP0 ($1), OP1 ($1), void_type_node); - } + | typename_sub '(' nonnull_exprlist ')' + { expand_member_init (current_class_ref, TYPE_MAIN_DECL ($1), + $3); } + | typename_sub LEFT_RIGHT + { expand_member_init (current_class_ref, TYPE_MAIN_DECL ($1), + void_type_node); } ; identifier: @@ -1031,20 +1049,20 @@ already_scoped_stmt: nontrivial_exprlist: expr_no_commas ',' expr_no_commas - { $$ = tree_cons (NULL_TREE, $$, - build_tree_list (NULL_TREE, $3)); } + { $$ = expr_tree_cons (NULL_TREE, $$, + build_expr_list (NULL_TREE, $3)); } | expr_no_commas ',' error - { $$ = tree_cons (NULL_TREE, $$, - build_tree_list (NULL_TREE, error_mark_node)); } + { $$ = expr_tree_cons (NULL_TREE, $$, + build_expr_list (NULL_TREE, error_mark_node)); } | nontrivial_exprlist ',' expr_no_commas - { chainon ($$, build_tree_list (NULL_TREE, $3)); } + { chainon ($$, build_expr_list (NULL_TREE, $3)); } | nontrivial_exprlist ',' error - { chainon ($$, build_tree_list (NULL_TREE, error_mark_node)); } + { chainon ($$, build_expr_list (NULL_TREE, error_mark_node)); } ; nonnull_exprlist: expr_no_commas - { $$ = build_tree_list (NULL_TREE, $$); } + { $$ = build_expr_list (NULL_TREE, $$); } | nontrivial_exprlist ; @@ -1070,6 +1088,8 @@ unary_expr: /* Refer to the address of a label as a pointer. */ | ANDAND identifier { tree label = lookup_label ($2); + if (pedantic) + pedwarn ("ANSI C++ forbids `&&'"); if (label == NULL_TREE) $$ = null_pointer_node; else @@ -1266,12 +1286,35 @@ expr_no_commas: notype_unqualified_id: '~' see_typename identifier { $$ = build_parse_node (BIT_NOT_EXPR, $3); } + | template_id | operator_name | IDENTIFIER | PTYPENAME | NSNAME %prec EMPTY ; +template_id: + PFUNCNAME '<' template_arg_list template_close_bracket + { $$ = lookup_template_function ($1, $3); } + | PFUNCNAME '<' template_close_bracket + { $$ = lookup_template_function ($1, NULL_TREE); } + | operator_name '<' template_arg_list template_close_bracket + { $$ = lookup_template_function + (do_identifier ($1, 1), $3); } + | operator_name '<' template_close_bracket + { $$ = lookup_template_function + (do_identifier ($1, 1), NULL_TREE); } + ; + +object_template_id: + TEMPLATE identifier '<' template_arg_list template_close_bracket + { $$ = lookup_template_function ($2, $4); } + | TEMPLATE PFUNCNAME '<' template_arg_list template_close_bracket + { $$ = lookup_template_function (DECL_NAME ($2), $4); } + | TEMPLATE operator_name '<' template_arg_list template_close_bracket + { $$ = lookup_template_function (DECL_NAME ($2), $4); } + ; + unqualified_id: notype_unqualified_id | TYPENAME @@ -1288,9 +1331,17 @@ expr_or_declarator: { $$ = $2; } ; +notype_template_declarator: + IDENTIFIER '<' template_arg_list template_close_bracket + { $$ = lookup_template_function ($1, $3); } + | NSNAME '<' template_arg_list template_close_bracket + { $$ = lookup_template_function ($1, $3); } + ; + direct_notype_declarator: complex_direct_notype_declarator | notype_unqualified_id + | notype_template_declarator | '(' expr_or_declarator ')' { $$ = finish_decl_parsing ($2); } ; @@ -1300,7 +1351,7 @@ primary: { if (TREE_CODE ($$) == BIT_NOT_EXPR) $$ = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND ($$, 0)); - else + else if (TREE_CODE ($$) != TEMPLATE_ID_EXPR) $$ = do_identifier ($$, 1); } | CONSTANT @@ -1503,6 +1554,20 @@ primary: NULL_TREE, NULL_TREE); else $$ = build_member_call (OP0 ($$), OP1 ($$), NULL_TREE); } + | object object_template_id %prec UNARY + { + $$ = build_x_component_ref ($$, $2, NULL_TREE, 1); + } + | object object_template_id '(' nonnull_exprlist ')' + { + $$ = build_method_call ($1, $2, $4, + NULL_TREE, LOOKUP_NORMAL); + } + | object object_template_id LEFT_RIGHT + { + $$ = build_method_call ($1, $2, NULL_TREE, + NULL_TREE, LOOKUP_NORMAL); + } | object unqualified_id %prec UNARY { $$ = build_x_component_ref ($$, $2, NULL_TREE, 1); } | object overqualified_id %prec UNARY @@ -1659,7 +1724,7 @@ nodecls: store_parm_decls (); setup_vtbl_ptr (); /* Always keep the BLOCK node associated with the outermost - pair of curley braces of a function. These are needed + pair of curly braces of a function. These are needed for correct operation of dwarfout.c. */ keep_next_level (); } @@ -2106,16 +2171,16 @@ initlist: init { $$ = build_tree_list (NULL_TREE, $$); } | initlist ',' init - { $$ = tree_cons (NULL_TREE, $3, $$); } + { $$ = expr_tree_cons (NULL_TREE, $3, $$); } /* These are for labeled elements. */ | '[' expr_no_commas ']' init - { $$ = build_tree_list ($2, $4); } + { $$ = build_expr_list ($2, $4); } | initlist ',' CASE expr_no_commas ':' init - { $$ = tree_cons ($4, $6, $$); } + { $$ = expr_tree_cons ($4, $6, $$); } | identifier ':' init - { $$ = build_tree_list ($$, $3); } + { $$ = build_expr_list ($$, $3); } | initlist ',' identifier ':' init - { $$ = tree_cons ($3, $5, $$); } + { $$ = expr_tree_cons ($3, $5, $$); } ; fn.defpen: @@ -2190,14 +2255,13 @@ structsp: | ENUM complex_type_name { $$.t = xref_tag (enum_type_node, $2, NULL_TREE, 1); $$.new_type_flag = 0; } - | TYPENAME_KEYWORD nested_name_specifier identifier - { $$.t = make_typename_type ($2, $3); - $$.new_type_flag = 0; } - | TYPENAME_KEYWORD global_scope nested_name_specifier identifier - { $$.t = make_typename_type ($3, $4); + | TYPENAME_KEYWORD typename_sub + { $$.t = $2; $$.new_type_flag = 0; } /* C++ extensions, merged with C to avoid shift/reduce conflicts */ - | class_head left_curly opt.component_decl_list '}' maybe_attribute + | class_head left_curly + { reset_specialization(); } + opt.component_decl_list '}' maybe_attribute { int semi; tree id; @@ -2220,7 +2284,7 @@ structsp: ; else { - $$ = finish_struct ($1, $3, $5, semi); + $$ = finish_struct ($1, $4, $6, semi); if (semi) note_got_semicolon ($$); } @@ -2239,7 +2303,7 @@ structsp: } pending_inlines { - $$.t = $6; + $$.t = $7; $$.new_type_flag = 1; if (current_class_type == NULL_TREE) clear_inline_text_obstack (); @@ -2437,11 +2501,9 @@ base_class: ; base_class.1: - complete_type_name - | TYPENAME_KEYWORD nested_name_specifier identifier - { $$ = TYPE_MAIN_DECL (make_typename_type ($2, $3)); } - | TYPENAME_KEYWORD global_scope nested_name_specifier identifier - { $$ = TYPE_MAIN_DECL (make_typename_type ($3, $4)); } + typename_sub + { $$ = TYPE_MAIN_DECL ($1); } + | nonnested_type | SIGOF '(' expr ')' { if (current_aggr == signature_type_node) @@ -2729,8 +2791,13 @@ component_decl_1: { $$ = do_class_using_decl ($1); } | template_header component_decl_1 { - end_template_decl (); - if ($2 && DECL_TEMPLATE_INFO ($2)) + if ($1) + end_template_decl (); + else + end_specialization (); + + if ($2 && DECL_TEMPLATE_INFO ($2) + && !DECL_TEMPLATE_SPECIALIZATION ($2)) { $$ = DECL_TI_TEMPLATE ($2); check_member_template ($$); @@ -2945,7 +3012,7 @@ after_type_declarator: | direct_after_type_declarator ; -complete_type_name: +nonnested_type: type_name %prec EMPTY { if (TREE_CODE ($1) == IDENTIFIER_NODE) @@ -2974,6 +3041,10 @@ complete_type_name: $$ = $2; got_scope = NULL_TREE; } + ; + +complete_type_name: + nonnested_type | nested_type | global_scope nested_type { $$ = $2; } @@ -3051,18 +3122,33 @@ complex_direct_notype_declarator: TREE_COMPLEXITY ($$) = current_class_depth; } } + | nested_name_specifier notype_template_declarator + { got_scope = NULL_TREE; + $$ = build_parse_node (SCOPE_REF, $1, $2); + if ($1 != current_class_type) + { + push_nested_class ($1, 3); + TREE_COMPLEXITY ($$) = current_class_depth; + } + } ; qualified_id: nested_name_specifier unqualified_id { got_scope = NULL_TREE; $$ = build_parse_node (SCOPE_REF, $$, $2); } + | nested_name_specifier object_template_id + { got_scope = NULL_TREE; + $$ = build_parse_node (SCOPE_REF, $1, $2); } ; notype_qualified_id: nested_name_specifier notype_unqualified_id { got_scope = NULL_TREE; $$ = build_parse_node (SCOPE_REF, $$, $2); } + | nested_name_specifier object_template_id + { got_scope = NULL_TREE; + $$ = build_parse_node (SCOPE_REF, $1, $2); } ; overqualified_id: @@ -3119,11 +3205,7 @@ nested_name_specifier_1: { if (TREE_CODE ($$) == IDENTIFIER_NODE) $$ = lastiddecl; - if (TREE_CODE ($$) == NAMESPACE_DECL - && DECL_NAME ($$) == get_identifier ("std")) - got_scope = void_type_node; - else - got_scope = $$; + got_scope = $$; } | template_type SCOPE { got_scope = $$ = complete_type (TREE_TYPE ($1)); } @@ -3139,6 +3221,66 @@ nested_name_specifier_1: { goto failed_scope; } */ ; +typename_sub: + typename_sub0 + | global_scope typename_sub0 + { $$ = $2; } + ; + +typename_sub0: + typename_sub1 identifier + { + if (TREE_CODE_CLASS (TREE_CODE ($1)) == 't') + $$ = make_typename_type ($1, $2); + else if (TREE_CODE ($2) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", $2); + else + $$ = $2; + } + ; + +typename_sub1: + typename_sub2 + { + if (TREE_CODE ($1) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", $1); + } + | typename_sub1 typename_sub2 + { + if (TREE_CODE_CLASS (TREE_CODE ($1)) == 't') + $$ = make_typename_type ($1, $2); + else if (TREE_CODE ($2) == IDENTIFIER_NODE) + cp_error ("`%T' is not a class or namespace", $2); + else + $$ = $2; + } + ; + +typename_sub2: + TYPENAME SCOPE + { + if (TREE_CODE ($1) != IDENTIFIER_NODE) + $$ = lastiddecl; + got_scope = $$ = complete_type (TREE_TYPE ($$)); + } + | SELFNAME SCOPE + { + if (TREE_CODE ($1) != IDENTIFIER_NODE) + $$ = lastiddecl; + got_scope = $$ = complete_type (TREE_TYPE ($$)); + } + | template_type SCOPE + { got_scope = $$ = complete_type (TREE_TYPE ($$)); } + | PTYPENAME SCOPE + | IDENTIFIER SCOPE + | NSNAME SCOPE + { + if (TREE_CODE ($$) == IDENTIFIER_NODE) + $$ = lastiddecl; + got_scope = $$; + } + ; + complex_type_name: global_scope type_name { diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 8df5038b9ab..49339b1b5a8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1,5 +1,5 @@ /* Handle parameterized types (templates) for GNU C++. - Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing. Rewritten by Jason Merrill (jason@cygnus.com). @@ -22,9 +22,6 @@ Boston, MA 02111-1307, USA. */ /* Known bugs or deficiencies include: - templates for class static data don't work (methods only), - duplicated method templates can crash the compiler, - interface/impl data is taken from file defining the template, all methods must be provided in header files; can't use a source file that contains only the method templates and "just win". */ @@ -63,6 +60,9 @@ static tree *maybe_template_tail = &maybe_templates; int minimal_parse_mode; +int processing_specialization; +static int template_header_count; + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @@ -78,6 +78,10 @@ static tree get_class_bindings PROTO((tree, tree, tree)); static tree coerce_template_parms PROTO((tree, tree, tree)); static tree tsubst_enum PROTO((tree, tree, int, tree *)); static tree add_to_template_args PROTO((tree, tree)); +static int type_unification_real PROTO((tree, tree *, tree, tree, int*, + int, int, int)); +static int processing_explicit_specialization PROTO((int)); +static void note_template_header PROTO((int)); /* Restore the template parameter context. */ @@ -146,13 +150,14 @@ is_member_template (t) if (TREE_CODE (t) != FUNCTION_DECL && !DECL_FUNCTION_TEMPLATE_P (t)) - /* Anything that isn't a template or a template functon is + /* Anything that isn't a template or a template function is certainly not a member template. */ return 0; - if (DECL_FUNCTION_MEMBER_P (t) || - (TREE_CODE (t) == TEMPLATE_DECL && - DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t)))) + if ((DECL_FUNCTION_MEMBER_P (t) + && !DECL_TEMPLATE_SPECIALIZATION (t)) + || (TREE_CODE (t) == TEMPLATE_DECL && + DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t)))) { tree tmpl = NULL_TREE; @@ -209,7 +214,7 @@ is_member_template (t) /* Return a new template argument vector which contains all of ARGS, but has as its innermost set of arguments the EXTRA_ARGS. */ -tree +static tree add_to_template_args (args, extra_args) tree args; tree extra_args; @@ -246,8 +251,388 @@ begin_template_parm_list () pushlevel (0); declare_pseudo_global_level (); ++processing_template_decl; + note_template_header (0); +} + + +/* We've just seen template <>. */ + +void +begin_specialization () +{ + note_template_header (1); +} + + +/* Called at then end of processing a declaration preceded by + template<>. */ + +void +end_specialization () +{ + reset_specialization (); +} + + +/* Any template <>'s that we have seen thus far are not referring to a + function specialization. */ + +void +reset_specialization () +{ + processing_specialization = 0; + template_header_count = 0; +} + + +/* We've just seen a template header. If SPECIALIZATION is non-zero, + it was of the form template <>. */ + +static void +note_template_header (specialization) + int specialization; +{ + processing_specialization = specialization; + template_header_count++; +} + + +/* Returns non-zero iff a declarator, in which the number of template + types that appeared was TEMPLATE_COUNT, is an explicit + specialization. */ + +static int +processing_explicit_specialization (template_count) + int template_count; +{ + /* A function declaration is an explicit specialization of a member + template if all of the following conditions hold: + + o There was a template <...> preceding the declaration. + o The last template <...> was in fact template <>. + o The number of template <...>'s preceding the declaration, less + the number of template classes with arguments specified used to + qualify the function name, is 1. + + For example: + + template <> void S::foo(); + template template <> void S::foo(); + template <> struct S { ... template <> void foo(); } + + The first of these is not a specialization of S::foo() (it + is instead a specialization of S::foo), while the next two are + specializations of member template functions. */ + + return processing_specialization + && template_header_count > template_count; } +/* Returns the template function specialized by TEMPLATE_ID, or + NULL_TREE if there is none. + + The TEMPLATE_ID is a TEMPLATE_ID_EXPR. The TYPE is + the type it has been declared to have. Return the TEMPLATE_DECL + that is being specialized, and put the specialization arguments in + *TARGS. If no appropriate specialization can be found, NULL_TREE is + returned, and *TARGS is assigned NULL_TREE. If complain is + non-zero, error messages are printed where appropriate. */ + +tree +determine_explicit_specialization (template_id, type, targs_out, + need_member_template, + complain) + tree template_id; + tree type; + tree* targs_out; + int need_member_template; + int complain; +{ + int i; + int overloaded; + tree fns; + tree matching_fns = NULL_TREE; + tree name = NULL_TREE; + tree result; + tree fn; + + my_friendly_assert (TREE_CODE (template_id) == TEMPLATE_ID_EXPR, + 0); + + fns = TREE_OPERAND (template_id, 0); + + overloaded = fns != NULL_TREE && really_overloaded_fn (fns); + + for (fn = (fns != NULL_TREE) ? get_first_fn (fns) : NULL_TREE; + fn != NULL_TREE; + fn = overloaded ? DECL_CHAIN (fn) : NULL_TREE) + { + int dummy = 0; + tree targs; + + if (name == NULL_TREE) + name = DECL_NAME (fn); + + if (TREE_CODE (fn) != TEMPLATE_DECL + || (need_member_template && !is_member_template (fn))) + continue; + + if (list_length (TREE_OPERAND (template_id, 1)) > DECL_NTPARMS (fn)) + continue; + + targs = make_scratch_vec (DECL_NTPARMS (fn)); + + /* We allow incomplete unification here, because we are going to + check all the functions. */ + i = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (fn), + &TREE_VEC_ELT (targs, 0), + type + ? TYPE_ARG_TYPES (TREE_TYPE (fn)) : NULL_TREE, + type ? TYPE_ARG_TYPES (type) : NULL_TREE, + TREE_OPERAND (template_id, 1), + &dummy, 1, 1); + + if (i == 0) + { + /* Unification was successful. See if the return types + match. */ + if (type != NULL_TREE) + { + tree tmpl_return_type = tsubst (TREE_TYPE (TREE_TYPE (fn)), + targs, + DECL_NTPARMS (fn), + NULL_TREE); + + if (tmpl_return_type != TREE_TYPE (type)) + { + /* Always complain about this. With ambiguity, some + other context, might resolve things. But, a + non-matching return type will always be a + problem. */ + cp_error ("Return type of explicit specialization of"); + cp_error ("`%D' is `%T', but should be `%T'.", + fn, TREE_TYPE (type), tmpl_return_type); + *targs_out = NULL_TREE; + return NULL_TREE; + } + } + + matching_fns = scratch_tree_cons (fn, targs, matching_fns); + } + } + + if (matching_fns == NULL_TREE) + { + if (complain) + cp_error ("Specialization of `%s' does not match any template declaration.", + IDENTIFIER_POINTER (name)); + *targs_out = NULL_TREE; + return NULL_TREE; + } + + if (TREE_CHAIN (matching_fns) != NULL_TREE) + { + if (complain) + { + tree fn; + + cp_error ("Ambiguous explicit specialization. Candidates are:"); + for (fn = matching_fns; fn != NULL_TREE; fn = TREE_CHAIN (fn)) + cp_error (" %D", TREE_PURPOSE (fn)); + } + + *targs_out = NULL_TREE; + return NULL_TREE; + } + + /* We have one, and exactly one, match. */ + *targs_out = TREE_VALUE (matching_fns); + return TREE_PURPOSE (matching_fns); +} + + +/* Check to see if the function just declared, as indicated in + DECLARATOR, and in DECL, is a specialization. Check that the + specialization is OK. If FLAGS == 1, we are being called by + finish_struct_methods. If FLAGS == 2, we are being called by + grokfndecl, and the function has a definition, or is a friend. If + FLAGS == 3, this is a friend declaration. + Returns 0 if the decl is not an explicit specialization or + instantiation, 1 if it is an explicit specialization, and 2 if it + is an explicit instantiation. */ + +int +check_explicit_specialization (declarator, decl, template_count, flags) + tree declarator; + tree decl; + int template_count; + int flags; +{ + int finish_member = flags == 1; + int have_def = flags == 2; + int is_friend = flags == 3; + + if (processing_explicit_specialization (template_count) + || finish_member + || TREE_CODE (declarator) == TEMPLATE_ID_EXPR) + { + tree tmpl = NULL_TREE; + tree dname = DECL_NAME (decl); + tree ctype = DECL_CLASS_CONTEXT (decl); + tree targs; + + /* We've come across a declarator that looks like: U f(A1, A2, ..). This is an explicit template + specialization. Check that: + + o The explicitly specified parameters together with those + that can be deduced by template argument deduction + uniquely determine a particular specialization. + + See [temp.expl.spec]. */ + + if (!finish_member + && TREE_CODE (declarator) == TEMPLATE_ID_EXPR + && !processing_explicit_specialization (template_count) + && !is_friend) + { + if (!have_def) + /* This is not an explicit specialization. It must be + an explicit instantiation. */ + return 2; + else if (pedantic) + pedwarn ("Explicit specialization not preceded by `template <>'"); + } + + if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR) + { + tree fns; + + my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE, + 0); + if (!ctype) + fns = IDENTIFIER_GLOBAL_VALUE (dname); + else + fns = dname; + + declarator = lookup_template_function (fns, NULL_TREE); + } + + if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR) + { + /* A friend declaration. We can't do much, because we don't + know what this resolves to, yet. */ + my_friendly_assert (is_friend != 0, 0); + SET_DECL_IMPLICIT_INSTANTIATION (decl); + return 1; + } + + if (ctype + && TREE_CODE (TREE_OPERAND (declarator, 0)) == IDENTIFIER_NODE) + { + tree fns; + + if (TYPE_BEING_DEFINED (ctype) && !finish_member) + { + /* Since finish_struct_1 has not been called yet, we + can't call lookup_fnfields. We note that this + template is a specialization, and proceed, letting + finish_struct_methods fix this up later. */ + SET_DECL_TEMPLATE_SPECIALIZATION (decl); + DECL_TEMPLATE_INFO (decl) + = perm_tree_cons (NULL_TREE, + TREE_OPERAND (declarator, 1), + NULL_TREE); + return 1; + } + + fns = lookup_fnfields (TYPE_BINFO (ctype), + TREE_OPERAND (declarator, 0), + 1); + + if (fns == NULL_TREE) + { + cp_error ("No member template `%s' declared in `%T'", + IDENTIFIER_POINTER (TREE_OPERAND (declarator, + 0)), + ctype); + return 1; + } + else + TREE_OPERAND (declarator, 0) = fns; + } + + tmpl = + determine_explicit_specialization + (declarator, TREE_TYPE (decl), &targs, + TREE_CODE (decl) == TEMPLATE_DECL, 1); + + if (tmpl) + { + /* Mangle the function name appropriately. */ + if (name_mangling_version >= 1) + { + tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl)); + + if (ctype + && TREE_CODE (TREE_TYPE (tmpl)) == FUNCTION_TYPE) + arg_types = + hash_tree_chain (build_pointer_type (ctype), + arg_types); + + DECL_ASSEMBLER_NAME (decl) + = build_template_decl_overload + (DECL_NAME (decl), + arg_types, + TREE_TYPE (TREE_TYPE (tmpl)), + DECL_INNERMOST_TEMPLATE_PARMS (tmpl), + targs, ctype != NULL_TREE); + } + + if (is_friend && !have_def) + { + /* This is not really a declaration of a specialization. + It's just the name of an instantiation. But, it's not + a request for an instantiation, either. */ + SET_DECL_IMPLICIT_INSTANTIATION (decl); + DECL_TEMPLATE_INFO (decl) + = perm_tree_cons (tmpl, targs, NULL_TREE); + return 1; + } + + /* This function declaration is a template specialization. + Record that fact. */ + SET_DECL_TEMPLATE_SPECIALIZATION (decl); + DECL_TEMPLATE_SPECIALIZATIONS (tmpl) + = perm_tree_cons (targs, decl, + DECL_TEMPLATE_SPECIALIZATIONS + (tmpl)); + /* If DECL_TI_TEMPLATE (decl), the decl is an + instantiation of a specialization of a member template. + (In other words, there was a member template, in a + class template. That member template was specialized. + We then instantiated the class, so there is now an + instance of that specialization.) + + According to the CD2, + + 14.7.3.13 [tmpl.expl.spec] + + A specialization of a member function template or + member class template of a non-specialized class + template is itself a template. + + So, we just leave the template info alone in this case. */ + if (!(DECL_TEMPLATE_INFO (decl) && DECL_TI_TEMPLATE (decl))) + DECL_TEMPLATE_INFO (decl) + = perm_tree_cons (tmpl, targs, NULL_TREE); + return 1; + } + } + + return 0; +} + /* Process information from new template parameter NEXT and append it to the LIST being built. */ @@ -358,6 +743,8 @@ end_template_parm_list (parms) void end_template_decl () { + reset_specialization (); + if (! processing_template_decl) return; @@ -465,6 +852,15 @@ push_template_decl (decl) DECL_CLASS_CONTEXT (tmpl) = DECL_CLASS_CONTEXT (decl); DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl); + + if (DECL_TEMPLATE_SPECIALIZATION (decl)) + { + /* A specialization of a member template of a template + class. */ + SET_DECL_TEMPLATE_SPECIALIZATION (tmpl); + DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl); + DECL_TEMPLATE_INFO (decl) = NULL_TREE; + } } } else @@ -713,7 +1109,7 @@ coerce_template_parms (parms, arglist, in_decl) else if (TREE_CODE (a) != VAR_DECL && TREE_CODE (a) != FUNCTION_DECL) goto bad; - else if (! DECL_PUBLIC (a)) + else if (! TREE_PUBLIC (a)) { cp_error ("address of non-extern `%E' cannot be used as template argument", a); val = error_mark_node; @@ -749,6 +1145,9 @@ comp_template_args (oldargs, newargs) { int i; + if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs)) + return 0; + for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i) { tree nt = TREE_VEC_ELT (newargs, i); @@ -895,6 +1294,35 @@ add_pending_template (d) TI_PENDING_TEMPLATE_FLAG (ti) = 1; } + +/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which + may be either a _DECL or an overloaded function or an + IDENTIFIER_NODE), and ARGLIST. */ + +tree +lookup_template_function (fns, arglist) + tree fns, arglist; +{ + if (fns == NULL_TREE) + { + cp_error ("non-template used as template"); + return error_mark_node; + } + + if (arglist != NULL_TREE && !TREE_PERMANENT (arglist)) + { + push_obstacks (&permanent_obstack, &permanent_obstack); + arglist = copy_list (arglist); + pop_obstacks (); + } + + return build_min (TEMPLATE_ID_EXPR, + TREE_TYPE (fns) + ? TREE_TYPE (fns) : unknown_type_node, + fns, arglist); +} + + /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of parameters, find the desired type. @@ -1028,7 +1456,7 @@ lookup_template_class (d1, arglist, in_decl) /* We need to set this again after CLASSTYPE_TEMPLATE_INFO is set up. */ DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) = id; - if (! uses_template_parms (arglist)) + /* if (! uses_template_parms (arglist)) */ DECL_ASSEMBLER_NAME (TYPE_MAIN_DECL (t)) = get_identifier (build_overload_name (t, 1, 1)); @@ -1746,6 +2174,7 @@ tsubst (t, args, nargs, in_decl) tree decl = DECL_TEMPLATE_RESULT (t); tree new_decl; tree parms; + tree spec; int i; /* We might already have an instance of this template. */ @@ -1769,10 +2198,10 @@ tsubst (t, args, nargs, in_decl) DECL_TEMPLATE_INFO (tmpl) = build_tree_list (t, args); new_decl = tsubst (decl, args, nargs, in_decl); DECL_RESULT (tmpl) = new_decl; - DECL_INITIAL (new_decl) = DECL_INITIAL (decl); DECL_TI_TEMPLATE (new_decl) = tmpl; TREE_TYPE (tmpl) = TREE_TYPE (new_decl); - DECL_TEMPLATE_INSTANTIATIONS(tmpl) = NULL_TREE; + DECL_TEMPLATE_INSTANTIATIONS (tmpl) = NULL_TREE; + SET_DECL_IMPLICIT_INSTANTIATION (tmpl); /* The template parameters for this new template are all the template parameters for the old template, except the @@ -1788,13 +2217,15 @@ tsubst (t, args, nargs, in_decl) DECL_TEMPLATE_INSTANTIATIONS (t) = perm_tree_cons (NULL_TREE, tmpl, DECL_TEMPLATE_INSTANTIATIONS (t)); + + DECL_TEMPLATE_SPECIALIZATIONS (tmpl) = NULL_TREE; return tmpl; } case FUNCTION_DECL: { tree r = NULL_TREE; - tree arg_types, ctx; + tree ctx; int member; @@ -1857,12 +2288,6 @@ tsubst (t, args, nargs, in_decl) DECL_NAME (r) = build_typename_overload (TREE_TYPE (type)); } - arg_types = TYPE_VALUES (type); - - if (member && TREE_CODE (type) == FUNCTION_TYPE) - arg_types = hash_tree_chain - (build_pointer_type (DECL_CONTEXT (r)), arg_types); - if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (t))) { char *buf, *dbuf = build_overload_name (ctx, 1, 1); @@ -1874,9 +2299,79 @@ tsubst (t, args, nargs, in_decl) strcat (buf, dbuf); DECL_ASSEMBLER_NAME (r) = get_identifier (buf); } - else - DECL_ASSEMBLER_NAME (r) - = build_decl_overload (DECL_NAME (r), arg_types, member); + else + { + /* Instantiations of template functions must be mangled + specially, in order to conform to 14.5.5.1 + [temp.over.link]. We use in_decl below rather than + DECL_TI_TEMPLATE (r) because the latter is set to + NULL_TREE in instantiate_decl. */ + tree tmpl; + tree arg_types; + + if (DECL_TEMPLATE_INFO (r)) + tmpl = DECL_TI_TEMPLATE (r); + else + tmpl = in_decl; + + /* tmpl will be NULL if this is a specialization of a + member template of a template class. */ + if (name_mangling_version < 1 + || tmpl == NULL_TREE + || (member && !is_member_template (tmpl) + && !DECL_TEMPLATE_INFO (tmpl))) + { + arg_types = TYPE_ARG_TYPES (type); + if (member && TREE_CODE (type) == FUNCTION_TYPE) + arg_types = hash_tree_chain + (build_pointer_type (DECL_CONTEXT (r)), + arg_types); + + DECL_ASSEMBLER_NAME (r) + = build_decl_overload (DECL_NAME (r), arg_types, + member); + } + else + { + /* We pass the outermost template parameters to + build_template_decl_overload since the innermost + template parameters are still just template + parameters; there are no corresponding substitution + arguments. */ + /* FIXME The messed up thing here is that we get here with + full args and only one level of parms. This is necessary + because when we partially instantiate a member template, + even though there's really only one level of parms left + we re-use the parms from the original template, which + have level 2. When this is fixed we can remove the + add_to_template_args from instantiate_template. */ + tree tparms = DECL_TEMPLATE_PARMS (tmpl); + + while (tparms && TREE_CHAIN (tparms) != NULL_TREE) + tparms = TREE_CHAIN (tparms); + + my_friendly_assert (tparms != NULL_TREE + && TREE_CODE (tparms) == TREE_LIST, + 0); + tparms = TREE_VALUE (tparms); + + arg_types = TYPE_ARG_TYPES (TREE_TYPE (tmpl)); + if (member && TREE_CODE (type) == FUNCTION_TYPE) + arg_types = hash_tree_chain + (build_pointer_type (DECL_CONTEXT (r)), + arg_types); + + DECL_ASSEMBLER_NAME (r) + = build_template_decl_overload + (DECL_NAME (r), arg_types, + TREE_TYPE (TREE_TYPE (tmpl)), + tparms, + TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC + ? TREE_VEC_ELT (args, TREE_VEC_LENGTH (args) - 1) : + args, + member); + } + } DECL_RTL (r) = 0; make_decl_rtl (r, NULL_PTR, 1); @@ -2344,7 +2839,7 @@ do_poplevel () saved_warn_unused = warn_unused; warn_unused = 0; } - expand_end_bindings (getdecls (), kept_level_p (), 1); + expand_end_bindings (getdecls (), kept_level_p (), 0); if (processing_template_decl) warn_unused = saved_warn_unused; t = poplevel (kept_level_p (), 1, 0); @@ -2531,6 +3026,14 @@ tsubst_copy (t, args, nargs, in_decl) return r; } + case TEMPLATE_ID_EXPR: + { + tree r = lookup_template_function + (tsubst_copy (TREE_OPERAND (t, 0), args, nargs, in_decl), + tsubst_copy (TREE_OPERAND (t, 1), args, nargs, in_decl)); + return r; + } + case TREE_LIST: { tree purpose, value, chain; @@ -2897,11 +3400,24 @@ instantiate_template (tmpl, targ_ptr) struct obstack *old_fmp_obstack; extern struct obstack *function_maybepermanent_obstack; + my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283); + + if (DECL_FUNCTION_TEMPLATE_P (tmpl)) + { + tree specs; + + /* Check to see if there is a matching specialization. */ + for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); + specs != NULL_TREE; + specs = TREE_CHAIN (specs)) + if (comp_template_args (TREE_PURPOSE (specs), targ_ptr)) + return TREE_VALUE (specs); + } + push_obstacks (&permanent_obstack, &permanent_obstack); old_fmp_obstack = function_maybepermanent_obstack; function_maybepermanent_obstack = &permanent_obstack; - my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283); len = DECL_NTPARMS (tmpl); i = len; @@ -2921,6 +3437,7 @@ instantiate_template (tmpl, targ_ptr) } TREE_VEC_ELT (targ_ptr, i) = copy_to_permanent (t); } + targ_ptr = copy_to_permanent (targ_ptr); if (DECL_TEMPLATE_INFO (tmpl) && DECL_TI_ARGS (tmpl)) targ_ptr = add_to_template_args (DECL_TI_ARGS (tmpl), targ_ptr); @@ -2956,12 +3473,12 @@ overload_template_name (type) pushdecl_class_level (decl); } -/* Like type_unfication but designed specially to handle conversion +/* Like type_unification but designed specially to handle conversion operators. */ int -fn_type_unification (fn, targs, args, return_type, strict) - tree fn, targs, args, return_type; +fn_type_unification (fn, explicit_targs, targs, args, return_type, strict) + tree fn, explicit_targs, targs, args, return_type; int strict; { int i, dummy = 0; @@ -2974,10 +3491,10 @@ fn_type_unification (fn, targs, args, return_type, strict) { /* This is a template conversion operator. Use the return types as well as the argument types. */ - fn_arg_types = tree_cons (NULL_TREE, + fn_arg_types = scratch_tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (fn)), fn_arg_types); - decl_arg_types = tree_cons (NULL_TREE, + decl_arg_types = scratch_tree_cons (NULL_TREE, return_type, decl_arg_types); } @@ -2986,7 +3503,8 @@ fn_type_unification (fn, targs, args, return_type, strict) &TREE_VEC_ELT (targs, 0), fn_arg_types, decl_arg_types, - &dummy, 0, strict); + explicit_targs, + &dummy, strict, 0); return i; } @@ -3016,25 +3534,54 @@ fn_type_unification (fn, targs, args, return_type, strict) addresses, explicit instantiation, and more_specialized). */ int -type_unification (tparms, targs, parms, args, nsubsts, subr, strict) +type_unification (tparms, targs, parms, args, targs_in, nsubsts, + strict, allow_incomplete) + tree tparms, *targs, parms, args, targs_in; + int *nsubsts, strict, allow_incomplete; +{ + int ntparms = TREE_VEC_LENGTH (tparms); + tree t; + int i; + int r; + + bzero ((char *) targs, sizeof (tree) * ntparms); + + /* Insert any explicit template arguments. They are encoded as the + operands of NOP_EXPRs so that unify can tell that they are + explicit arguments. */ + for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i) + targs[i] = build1 (NOP_EXPR, NULL_TREE, TREE_VALUE (t)); + + r = type_unification_real (tparms, targs, parms, args, nsubsts, 0, + strict, allow_incomplete); + + for (i = 0, t = targs_in; t != NULL_TREE; t = TREE_CHAIN (t), ++i) + if (TREE_CODE (targs[i]) == NOP_EXPR) + targs[i] = TREE_OPERAND (targs[i], 0); + + return r; +} + + +static int +type_unification_real (tparms, targs, parms, args, nsubsts, subr, + strict, allow_incomplete) tree tparms, *targs, parms, args; - int *nsubsts, subr, strict; + int *nsubsts, subr, strict, allow_incomplete; { tree parm, arg; int i; int ntparms = TREE_VEC_LENGTH (tparms); my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289); - my_friendly_assert (TREE_CODE (parms) == TREE_LIST, 290); + my_friendly_assert (parms == NULL_TREE + || TREE_CODE (parms) == TREE_LIST, 290); /* ARGS could be NULL (via a call from parse.y to build_x_function_call). */ if (args) my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291); my_friendly_assert (ntparms > 0, 292); - if (!subr) - bzero ((char *) targs, sizeof (tree) * ntparms); - while (parms && parms != void_list_node && args @@ -3106,11 +3653,13 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict) nsubsts = 0; ntparms = DECL_NTPARMS (arg); targs = (tree *) alloca (sizeof (tree) * ntparms); - parm = tree_cons (NULL_TREE, parm, NULL_TREE); - return type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), - targs, - TYPE_ARG_TYPES (TREE_TYPE (arg)), - parm, &nsubsts, 0, strict); + parm = expr_tree_cons (NULL_TREE, parm, NULL_TREE); + return + type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), + targs, + TYPE_ARG_TYPES (TREE_TYPE (arg)), + parm, NULL_TREE, &nsubsts, strict, + allow_incomplete); } arg = TREE_TYPE (arg); } @@ -3150,7 +3699,8 @@ type_unification (tparms, targs, parms, args, nsubsts, subr, strict) for (i = 0; i < ntparms; i++) if (!targs[i]) { - error ("incomplete type unification"); + if (!allow_incomplete) + error ("incomplete type unification"); return 2; } return 0; @@ -3190,6 +3740,17 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict) case TEMPLATE_TYPE_PARM: (*nsubsts)++; idx = TEMPLATE_TYPE_IDX (parm); + /* Check for mixed types and values. */ + if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL) + return 1; + + if (!strict && targs[idx] != NULL_TREE && + TREE_CODE (targs[idx]) == NOP_EXPR) + /* An explicit template argument. Don't even try to match + here; the overload resolution code will manage check to + see whether the call is legal. */ + return 0; + if (strict && (TYPE_READONLY (arg) < TYPE_READONLY (parm) || TYPE_VOLATILE (arg) < TYPE_VOLATILE (parm))) return 1; @@ -3209,13 +3770,13 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict) } #endif /* Simple cases: Value already set, does match or doesn't. */ - if (targs[idx] == arg) + if (targs[idx] == arg + || (targs[idx] + && TREE_CODE (targs[idx]) == NOP_EXPR + && TREE_OPERAND (targs[idx], 0) == arg)) return 0; else if (targs[idx]) return 1; - /* Check for mixed types and values. */ - if (TREE_CODE (TREE_VALUE (TREE_VEC_ELT (tparms, idx))) != TYPE_DECL) - return 1; targs[idx] = arg; return 0; case TEMPLATE_CONST_PARM: @@ -3363,8 +3924,9 @@ unify (tparms, targs, ntparms, parm, arg, nsubsts, strict) if (unify (tparms, targs, ntparms, TREE_TYPE (parm), TREE_TYPE (arg), nsubsts, strict)) return 1; - return type_unification (tparms, targs, TYPE_ARG_TYPES (parm), - TYPE_ARG_TYPES (arg), nsubsts, 1, strict); + return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm), + TYPE_ARG_TYPES (arg), nsubsts, 1, + strict, 0); case OFFSET_TYPE: if (TREE_CODE (arg) != OFFSET_TYPE) @@ -3467,10 +4029,10 @@ get_bindings (fn, decl) tree fn, decl; { int ntparms = DECL_NTPARMS (fn); - tree targs = make_tree_vec (ntparms); + tree targs = make_scratch_vec (ntparms); int i; - i = fn_type_unification (fn, targs, + i = fn_type_unification (fn, NULL_TREE, targs, TYPE_ARG_TYPES (TREE_TYPE (decl)), TREE_TYPE (TREE_TYPE (decl)), 1); @@ -3665,24 +4227,14 @@ do_decl_instantiation (declspecs, declarator, storage) fn = TREE_VALUE (fn); for (; fn; fn = DECL_CHAIN (fn)) - if (decls_match (fn, decl) && DECL_DEFER_OUTPUT (fn)) - { - result = fn; - break; - } - else if (TREE_CODE (fn) == TEMPLATE_DECL) + if (TREE_CODE (fn) == TEMPLATE_DECL) templates = decl_tree_cons (NULL_TREE, fn, templates); } } else if (name = DECL_NAME (decl), fn = IDENTIFIER_GLOBAL_VALUE (name), fn) { for (fn = get_first_fn (fn); fn; fn = DECL_CHAIN (fn)) - if (decls_match (fn, decl) && DECL_DEFER_OUTPUT (fn)) - { - result = fn; - break; - } - else if (TREE_CODE (fn) == TEMPLATE_DECL) + if (TREE_CODE (fn) == TEMPLATE_DECL) templates = decl_tree_cons (NULL_TREE, fn, templates); } @@ -3850,7 +4402,7 @@ instantiate_decl (d) tree tmpl = TI_TEMPLATE (ti); tree args = TI_ARGS (ti); tree td; - tree pattern = DECL_TEMPLATE_RESULT (tmpl); + tree decl_pattern, code_pattern; tree save_ti; int nested = in_function_p (); int d_defined; @@ -3858,20 +4410,41 @@ instantiate_decl (d) int line = lineno; char *file = input_filename; + for (td = tmpl; DECL_TEMPLATE_INSTANTIATION (td); ) + td = DECL_TI_TEMPLATE (td); + + /* In the case of a member template, decl_pattern is the partially + instantiated declaration (in the instantiated class), and code_pattern + is the original template definition. */ + decl_pattern = DECL_TEMPLATE_RESULT (tmpl); + code_pattern = DECL_TEMPLATE_RESULT (td); + if (TREE_CODE (d) == FUNCTION_DECL) { d_defined = (DECL_INITIAL (d) != NULL_TREE); - pattern_defined = (DECL_INITIAL (pattern) != NULL_TREE); + pattern_defined = (DECL_INITIAL (code_pattern) != NULL_TREE); } else { d_defined = ! DECL_IN_AGGR_P (d); - pattern_defined = ! DECL_IN_AGGR_P (pattern); + pattern_defined = ! DECL_IN_AGGR_P (code_pattern); } if (d_defined) return d; + if (TREE_CODE (d) == FUNCTION_DECL) + { + tree specs; + + /* Check to see if there is a matching specialization. */ + for (specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); + specs != NULL_TREE; + specs = TREE_CHAIN (specs)) + if (comp_template_args (TREE_PURPOSE (specs), args)) + return TREE_VALUE (specs); + } + /* This needs to happen before any tsubsting. */ if (! push_tinst_level (d)) return d; @@ -3883,12 +4456,11 @@ instantiate_decl (d) /* We need to set up DECL_INITIAL regardless of pattern_defined if the variable is a static const initialized in the class body. */ if (TREE_CODE (d) == VAR_DECL - && ! DECL_INITIAL (d) && DECL_INITIAL (pattern)) + && ! DECL_INITIAL (d) && DECL_INITIAL (code_pattern)) { pushclass (DECL_CONTEXT (d), 2); - DECL_INITIAL (d) = tsubst_expr - (DECL_INITIAL (pattern), args, - TREE_VEC_LENGTH (args), tmpl); + DECL_INITIAL (d) = tsubst_expr (DECL_INITIAL (code_pattern), args, + TREE_VEC_LENGTH (args), tmpl); popclass (1); } @@ -3904,13 +4476,13 @@ instantiate_decl (d) if (interface_unknown) warn_if_unknown_interface (d); } - else if (DECL_INTERFACE_KNOWN (pattern)) + else if (DECL_INTERFACE_KNOWN (code_pattern)) { DECL_INTERFACE_KNOWN (d) = 1; - DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (pattern); + DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern); } else - warn_if_unknown_interface (pattern); + warn_if_unknown_interface (code_pattern); } if (at_eof) @@ -3935,24 +4507,31 @@ instantiate_decl (d) input_filename = DECL_SOURCE_FILE (d); /* Trick tsubst into giving us a new decl in case the template changed. */ - save_ti = DECL_TEMPLATE_INFO (pattern); - DECL_TEMPLATE_INFO (pattern) = NULL_TREE; - td = tsubst (pattern, args, TREE_VEC_LENGTH (args), tmpl); - DECL_TEMPLATE_INFO (pattern) = save_ti; + save_ti = DECL_TEMPLATE_INFO (decl_pattern); + DECL_TEMPLATE_INFO (decl_pattern) = NULL_TREE; + td = tsubst (decl_pattern, args, TREE_VEC_LENGTH (args), tmpl); + SET_DECL_IMPLICIT_INSTANTIATION (td); + DECL_TEMPLATE_INFO (decl_pattern) = save_ti; /* And set up DECL_INITIAL, since tsubst doesn't. */ if (TREE_CODE (td) == VAR_DECL) { pushclass (DECL_CONTEXT (d), 2); - DECL_INITIAL (td) = tsubst_expr - (DECL_INITIAL (pattern), args, - TREE_VEC_LENGTH (args), tmpl); + DECL_INITIAL (td) = tsubst_expr (DECL_INITIAL (code_pattern), args, + TREE_VEC_LENGTH (args), tmpl); popclass (1); } - /* Convince duplicate_decls to use the DECL_ARGUMENTS from the new decl. */ if (TREE_CODE (d) == FUNCTION_DECL) - DECL_INITIAL (td) = error_mark_node; + { + /* Convince duplicate_decls to use the DECL_ARGUMENTS from the + new decl. */ + DECL_INITIAL (td) = error_mark_node; + + if (DECL_TEMPLATE_SPECIALIZATION (td) && !DECL_TEMPLATE_INFO (td)) + /* Set up the information about what is being specialized. */ + DECL_TEMPLATE_INFO (td) = DECL_TEMPLATE_INFO (d); + } duplicate_decls (td, d); if (TREE_CODE (d) == FUNCTION_DECL) DECL_INITIAL (td) = 0; @@ -3971,7 +4550,7 @@ instantiate_decl (d) } else if (TREE_CODE (d) == FUNCTION_DECL) { - tree t = DECL_SAVED_TREE (pattern); + tree t = DECL_SAVED_TREE (code_pattern); start_function (NULL_TREE, d, NULL_TREE, 1); store_parm_decls (); @@ -3996,7 +4575,7 @@ instantiate_decl (d) setup_vtbl_ptr (); /* Always keep the BLOCK node associated with the outermost - pair of curley braces of a function. These are needed + pair of curly braces of a function. These are needed for correct operation of dwarfout.c. */ keep_next_level (); diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c index 001a9430965..c1d756c91c2 100644 --- a/gcc/cp/repo.c +++ b/gcc/cp/repo.c @@ -1,5 +1,5 @@ /* Code to maintain a C++ template repository. - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. Contributed by Jason Merrill (jason@cygnus.com) This file is part of GNU CC. @@ -34,15 +34,17 @@ Boston, MA 02111-1307, USA. */ #ifdef HAVE_STRING_H #include -#else -extern char * rindex (); #endif #ifdef HAVE_STDLIB_H #include #else extern char * getenv (); #endif -extern char * getpwd PROTO((void)); + +#ifdef NEED_DECLARATION_RINDEX +extern char *rindex (); +#endif rindex +extern char *getpwd PROTO((void)); static tree repo_get_id PROTO((tree)); static char *save_string PROTO((char *, int)); diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index dd82e34335f..e7b83d37726 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -269,7 +269,7 @@ build_x_typeid (exp) tree bad = throw_bad_typeid (); bad = build_compound_expr - (tree_cons (NULL_TREE, bad, build_tree_list + (expr_tree_cons (NULL_TREE, bad, build_expr_list (NULL_TREE, cp_convert (type, integer_zero_node)))); exp = build (COND_EXPR, type, cond, exp, bad); } @@ -624,8 +624,8 @@ build_dynamic_cast_1 (type, expr) { expr1 = throw_bad_cast (); expr1 = build_compound_expr - (tree_cons (NULL_TREE, expr1, - build_tree_list (NULL_TREE, cp_convert (type, integer_zero_node)))); + (expr_tree_cons (NULL_TREE, expr1, + build_expr_list (NULL_TREE, cp_convert (type, integer_zero_node)))); TREE_TYPE (expr1) = type; result = save_expr (result); return build (COND_EXPR, type, result, result, expr1); @@ -810,7 +810,7 @@ expand_class_desc (tdecl, type) (NULL_TREE, isvir, tree_cons (NULL_TREE, access, NULL_TREE))))); TREE_HAS_CONSTRUCTOR (elt) = TREE_CONSTANT (elt) = TREE_STATIC (elt) = 1; - elts = tree_cons (NULL_TREE, elt, elts); + elts = expr_tree_cons (NULL_TREE, elt, elts); base_cnt++; } #if 0 @@ -837,10 +837,10 @@ expand_class_desc (tdecl, type) offset = BINFO_OFFSET (vb); isvir = build_int_2 (1, 0); - base_list = tree_cons (NULL_TREE, base, base_list); - isvir_list = tree_cons (NULL_TREE, isvir, isvir_list); - acc_list = tree_cons (NULL_TREE, access, acc_list); - off_list = tree_cons (NULL_TREE, offset, off_list); + base_list = expr_tree_cons (NULL_TREE, base, base_list); + isvir_list = expr_tree_cons (NULL_TREE, isvir, isvir_list); + acc_list = expr_tree_cons (NULL_TREE, access, acc_list); + off_list = expr_tree_cons (NULL_TREE, offset, off_list); base_cnt++; vb = TREE_CHAIN (vb); @@ -957,7 +957,7 @@ expand_attr_desc (tdecl, type) elems = tree_cons (NULL_TREE, decay_conversion (tdecl), tree_cons (NULL_TREE, decay_conversion (name_string), tree_cons - (NULL_TREE, attrval, tree_cons (NULL_TREE, t, NULL_TREE)))); + (NULL_TREE, attrval, expr_tree_cons (NULL_TREE, t, NULL_TREE)))); fn = get_identifier ("__rtti_attr"); if (IDENTIFIER_GLOBAL_VALUE (fn)) @@ -1199,9 +1199,9 @@ build_t_desc (type, definition) /* Show that we are defining the t_desc for this type. */ DECL_INITIAL (tdecl) = error_mark_node; - parents = build_tree_list (NULL_TREE, integer_zero_node); - vbases = build_tree_list (NULL_TREE, integer_zero_node); - offsets = build_tree_list (NULL_TREE, integer_zero_node); + parents = build_expr_list (NULL_TREE, integer_zero_node); + vbases = build_expr_list (NULL_TREE, integer_zero_node); + offsets = build_expr_list (NULL_TREE, integer_zero_node); methods = NULL_TREE; ivars = NULL_TREE; diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 078793c8cfa..4624ca99518 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1,6 +1,6 @@ /* Breadth-first and depth-first routines for searching multiple-inheritance lattice for GNU C++. - Copyright (C) 1987, 89, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. + Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -1206,12 +1206,15 @@ lookup_field (xbasetype, name, protect, want_type) } else if (IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype))) { - type = complete_type (xbasetype); + type = xbasetype; basetype_path = TYPE_BINFO (type); BINFO_VIA_PUBLIC (basetype_path) = 1; BINFO_INHERITANCE_CHAIN (basetype_path) = NULL_TREE; } - else my_friendly_abort (97); + else + my_friendly_abort (97); + + complete_type (type); if (CLASSTYPE_MTABLE_ENTRY (type)) { @@ -1314,7 +1317,7 @@ lookup_field (xbasetype, name, protect, want_type) return rval; } - basetype_chain = build_tree_list (NULL_TREE, basetype_path); + basetype_chain = build_expr_list (NULL_TREE, basetype_path); TREE_VIA_PUBLIC (basetype_chain) = TREE_VIA_PUBLIC (basetype_path); TREE_VIA_PROTECTED (basetype_chain) = TREE_VIA_PROTECTED (basetype_path); TREE_VIA_VIRTUAL (basetype_chain) = TREE_VIA_VIRTUAL (basetype_path); @@ -1345,11 +1348,11 @@ lookup_field (xbasetype, name, protect, want_type) TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo); TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo); if (TREE_VIA_VIRTUAL (base_binfo)) - btypes = tree_cons (NULL_TREE, + btypes = my_tree_cons (NULL_TREE, TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))), btypes); else - btypes = tree_cons (NULL_TREE, + btypes = my_tree_cons (NULL_TREE, TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i), btypes); obstack_ptr_grow (&search_obstack, btypes); @@ -1835,7 +1838,7 @@ lookup_fnfields (basetype_path, name, complain) } else { - basetype_chain = build_tree_list (NULL_TREE, basetype_path); + basetype_chain = build_expr_list (NULL_TREE, basetype_path); TREE_VIA_PUBLIC (basetype_chain) = TREE_VIA_PUBLIC (basetype_path); TREE_VIA_PROTECTED (basetype_chain) = TREE_VIA_PROTECTED (basetype_path); TREE_VIA_VIRTUAL (basetype_chain) = TREE_VIA_VIRTUAL (basetype_path); @@ -1867,11 +1870,11 @@ lookup_fnfields (basetype_path, name, complain) TREE_VIA_PROTECTED (btypes) = TREE_VIA_PROTECTED (base_binfo); TREE_VIA_VIRTUAL (btypes) = TREE_VIA_VIRTUAL (base_binfo); if (TREE_VIA_VIRTUAL (base_binfo)) - btypes = tree_cons (NULL_TREE, + btypes = my_tree_cons (NULL_TREE, TYPE_BINFO (BINFO_TYPE (TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i))), btypes); else - btypes = tree_cons (NULL_TREE, + btypes = my_tree_cons (NULL_TREE, TREE_VEC_ELT (BINFO_BASETYPES (binfo_h), i), btypes); obstack_ptr_grow (&search_obstack, btypes); @@ -2194,7 +2197,8 @@ get_matching_virtual (binfo, fndecl, dtorp) { tree binfo = get_binfo (b, d, 1); if (binfo != error_mark_node - && ! BINFO_OFFSET_ZEROP (binfo)) + && (! BINFO_OFFSET_ZEROP (binfo) + || TREE_VIA_VIRTUAL (binfo))) sorry ("adjusting pointers for covariant returns"); } if (TYPE_READONLY (d) > TYPE_READONLY (b)) @@ -3021,7 +3025,7 @@ expand_indirect_vtbls_init (binfo, true_exp, decl_ptr) /* Do all vtables from this virtual base. */ /* This assumes that virtual bases can never serve as parent - binfos. (in the CLASSTPE_VFIELD_PARENT sense) */ + binfos. (in the CLASSTYPE_VFIELD_PARENT sense) */ expand_direct_vtbls_init (vbases, TYPE_BINFO (BINFO_TYPE (vbases)), 1, 0, addr); @@ -3130,6 +3134,10 @@ dfs_record_inheritance (binfo) tree baseclass = BINFO_TYPE (base_binfo); mi_boolean *base_row = BINFO_DERIVES_FROM_STAR (base_binfo); + if (TREE_CODE (baseclass) == TEMPLATE_TYPE_PARM) + continue; + my_friendly_assert (CLASSTYPE_CID (baseclass) != 0, 2365); + /* Don't search if there's nothing there! MI_SIZE can be zero as a result of parse errors. */ if (TYPE_BINFO_BASETYPES (baseclass) && mi_size > 0) @@ -3668,6 +3676,8 @@ reinit_search_statistics () #endif /* GATHER_STATISTICS */ } +#define scratch_tree_cons expr_tree_cons + static tree conversions; static void add_conversions (binfo) @@ -3681,7 +3691,7 @@ add_conversions (binfo) tree tmp = TREE_VEC_ELT (method_vec, i); if (! IDENTIFIER_TYPENAME_P (DECL_NAME (tmp))) break; - conversions = tree_cons (binfo, tmp, conversions); + conversions = scratch_tree_cons (binfo, tmp, conversions); } SET_BINFO_MARKED (binfo); } diff --git a/gcc/cp/spew.c b/gcc/cp/spew.c index c82f1ecf55d..ce884def14a 100644 --- a/gcc/cp/spew.c +++ b/gcc/cp/spew.c @@ -189,6 +189,8 @@ scan_tokens (n) } } +/* Like _obstack_allocated_p, but stop after checking NLEVELS chunks. */ + static int probe_obstack (h, obj, nlevels) struct obstack *h; @@ -316,6 +318,7 @@ yylex () if (got_scope) tmp_token.yylval.ttype = trrr; break; + case PFUNCNAME: case IDENTIFIER: lastiddecl = trrr; break; @@ -377,6 +380,10 @@ yylex () if (spew_debug) debug_yychar (yychar); #endif + + if (yychar == PFUNCNAME) + yylval.ttype = do_identifier (yylval.ttype, 1); + return yychar; } diff --git a/gcc/cp/tinfo2.cc b/gcc/cp/tinfo2.cc index 72870df9538..128661c1cd2 100644 --- a/gcc/cp/tinfo2.cc +++ b/gcc/cp/tinfo2.cc @@ -258,6 +258,18 @@ __throw_type_match_rtti (void *catch_type_r, void *throw_type_r, void *objptr) return new_objptr; } +/* Called from __cp_pop_exception. Is P the type_info node for a pointer + of some kind? */ + +bool +__is_pointer (void *p) +{ + const type_info *t = reinterpret_cast (p); + const __pointer_type_info *pt = + dynamic_cast (t); + return pt != 0; +} + extern "C" void __rtti_ptr (void *addr, const char *n, const type_info *ti) { new (addr) __pointer_type_info (n, *ti); } diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index bf542af547f..9d2589fec6d 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -32,6 +32,14 @@ Boston, MA 02111-1307, USA. */ #include #endif +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef NEED_DECLARATION_FREE +extern void free PROTO((void *)); +#endif + extern void compiler_error (); static tree get_identifier_list PROTO((tree)); @@ -70,6 +78,9 @@ real_lvalue_p (ref) case PREDECREMENT_EXPR: case COMPONENT_REF: case SAVE_EXPR: + case UNSAVE_EXPR: + case TRY_CATCH_EXPR: + case WITH_CLEANUP_EXPR: return real_lvalue_p (TREE_OPERAND (ref, 0)); case STRING_CST: @@ -144,6 +155,9 @@ lvalue_p (ref) case IMAGPART_EXPR: case COMPONENT_REF: case SAVE_EXPR: + case UNSAVE_EXPR: + case TRY_CATCH_EXPR: + case WITH_CLEANUP_EXPR: return lvalue_p (TREE_OPERAND (ref, 0)); case STRING_CST: @@ -230,7 +244,7 @@ build_cplus_new (type, init) tree slot; tree rval; - if (TREE_CODE (init) == TARGET_EXPR || init == error_mark_node) + if (TREE_CODE (init) != CALL_EXPR && TREE_CODE (init) != NEW_EXPR) return init; slot = build (VAR_DECL, type); @@ -1262,6 +1276,9 @@ is_overloaded_fn (x) if (TREE_CODE (x) == FUNCTION_DECL) return 1; + if (TREE_CODE (x) == TEMPLATE_ID_EXPR) + return 1; + if (TREE_CODE (x) == TREE_LIST && (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL || TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL)) @@ -1274,9 +1291,12 @@ int really_overloaded_fn (x) tree x; { + if (TREE_CODE (x) == TEMPLATE_ID_EXPR) + return 1; + if (TREE_CODE (x) == TREE_LIST && (TREE_CODE (TREE_VALUE (x)) == FUNCTION_DECL - || TREE_CODE (TREE_VALUE (x)) == TEMPLATE_DECL)) + || DECL_FUNCTION_TEMPLATE_P (TREE_VALUE (x)))) return 1; return 0; @@ -1286,7 +1306,8 @@ tree get_first_fn (from) tree from; { - if (TREE_CODE (from) == FUNCTION_DECL) + if (TREE_CODE (from) == FUNCTION_DECL + || DECL_FUNCTION_TEMPLATE_P (from)) return from; my_friendly_assert (TREE_CODE (from) == TREE_LIST, 9); @@ -1640,11 +1661,9 @@ extern int depth_reached; void print_lang_statistics () { - extern struct obstack maybepermanent_obstack, decl_obstack; + extern struct obstack decl_obstack; print_obstack_statistics ("class_obstack", &class_obstack); print_obstack_statistics ("decl_obstack", &decl_obstack); - print_obstack_statistics ("permanent_obstack", &permanent_obstack); - print_obstack_statistics ("maybepermanent_obstack", &maybepermanent_obstack); print_search_statistics (); print_class_statistics (); #ifdef GATHER_STATISTICS @@ -1747,8 +1766,6 @@ break_out_target_exprs (t) /* Obstack used for allocating nodes in template function and variable definitions. */ -extern struct obstack *expression_obstack; - /* Similar to `build_nt', except we build on the permanent_obstack, regardless. */ @@ -2045,13 +2062,20 @@ make_temp_vec (len) int len; { register tree node; - push_obstacks_nochange (); - resume_temporary_allocation (); + register struct obstack *ambient_obstack = current_obstack; + current_obstack = expression_obstack; node = make_tree_vec (len); - pop_obstacks (); + current_obstack = ambient_obstack; return node; } +void +push_expression_obstack () +{ + push_obstacks_nochange (); + current_obstack = expression_obstack; +} + /* The type of ARG when used as an lvalue. */ tree diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 3318dba17be..304e92d3f7f 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1,5 +1,5 @@ /* Build expressions with type checking for C++ compiler. - Copyright (C) 1987, 88, 89, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -36,6 +36,7 @@ Boston, MA 02111-1307, USA. */ #include "cp-tree.h" #include "flags.h" #include "output.h" +#include "expr.h" #ifdef HAVE_STRING_H #include @@ -450,6 +451,10 @@ common_type (t1, t2) target = tt1; else if (tt1 == void_type_node || tt2 == void_type_node) target = void_type_node; + else if (tt1 == unknown_type_node) + target = tt2; + else if (tt2 == unknown_type_node) + target = tt1; else target = common_type (tt1, tt2); @@ -870,7 +875,10 @@ comp_target_types (ttl, ttr, nptrs) if (nptrs > 0) { - if (TREE_CODE (ttl) == VOID_TYPE + if (TREE_CODE (ttl) == UNKNOWN_TYPE + || TREE_CODE (ttr) == UNKNOWN_TYPE) + return 1; + else if (TREE_CODE (ttl) == VOID_TYPE && TREE_CODE (ttr) != FUNCTION_TYPE && TREE_CODE (ttr) != METHOD_TYPE && TREE_CODE (ttr) != OFFSET_TYPE) @@ -2390,7 +2398,7 @@ build_x_function_call (function, params, decl) return build_method_call (decl, function, params, NULL_TREE, LOOKUP_NORMAL); } - else if (TREE_CODE (function) == TREE_LIST) + else if (really_overloaded_fn (function)) { if (TREE_VALUE (function) == NULL_TREE) { @@ -2431,7 +2439,7 @@ build_x_function_call (function, params, decl) decl_addr = build_unary_op (ADDR_EXPR, decl, 0); function = get_member_function_from_ptrfunc (&decl_addr, TREE_OPERAND (function, 1)); - params = tree_cons (NULL_TREE, decl_addr, params); + params = expr_tree_cons (NULL_TREE, decl_addr, params); return build_function_call (function, params); } @@ -2481,7 +2489,7 @@ build_x_function_call (function, params, decl) } else decl = build_c_cast (ctypeptr, decl); - params = tree_cons (NULL_TREE, decl, params); + params = expr_tree_cons (NULL_TREE, decl, params); } return build_function_call (function, params); @@ -2658,7 +2666,8 @@ build_function_call_real (function, params, require_complete, flags) if (!((TREE_CODE (fntype) == POINTER_TYPE && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE) - || is_method)) + || is_method + || TREE_CODE (function) == TEMPLATE_ID_EXPR)) { cp_error ("`%E' cannot be used as a function", function); return error_mark_node; @@ -2883,7 +2892,7 @@ convert_arguments (return_loc, typelist, values, fndecl, flags) if (parmval == error_mark_node) return error_mark_node; - result = tree_cons (NULL_TREE, parmval, result); + result = expr_tree_cons (NULL_TREE, parmval, result); } else { @@ -2894,17 +2903,17 @@ convert_arguments (return_loc, typelist, values, fndecl, flags) && (TYPE_PRECISION (TREE_TYPE (val)) < TYPE_PRECISION (double_type_node))) /* Convert `float' to `double'. */ - result = tree_cons (NULL_TREE, cp_convert (double_type_node, val), result); + result = expr_tree_cons (NULL_TREE, cp_convert (double_type_node, val), result); else if (TYPE_LANG_SPECIFIC (TREE_TYPE (val)) && ! TYPE_HAS_TRIVIAL_INIT_REF (TREE_TYPE (val))) { cp_warning ("cannot pass objects of type `%T' through `...'", TREE_TYPE (val)); - result = tree_cons (NULL_TREE, val, result); + result = expr_tree_cons (NULL_TREE, val, result); } else /* Convert `short' and `char' to full-size `int'. */ - result = tree_cons (NULL_TREE, default_conversion (val), result); + result = expr_tree_cons (NULL_TREE, default_conversion (val), result); } if (typetail) @@ -2949,7 +2958,7 @@ convert_arguments (return_loc, typelist, values, fndecl, flags) if (parmval == error_mark_node) return error_mark_node; - result = tree_cons (0, parmval, result); + result = expr_tree_cons (0, parmval, result); typetail = TREE_CHAIN (typetail); /* ends with `...'. */ if (typetail == NULL_TREE) @@ -4041,6 +4050,7 @@ build_x_unary_op (code, xarg) /* & rec, on incomplete RECORD_TYPEs is the simple opr &, not an error message. */ if (code == ADDR_EXPR + && TREE_CODE (xarg) != TEMPLATE_ID_EXPR && ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (xarg))) && TYPE_SIZE (TREE_TYPE (xarg)) == NULL_TREE) || (TREE_CODE (xarg) == OFFSET_REF))) @@ -4435,6 +4445,27 @@ build_unary_op (code, xarg, noconvert) 0); return build1 (ADDR_EXPR, unknown_type_node, arg); } + else if (TREE_CODE (arg) == TEMPLATE_ID_EXPR) + { + tree targs; + tree fn; + + /* We don't require a match here; it's possible that the + context (like a cast to a particular type) will resolve + the particular choice of template. */ + fn = determine_explicit_specialization (arg, NULL_TREE, + &targs, + 0, 0); + + if (fn) + { + fn = instantiate_template (fn, targs); + mark_addressable (fn); + return build_unary_op (ADDR_EXPR, fn, 0); + } + + return build1 (ADDR_EXPR, unknown_type_node, arg); + } /* Handle complex lvalues (when permitted) by reduction to simpler cases. */ @@ -4652,7 +4683,7 @@ unary_complex_lvalue (code, arg) DECL_FIELD_BITPOS (t), size_int (BITS_PER_UNIT))); - /* We offset all pointer to data memebers by 1 so that we can + /* We offset all pointer to data members by 1 so that we can distinguish between a null pointer to data member and the first data member of a structure. */ offset = size_binop (PLUS_EXPR, offset, size_int (1)); @@ -4764,15 +4795,8 @@ mark_addressable (exp) be non-zero in the case of processing a default function. The second may be non-zero in the case of a template function. */ x = DECL_MAIN_VARIANT (x); - if ((DECL_THIS_INLINE (x) || DECL_PENDING_INLINE_INFO (x)) - && (DECL_CONTEXT (x) == NULL_TREE - || TREE_CODE_CLASS (TREE_CODE (DECL_CONTEXT (x))) != 't' - || ! CLASSTYPE_INTERFACE_ONLY (DECL_CONTEXT (x)))) - { - mark_inline_for_output (x); - if (x == current_function_decl) - DECL_EXTERNAL (x) = 0; - } + if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x)) + mark_used (x); TREE_ADDRESSABLE (x) = 1; TREE_USED (x) = 1; TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1; @@ -5145,7 +5169,7 @@ build_x_compound_expr (list) result = build_opfncall (COMPOUND_EXPR, LOOKUP_NORMAL, TREE_VALUE (list), TREE_VALUE (rest), NULL_TREE); if (result) - return build_x_compound_expr (tree_cons (NULL_TREE, result, TREE_CHAIN (rest))); + return build_x_compound_expr (expr_tree_cons (NULL_TREE, result, TREE_CHAIN (rest))); if (! TREE_SIDE_EFFECTS (TREE_VALUE (list))) { @@ -5162,8 +5186,8 @@ build_x_compound_expr (list) warn_if_unused_value (TREE_VALUE(list)); #endif - return build_compound_expr (tree_cons (NULL_TREE, TREE_VALUE (list), - build_tree_list (NULL_TREE, build_x_compound_expr (rest)))); + return build_compound_expr (expr_tree_cons (NULL_TREE, TREE_VALUE (list), + build_expr_list (NULL_TREE, build_x_compound_expr (rest)))); } /* Given a list of expressions, return a compound expression @@ -5247,7 +5271,7 @@ build_static_cast (type, expr) if (IS_AGGR_TYPE (type)) return build_cplus_new (type, (build_method_call - (NULL_TREE, ctor_identifier, build_tree_list (NULL_TREE, expr), + (NULL_TREE, ctor_identifier, build_expr_list (NULL_TREE, expr), TYPE_BINFO (type), LOOKUP_NORMAL))); expr = decay_conversion (expr); @@ -5379,6 +5403,14 @@ build_reinterpret_cast (type, expr) expr = decl_constant_value (expr); return fold (build1 (NOP_EXPR, type, expr)); } + else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype)) + || (TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))) + { + pedwarn ("ANSI C++ forbids casting between pointers to functions and objects"); + if (TREE_READONLY_DECL_P (expr)) + expr = decl_constant_value (expr); + return fold (build1 (NOP_EXPR, type, expr)); + } else { cp_error ("reinterpret_cast from `%T' to `%T'", intype, type); @@ -5636,7 +5668,7 @@ expand_target_expr (t) do_pending_stack_adjust (); start_sequence_for_rtl_expr (xval); emit_note (0, -1); - rtxval = expand_expr (t, NULL_RTX, VOIDmode, 0); + rtxval = expand_expr (t, NULL_RTX, VOIDmode, EXPAND_NORMAL); do_pending_stack_adjust (); TREE_SIDE_EFFECTS (xval) = 1; RTL_EXPR_SEQUENCE (xval) = get_insns (); @@ -5786,7 +5818,7 @@ build_modify_expr (lhs, modifycode, rhs) else { result = build_method_call (lhs, ctor_identifier, - build_tree_list (NULL_TREE, rhs), + build_expr_list (NULL_TREE, rhs), TYPE_BINFO (lhstype), LOOKUP_NORMAL); if (result == NULL_TREE) return error_mark_node; @@ -6084,7 +6116,7 @@ build_modify_expr (lhs, modifycode, rhs) if (TREE_SIDE_EFFECTS (lhs)) cond = build_compound_expr (tree_cons (NULL_TREE, lhs, - build_tree_list (NULL_TREE, cond))); + build_expr_list (NULL_TREE, cond))); /* Cannot have two identical lhs on this one tree (result) as preexpand calls will rip them out and fill in RTL for them, but when the @@ -6190,7 +6222,7 @@ get_delta_difference (from, to, force) binfo = get_binfo (from, to, 1); if (binfo == error_mark_node) { - error (" in pointer to member function conversiona"); + error (" in pointer to member function conversion"); return delta; } if (binfo == 0) @@ -6248,18 +6280,18 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2) if (pfn) { u = build_nt (CONSTRUCTOR, NULL_TREE, - tree_cons (pfn_identifier, pfn, NULL_TREE)); + expr_tree_cons (pfn_identifier, pfn, NULL_TREE)); } else { u = build_nt (CONSTRUCTOR, NULL_TREE, - tree_cons (delta2_identifier, delta2, NULL_TREE)); + expr_tree_cons (delta2_identifier, delta2, NULL_TREE)); } u = build_nt (CONSTRUCTOR, NULL_TREE, - tree_cons (NULL_TREE, delta, - tree_cons (NULL_TREE, idx, - tree_cons (NULL_TREE, u, NULL_TREE)))); + expr_tree_cons (NULL_TREE, delta, + expr_tree_cons (NULL_TREE, idx, + expr_tree_cons (NULL_TREE, u, NULL_TREE)))); return digest_init (type, u, (tree*)0); #else @@ -6278,14 +6310,14 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2) { allconstant = TREE_CONSTANT (pfn); allsimple = !! initializer_constant_valid_p (pfn, TREE_TYPE (pfn)); - u = tree_cons (pfn_field, pfn, NULL_TREE); + u = expr_tree_cons (pfn_field, pfn, NULL_TREE); } else { delta2 = convert_and_check (delta_type_node, delta2); allconstant = TREE_CONSTANT (delta2); allsimple = !! initializer_constant_valid_p (delta2, TREE_TYPE (delta2)); - u = tree_cons (delta2_field, delta2, NULL_TREE); + u = expr_tree_cons (delta2_field, delta2, NULL_TREE); } delta = convert_and_check (delta_type_node, delta); @@ -6297,9 +6329,9 @@ build_ptrmemfunc1 (type, delta, idx, pfn, delta2) && initializer_constant_valid_p (idx, TREE_TYPE (idx)); u = build (CONSTRUCTOR, subtype, NULL_TREE, u); - u = tree_cons (delta_field, delta, - tree_cons (idx_field, idx, - tree_cons (pfn_or_delta2_field, u, NULL_TREE))); + u = expr_tree_cons (delta_field, delta, + expr_tree_cons (idx_field, idx, + expr_tree_cons (pfn_or_delta2_field, u, NULL_TREE))); u = build (CONSTRUCTOR, type, NULL_TREE, u); TREE_CONSTANT (u) = allconstant; TREE_STATIC (u) = allconstant && allsimple; @@ -7027,7 +7059,7 @@ convert_for_initialization (exp, type, rhs, flags, errtype, fndecl, parmnum) if (TYPE_HAS_INIT_REF (type)) { tree init = build_method_call (exp, ctor_identifier, - build_tree_list (NULL_TREE, rhs), + build_expr_list (NULL_TREE, rhs), TYPE_BINFO (type), LOOKUP_NORMAL); if (init == error_mark_node) @@ -7110,7 +7142,7 @@ c_expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) if (o[i] != TREE_VALUE (tail)) { expand_expr (build_modify_expr (o[i], NOP_EXPR, TREE_VALUE (tail)), - const0_rtx, VOIDmode, 0); + const0_rtx, VOIDmode, EXPAND_NORMAL); free_temp_slots (); } /* Detect modification of read-only values. @@ -7297,7 +7329,8 @@ c_expand_return (retval) { if (TEMP_NAME_P (DECL_NAME (whats_returned))) warning ("reference to non-lvalue returned"); - else if (! TREE_STATIC (whats_returned) + else if (TREE_CODE (TREE_TYPE (whats_returned)) != REFERENCE_TYPE + && ! TREE_STATIC (whats_returned) && IDENTIFIER_LOCAL_VALUE (DECL_NAME (whats_returned)) && !TREE_PUBLIC (whats_returned)) cp_warning_at ("reference to local variable `%D' returned", whats_returned); diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index c290ebe2bd5..df58f19b6e4 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -301,7 +301,7 @@ ack (s, v, v2) silly. So instead, we just do the equivalent of a call to fatal in the same situation (call exit). */ -/* First used: 0 (reserved), Last used: 367. Free: */ +/* First used: 0 (reserved), Last used: 369. Free: */ static int abortcount = 0; @@ -986,7 +986,7 @@ process_init_constructor (type, init, elts) allconstant = 0; else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1))) allsimple = 0; - members = tree_cons (NULL_TREE, next1, members); + members = expr_tree_cons (NULL_TREE, next1, members); } } if (TREE_CODE (type) == RECORD_TYPE) @@ -1021,7 +1021,7 @@ process_init_constructor (type, init, elts) if (! DECL_NAME (field)) { - members = tree_cons (field, integer_zero_node, members); + members = expr_tree_cons (field, integer_zero_node, members); continue; } @@ -1050,7 +1050,7 @@ process_init_constructor (type, init, elts) allconstant = 0; else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1))) allsimple = 0; - members = tree_cons (field, next1, members); + members = expr_tree_cons (field, next1, members); } for (; field; field = TREE_CHAIN (field)) { @@ -1067,7 +1067,7 @@ process_init_constructor (type, init, elts) allconstant = 0; else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1))) allsimple = 0; - members = tree_cons (field, next1, members); + members = expr_tree_cons (field, next1, members); } else if (TREE_READONLY (field)) error ("uninitialized const member `%s'", @@ -1149,7 +1149,7 @@ process_init_constructor (type, init, elts) allconstant = 0; else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0) allsimple = 0; - members = tree_cons (field, next1, members); + members = expr_tree_cons (field, next1, members); } /* If arguments were specified as a list, just remove the ones we used. */ diff --git a/gcc/cp/xref.c b/gcc/cp/xref.c index fc2d1078ac2..40cdf42103f 100644 --- a/gcc/cp/xref.c +++ b/gcc/cp/xref.c @@ -1,5 +1,5 @@ /* Code for handling XREF output from GNU C++. - Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. + Copyright (C) 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. @@ -40,8 +40,9 @@ extern char *getpwd PROTO((void)); #ifdef HAVE_STRING_H #include -#else -extern char *index (); +#endif + +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); #endif diff --git a/gcc/cplus-dem.c b/gcc/cplus-dem.c index 3487cad091f..ad4116bd5c5 100644 --- a/gcc/cplus-dem.c +++ b/gcc/cplus-dem.c @@ -342,7 +342,7 @@ consume_count (type) } -/* Like consume_count, but for counts that are preceeded and followed +/* Like consume_count, but for counts that are preceded and followed by '_' if they are greater than 10. Also, -1 is returned for failure, since 0 can be a valid value. */ @@ -3133,6 +3133,15 @@ static struct option long_options[] = { {0, no_argument, 0, 0} }; +/* More 'friendly' abort that prints the line and file. + config.h can #define abort fancy_abort if you like that sort of thing. */ + +void +fancy_abort () +{ + fatal ("Internal gcc abort."); +} + int main (argc, argv) int argc; diff --git a/gcc/cpp.info b/gcc/cpp.info index f20aef96e1f..2799f0f6ed1 100644 --- a/gcc/cpp.info +++ b/gcc/cpp.info @@ -1,4 +1,4 @@ -This is Info file cpp.info, produced by Makeinfo version 1.67 from the +This is Info file cpp.info, produced by Makeinfo version 1.68 from the input file cpp.texi. This file documents the GNU C Preprocessor. @@ -69,7 +69,7 @@ Node: Combining Sources85575 Node: Other Directives88486 Node: Output89940 Node: Invocation91249 -Node: Concept Index103346 -Node: Index106199 +Node: Concept Index103767 +Node: Index106620  End Tag Table diff --git a/gcc/cpp.info-1 b/gcc/cpp.info-1 index aa15a021fec..661eadb52a2 100644 --- a/gcc/cpp.info-1 +++ b/gcc/cpp.info-1 @@ -1,4 +1,4 @@ -This is Info file cpp.info, produced by Makeinfo version 1.67 from the +This is Info file cpp.info, produced by Makeinfo version 1.68 from the input file cpp.texi. This file documents the GNU C Preprocessor. diff --git a/gcc/cpp.info-2 b/gcc/cpp.info-2 index b98ab2d0f29..c8a5b0e983b 100644 --- a/gcc/cpp.info-2 +++ b/gcc/cpp.info-2 @@ -1,4 +1,4 @@ -This is Info file cpp.info, produced by Makeinfo version 1.67 from the +This is Info file cpp.info, produced by Makeinfo version 1.68 from the input file cpp.texi. This file documents the GNU C Preprocessor. diff --git a/gcc/cpp.info-3 b/gcc/cpp.info-3 index 9f0fa14b2bf..80733950f6c 100644 --- a/gcc/cpp.info-3 +++ b/gcc/cpp.info-3 @@ -1,4 +1,4 @@ -This is Info file cpp.info, produced by Makeinfo version 1.67 from the +This is Info file cpp.info, produced by Makeinfo version 1.68 from the input file cpp.texi. This file documents the GNU C Preprocessor. @@ -165,6 +165,14 @@ compiler. directories, but do still search the other standard directories. (This option is used when building libg++.) +`-remap' + When searching for a header file in a directory, remap file names + if a file named `header.gcc' exists in that directory. This can + be used to work around limitations of file systems with file name + restrictions. The `header.gcc' file should contain a series of + lines with two tokens on each line: the first token is the name to + map, and the second token is the actual name to use. + `-D NAME' Predefine NAME as a macro, with definition `1'. @@ -433,6 +441,7 @@ Index of Directives, Macros and Options * -P: Invocation. * -pedantic: Invocation. * -pedantic-errors: Invocation. +* -remap: Invocation. * -traditional: Invocation. * -trigraphs: Invocation. * -U: Invocation. diff --git a/gcc/cpp.texi b/gcc/cpp.texi index 3fefda8463e..9424b48f985 100644 --- a/gcc/cpp.texi +++ b/gcc/cpp.texi @@ -2689,6 +2689,15 @@ Do not search for header files in the C++-specific standard directories, but do still search the other standard directories. (This option is used when building libg++.) +@item -remap +@findex -remap +When searching for a header file in a directory, remap file names if a +file named @file{header.gcc} exists in that directory. This can be used +to work around limitations of file systems with file name restrictions. +The @file{header.gcc} file should contain a series of lines with two +tokens on each line: the first token is the name to map, and the second +token is the actual name to use. + @item -D @var{name} @findex -D Predefine @var{name} as a macro, with definition @samp{1}. diff --git a/gcc/cpplib.c b/gcc/cpplib.c index 0a930367452..9cfd3ac6e46 100644 --- a/gcc/cpplib.c +++ b/gcc/cpplib.c @@ -16,79 +16,80 @@ 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! */ - -#ifdef EMACS -#define NO_SHORTNAMES -#include "../src/config.h" -#ifdef open -#undef open -#undef read -#undef write -#endif /* open */ -#endif /* EMACS */ - -/* The macro EMACS is defined when cpp is distributed as part of Emacs, - for the sake of machines with limited C compilers. */ -#ifndef EMACS -#include "config.h" -#endif /* not EMACS */ - -#ifndef STANDARD_INCLUDE_DIR -#define STANDARD_INCLUDE_DIR "/usr/include" -#endif - -#if 0 /* We can't get ptrdiff_t, so I arranged not to need PTR_INT_TYPE. */ -#ifdef __STDC__ -#define PTR_INT_TYPE ptrdiff_t -#else -#define PTR_INT_TYPE long -#endif -#endif /* 0 */ +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include "cpplib.h" -#include "cpphash.h" +#include "config.h" #ifndef STDC_VALUE #define STDC_VALUE 1 #endif -/* By default, colon separates directories in a path. */ -#ifndef PATH_SEPARATOR -#define PATH_SEPARATOR ':' -#endif - #include #include #include -#ifdef __STDC__ + +#ifdef HAVE_STDLIB_H #include #endif -#ifndef VMS -#ifndef USG -#include /* for __DATE__ and __TIME__ */ -#include +#ifdef TIME_WITH_SYS_TIME +# include +# include #else +# if HAVE_SYS_TIME_H +# include +# else +# include +#endif +#endif + +#ifdef HAVE_SYS_TIMES_H #include -#include -#include -#endif /* USG */ -#endif /* not VMS */ +#endif + +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif + +#ifdef HAVE_FCNTL_H +# include +#endif #if HAVE_LIMITS_H # include #endif +#ifdef HAVE_STDLIB_H +# include +#endif + +#ifdef HAVE_STRING_H +# include +# else +# ifdef HAVE_STRINGS_H +# include +#endif +#endif + /* This defines "errno" properly for VMS, and gives us EACCES. */ #include +#include "cpplib.h" +#include "cpphash.h" +#include "gansidecl.h" + +#ifdef NEED_DECLARATION_INDEX extern char *index (); +#endif + +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); +#endif + +#ifdef NEED_DECLARATION_GETENV +extern char *getenv (); +#endif + extern char *update_path (); #ifndef O_RDONLY @@ -130,24 +131,14 @@ extern char *update_path (); #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif -/* Define a generic NULL if one hasn't already been defined. */ - -#ifndef NULL -#define NULL 0 -#endif - -#ifndef GENERIC_PTR -#if defined (USE_PROTOTYPES) ? USE_PROTOTYPES : defined (__STDC__) -#define GENERIC_PTR void * -#else -#define GENERIC_PTR char * -#endif +/* By default, colon separates directories in a path. */ +#ifndef PATH_SEPARATOR +#define PATH_SEPARATOR ':' #endif -#ifndef NULL_PTR -#define NULL_PTR ((GENERIC_PTR) 0) +#ifndef STANDARD_INCLUDE_DIR +#define STANDARD_INCLUDE_DIR "/usr/include" #endif - #ifndef INCLUDE_LEN_FUDGE #define INCLUDE_LEN_FUDGE 0 #endif @@ -290,7 +281,6 @@ static int compare_token_lists (); static HOST_WIDE_INT eval_if_expression (); static int change_newlines (); extern int hashf (); -static int file_size_and_mode (); static struct arglist *read_token_list (); static void free_token_list (); static int safe_read (); @@ -311,7 +301,6 @@ enum file_change_code {same_file, enter_file, leave_file}; extern HOST_WIDE_INT cpp_parse_expr PARAMS ((cpp_reader *)); -extern char *getenv (); extern FILE *fdopen (); extern char *version_string; extern struct tm *localtime (); @@ -810,6 +799,7 @@ cpp_options_init (opts) opts->print_include_names = 0; opts->dump_macros = dump_none; opts->no_output = 0; + opts->remap = 0; opts->cplusplus = 0; opts->cplusplus_comments = 0; @@ -1706,7 +1696,8 @@ check_macro_name (pfile, symname, usage) /* Return zero if two DEFINITIONs are isomorphic. */ static int -compare_defs (d1, d2) +compare_defs (pfile, d1, d2) + cpp_reader *pfile; DEFINITION *d1, *d2; { register struct reflist *a1, *a2; @@ -1716,7 +1707,8 @@ compare_defs (d1, d2) if (d1->nargs != d2->nargs) return 1; - if (strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames)) + if (CPP_PEDANTIC (pfile) + && strcmp ((char *)d1->args.argnames, (char *)d2->args.argnames)) return 1; for (a1 = d1->pattern, a2 = d2->pattern; a1 && a2; a1 = a1->next, a2 = a2->next) { @@ -1812,7 +1804,7 @@ do_define (pfile, keyword, buf, limit) ok = 1; /* Redefining a macro is ok if the definitions are the same. */ else if (hp->type == T_MACRO) - ok = ! compare_defs (mdef.defn, hp->value.defn); + ok = ! compare_defs (pfile, mdef.defn, hp->value.defn); /* Redefining a constant is ok with -D. */ else if (hp->type == T_CONST) ok = ! CPP_OPTIONS (pfile)->done_initializing; @@ -4725,8 +4717,8 @@ cpp_get_token (pfile) } /* OK, now bring us back to the state we were in before we entered - this branch. We need #line b/c the newline for the pragma - could fuck things up. */ + this branch. We need #line because the newline for the pragma + could mess things up. */ output_line_command (pfile, 0, same_file); *(obp++) = ' '; /* just in case, if comments are copied thru */ *(obp++) = '/'; @@ -5520,65 +5512,68 @@ open_include_file (pfile, filename, searchptr) char *filename; struct file_name_list *searchptr; { - register struct file_name_map *map; - register char *from; - char *p, *dir; - - if (searchptr && ! searchptr->got_name_map) + if (CPP_OPTIONS (pfile)->remap) { - searchptr->name_map = read_name_map (pfile, - searchptr->fname - ? searchptr->fname : "."); - searchptr->got_name_map = 1; - } + register struct file_name_map *map; + register char *from; + char *p, *dir; - /* First check the mapping for the directory we are using. */ - if (searchptr && searchptr->name_map) - { - from = filename; - if (searchptr->fname) - from += strlen (searchptr->fname) + 1; - for (map = searchptr->name_map; map; map = map->map_next) + if (searchptr && ! searchptr->got_name_map) + { + searchptr->name_map = read_name_map (pfile, + searchptr->fname + ? searchptr->fname : "."); + searchptr->got_name_map = 1; + } + + /* First check the mapping for the directory we are using. */ + if (searchptr && searchptr->name_map) { - if (! strcmp (map->map_from, from)) + from = filename; + if (searchptr->fname) + from += strlen (searchptr->fname) + 1; + for (map = searchptr->name_map; map; map = map->map_next) { - /* Found a match. */ - return open (map->map_to, O_RDONLY, 0666); + if (! strcmp (map->map_from, from)) + { + /* Found a match. */ + return open (map->map_to, O_RDONLY, 0666); + } } } - } - /* Try to find a mapping file for the particular directory we are - looking in. Thus #include will look up sys/types.h - in /usr/include/header.gcc and look up types.h in - /usr/include/sys/header.gcc. */ - p = rindex (filename, '/'); - if (! p) - p = filename; - if (searchptr - && searchptr->fname - && strlen (searchptr->fname) == p - filename - && ! strncmp (searchptr->fname, filename, p - filename)) - { - /* FILENAME is in SEARCHPTR, which we've already checked. */ - return open (filename, O_RDONLY, 0666); - } + /* Try to find a mapping file for the particular directory we are + looking in. Thus #include will look up sys/types.h + in /usr/include/header.gcc and look up types.h in + /usr/include/sys/header.gcc. */ + p = rindex (filename, '/'); + if (! p) + p = filename; + if (searchptr + && searchptr->fname + && strlen (searchptr->fname) == p - filename + && ! strncmp (searchptr->fname, filename, p - filename)) + { + /* FILENAME is in SEARCHPTR, which we've already checked. */ + return open (filename, O_RDONLY, 0666); + } - if (p == filename) - { - dir = "."; - from = filename; - } - else - { - dir = (char *) alloca (p - filename + 1); - bcopy (filename, dir, p - filename); - dir[p - filename] = '\0'; - from = p + 1; + if (p == filename) + { + dir = "."; + from = filename; + } + else + { + dir = (char *) alloca (p - filename + 1); + bcopy (filename, dir, p - filename); + dir[p - filename] = '\0'; + from = p + 1; + } + for (map = read_name_map (pfile, dir); map; map = map->map_next) + if (! strcmp (map->map_from, from)) + return open (map->map_to, O_RDONLY, 0666); } - for (map = read_name_map (pfile, dir); map; map = map->map_next) - if (! strcmp (map->map_from, from)) - return open (map->map_to, O_RDONLY, 0666); return open (filename, O_RDONLY, 0666); } @@ -5602,14 +5597,14 @@ finclude (pfile, f, fname, system_header_p, dirptr) int system_header_p; struct file_name_list *dirptr; { - int st_mode; - long st_size; + struct stat st; + size_t st_size; long i; int length; cpp_buffer *fp; /* For input stack frame */ int missing_newline = 0; - if (file_size_and_mode (f, &st_mode, &st_size) < 0) + if (fstat (f, &st) < 0) { cpp_perror_with_name (pfile, fname); close (f); @@ -5628,7 +5623,13 @@ finclude (pfile, f, fname, system_header_p, dirptr) fp->colno = 1; fp->cleanup = file_cleanup; - if (S_ISREG (st_mode)) { + if (S_ISREG (st.st_mode)) { + st_size = (size_t) st.st_size; + if (st_size != st.st_size || st_size + 2 < st_size) { + cpp_error (pfile, "file `%s' too large", fname); + close (f); + return 0; + } fp->buf = (U_CHAR *) xmalloc (st_size + 2); fp->alimit = fp->buf + st_size + 2; fp->cur = fp->buf; @@ -5639,7 +5640,7 @@ finclude (pfile, f, fname, system_header_p, dirptr) fp->rlimit = fp->buf + length; if (length < 0) goto nope; } - else if (S_ISDIR (st_mode)) { + else if (S_ISDIR (st.st_mode)) { cpp_error (pfile, "directory `%s' specified in #include", fname); close (f); return 0; @@ -5717,7 +5718,7 @@ finclude (pfile, f, fname, system_header_p, dirptr) /* This is called after options have been processed. * Check options for consistency, and setup for processing input * from the file named FNAME. (Use standard input if FNAME==NULL.) - * Return 1 on succes, 0 on failure. + * Return 1 on success, 0 on failure. */ int @@ -6745,6 +6746,11 @@ cpp_handle_options (pfile, argc, argv) #endif break; + case 'r': + if (!strcmp (argv[i], "-remap")) + opts->remap = 1; + break; + case 'u': /* Sun compiler passes undocumented switch "-undef". Let's assume it means to inhibit the predefined symbols. */ @@ -7205,23 +7211,6 @@ free_token_list (tokens) } } -/* Get the file-mode and data size of the file open on FD - and store them in *MODE_POINTER and *SIZE_POINTER. */ - -static int -file_size_and_mode (fd, mode_pointer, size_pointer) - int fd; - int *mode_pointer; - long int *size_pointer; -{ - struct stat sbuf; - - if (fstat (fd, &sbuf) < 0) return (-1); - if (mode_pointer) *mode_pointer = sbuf.st_mode; - if (size_pointer) *size_pointer = sbuf.st_size; - return 0; -} - /* Read LEN bytes at PTR from descriptor DESC, for file FILENAME, retrying if necessary. If MAX_READ_LEN is defined, read at most that bytes at a time. Return a negative value if an error occurs, diff --git a/gcc/cpplib.h b/gcc/cpplib.h index 385feed778f..346ce44037d 100644 --- a/gcc/cpplib.h +++ b/gcc/cpplib.h @@ -179,7 +179,7 @@ struct cpp_reader { /* A buffer used for both for cpp_get_token's output, and also internally. */ unsigned char *token_buffer; - /* Alocated size of token_buffer. CPP_RESERVE allocates space. */ + /* Allocated size of token_buffer. CPP_RESERVE allocates space. */ int token_buffer_size; /* End of the written part of token_buffer. */ unsigned char *limit; @@ -410,6 +410,10 @@ struct cpp_options { char no_output; + /* Nonzero means we should look for header.gcc files that remap file + names. */ + char remap; + /* Nonzero means don't output line number information. */ char no_line_commands; @@ -487,7 +491,7 @@ struct cpp_options { int debug_output; /* Nonzero means pass #include lines through to the output, - even if they are ifdeffed out. */ + even if they are ifdefed out. */ int dump_includes; /* Pending -D, -U and -A options, in reverse order. */ diff --git a/gcc/crtstuff.c b/gcc/crtstuff.c index bcb5cc50bf0..4fbc9e4f9fb 100644 --- a/gcc/crtstuff.c +++ b/gcc/crtstuff.c @@ -1,6 +1,6 @@ /* Specialized bits of code needed to support construction and destruction of file-scope objects in C++ code. - Copyright (C) 1991, 1994, 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com). This file is part of GNU CC. @@ -53,6 +53,8 @@ Boston, MA 02111-1307, USA. */ #include "tm.h" #include "defaults.h" +#include +#include "frame.h" /* Provide default definitions for the pseudo-ops used to switch to the .ctors and .dtors sections. @@ -160,7 +162,8 @@ fini_dummy () static void frame_dummy () { - __register_frame (__EH_FRAME_BEGIN__); + static struct object object; + __register_frame (__EH_FRAME_BEGIN__, &object); } static void @@ -322,7 +325,7 @@ init_dummy () #endif asm (TEXT_SECTION_ASM_OP); -/* This is a kludge. The i386 Linux dynamic linker needs ___brk_addr, +/* This is a kludge. The i386 GNU/Linux dynamic linker needs ___brk_addr, __environ and atexit (). We have to make sure they are in the .dynsym section. We accomplish it by making a dummy call here. This code is never reached. */ diff --git a/gcc/cse.c b/gcc/cse.c index 11138cfd42b..2436c057e83 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA. */ #include "real.h" #include "insn-config.h" #include "recog.h" +#include "expr.h" #include @@ -3507,6 +3508,10 @@ simplify_binary_operation (code, mode, op0, op1) f1 = real_value_truncate (mode, f1); #ifdef REAL_ARITHMETIC +#ifndef REAL_INFINITY + if (code == DIV && REAL_VALUES_EQUAL (f1, dconst0)) + return 0; +#endif REAL_ARITHMETIC (value, rtx_to_tree_code (code), f0, f1); #else switch (code) @@ -4886,6 +4891,10 @@ fold_rtx (x, insn) since they are used only for lists of args in a function call's REG_EQUAL note. */ case EXPR_LIST: + /* Changing anything inside an ADDRESSOF is incorrect; we don't + want to (e.g.,) make (addressof (const_int 0)) just because + the location is known to be zero. */ + case ADDRESSOF: return x; #ifdef HAVE_cc0 @@ -5136,7 +5145,7 @@ fold_rtx (x, insn) && GET_CODE (XEXP (addr, 1)) == SYMBOL_REF) base = XEXP (addr, 1); else if (GET_CODE (addr) == ADDRESSOF) - XEXP (x, 0) = addr; + return change_address (x, VOIDmode, addr); /* If this is a constant pool reference, we can fold it into its constant to allow better value tracking. */ @@ -6537,7 +6546,7 @@ cse_insn (insn, in_libcall_block) a pseudo that is set more than once, do not record SRC. Using SRC as a replacement for anything else will be incorrect in that situation. Note that this usually occurs only for stack slots, - in which case all the RTL would be refering to SRC, so we don't + in which case all the RTL would be referring to SRC, so we don't lose any optimization opportunities by not having SRC in the hash table. */ diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 5fc0ffb8b8e..92557685b31 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -501,7 +501,9 @@ dbxout_start_new_source_file (filename) n->file_number = next_file_number++; n->next_type_number = 1; current_file = n; - fprintf (asmfile, "%s \"%s\",%d,0,0,0\n", ASM_STABS_OP, filename, N_BINCL); + fprintf (asmfile, "%s ", ASM_STABS_OP); + output_quoted_string (asmfile, filename); + fprintf (asmfile, ",%d,0,0,0\n", N_BINCL); #endif } diff --git a/gcc/dwarf2.h b/gcc/dwarf2.h index 535c8afc9eb..db19904802c 100644 --- a/gcc/dwarf2.h +++ b/gcc/dwarf2.h @@ -26,6 +26,9 @@ by UNIX International. Copies of this specification are available from UNIX International, 20 Waterview Boulevard, Parsippany, NJ, 07054. */ +/* This file is shared between GCC and GDB, and should not contain + prototypes. */ + /* Tag names and codes. */ enum dwarf_tag @@ -441,8 +444,8 @@ enum dwarf_inline_attribute DW_INL_declared_inlined = 3 }; -/* descriminant lists */ -enum dwarf_descrim_list +/* discriminant lists */ +enum dwarf_discrim_list { DW_DSC_label = 0, DW_DSC_range = 1 @@ -543,49 +546,3 @@ enum dwarf_macinfo_record_type DW_MACINFO_end_file = 4, DW_MACINFO_vendor_ext = 255 }; - -/* Interface of the DWARF2 unwind info support. */ - -/* Decide whether we want to emit frame unwind information for the current - translation unit. */ - -extern int dwarf2out_do_frame PROTO((void)); - -/* Generate a new label for the CFI info to refer to. */ - -extern char *dwarf2out_cfi_label PROTO((void)); - -/* Entry point to update the canonical frame address (CFA). */ - -extern void dwarf2out_def_cfa PROTO((char *, unsigned, long)); - -/* Add the CFI for saving a register window. */ - -extern void dwarf2out_window_save PROTO((char *)); - -/* Add a CFI to update the running total of the size of arguments pushed - onto the stack. */ - -extern void dwarf2out_args_size PROTO((char *, long)); - -/* Entry point for saving a register to the stack. */ - -extern void dwarf2out_reg_save PROTO((char *, unsigned, long)); - -/* Entry point for saving the return address in the stack. */ - -extern void dwarf2out_return_save PROTO((char *, long)); - -/* Entry point for saving the return address in a register. */ - -extern void dwarf2out_return_reg PROTO((char *, unsigned)); - -/* Output a marker (i.e. a label) for the beginning of a function, before - the prologue. */ - -extern void dwarf2out_begin_prologue PROTO((void)); - -/* Output a marker (i.e. a label) for the absolute end of the generated - code for a function definition. */ - -extern void dwarf2out_end_epilogue PROTO((void)); diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ac1f2285fee..c4b47c85a89 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -250,12 +250,14 @@ static unsigned reg_number PROTO((rtx)); #endif #define CIE_AFTER_SIZE_LABEL "LSCIE" #define CIE_END_LABEL "LECIE" +#define CIE_LENGTH_LABEL "LLCIE" #define FDE_AFTER_SIZE_LABEL "LSFDE" #define FDE_END_LABEL "LEFDE" +#define FDE_LENGTH_LABEL "LLFDE" /* Definitions of defaults for various types of primitive assembly language output operations. These may be overridden from within the tm.h file, - but typically, that is unecessary. */ + but typically, that is unnecessary. */ #ifndef ASM_OUTPUT_SECTION #define ASM_OUTPUT_SECTION(FILE, SECTION) \ @@ -372,6 +374,13 @@ static unsigned reg_number PROTO((rtx)); } while (0) #endif +#ifndef ASM_OUTPUT_DWARF_VALUE4 +#define ASM_OUTPUT_DWARF_VALUE4(FILE,LABEL) \ + do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \ + assemble_name (FILE, LABEL); \ + } while (0) +#endif + #else /* UNALIGNED_INT_ASM_OP */ /* We don't have unaligned support, let's hope the normal output works for @@ -407,10 +416,27 @@ static unsigned reg_number PROTO((rtx)); #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \ assemble_integer (GEN_INT (VALUE), 4, 1) +#define ASM_OUTPUT_DWARF_VALUE4(FILE,LABEL) \ + assemble_integer (gen_rtx (SYMBOL_REF, Pmode, LABEL), 4, 1) + #endif /* UNALIGNED_INT_ASM_OP */ +#ifdef SET_ASM_OP +#ifndef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL +#define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \ + do { fprintf ((FILE), "\t%s\t", SET_ASM_OP); \ + assemble_name (FILE, SY); \ + fprintf ((FILE), ","); \ + assemble_name (FILE, HI); \ + fprintf ((FILE), "-"); \ + assemble_name (FILE, LO); \ + fprintf ((FILE), "\n"); \ + } while (0) +#endif +#endif /* SET_ASM_OP */ + /* This is similar to the default ASM_OUTPUT_ASCII, except that no trailing - newline is produced. When flag_debug_asm is asserted, we add commnetary + newline is produced. When flag_debug_asm is asserted, we add commentary at the end of the line, so we must avoid output of a newline here. */ #ifndef ASM_OUTPUT_DWARF_STRING #define ASM_OUTPUT_DWARF_STRING(FILE,P) \ @@ -1172,8 +1198,9 @@ dwarf2out_frame_debug (insn) assert (XEXP (src, 1) == stack_pointer_rtx); assert (GET_CODE (XEXP (src, 0)) == REG && REGNO (XEXP (src, 0)) == cfa_temp_reg); + assert (cfa_reg == STACK_POINTER_REGNUM); cfa_store_reg = REGNO (dest); - cfa_store_offset -= cfa_temp_value; + cfa_store_offset = cfa_offset - cfa_temp_value; } break; @@ -1486,6 +1513,9 @@ output_call_frame_info (for_eh) register dw_cfi_ref cfi; unsigned long fde_pad; char l1[20], l2[20]; +#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL + char ld[20]; +#endif /* Do we want to include a pointer to the exception table? */ int eh_ptr = for_eh && exception_table_p (); @@ -1493,7 +1523,7 @@ output_call_frame_info (for_eh) fputc ('\n', asm_out_file); /* We're going to be generating comments, so turn on app. */ - if (flag_verbose_asm) + if (flag_debug_asm) app_enable (); if (for_eh) @@ -1504,6 +1534,7 @@ output_call_frame_info (for_eh) tree label = get_file_function_name ('F'); data_section (); + ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); #endif @@ -1515,10 +1546,18 @@ output_call_frame_info (for_eh) /* Output the CIE. */ ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh); ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh); +#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL + ASM_GENERATE_INTERNAL_LABEL (ld, CIE_LENGTH_LABEL, for_eh); + if (for_eh) + ASM_OUTPUT_DWARF_VALUE4 (asm_out_file, ld); + else + ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld); +#else if (for_eh) ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1); else ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1); +#endif if (flag_debug_asm) fprintf (asm_out_file, "\t%s Length of Common Information Entry", ASM_COMMENT_START); @@ -1526,12 +1565,18 @@ output_call_frame_info (for_eh) fputc ('\n', asm_out_file); ASM_OUTPUT_LABEL (asm_out_file, l1); - ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID); + if (for_eh) + /* Now that the CIE pointer is PC-relative for EH, + use 0 to identify the CIE. */ + ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0); + else + ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID); + if (flag_debug_asm) fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START); fputc ('\n', asm_out_file); - if (for_eh ? PTR_SIZE == 8 : DWARF_OFFSET_SIZE == 8) + if (! for_eh && DWARF_OFFSET_SIZE == 8) { ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID); fputc ('\n', asm_out_file); @@ -1544,11 +1589,25 @@ output_call_frame_info (for_eh) fputc ('\n', asm_out_file); if (eh_ptr) { - /* The FDE contains a pointer - to the exception region info for the frame. */ - ASM_OUTPUT_DWARF_STRING (asm_out_file, "e"); + /* The CIE contains a pointer to the exception region info for the + frame. Make the augmentation string three bytes (including the + trailing null) so the pointer is 4-byte aligned. The Solaris ld + can't handle unaligned relocs. */ if (flag_debug_asm) - fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START); + { + ASM_OUTPUT_DWARF_STRING (asm_out_file, "eh"); + fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START); + } + else + { + ASM_OUTPUT_ASCII (asm_out_file, "eh", 3); + } + fputc ('\n', asm_out_file); + + ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__"); + if (flag_debug_asm) + fprintf (asm_out_file, "\t%s pointer to exception region info", + ASM_COMMENT_START); } else { @@ -1581,6 +1640,9 @@ output_call_frame_info (for_eh) /* Pad the CIE out to an address sized boundary. */ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ASM_OUTPUT_LABEL (asm_out_file, l2); +#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL + ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1); +#endif /* Loop through all of the FDE's. */ for (i = 0; i < fde_table_in_use; ++i) @@ -1589,17 +1651,25 @@ output_call_frame_info (for_eh) ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i*2); ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i*2); +#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL + ASM_GENERATE_INTERNAL_LABEL (ld, FDE_LENGTH_LABEL, for_eh + i*2); + if (for_eh) + ASM_OUTPUT_DWARF_VALUE4 (asm_out_file, ld); + else + ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld); +#else if (for_eh) ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1); else ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1); +#endif if (flag_debug_asm) fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START); fputc ('\n', asm_out_file); ASM_OUTPUT_LABEL (asm_out_file, l1); if (for_eh) - ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__FRAME_BEGIN__"); + ASM_OUTPUT_DWARF_DELTA (asm_out_file, l1, "__FRAME_BEGIN__"); else ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (FRAME_SECTION)); if (flag_debug_asm) @@ -1617,16 +1687,6 @@ output_call_frame_info (for_eh) fprintf (asm_out_file, "\t%s FDE address range", ASM_COMMENT_START); fputc ('\n', asm_out_file); - if (eh_ptr) - { - /* For now, a pointer to the translation unit's info will do. - ??? Eventually this should point to the function's info. */ - ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__"); - if (flag_debug_asm) - fprintf (asm_out_file, "\t%s pointer to exception region info", - ASM_COMMENT_START); - fputc ('\n', asm_out_file); - } /* Loop through the Call Frame Instructions associated with this FDE. */ @@ -1637,6 +1697,9 @@ output_call_frame_info (for_eh) /* Pad the FDE out to an address sized boundary. */ ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); ASM_OUTPUT_LABEL (asm_out_file, l2); +#ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL + ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1); +#endif } #ifndef EH_FRAME_SECTION if (for_eh) @@ -1653,7 +1716,7 @@ output_call_frame_info (for_eh) #endif /* Turn off app to make assembly quicker. */ - if (flag_verbose_asm) + if (flag_debug_asm) app_disable (); } @@ -1821,7 +1884,7 @@ typedef struct dw_fp_struct dw_float_const; /* Each entry in the line_info_table maintains the file and - line nuber associated with the label generated for that + line number associated with the label generated for that entry. The label gives the PC value associated with the line number entry. */ @@ -1842,7 +1905,7 @@ typedef struct dw_separate_line_info_struct } dw_separate_line_info_entry; -/* The dw_val_node describes an attibute's value, as it is +/* The dw_val_node describes an attribute's value, as it is represented internally. */ typedef struct dw_val_struct @@ -2035,7 +2098,7 @@ static unsigned next_block_number = 2; /* A pointer to the base of a table of references to DIE's that describe declarations. The table is indexed by DECL_UID() which is a unique - number, indentifying each decl. */ + number identifying each decl. */ static dw_die_ref *decl_die_table; /* Number of elements currently allocated for the decl_die_table. */ @@ -2058,7 +2121,7 @@ static tree *decl_scope_table; /* Number of elements currently allocated for the decl_scope_table. */ static unsigned decl_scope_table_allocated; -/* Current level of nesting of declataion scopes. */ +/* Current level of nesting of declaration scopes. */ static unsigned decl_scope_depth; /* Size (in elements) of increments by which we may expand the @@ -2204,7 +2267,7 @@ static void add_AT_addr PROTO((dw_die_ref, enum dwarf_attribute, char *)); static void add_AT_lbl_id PROTO((dw_die_ref, enum dwarf_attribute, char *)); -static void add_AT_setion_offset PROTO((dw_die_ref, +static void add_AT_section_offset PROTO((dw_die_ref, enum dwarf_attribute, char *)); static int is_extern_subr_die PROTO((dw_die_ref)); static dw_attr_ref get_AT PROTO((dw_die_ref, @@ -2235,7 +2298,7 @@ static void add_loc_descr PROTO((dw_loc_descr_ref *, static void print_spaces PROTO((FILE *)); static void print_die PROTO((dw_die_ref, FILE *)); static void print_dwarf_line_table PROTO((FILE *)); -static void add_sibling_atttributes PROTO((dw_die_ref)); +static void add_sibling_attributes PROTO((dw_die_ref)); static void build_abbrev_table PROTO((dw_die_ref)); static unsigned long size_of_string PROTO((char *)); static unsigned long size_of_loc_descr PROTO((dw_loc_descr_ref)); @@ -2362,7 +2425,7 @@ static unsigned lookup_filename PROTO((char *)); #define STR_SECTION ".debug_str" #endif -/* Standerd ELF section names for compiled code and data. */ +/* Standard ELF section names for compiled code and data. */ #ifndef TEXT_SECTION #define TEXT_SECTION ".text" #endif @@ -2573,7 +2636,7 @@ addr_to_string (x) return xstrdup (buf); } -/* Test if rtl node points to a psuedo register. */ +/* Test if rtl node points to a pseudo register. */ static inline int is_pseudo_reg (rtl) @@ -4011,7 +4074,7 @@ print_spaces (outfile) fprintf (outfile, "%*s", print_indent, ""); } -/* Print the information assoaciated with a given DIE, and its children. +/* Print the information associated with a given DIE, and its children. This routine is a debugging aid only. */ static void @@ -4460,10 +4523,10 @@ size_of_die (die) return size; } -/* Size the debgging information associted with a given DIE. +/* Size the debugging information associated with a given DIE. Visits the DIE's children recursively. Updates the global variable next_die_offset, on each time through. Uses the - current value of next_die_offset to updete the die_offset + current value of next_die_offset to update the die_offset field in each DIE. */ static void @@ -4693,7 +4756,7 @@ size_of_pubnames () return size; } -/* Return the size of the information in the .debug_aranges seciton. */ +/* Return the size of the information in the .debug_aranges section. */ static unsigned long size_of_aranges () @@ -5139,7 +5202,12 @@ output_die (die) break; case dw_val_class_str: - ASM_OUTPUT_DWARF_STRING (asm_out_file, a->dw_attr_val.v.val_str); + if (flag_debug_asm) + ASM_OUTPUT_DWARF_STRING (asm_out_file, a->dw_attr_val.v.val_str); + else + ASM_OUTPUT_ASCII (asm_out_file, + a->dw_attr_val.v.val_str, + strlen (a->dw_attr_val.v.val_str) + 1); break; default: @@ -5284,9 +5352,15 @@ output_pubnames () fputc ('\n', asm_out_file); - ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name); if (flag_debug_asm) - fprintf (asm_out_file, "%s external name", ASM_COMMENT_START); + { + ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name); + fprintf (asm_out_file, "%s external name", ASM_COMMENT_START); + } + else + { + ASM_OUTPUT_ASCII (asm_out_file, pub->name, strlen (pub->name) + 1); + } fputc ('\n', asm_out_file); } @@ -5511,10 +5585,18 @@ output_line_info () for (ft_index = 1; ft_index < file_table_in_use; ++ft_index) { - ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]); if (flag_debug_asm) - fprintf (asm_out_file, "%s File Entry: 0x%x", - ASM_COMMENT_START, ft_index); + { + ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]); + fprintf (asm_out_file, "%s File Entry: 0x%x", + ASM_COMMENT_START, ft_index); + } + else + { + ASM_OUTPUT_ASCII (asm_out_file, + file_table[ft_index], + strlen (file_table[ft_index]) + 1); + } fputc ('\n', asm_out_file); @@ -6294,7 +6376,7 @@ mem_loc_descriptor (rtl) return mem_loc_result; } -/* Return a descriptor that describes the concatination of two locations. +/* Return a descriptor that describes the concatenation of two locations. This is typically a complex variable. */ static dw_loc_descr_ref @@ -6811,7 +6893,7 @@ add_location_or_const_value_attribute (die, decl) get valid non-NULL DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these values for inlined instances of inline function parameters, so when we see such cases, we are - just SOL (shit-out-of-luck) for the time being (until integrate.c + just out-of-luck for the time being (until integrate.c gets fixed). */ /* Use DECL_RTL as the "location" unless we find something better. */ @@ -7431,7 +7513,7 @@ decl_start_label (decl) return fnname; } -/* These routines generate the internnal representation of the DIE's for +/* These routines generate the internal representation of the DIE's for the compilation unit. Debugging information is collected by walking the declaration trees passed in from dwarf2out_decl(). */ @@ -8421,7 +8503,7 @@ gen_inheritance_die (binfo, context_die) add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected); } -/* Genearate a DIE for a class member. */ +/* Generate a DIE for a class member. */ static void gen_member_die (type, context_die) @@ -8627,6 +8709,13 @@ gen_type_die (type, context_die) case POINTER_TYPE: case REFERENCE_TYPE: + /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This + ensures that the gen_type_die recursion will terminate even if the + type is recursive. Recursive types are possible in Ada. */ + /* ??? We could perhaps do this for all types before the switch + statement. */ + TREE_ASM_WRITTEN (type) = 1; + /* For these types, all that is required is that we output a DIE (or a set of DIEs) to represent the "basis" type. */ gen_type_die (TREE_TYPE (type), context_die); @@ -9100,11 +9189,11 @@ dwarf2out_decl (decl) /* What we would really like to do here is to filter out all mere file-scope declarations of file-scope functions which are never referenced later within this translation unit (and keep all of ones - that *are* referenced later on) but we aren't clarvoiant, so we have + that *are* referenced later on) but we aren't clairvoyant, so we have no idea which functions will be referenced in the future (i.e. later on within the current translation unit). So here we just ignore all file-scope function declarations which are not also definitions. If - and when the debugger needs to know something about these funcstion, + and when the debugger needs to know something about these functions, it wil have to hunt around and find the DWARF information associated with the definition of the function. Note that we can't just check `DECL_EXTERNAL' to find out which FUNCTION_DECL nodes represent diff --git a/gcc/dwarfout.c b/gcc/dwarfout.c index cdeed4abc60..e0f6001c195 100644 --- a/gcc/dwarfout.c +++ b/gcc/dwarfout.c @@ -49,10 +49,27 @@ extern time_t time (); #endif /* !defined(POSIX) */ #endif /* defined(DWARF_TIMESTAMPS) */ +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif + extern char *getpwd (); +#ifdef NEED_DECLARATION_INDEX extern char *index (); +#endif + +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); +#endif /* IMPORTANT NOTE: Please see the file README.DWARF for important details regarding the GNU implementation of Dwarf. */ @@ -357,7 +374,7 @@ static inline void low_pc_attribute PROTO((char *)); static inline void high_pc_attribute PROTO((char *)); static inline void body_begin_attribute PROTO((char *)); static inline void body_end_attribute PROTO((char *)); -static inline void langauge_attribute PROTO((unsigned)); +static inline void language_attribute PROTO((unsigned)); static inline void member_attribute PROTO((tree)); static inline void string_length_attribute PROTO((tree)); static inline void comp_dir_attribute PROTO((char *)); @@ -417,7 +434,7 @@ static void output_block PROTO((tree, int)); static void output_decls_for_scope PROTO((tree, int)); static void output_decl PROTO((tree, tree)); static void shuffle_filename_entry PROTO((filename_entry *)); -static void geneate_new_sfname_entry PROTO((void)); +static void generate_new_sfname_entry PROTO((void)); static unsigned lookup_filename PROTO((char *)); static void generate_srcinfo_entry PROTO((unsigned, unsigned)); static void generate_macinfo_entry PROTO((char *, char *)); @@ -2367,7 +2384,7 @@ location_or_const_value_attribute (decl) shouldn't be happening. All PARM_DECL nodes should get valid non-NULL DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these values for inlined instances of inline function parameters, so - when we see such cases, we are just SOL (shit-out-of-luck) for the time + when we see such cases, we are just out-of-luck for the time being (until integrate.c gets fixed). */ @@ -4179,7 +4196,22 @@ output_type (type, containing_scope) type = type_main_variant (type); if (TREE_ASM_WRITTEN (type)) - return; + { + if (finalizing && AGGREGATE_TYPE_P (type)) + { + register tree member; + + /* Some of our nested types might not have been defined when we + were written out before; force them out now. */ + + for (member = TYPE_FIELDS (type); member; + member = TREE_CHAIN (member)) + if (TREE_CODE (member) == TYPE_DECL + && ! TREE_ASM_WRITTEN (TREE_TYPE (member))) + output_type (TREE_TYPE (member), containing_scope); + } + return; + } /* If this is a nested type whose containing class hasn't been written out yet, writing it out will cover this one, too. */ diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index f5eaa2d4c11..d4b6a79a9a2 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -258,6 +258,10 @@ extern int rtx_equal_function_value_matters; whether we actually emitted it or not. */ extern char *emit_filename; extern int emit_lineno; + +static rtx make_jump_insn_raw PROTO((rtx)); +static rtx make_call_insn_raw PROTO((rtx)); +static rtx find_line_node PROTO((rtx)); /* rtx gen_rtx (code, mode, [element1, ..., elementn]) ** diff --git a/gcc/enquire.c b/gcc/enquire.c index a0430c46754..178d029d192 100644 --- a/gcc/enquire.c +++ b/gcc/enquire.c @@ -782,7 +782,7 @@ int main(argc, argv) int argc; char *argv[]; { size/=2; } - Vprintf("%sMemory mallocatable ~= %ld Kbytes%s\n", + Vprintf("%sMemory allocable ~= %ld Kbytes%s\n", co, (total+511)/512, oc); } #endif diff --git a/gcc/except.c b/gcc/except.c index 7deb1a6de54..0e93d3c693e 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -23,7 +23,7 @@ Boston, MA 02111-1307, USA. */ /* An exception is an event that can be signaled from within a function. This event can then be "caught" or "trapped" by the callers of this function. This potentially allows program flow to - be transferred to any arbitrary code assocated with a function call + be transferred to any arbitrary code associated with a function call several levels up the stack. The intended use for this mechanism is for signaling "exceptional @@ -71,7 +71,7 @@ Boston, MA 02111-1307, USA. */ perform tasks such as destruction of objects allocated on the stack. - In the current implementaion, cleanups are handled by allocating an + In the current implementation, cleanups are handled by allocating an exception region for the area that the cleanup is designated for, and the handler for the region performs the cleanup and then rethrows the exception to the outer exception region. From the @@ -279,7 +279,7 @@ Boston, MA 02111-1307, USA. */ when the unwinder isn't needed. __unwind_function is used as an action of last resort. If no other method can be used for unwinding, __unwind_function is used. If it cannot unwind, it - should call __teminate. + should call __terminate. By default, if the target-specific backend doesn't supply a definition for __unwind_function and doesn't support DWARF2_UNWIND_INFO, inlined @@ -377,7 +377,7 @@ Boston, MA 02111-1307, USA. */ for all the machine specific details. There is no variable context of a throw, just the one implied by the dynamic handler stack pointed to by the dynamic handler chain. There is no exception - table, and no calls to __register_excetpions. __sjthrow is used + table, and no calls to __register_exceptions. __sjthrow is used instead of __throw, and it works by using the dynamic handler chain, and longjmp. -fasynchronous-exceptions has no effect, as the elimination of trivial exception regions is not yet performed. @@ -444,7 +444,7 @@ rtx current_function_dhc; rtx current_function_dcc; -/* A stack used for keeping track of the currectly active exception +/* A stack used for keeping track of the currently active exception handling region. As each exception region is started, an entry describing the region is pushed onto this stack. The current region can be found by looking at the top of the stack, and as we @@ -484,12 +484,15 @@ static tree protect_list; /* Keeps track of the label to resume to should one want to resume normal control flow out of a handler (instead of, say, returning to - the caller of the current function or exiting the program). Also - used as the context of a throw to rethrow an exception to the outer - exception region. */ + the caller of the current function or exiting the program). */ struct label_node *caught_return_label_stack = NULL; +/* Keeps track of the label used as the context of a throw to rethrow an + exception to the outer exception region. */ + +struct label_node *outer_context_label_stack = NULL; + /* A random data area for the front end's own use. */ struct label_node *false_label_stack = NULL; @@ -1224,6 +1227,7 @@ expand_leftover_cleanups () } } + do_pending_stack_adjust (); free (entry); } } @@ -1254,6 +1258,9 @@ expand_start_all_catch () if (! doing_eh (1)) return; + push_label_entry (&outer_context_label_stack, + ehstack.top->entry->outer_context, NULL_TREE); + /* End the try block. */ expand_eh_region_end (integer_zero_node); @@ -1261,7 +1268,7 @@ expand_start_all_catch () label = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE); /* The label for the exception handling block that we will save. - This is Lresume in the documention. */ + This is Lresume in the documentation. */ expand_label (label); if (exceptions_via_longjmp == 0) @@ -1340,6 +1347,7 @@ expand_start_all_catch () expand_internal_throw (entry->outer_context); } } + do_pending_stack_adjust (); free (entry); } } @@ -1372,7 +1380,7 @@ expand_end_all_catch () thrown from) so that the outer EH region can then try to process the exception. */ - expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack))); + expand_internal_throw (outer_context_label_stack->u.rlabel); } /* Now we have the complete catch sequence. */ @@ -1382,6 +1390,7 @@ expand_end_all_catch () /* This level of catch blocks is done, so set up the successful catch jump label for the next layer of catch blocks. */ pop_label_entry (&caught_return_label_stack); + pop_label_entry (&outer_context_label_stack); /* Add the new sequence of catches to the main one for this function. */ push_to_sequence (catch_clauses); diff --git a/gcc/except.h b/gcc/except.h index 5a65100d4aa..ac46fa4478f 100644 --- a/gcc/except.h +++ b/gcc/except.h @@ -227,6 +227,11 @@ extern void check_exception_handler_labels PROTO((void)); extern struct label_node *caught_return_label_stack; +/* Keeps track of the label used as the context of a throw to rethrow an + exception to the outer exception region. */ + +extern struct label_node *outer_context_label_stack; + /* A random area used for purposes elsewhere. */ extern struct label_node *false_label_stack; diff --git a/gcc/explow.c b/gcc/explow.c index 7852799e04e..fd75ecf331c 100644 --- a/gcc/explow.c +++ b/gcc/explow.c @@ -79,10 +79,15 @@ plus_constant_wide (x, c) if (GET_CODE (XEXP (x, 0)) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0))) { + /* Any rtl we create here must go in a saveable obstack, since + we might have been called from within combine. */ + push_obstacks_nochange (); + rtl_in_saveable_obstack (); tem = force_const_mem (GET_MODE (x), plus_constant (get_pool_constant (XEXP (x, 0)), c)); + pop_obstacks (); if (memory_address_p (GET_MODE (tem), XEXP (tem, 0))) return tem; } @@ -339,7 +344,7 @@ convert_memory_address (to_mode, x) case PLUS: case MULT: /* For addition the second operand is a small constant, we can safely - permute the converstion and addition operation. We can always safely + permute the conversion and addition operation. We can always safely permute them if we are making the address narrower. In addition, always permute the operations if this is a constant. */ if (GET_MODE_SIZE (to_mode) < GET_MODE_SIZE (from_mode) diff --git a/gcc/expmed.c b/gcc/expmed.c index eb4e147dedd..f419f24ae41 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -748,6 +748,8 @@ store_split_bit_field (op0, bitsize, bitpos, value, align) ? GET_MODE (value) : word_mode, value)); } + else if (GET_CODE (value) == ADDRESSOF) + value = copy_to_reg (value); while (bitsdone < bitsize) { diff --git a/gcc/expr.c b/gcc/expr.c index c7ab84cc8c6..4534ef5a9b5 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -110,9 +110,13 @@ static rtx saveregs_value; /* Similarly for __builtin_apply_args. */ static rtx apply_args_value; +/* Don't check memory usage, since code is being emitted to check a memory + usage. Used when flag_check_memory_usage is true, to avoid infinite + recursion. */ +static int in_check_memory_usage; + /* This structure is used by move_by_pieces to describe the move to be performed. */ - struct move_by_pieces { rtx to; @@ -2551,10 +2555,11 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, move_by_pieces (gen_rtx (MEM, BLKmode, gen_push_operand ()), xinner, INTVAL (size) - used, align); - if (flag_check_memory_usage) + if (flag_check_memory_usage && ! in_check_memory_usage) { rtx temp; + in_check_memory_usage = 1; temp = get_push_address (INTVAL(size) - used); if (GET_CODE (x) == MEM && AGGREGATE_TYPE_P (type)) emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3, @@ -2567,7 +2572,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, temp, ptr_mode, GEN_INT (INTVAL(size) - used), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + in_check_memory_usage = 0; } } else @@ -2604,10 +2611,11 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, plus_constant (gen_rtx (PLUS, Pmode, args_addr, args_so_far), skip)); - if (flag_check_memory_usage) + if (flag_check_memory_usage && ! in_check_memory_usage) { rtx target; + in_check_memory_usage = 1; target = copy_to_reg (temp); if (GET_CODE (x) == MEM && AGGREGATE_TYPE_P (type)) emit_library_call (chkr_copy_bitmap_libfunc, 1, VOIDmode, 3, @@ -2618,7 +2626,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, emit_library_call (chkr_set_right_libfunc, 1, VOIDmode, 3, target, ptr_mode, size, TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + in_check_memory_usage = 0; } /* TEMP is the address of the block. Copy the data there. */ @@ -2813,8 +2823,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, emit_move_insn (gen_rtx (MEM, mode, addr), x); - if (flag_check_memory_usage) + if (flag_check_memory_usage && ! in_check_memory_usage) { + in_check_memory_usage = 1; if (target == 0) target = get_push_address (GET_MODE_SIZE (mode)); @@ -2829,7 +2840,9 @@ emit_push_insn (x, mode, type, size, align, partial, reg, extra, target, ptr_mode, GEN_INT (GET_MODE_SIZE (mode)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); + in_check_memory_usage = 0; } } @@ -2954,6 +2967,15 @@ expand_assignment (to, from, want_value, suggest_reg) #endif } + if (TREE_CODE (to) == COMPONENT_REF + && TREE_READONLY (TREE_OPERAND (to, 1))) + { + if (offset = 0) + to_rtx = copy_rtx (to_rtx); + + RTX_UNCHANGING_P (to_rtx) = 1; + } + /* Check the access. */ if (flag_check_memory_usage && GET_CODE (to_rtx) == MEM) { @@ -2978,7 +3000,8 @@ expand_assignment (to, from, want_value, suggest_reg) emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, to_addr, ptr_mode, GEN_INT (size), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), QImode); + GEN_INT (MEMORY_USE_WO), + TYPE_MODE (integer_type_node)); } result = store_field (to_rtx, bitsize, bitpos, mode1, from, @@ -3169,16 +3192,16 @@ store_expr (exp, target, want_value) do_pending_stack_adjust (); NO_DEFER_POP; jumpifnot (TREE_OPERAND (exp, 0), lab1); - start_cleanup_deferal (); + start_cleanup_deferral (); store_expr (TREE_OPERAND (exp, 1), target, 0); - end_cleanup_deferal (); + end_cleanup_deferral (); emit_queue (); emit_jump_insn (gen_jump (lab2)); emit_barrier (); emit_label (lab1); - start_cleanup_deferal (); + start_cleanup_deferral (); store_expr (TREE_OPERAND (exp, 2), target, 0); - end_cleanup_deferal (); + end_cleanup_deferral (); emit_queue (); emit_label (lab2); OK_DEFER_POP; @@ -3309,7 +3332,8 @@ store_expr (exp, target, want_value) emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, XEXP (target, 0), ptr_mode, expr_size (exp), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), QImode); + GEN_INT (MEMORY_USE_WO), + TYPE_MODE (integer_type_node)); } /* If value was not generated in the target, store it there. @@ -3400,7 +3424,8 @@ store_expr (exp, target, want_value) emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, addr, ptr_mode, size, TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), QImode); + GEN_INT (MEMORY_USE_WO), + TYPE_MODE (integer_type_node)); #ifdef TARGET_MEM_FUNCTIONS emit_library_call (memset_libfunc, 0, VOIDmode, 3, addr, ptr_mode, @@ -3476,7 +3501,7 @@ is_zeros_p (exp) is_zeros_p (TREE_REALPART (exp)) && is_zeros_p (TREE_IMAGPART (exp)); case REAL_CST: - return REAL_VALUES_EQUAL (TREE_REAL_CST (exp), dconst0); + return REAL_VALUES_IDENTICAL (TREE_REAL_CST (exp), dconst0); case CONSTRUCTOR: if (TREE_TYPE (exp) && TREE_CODE (TREE_TYPE (exp)) == SET_TYPE) @@ -3675,7 +3700,7 @@ store_constructor (exp, target, cleared) if (contains_placeholder_p (offset)) offset = build (WITH_RECORD_EXPR, sizetype, - offset, exp); + offset, make_tree (TREE_TYPE (exp), target)); offset = size_binop (FLOOR_DIV_EXPR, offset, size_int (BITS_PER_UNIT)); @@ -4403,9 +4428,14 @@ get_inner_reference (exp, pbitsize, pbitpos, poffset, pmode, && TREE_INT_CST_HIGH (index) == 0) *pbitpos += TREE_INT_CST_LOW (index); else - offset = size_binop (PLUS_EXPR, offset, - size_binop (FLOOR_DIV_EXPR, index, - size_int (BITS_PER_UNIT))); + { + offset = size_binop (PLUS_EXPR, offset, + size_binop (FLOOR_DIV_EXPR, index, + size_int (BITS_PER_UNIT))); + + if (contains_placeholder_p (offset)) + offset = build (WITH_RECORD_EXPR, sizetype, offset, exp); + } } else if (TREE_CODE (exp) != NON_LVALUE_EXPR && ! ((TREE_CODE (exp) == NOP_EXPR @@ -5016,7 +5046,8 @@ expand_expr (exp, target, tmode, modifier) XEXP (DECL_RTL (exp), 0), ptr_mode, GEN_INT (int_size_in_bytes (type)), TYPE_MODE (sizetype), - GEN_INT (memory_usage), QImode); + GEN_INT (memory_usage), + TYPE_MODE (integer_type_node)); } /* ... fall through ... */ @@ -5471,7 +5502,8 @@ expand_expr (exp, target, tmode, modifier) op0, ptr_mode, GEN_INT (int_size_in_bytes (type)), TYPE_MODE (sizetype), - GEN_INT (memory_usage), QImode); + GEN_INT (memory_usage), + TYPE_MODE (integer_type_node)); } temp = gen_rtx (MEM, mode, op0); @@ -5725,7 +5757,8 @@ expand_expr (exp, target, tmode, modifier) to, ptr_mode, GEN_INT (size / BITS_PER_UNIT), TYPE_MODE (sizetype), - GEN_INT (memory_usage), QImode); + GEN_INT (memory_usage), + TYPE_MODE (integer_type_node)); } } @@ -6847,7 +6880,7 @@ expand_expr (exp, target, tmode, modifier) else jumpifnot (TREE_OPERAND (exp, 0), op0); - start_cleanup_deferal (); + start_cleanup_deferral (); if (binary_op && temp == 0) /* Just touch the other operand. */ expand_expr (TREE_OPERAND (binary_op, 1), @@ -6881,7 +6914,7 @@ expand_expr (exp, target, tmode, modifier) store_expr (TREE_OPERAND (exp, 1), temp, 0); jumpif (TREE_OPERAND (exp, 0), op0); - start_cleanup_deferal (); + start_cleanup_deferral (); store_expr (TREE_OPERAND (exp, 2), temp, 0); op1 = op0; } @@ -6899,7 +6932,7 @@ expand_expr (exp, target, tmode, modifier) store_expr (TREE_OPERAND (exp, 2), temp, 0); jumpifnot (TREE_OPERAND (exp, 0), op0); - start_cleanup_deferal (); + start_cleanup_deferral (); store_expr (TREE_OPERAND (exp, 1), temp, 0); op1 = op0; } @@ -6908,18 +6941,18 @@ expand_expr (exp, target, tmode, modifier) op1 = gen_label_rtx (); jumpifnot (TREE_OPERAND (exp, 0), op0); - start_cleanup_deferal (); + start_cleanup_deferral (); if (temp != 0) store_expr (TREE_OPERAND (exp, 1), temp, 0); else expand_expr (TREE_OPERAND (exp, 1), ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); - end_cleanup_deferal (); + end_cleanup_deferral (); emit_queue (); emit_jump_insn (gen_jump (op1)); emit_barrier (); emit_label (op0); - start_cleanup_deferal (); + start_cleanup_deferral (); if (temp != 0) store_expr (TREE_OPERAND (exp, 2), temp, 0); else @@ -6927,7 +6960,7 @@ expand_expr (exp, target, tmode, modifier) ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); } - end_cleanup_deferal (); + end_cleanup_deferral (); emit_queue (); emit_label (op1); @@ -8851,7 +8884,8 @@ expand_builtin (exp, target, subtarget, mode, ignore) if (flag_check_memory_usage) emit_library_call (chkr_check_str_libfunc, 1, VOIDmode, 2, src_rtx, ptr_mode, - GEN_INT (MEMORY_USE_RO), QImode); + GEN_INT (MEMORY_USE_RO), + TYPE_MODE (integer_type_node)); char_rtx = const0_rtx; char_mode = insn_operand_mode[(int)icode][2]; @@ -9020,7 +9054,8 @@ expand_builtin (exp, target, subtarget, mode, ignore) emit_library_call (chkr_check_addr_libfunc, 1, VOIDmode, 3, dest_rtx, ptr_mode, len_rtx, TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_WO), QImode); + GEN_INT (MEMORY_USE_WO), + TYPE_MODE (integer_type_node)); /* There could be a void* cast on top of the object. */ @@ -9594,7 +9629,14 @@ expand_builtin_apply (function, arguments, argsize) /* Push a new argument block and copy the arguments. */ do_pending_stack_adjust (); - emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX); + + /* Save the stack with nonlocal if available */ +#ifdef HAVE_save_stack_nonlocal + if (HAVE_save_stack_nonlocal) + emit_stack_save (SAVE_NONLOCAL, &old_stack_level, NULL_RTX); + else +#endif + emit_stack_save (SAVE_BLOCK, &old_stack_level, NULL_RTX); /* Push a block of memory onto the stack to store the memory arguments. Save the address in a register, and copy the memory arguments. ??? I @@ -9720,7 +9762,12 @@ expand_builtin_apply (function, arguments, argsize) CALL_INSN_FUNCTION_USAGE (call_insn) = call_fusage; /* Restore the stack. */ - emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX); +#ifdef HAVE_save_stack_nonlocal + if (HAVE_save_stack_nonlocal) + emit_stack_restore (SAVE_NONLOCAL, old_stack_level, NULL_RTX); + else +#endif + emit_stack_restore (SAVE_BLOCK, old_stack_level, NULL_RTX); /* Return the address of the result block. */ return copy_addr_to_reg (XEXP (result, 0)); @@ -9947,7 +9994,9 @@ expand_increment (exp, post, ignore) } if (icode != (int) CODE_FOR_nothing && GET_CODE (op0) == MEM) { - rtx addr = force_reg (Pmode, XEXP (op0, 0)); + rtx addr = (general_operand (XEXP (op0, 0), mode) + ? force_reg (Pmode, XEXP (op0, 0)) + : copy_to_reg (XEXP (op0, 0))); rtx temp, result; op0 = change_address (op0, VOIDmode, addr); @@ -10038,6 +10087,7 @@ preexpand_calls (exp) case RTL_EXPR: case WITH_CLEANUP_EXPR: case CLEANUP_POINT_EXPR: + case TRY_CATCH_EXPR: return; case SAVE_EXPR: @@ -10242,18 +10292,18 @@ do_jump (exp, if_false_label, if_true_label) 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_deferal (); + start_cleanup_deferral (); do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label); - end_cleanup_deferal (); + 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_deferal (); + start_cleanup_deferral (); do_jump (TREE_OPERAND (exp, 1), if_false_label, if_true_label); - end_cleanup_deferal (); + end_cleanup_deferral (); break; case COMPOUND_EXPR: @@ -10314,7 +10364,7 @@ do_jump (exp, if_false_label, if_true_label) do_jump (TREE_OPERAND (exp, 0), label1, NULL_RTX); - start_cleanup_deferal (); + start_cleanup_deferral (); /* Now the THEN-expression. */ do_jump (TREE_OPERAND (exp, 1), if_false_label ? if_false_label : drop_through_label, @@ -10327,7 +10377,7 @@ do_jump (exp, if_false_label, if_true_label) 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_deferal (); + end_cleanup_deferral (); } break; diff --git a/gcc/extend.texi b/gcc/extend.texi index 8c860138f22..aca2a5afdd5 100644 --- a/gcc/extend.texi +++ b/gcc/extend.texi @@ -2174,7 +2174,7 @@ possibly unused. GNU CC will not produce a warning for any variables of that type, even if the variable appears to do nothing. This is often the case with lock or thread classes, which are usually defined and then not referenced, but contain constructors and destructors that have -non-trivial bookeeping functions. +nontrivial bookkeeping functions. @end table diff --git a/gcc/fixinc.ptx b/gcc/fixinc.ptx index 90e1b86ed42..93a8f2c5d0e 100644 --- a/gcc/fixinc.ptx +++ b/gcc/fixinc.ptx @@ -195,7 +195,7 @@ if [ \! -z "$file_to_fix" ]; then fi fi -# /usr/include/sys/mc_param.h has an embedded asm for the cpuid intruction +# /usr/include/sys/mc_param.h has an embedded asm for the cpuid instruction # on the P5. This is not used by anything else so we ifdef it out. file=sys/mc_param.h if [ -r ${LIB}/$file ]; then @@ -224,7 +224,7 @@ if [ \! -z "$file_to_fix" ]; then fi fi -# /usr/include/sys/mc_param.h has an embedded asm for the cpuid intruction +# /usr/include/sys/mc_param.h has an embedded asm for the cpuid instruction # on the P5. This is not used by anything else so we ifdef it out. file=sys/mc_param.h if [ -r ${LIB}/$file ]; then diff --git a/gcc/fixinc.svr4 b/gcc/fixinc.svr4 index c0418b69d59..46e07ce0ac9 100755 --- a/gcc/fixinc.svr4 +++ b/gcc/fixinc.svr4 @@ -203,6 +203,7 @@ while [ $# != 0 ]; do s/__STDC__[ ][ ]*!=[ ][ ]*0/defined (__STRICT_ANSI__)/g s/__STDC__[ ][ ]*!=[ ][ ]*1/!defined (__STRICT_ANSI__)/g s/__STDC__ - 0 == 0/!defined (__STRICT_ANSI__)/g + s/__STDC__ - 0 == 1/defined (__STRICT_ANSI__)/g /^typedef[ ][ ]*[unsigned ]*long[ ][ ]*[u_]*longlong_t;/s/long/long long/ ' $2/$file > $2/$file.sed mv $2/$file.sed $2/$file diff --git a/gcc/floatlib.c b/gcc/floatlib.c index bdcdf57ddd0..55e1d4f6512 100644 --- a/gcc/floatlib.c +++ b/gcc/floatlib.c @@ -737,7 +737,7 @@ __divdf3 (double a1, double a2) if (__dcmp(x1m1,x1m2,x2m1,x2m2) < 0) { /* if x1's mantissa is less than x2's shift it left one and decrement */ - /* the exponent to accomodate the change in the mantissa */ + /* the exponent to accommodate the change in the mantissa */ x1m1 <<= 1; /* */ bit_bucket = x1m2 >> 31; /* Shift mantissa left one */ diff --git a/gcc/flow.c b/gcc/flow.c index d9a825cda60..b9c52afc965 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -1450,9 +1450,10 @@ propagate_block (old, first, last, final, significant, bnum) merged into a following memory address. */ #ifdef AUTO_INC_DEC { - register rtx x = PATTERN (insn); + register rtx x = single_set (insn); + /* Does this instruction increment or decrement a register? */ - if (final && GET_CODE (x) == SET + if (final && x != 0 && GET_CODE (SET_DEST (x)) == REG && (GET_CODE (SET_SRC (x)) == PLUS || GET_CODE (SET_SRC (x)) == MINUS) @@ -2588,7 +2589,7 @@ try_pre_increment_1 (insn) { /* Find the next use of this reg. If in same basic block, make it do pre-increment or pre-decrement if appropriate. */ - rtx x = PATTERN (insn); + rtx x = single_set (insn); HOST_WIDE_INT amount = ((GET_CODE (SET_SRC (x)) == PLUS ? 1 : -1) * INTVAL (XEXP (SET_SRC (x), 1))); int regno = REGNO (SET_DEST (x)); @@ -2598,8 +2599,7 @@ try_pre_increment_1 (insn) /* Don't do this if the reg dies, or gets set in y; a standard addressing mode would be better. */ && ! dead_or_set_p (y, SET_DEST (x)) - && try_pre_increment (y, SET_DEST (PATTERN (insn)), - amount)) + && try_pre_increment (y, SET_DEST (x), amount)) { /* We have found a suitable auto-increment and already changed insn Y to do it. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index cf55b3254b8..b5b843f4f26 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -480,7 +480,7 @@ div_and_round_double (code, uns, int overflow = 0; if ((hden == 0) && (lden == 0)) - abort (); + overflow = 1, lden = 1; /* calculate quotient sign and convert operands to unsigned. */ if (!uns) @@ -1795,8 +1795,8 @@ operand_equal_p (arg0, arg1, only_const) case REAL_CST: return (! TREE_CONSTANT_OVERFLOW (arg0) && ! TREE_CONSTANT_OVERFLOW (arg1) - && REAL_VALUES_EQUAL (TREE_REAL_CST (arg0), - TREE_REAL_CST (arg1))); + && REAL_VALUES_IDENTICAL (TREE_REAL_CST (arg0), + TREE_REAL_CST (arg1))); case COMPLEX_CST: return (operand_equal_p (TREE_REALPART (arg0), TREE_REALPART (arg1), @@ -2671,13 +2671,13 @@ simple_operand_p (exp) are converted to (unsigned) (X - 2) <= 3 - We decribe each set of comparisons as being either inside or outside + We describe each set of comparisons as being either inside or outside a range, using a variable named like IN_P, and then describe the range with a lower and upper bound. If one of the bounds is omitted, it represents either the highest or lowest value of the type. In the comments below, we represent a range by two numbers in brackets - preceeded by a "+" to designate being inside that range, or a "-" to + preceded by a "+" to designate being inside that range, or a "-" to designate being outside that range, so the condition can be inverted by flipping the prefix. An omitted bound is represented by a "-". For example, "- [-, 10]" means being outside the range starting at the lowest diff --git a/gcc/frame.c b/gcc/frame.c index 095adb08c6c..747fb9f1c40 100644 --- a/gcc/frame.c +++ b/gcc/frame.c @@ -37,8 +37,8 @@ Boston, MA 02111-1307, USA. */ #ifdef DWARF2_UNWIND_INFO #include "gansidecl.h" #include "dwarf2.h" -#include "frame.h" #include +#include "frame.h" /* Don't use `fancy_abort' here even if config.h says to use it. */ #ifdef abort @@ -47,9 +47,10 @@ Boston, MA 02111-1307, USA. */ /* Some types used by the DWARF 2 spec. */ -typedef unsigned int uword __attribute__ ((mode (SI))); -typedef unsigned int uaddr __attribute__ ((mode (pointer))); -typedef int saddr __attribute__ ((mode (pointer))); +typedef int sword __attribute__ ((mode (SI))); +typedef unsigned int uword __attribute__ ((mode (SI))); +typedef unsigned int uaddr __attribute__ ((mode (pointer))); +typedef int saddr __attribute__ ((mode (pointer))); typedef unsigned char ubyte; /* The first few fields of a CIE. The CIE_id field is 0xffffffff for a CIE, @@ -58,7 +59,7 @@ typedef unsigned char ubyte; struct dwarf_cie { uword length; - uaddr CIE_id; + sword CIE_id; ubyte version; char augmentation[0]; } __attribute__ ((packed, aligned (__alignof__ (void *)))); @@ -67,25 +68,14 @@ struct dwarf_cie { struct dwarf_fde { uword length; - struct dwarf_cie* CIE_pointer; + sword CIE_delta; void* pc_begin; uaddr pc_range; } __attribute__ ((packed, aligned (__alignof__ (void *)))); typedef struct dwarf_fde fde; -/* The representation for an "object" to be searched for frame unwind info. - For targets with named sections, one object is an executable or shared - library; for other targets, one object is one translation unit. */ - -struct object { - void *pc_begin; - void *pc_end; - fde *fde_begin; - fde ** fde_array; - size_t count; - struct object *next; -}; +/* Objects to be searched for frame unwind info. */ static struct object *objects; @@ -93,6 +83,7 @@ static struct object *objects; struct cie_info { char *augmentation; + void *eh_ptr; int code_align; int data_align; unsigned ra_regno; @@ -218,8 +209,8 @@ count_fdes (fde *this_fde) for (count = 0; this_fde->length != 0; this_fde = next_fde (this_fde)) { - /* Skip CIEs. */ - if ((uaddr)(this_fde->CIE_pointer) == (uaddr)-1) + /* Skip CIEs and linked once FDE entries. */ + if (this_fde->CIE_delta == 0 || this_fde->pc_begin == 0) continue; ++count; @@ -238,8 +229,8 @@ add_fdes (fde *this_fde, fde **array, size_t *i_ptr, for (; this_fde->length != 0; this_fde = next_fde (this_fde)) { - /* Skip CIEs. */ - if ((uaddr)(this_fde->CIE_pointer) == (uaddr)-1) + /* Skip CIEs and linked once FDE entries. */ + if (this_fde->CIE_delta == 0 || this_fde->pc_begin == 0) continue; fde_insert (array, i++, this_fde); @@ -333,6 +324,12 @@ find_fde (void *pc) return 0; } +static inline struct dwarf_cie * +get_cie (fde *f) +{ + return ((void *)&f->CIE_delta) - f->CIE_delta; +} + /* Extract any interesting information from the CIE for the translation unit F belongs to. */ @@ -342,15 +339,23 @@ extract_cie_info (fde *f, struct cie_info *c) void *p; int i; - c->augmentation = f->CIE_pointer->augmentation; + c->augmentation = get_cie (f)->augmentation; if (strcmp (c->augmentation, "") != 0 - && strcmp (c->augmentation, "e") != 0 + && strcmp (c->augmentation, "eh") != 0 && c->augmentation[0] != 'z') return 0; p = c->augmentation + strlen (c->augmentation) + 1; + if (strcmp (c->augmentation, "eh") == 0) + { + c->eh_ptr = read_pointer (p); + p += sizeof (void *); + } + else + c->eh_ptr = 0; + p = decode_uleb128 (p, &c->code_align); p = decode_sleb128 (p, &c->data_align); c->ra_regno = *(unsigned char *)p++; @@ -496,10 +501,8 @@ execute_cfa_insn (void *p, struct frame_state_internal *state, /* Called from crtbegin.o to register the unwind info for an object. */ void -__register_frame (void *begin) +__register_frame (void *begin, struct object *ob) { - struct object *ob = (struct object *) malloc (sizeof (struct object)); - ob->fde_begin = begin; ob->pc_begin = ob->pc_end = 0; @@ -515,10 +518,8 @@ __register_frame (void *begin) collect2. */ void -__register_frame_table (void *begin) +__register_frame_table (void *begin, struct object *ob) { - struct object *ob = (struct object *) malloc (sizeof (struct object)); - ob->fde_begin = begin; ob->fde_array = begin; @@ -546,7 +547,6 @@ __deregister_frame (void *begin) /* If we've run init_frame for this object, free the FDE array. */ if (ob->pc_begin) free (ob->fde_array); - free (ob); return; } @@ -577,9 +577,10 @@ __frame_state_for (void *pc_target, struct frame_state *state_in) memset (&state, 0, sizeof (state)); state.s.retaddr_column = info.ra_regno; + state.s.eh_ptr = info.eh_ptr; /* First decode all the insns in the CIE. */ - end = next_fde ((fde*) f->CIE_pointer); + end = next_fde ((fde*) get_cie (f)); while (insn < end) insn = execute_cfa_insn (insn, &state, &info, 0); @@ -591,11 +592,6 @@ __frame_state_for (void *pc_target, struct frame_state *state_in) insn = decode_uleb128 (insn, &i); insn += i; } - else if (strcmp (info.augmentation, "e") == 0) - { - state.s.eh_ptr = read_pointer (insn); - insn += sizeof (void *); - } /* Then the insns in the FDE up to our target PC. */ end = next_fde (f); diff --git a/gcc/frame.h b/gcc/frame.h index 3b380536884..c1cc7028c2d 100644 --- a/gcc/frame.h +++ b/gcc/frame.h @@ -18,10 +18,26 @@ typedef struct frame_state #define REG_SAVED_OFFSET 1 #define REG_SAVED_REG 2 +/* The representation for an "object" to be searched for frame unwind info. + For targets with named sections, one object is an executable or shared + library; for other targets, one object is one translation unit. + + A copy of this structure declaration is printed by collect2.c; + keep the copies synchronized! */ + +struct object { + void *pc_begin; + void *pc_end; + struct dwarf_fde *fde_begin; + struct dwarf_fde **fde_array; + size_t count; + struct object *next; +}; + /* Called either from crtbegin.o or a static constructor to register the unwind info for an object or translation unit, respectively. */ -extern void __register_frame (void *); +extern void __register_frame (void *, struct object *); /* Called from crtend.o to deregister the unwind info for an object. */ diff --git a/gcc/function.c b/gcc/function.c index 0f4317ea94c..3b650305d43 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1248,7 +1248,7 @@ free_temps_for_rtl_expr (t) combine_temp_slots (); } -/* Mark all temporaries ever allocated in this functon as not suitable +/* Mark all temporaries ever allocated in this function as not suitable for reuse until the current level is exited. */ void @@ -1417,7 +1417,8 @@ put_var_into_stack (decl) XEXP (reg, 0), ptr_mode, GEN_INT (GET_MODE_SIZE (GET_MODE (reg))), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); } /* Subroutine of put_var_into_stack. This puts a single pseudo reg REG @@ -1767,8 +1768,19 @@ fixup_var_refs_1 (var, promoted_mode, loc, insn, replacements) case ADDRESSOF: if (XEXP (x, 0) == var) { + /* Prevent sharing of rtl that might lose. */ + rtx sub = copy_rtx (XEXP (var, 0)); + start_sequence (); - *loc = force_operand (XEXP (var, 0), NULL_RTX); + + if (! validate_change (insn, loc, sub, 0)) + { + rtx y = force_operand (sub, NULL_RTX); + + if (! validate_change (insn, loc, y, 0)) + *loc = copy_to_reg (y); + } + emit_insn_before (gen_sequence (), insn); end_sequence (); } @@ -2381,6 +2393,7 @@ fixup_stack_1 (x, insn) || REGNO (XEXP (ad, 0)) == HARD_FRAME_POINTER_REGNUM #endif || REGNO (XEXP (ad, 0)) == STACK_POINTER_REGNUM + || REGNO (XEXP (ad, 0)) == ARG_POINTER_REGNUM || XEXP (ad, 0) == current_function_internal_arg_pointer) && GET_CODE (XEXP (ad, 1)) == CONST_INT) { @@ -2705,13 +2718,16 @@ purge_addressof_1 (loc, insn, force) if (code == ADDRESSOF && GET_CODE (XEXP (x, 0)) == MEM) { rtx insns; + /* We must create a copy of the rtx because it was created by + overwriting a REG rtx which is always shared. */ + rtx sub = copy_rtx (XEXP (XEXP (x, 0), 0)); - if (validate_change (insn, loc, XEXP (XEXP (x, 0), 0), 0)) + if (validate_change (insn, loc, sub, 0)) return; start_sequence (); if (! validate_change (insn, loc, - force_operand (XEXP (XEXP (x, 0), 0), NULL_RTX), + force_operand (sub, NULL_RTX), 0)) abort (); @@ -2723,6 +2739,8 @@ purge_addressof_1 (loc, insn, force) else if (code == MEM && GET_CODE (XEXP (x, 0)) == ADDRESSOF && ! force) { rtx sub = XEXP (XEXP (x, 0), 0); + if (GET_CODE (sub) != REG) + sub = copy_rtx (sub); if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub)) { if (! BYTES_BIG_ENDIAN && ! WORDS_BIG_ENDIAN) @@ -2912,7 +2930,7 @@ instantiate_decl (x, size, valid_only) addr = XEXP (x, 0); if (CONSTANT_P (addr) - || GET_CODE (addr) == ADDRESSOF + || (GET_CODE (addr) == ADDRESSOF && GET_CODE (XEXP (addr, 0)) == REG) || (GET_CODE (addr) == REG && (REGNO (addr) < FIRST_VIRTUAL_REGISTER || REGNO (addr) > LAST_VIRTUAL_REGISTER))) @@ -3507,7 +3525,7 @@ aggregate_value_p (exp) if (RETURN_IN_MEMORY (type)) return 1; - /* Types that are TREE_ADDRESSABLE must be contructed in memory, + /* Types that are TREE_ADDRESSABLE must be constructed in memory, and thus can't be returned in registers. */ if (TREE_ADDRESSABLE (type)) return 1; @@ -3930,7 +3948,8 @@ assign_parms (fndecl, second_time) GEN_INT (int_size_in_bytes (TREE_TYPE (parm))), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); conversion_insns = get_insns (); end_sequence (); } @@ -4061,7 +4080,7 @@ assign_parms (fndecl, second_time) /* ENTRY_PARM has been converted to PROMOTED_MODE, its mode, by the caller. We now have to convert it to NOMINAL_MODE, if different. However, PARMREG may be in - a diffent mode than NOMINAL_MODE if it is being stored + a different mode than NOMINAL_MODE if it is being stored promoted. If ENTRY_PARM is a hard register, it might be in a register @@ -4160,7 +4179,8 @@ assign_parms (fndecl, second_time) XEXP (copy, 0), ptr_mode, GEN_INT (int_size_in_bytes (type)), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); conversion_insns = get_insns (); did_conversion = 1; end_sequence (); @@ -4321,7 +4341,8 @@ assign_parms (fndecl, second_time) GEN_INT (GET_MODE_SIZE (GET_MODE (entry_parm))), TYPE_MODE (sizetype), - GEN_INT (MEMORY_USE_RW), QImode); + GEN_INT (MEMORY_USE_RW), + TYPE_MODE (integer_type_node)); conversion_insns = get_insns (); end_sequence (); diff --git a/gcc/gansidecl.h b/gcc/gansidecl.h index ebbec25fa95..c6348e8db02 100644 --- a/gcc/gansidecl.h +++ b/gcc/gansidecl.h @@ -1,4 +1,4 @@ -/* ANSI and traditional C compatability macros. +/* ANSI and traditional C compatibility macros. Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -77,4 +77,24 @@ Boston, MA 02111-1307, USA. */ #endif /* ! __STDC__ */ +#ifndef HAVE_BCOPY +#define bcopy(src,dst,len) memcpy ((dst),(src),(len)) +#endif + +#ifndef HAVE_BZERO +#define bzero(dst,len) memset ((dst),0,(len)) +#endif + +#ifndef HAVE_BCMP +#define bcmp(left,right,len) memcmp ((left),(right),(len)) +#endif + +#ifndef HAVE_RINDEX +#define rindex strrchr +#endif + +#ifndef HAVE_INDEX +#define index strchr +#endif + #endif /* ANSIDECL_H */ diff --git a/gcc/gcc.1 b/gcc/gcc.1 index 143fe5cfb4f..ec8dae670cf 100644 --- a/gcc/gcc.1 +++ b/gcc/gcc.1 @@ -3998,7 +3998,7 @@ three-way choice. .BI "\-fcall\-used\-" "reg" Treat the register named \c .I reg\c -\& as an allocatable register that is +\& as an allocable register that is clobbered by function calls. It may be allocated for temporaries or variables that do not live across a call. Functions compiled this way will not save and restore the register \c @@ -4015,7 +4015,7 @@ three-way choice. .BI "\-fcall\-saved\-" "reg" Treat the register named \c .I reg\c -\& as an allocatable register saved by +\& as an allocable register saved by functions. It may be allocated even for temporaries or variables that live across a call. Functions compiled this way will save and restore the register \c diff --git a/gcc/gcc.c b/gcc/gcc.c index 5f8fb472581..e57f5dccfb2 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -39,7 +39,7 @@ compilation is specified by a string called a "spec". */ #include #include -#ifndef NO_SYS_FILE_H +#ifdef HAVE_SYS_FILE_H #include /* May get R_OK, etc. on some systems. */ #endif @@ -150,6 +150,10 @@ extern char *sys_errlist[]; extern char *strerror(); #endif +#ifndef HAVE_KILL +#define kill(p,s) raise(s) +#endif + /* If a stage of compilation returns an exit status >= 1, compilation of that file ceases. */ @@ -2509,7 +2513,7 @@ process_command (argc, argv) #ifdef LANG_SPECIFIC_DRIVER /* Do language-specific adjustment/addition of flags. */ - lang_specific_driver (&fatal, &argc, &argv); + lang_specific_driver (fatal, &argc, &argv); #endif /* Scan argv twice. Here, the first time, just count how many switches @@ -5125,7 +5129,7 @@ validate_switches (start) } /* Check whether a particular argument was used. The first time we - canonialize the switches to keep only the ones we care about. */ + canonicalize the switches to keep only the ones we care about. */ static int used_arg (p, len) diff --git a/gcc/gcc.info b/gcc/gcc.info dissimilarity index 81% index e47bfc2f8f1..a9399168cd5 100644 --- a/gcc/gcc.info +++ b/gcc/gcc.info @@ -1,312 +1,313 @@ -This is Info file gcc.info, produced by Makeinfo version 1.68 from the -input file gcc.texi. - - This file documents the use and the internals of the GNU compiler. - - Published by the Free Software Foundation 59 Temple Place - Suite 330 -Boston, MA 02111-1307 USA - - Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free -Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided also -that the sections entitled "GNU General Public License," "Funding for -Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are -included exactly as in the original, and provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that the sections entitled "GNU General Public -License," "Funding for Free Software," and "Protect Your Freedom--Fight -`Look And Feel'", and this permission notice, may be included in -translations approved by the Free Software Foundation instead of in the -original English. - - -Indirect: -gcc.info-1: 1402 -gcc.info-2: 50964 -gcc.info-3: 96983 -gcc.info-4: 143917 -gcc.info-5: 192350 -gcc.info-6: 225344 -gcc.info-7: 249300 -gcc.info-8: 295618 -gcc.info-9: 344449 -gcc.info-10: 393730 -gcc.info-11: 441350 -gcc.info-12: 491094 -gcc.info-13: 534183 -gcc.info-14: 572713 -gcc.info-15: 622155 -gcc.info-16: 665863 -gcc.info-17: 713227 -gcc.info-18: 751237 -gcc.info-19: 796779 -gcc.info-20: 841999 -gcc.info-21: 891870 -gcc.info-22: 937562 -gcc.info-23: 982612 -gcc.info-24: 1026075 -gcc.info-25: 1072705 -gcc.info-26: 1121544 -gcc.info-27: 1162761 -gcc.info-28: 1187258 - -Tag Table: -(Indirect) -Node: Top1402 -Node: G++ and GCC3216 -Node: Invoking GCC5423 -Node: Option Summary8802 -Node: Overall Options20950 -Node: Invoking G++25513 -Node: C Dialect Options27386 -Node: C++ Dialect Options38688 -Node: Warning Options50964 -Node: Debugging Options68134 -Node: Optimize Options84249 -Node: Preprocessor Options96983 -Node: Assembler Options103446 -Node: Link Options103813 -Node: Directory Options109086 -Node: Target Options112951 -Node: Submodel Options116608 -Node: M680x0 Options118040 -Node: VAX Options122970 -Node: SPARC Options123505 -Node: Convex Options132591 -Node: AMD29K Options134772 -Node: ARM Options137997 -Node: M32R/D Options141571 -Node: M88K Options143917 -Node: RS/6000 and PowerPC Options151867 -Node: RT Options170743 -Node: MIPS Options172447 -Node: i386 Options180547 -Node: HPPA Options185990 -Node: Intel 960 Options189810 -Node: DEC Alpha Options192350 -Node: Clipper Options199428 -Node: H8/300 Options199827 -Node: SH Options200641 -Node: System V Options201237 -Node: V850 Options202046 -Node: Code Gen Options204031 -Node: Environment Variables214892 -Node: Running Protoize219115 -Node: Installation225344 -Node: Configurations249300 -Node: Other Dir287877 -Node: Cross-Compiler289593 -Node: Steps of Cross291424 -Node: Configure Cross292542 -Node: Tools and Libraries293179 -Node: Cross Runtime295618 -Node: Cross Headers299699 -Node: Build Cross301698 -Node: Sun Install303574 -Node: VMS Install305042 -Node: Collect2314971 -Node: Header Dirs317680 -Node: C Extensions319094 -Node: Statement Exprs322450 -Node: Local Labels324344 -Node: Labels as Values326406 -Node: Nested Functions328270 -Node: Constructing Calls332126 -Node: Naming Types334183 -Node: Typeof335277 -Node: Lvalues337142 -Node: Conditionals339582 -Node: Long Long340473 -Node: Complex341913 -Node: Zero Length343775 -Node: Variable Length344449 -Node: Macro Varargs346974 -Node: Subscripting349077 -Node: Pointer Arith349560 -Node: Initializers350125 -Node: Constructors350590 -Node: Labeled Elements352284 -Node: Case Ranges354913 -Node: Cast to Union355594 -Node: Function Attributes356672 -Node: Function Prototypes371569 -Node: C++ Comments373371 -Node: Dollar Signs373907 -Node: Character Escapes374365 -Node: Alignment374652 -Node: Variable Attributes376124 -Node: Type Attributes384657 -Node: Inline393730 -Node: Extended Asm397607 -Node: Asm Labels408173 -Node: Explicit Reg Vars409492 -Node: Global Reg Vars410740 -Node: Local Reg Vars415305 -Node: Alternate Keywords416897 -Node: Incomplete Enums418299 -Node: Function Names419055 -Node: Return Address420329 -Node: C++ Extensions422349 -Node: Naming Results423583 -Node: Min and Max426897 -Node: Destructors and Goto428337 -Node: C++ Interface428813 -Node: Template Instantiation434047 -Node: C++ Signatures441350 -Node: Gcov445694 -Node: Gcov Intro446217 -Node: Invoking Gcov448898 -Node: Gcov and Optimization454509 -Node: Gcov Data Files455933 -Node: Trouble459503 -Node: Actual Bugs461204 -Node: Installation Problems462473 -Node: Cross-Compiler Problems476259 -Node: Interoperation477730 -Node: External Bugs491094 -Node: Incompatibilities493226 -Node: Fixed Headers501776 -Node: Standard Libraries504118 -Node: Disappointments505365 -Node: C++ Misunderstandings509922 -Node: Static Definitions510569 -Node: Temporaries511623 -Node: Protoize Caveats513827 -Node: Non-bugs517783 -Node: Warnings and Errors527210 -Node: Bugs528980 -Node: Bug Criteria530340 -Node: Bug Lists532770 -Node: Bug Reporting534183 -Node: Sending Patches546601 -Node: Service551988 -Node: Contributing552558 -Node: VMS553394 -Node: Include Files and VMS553792 -Node: Global Declarations557682 -Node: VMS Misc561991 -Node: Portability566317 -Node: Interface568080 -Node: Passes572713 -Node: RTL590056 -Node: RTL Objects591944 -Node: Accessors594988 -Node: Flags600314 -Node: Machine Modes609333 -Node: Constants616967 -Node: Regs and Memory622155 -Node: Arithmetic634208 -Node: Comparisons640106 -Node: Bit Fields644169 -Node: Conversions645581 -Node: RTL Declarations648469 -Node: Side Effects649278 -Node: Incdec661825 -Node: Assembler664341 -Node: Insns665863 -Node: Calls688341 -Node: Sharing690936 -Node: Reading RTL694012 -Node: Machine Desc694951 -Node: Patterns696804 -Node: Example699748 -Node: RTL Template700876 -Node: Output Template713227 -Node: Output Statement717209 -Node: Constraints720922 -Node: Simple Constraints721925 -Node: Multi-Alternative733837 -Node: Class Preferences736673 -Node: Modifiers737553 -Node: Machine Constraints741097 -Node: No Constraints750116 -Node: Standard Names751237 -Node: Pattern Ordering783426 -Node: Dependent Patterns784653 -Node: Jump Patterns787468 -Node: Insn Canonicalizations793284 -Node: Peephole Definitions796779 -Node: Expander Definitions803697 -Node: Insn Splitting811143 -Node: Insn Attributes818158 -Node: Defining Attributes819205 -Node: Expressions821217 -Node: Tagging Insns827525 -Node: Attr Example831888 -Node: Insn Lengths834264 -Node: Constant Attributes837628 -Node: Delay Slots838788 -Node: Function Units841999 -Node: Target Macros847669 -Node: Driver849552 -Node: Run-time Target863850 -Node: Storage Layout869736 -Node: Type Layout885097 -Node: Registers891870 -Node: Register Basics892850 -Node: Allocation Order896887 -Node: Values in Registers898305 -Node: Leaf Functions902931 -Node: Stack Registers905406 -Node: Obsolete Register Macros906239 -Node: Register Classes908822 -Node: Stack and Calling928897 -Node: Frame Layout929352 -Node: Stack Checking933982 -Node: Frame Registers937562 -Node: Elimination941977 -Node: Stack Arguments946233 -Node: Register Arguments952841 -Node: Scalar Return962634 -Node: Aggregate Return966872 -Node: Caller Saves970587 -Node: Function Entry971737 -Node: Profiling982612 -Node: Varargs989691 -Node: Trampolines997101 -Node: Library Calls1003819 -Node: Addressing Modes1011877 -Node: Condition Code1019876 -Node: Costs1026075 -Node: Sections1034786 -Node: PIC1040969 -Node: Assembler Format1043679 -Node: File Framework1044745 -Node: Data Output1049443 -Node: Uninitialized Data1056637 -Node: Label Output1062043 -Node: Initialization1072705 -Node: Macros for Initialization1078848 -Node: Instruction Output1083445 -Node: Dispatch Tables1091632 -Node: Exception Region Output1094079 -Node: Alignment Output1097073 -Node: Debugging Info1098821 -Node: All Debuggers1099430 -Node: DBX Options1101875 -Node: DBX Hooks1107158 -Node: File Names and DBX1110798 -Node: SDB and DWARF1112771 -Node: Cross-compilation1114978 -Node: Misc1121544 -Node: Config1139585 -Node: Fragments1147323 -Node: Target Fragment1147922 -Node: Host Fragment1152088 -Node: Funding1152690 -Node: Look and Feel1155184 -Node: Copying1162761 -Node: Contributors1181953 -Node: Index1187258 - -End Tag Table +This is Info file gcc.info, produced by Makeinfo version 1.68 from the +input file gcc.texi. + + This file documents the use and the internals of the GNU compiler. + + Published by the Free Software Foundation 59 Temple Place - Suite 330 +Boston, MA 02111-1307 USA + + Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997 Free +Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided also +that the sections entitled "GNU General Public License," "Funding for +Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are +included exactly as in the original, and provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that the sections entitled "GNU General Public +License," "Funding for Free Software," and "Protect Your Freedom--Fight +`Look And Feel'", and this permission notice, may be included in +translations approved by the Free Software Foundation instead of in the +original English. + + +Indirect: +gcc.info-1: 1402 +gcc.info-2: 51248 +gcc.info-3: 97760 +gcc.info-4: 145851 +gcc.info-5: 194951 +gcc.info-6: 230193 +gcc.info-7: 254149 +gcc.info-8: 300160 +gcc.info-9: 348991 +gcc.info-10: 398272 +gcc.info-11: 445892 +gcc.info-12: 495641 +gcc.info-13: 538730 +gcc.info-14: 577260 +gcc.info-15: 626702 +gcc.info-16: 670410 +gcc.info-17: 717774 +gcc.info-18: 755784 +gcc.info-19: 801321 +gcc.info-20: 846541 +gcc.info-21: 896412 +gcc.info-22: 942181 +gcc.info-23: 987231 +gcc.info-24: 1030696 +gcc.info-25: 1077870 +gcc.info-26: 1126709 +gcc.info-27: 1167752 +gcc.info-28: 1192249 + +Tag Table: +(Indirect) +Node: Top1402 +Node: G++ and GCC3216 +Node: Invoking GCC5423 +Node: Option Summary8802 +Node: Overall Options21215 +Node: Invoking G++25778 +Node: C Dialect Options27651 +Node: C++ Dialect Options38953 +Node: Warning Options51248 +Node: Debugging Options68621 +Node: Optimize Options85026 +Node: Preprocessor Options97760 +Node: Assembler Options104223 +Node: Link Options104590 +Node: Directory Options109863 +Node: Target Options113728 +Node: Submodel Options117385 +Node: M680x0 Options118837 +Node: VAX Options123767 +Node: SPARC Options124302 +Node: Convex Options134056 +Node: AMD29K Options136237 +Node: ARM Options139462 +Node: MN10300 Options143037 +Node: M32R/D Options143501 +Node: M88K Options145851 +Node: RS/6000 and PowerPC Options153801 +Node: RT Options172678 +Node: MIPS Options174382 +Node: i386 Options182482 +Node: HPPA Options188591 +Node: Intel 960 Options192411 +Node: DEC Alpha Options194951 +Node: Clipper Options203678 +Node: H8/300 Options204077 +Node: SH Options204891 +Node: System V Options205487 +Node: V850 Options206296 +Node: Code Gen Options208281 +Node: Environment Variables219741 +Node: Running Protoize223964 +Node: Installation230193 +Node: Configurations254149 +Node: Other Dir292419 +Node: Cross-Compiler294135 +Node: Steps of Cross295966 +Node: Configure Cross297084 +Node: Tools and Libraries297721 +Node: Cross Runtime300160 +Node: Cross Headers304241 +Node: Build Cross306240 +Node: Sun Install308116 +Node: VMS Install309584 +Node: Collect2319513 +Node: Header Dirs322222 +Node: C Extensions323636 +Node: Statement Exprs326992 +Node: Local Labels328886 +Node: Labels as Values330948 +Node: Nested Functions332812 +Node: Constructing Calls336668 +Node: Naming Types338725 +Node: Typeof339819 +Node: Lvalues341684 +Node: Conditionals344124 +Node: Long Long345015 +Node: Complex346455 +Node: Zero Length348317 +Node: Variable Length348991 +Node: Macro Varargs351516 +Node: Subscripting353619 +Node: Pointer Arith354102 +Node: Initializers354667 +Node: Constructors355132 +Node: Labeled Elements356826 +Node: Case Ranges359455 +Node: Cast to Union360136 +Node: Function Attributes361214 +Node: Function Prototypes376111 +Node: C++ Comments377913 +Node: Dollar Signs378449 +Node: Character Escapes378907 +Node: Alignment379194 +Node: Variable Attributes380666 +Node: Type Attributes389199 +Node: Inline398272 +Node: Extended Asm402149 +Node: Asm Labels412715 +Node: Explicit Reg Vars414034 +Node: Global Reg Vars415282 +Node: Local Reg Vars419847 +Node: Alternate Keywords421439 +Node: Incomplete Enums422841 +Node: Function Names423597 +Node: Return Address424871 +Node: C++ Extensions426891 +Node: Naming Results428125 +Node: Min and Max431439 +Node: Destructors and Goto432879 +Node: C++ Interface433355 +Node: Template Instantiation438589 +Node: C++ Signatures445892 +Node: Gcov450236 +Node: Gcov Intro450759 +Node: Invoking Gcov453440 +Node: Gcov and Optimization459051 +Node: Gcov Data Files460475 +Node: Trouble464045 +Node: Actual Bugs465746 +Node: Installation Problems467015 +Node: Cross-Compiler Problems480806 +Node: Interoperation482277 +Node: External Bugs495641 +Node: Incompatibilities497773 +Node: Fixed Headers506323 +Node: Standard Libraries508665 +Node: Disappointments509912 +Node: C++ Misunderstandings514469 +Node: Static Definitions515116 +Node: Temporaries516170 +Node: Protoize Caveats518374 +Node: Non-bugs522330 +Node: Warnings and Errors531757 +Node: Bugs533527 +Node: Bug Criteria534887 +Node: Bug Lists537317 +Node: Bug Reporting538730 +Node: Sending Patches551148 +Node: Service556535 +Node: Contributing557105 +Node: VMS557941 +Node: Include Files and VMS558339 +Node: Global Declarations562229 +Node: VMS Misc566538 +Node: Portability570864 +Node: Interface572627 +Node: Passes577260 +Node: RTL594603 +Node: RTL Objects596491 +Node: Accessors599535 +Node: Flags604861 +Node: Machine Modes613880 +Node: Constants621514 +Node: Regs and Memory626702 +Node: Arithmetic638755 +Node: Comparisons644653 +Node: Bit Fields648716 +Node: Conversions650128 +Node: RTL Declarations653016 +Node: Side Effects653825 +Node: Incdec666372 +Node: Assembler668888 +Node: Insns670410 +Node: Calls692888 +Node: Sharing695483 +Node: Reading RTL698559 +Node: Machine Desc699498 +Node: Patterns701351 +Node: Example704295 +Node: RTL Template705423 +Node: Output Template717774 +Node: Output Statement721756 +Node: Constraints725469 +Node: Simple Constraints726472 +Node: Multi-Alternative738384 +Node: Class Preferences741220 +Node: Modifiers742100 +Node: Machine Constraints745644 +Node: No Constraints754663 +Node: Standard Names755784 +Node: Pattern Ordering787968 +Node: Dependent Patterns789195 +Node: Jump Patterns792010 +Node: Insn Canonicalizations797826 +Node: Peephole Definitions801321 +Node: Expander Definitions808239 +Node: Insn Splitting815685 +Node: Insn Attributes822700 +Node: Defining Attributes823747 +Node: Expressions825759 +Node: Tagging Insns832067 +Node: Attr Example836430 +Node: Insn Lengths838806 +Node: Constant Attributes842170 +Node: Delay Slots843330 +Node: Function Units846541 +Node: Target Macros852211 +Node: Driver854094 +Node: Run-time Target868392 +Node: Storage Layout874278 +Node: Type Layout889639 +Node: Registers896412 +Node: Register Basics897392 +Node: Allocation Order901429 +Node: Values in Registers902845 +Node: Leaf Functions907471 +Node: Stack Registers909946 +Node: Obsolete Register Macros910779 +Node: Register Classes913362 +Node: Stack and Calling933516 +Node: Frame Layout933971 +Node: Stack Checking938601 +Node: Frame Registers942181 +Node: Elimination946596 +Node: Stack Arguments950852 +Node: Register Arguments957460 +Node: Scalar Return967253 +Node: Aggregate Return971491 +Node: Caller Saves975206 +Node: Function Entry976356 +Node: Profiling987231 +Node: Varargs994312 +Node: Trampolines1001722 +Node: Library Calls1008440 +Node: Addressing Modes1016498 +Node: Condition Code1024497 +Node: Costs1030696 +Node: Sections1039407 +Node: PIC1045590 +Node: Assembler Format1048300 +Node: File Framework1049366 +Node: Data Output1054064 +Node: Uninitialized Data1061258 +Node: Label Output1066664 +Node: Initialization1077870 +Node: Macros for Initialization1084013 +Node: Instruction Output1088610 +Node: Dispatch Tables1096797 +Node: Exception Region Output1099244 +Node: Alignment Output1102238 +Node: Debugging Info1103986 +Node: All Debuggers1104595 +Node: DBX Options1107040 +Node: DBX Hooks1112323 +Node: File Names and DBX1115963 +Node: SDB and DWARF1117936 +Node: Cross-compilation1120143 +Node: Misc1126709 +Node: Config1144873 +Node: Fragments1152314 +Node: Target Fragment1152913 +Node: Host Fragment1157079 +Node: Funding1157681 +Node: Look and Feel1160175 +Node: Copying1167752 +Node: Contributors1186944 +Node: Index1192249 + +End Tag Table diff --git a/gcc/gcc.info-1 b/gcc/gcc.info-1 index 12ce102eabb..d0ba9a463c5 100644 --- a/gcc/gcc.info-1 +++ b/gcc/gcc.info-1 @@ -37,7 +37,7 @@ Introduction This manual documents how to run, install and port the GNU compiler, as well as its new features and incompatibilities, and how to report -bugs. It corresponds to GNU CC version 2.7.2. +bugs. It corresponds to GNU CC version 2.8.0. * Menu: @@ -224,7 +224,7 @@ are in the following sections. -Wimplicit-function-declarations -Wimport -Winline -Wlarger-than-LEN -Wmain -Wmissing-declarations -Wmissing-prototypes -Wnested-externs - -Wno-import -Woverloaded-virtual -Wparentheses + -Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses -Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth -Wtemplate-debugging -Wtraditional -Wtrigraphs @@ -331,6 +331,10 @@ are in the following sections. -msoft-float -mhard-float -mbsd -mxopen -mno-symrename + *MN10300 Options* + -mmult-bug + -mno-mult-bug + *M32R/D Options* -mcode-model=MODEL TYPE -msdata=SDATA TYPE -G NUM @@ -387,7 +391,9 @@ are in the following sections. -mstats -EL -EB -G NUM -nocpp *i386 Options* - -m486 -m386 -mieee-fp -mno-fancy-math-387 + -mcpu=CPU TYPE + -march=CPU TYPE + -mieee-fp -mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-double -mreg-alloc=LIST -mregparm=NUM @@ -416,11 +422,13 @@ are in the following sections. -mtail-call *DEC Alpha Options* - -mfp-regs -mno-fp-regs - -mno-soft-float -msoft-float + -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float + -malpha-as -mgas -mieee -mieee-with-inexact -mieee-conformant - -mfp-trap-mode -mfp-rounding-mode -mtrap-precision - -mbuild-constants + -mfp-trap-mode=MODE -mfp-rounding-mode=MODE + -mtrap-precision=MODE -mbuild-constants + -mcpu=CPU TYPE + -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max *Clipper Options* -mc300 -mc400 @@ -446,9 +454,9 @@ are in the following sections. -ffixed-REG -finhibit-size-directive -fcheck-memory-usage -fprefix-function-name -fno-common -fno-ident -fno-gnu-linker - -fpcc-struct-return -fpic -fPIC - -freg-struct-return -fshared-data -fshort-enums - -fshort-double -fvolatile -fvolatile-global + -fpcc-struct-return -freg-struct-return + -fshared-data -fpic -fPIC -fexceptions + -fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm -fpack-struct -fstack-check +e0 +e1 * Menu: @@ -1138,6 +1146,7 @@ have meanings only for C++ programs: Do not assume `inline' for functions defined inside a class scope. *Note Options That Control Optimization: Optimize Options. +`-Wold-style-cast' `-Woverloaded-virtual' `-Wtemplate-debugging' Warnings that apply only to C++ programs. *Note Options to diff --git a/gcc/gcc.info-11 b/gcc/gcc.info-11 index a23d4dc5123..4d628441928 100644 --- a/gcc/gcc.info-11 +++ b/gcc/gcc.info-11 @@ -571,11 +571,11 @@ CC. GNU CC. The fix is to get rid of the file `real-ld' which purify installs--so that GNU CC won't try to use it. - * On Linux SLS 1.01, there is a problem with `libc.a': it does not - contain the obstack functions. However, GNU CC assumes that the - obstack functions are in `libc.a' when it is the GNU C library. - To work around this problem, change the `__GNU_LIBRARY__' - conditional around line 31 to `#if 1'. + * On GNU/Linux SLS 1.01, there is a problem with `libc.a': it does + not contain the obstack functions. However, GNU CC assumes that + the obstack functions are in `libc.a' when it is the GNU C + library. To work around this problem, change the + `__GNU_LIBRARY__' conditional around line 31 to `#if 1'. * On some 386 systems, building the compiler never finishes because `enquire' hangs due to a hardware problem in the motherboard--it diff --git a/gcc/gcc.info-18 b/gcc/gcc.info-18 index abec34e35de..2d5443b054a 100644 --- a/gcc/gcc.info-18 +++ b/gcc/gcc.info-18 @@ -101,24 +101,24 @@ pattern in to accomplish a certain task. patterns `reload_inM' or `reload_outM' to handle them. *Note Register Classes::. - The constraints on a `moveM' must permit moving any hard register + The constraints on a `movM' must permit moving any hard register to any other hard register provided that `HARD_REGNO_MODE_OK' permits mode M in both registers and `REGISTER_MOVE_COST' applied to their classes returns a value of 2. - It is obligatory to support floating point `moveM' instructions + It is obligatory to support floating point `movM' instructions into and out of any registers that can hold fixed point values, because unions and structures (which have modes `SImode' or `DImode') can be in those registers and they may have floating point members. - There may also be a need to support fixed point `moveM' + There may also be a need to support fixed point `movM' instructions in and out of floating point registers. Unfortunately, I have forgotten why this was so, and I don't know whether it is still true. If `HARD_REGNO_MODE_OK' rejects fixed point values in floating point registers, then the constraints of - the fixed point `moveM' instructions must be designed to avoid - ever trying to reload into a floating point register. + the fixed point `movM' instructions must be designed to avoid ever + trying to reload into a floating point register. `reload_inM' `reload_outM' @@ -674,7 +674,7 @@ pattern in to accomplish a certain task. move insn to copy `virtual_stack_dynamic_rtx' to operand 0. If you are allocating the space elsewhere, generate code to copy the location of the space to operand 0. In the latter case, you must - ensure this space gets freed when the correspoinding space on the + ensure this space gets freed when the corresponding space on the main stack is free. Do not define this pattern if all that must be done is the @@ -986,7 +986,7 @@ are performed: * Within address computations (i.e., inside `mem'), a left shift is converted into the appropriate multiplication by a power of two. - De`Morgan's Law is used to move bitwise negation inside a bitwise + * De`Morgan's Law is used to move bitwise negation inside a bitwise logical-and or logical-or operation. If this results in only one operand being a `not' expression, it will be the first one. diff --git a/gcc/gcc.info-2 b/gcc/gcc.info-2 index 1e15a3090eb..6eee0745a0b 100644 --- a/gcc/gcc.info-2 +++ b/gcc/gcc.info-2 @@ -185,6 +185,9 @@ GNU CC: a label is declared but not used, and whenever a statement computes a result that is explicitly not used. + In order to get a warning about an unused function parameter, you + must specify both `-W' and `-Wunused'. + To suppress this warning for an expression, simply cast it to void. For unused variables and parameters, use the `unused' attribute (*note Variable Attributes::.). @@ -442,6 +445,9 @@ the warning. Warn if a function can not be inlined, and either it was declared as inline, or else the `-finline-functions' option was given. +`-Wold-style-cast' + Warn if an old-style (C-style) cast is used within a program. + `-Woverloaded-virtual' Warn when a derived class function declaration may be an error in defining a virtual function (C++ only). In a derived class, the @@ -616,7 +622,7 @@ either your program or GCC: blocks being executed. The output is appended to file `bb.out'. You can examine different profiling aspects without recompilation. - Your execuable will read a list of function names from file + Your executable will read a list of function names from file `bb.in'. Profiling starts when a function on the list is entered and stops when that invocation is exited. To exclude a function from profiling, prefix its name with `-'. If a function name is @@ -725,6 +731,10 @@ either your program or GCC: information in the `SOURCENAME.da' file (this last file is the output from `-fprofile-arcs'). +`-Q' + Makes the compiler print out each function name as it is compiled, + and print some statistics about each pass when it finishes. + `-dLETTERS' Says to make debugging dumps during compilation at times specified by LETTERS. This is used for debugging the compiler. The file @@ -760,6 +770,9 @@ either your program or GCC: Dump after CSE (including the jump optimization that sometimes follows CSE), to `FILE.cse'. + `D' + Dump after purging ADDRESSOF, to `FILE.addressof'. + `L' Dump after loop optimization, to `FILE.loop'. @@ -767,6 +780,9 @@ either your program or GCC: Dump after the second CSE pass (including the jump optimization that sometimes follows CSE), to `FILE.cse2'. + `b' + Dump after computing branch probabilities, to `FILE.bp'. + `f' Dump after flow analysis, to `FILE.flow'. diff --git a/gcc/gcc.info-21 b/gcc/gcc.info-21 index 72ee0b7fa80..4802c2f5843 100644 --- a/gcc/gcc.info-21 +++ b/gcc/gcc.info-21 @@ -164,7 +164,7 @@ Order of Allocation of Registers registers must always be saved and the save-multiple-registers instruction supports only sequences of consecutive registers. On such machines, define `REG_ALLOC_ORDER' to be an initializer that - lists the highest numbered allocatable register first. + lists the highest numbered allocable register first. `ORDER_REGS_FOR_LOCAL_ALLOC' A C statement (sans semicolon) to choose the order in which to @@ -265,13 +265,13 @@ consecutive registers are needed for a given mode. `MODES_TIEABLE_P (MODE1, MODE2)' A C expression that is nonzero if a value of mode MODE1 is - accessable in mode MODE2 without copying. + accessible in mode MODE2 without copying. If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, MODE2)' are always the same for any R, then `MODES_TIEABLE_P (MODE1, MODE2)' should be nonzero. If they differ for any R, you should define this macro to return zero unless some other - mechanism ensures the accessability of the value in a narrower + mechanism ensures the accessibility of the value in a narrower mode. You should define this macro to return nonzero in as many cases as @@ -778,16 +778,17 @@ constraint letters. `CONST_OK_FOR_LETTER_P (VALUE, C)' A C expression that defines the machine-dependent operand - constraint letters that specify particular ranges of integer - values. If C is one of those letters, the expression should check - that VALUE, an integer, is in the appropriate range and return 1 - if so, 0 otherwise. If C is not one of those letters, the value - should be 0 regardless of VALUE. + constraint letters (`I', `J', `K', ... `P') that specify + particular ranges of integer values. If C is one of those + letters, the expression should check that VALUE, an integer, is in + the appropriate range and return 1 if so, 0 otherwise. If C is + not one of those letters, the value should be 0 regardless of + VALUE. `CONST_DOUBLE_OK_FOR_LETTER_P (VALUE, C)' A C expression that defines the machine-dependent operand constraint letters that specify particular ranges of - `const_double' values. + `const_double' values (`G' or `H'). If C is one of those letters, the expression should check that VALUE, an RTX of code `const_double', is in the appropriate range @@ -801,13 +802,16 @@ constraint letters. `EXTRA_CONSTRAINT (VALUE, C)' A C expression that defines the optional machine-dependent - constraint letters that can be used to segregate specific types of - operands, usually memory references, for the target machine. - Normally this macro will not be defined. If it is required for a - particular target machine, it should return 1 if VALUE corresponds - to the operand type represented by the constraint letter C. If C - is not defined as an extra constraint, the value returned should - be 0 regardless of VALUE. + constraint letters ( + +``Q', `R', `S', `T', `U') that can' + be used to segregate specific types of operands, usually memory + references, for the target machine. Normally this macro will not + be defined. If it is required for a particular target machine, it + should return 1 if VALUE corresponds to the operand type + represented by the constraint letter C. If C is not defined as an + extra constraint, the value returned should be 0 regardless of + VALUE. For example, on the ROMP, load instructions cannot have their output in r0 if the memory reference contains a symbolic address. diff --git a/gcc/gcc.info-23 b/gcc/gcc.info-23 index 79c4ab94fdf..85059f588dc 100644 --- a/gcc/gcc.info-23 +++ b/gcc/gcc.info-23 @@ -61,7 +61,7 @@ Generating Code for Profiling A C statement or compound statement to output to FILE some assembler code to initialize basic-block profiling for the current object module. The global compile flag `profile_block_flag' - distingishes two profile modes. + distinguishes two profile modes. `profile_block_flag != 2' Output code to call the subroutine `__bb_init_func' once per @@ -113,7 +113,7 @@ Generating Code for Profiling A C statement or compound statement to output to FILE some assembler code to increment the count associated with the basic block number BLOCKNO. The global compile flag - `profile_block_flag' distingishes two profile modes. + `profile_block_flag' distinguishes two profile modes. `profile_block_flag != 2' Output code to increment the counter directly. Basic blocks diff --git a/gcc/gcc.info-24 b/gcc/gcc.info-24 index f33b78f422e..6b790594a5c 100644 --- a/gcc/gcc.info-24 +++ b/gcc/gcc.info-24 @@ -1008,6 +1008,17 @@ Output and Generation of Labels If SET_ASM_OP is defined, a default definition is provided which is correct for most systems. +`ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (STREAM, SYMBOL, HIGH, LOW)' + A C statement to output to the stdio stream STREAM assembler code + which defines (equates) the symbol SYMBOL to have a value equal to + the difference of the two symbols HIGH and LOW, i.e. HIGH minus + LOW. GNU CC guarantees that the symbols HIGH and LOW are already + known by the assembler so that the difference resolves into a + constant. + + If SET_ASM_OP is defined, a default definition is provided which is + correct for most systems. + `ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE)' A C statement to output to the stdio stream STREAM assembler code which defines (equates) the weak symbol NAME to have the value diff --git a/gcc/gcc.info-26 b/gcc/gcc.info-26 index f70a06ecec4..7af5d13a51a 100644 --- a/gcc/gcc.info-26 +++ b/gcc/gcc.info-26 @@ -98,6 +98,10 @@ Miscellaneous Parameters return `NIL'. On machines where this macro is defined, you will normally define it as the constant `SIGN_EXTEND' or `ZERO_EXTEND'. +`SHORT_IMMEDIATES_SIGN_EXTEND' + Define this macro if loading short immediate values into registers + sign extends. + `IMPLICIT_FIX_EXPR' An alias for a tree code that should be used by default for conversion of floating point values to fixed point. Normally, @@ -515,27 +519,15 @@ are some macros that vary: properly handle converting a function value to a pointer-to-function when it is used in an expression. -`HAVE_VPRINTF' - Define this if the library function `vprintf' is available on your - system. - `MULTIBYTE_CHARS' Define this macro to enable support for multibyte characters in the input to GNU CC. This requires that the host system support the ANSI C library functions for converting multibyte characters to wide characters. -`HAVE_PUTENV' - Define this if the library function `putenv' is available on your - system. - `POSIX' Define this if your system is POSIX.1 compliant. -`HAVE_POPEN' - Define this if the library function `popen' is available on your - system. - `NO_SYS_SIGLIST' Define this if your system *does not* provide the variable `sys_siglist'. diff --git a/gcc/gcc.info-28 b/gcc/gcc.info-28 index c90dd644f07..7cd787bdb69 100644 --- a/gcc/gcc.info-28 +++ b/gcc/gcc.info-28 @@ -205,6 +205,7 @@ Index * ASM_OUTPUT_COMMON: Uninitialized Data. * ASM_OUTPUT_CONSTRUCTOR: Macros for Initialization. * ASM_OUTPUT_DEF: Label Output. +* ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL: Label Output. * ASM_OUTPUT_DESTRUCTOR: Macros for Initialization. * ASM_OUTPUT_DOUBLE: Data Output. * ASM_OUTPUT_DOUBLE_INT: Data Output. @@ -863,13 +864,10 @@ Index * hardware models and configurations, specifying: Submodel Options. * HAS_INIT_SECTION: Macros for Initialization. * HAVE_ATEXIT: Misc. -* HAVE_POPEN: Config. * HAVE_POST_DECREMENT: Addressing Modes. * HAVE_POST_INCREMENT: Addressing Modes. * HAVE_PRE_DECREMENT: Addressing Modes. * HAVE_PRE_INCREMENT: Addressing Modes. -* HAVE_PUTENV: Config. -* HAVE_VPRINTF: Config. * header files and VMS: Include Files and VMS. * high: Constants. * HImode: Machine Modes. @@ -1177,6 +1175,7 @@ Index * MIPS options: MIPS Options. * misunderstandings in C++: C++ Misunderstandings. * mktemp, and constant strings: Incompatibilities. +* MN10300 options: MN10300 Options. * mod: Arithmetic. * mod and attributes: Expressions. * MODDI3_LIBCALL: Library Calls. @@ -1392,7 +1391,6 @@ Index * pointer arguments: Function Attributes. * POINTER_SIZE: Storage Layout. * POINTERS_EXTEND_UNSIGNED: Storage Layout. -* popen: Config. * portability: Portability. * portions of temporary objects, pointers to: Temporaries. * position independent code: PIC. @@ -1445,7 +1443,6 @@ Index * PUT_MODE: Machine Modes. * PUT_REG_NOTE_KIND: Insns. * PUT_SDB_...: SDB and DWARF. -* putenv: Config. * Q, in constraint: Simple Constraints. * QImode: Machine Modes. * QImode, in insn: Insns. @@ -1685,6 +1682,7 @@ Index * sharing of RTL components: Sharing. * shift: Arithmetic. * SHIFT_COUNT_TRUNCATED: Misc. +* SHORT_IMMEDIATES_SIGN_EXTEND: Misc. * SHORT_TYPE_SIZE: Type Layout. * side effect in ?:: Conditionals. * side effects, macro argument: Statement Exprs. @@ -1986,7 +1984,6 @@ Index * volatile applied to function: Function Attributes. * volatile memory references: Flags. * voting between constraint alternatives: Class Preferences. -* vprintf: Config. * warning for comparison of signed and unsigned values: Warning Options. * warning for overloaded virtual fn: Warning Options. * warning for reordering of member initializers: Warning Options. diff --git a/gcc/gcc.info-3 b/gcc/gcc.info-3 index d60f8139c92..e6e3571a07e 100644 --- a/gcc/gcc.info-3 +++ b/gcc/gcc.info-3 @@ -523,6 +523,7 @@ that macro, which enables you to change the defaults. * Convex Options:: * AMD29K Options:: * ARM Options:: +* MN10300 Options:: * M32R/D Options:: * M88K Options:: * RS/6000 and PowerPC Options:: @@ -812,16 +813,33 @@ SPARC Options They have been replaced with `-mcpu=xxx'. `-mcpu=CPU_TYPE' - Set architecture type and instruction scheduling parameters for - machine type CPU_TYPE. Supported values for CPU_TYPE are `v7', - `cypress', `v8', `supersparc', `sparclite', `f930', `f934', - `sparclet', `tsc701', `v8plus', `v9', and `ultrasparc'. + Set the instruction set, register set, and instruction scheduling + parameters for machine type CPU_TYPE. Supported values for + CPU_TYPE are `v7', `cypress', `v8', `supersparc', `sparclite', + `f930', `f934', `sparclet', `tsc701', `v9', and `ultrasparc'. + + Default instruction scheduling parameters are used for values that + select an architecture and not an implementation. These are `v7', + `v8', `sparclite', `sparclet', `v9'. + + Here is a list of each supported architecture and their supported + implementations. + + v7: cypress + v8: supersparc + sparclite: f930, f934 + sparclet: tsc701 + v9: ultrasparc `-mtune=CPU_TYPE' Set the instruction scheduling parameters for machine type - CPU_TYPE, but do not set the architecture type as the option - `-mcpu='CPU_TYPE would. The same values for `-mcpu='CPU_TYPE are - used for `-mtune='CPU_TYPE. + CPU_TYPE, but do not set the instruction set or register set that + the option `-mcpu='CPU_TYPE would. + + The same values for `-mcpu='CPU_TYPE are used for + `-mtune='CPU_TYPE, though the only useful values are those that + select a particular cpu implementation: `cypress', `supersparc', + `f930', `f934', `tsc701', `ultrasparc'. `-malign-loops=NUM' Align loops to a 2 raised to a NUM byte boundary. If @@ -1051,7 +1069,7 @@ AMD29K Options functions for cross-compilation.  -File: gcc.info, Node: ARM Options, Next: M32R/D Options, Prev: AMD29K Options, Up: Submodel Options +File: gcc.info, Node: ARM Options, Next: MN10300 Options, Prev: AMD29K Options, Up: Submodel Options ARM Options ----------- @@ -1138,7 +1156,23 @@ architectures: compiler is built for cross-compilation.  -File: gcc.info, Node: M32R/D Options, Next: M88K Options, Prev: ARM Options, Up: Submodel Options +File: gcc.info, Node: MN10300 Options, Next: M32R/D Options, Prev: ARM Options, Up: Submodel Options + +MN10300 Options +--------------- + + These `-m' options are defined for Matsushita MN10300 architectures: + +`-mmult-bug' + Generate code to avoid bugs in the multiply instructions for the + MN10300 processors. This is the default. + +`-mno-mult-bug' + Do not generate code to avoid bugs in the multiply instructions + for the MN10300 processors. + + +File: gcc.info, Node: M32R/D Options, Next: M88K Options, Prev: MN10300 Options, Up: Submodel Options M32R/D Options -------------- diff --git a/gcc/gcc.info-4 b/gcc/gcc.info-4 index 8a3d1fbdbf6..eba68a9b16f 100644 --- a/gcc/gcc.info-4 +++ b/gcc/gcc.info-4 @@ -464,7 +464,7 @@ IBM RS/6000 and PowerPC Options `-mno-relocatable-lib' On embedded PowerPC systems generate code that allows (does not allow) the program to be relocated to a different address at - runtime. Modules compiled with `-mreloctable-lib' can be linked + runtime. Modules compiled with `-mrelocatable-lib' can be linked with either modules compiled without `-mrelocatable' and `-mrelocatable-lib' or with modules compiled with the `-mrelocatable' options. @@ -609,7 +609,7 @@ IBM RS/6000 and PowerPC Options `.bss' section. `-G NUM' - On embbeded PowerPC systems, put global and static items less than + On embedded PowerPC systems, put global and static items less than or equal to NUM bytes into the small data or bss sections instead of the normal data or bss section. By default, NUM is 8. The `-G NUM' switch is also passed to the linker. All modules should be @@ -881,10 +881,26 @@ Intel 386 Options These `-m' options are defined for the i386 family of computers: -`-m486' +`-mcpu=CPU TYPE' + Assume the defaults for the machine type CPU TYPE when scheduling + instructions. The choices for CPU TYPE are: `i386', `i486', + `i586' (`pentium'), `pentium', `i686' (`pentiumpro') and + `pentiumpro'. While picking a specific CPU TYPE will schedule + things appropriately for that particular chip, the compiler will + not generate any code that does not run on the i386 without the + `-march=CPU TYPE' option being used. + +`-march=CPU TYPE' + Generate instructions for the machine type CPU TYPE. The choices + for CPU TYPE are: `i386', `i486', `pentium', and `pentiumpro'. + Specifying `-march=CPU TYPE' implies `-mcpu=CPU TYPE'. + `-m386' - Control whether or not code is optimized for a 486 instead of an - 386. Code generated for an 486 will run on a 386 and vice versa. +`-m486' +`-mpentium' +`-mpentiumpro' + Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and + -mcpu=pentiumpro respectively. `-mieee-fp' `-mno-ieee-fp' @@ -1054,7 +1070,7 @@ HPPA Options `-mspace' Optimize for space rather than execution time. Currently this only enables out of line function prologues and epilogues. This option - is incompatable with PIC code generation and profiling. + is incompatible with PIC code generation and profiling. `-mlong-load-store' Generate 3-instruction load and store sequences as sometimes diff --git a/gcc/gcc.info-5 b/gcc/gcc.info-5 index dcf6541be8c..7cf701f17af 100644 --- a/gcc/gcc.info-5 +++ b/gcc/gcc.info-5 @@ -176,7 +176,7 @@ DEC Alpha Options Normally GNU CC examines a 32- or 64-bit integer constant to see if it can construct it from smaller constants in two or three instructions. If it cannot, it will output the constant as a - literal and generate code to load it from the data segement at + literal and generate code to load it from the data segment at runtime. Use this option to require GNU CC to construct *all* integer @@ -188,6 +188,60 @@ DEC Alpha Options in memory before it can find the variables and constants in its own data segment. +`-malpha-as' +`-mgas' + Select whether to generate code to be assembled by the + vendor-supplied assembler (`-malpha-as') or by the GNU assembler + `-mgas'. + +`-mbwx' +`-mno-bwx' +`-mcix' +`-mno-cix' +`-mmax' +`-mno-max' + Indicate whether GNU CC should generate code to use the optional + BWX, CIX, and MAX instruction sets. The default is to use the + instruction sets supported by the CPU type specified via `-mcpu=' + option or that of the CPU on which GNU CC was built if none was + specified. + +`-mcpu=CPU TYPE' + +`-mcpu=CPU_TYPE' + Set the instruction set, register set, and instruction scheduling + parameters for machine type CPU_TYPE. You can specify either the + `EV' style name or the corresponding chip number. GNU CC supports + scheduling parameters for the EV4 and EV5 family of processors and + will choose the default values for the instruction set from the + processor you specify. If you do not specify a processor type, + GNU CC will default to the processor on which the compiler was + built. + + Supported values for CPU_TYPE are + + `ev4' + `21064' + Schedules as an EV4 and has no instruction set extensions. + + `ev5' + `21164' + Schedules as an EV5 and has no instruction set extensions. + + `ev56' + `21164a' + Schedules as an EV5 and supports the BWX extension. + + `pca56' + `21164PC' + Schedules as an EV5 and supports the BWX and MAX extensions. + + `ev6' + `21264' + Schedules as an EV5 (until Digital releases the scheduling + parameters for the EV6) and supports the BWX, CIX, and MAX + extensions. +  File: gcc.info, Node: Clipper Options, Next: H8/300 Options, Prev: DEC Alpha Options, Up: Submodel Options @@ -361,6 +415,17 @@ of `-ffoo' would be `-fno-foo'. In the table below, only one of the forms is listed--the one which is not the default. You can figure out the other form by either removing `no-' or adding it. +`-fexceptions' + Enable exception handling, and generate extra code needed to + propagate exceptions. If you do not specify this option, GNU CC + enables it by default for languages like C++ that normally require + exception handling, and disabled for languages like C that do not + normally require it. However, when compiling C code that needs to + interoperate properly with exception handlers written in C++, you + may need to enable this option. You may also wish to disable this + option is you are compiling older C++ programs that don't use + exception handling. + `-fpcc-struct-return' Return "short" `struct' and `union' values in memory like longer ones, rather than in registers. This convention is less @@ -490,7 +555,7 @@ the other form by either removing `no-' or adding it. three-way choice. `-fcall-used-REG' - Treat the register named REG as an allocatable register that is + Treat the register named REG as an allocable register that is clobbered by function calls. It may be allocated for temporaries or variables that do not live across a call. Functions compiled this way will not save and restore the register REG. @@ -503,7 +568,7 @@ the other form by either removing `no-' or adding it. three-way choice. `-fcall-saved-REG' - Treat the register named REG as an allocatable register saved by + Treat the register named REG as an allocable register saved by functions. It may be allocated even for temporaries or variables that live across a call. Functions compiled this way will save and restore the register REG if they use it. @@ -531,7 +596,7 @@ the other form by either removing `no-' or adding it. not use the `asm' or `__asm__' keywords. You must also specify this option when you compile functions you - call that have side effects. If you do not, you may get erronous + call that have side effects. If you do not, you may get erroneous messages from the detector. Normally, you should compile all your code with this option. If you use functions from a library that have side-effects (such as `read'), you may not be able to diff --git a/gcc/gcc.info-7 b/gcc/gcc.info-7 index 35bf202f11f..fff92a8467d 100644 --- a/gcc/gcc.info-7 +++ b/gcc/gcc.info-7 @@ -146,8 +146,7 @@ special things you must know: `alpha-*-osf1' Systems using processors that implement the DEC Alpha architecture and are running the DEC Unix (OSF/1) operating system, for example - the DEC Alpha AXP systems. (VMS on the Alpha is not currently - supported by GNU CC.) + the DEC Alpha AXP systems.CC.) GNU CC writes a `.verstamp' directive to the assembler output file unless it is built as a cross-compiler. It gets the version to @@ -211,7 +210,7 @@ special things you must know: `arm-*-linuxaout' Any of the ARM family processors running the Linux-based GNU system with the `a.out' binary format (ELF is not yet supported). - You must use version 2.8.1.0.7 or later of the Linux binutils, + You must use version 2.8.1.0.7 or later of the GNU/Linux binutils, which you can download from `sunsite.unc.edu:/pub/Linux/GCC' and other mirror sites for Linux-based GNU systems. @@ -363,9 +362,7 @@ special things you must know: version 2.2 or later. `i386-sequent-bsd' - Go to the Berkeley universe before compiling. In addition, you - probably need to create a file named `string.h' containing just - one line: `#include '. + Go to the Berkeley universe before compiling. `i386-sequent-ptx1*' Sequent DYNIX/ptx 1.x. @@ -715,9 +712,7 @@ special things you must know: Emacs. `ns32k-sequent' - Go to the Berkeley universe before compiling. In addition, you - probably need to create a file named `string.h' containing just - one line: `#include '. + Go to the Berkeley universe before compiling. `ns32k-utek' UTEK ns32000 system ("merlin"). The C compiler that comes with diff --git a/gcc/gcc.info-9 b/gcc/gcc.info-9 index 822751e6d8a..9d4caef3e9e 100644 --- a/gcc/gcc.info-9 +++ b/gcc/gcc.info-9 @@ -1216,7 +1216,7 @@ attribute only past the closing brace of a definition. variables of that type, even if the variable appears to do nothing. This is often the case with lock or thread classes, which are usually defined and then not referenced, but contain - constructors and destructors that have non-trivial bookeeping + constructors and destructors that have nontrivial bookkeeping functions. To specify multiple attributes, separate them by commas within the diff --git a/gcc/gcc.texi b/gcc/gcc.texi index 83ac13bbf3f..ce412a019ba 100644 --- a/gcc/gcc.texi +++ b/gcc/gcc.texi @@ -144,16 +144,16 @@ original English. @sp 2 @center Richard M. Stallman @sp 3 -@center Last updated 26 November 1995 +@center Last updated 4 December 1997 @sp 1 -@c The version number appears twice more in this file. +@c The version number appears three times more in this file. -@center for version 2.7.2 +@center for version 2.8.0 @page @vskip 0pt plus 1filll Copyright @copyright{} 1988, 89, 92, 93, 94, 95, 96 Free Software Foundation, Inc. @sp 2 -For GCC Version 2.7.2@* +For GCC Version 2.8.0@* @sp 1 Published by the Free Software Foundation @* 59 Temple Place - Suite 330@* @@ -194,14 +194,14 @@ original English. @ifset USING This manual documents how to run, install and port the GNU compiler, as well as its new features and incompatibilities, and how to -report bugs. It corresponds to GNU CC version 2.7.2. +report bugs. It corresponds to GNU CC version 2.8.0. @end ifset @end ifset @ifclear INTERNALS This manual documents how to run and install the GNU compiler, as well as its new features and incompatibilities, and how to report -bugs. It corresponds to GNU CC version 2.7.2. +bugs. It corresponds to GNU CC version 2.8.0. @end ifclear @ifclear USING This manual documents how to port the GNU compiler, @@ -437,7 +437,7 @@ GNU CC. The fix is to get rid of the file @code{real-ld} which purify installs---so that GNU CC won't try to use it. @item -On Linux SLS 1.01, there is a problem with @file{libc.a}: it does not +On GNU/Linux SLS 1.01, there is a problem with @file{libc.a}: it does not contain the obstack functions. However, GNU CC assumes that the obstack functions are in @file{libc.a} when it is the GNU C library. To work around this problem, change the @code{__GNU_LIBRARY__} conditional @@ -3692,12 +3692,6 @@ Define this macro to indicate that the host compiler does not properly handle converting a function value to a pointer-to-function when it is used in an expression. -@findex HAVE_VPRINTF -@findex vprintf -@item HAVE_VPRINTF -Define this if the library function @code{vprintf} is available on your -system. - @findex MULTIBYTE_CHARS @item MULTIBYTE_CHARS Define this macro to enable support for multibyte characters in the @@ -3705,22 +3699,10 @@ input to GNU CC. This requires that the host system support the ANSI C library functions for converting multibyte characters to wide characters. -@findex HAVE_PUTENV -@findex putenv -@item HAVE_PUTENV -Define this if the library function @code{putenv} is available on your -system. - @findex POSIX @item POSIX Define this if your system is POSIX.1 compliant. -@findex HAVE_POPEN -@findex popen -@item HAVE_POPEN -Define this if the library function @code{popen} is available on your -system. - @findex NO_SYS_SIGLIST @item NO_SYS_SIGLIST Define this if your system @emph{does not} provide the variable diff --git a/gcc/gcov.c b/gcc/gcov.c index 64a4a1d8af3..2dda0d48ee8 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -2,7 +2,7 @@ source file. Copyright (C) 1990, 91, 92, 93, 94, 96, 1997 Free Software Foundation, Inc. Contributed by James E. Wilson of Cygnus Support. - Mongled by Bob Manson of Cygnus Support. + Mangled by Bob Manson of Cygnus Support. Gcov is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,17 +41,29 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ is no way to get the total execution counts for the included file, can only get execution counts for one or the other of the including files. */ -/* The only need for this is so that we get macro definitions for rindex - if necessary. */ #include "config.h" - #include +#include "gansidecl.h" #include #include +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif + #include "gcov-io.h" -extern char * rindex (); +#ifdef NEED_DECLARATION_RINDEX +extern char *rindex (); +#endif /* The .bb file format consists of several lists of 4-byte integers which are the line numbers of each basic block in the file. Each @@ -734,7 +746,7 @@ read_files () stat (bb_file_name, &buf); bb_data_size = buf.st_size / 4; - bb_data = (char *) xmalloc (buf.st_size); + bb_data = (char *) xmalloc ((unsigned) buf.st_size); fread (bb_data, sizeof (char), buf.st_size, bb_file); fclose (bb_file); @@ -912,7 +924,7 @@ function_summary () { if (function_branches) { - fprintf (stdout, "%6.2lf%% of %d branches executed in funcion %s\n", + fprintf (stdout, "%6.2lf%% of %d branches executed in function %s\n", (((double) function_branches_executed / function_branches) * 100), function_branches, function_name); fprintf (stdout, @@ -1208,7 +1220,7 @@ output_data () if (output_gcov_file) { /* Now the statistics are ready. Read in the source file one line - at a time, and output that line to the gcov file preceeded by + at a time, and output that line to the gcov file preceded by its execution count if non zero. */ source_file = fopen (source_file_name, "r"); @@ -1285,8 +1297,8 @@ output_data () before the source line. For lines which exist but were never executed, print ###### before the source line. Otherwise, print the execution count before the source line. */ - /* There are 16 spaces of identation added before the source line - so that tabs won't be messed up. */ + /* There are 16 spaces of indentation added before the source + line so that tabs won't be messed up. */ if (line_exists[count]) { if (line_counts[count]) @@ -1299,7 +1311,7 @@ output_data () fprintf (gcov_file, "\t\t%s", string); /* In case the source file line is larger than our buffer, keep - reading and outputing lines until we get a newline. */ + reading and outputting lines until we get a newline. */ len = strlen (string); while ((len == 0 || string[strlen (string) - 1] != '\n') && retval != NULL) @@ -1356,7 +1368,7 @@ output_data () fprintf (gcov_file, "\t\t%s", string); /* In case the source file line is larger than our buffer, keep - reading and outputing lines until we get a newline. */ + reading and outputting lines until we get a newline. */ len = strlen (string); while ((len == 0 || string[strlen (string) - 1] != '\n') && retval != NULL) diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c index 4d4bd06ddef..6f3856c3666 100644 --- a/gcc/genattrtab.c +++ b/gcc/genattrtab.c @@ -106,11 +106,19 @@ Boston, MA 02111-1307, USA. */ #include "rtl.h" #include "insn-config.h" /* For REGISTER_CONSTRAINTS */ -#ifndef VMS -#ifndef USG -#include -#include +#ifdef TIME_WITH_SYS_TIME +# include +# include +#else +# if HAVE_SYS_TIME_H +# include +# else +# include +#endif #endif + +#ifdef HAVE_SYS_RESOURCE_H +# include #endif /* We must include obstack.h after , to avoid lossage with @@ -1389,7 +1397,7 @@ make_canonical (attr, exp) RTX_UNCHANGING_P (exp) = 1; exp = check_attr_value (exp, attr); /* Goto COND case since this is now a COND. Note that while the - new expression is rescanned, all symbol_ref notes are mared as + new expression is rescanned, all symbol_ref notes are marked as unchanging. */ goto cond; diff --git a/gcc/genmultilib b/gcc/genmultilib index 1ae690b697f..02206960400 100644 --- a/gcc/genmultilib +++ b/gcc/genmultilib @@ -1,6 +1,6 @@ #!/bin/sh # Generates multilib.h. -# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. +# Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. #This file is part of GNU CC. @@ -243,7 +243,7 @@ echo "NULL" echo "};" # Output all of the matches now as option and that is the same as that, with -# a semicolan trailer. Include all of the normal options as well. +# a semicolon trailer. Include all of the normal options as well. # Note, the format of the matches is reversed compared # to what we want, so switch them around. echo "" diff --git a/gcc/genoutput.c b/gcc/genoutput.c index 21ec64fe2e5..4520267c548 100644 --- a/gcc/genoutput.c +++ b/gcc/genoutput.c @@ -526,6 +526,7 @@ scan_operands (part, this_address_p, this_strict_low) switch (*format_ptr++) { case 'e': + case 'u': scan_operands (XEXP (part, i), 0, 0); break; case 'E': diff --git a/gcc/getopt.c b/gcc/getopt.c index 570cb9da69e..fc87ce67d69 100644 --- a/gcc/getopt.c +++ b/gcc/getopt.c @@ -79,12 +79,6 @@ #endif #endif -#if defined (WINDOWS32) && !defined (__CYGWIN32__) -/* It's not Unix, really. See? Capital letters. */ -#include -#define getpid() GetCurrentProcessId() -#endif - #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ @@ -262,8 +256,6 @@ static int nonoption_flags_len; static int original_argc; static char *const *original_argv; -extern pid_t __libc_pid; - /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ @@ -331,9 +323,9 @@ exchange (argv) nonoption_flags_len = nonoption_flags_max_len = 0; else { - memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len); - memset (&new_str[nonoption_flags_max_len], '\0', - top + 1 - nonoption_flags_max_len); + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } @@ -442,11 +434,8 @@ _getopt_initialize (argc, argv, optstring) if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else - { - memcpy (__getopt_nonoption_flags, orig_str, len); - memset (&__getopt_nonoption_flags[len], '\0', - nonoption_flags_max_len - len); - } + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); } } nonoption_flags_len = nonoption_flags_max_len; diff --git a/gcc/getpwd.c b/gcc/getpwd.c index e48b277b95a..28eb298ebf9 100644 --- a/gcc/getpwd.c +++ b/gcc/getpwd.c @@ -32,7 +32,7 @@ extern char *getcwd (); char *getenv (); char *xmalloc (); -#ifndef VMS +#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN32__))) /* Get the working directory. Use the PWD environment variable if it's set correctly, since this is faster and gives more uniform answers @@ -80,7 +80,7 @@ getpwd () return p; } -#else /* VMS */ +#else /* VMS || _WIN32 && !__CYGWIN32__ */ #ifndef MAXPATHLEN #define MAXPATHLEN 255 @@ -91,8 +91,13 @@ getpwd () { static char *pwd = 0; - if (!pwd) pwd = getcwd (xmalloc (MAXPATHLEN+1), MAXPATHLEN+1); + if (!pwd) + pwd = getcwd (xmalloc (MAXPATHLEN + 1), MAXPATHLEN + 1 +#ifdef VMS + , 0 +#endif + ); return pwd; } -#endif /* VMS */ +#endif /* VMS || _WIN32 && !__CYGWIN32__ */ diff --git a/gcc/ginclude/ppc-asm.h b/gcc/ginclude/ppc-asm.h index 9e830dcc6eb..4512d94352a 100644 --- a/gcc/ginclude/ppc-asm.h +++ b/gcc/ginclude/ppc-asm.h @@ -1,5 +1,5 @@ /* PowerPC asm definitions for GNU C. */ -/* Under winnt, 1) gas suppports the following as names and 2) in particular +/* Under winnt, 1) gas supports the following as names and 2) in particular defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ #if !defined(__WINNT__) diff --git a/gcc/ginclude/va-sh.h b/gcc/ginclude/va-sh.h index 877014a2d23..f1671c7b0b6 100644 --- a/gcc/ginclude/va-sh.h +++ b/gcc/ginclude/va-sh.h @@ -129,6 +129,31 @@ enum __va_type_classes { in the stack are made to be word-aligned; for an aggregate that is not word-aligned, we advance the pointer to the first non-reg slot. */ + /* When this is a smaller-than-int integer, using + auto-increment in the promoted (SImode) is fastest; + however, there is no way to express that is C. Therefore, + we use an asm. + We want the MEM_IN_STRUCT_P bit set in the emitted RTL, therefore we + use unions even when it would otherwise be unnecessary. */ + +#define __va_arg_sh1(AP, TYPE) __extension__ \ +__extension__ \ +({(sizeof (TYPE) == 1 \ + ? ({union {TYPE t; char c;} __t; \ + asm("" \ + : "=r" (__t.c) \ + : "0" ((((union { int i, j; } *) (AP))++)->i)); \ + __t.t;}) \ + : sizeof (TYPE) == 2 \ + ? ({union {TYPE t; short s;} __t; \ + asm("" \ + : "=r" (__t.s) \ + : "0" ((((union { int i, j; } *) (AP))++)->i)); \ + __t.t;}) \ + : sizeof (TYPE) >= 4 || __LITTLE_ENDIAN_P \ + ? (((union { TYPE t; int i;} *) (AP))++)->t \ + : ((union {TYPE t;TYPE u;}*) ((char *)++(int *)(AP) - sizeof (TYPE)))->t);}) + #ifdef __SH3E__ #define __PASS_AS_FLOAT(TYPE_CLASS,SIZE) \ @@ -153,39 +178,18 @@ __extension__ \ <= pvar.__va_next_o_limit) \ __result_p = &pvar.__va_next_o; \ else \ - __result_p = &pvar.__va_next_stack; \ + { \ + if (sizeof (TYPE) > 4) \ + pvar.__va_next_o = pvar.__va_next_o_limit; \ + \ + __result_p = &pvar.__va_next_stack; \ + } \ } \ - /* When this is a smaller-than-int integer, using \ - auto-increment in the promoted (SImode) is fastest; \ - however, we must convert all alternatives to TYPE; \ - a conversion using an ordinary cast fails for aggregates, \ - and for big endian, a conversion using a union works only \ - if the types involved have the same size. \ - ??? The emitted rtl still does unnecessary sign extends. */\ - (sizeof (TYPE) < 4 && __LITTLE_ENDIAN_P \ - ? ((union { TYPE t; int i;} )*(*(int **) __result_p)++).t \ - : sizeof (TYPE) == 1 \ - ? ((union { TYPE t; char i;} )(char)*(*(int **) __result_p)++).t\ - : sizeof (TYPE) == 2 \ - ? ((union { TYPE t; short i;} )(short)*(*(int **) __result_p)++).t\ - : sizeof (TYPE) < 4 \ - ? *(TYPE *) ((char *) ++*(int **) __result_p - sizeof (TYPE))\ - : *(*(TYPE **) __result_p)++);}) + __va_arg_sh1(*(void **)__result_p, TYPE);}) #else /* ! SH3E */ -#define va_arg(AP, TYPE) __extension__ \ -__extension__ \ -({int __type = __builtin_classify_type (* (TYPE *) 0); \ - (sizeof (TYPE) < 4 && __LITTLE_ENDIAN_P \ - ? ((union { TYPE t; int i;} )*((int *) (AP))++).t \ - : sizeof (TYPE) == 1 \ - ? ((union { TYPE t; char i;} )(char)*((int *) (AP))++).t \ - : sizeof (TYPE) == 2 \ - ? ((union { TYPE t; short i;} )(short)*((int *) (AP))++).t \ - : sizeof (TYPE) < 4 \ - ? *(TYPE *) ((char *) ++(int *) (AP) - sizeof (TYPE)) \ - : *((TYPE *) (AP))++);}) +#define va_arg(AP, TYPE) __va_arg_sh1((AP), TYPE) #endif /* SH3E */ diff --git a/gcc/global.c b/gcc/global.c index 30fbab670c8..3ab4d708af6 100644 --- a/gcc/global.c +++ b/gcc/global.c @@ -277,6 +277,7 @@ int global_alloc (file) FILE *file; { + int retval; #ifdef ELIMINABLE_REGS static struct {int from, to; } eliminables[] = ELIMINABLE_REGS; #endif @@ -486,8 +487,11 @@ global_alloc (file) allocno_row_words = (max_allocno + INT_BITS - 1) / INT_BITS; - conflicts = (INT_TYPE *) alloca (max_allocno * allocno_row_words - * sizeof (INT_TYPE)); + /* We used to use alloca here, but the size of what it would try to + allocate would occasionally cause it to exceed the stack limit and + cause unpredictable core dumps. Some examples were > 2Mb in size. */ + conflicts = (INT_TYPE *) xmalloc (max_allocno * allocno_row_words + * sizeof (INT_TYPE)); bzero ((char *) conflicts, max_allocno * allocno_row_words * sizeof (INT_TYPE)); @@ -577,7 +581,10 @@ global_alloc (file) for the sake of debugging information. */ if (n_basic_blocks > 0) #endif - return reload (get_insns (), 1, file); + retval = reload (get_insns (), 1, file); + + free (conflicts); + return retval; } /* Sort predicate for ordering the allocnos. diff --git a/gcc/install.texi b/gcc/install.texi index 22166230b93..a806e3515ef 100644 --- a/gcc/install.texi +++ b/gcc/install.texi @@ -714,8 +714,7 @@ GNU CC. @item alpha-*-osf1 Systems using processors that implement the DEC Alpha architecture and are running the DEC Unix (OSF/1) operating system, for example the DEC -Alpha AXP systems. (VMS on the Alpha is not currently supported by GNU -CC.) +Alpha AXP systems.CC.) GNU CC writes a @samp{.verstamp} directive to the assembler output file unless it is built as a cross-compiler. It gets the version to use from @@ -775,7 +774,7 @@ configuration. @item arm-*-linuxaout Any of the ARM family processors running the Linux-based GNU system with the @file{a.out} binary format (ELF is not yet supported). You must use -version 2.8.1.0.7 or later of the Linux binutils, which you can download +version 2.8.1.0.7 or later of the GNU/Linux binutils, which you can download from @file{sunsite.unc.edu:/pub/Linux/GCC} and other mirror sites for Linux-based GNU systems. @@ -952,9 +951,7 @@ You need to use GAS version 2.1 or later, and LD from GNU binutils version 2.2 or later. @item i386-sequent-bsd -Go to the Berkeley universe before compiling. In addition, you probably -need to create a file named @file{string.h} containing just one line: -@samp{#include }. +Go to the Berkeley universe before compiling. @item i386-sequent-ptx1* Sequent DYNIX/ptx 1.x. @@ -1330,9 +1327,7 @@ and @code{malloc}; you must get the compiled versions of these from GNU Emacs. @item ns32k-sequent -Go to the Berkeley universe before compiling. In addition, you probably -need to create a file named @file{string.h} containing just one line: -@samp{#include }. +Go to the Berkeley universe before compiling. @item ns32k-utek UTEK ns32000 system (``merlin''). The C compiler that comes with this diff --git a/gcc/integrate.c b/gcc/integrate.c index 3931dee279d..5e9076c9eea 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -335,7 +335,7 @@ initialize_for_inline (fndecl, min_labelno, max_labelno, max_reg, copy) the value of current_function_outgoing_args_size, the original argument vector, the original DECL_INITIAL, - and pointers to the table of psuedo regs, pointer flags, and alignment. */ + and pointers to the table of pseudo regs, pointer flags, and alignment. */ return gen_inline_header_rtx (NULL_RTX, NULL_RTX, min_labelno, max_labelno, max_parm_reg, max_reg, diff --git a/gcc/invoke.texi b/gcc/invoke.texi index 1da02eec117..21296860d8d 100644 --- a/gcc/invoke.texi +++ b/gcc/invoke.texi @@ -121,7 +121,7 @@ in the following sections. -Wimplicit-function-declarations -Wimport -Winline -Wlarger-than-@var{len} -Wmain -Wmissing-declarations -Wmissing-prototypes -Wnested-externs --Wno-import -Woverloaded-virtual -Wparentheses +-Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses -Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth -Wtemplate-debugging -Wtraditional -Wtrigraphs @@ -245,6 +245,10 @@ in the following sections. -msoft-float -mhard-float -mbsd -mxopen -mno-symrename +@emph{MN10300 Options} +-mmult-bug +-mno-mult-bug + @emph{M32R/D Options} -mcode-model=@var{model type} -msdata=@var{sdata type} -G @var{num} @@ -301,7 +305,9 @@ in the following sections. -mstats -EL -EB -G @var{num} -nocpp @emph{i386 Options} --m486 -m386 -mieee-fp -mno-fancy-math-387 +-mcpu=@var{cpu type} +-march=@var{cpu type} +-mieee-fp -mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-double -mreg-alloc=@var{list} -mregparm=@var{num} @@ -330,11 +336,13 @@ in the following sections. -mtail-call @emph{DEC Alpha Options} --mfp-regs -mno-fp-regs --mno-soft-float -msoft-float +-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float +-malpha-as -mgas -mieee -mieee-with-inexact -mieee-conformant --mfp-trap-mode -mfp-rounding-mode -mtrap-precision --mbuild-constants +-mfp-trap-mode=@var{mode} -mfp-rounding-mode=@var{mode} +-mtrap-precision=@var{mode} -mbuild-constants +-mcpu=@var{cpu type} +-mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max @emph{Clipper Options} -mc300 -mc400 @@ -362,9 +370,9 @@ in the following sections. -ffixed-@var{reg} -finhibit-size-directive -fcheck-memory-usage -fprefix-function-name -fno-common -fno-ident -fno-gnu-linker --fpcc-struct-return -fpic -fPIC --freg-struct-return -fshared-data -fshort-enums --fshort-double -fvolatile -fvolatile-global +-fpcc-struct-return -freg-struct-return +-fshared-data -fpic -fPIC -fexceptions +-fshort-enums -fshort-double -fvolatile -fvolatile-global -fverbose-asm -fpack-struct -fstack-check +e0 +e1 @end smallexample @end table @@ -1119,7 +1127,8 @@ have meanings only for C++ programs: Do not assume @samp{inline} for functions defined inside a class scope. @xref{Optimize Options,,Options That Control Optimization}. -@item -Woverloaded-virtual +@item -Wold-style-cast +@itemx -Woverloaded-virtual @itemx -Wtemplate-debugging Warnings that apply only to C++ programs. @xref{Warning Options,,Options to Request or Suppress Warnings}. @@ -1292,6 +1301,9 @@ whenever a function is declared static but never defined, whenever a label is declared but not used, and whenever a statement computes a result that is explicitly not used. +In order to get a warning about an unused function parameter, you must +specify both @samp{-W} and @samp{-Wunused}. + To suppress this warning for an expression, simply cast it to void. For unused variables and parameters, use the @samp{unused} attribute (@pxref{Variable Attributes}). @@ -1583,6 +1595,9 @@ Warn if an @code{extern} declaration is encountered within an function. Warn if a function can not be inlined, and either it was declared as inline, or else the @samp{-finline-functions} option was given. +@item -Wold-style-cast +Warn if an old-style (C-style) cast is used within a program. + @item -Woverloaded-virtual @cindex overloaded virtual fn, warning @cindex warning for overloaded virtual fn @@ -1762,7 +1777,7 @@ and (optionally) the complete sequence of basic blocks being executed. The output is appended to file @file{bb.out}. You can examine different profiling aspects without recompilation. Your -execuable will read a list of function names from file @file{bb.in}. +executable will read a list of function names from file @file{bb.in}. Profiling starts when a function on the list is entered and stops when that invocation is exited. To exclude a function from profiling, prefix its name with `-'. If a function name is not unique, you can @@ -1874,6 +1889,10 @@ block and arc execution counts from the information in the @samp{-fprofile-arcs}). @end table +@item -Q +Makes the compiler print out each function name as it is compiled, and +print some statistics about each pass when it finishes. + @item -d@var{letters} Says to make debugging dumps during compilation at times specified by @var{letters}. This is used for debugging the compiler. The file names @@ -1902,11 +1921,15 @@ Dump after first jump optimization, to @file{@var{file}.jump}. @item s Dump after CSE (including the jump optimization that sometimes follows CSE), to @file{@var{file}.cse}. +@item D +Dump after purging ADDRESSOF, to @file{@var{file}.addressof}. @item L Dump after loop optimization, to @file{@var{file}.loop}. @item t Dump after the second CSE pass (including the jump optimization that sometimes follows CSE), to @file{@var{file}.cse2}. +@item b +Dump after computing branch probabilities, to @file{@var{file}.bp}. @item f Dump after flow analysis, to @file{@var{file}.flow}. @item c @@ -2805,6 +2828,7 @@ that macro, which enables you to change the defaults. * Convex Options:: * AMD29K Options:: * ARM Options:: +* MN10300 Options:: * M32R/D Options:: * M88K Options:: * RS/6000 and PowerPC Options:: @@ -3085,17 +3109,36 @@ These options are deprecated and will be deleted in GNU CC 2.9. They have been replaced with @samp{-mcpu=xxx}. @item -mcpu=@var{cpu_type} -Set architecture type and instruction scheduling parameters for machine -type @var{cpu_type}. Supported values for @var{cpu_type} are -@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, -@samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, -@samp{v8plus}, @samp{v9}, and @samp{ultrasparc}. +Set the instruction set, register set, and instruction scheduling parameters +for machine type @var{cpu_type}. Supported values for @var{cpu_type} are +@samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{sparclite}, +@samp{f930}, @samp{f934}, @samp{sparclet}, @samp{tsc701}, @samp{v9}, and +@samp{ultrasparc}. + +Default instruction scheduling parameters are used for values that select +an architecture and not an implementation. These are @samp{v7}, @samp{v8}, +@samp{sparclite}, @samp{sparclet}, @samp{v9}. + +Here is a list of each supported architecture and their supported +implementations. + +@smallexample + v7: cypress + v8: supersparc + sparclite: f930, f934 + sparclet: tsc701 + v9: ultrasparc +@end smallexample @item -mtune=@var{cpu_type} Set the instruction scheduling parameters for machine type -@var{cpu_type}, but do not set the architecture type as the option -@samp{-mcpu=}@var{cpu_type} would. The same values for -@samp{-mcpu=}@var{cpu_type} are used for @samp{-mtune=}@var{cpu_type}. +@var{cpu_type}, but do not set the instruction set or register set that the +option @samp{-mcpu=}@var{cpu_type} would. + +The same values for @samp{-mcpu=}@var{cpu_type} are used for +@samp{-mtune=}@var{cpu_type}, though the only useful values are those that +select a particular cpu implementation: @samp{cypress}, @samp{supersparc}, +@samp{f930}, @samp{f934}, @samp{tsc701}, @samp{ultrasparc}. @item -malign-loops=@var{num} Align loops to a 2 raised to a @var{num} byte boundary. If @@ -3444,6 +3487,21 @@ suppresses this pass. The post-processor is never run when the compiler is built for cross-compilation. @end table +@node MN10300 Options +@subsection MN10300 Options +@cindex MN10300 options +These @samp{-m} options are defined for Matsushita MN10300 architectures: + +@table @code +@item -mmult-bug +Generate code to avoid bugs in the multiply instructions for the MN10300 +processors. This is the default. + +@item -mno-mult-bug +Do not generate code to avoid bugs in the multiply instructions for the +MN10300 processors. +@end table + @node M32R/D Options @subsection M32R/D Options @cindex M32R/D options @@ -4011,7 +4069,7 @@ be compiled with @samp{-mrelocatable} or @samp{-mrelocatable-lib}. @itemx -mno-relocatable-lib On embedded PowerPC systems generate code that allows (does not allow) the program to be relocated to a different address at runtime. Modules -compiled with @samp{-mreloctable-lib} can be linked with either modules +compiled with @samp{-mrelocatable-lib} can be linked with either modules compiled without @samp{-mrelocatable} and @samp{-mrelocatable-lib} or with modules compiled with the @samp{-mrelocatable} options. @@ -4156,7 +4214,7 @@ in the @samp{.data} section, and all uninitialized data in the @item -G @var{num} @cindex smaller data references (PowerPC) @cindex .sdata/.sdata2 references (PowerPC) -On embbeded PowerPC systems, put global and static items less than or +On embedded PowerPC systems, put global and static items less than or equal to @var{num} bytes into the small data or bss sections instead of the normal data or bss section. By default, @var{num} is 8. The @samp{-G @var{num}} switch is also passed to the linker. @@ -4432,10 +4490,27 @@ defaults. These @samp{-m} options are defined for the i386 family of computers: @table @code -@item -m486 -@itemx -m386 -Control whether or not code is optimized for a 486 instead of an -386. Code generated for an 486 will run on a 386 and vice versa. +@item -mcpu=@var{cpu type} +Assume the defaults for the machine type @var{cpu type} when scheduling +instructions. The choices for @var{cpu type} are: @samp{i386}, +@samp{i486}, @samp{i586} (@samp{pentium}), @samp{pentium}, @samp{i686} +(@samp{pentiumpro}) and @samp{pentiumpro}. While picking a specific +@var{cpu type} will schedule things appropriately for that particular +chip, the compiler will not generate any code that does not run on the +i386 without the @samp{-march=@var{cpu type}} option being used. + +@item -march=@var{cpu type} +Generate instructions for the machine type @var{cpu type}. The choices +for @var{cpu type} are: @samp{i386}, @samp{i486}, @samp{pentium}, and +@samp{pentiumpro}. Specifying @samp{-march=@var{cpu type}} implies +@samp{-mcpu=@var{cpu type}}. + +@item -m386 +@itemx -m486 +@itemx -mpentium +@itemx -mpentiumpro +Synonyms for -mcpu=i386, -mcpu=i486, -mcpu=pentium, and -mcpu=pentiumpro +respectively. @item -mieee-fp @itemx -mno-ieee-fp @@ -4604,7 +4679,7 @@ functions. @item -mspace Optimize for space rather than execution time. Currently this only enables out of line function prologues and epilogues. This option is -incompatable with PIC code generation and profiling. +incompatible with PIC code generation and profiling. @item -mlong-load-store Generate 3-instruction load and store sequences as sometimes required by @@ -4887,7 +4962,7 @@ IEEE-conformant math library routines will be linked in. Normally GNU CC examines a 32- or 64-bit integer constant to see if it can construct it from smaller constants in two or three instructions. If it cannot, it will output the constant as a literal and -generate code to load it from the data segement at runtime. +generate code to load it from the data segment at runtime. Use this option to require GNU CC to construct @emph{all} integer constants using code, even if it takes more instructions (the maximum is six). @@ -4895,6 +4970,57 @@ using code, even if it takes more instructions (the maximum is six). You would typically use this option to build a shared library dynamic loader. Itself a shared library, it must relocate itself in memory before it can find the variables and constants in its own data segment. + +@item -malpha-as +@itemx -mgas +Select whether to generate code to be assembled by the vendor-supplied +assembler (@samp{-malpha-as}) or by the GNU assembler @samp{-mgas}. + +@item -mbwx +@itemx -mno-bwx +@itemx -mcix +@itemx -mno-cix +@itemx -mmax +@itemx -mno-max +Indicate whether GNU CC should generate code to use the optional BWX, +CIX, and MAX instruction sets. The default is to use the instruction sets +supported by the CPU type specified via @samp{-mcpu=} option or that +of the CPU on which GNU CC was built if none was specified. + +@item -mcpu=@var{cpu type} +@item -mcpu=@var{cpu_type} +Set the instruction set, register set, and instruction scheduling +parameters for machine type @var{cpu_type}. You can specify either the +@samp{EV} style name or the corresponding chip number. GNU CC +supports scheduling parameters for the EV4 and EV5 family of processors +and will choose the default values for the instruction set from +the processor you specify. If you do not specify a processor type, +GNU CC will default to the processor on which the compiler was built. + +Supported values for @var{cpu_type} are + +@table @samp +@item ev4 +@itemx 21064 +Schedules as an EV4 and has no instruction set extensions. + +@item ev5 +@itemx 21164 +Schedules as an EV5 and has no instruction set extensions. + +@item ev56 +@itemx 21164a +Schedules as an EV5 and supports the BWX extension. + +@item pca56 +@itemx 21164PC +Schedules as an EV5 and supports the BWX and MAX extensions. + +@item ev6 +@itemx 21264 +Schedules as an EV5 (until Digital releases the scheduling parameters +for the EV6) and supports the BWX, CIX, and MAX extensions. +@end table @end table @node Clipper Options @@ -5068,6 +5194,16 @@ can figure out the other form by either removing @samp{no-} or adding it. @table @code +@item -fexceptions +Enable exception handling, and generate extra code needed to propagate +exceptions. If you do not specify this option, GNU CC enables it by +default for languages like C++ that normally require exception handling, +and disabled for languages like C that do not normally require it. +However, when compiling C code that needs to interoperate properly with +exception handlers written in C++, you may need to enable this option. +You may also wish to disable this option is you are compiling older C++ +programs that don't use exception handling. + @item -fpcc-struct-return Return ``short'' @code{struct} and @code{union} values in memory like longer ones, rather than in registers. This convention is less @@ -5193,7 +5329,7 @@ This flag does not have a negative form, because it specifies a three-way choice. @item -fcall-used-@var{reg} -Treat the register named @var{reg} as an allocatable register that is +Treat the register named @var{reg} as an allocable register that is clobbered by function calls. It may be allocated for temporaries or variables that do not live across a call. Functions compiled this way will not save and restore the register @var{reg}. @@ -5206,7 +5342,7 @@ This flag does not have a negative form, because it specifies a three-way choice. @item -fcall-saved-@var{reg} -Treat the register named @var{reg} as an allocatable register saved by +Treat the register named @var{reg} as an allocable register saved by functions. It may be allocated even for temporaries or variables that live across a call. Functions compiled this way will save and restore the register @var{reg} if they use it. @@ -5233,7 +5369,7 @@ code that is suitable for a detector of bad memory accesses such as @code{asm} or @code{__asm__} keywords. You must also specify this option when you compile functions you call that -have side effects. If you do not, you may get erronous messages from +have side effects. If you do not, you may get erroneous messages from the detector. Normally, you should compile all your code with this option. If you use functions from a library that have side-effects (such as @code{read}), you may not be able to recompile the library and diff --git a/gcc/jump.c b/gcc/jump.c index f72dedf387b..00e31cf22ec 100644 --- a/gcc/jump.c +++ b/gcc/jump.c @@ -117,6 +117,7 @@ static void delete_computation PROTO((rtx)); static void delete_from_jump_chain PROTO((rtx)); static int delete_labelref_insn PROTO((rtx, rtx, int)); static void redirect_tablejump PROTO((rtx, rtx)); +static rtx find_insert_position PROTO((rtx, rtx)); /* Delete no-op jumps and optimize jumps to jumps and jumps around jumps. @@ -996,11 +997,12 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan) { rtx new = gen_reg_rtx (GET_MODE (temp2)); - if (validate_change (temp, &SET_DEST (temp1), new, 0)) + if ((temp3 = find_insert_position (insn, temp)) + && validate_change (temp, &SET_DEST (temp1), new, 0)) { next = emit_insn_after (gen_move_insn (temp2, new), insn); emit_insn_after_with_line_notes (PATTERN (temp), - PREV_INSN (insn), temp); + PREV_INSN (temp3), temp); delete_insn (temp); reallabelprev = prev_active_insn (JUMP_LABEL (insn)); } @@ -1039,14 +1041,19 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan) { rtx new = gen_reg_rtx (GET_MODE (temp2)); - if (validate_change (temp, &SET_DEST (temp1), new, 0)) + if ((temp5 = find_insert_position (insn, temp)) + && (temp6 = find_insert_position (insn, temp3)) + && validate_change (temp, &SET_DEST (temp1), new, 0)) { + /* Use the earliest of temp5 and temp6. */ + if (temp5 != insn) + temp6 = temp5; next = emit_insn_after (gen_move_insn (temp2, new), insn); emit_insn_after_with_line_notes (PATTERN (temp), - PREV_INSN (insn), temp); + PREV_INSN (temp6), temp); emit_insn_after_with_line_notes (replace_rtx (PATTERN (temp3), temp2, new), - PREV_INSN (insn), temp3); + PREV_INSN (temp6), temp3); delete_insn (temp); delete_insn (temp3); reallabelprev = prev_active_insn (JUMP_LABEL (insn)); @@ -1095,13 +1102,18 @@ jump_optimize (f, cross_jump, noop_moves, after_regscan) { rtx new = gen_reg_rtx (GET_MODE (temp2)); - if (validate_change (temp3, &SET_DEST (temp4), new, 0)) + if ((temp5 = find_insert_position (insn, temp)) + && (temp6 = find_insert_position (insn, temp3)) + && validate_change (temp3, &SET_DEST (temp4), new, 0)) { + /* Use the earliest of temp5 and temp6. */ + if (temp5 != insn) + temp6 = temp5; next = emit_insn_after (gen_move_insn (temp2, new), insn); emit_insn_after_with_line_notes (PATTERN (temp), - PREV_INSN (insn), temp); + PREV_INSN (temp6), temp); emit_insn_after_with_line_notes (PATTERN (temp3), - PREV_INSN (insn), temp3); + PREV_INSN (temp6), temp3); delete_insn (temp); delete_insn (temp3); reallabelprev = prev_active_insn (JUMP_LABEL (insn)); @@ -4708,3 +4720,45 @@ rtx_equal_for_thread_p (x, y, yinsn) } return 1; } + + +/* Return the insn that NEW can be safely inserted in front of starting at + the jump insn INSN. Return 0 if it is not safe to do this jump + optimization. Note that NEW must contain a single set. */ + +static rtx +find_insert_position (insn, new) + rtx insn; + rtx new; +{ + int i; + rtx prev; + + /* If NEW does not clobber, it is safe to insert NEW before INSN. */ + if (GET_CODE (PATTERN (new)) != PARALLEL) + return insn; + + for (i = XVECLEN (PATTERN (new), 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (PATTERN (new), 0, i)) == CLOBBER + && reg_overlap_mentioned_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0), + insn)) + break; + + if (i < 0) + return insn; + + /* There is a good chance that the previous insn PREV sets the thing + being clobbered (often the CC in a hard reg). If PREV does not + use what NEW sets, we can insert NEW before PREV. */ + + prev = prev_active_insn (insn); + for (i = XVECLEN (PATTERN (new), 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (PATTERN (new), 0, i)) == CLOBBER + && reg_overlap_mentioned_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0), + insn) + && ! modified_in_p (XEXP (XVECEXP (PATTERN (new), 0, i), 0), + prev)) + return 0; + + return reg_mentioned_p (SET_DEST (single_set (new)), prev) ? 0 : prev; +} diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index ae97c5313ae..9df19dce488 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -46,6 +46,13 @@ Boston, MA 02111-1307, USA. */ #define WEAK_ALIAS #endif +/* In a cross-compilation situation, default to inhibiting compilation + of routines that use libc. */ + +#ifdef CROSS_COMPILE +#define inhibit_libc +#endif + /* Permit the tm.h file to select the endianness to use just for this file. This is used when the endianness is determined when the compiler is run. */ @@ -1530,7 +1537,7 @@ __bb_exit_func (void) continue; } - /* ??? Should first write a header to the file. Perferably, a 4 byte + /* ??? Should first write a header to the file. Preferably, a 4 byte magic number, 4 bytes containing the time the program was compiled, 4 bytes containing the last modification time of the source file, and 4 bytes indicating the compiler options used. @@ -3109,7 +3116,9 @@ int _exit_dummy_decl = 0; /* prevent compiler & linker warnings */ /* Shared exception handling support routines. */ -extern void *__eh_type; +/* Language-specific information about the active exception(s). If there + are no active exceptions, it is set to 0. */ +void *__eh_info; void __default_terminate () @@ -3224,7 +3233,7 @@ __sjthrow () /* We must call terminate if we try and rethrow an exception, when there is no exception currently active and when there are no handlers left. */ - if (! __eh_type || (*dhc) == top_elt) + if (! __eh_info || (*dhc) == top_elt) __terminate (); /* Find the jmpbuf associated with the top element of the dynamic @@ -3307,7 +3316,7 @@ __sjpopnthrow () /* This value identifies the place from which an exception is being thrown. */ -extern void *__eh_pc; +void *__eh_pc; #ifdef EH_TABLE_LOOKUP @@ -3652,7 +3661,7 @@ __throw () /* This is required for C++ semantics. We must call terminate if we try and rethrow an exception, when there is no exception currently active. */ - if (! __eh_type) + if (! __eh_info) __terminate (); /* Start at our stack frame. */ @@ -3679,6 +3688,7 @@ label: /* Now reset pc to the right throw point. */ pc = __eh_pc; + handler = 0; for (;;) { frame_state *p = udata; diff --git a/gcc/listing b/gcc/listing index 08abb1db4ce..dc989f6eaef 100755 --- a/gcc/listing +++ b/gcc/listing @@ -32,7 +32,7 @@ # mc68030 for Motorola 68030 (Sun-3, ..) # sparc for SPARC (SUN-4, ..) # i386 for i386 (Sun i386, ...) -# i386-linux for i386 (Linux, ...) +# i386-gnu-linux for i386 (GNU/Linux, ...) # Guess what kind of objects we are creating and thus what type of assembler # symbols to look for @@ -62,7 +62,7 @@ cd $WD # MYSYS=mc68030 # MYSYS=sparc # MYSYS=i386 -# MYSYS=i386-linux +# MYSYS=i386-gnu-linux # MYSYS=`mach` # this will work on Suns with SunOS > 4.0.0 # MYSYS=elf # MYSYS=coff @@ -103,7 +103,7 @@ BEGIN { line_delimiter = ","; line_offset = 0; } - else if (sys == "mc68020" || sys == "mc68030" || sys == "i386-linux") { + else if (sys == "mc68020" || sys == "mc68030" || sys == "i386-gnu-linux") { line_hint = "^[ \t]*\.stabd.*" line_field = 3; line_delimiter = ","; diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 12a2ebdbde7..080afe2f7b1 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -1699,17 +1699,11 @@ block_alloc (b) { if (GET_CODE (qty_scratch_rtx[q]) == REG) abort (); - PUT_CODE (qty_scratch_rtx[q], REG); - REGNO (qty_scratch_rtx[q]) = qty_phys_reg[q]; - + qty_scratch_rtx[q] = gen_rtx (REG, GET_MODE (qty_scratch_rtx[q]), + qty_phys_reg[q]); scratch_block[scratch_index] = b; scratch_list[scratch_index++] = qty_scratch_rtx[q]; - /* Must clear the USED field, because it will have been set by - copy_rtx_if_shared, but the leaf_register code expects that - it is zero in all REG rtx. copy_rtx_if_shared does not set the - used bit for REGs, but does for SCRATCHes. */ - qty_scratch_rtx[q]->used = 0; } } } diff --git a/gcc/loop.c b/gcc/loop.c index 118bcd0e2c1..137658cebf0 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -3547,11 +3547,20 @@ strength_reduce (scan_start, end, loop_top, insn_count, for (bl = loop_iv_list; bl; bl = bl->next) { rtx src; + rtx note; if (! bl->init_insn) continue; - src = SET_SRC (bl->init_set); + /* IF INIT_INSN has a REG_EQUAL or REG_EQUIV note and the value + is a constant, use the value of that. */ + if (((note = find_reg_note (bl->init_insn, REG_EQUAL, 0)) != NULL + && CONSTANT_P (XEXP (note, 0))) + || ((note = find_reg_note (bl->init_insn, REG_EQUIV, 0)) != NULL + && CONSTANT_P (XEXP (note, 0)))) + src = XEXP (note, 0); + else + src = SET_SRC (bl->init_set); if (loop_dump_stream) fprintf (loop_dump_stream, @@ -6067,8 +6076,8 @@ check_dbra_loop (loop_end, insn_count, loop_start) /* Now check other conditions: - The increment must be a constant and the comparison code - must be LT. + The increment must be a constant, as must the initial value, + and the comparison code must be LT. This test can probably be improved since +/- 1 in the constant can be obtained by changing LT to LE and vice versa; this is @@ -6077,7 +6086,8 @@ check_dbra_loop (loop_end, insn_count, loop_start) if (comparison && GET_CODE (XEXP (comparison, 1)) == CONST_INT /* LE gets turned into LT */ - && GET_CODE (comparison) == LT) + && GET_CODE (comparison) == LT + && GET_CODE (bl->initial_value) == CONST_INT) { HOST_WIDE_INT add_val, comparison_val; rtx initial_value; diff --git a/gcc/machmode.def b/gcc/machmode.def index 625586cd96f..88af09b913e 100644 --- a/gcc/machmode.def +++ b/gcc/machmode.def @@ -1,6 +1,6 @@ /* This file contains the definitions and documentation for the machine modes used in the the GNU compiler. - Copyright (C) 1987, 1992, 1994 Free Software Foundation, Inc. + Copyright (C) 1987, 1992, 1994, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -84,6 +84,8 @@ DEF_MACHMODE (XFmode, "XF", MODE_FLOAT, 12, 12, TFmode) /* IEEE extended */ DEF_MACHMODE (TFmode, "TF", MODE_FLOAT, 16, 16, VOIDmode) /* Complex modes. */ +DEF_MACHMODE (QCmode, "QC", MODE_COMPLEX_FLOAT, 2, 1, HCmode) +DEF_MACHMODE (HCmode, "HC", MODE_COMPLEX_FLOAT, 4, 2, SCmode) DEF_MACHMODE (SCmode, "SC", MODE_COMPLEX_FLOAT, 8, 4, DCmode) DEF_MACHMODE (DCmode, "DC", MODE_COMPLEX_FLOAT, 16, 8, XCmode) DEF_MACHMODE (XCmode, "XC", MODE_COMPLEX_FLOAT, 24, 12, TCmode) diff --git a/gcc/make-cc1.com b/gcc/make-cc1.com index 9f816b78d74..ecbe5b533e8 100644 --- a/gcc/make-cc1.com +++ b/gcc/make-cc1.com @@ -295,16 +295,17 @@ $if (f$search("C-PARSE.Y") .eqs. "") then goto yes_yfiles $if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. - f$cvtime(f$file_attributes("C-PARSE.Y","RDT"))) - then goto yes_yfiles -$if (f$search("OBJC-PARSE.Y") .eqs. "") then goto yes_yfiles +$if f$parse("[.OBJC]").eqs."" then create/Directory [.objc] +$if (f$search("[.OBJC]OBJC-PARSE.Y") .eqs. "") then goto yes_yfiles $if (f$cvtime(f$file_attributes("C-PARSE.IN","RDT")).gts. - - f$cvtime(f$file_attributes("OBJC-PARSE.Y","RDT"))) - + f$cvtime(f$file_attributes("[.OBJC]OBJC-PARSE.Y","RDT"))) - then goto yes_yfiles $GOTO no_yfiles $yes_yfiles: -$echo "Now processing c-parse.in to generate c-parse.y and objc-parse.y." -$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input +$echo "Now processing c-parse.in to generate c-parse.y and [.objc]objc-parse.y." +$ EDIT/Tpu/noJournal/noSection/noDisplay/Command=sys$input: ! -! Read c-parse.in, write c-parse.y and objc-parse.y, depending on +! Read c-parse.in, write c-parse.y and objc/objc-parse.y, depending on ! paired lines of "ifc" & "end ifc" and "ifobjc" & "end ifobjc" to ! control what goes into each file. Most lines will be common to ! both (hence not bracketed by either control pair). Mismatched @@ -344,7 +345,7 @@ $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input ENDLOOP; WRITE_FILE(c, "c-parse.y"); - WRITE_FILE(objc, "objc-parse.y"); + WRITE_FILE(objc, "[.objc]objc-parse.y"); QUIT $ endif $no_yfiles: diff --git a/gcc/make-cccp.com b/gcc/make-cccp.com index e383f310df2..867a4385dee 100644 --- a/gcc/make-cccp.com +++ b/gcc/make-cccp.com @@ -93,8 +93,9 @@ $skip_yacc: $ echo " (Ignore any warning about not finding file ""bison.simple"".)" $ set verify $ 'CC''CFLAGS' cexp.c +$ 'CC''CFLAGS'/Define="PREFIX=""_dummy_""" prefix.c $!'f$verify(0) -$ +$ $! In case there's no builtin alloca support, use the C simulation. $ if f$locate("alloca.obj",f$edit(LIBS,"lowercase")).lt.f$length(LIBS) $ then @@ -108,7 +109,7 @@ $Link: $ echo " Linking the preprocessor." $ set verify $ 'LINK''LDFLAGS'/Exe=gcc-cpp.exe - - cccp.obj,cexp.obj,version.obj,version.opt/Opt,- + cccp.obj,cexp.obj,prefix.obj,version.obj,version.opt/Opt,- 'LIBS' $!'f$verify(0) $! diff --git a/gcc/make-l2.com b/gcc/make-l2.com index d22ad9b0f85..26657b3e724 100644 --- a/gcc/make-l2.com +++ b/gcc/make-l2.com @@ -69,7 +69,7 @@ $! We do this by hand, since the VMS compiler driver does not have a way $! of specifying an alternate location for the compiler executables. $! $ gcc_cpp "-I[]" "-I[.ginclude]" "-D''flnm'" libgcc2.c 'cpp_file' -$ gcc_cc1 'cpp_file' -dumpbase 'objname' - +$ gcc_cc1 'cpp_file' -dumpbase 'objname' -fexceptions - -quiet -mgnu -g "-O1" -mvaxc-alignment -o 's_file' $ delete/nolog 'cpp_file'; $ gcc_as "-vGNU CC V''Version'" 's_file' -o 'objname'.OBJ diff --git a/gcc/md.texi b/gcc/md.texi index ae2a0bab804..acc616fb8e4 100644 --- a/gcc/md.texi +++ b/gcc/md.texi @@ -1735,23 +1735,23 @@ scratch registers after reload, you must define patterns @samp{reload_in@var{m}} or @samp{reload_out@var{m}} to handle them. @xref{Register Classes}. -The constraints on a @samp{move@var{m}} must permit moving any hard +The constraints on a @samp{mov@var{m}} must permit moving any hard register to any other hard register provided that @code{HARD_REGNO_MODE_OK} permits mode @var{m} in both registers and @code{REGISTER_MOVE_COST} applied to their classes returns a value of 2. -It is obligatory to support floating point @samp{move@var{m}} +It is obligatory to support floating point @samp{mov@var{m}} instructions into and out of any registers that can hold fixed point values, because unions and structures (which have modes @code{SImode} or @code{DImode}) can be in those registers and they may have floating point members. -There may also be a need to support fixed point @samp{move@var{m}} +There may also be a need to support fixed point @samp{mov@var{m}} instructions in and out of floating point registers. Unfortunately, I have forgotten why this was so, and I don't know whether it is still true. If @code{HARD_REGNO_MODE_OK} rejects fixed point values in floating point registers, then the constraints of the fixed point -@samp{move@var{m}} instructions must be designed to avoid ever trying to +@samp{mov@var{m}} instructions must be designed to avoid ever trying to reload into a floating point register. @cindex @code{reload_in} instruction pattern @@ -2400,7 +2400,7 @@ are allocating space from the main stack, do this by emitting a move insn to copy @code{virtual_stack_dynamic_rtx} to operand 0. If you are allocating the space elsewhere, generate code to copy the location of the space to operand 0. In the latter case, you must -ensure this space gets freed when the correspoinding space on the main +ensure this space gets freed when the corresponding space on the main stack is free. Do not define this pattern if all that must be done is the subtraction. @@ -2740,6 +2740,7 @@ converted into the appropriate multiplication by a power of two. @cindex @code{ior}, canonicalization of @cindex @code{and}, canonicalization of @cindex De Morgan's law +@item De`Morgan's Law is used to move bitwise negation inside a bitwise logical-and or logical-or operation. If this results in only one operand being a @code{not} expression, it will be the first one. diff --git a/gcc/mips-tfile.c b/gcc/mips-tfile.c index b87a8ac5e49..39f3bc61f1f 100644 --- a/gcc/mips-tfile.c +++ b/gcc/mips-tfile.c @@ -3294,14 +3294,22 @@ parse_def (name_start) } - t.extra_sizes = (tag_start != (char *) 0); + if (storage_class == sc_Bits) + { + t.bitfield = 1; + t.extra_sizes = 1; + } + else + t.extra_sizes = 0; + if (t.num_dims > 0) { - int diff = t.num_dims - t.num_sizes; + int num_real_sizes = t.num_sizes - t.extra_sizes; + int diff = t.num_dims - num_real_sizes; int i = t.num_dims - 1; int j; - if (t.num_sizes != 1 || diff < 0) + if (num_real_sizes != 1 || diff < 0) { error_line = __LINE__; saber_stop (); @@ -3312,7 +3320,6 @@ parse_def (name_start) and sizes were passed, creating extra sizes for multiply dimensioned arrays if not passed. */ - t.extra_sizes = 0; if (diff) { for (j = (sizeof (t.sizes) / sizeof (t.sizes[0])) - 1; j >= 0; j--) @@ -3329,14 +3336,6 @@ parse_def (name_start) } } - else if (symbol_type == st_Member && t.num_sizes - t.extra_sizes == 1) - { /* Is this a bitfield? This is indicated by a structure member - having a size field that isn't an array. */ - - t.bitfield = 1; - } - - /* Except for enumeration members & begin/ending of scopes, put the type word in the aux. symbol table. */ diff --git a/gcc/objc/Make-lang.in b/gcc/objc/Make-lang.in index 53458dfc3b1..bd4038f4e10 100644 --- a/gcc/objc/Make-lang.in +++ b/gcc/objc/Make-lang.in @@ -71,7 +71,7 @@ cc1obj: $(P) $(OBJC_OBJS) $(OBJS) $(BC_OBJS) $(LIBDEPS) objc-parse.o : $(srcdir)/objc/objc-parse.c \ $(CONFIG_H) $(TREE_H) \ $(srcdir)/c-lex.h $(srcdir)/c-tree.h $(srcdir)/input.h \ - $(srcdir)/flags.h $(srcdir)/objc/objc-act.h + $(srcdir)/flags.h $(srcdir)/output.h $(srcdir)/objc/objc-act.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \ -c $(srcdir)/objc/objc-parse.c @@ -90,7 +90,7 @@ objc-act.o : $(srcdir)/objc/objc-act.c \ $(CONFIG_H) $(TREE_H) $(RTL_H) \ $(srcdir)/c-tree.h $(srcdir)/c-lex.h \ $(srcdir)/flags.h $(srcdir)/objc/objc-act.h $(srcdir)/input.h \ - $(srcdir)/function.h $(srcdir)/c-parse.h + $(srcdir)/function.h $(srcdir)/output.h $(srcdir)/c-parse.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -I$(srcdir)/objc \ -c $(srcdir)/objc/objc-act.c @@ -153,13 +153,13 @@ objc/misc.o: $(srcdir)/objc/misc.c $(GCC_PASSES) -c $(srcdir)/objc/misc.c -o $@ objc/NXConstStr.o: $(srcdir)/objc/NXConstStr.m $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ - -c $(srcdir)/objc/NXConstStr.m -o $@ + -fgnu-runtime -c $(srcdir)/objc/NXConstStr.m -o $@ objc/Object.o: $(srcdir)/objc/Object.m $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ - -c $(srcdir)/objc/Object.m -o $@ + -fgnu-runtime -c $(srcdir)/objc/Object.m -o $@ objc/Protocol.o: $(srcdir)/objc/Protocol.m $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ - -c $(srcdir)/objc/Protocol.m -o $@ + -fgnu-runtime -c $(srcdir)/objc/Protocol.m -o $@ objc/thr.o: $(srcdir)/objc/thr.h $(srcdir)/objc/thr.c $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ -c $(srcdir)/objc/thr.c -o $@ @@ -171,7 +171,7 @@ objc/nil_method.o: $(srcdir)/objc/nil_method.c $(GCC_PASSES) -c $(srcdir)/objc/nil_method.c -o $@ objc/linking.o: $(srcdir)/objc/linking.m $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ - -c $(srcdir)/objc/linking.m -o $@ + -fgnu-runtime -c $(srcdir)/objc/linking.m -o $@ $(srcdir)/objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ @@ -179,7 +179,7 @@ $(srcdir)/objc/libobjc_entry.o: $(srcdir)/objc/libobjc_entry.c $(GCC_PASSES) # Build the Objective C runtime library. libobjc.a: cc1obj specs stmp-int-hdrs libgcc2.ready \ - $(USE_COLLECT2) $(EXTRA_PARTS) $(OBJC_O) + $(USE_COLLECT2) $(EXTRA_PARTS) $(srcdir)/objc/runtime-info.h $(OBJC_O) -rm -f libobjc.a $(AR) $(AR_FLAGS) libobjc.a $(OBJC_O) -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi @@ -189,22 +189,28 @@ libobjc_s.a: libobjc.a # Create a relocatable DLL libobjc.dll: libobjc_s.a $(srcdir)/objc/libobjc_entry.o - $(GCC_FOR_TARGET) -dll -Wl,--base-file -Wl,libobjc.base \ + $(GCC_FOR_TARGET) -mdll -Wl,--base-file -Wl,libobjc.base \ -o libobjc.dll libobjc_s.a \ $(srcdir)/objc/libobjc_entry.o -lkernel32 $(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \ --base-file libobjc.base --output-exp libobjc.exp - $(GCC_FOR_TARGET) -dll -Wl,--base-file libobjc.base libobjc.exp \ + $(GCC_FOR_TARGET) -mdll -Wl,--base-file libobjc.base libobjc.exp \ -o libobjc.dll libobjc_s.a \ $(srcdir)/objc/libobjc_entry.o -lkernel32 $(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \ --base-file libobjc.base --output-exp libobjc.exp - $(GCC_FOR_TARGET) libobjc.exp -dll \ + $(GCC_FOR_TARGET) libobjc.exp -mdll \ -o libobjc.dll libobjc_s.a \ $(srcdir)/objc/libobjc_entry.o -lkernel32 $(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/objc/libobjc.def \ --output-lib libobjc.a +# Platform generated information needed by ObjC runtime +$(srcdir)/objc/runtime-info.h: cc1obj + echo "" > emptyfile + echo "/* This file is automatically generated */" >$@ + ./cc1obj -print-objc-runtime-info emptyfile >>$@ + # # Build hooks: diff --git a/gcc/objc/Object.m b/gcc/objc/Object.m index 8573f3645a2..d6a10019773 100644 --- a/gcc/objc/Object.m +++ b/gcc/objc/Object.m @@ -213,7 +213,7 @@ extern int errno; } } - if (parent = [self superClass]) + if ((parent = [self superClass])) return [parent conformsTo: aProtocol]; else return NO; diff --git a/gcc/objc/THREADS b/gcc/objc/THREADS index 034cb5a6b81..9dfbbed97af 100644 --- a/gcc/objc/THREADS +++ b/gcc/objc/THREADS @@ -4,7 +4,7 @@ Objective-C runtime needed to make it thread safe. First off, kudos to Galen Hunt who is the author of this great work. If you have an comments or just want to know where to -send me money to express your undying graditude for threading the +send me money to express your undying gratitude for threading the Objective-C runtime you can reach Galen at: gchunt@cs.rochester.edu @@ -242,9 +242,9 @@ __objc_thread_get_data(void), void * ****************************************************************************** -* Mutexs: +* Mutexes: -Mutexs can be locked recursively. Each locked mutex remembers +Mutexes can be locked recursively. Each locked mutex remembers its owner (by thread id) and how many times it has been locked. The last unlock on a mutex removes the system lock and allows other threads to access the mutex. @@ -302,9 +302,9 @@ __objc_mutex_unlock(objc_mutex_t mutex), int Return -1 if error otherwise return 0. ****************************************************************************** -* Condition Mutexs: +* Condition Mutexes: -Mutexs can be locked recursively. Each locked mutex remembers +Mutexes can be locked recursively. Each locked mutex remembers its owner (by thread id) and how many times it has been locked. The last unlock on a mutex removes the system lock and allows other threads to access the mutex. diff --git a/gcc/objc/archive.c b/gcc/objc/archive.c index 2edb056acba..af9591b25ec 100644 --- a/gcc/objc/archive.c +++ b/gcc/objc/archive.c @@ -24,10 +24,15 @@ Boston, MA 02111-1307, USA. */ however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ +#include "config.h" #include "runtime.h" #include "typedstream.h" #include "encoding.h" +#ifdef HAVE_STDLIB_H +#include +#endif + extern int fflush(FILE*); #define ROUND(V, A) \ @@ -357,8 +362,11 @@ __objc_write_extension (struct objc_typed_stream* stream, unsigned char code) return (*stream->write)(stream->physical, &buf, 1); } else - objc_error(nil, OBJC_ERR_BAD_OPCODE, - "__objc_write_extension: bad opcode %c\n", code); + { + objc_error(nil, OBJC_ERR_BAD_OPCODE, + "__objc_write_extension: bad opcode %c\n", code); + return -1; + } } __inline__ int @@ -391,7 +399,7 @@ objc_write_object_reference (struct objc_typed_stream* stream, id object) int objc_write_root_object (struct objc_typed_stream* stream, id object) { - int len; + int len = 0; if (stream->writing_root_p) objc_error (nil, OBJC_ERR_RECURSE_ROOT, "objc_write_root_object called recursively"); @@ -1065,8 +1073,11 @@ objc_write_type(TypedStream* stream, const char* type, const void* data) } default: - objc_error(nil, OBJC_ERR_BAD_TYPE, - "objc_write_type: cannot parse typespec: %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, + "objc_write_type: cannot parse typespec: %s\n", type); + return 0; + } } } @@ -1158,8 +1169,11 @@ objc_read_type(TypedStream* stream, const char* type, void* data) } default: - objc_error(nil, OBJC_ERR_BAD_TYPE, - "objc_read_type: cannot parse typespec: %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, + "objc_read_type: cannot parse typespec: %s\n", type); + return 0; + } } } @@ -1423,12 +1437,14 @@ static int __objc_no_write(FILE* file, char* data, int len) { objc_error (nil, OBJC_ERR_NO_WRITE, "TypedStream not open for writing"); + return 0; } static int __objc_no_read(FILE* file, char* data, int len) { objc_error (nil, OBJC_ERR_NO_READ, "TypedStream not open for reading"); + return 0; } static int diff --git a/gcc/objc/class.c b/gcc/objc/class.c index 23bea154910..44aa1b9f98e 100644 --- a/gcc/objc/class.c +++ b/gcc/objc/class.c @@ -145,6 +145,7 @@ objc_get_class (const char *name) objc_error(nil, OBJC_ERR_BAD_CLASS, "objc runtime: cannot find class %s\n", name); + return 0; } MetaClass diff --git a/gcc/objc/encoding.c b/gcc/objc/encoding.c index c90e914f501..acd6b7a7b73 100644 --- a/gcc/objc/encoding.c +++ b/gcc/objc/encoding.c @@ -153,7 +153,10 @@ objc_sizeof_type(const char* type) } default: - objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + return 0; + } } } @@ -251,7 +254,10 @@ objc_alignof_type(const char* type) } default: - objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + return 0; + } } } @@ -354,7 +360,10 @@ objc_skip_typespec (const char* type) if (*type == _C_ARY_E) return ++type; else - objc_error(nil, OBJC_ERR_BAD_TYPE, "bad array type %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, "bad array type %s\n", type); + return 0; + } case _C_STRUCT_B: /* skip name, and elements until closing '}' */ @@ -376,7 +385,10 @@ objc_skip_typespec (const char* type) return objc_skip_typespec (++type); default: - objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + { + objc_error(nil, OBJC_ERR_BAD_TYPE, "unknown type %s\n", type); + return 0; + } } } diff --git a/gcc/objc/init.c b/gcc/objc/init.c index 5e56146c423..8a2e21b78dd 100644 --- a/gcc/objc/init.c +++ b/gcc/objc/init.c @@ -381,7 +381,7 @@ __objc_force_linking (void) /* Run through the statics list, removing modules as soon as all its statics have been initialized. */ static void -objc_init_statics () +objc_init_statics (void) { struct objc_list **cell = &uninitialized_statics; struct objc_static_instances **statics_in_module; diff --git a/gcc/objc/misc.c b/gcc/objc/misc.c index 8fc8a3fa6c8..01f9d3bbafa 100644 --- a/gcc/objc/misc.c +++ b/gcc/objc/misc.c @@ -1,6 +1,6 @@ /* GNU Objective C Runtime Miscellaneous Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. - Contrbuted by Kresten Krab Thorup + Contributed by Kresten Krab Thorup This file is part of GNU CC. diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 326be4f2ccb..6b0de8d3556 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -48,7 +48,8 @@ Boston, MA 02111-1307, USA. */ #include "input.h" #include "except.h" #include "function.h" - +#include +#include "output.h" /* This is the default way of generating a method name. */ /* I am not sure it is really correct. @@ -191,6 +192,15 @@ static tree synth_id_with_class_suffix PROTO((char *, tree)); /* From expr.c */ extern int apply_args_register_offset PROTO((int)); +static void generate_static_references PROTO((void)); +static int check_methods_accessible PROTO((tree, tree, + int)); +static void encode_aggregate_within PROTO((tree, int, int, + char, char)); + +/* We handle printing method names ourselves for ObjC */ +extern char *(*decl_printable_name) (); + /* Misc. bookkeeping */ typedef struct hashed_entry *hash; @@ -227,6 +237,8 @@ enum string_section static tree add_objc_string PROTO((tree, enum string_section)); +static tree get_objc_string_decl PROTO((tree, + enum string_section)); static tree build_objc_string_decl PROTO((tree, enum string_section)); static tree build_selector_reference_decl PROTO((tree)); @@ -502,6 +514,75 @@ int flag_warn_protocol = 1; static int generating_instance_variables = 0; +/* Tells the compiler that this is a special run. Do not perform + any compiling, instead we are to test some platform dependent + features and output a C header file with appropriate definitions. */ + +static int print_struct_values = 0; + +/* Some platforms pass small structures through registers versus through + an invisible pointer. Determine at what size structure is the + transition point between the two possibilities. */ + +void +generate_struct_by_value_array () +{ + tree type; + tree field_decl, field_decl_chain; + int i, j; + int aggregate_in_mem[32]; + int found = 0; + + /* Presumbaly no platform passes 32 byte structures in a register. */ + for (i = 1; i < 32; i++) + { + char buffer[5]; + + /* Create an unnamed struct that has `i' character components */ + type = start_struct (RECORD_TYPE, NULL_TREE); + + strcpy (buffer, "c1"); + field_decl = create_builtin_decl (FIELD_DECL, + char_type_node, + buffer); + field_decl_chain = field_decl; + + for (j = 1; j < i; j++) + { + sprintf (buffer, "c%d", j + 1); + field_decl = create_builtin_decl (FIELD_DECL, + char_type_node, + buffer); + chainon (field_decl_chain, field_decl); + } + finish_struct (type, field_decl_chain, NULL_TREE); + + aggregate_in_mem[i] = aggregate_value_p (type); + if (!aggregate_in_mem[i]) + found = 1; + } + + /* We found some structures that are returned in registers instead of memory + so output the necessary data. */ + if (found) + { + for (i = 31; i >= 0; i--) + if (!aggregate_in_mem[i]) + break; + printf ("#define OBJC_MAX_STRUCT_BY_VALUE %d\n\n", i); + + /* The first member of the structure is always 0 because we don't handle + structures with 0 members */ + printf ("static int struct_forward_array[] = {\n 0"); + + for (j = 1; j <= i; j++) + printf (", %d", aggregate_in_mem[j]); + printf ("\n};\n"); + } + + exit (0); +} + void lang_init () { @@ -550,6 +631,9 @@ lang_init () if (doing_objc_thang) init_objc (); + + if (print_struct_values) + generate_struct_by_value_array (); } static void @@ -603,6 +687,8 @@ lang_decode_option (p) flag_next_runtime = 1; else if (!strcmp (p, "-fnext-runtime")) flag_next_runtime = 1; + else if (!strcmp (p, "-print-objc-runtime-info")) + print_struct_values = 1; else return c_decode_option (p); @@ -1743,7 +1829,7 @@ get_objc_string_decl (ident, section) /* Output references to all statically allocated objects. Return the DECL for the array built. */ -static tree +static void generate_static_references () { tree decls = NULL_TREE, ident, decl_spec, expr_decl, expr = NULL_TREE; @@ -7863,6 +7949,71 @@ dump_interface (fp, chain) fprintf (fp, "\n@end"); } +/* Demangle function for Objective-C */ +static const char * +objc_demangle (mangled) + const char *mangled; +{ + char *demangled, *cp; + + if (mangled[0] == '_' && + (mangled[1] == 'i' || mangled[1] == 'c') && + mangled[2] == '_') + { + cp = demangled = xmalloc(strlen(mangled) + 2); + if (mangled[1] == 'i') + *cp++ = '-'; /* for instance method */ + else + *cp++ = '+'; /* for class method */ + *cp++ = '['; /* opening left brace */ + strcpy(cp, mangled+3); /* tack on the rest of the mangled name */ + while (*cp && *cp == '_') + cp++; /* skip any initial underbars in class name */ + cp = strchr(cp, '_'); /* find first non-initial underbar */ + if (cp == NULL) + { + free(demangled); /* not mangled name */ + return mangled; + } + if (cp[1] == '_') /* easy case: no category name */ + { + *cp++ = ' '; /* replace two '_' with one ' ' */ + strcpy(cp, mangled + (cp - demangled) + 2); + } + else + { + *cp++ = '('; /* less easy case: category name */ + cp = strchr(cp, '_'); + if (cp == 0) + { + free(demangled); /* not mangled name */ + return mangled; + } + *cp++ = ')'; + *cp++ = ' '; /* overwriting 1st char of method name... */ + strcpy(cp, mangled + (cp - demangled)); /* get it back */ + } + while (*cp && *cp == '_') + cp++; /* skip any initial underbars in method name */ + for (; *cp; cp++) + if (*cp == '_') + *cp = ':'; /* replace remaining '_' with ':' */ + *cp++ = ']'; /* closing right brace */ + *cp++ = 0; /* string terminator */ + return demangled; + } + else + return mangled; /* not an objc mangled name */ +} + +static const char * +objc_printable_name (decl, kind) + tree decl; + char **kind; +{ + return objc_demangle (IDENTIFIER_POINTER (DECL_NAME (decl))); +} + static void init_objc () { @@ -7898,6 +8049,9 @@ init_objc () errbuf = (char *)xmalloc (BUFSIZE); hash_init (); synth_module_prologue (); + + /* Change the default error function */ + decl_printable_name = (char* (*)()) objc_printable_name; } static void @@ -7917,7 +8071,7 @@ finish_objc () #endif /* Process the static instances here because initialization of objc_symtab - dependens on them. */ + depends on them. */ if (objc_static_instances) generate_static_references (); diff --git a/gcc/objc/objc-api.h b/gcc/objc/objc-api.h index 1f417f8287c..860aee4206a 100644 --- a/gcc/objc/objc-api.h +++ b/gcc/objc/objc-api.h @@ -576,7 +576,7 @@ object_is_meta_class(id object) } struct sarray* -objc_get_uninstalled_dtable(); +objc_get_uninstalled_dtable(void); #endif /* not __objc_api_INCLUDE_GNU */ diff --git a/gcc/objc/runtime.h b/gcc/objc/runtime.h index 4d88c24b014..b0eae4a222d 100644 --- a/gcc/objc/runtime.h +++ b/gcc/objc/runtime.h @@ -43,16 +43,17 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "objc/objc-list.h" /* linear lists */ extern void __objc_add_class_to_hash(Class); /* (objc-class.c) */ -extern void __objc_init_selector_tables(); /* (objc-sel.c) */ -extern void __objc_init_class_tables(); /* (objc-class.c) */ -extern void __objc_init_dispatch_tables(); /* (objc-dispatch.c) */ +extern void __objc_init_selector_tables(void); /* (objc-sel.c) */ +extern void __objc_init_class_tables(void); /* (objc-class.c) */ +extern void __objc_init_dispatch_tables(void); /* (objc-dispatch.c) */ extern void __objc_install_premature_dtable(Class); /* (objc-dispatch.c) */ -extern void __objc_resolve_class_links(); /* (objc-class.c) */ +extern void __objc_resolve_class_links(void); /* (objc-class.c) */ extern void __objc_register_selectors_from_class(Class); /* (objc-sel.c) */ extern void __objc_update_dispatch_table_for_class (Class);/* (objc-msg.c) */ -extern int __objc_init_thread_system(void); /* thread.c */ -extern int __objc_fini_thread_system(void); /* thread.c */ +extern int __objc_init_thread_system(void); /* thread.c */ +extern int __objc_fini_thread_system(void); /* thread.c */ +extern void __objc_print_dtable_stats(void); /* sendmsg.c */ extern void class_add_method_list(Class, MethodList_t); diff --git a/gcc/objc/selector.c b/gcc/objc/selector.c index b2fdccb520b..83c70e4ae0f 100644 --- a/gcc/objc/selector.c +++ b/gcc/objc/selector.c @@ -196,7 +196,7 @@ sel_get_typed_uid (const char *name, const char *types) return 0; } - for (l = (struct objc_list*)sarray_get (__objc_selector_array, i); + for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i); l; l = l->tail) { SEL s = (SEL)l->head; @@ -225,7 +225,7 @@ sel_get_any_typed_uid (const char *name) { struct objc_list *l; sidx i; - SEL s; + SEL s = NULL; objc_mutex_lock(__objc_runtime_mutex); @@ -236,7 +236,7 @@ sel_get_any_typed_uid (const char *name) return 0; } - for (l = (struct objc_list*)sarray_get (__objc_selector_array, i); + for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i); l; l = l->tail) { s = (SEL) l->head; @@ -267,7 +267,7 @@ sel_get_any_uid (const char *name) return 0; } - l = (struct objc_list*)sarray_get (__objc_selector_array, i); + l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i); objc_mutex_unlock(__objc_runtime_mutex); if (l == 0) @@ -293,7 +293,7 @@ sel_get_name (SEL selector) objc_mutex_lock(__objc_runtime_mutex); if ((soffset_decode((sidx)selector->sel_id) > 0) && (soffset_decode((sidx)selector->sel_id) <= __objc_selector_max_index)) - ret = sarray_get (__objc_selector_names, (sidx) selector->sel_id); + ret = sarray_get_safe (__objc_selector_names, (sidx) selector->sel_id); else ret = 0; objc_mutex_unlock(__objc_runtime_mutex); @@ -338,7 +338,7 @@ __sel_register_typed_name (const char *name, const char *types, i = (sidx) hash_value_for_key (__objc_selector_hash, name); if (soffset_decode (i) != 0) { - for (l = (struct objc_list*)sarray_get (__objc_selector_array, i); + for (l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i); l; l = l->tail) { SEL s = (SEL)l->head; @@ -379,7 +379,7 @@ __sel_register_typed_name (const char *name, const char *types, j->sel_types = (char *) objc_malloc(strlen(types)+1); strcpy((char *)j->sel_types, types); } - l = (struct objc_list*)sarray_get (__objc_selector_array, i); + l = (struct objc_list*)sarray_get_safe (__objc_selector_array, i); } else { diff --git a/gcc/objc/sendmsg.c b/gcc/objc/sendmsg.c index c061d8888c8..6f3487c260e 100644 --- a/gcc/objc/sendmsg.c +++ b/gcc/objc/sendmsg.c @@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */ #include "runtime.h" #include "sarray.h" #include "encoding.h" +#include "runtime-info.h" /* this is how we hack STRUCT_VALUE to be 1 or 0 */ #define gen_rtx(args...) 1 @@ -76,7 +77,11 @@ __objc_get_forward_imp (SEL sel) { const char *t = sel->sel_types; - if (t && (*t == '[' || *t == '(' || *t == '{')) + if (t && (*t == '[' || *t == '(' || *t == '{') +#ifdef OBJC_MAX_STRUCT_BY_VALUE + && objc_sizeof_type(t) > OBJC_MAX_STRUCT_BY_VALUE +#endif + ) return (IMP)__objc_block_forward; else if (t && (*t == 'f' || *t == 'd')) return (IMP)__objc_double_forward; @@ -89,8 +94,7 @@ __inline__ IMP get_imp (Class class, SEL sel) { - IMP impl; - void* res = sarray_get (class->dtable, (size_t) sel->sel_id); + void* res = sarray_get_safe (class->dtable, (size_t) sel->sel_id); if (res == 0) { /* Not a valid method */ @@ -133,7 +137,7 @@ __objc_responds_to (id object, SEL sel) } /* Get the method from the dispatch table */ - res = sarray_get (object->class_pointer->dtable, (size_t) sel->sel_id); + res = sarray_get_safe (object->class_pointer->dtable, (size_t) sel->sel_id); return (res != 0); } @@ -147,7 +151,8 @@ objc_msg_lookup(id receiver, SEL op) IMP result; if(receiver) { - result = sarray_get(receiver->class_pointer->dtable, (sidx)op->sel_id); + result = sarray_get_safe (receiver->class_pointer->dtable, + (sidx)op->sel_id); if (result == 0) { /* Not a valid method */ @@ -308,8 +313,8 @@ __objc_send_initialize(Class class) /* Walk on the methods list of class and install the methods in the reverse order of the lists. Since methods added by categories are before the methods of class in the methods list, this allows categories to substitute methods - declared in class. However if more than one category replace the same method - nothing is guarranteed about what method will be used. + declared in class. However if more than one category replaces the same + method nothing is guaranteed about what method will be used. Assumes that __objc_runtime_mutex is locked down. */ static void __objc_install_methods_in_dtable (Class class, MethodList_t method_list) @@ -336,7 +341,6 @@ static void __objc_install_dispatch_table_for_class (Class class) { Class super; - int counter; /* If the class has not yet had it's class links resolved, we must re-compute all class links */ @@ -539,6 +543,12 @@ __objc_block_forward (id rcv, SEL op, ...) res = __objc_forward (rcv, op, args); if (res) __builtin_return (res); + else +#if INVISIBLE_STRUCT_RETURN + return (__big) {0}; +#else + return nil; +#endif } @@ -593,6 +603,8 @@ __objc_forward (id object, SEL sel, arglist_t args) /* The object doesn't respond to doesNotRecognize: or error:; Therefore, a default action is taken. */ objc_error (object, OBJC_ERR_UNIMPLEMENTED, "%s\n", msg); + + return 0; } } @@ -612,13 +624,13 @@ __objc_print_dtable_stats() ); printf("arrays: %d = %ld bytes\n", narrays, - (int)narrays*sizeof(struct sarray)); + (long)narrays*sizeof(struct sarray)); total += narrays*sizeof(struct sarray); printf("buckets: %d = %ld bytes\n", nbuckets, - (int)nbuckets*sizeof(struct sbucket)); + (long)nbuckets*sizeof(struct sbucket)); total += nbuckets*sizeof(struct sbucket); - printf("idxtables: %d = %ld bytes\n", idxsize, (int)idxsize*sizeof(void*)); + printf("idxtables: %d = %ld bytes\n", idxsize, (long)idxsize*sizeof(void*)); total += idxsize*sizeof(void*); printf("-----------------------------------\n"); printf("total: %d bytes\n", total); diff --git a/gcc/objc/thr-decosf1.c b/gcc/objc/thr-decosf1.c index 0c611b89afb..0f7063b7e83 100644 --- a/gcc/objc/thr-decosf1.c +++ b/gcc/objc/thr-decosf1.c @@ -28,7 +28,7 @@ Boston, MA 02111-1307, USA. */ #include #include "runtime.h" -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static pthread_key_t _objc_thread_storage; /* Backend initialization functions */ @@ -143,7 +143,7 @@ __objc_thread_id(void) { pthread_t self = pthread_self(); - return (objc_thread_t) pthread_getuniqe_np (&self); + return (objc_thread_t) pthread_getunique_np (&self); } /* Sets the thread's local storage pointer. */ diff --git a/gcc/objc/thr-irix.c b/gcc/objc/thr-irix.c index 42032542b80..528a3e3a434 100644 --- a/gcc/objc/thr-irix.c +++ b/gcc/objc/thr-irix.c @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ #include #include "runtime.h" -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static void * __objc_shared_arena_handle = NULL; /* Backend initialization functions */ diff --git a/gcc/objc/thr-mach.c b/gcc/objc/thr-mach.c index 6f54ada6108..44af0c1e286 100644 --- a/gcc/objc/thr-mach.c +++ b/gcc/objc/thr-mach.c @@ -35,7 +35,7 @@ Boston, MA 02111-1307, USA. */ Obtain the maximum thread priority that can set for t. Under the mach threading model, it is possible for the developer to adjust the maximum priority downward only-- cannot be raised without superuser - priviledges. Once lowered, it cannot be raised. + privileges. Once lowered, it cannot be raised. */ static int __mach_get_max_thread_priority(cthread_t t, int *base) { @@ -148,7 +148,7 @@ __objc_thread_get_priority(void) int maxPriority; int sys_priority = 0; - int interactiveT, backgroundT, lowT; /* threasholds */ + int interactiveT, backgroundT, lowT; /* thresholds */ maxPriority = __mach_get_max_thread_priority(cT, &basePriority); diff --git a/gcc/objc/thr-os2.c b/gcc/objc/thr-os2.c index d54606052d0..a0d7d436613 100644 --- a/gcc/objc/thr-os2.c +++ b/gcc/objc/thr-os2.c @@ -82,7 +82,7 @@ __objc_thread_set_priority(int priority) ULONG sys_priority = 0; /* OBJC_THREAD_INTERACTIVE_PRIORITY -> PRTYC_FOREGROUNDSERVER - * OBJC_THREAD_BACKGROUND_PRIORITY -> PRTYC_REGULSR + * OBJC_THREAD_BACKGROUND_PRIORITY -> PRTYC_REGULAR * OBJC_THREAD_LOW_PRIORITY -> PRTYC_IDLETIME */ switch (priority) { diff --git a/gcc/objc/thr-posix.c b/gcc/objc/thr-posix.c index d6c97e1dbdd..5b40f711be8 100644 --- a/gcc/objc/thr-posix.c +++ b/gcc/objc/thr-posix.c @@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */ #include "runtime.h" #include -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static pthread_key_t _objc_thread_storage; /* Backend initialization functions */ @@ -129,41 +129,49 @@ __objc_thread_get_data(void) int __objc_mutex_allocate(objc_mutex_t mutex) { - if (pthread_mutex_init((pthread_mutex_t *)(&(mutex->backend)), NULL)) - return -1; - else - return 0; + mutex->backend = objc_malloc(sizeof(pthread_mutex_t)); + + if (pthread_mutex_init((pthread_mutex_t *)mutex->backend, NULL)) + { + objc_free(mutex->backend); + mutex->backend = NULL; + return -1; + } + + return 0; } /* Deallocate a mutex. */ int __objc_mutex_deallocate(objc_mutex_t mutex) { - if (pthread_mutex_destroy((pthread_mutex_t *)(&(mutex->backend)))) + if (pthread_mutex_destroy((pthread_mutex_t *)mutex->backend)) return -1; - else - return 0; + + objc_free(mutex->backend); + mutex->backend = NULL; + return 0; } /* Grab a lock on a mutex. */ int __objc_mutex_lock(objc_mutex_t mutex) { - return pthread_mutex_lock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_lock((pthread_mutex_t *)mutex->backend); } /* Try to grab a lock on a mutex. */ int __objc_mutex_trylock(objc_mutex_t mutex) { - return pthread_mutex_trylock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_trylock((pthread_mutex_t *)mutex->backend); } /* Unlock the mutex */ int __objc_mutex_unlock(objc_mutex_t mutex) { - return pthread_mutex_unlock((pthread_mutex_t *)(&(mutex->backend))); + return pthread_mutex_unlock((pthread_mutex_t *)mutex->backend); } /* Backend condition mutex functions */ @@ -172,39 +180,50 @@ __objc_mutex_unlock(objc_mutex_t mutex) int __objc_condition_allocate(objc_condition_t condition) { - if (pthread_cond_init((pthread_cond_t *)(&(condition->backend)), NULL)) - return -1; - else - return 0; + condition->backend = objc_malloc(sizeof(pthread_cond_t)); + + if (pthread_cond_init((pthread_cond_t *)condition->backend, NULL)) + { + objc_free(condition->backend); + condition->backend = NULL; + return -1; + } + + return 0; } /* Deallocate a condition. */ int __objc_condition_deallocate(objc_condition_t condition) { - return pthread_cond_destroy((pthread_cond_t *)(&(condition->backend))); + if (pthread_cond_destroy((pthread_cond_t *)condition->backend)) + return -1; + + objc_free(condition->backend); + condition->backend = NULL; + return 0; } /* Wait on the condition */ int __objc_condition_wait(objc_condition_t condition, objc_mutex_t mutex) { - return pthread_cond_wait((pthread_cond_t *)(&(condition->backend)), - (pthread_mutex_t *)(&(mutex->backend))); + return pthread_cond_wait((pthread_cond_t *)condition->backend, + (pthread_mutex_t *)mutex->backend); } /* Wake up all threads waiting on this condition. */ int __objc_condition_broadcast(objc_condition_t condition) { - return pthread_cond_broadcast((pthread_cond_t *)(&(condition->backend))); + return pthread_cond_broadcast((pthread_cond_t *)condition->backend); } /* Wake up one thread waiting on this condition. */ int __objc_condition_signal(objc_condition_t condition) { - return pthread_cond_signal((pthread_cond_t *)(&(condition->backend))); + return pthread_cond_signal((pthread_cond_t *)condition->backend); } /* End of File */ diff --git a/gcc/objc/thr-pthreads.c b/gcc/objc/thr-pthreads.c index 4c4c2450aac..2efdd15bc54 100644 --- a/gcc/objc/thr-pthreads.c +++ b/gcc/objc/thr-pthreads.c @@ -1,4 +1,4 @@ -/* GNU Objective C Runtime Thread Implementation for PCThreads under Linux. +/* GNU Objective C Runtime Thread Implementation for PCThreads under GNU/Linux. Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Scott Christley Condition functions added by: Mircea Oancea @@ -29,7 +29,7 @@ Boston, MA 02111-1307, USA. */ #include #include "runtime.h" -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static pthread_key_t _objc_thread_storage; /* Backend initialization functions */ diff --git a/gcc/objc/thr-solaris.c b/gcc/objc/thr-solaris.c index 0b5227a8e89..90351b43cf6 100644 --- a/gcc/objc/thr-solaris.c +++ b/gcc/objc/thr-solaris.c @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ #include #include -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static thread_key_t __objc_thread_data_key; /* Backend initialization functions */ diff --git a/gcc/objc/thr-win32.c b/gcc/objc/thr-win32.c index 159e3e37665..8570ffd997e 100644 --- a/gcc/objc/thr-win32.c +++ b/gcc/objc/thr-win32.c @@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */ #endif #include -/* Key structure for maintiain thread specific storage */ +/* Key structure for maintaining thread specific storage */ static DWORD __objc_data_tls = (DWORD)-1; /* Backend initialization functions */ diff --git a/gcc/obstack.c b/gcc/obstack.c index 59b2eeea17e..fb66d0c95cb 100644 --- a/gcc/obstack.c +++ b/gcc/obstack.c @@ -1,19 +1,29 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + Copyright (C) 1988,89,90,91,92,93,94,96,97 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. + the C library, however. The master source lives in /gd/gnu/lib. -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. + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@prep.ai.mit.edu. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + 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 02111-1307, + USA. */ + +#ifdef HAVE_CONFIG_H +#include +#endif #include "obstack.h" @@ -67,6 +77,28 @@ union fooround {long x; double d;}; #define COPYING_UNIT int #endif + +/* The functions allocating more room by calling `obstack_chunk_alloc' + jump to the handler pointed to by `obstack_alloc_failed_handler'. + This variable by default points to the internal function + `print_and_abort'. */ +#if defined (__STDC__) && __STDC__ +static void print_and_abort (void); +void (*obstack_alloc_failed_handler) (void) = print_and_abort; +#else +static void print_and_abort (); +void (*obstack_alloc_failed_handler) () = print_and_abort; +#endif + +/* Exit value used when `print_and_abort' is used. */ +#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H +#include +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif +int obstack_exit_failure = EXIT_FAILURE; + /* The non-GNU-C macros copy the obstack into this global variable to avoid multiple evaluation. */ @@ -78,6 +110,20 @@ struct obstack *_obstack; For free, do not use ?:, since some compilers, like the MIPS compilers, do not allow (expr) ? void : void. */ +#if defined (__STDC__) && __STDC__ +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ + } while (0) +#else #define CALL_CHUNKFUN(h, size) \ (((h) -> use_extra_arg) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ @@ -90,6 +136,7 @@ struct obstack *_obstack; else \ (*(void (*) ()) (h)->freefun) ((old_chunk)); \ } while (0) +#endif /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). @@ -106,13 +153,18 @@ _obstack_begin (h, size, alignment, chunkfun, freefun) struct obstack *h; int size; int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (long); + void (*freefun) (void *); +#else POINTER (*chunkfun) (); void (*freefun) (); +#endif { register struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) - alignment = DEFAULT_ALIGNMENT; + alignment = (int) DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { @@ -130,25 +182,27 @@ _obstack_begin (h, size, alignment, chunkfun, freefun) size = 4096 - extra; } +#if defined (__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->freefun = freefun; +#endif h->chunk_size = size; h->alignment_mask = alignment - 1; h->use_extra_arg = 0; chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) - { - h->alloc_failed = 1; - return 0; - } - h->alloc_failed = 0; + (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; + h->alloc_failed = 0; return 1; } @@ -157,14 +211,19 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) struct obstack *h; int size; int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (POINTER, long); + void (*freefun) (POINTER, POINTER); +#else POINTER (*chunkfun) (); void (*freefun) (); +#endif POINTER arg; { register struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) - alignment = DEFAULT_ALIGNMENT; + alignment = (int) DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { @@ -182,8 +241,13 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) size = 4096 - extra; } +#if defined(__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->freefun = freefun; +#endif h->chunk_size = size; h->alignment_mask = alignment - 1; h->extra_arg = arg; @@ -191,17 +255,14 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) - { - h->alloc_failed = 1; - return 0; - } - h->alloc_failed = 0; + (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; + h->alloc_failed = 0; return 1; } @@ -219,9 +280,9 @@ _obstack_newchunk (h, length) register struct _obstack_chunk *old_chunk = h->chunk; register struct _obstack_chunk *new_chunk; register long new_size; - register int obj_size = h->next_free - h->object_base; - register int i; - int already; + register long obj_size = h->next_free - h->object_base; + register long i; + long already; /* Compute size for new chunk. */ new_size = (obj_size + length) + (obj_size >> 3) + 100; @@ -231,11 +292,7 @@ _obstack_newchunk (h, length) /* Allocate and initialize the new chunk. */ new_chunk = CALL_CHUNKFUN (h, new_size); if (!new_chunk) - { - h->alloc_failed = 1; - return; - } - h->alloc_failed = 0; + (*obstack_alloc_failed_handler) (); h->chunk = new_chunk; new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; @@ -379,6 +436,39 @@ obstack_free (h, obj) abort (); } +int +_obstack_memory_used (h) + struct obstack *h; +{ + register struct _obstack_chunk* lp; + register int nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +/* Define the error handler. */ +#ifndef _ +# ifdef HAVE_LIBINTL_H +# include +# ifndef _ +# define _(Str) gettext (Str) +# endif +# else +# define _(Str) (Str) +# endif +#endif + +static void +print_and_abort () +{ + fputs (_("memory exhausted\n"), stderr); + exit (obstack_exit_failure); +} + #if 0 /* These are now turned off because the applications do not use it and it uses bcopy via obstack_grow, which causes trouble on sysV. */ @@ -417,6 +507,13 @@ int (obstack_room) (obstack) return obstack_room (obstack); } +int (obstack_make_room) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_make_room (obstack, length); +} + void (obstack_grow) (obstack, pointer, length) struct obstack *obstack; POINTER pointer; diff --git a/gcc/obstack.h b/gcc/obstack.h index 5ad3e5ef12b..3edd3f4285e 100644 --- a/gcc/obstack.h +++ b/gcc/obstack.h @@ -1,19 +1,25 @@ /* obstack.h - object stack macros Copyright (C) 1988,89,90,91,92,93,94,96,97 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. + the C library, however. The master source lives in /gd/gnu/lib. -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. + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to bug-glibc@prep.ai.mit.edu. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + 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 02111-1307, + USA. */ /* Summary: @@ -100,8 +106,12 @@ Summary: /* Don't do the contents of this file more than once. */ -#ifndef __OBSTACK_H__ -#define __OBSTACK_H__ +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifdef __cplusplus +extern "C" { +#endif /* We use subtraction of (char *) 0 instead of casting to int because on word-addressable machines a simple cast to int @@ -138,6 +148,17 @@ Summary: #define PTR_INT_TYPE long #endif +#if defined (_LIBC) || defined (HAVE_STRING_H) +#include +#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +#else +#ifdef memcpy +#define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +#else +#define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N)) +#endif +#endif + struct _obstack_chunk /* Lives at front of each chunk. */ { char *limit; /* 1 past end of this chunk */ @@ -171,7 +192,9 @@ struct obstack /* control current object in current chunk */ chunk contains a zero-length object. This prevents freeing the chunk if we allocate a bigger chunk to replace it. */ - unsigned alloc_failed:1; /* chunk alloc func returned 0 */ + unsigned alloc_failed:1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ }; /* Declare the external functions we use; they are in obstack.c. */ @@ -184,11 +207,13 @@ extern int _obstack_begin (struct obstack *, int, int, extern int _obstack_begin_1 (struct obstack *, int, int, void *(*) (void *, long), void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); #else extern void _obstack_newchunk (); extern void _obstack_free (); extern int _obstack_begin (); extern int _obstack_begin_1 (); +extern int _obstack_memory_used (); #endif #if defined (__STDC__) && __STDC__ @@ -219,6 +244,7 @@ void * obstack_finish (struct obstack *obstack); int obstack_object_size (struct obstack *obstack); int obstack_room (struct obstack *obstack); +void obstack_make_room (struct obstack *obstack, int size); void obstack_1grow_fast (struct obstack *obstack, int data_char); void obstack_ptr_grow_fast (struct obstack *obstack, void *data); void obstack_int_grow_fast (struct obstack *obstack, int data); @@ -228,17 +254,30 @@ void * obstack_base (struct obstack *obstack); void * obstack_next_free (struct obstack *obstack); int obstack_alignment_mask (struct obstack *obstack); int obstack_chunk_size (struct obstack *obstack); +int obstack_memory_used (struct obstack *obstack); #endif /* __STDC__ */ /* Non-ANSI C cannot really support alternative functions for these macros, so we do not declare them. */ + +/* Error handler called when `obstack_chunk_alloc' failed to allocate + more memory. This can be set to a user defined function. The + default action is to print a message and abort. */ +#if defined (__STDC__) && __STDC__ +extern void (*obstack_alloc_failed_handler) (void); +#else +extern void (*obstack_alloc_failed_handler) (); +#endif + +/* Exit value used when `print_and_abort' is used. */ +extern int obstack_exit_failure; /* Pointer to beginning of object being allocated or to be allocated next. Note that this might not be the final address of the object because a new chunk might be needed to hold the final size. */ -#define obstack_base(h) ((h)->alloc_failed ? 0 : (h)->object_base) +#define obstack_base(h) ((h)->object_base) /* Size for allocating ordinary chunks. */ @@ -246,7 +285,7 @@ int obstack_chunk_size (struct obstack *obstack); /* Pointer to next byte not yet allocated in current chunk. */ -#define obstack_next_free(h) ((h)->alloc_failed ? 0 : (h)->next_free) +#define obstack_next_free(h) ((h)->next_free) /* Mask specifying low bits that should be clear in address of an object. */ @@ -270,13 +309,14 @@ int obstack_chunk_size (struct obstack *obstack); #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ - (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun), (arg)) + (void *(*) (void *, long)) (chunkfun), \ + (void (*) (void *, void *)) (freefun), (arg)) #define obstack_chunkfun(h, newchunkfun) \ - ((h) -> chunkfun = (struct _obstack_chunk *(*)(long)) (newchunkfun)) + ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) #define obstack_freefun(h, newfreefun) \ - ((h) -> freefun = (void (*)(void *)) (newfreefun)) + ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) #else @@ -307,6 +347,8 @@ int obstack_chunk_size (struct obstack *obstack); #define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar) #define obstack_blank_fast(h,n) ((h)->next_free += (n)) + +#define obstack_memory_used(h) _obstack_memory_used (h) #if defined (__GNUC__) && defined (__STDC__) && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and @@ -324,7 +366,6 @@ int obstack_chunk_size (struct obstack *obstack); #define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ - __o->alloc_failed ? 0 : \ (unsigned) (__o->next_free - __o->object_base); }) #define obstack_room(OBSTACK) \ @@ -332,6 +373,14 @@ int obstack_chunk_size (struct obstack *obstack); ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); }) +#define obstack_make_room(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + #define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ @@ -343,11 +392,8 @@ __extension__ \ int __len = (length); \ if (__o->next_free + __len > __o->chunk_limit) \ _obstack_newchunk (__o, __len); \ - if (!__o->alloc_failed) \ - { \ - bcopy ((char *) (where), __o->next_free, __len); \ - __o->next_free += __len; \ - } \ + _obstack_memcpy (__o->next_free, (char *) (where), __len); \ + __o->next_free += __len; \ (void) 0; }) #define obstack_grow0(OBSTACK,where,length) \ @@ -356,12 +402,9 @@ __extension__ \ int __len = (length); \ if (__o->next_free + __len + 1 > __o->chunk_limit) \ _obstack_newchunk (__o, __len + 1); \ - if (!__o->alloc_failed) \ - { \ - bcopy ((char *) (where), __o->next_free, __len); \ - __o->next_free += __len; \ - *(__o->next_free)++ = 0; \ - } \ + _obstack_memcpy (__o->next_free, (char *) (where), __len); \ + __o->next_free += __len; \ + *(__o->next_free)++ = 0; \ (void) 0; }) #define obstack_1grow(OBSTACK,datum) \ @@ -369,8 +412,7 @@ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + 1 > __o->chunk_limit) \ _obstack_newchunk (__o, 1); \ - if (!__o->alloc_failed) \ - *(__o->next_free)++ = (datum); \ + *(__o->next_free)++ = (datum); \ (void) 0; }) /* These assume that the obstack alignment is good enough for pointers or ints, @@ -382,8 +424,7 @@ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (void *)); \ - if (!__o->alloc_failed) \ - *((void **)__o->next_free)++ = ((void *)datum); \ + *((void **)__o->next_free)++ = ((void *)datum); \ (void) 0; }) #define obstack_int_grow(OBSTACK,datum) \ @@ -391,8 +432,7 @@ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (__o->next_free + sizeof (int) > __o->chunk_limit) \ _obstack_newchunk (__o, sizeof (int)); \ - if (!__o->alloc_failed) \ - *((int *)__o->next_free)++ = ((int)datum); \ + *((int *)__o->next_free)++ = ((int)datum); \ (void) 0; }) #define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) @@ -404,8 +444,7 @@ __extension__ \ int __len = (length); \ if (__o->chunk_limit - __o->next_free < __len) \ _obstack_newchunk (__o, __len); \ - if (!__o->alloc_failed) \ - __o->next_free += __len; \ + __o->next_free += __len; \ (void) 0; }) #define obstack_alloc(OBSTACK,length) \ @@ -432,21 +471,16 @@ __extension__ \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *value; \ - if (__o1->alloc_failed) \ - value = 0; \ - else \ - { \ - value = (void *) __o1->object_base; \ - if (__o1->next_free == value) \ - __o1->maybe_empty_object = 1; \ - __o1->next_free \ - = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ - & ~ (__o1->alignment_mask)); \ - if (__o1->next_free - (char *)__o1->chunk \ - > __o1->chunk_limit - (char *)__o1->chunk) \ - __o1->next_free = __o1->chunk_limit; \ - __o1->object_base = __o1->next_free; \ - } \ + value = (void *) __o1->object_base; \ + if (__o1->next_free == value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ + & ~ (__o1->alignment_mask)); \ + if (__o1->next_free - (char *)__o1->chunk \ + > __o1->chunk_limit - (char *)__o1->chunk) \ + __o1->next_free = __o1->chunk_limit; \ + __o1->object_base = __o1->next_free; \ value; }) #define obstack_free(OBSTACK, OBJ) \ @@ -460,7 +494,7 @@ __extension__ \ #else /* not __GNUC__ or not __STDC__ */ #define obstack_object_size(h) \ - (unsigned) ((h)->alloc_failed ? 0 : (h)->next_free - (h)->object_base) + (unsigned) ((h)->next_free - (h)->object_base) #define obstack_room(h) \ (unsigned) ((h)->chunk_limit - (h)->next_free) @@ -474,40 +508,40 @@ __extension__ \ Casting the third operand to void was tried before, but some compilers won't accept it. */ +#define obstack_make_room(h,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) + #define obstack_grow(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - (bcopy ((char *) (where), (h)->next_free, (h)->temp), \ - (h)->next_free += (h)->temp))) + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ + (h)->next_free += (h)->temp) #define obstack_grow0(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - (bcopy ((char *) (where), (h)->next_free, (h)->temp), \ + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ (h)->next_free += (h)->temp, \ - *((h)->next_free)++ = 0))) + *((h)->next_free)++ = 0) #define obstack_1grow(h,datum) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - (*((h)->next_free)++ = (datum)))) + (*((h)->next_free)++ = (datum))) #define obstack_ptr_grow(h,datum) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum)))) + (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) #define obstack_int_grow(h,datum) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum)))) + (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) #define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) #define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) @@ -516,8 +550,7 @@ __extension__ \ ( (h)->temp = (length), \ (((h)->chunk_limit - (h)->next_free < (h)->temp) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ - ((h)->alloc_failed ? 0 : \ - ((h)->next_free += (h)->temp))) + ((h)->next_free += (h)->temp)) #define obstack_alloc(h,length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) @@ -529,19 +562,18 @@ __extension__ \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) #define obstack_finish(h) \ -( (h)->alloc_failed ? 0 : \ - (((h)->next_free == (h)->object_base \ +( ((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ : 0), \ (h)->temp = __PTR_TO_INT ((h)->object_base), \ (h)->next_free \ = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ & ~ ((h)->alignment_mask)), \ - (((h)->next_free - (char *) (h)->chunk \ + (((h)->next_free - (char *) (h)->chunk \ > (h)->chunk_limit - (char *) (h)->chunk) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ - __INT_TO_PTR ((h)->temp))) + __INT_TO_PTR ((h)->temp)) #if defined (__STDC__) && __STDC__ #define obstack_free(h,obj) \ @@ -561,4 +593,8 @@ __extension__ \ #endif /* not __GNUC__ or not __STDC__ */ -#endif /* not __OBSTACK_H__ */ +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* obstack.h */ diff --git a/gcc/pexecute.c b/gcc/pexecute.c index 39fe9c7d5db..9f80cb05b39 100644 --- a/gcc/pexecute.c +++ b/gcc/pexecute.c @@ -223,6 +223,7 @@ pwait (pid, status, flags) #if defined (_WIN32) #include +#include extern int _spawnv (); extern int _spawnvp (); @@ -301,9 +302,23 @@ pwait (pid, status, flags) int *status; int flags; { + int termstat; + + pid = cwait (&termstat, pid, WAIT_CHILD); + /* ??? Here's an opportunity to canonicalize the values in STATUS. Needed? */ - return _cwait (status, pid, WAIT_CHILD); + + /* cwait returns the child process exit code in termstat. + A value of 3 indicates that the child caught a signal, but not + which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we + report SIGABRT. */ + if (termstat == 3) + *status = SIGABRT; + else + *status = (((termstat) & 0xff) << 8); + + return pid; } #endif /* _WIN32 */ diff --git a/gcc/prefix.c b/gcc/prefix.c index 3ffda1ab528..bf501c74391 100644 --- a/gcc/prefix.c +++ b/gcc/prefix.c @@ -65,7 +65,11 @@ Boston, MA 02111-1307, USA. */ #include "config.h" #include "gansidecl.h" -#include "stdarg.h" +#ifdef __STDC__ +#include +#else +#include +#endif #ifdef _WIN32 #include diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index bb4ee0d631a..60405bd8a81 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -232,10 +232,15 @@ print_inline_rtx (outf, x, ind) FILE *outf; rtx x; { + int oldsaw = sawclose; + int oldindent = indent; + sawclose = 0; indent = ind; outfile = outf; print_rtx (x); + sawclose = oldsaw; + indent = oldindent; } /* Call this function from the debugger to see what X looks like. */ diff --git a/gcc/profile.c b/gcc/profile.c index 03bc105a795..e82cd79ee5b 100644 --- a/gcc/profile.c +++ b/gcc/profile.c @@ -427,7 +427,7 @@ output_gcov_string (string, delimiter) the flow graph that are needed to reconstruct the dynamic behavior of the flow graph. - When FLAG_BRANCH_PROBABILITIES is nonzero, this function reads auxilliary + When FLAG_BRANCH_PROBABILITIES is nonzero, this function reads auxiliary information from a data file containing arc count information from previous executions of the function being compiled. In this case, the flow graph is annotated with actual execution counts, which are later propagated into the @@ -861,7 +861,7 @@ branch_prob (f, dump_file) Note that the spanning tree is considered undirected, so that as many must-split arcs as possible can be put on it. - Fallthough arcs which are crowded should not be chosen on the first + Fallthrough arcs which are crowded should not be chosen on the first pass, since they do not require creating a new basic block. These arcs will have fall_through set. */ diff --git a/gcc/protoize.c b/gcc/protoize.c index bd4ac02bf56..18f4ce528a1 100644 --- a/gcc/protoize.c +++ b/gcc/protoize.c @@ -74,6 +74,18 @@ Boston, MA 02111-1307, USA. */ #endif #include +#ifdef HAVE_STDLIB_H +#include +#endif + +#ifdef HAVE_STRING_H +#include +#else +#ifdef HAVE_STRINGS_H +#include +#endif +#endif + #include "gansidecl.h" /* Include getopt.h for the sake of getopt_long. @@ -173,18 +185,12 @@ typedef char * const_pointer_type; /* Declaring stat or __flsbuf with a prototype causes conflicts with system headers on some systems. */ -#ifndef abort -typedef void voidfn (); -extern VOLATILE voidfn abort; -#endif extern int creat (); #if 0 /* These conflict with stdio.h on some systems. */ extern int fprintf (FILE *, const char *, ...); extern int printf (const char *, ...); extern int open (const char *, int, ...); #endif /* 0 */ -extern void exit (); -extern void free (); extern int read (); extern int write (); extern int close (); @@ -212,7 +218,9 @@ extern size_t strlen () #endif /* !defined (POSIX) */ +#ifdef NEED_DECLARATION_RINDEX extern char *rindex (); +#endif /* Look for these where the `const' qualifier is intentionally cast aside. */ @@ -300,39 +308,41 @@ static const int hash_mask = (HASH_TABLE_SIZE - 1); #define LOCAL_INCLUDE_DIR "/usr/local/include" #endif -struct default_include { const char *fname; int x1, x2; } include_defaults[] +struct default_include { const char *fname; + const char *component; + int x1, x2; } include_defaults[] #ifdef INCLUDE_DEFAULTS = INCLUDE_DEFAULTS; #else = { /* Pick up GNU C++ specific include files. */ - { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, + { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 }, #ifdef CROSS_COMPILE /* This is the dir for fixincludes. Put it just before the files that we fix. */ - { GCC_INCLUDE_DIR, 0, 0 }, + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, /* For cross-compilation, this dir name is generated automatically in Makefile.in. */ - { CROSS_INCLUDE_DIR, 0, 0 }, + { CROSS_INCLUDE_DIR, 0, 0, 0 }, /* This is another place that the target system's headers might be. */ - { TOOL_INCLUDE_DIR, 0, 0 }, + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 }, #else /* not CROSS_COMPILE */ /* This should be /use/local/include and should come before the fixincludes-fixed header files. */ - { LOCAL_INCLUDE_DIR, 0, 1 }, + { LOCAL_INCLUDE_DIR, 0, 0, 1 }, /* This is here ahead of GCC_INCLUDE_DIR because assert.h goes here. Likewise, behind LOCAL_INCLUDE_DIR, where glibc puts its assert.h. */ - { TOOL_INCLUDE_DIR, 0, 0 }, + { TOOL_INCLUDE_DIR, "BINUTILS", 0, 0 }, /* This is the dir for fixincludes. Put it just before the files that we fix. */ - { GCC_INCLUDE_DIR, 0, 0 }, + { GCC_INCLUDE_DIR, "GCC", 0, 0 }, /* Some systems have an extra dir of include files. */ #ifdef SYSTEM_INCLUDE_DIR - { SYSTEM_INCLUDE_DIR, 0, 0 }, + { SYSTEM_INCLUDE_DIR, 0, 0, 0 }, #endif - { STANDARD_INCLUDE_DIR, 0, 0}, + { STANDARD_INCLUDE_DIR, 0, 0, 0}, #endif /* not CROSS_COMPILE */ - { 0, 0, 0} + { 0, 0, 0, 0} }; #endif /* no INCLUDE_DEFAULTS */ diff --git a/gcc/real.h b/gcc/real.h index 43a65d2cff0..d51c9e1b460 100644 --- a/gcc/real.h +++ b/gcc/real.h @@ -285,6 +285,13 @@ do { REAL_VALUE_TYPE in = (IN); /* Make sure it's not in a register. */\ #define REAL_VALUE_TO_TARGET_LONG_DOUBLE(a, b) REAL_VALUE_TO_TARGET_DOUBLE (a, b) #endif +/* Compare two floating-point objects for bitwise identity. + This is not the same as comparing for equality on IEEE hosts: + -0.0 equals 0.0 but they are not identical, and conversely + two NaNs might be identical but they cannot be equal. */ +#define REAL_VALUES_IDENTICAL(x, y) \ + (!bcmp ((char *) &(x), (char *) &(y), sizeof (REAL_VALUE_TYPE))) + /* Compare two floating-point values for equality. */ #ifndef REAL_VALUES_EQUAL #define REAL_VALUES_EQUAL(x, y) ((x) == (y)) diff --git a/gcc/recog.c b/gcc/recog.c index bfe9ded7d72..1af2dfcd03a 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -1682,7 +1682,7 @@ constrain_operands (insn_code_num, strict) earlyclobber[opno] = 0; /* A unary operator may be accepted by the predicate, but it - is irrelevant for matching contraints. */ + is irrelevant for matching constraints. */ if (GET_RTX_CLASS (GET_CODE (op)) == '1') op = XEXP (op, 0); @@ -1991,7 +1991,7 @@ constrain_operands (insn_code_num, strict) } /* Return 1 iff OPERAND (assumed to be a REG rtx) - is a hard reg in class CLASS when its regno is offsetted by OFFSET + is a hard reg in class CLASS when its regno is offset by OFFSET and changed to mode MODE. If REG occupies multiple hard regs, all of them must be in CLASS. */ diff --git a/gcc/regclass.c b/gcc/regclass.c index b93f5717ea2..e307e03ff21 100644 --- a/gcc/regclass.c +++ b/gcc/regclass.c @@ -1541,6 +1541,25 @@ record_address_regs (x, class, scale) else if (code1 == SYMBOL_REF || code1 == CONST || code1 == LABEL_REF) record_address_regs (arg0, INDEX_REG_CLASS, scale); + /* If both operands are registers but one is already a hard register + of index or base class, give the other the class that the hard + register is not. */ + + else if (code0 == REG && code1 == REG + && REGNO (arg0) < FIRST_PSEUDO_REGISTER + && (REG_OK_FOR_BASE_P (arg0) || REG_OK_FOR_INDEX_P (arg0))) + record_address_regs (arg1, + REG_OK_FOR_BASE_P (arg0) + ? INDEX_REG_CLASS : BASE_REG_CLASS, + scale); + else if (code0 == REG && code1 == REG + && REGNO (arg1) < FIRST_PSEUDO_REGISTER + && (REG_OK_FOR_BASE_P (arg1) || REG_OK_FOR_INDEX_P (arg1))) + record_address_regs (arg0, + REG_OK_FOR_BASE_P (arg1) + ? INDEX_REG_CLASS : BASE_REG_CLASS, + scale); + /* If one operand is known to be a pointer, it must be the base with the other operand the index. Likewise if the other operand is a MULT. */ diff --git a/gcc/reload.c b/gcc/reload.c index a3cf2d3d99a..1ae9dfd7f86 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -260,7 +260,7 @@ static int this_insn_is_asm; static int hard_regs_live_known; /* Indexed by hard reg number, - element is nonegative if hard reg has been spilled. + element is nonnegative if hard reg has been spilled. This vector is passed to `find_reloads' as an argument and is not changed here. */ static short *static_reload_reg_p; @@ -4935,7 +4935,7 @@ find_reloads_address_1 (mode, x, context, loc, opnum, type, ind_levels, insn) CALL_INSN - and it does not set CC0. But don't do this if we cannot directly address the memory location, since this will make it harder to - reuse address reloads, and increses register pressure. + reuse address reloads, and increases register pressure. Also don't do this if we can probably update x directly. */ rtx equiv = reg_equiv_mem[regno]; int icode = (int) add_optab->handlers[(int) Pmode].insn_code; @@ -5346,6 +5346,18 @@ find_replacement (loc) } } + /* If *LOC is a PLUS, MINUS, or MULT, see if a replacement is scheduled for + what's inside and make a new rtl if so. */ + if (GET_CODE (*loc) == PLUS || GET_CODE (*loc) == MINUS + || GET_CODE (*loc) == MULT) + { + rtx x = find_replacement (&XEXP (*loc, 0)); + rtx y = find_replacement (&XEXP (*loc, 1)); + + if (x != XEXP (*loc, 0) || y != XEXP (*loc, 1)) + return gen_rtx (GET_CODE (*loc), GET_MODE (*loc), x, y); + } + return *loc; } diff --git a/gcc/reload1.c b/gcc/reload1.c index 26306f96df2..182bb92abd5 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -673,7 +673,14 @@ reload (first, global, dumpfile) if (i > LAST_VIRTUAL_REGISTER) { if (GET_CODE (x) == MEM) - reg_equiv_memory_loc[i] = x; + { + /* If the operand is a PLUS, the MEM may be shared, + so make sure we have an unshared copy here. */ + if (GET_CODE (XEXP (x, 0)) == PLUS) + x = copy_rtx (x); + + reg_equiv_memory_loc[i] = x; + } else if (CONSTANT_P (x)) { if (LEGITIMATE_CONSTANT_P (x)) diff --git a/gcc/rtl.c b/gcc/rtl.c index 92a672a5bdc..b5602437c8c 100644 --- a/gcc/rtl.c +++ b/gcc/rtl.c @@ -183,6 +183,9 @@ char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_DEP_ANTI", "REG_DEP_OUTPUT", "REG_BR_PROB", "REG_EXEC_COUNT" }; +static void dump_and_abort PROTO((int, int, FILE *)); +static void read_name PROTO((char *, FILE *)); + /* Allocate an rtx vector of N elements. Store the length, and initialize all elements to zero. */ @@ -848,14 +851,3 @@ init_rtl () } } } - -#ifdef memset -gcc_memset (dest, value, len) - char *dest; - int value; - int len; -{ - while (len-- > 0) - *dest++ = value; -} -#endif /* memset */ diff --git a/gcc/rtl.def b/gcc/rtl.def index 247293dc69e..12c9c3b9be9 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -1,7 +1,7 @@ /* This file contains the definitions and documentation for the Register Transfer Expressions (rtx's) that make up the Register Transfer Language (rtl) used in the Back End of the GNU compiler. - Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 92, 94, 95, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -102,7 +102,7 @@ DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", 'x') '=' to indicate the operand is only written to. '+' to indicate the operand is both read and written to. - Each character in the string represents an allocatable class for an operand. + Each character in the string represents an allocable class for an operand. 'g' indicates the operand can be any valid class. 'i' indicates the operand can be immediate (in the instruction) data. 'r' indicates the operand can be in a register. @@ -257,7 +257,7 @@ DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", 'x') unit with no issue constraints. If only one operation can be executed a time and the unit is busy for the entire time, the 3rd operand should be specified as 1, the 6th operand - sould be specified as 0, and the 7th operand should not + should be specified as 0, and the 7th operand should not be specified. If this operand is specified, it is a list of attribute diff --git a/gcc/rtl.h b/gcc/rtl.h index 56c8b853a0c..f0484045004 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -691,7 +691,9 @@ extern char *xrealloc (); extern char *oballoc PROTO((int)); extern char *permalloc PROTO((int)); +#ifdef NEED_DECLARATION_FREE extern void free PROTO((void *)); +#endif extern rtx rtx_alloc PROTO((RTX_CODE)); extern rtvec rtvec_alloc PROTO((int)); extern rtx copy_rtx PROTO((rtx)); diff --git a/gcc/stmt.c b/gcc/stmt.c index b7a2c52f43c..30bd84c5c6b 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -1618,7 +1618,11 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) case '5': case '6': case '7': case '8': case '9': if (TREE_STRING_POINTER (TREE_PURPOSE (tail))[j] >= '0' + noutputs) - error ("matching constraint references invalid operand number"); + { + error + ("matching constraint references invalid operand number"); + return; + } /* ... fall through ... */ @@ -1751,7 +1755,7 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) continue; } - /* Ignore unknown register, error already signalled. */ + /* Ignore unknown register, error already signaled. */ continue; } @@ -3411,10 +3415,10 @@ expand_end_bindings (vars, mark_ends, dont_jump_in) emit_label (afterward); } - /* Don't allow jumping into a block that has cleanups or a stack level. */ + /* 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 - || thisblock->data.block.cleanups != 0) + || thisblock->data.block.stack_level != 0) { struct label_chain *chain; @@ -3425,7 +3429,7 @@ expand_end_bindings (vars, mark_ends, dont_jump_in) DECL_TOO_LATE (chain->label) = 1; /* If any goto without a fixup came to this label, that must be an error, because gotos without fixups - come from outside all saved stack-levels and all cleanups. */ + come from outside all saved stack-levels. */ if (TREE_ADDRESSABLE (chain->label)) error_with_decl (chain->label, "label `%s' used before containing binding contour"); @@ -3992,6 +3996,8 @@ expand_decl_cleanup (decl, cleanup) if (! using_eh_for_cleanups_p || expand_eh_region_start_tree (decl, cleanup)) TREE_ADDRESSABLE (t) = 1; + /* If that started a new EH region, we're in a new block. */ + thisblock = block_stack; if (cond_context) { @@ -4012,6 +4018,19 @@ expand_decl_cleanup (decl, cleanup) return 1; } +/* Like expand_decl_cleanup, but suppress generating an exception handler + to perform the cleanup. */ + +int +expand_decl_cleanup_no_eh (decl, cleanup) + tree decl, cleanup; +{ + int save_eh = using_eh_for_cleanups_p; + using_eh_for_cleanups_p = 0; + expand_decl_cleanup (decl, cleanup); + using_eh_for_cleanups_p = save_eh; +} + /* Arrange for the top element of the dynamic cleanup chain to be popped if we exit the current binding contour. DECL is the associated declaration, if any, otherwise NULL_TREE. If the @@ -4055,7 +4074,7 @@ expand_dcc_cleanup (decl) /* Arrange for the top element of the dynamic handler chain to be popped if we exit the current binding contour. DECL is the - assciated declaration, if any, otherwise NULL_TREE. If the current + associated declaration, if any, otherwise NULL_TREE. If the current contour is left via an exception, then __sjthrow will pop the top element off the dynamic handler chain. The code that avoids doing the action we push into the handler chain in the exceptional case @@ -4225,10 +4244,10 @@ expand_cleanups (list, dont_do, in_fixup, reachable) context, so that any cleanup actions we register with expand_decl_init will be properly conditionalized when those cleanup actions are later performed. Must be called before any - expression (tree) is expanded that is within a contidional context. */ + expression (tree) is expanded that is within a conditional context. */ void -start_cleanup_deferal () +start_cleanup_deferral () { /* block_stack can be NULL if we are inside the parameter list. It is OK to do nothing, because cleanups aren't possible here. */ @@ -4237,12 +4256,12 @@ start_cleanup_deferal () } /* Mark the end of a conditional region of code. Because cleanup - deferals may be nested, we may still be in a conditional region + deferrals may be nested, we may still be in a conditional region after we end the currently deferred cleanups, only after we end all deferred cleanups, are we back in unconditional code. */ void -end_cleanup_deferal () +end_cleanup_deferral () { /* block_stack can be NULL if we are inside the parameter list. It is OK to do nothing, because cleanups aren't possible here. */ @@ -4355,7 +4374,7 @@ expand_start_case (exit_flag, expr, type, printname) thiscase->data.case_stmt.start = get_last_insn (); - start_cleanup_deferal (); + start_cleanup_deferral (); } @@ -4408,7 +4427,7 @@ expand_start_case_dummy () thiscase->data.case_stmt.num_ranges = 0; case_stack = thiscase; nesting_stack = thiscase; - start_cleanup_deferal (); + start_cleanup_deferral (); } /* End a dummy case statement. */ @@ -4416,7 +4435,7 @@ expand_start_case_dummy () void expand_end_case_dummy () { - end_cleanup_deferal (); + end_cleanup_deferral (); POPSTACK (case_stack); } @@ -4523,11 +4542,14 @@ pushcase (value, converter, label, duplicate) return 0; } -/* Like pushcase but this case applies to all values - between VALUE1 and VALUE2 (inclusive). - The return value is the same as that of pushcase - but there is one additional error code: - 4 means the specified range was empty. */ +/* Like pushcase but this case applies to all values between VALUE1 and + VALUE2 (inclusive). If VALUE1 is NULL, the range starts at the lowest + value of the index type and ends at VALUE2. If VALUE2 is NULL, the range + starts at VALUE1 and ends at the highest value of the index type. + If both are NULL, this case applies to all values. + + The return value is the same as that of pushcase but there is one + additional error code: 4 means the specified range was empty. */ int pushcase_range (value1, value2, converter, label, duplicate) @@ -4545,10 +4567,6 @@ pushcase_range (value1, value2, converter, label, duplicate) if (! (case_stack && case_stack->data.case_stmt.start)) return 1; - /* Fail if the range is empty. */ - if (tree_int_cst_lt (value2, value1)) - return 4; - if (stack_block_stack && stack_block_stack->depth > case_stack->depth) return 5; @@ -4581,20 +4599,28 @@ pushcase_range (value1, value2, converter, label, duplicate) } case_stack->data.case_stmt.seenlabel = 1; - /* Convert VALUEs to type in which the comparisons are nominally done. */ - if (value1 == 0) /* Negative infinity. */ + /* Convert VALUEs to type in which the comparisons are nominally done + and replace any unspecified value with the corresponding bound. */ + if (value1 == 0) value1 = TYPE_MIN_VALUE (index_type); - value1 = (*converter) (nominal_type, value1); - - if (value2 == 0) /* Positive infinity. */ + if (value2 == 0) value2 = TYPE_MAX_VALUE (index_type); + + /* Fail if the range is empty. Do this before any conversion since + we want to allow out-of-range empty ranges. */ + if (tree_int_cst_lt (value2, value1)) + return 4; + + value1 = (*converter) (nominal_type, value1); value2 = (*converter) (nominal_type, value2); /* Fail if these values are out of range. */ - if (! int_fits_type_p (value1, index_type)) + if (TREE_CONSTANT_OVERFLOW (value1) + || ! int_fits_type_p (value1, index_type)) return 3; - if (! int_fits_type_p (value2, index_type)) + if (TREE_CONSTANT_OVERFLOW (value2) + || ! int_fits_type_p (value2, index_type)) return 3; return add_case_node (value1, value2, label, duplicate); @@ -5410,7 +5436,7 @@ expand_end_case (orig_index) if (count != 0) range = fold (build (MINUS_EXPR, index_type, maxval, minval)); - end_cleanup_deferal (); + end_cleanup_deferral (); if (count == 0) { @@ -5680,7 +5706,7 @@ expand_end_case (orig_index) thiscase->data.case_stmt.start); } else - end_cleanup_deferal (); + end_cleanup_deferral (); if (thiscase->exit_label) emit_label (thiscase->exit_label); diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 21a8f4404ae..a4698157cc7 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1190,7 +1190,7 @@ get_best_mode (bitsize, bitpos, align, largest_mode, volatilep) mode = GET_MODE_WIDER_MODE (mode)) { unit = GET_MODE_BITSIZE (mode); - if (bitpos / unit == (bitpos + bitsize - 1) / unit) + if ((bitpos % unit) + bitsize <= unit) break; } diff --git a/gcc/tm.texi b/gcc/tm.texi index 29774f015a2..ff3500f8855 100644 --- a/gcc/tm.texi +++ b/gcc/tm.texi @@ -1361,7 +1361,7 @@ One use of this macro is on machines where the highest numbered registers must always be saved and the save-multiple-registers instruction supports only sequences of consecutive registers. On such machines, define @code{REG_ALLOC_ORDER} to be an initializer that lists -the highest numbered allocatable register first. +the highest numbered allocable register first. @findex ORDER_REGS_FOR_LOCAL_ALLOC @item ORDER_REGS_FOR_LOCAL_ALLOC @@ -1465,14 +1465,14 @@ be used unless some pattern's constraint asks for one. @findex MODES_TIEABLE_P @item MODES_TIEABLE_P (@var{mode1}, @var{mode2}) A C expression that is nonzero if a value of mode -@var{mode1} is accessable in mode @var{mode2} without copying. +@var{mode1} is accessible in mode @var{mode2} without copying. If @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode1})} and @code{HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are always the same for any @var{r}, then @code{MODES_TIEABLE_P (@var{mode1}, @var{mode2})} should be nonzero. If they differ for any @var{r}, you should define this macro to return zero unless some other mechanism ensures the -accessability of the value in a narrower mode. +accessibility of the value in a narrower mode. You should define this macro to return nonzero in as many cases as possible since doing so will allow GNU CC to perform better register @@ -2011,16 +2011,19 @@ letters. @table @code @findex CONST_OK_FOR_LETTER_P @item CONST_OK_FOR_LETTER_P (@var{value}, @var{c}) -A C expression that defines the machine-dependent operand constraint letters -that specify particular ranges of integer values. If @var{c} is one -of those letters, the expression should check that @var{value}, an integer, -is in the appropriate range and return 1 if so, 0 otherwise. If @var{c} is -not one of those letters, the value should be 0 regardless of @var{value}. +A C expression that defines the machine-dependent operand constraint +letters (@samp{I}, @samp{J}, @samp{K}, @dots{} @samp{P}) that specify +particular ranges of integer values. If @var{c} is one of those +letters, the expression should check that @var{value}, an integer, is in +the appropriate range and return 1 if so, 0 otherwise. If @var{c} is +not one of those letters, the value should be 0 regardless of +@var{value}. @findex CONST_DOUBLE_OK_FOR_LETTER_P @item CONST_DOUBLE_OK_FOR_LETTER_P (@var{value}, @var{c}) A C expression that defines the machine-dependent operand constraint -letters that specify particular ranges of @code{const_double} values. +letters that specify particular ranges of @code{const_double} values +(@samp{G} or @samp{H}). If @var{c} is one of those letters, the expression should check that @var{value}, an RTX of code @code{const_double}, is in the appropriate @@ -2035,13 +2038,13 @@ between these kinds. @findex EXTRA_CONSTRAINT @item EXTRA_CONSTRAINT (@var{value}, @var{c}) A C expression that defines the optional machine-dependent constraint -letters that can be used to segregate specific types of operands, -usually memory references, for the target machine. Normally this macro -will not be defined. If it is required for a particular target machine, -it should return 1 if @var{value} corresponds to the operand type -represented by the constraint letter @var{c}. If @var{c} is not defined -as an extra constraint, the value returned should be 0 regardless of -@var{value}. +letters (@item @samp{Q}, @samp{R}, @samp{S}, @samp{T}, @samp{U}) that can +be used to segregate specific types of operands, usually memory +references, for the target machine. Normally this macro will not be +defined. If it is required for a particular target machine, it should +return 1 if @var{value} corresponds to the operand type represented by +the constraint letter @var{c}. If @var{c} is not defined as an extra +constraint, the value returned should be 0 regardless of @var{value}. For example, on the ROMP, load instructions cannot have their output in r0 if the memory reference contains a symbolic address. Constraint letter @@ -3330,7 +3333,7 @@ the function prologue. Normally, the profiling code comes after. A C statement or compound statement to output to @var{file} some assembler code to initialize basic-block profiling for the current object module. The global compile flag @code{profile_block_flag} -distingishes two profile modes. +distinguishes two profile modes. @table @code @findex __bb_init_func @@ -3390,7 +3393,7 @@ call __bb_init_trace_func A C statement or compound statement to output to @var{file} some assembler code to increment the count associated with the basic block number @var{blockno}. The global compile flag -@code{profile_block_flag} distingishes two profile modes. +@code{profile_block_flag} distinguishes two profile modes. @table @code @item profile_block_flag != 2 @@ -5466,6 +5469,18 @@ which defines (equates) the symbol @var{name} to have the value @var{value}. If SET_ASM_OP is defined, a default definition is provided which is correct for most systems. +@findex ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL +@item ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (@var{stream}, @var{symbol}, @var{high}, @var{low}) +A C statement to output to the stdio stream @var{stream} assembler code +which defines (equates) the symbol @var{symbol} to have a value equal to +the difference of the two symbols @var{high} and @var{low}, i.e. +@var{high} minus @var{low}. GNU CC guarantees that the symbols @var{high} +and @var{low} are already known by the assembler so that the difference +resolves into a constant. + +If SET_ASM_OP is defined, a default definition is provided which is +correct for most systems. + @findex ASM_OUTPUT_WEAK_ALIAS @item ASM_OUTPUT_WEAK_ALIAS (@var{stream}, @var{name}, @var{value}) A C statement to output to the stdio stream @var{stream} assembler code @@ -6834,6 +6849,11 @@ value in this case. Do not define this macro if it would always return @code{NIL}. On machines where this macro is defined, you will normally define it as the constant @code{SIGN_EXTEND} or @code{ZERO_EXTEND}. +@findex SHORT_IMMEDIATES_SIGN_EXTEND +@item SHORT_IMMEDIATES_SIGN_EXTEND +Define this macro if loading short immediate values into registers sign +extends. + @findex IMPLICIT_FIX_EXPR @item IMPLICIT_FIX_EXPR An alias for a tree code that should be used by default for conversion diff --git a/gcc/toplev.c b/gcc/toplev.c index 8291177d4eb..c09b2fe1f7b 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -36,21 +36,31 @@ Boston, MA 02111-1307, USA. */ #include #include -#ifndef _WIN32 -#ifdef USG #undef FLOAT +#ifdef HAVE_SYS_PARAM_H #include -/* This is for hpux. It is a real screw. They should change hpux. */ -#undef FLOAT -#include -#include /* Correct for hpux at least. Is it good on other USG? */ +#endif + +#undef FLOAT /* This is for hpux. They should change hpux. */ #undef FFS /* Some systems define this in param.h. */ + +#ifdef TIME_WITH_SYS_TIME +# include +# include #else -#ifndef VMS -#include -#include +# if HAVE_SYS_TIME_H +# include +# else +# include #endif #endif + +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif + +#ifdef HAVE_SYS_TIMES_H +# include #endif #include "input.h" @@ -541,7 +551,7 @@ int flag_pic; /* Nonzero means generate extra code for exception handling and enable exception handling. */ -int flag_exceptions = 1; +int flag_exceptions = 2; /* Nonzero means don't place uninitialized global data in common storage by default. */ @@ -781,6 +791,7 @@ char *lang_options[] = "-Wno-selector", "-Wprotocol", "-Wno-protocol", + "-print-objc-runtime-info", #include "options.h" 0 @@ -2303,10 +2314,32 @@ compile_file (name) input_file_stack->next = 0; input_file_stack->name = input_filename; + /* Gross. Gross. lang_init is (I think) the first callback into + the language front end, and is thus the first opportunity to + have the selected language override the default value for any + -f option. + + So the default value for flag_exceptions is 2 (uninitialized). + If we encounter -fno-exceptions or -fexceptions, then flag_exceptions + will be set to zero or one respectively. + + flag_exceptions can also be set by lang_init to something other + than the default "uninitialized" value of 2. + + After lang_init, if the value is still 2, then we default to + -fno-exceptions (value will be reset to zero). + + When our EH mechanism is low enough overhead that we can enable + it by default for languages other than C++, then all this braindamage + will go away. */ + /* Perform language-specific initialization. This may set main_input_filename. */ lang_init (); + if (flag_exceptions == 2) + flag_exceptions = 0; + /* If the input doesn't start with a #line, use the input name as the official input file name. */ if (main_input_filename == 0) @@ -2918,7 +2951,7 @@ rest_of_compilation (decl) if (DECL_SAVED_INSNS (decl) == 0) { - int inlineable = 0; + int inlinable = 0; char *lose; /* If requested, consider whether to make this function inline. */ @@ -2945,7 +2978,7 @@ rest_of_compilation (decl) 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. */ - inlineable = DECL_INLINE (decl) = 1; + inlinable = DECL_INLINE (decl) = 1; }); insns = get_insns (); @@ -2975,7 +3008,7 @@ rest_of_compilation (decl) finish compiling ourselves. Otherwise, wait until EOF. We have to do this because the purge_addressof transformation changes the DECL_RTL for many variables, which confuses integrate. */ - if (inlineable) + if (inlinable) { if (decl_function_context (decl)) purge_addressof (insns); @@ -3018,14 +3051,14 @@ rest_of_compilation (decl) } #endif TIMEVAR (integration_time, save_for_inline_nocopy (decl)); - RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlineable; + RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable; goto exit_rest_of_compilation; } } /* If we have to compile the function now, save its rtl and subdecls so that its compilation will not affect what others get. */ - if (inlineable || DECL_DEFER_OUTPUT (decl)) + if (inlinable || DECL_DEFER_OUTPUT (decl)) { #ifdef DWARF_DEBUGGING_INFO /* Generate the DWARF info for the "abstract" instance of @@ -3054,7 +3087,7 @@ rest_of_compilation (decl) saved_block_tree = DECL_INITIAL (decl); saved_arguments = DECL_ARGUMENTS (decl); TIMEVAR (integration_time, save_for_inline_copying (decl)); - RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlineable; + RTX_INTEGRATED_P (DECL_SAVED_INSNS (decl)) = inlinable; } /* If specified extern inline but we aren't inlining it, we are @@ -4098,7 +4131,16 @@ main (argc, argv, envp) while (*q && (*q >= '0' && *q <= '9')) q++; if (*p) - level = atoi (p); + { + level = atoi (p); + if (len > 1 && !strncmp (str, "gdwarf", len)) + { + error ("use -gdwarf -g%d for DWARF v1, level %d", + level, level); + if (level == 2) + error ("use -gdwarf-2 for DWARF v2"); + } + } else level = 2; /* default debugging info level */ if (*q || level > 3) diff --git a/gcc/tree.c b/gcc/tree.c index 9bc2d4bf329..0e3919d1c9c 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -47,6 +47,10 @@ Boston, MA 02111-1307, USA. */ #endif #include +#ifdef HAVE_STDLIB_H +#include +#endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free @@ -2597,10 +2601,10 @@ substitute_in_expr (exp, f, r) op0 = (TREE_CHAIN (exp) == 0 ? 0 : substitute_in_expr (TREE_CHAIN (exp), f, r)); op1 = substitute_in_expr (TREE_VALUE (exp), f, r); - if (op0 == TREE_CHAIN (exp) || op1 == TREE_VALUE (exp)) + if (op0 == TREE_CHAIN (exp) && op1 == TREE_VALUE (exp)) return exp; - return tree_cons (TREE_PURPOSE (exp), op0, op1); + return tree_cons (TREE_PURPOSE (exp), op1, op0); } abort (); @@ -3832,7 +3836,7 @@ simple_cst_equal (t1, t2) && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2); case REAL_CST: - return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2)); + return REAL_VALUES_IDENTICAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2)); case STRING_CST: return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2) @@ -4353,7 +4357,7 @@ get_unwidened (op, for_type) if (TREE_CODE (op) == COMPONENT_REF /* Since type_for_size always gives an integer type. */ && TREE_CODE (type) != REAL_TYPE - /* Don't crash if field not layed out yet. */ + /* Don't crash if field not laid out yet. */ && DECL_SIZE (TREE_OPERAND (op, 1)) != 0) { unsigned innerprec = TREE_INT_CST_LOW (DECL_SIZE (TREE_OPERAND (op, 1))); diff --git a/gcc/tree.def b/gcc/tree.def index e77adeb5c65..bd4b989e426 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -1,6 +1,6 @@ /* This file contains the definitions and documentation for the tree codes used in the GNU C compiler. - Copyright (C) 1987, 1988, 1993, 1995 Free Software Foundation, Inc. + Copyright (C) 1987, 1988, 1993, 1995, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -461,7 +461,7 @@ DEFTREECODE (METHOD_CALL_EXPR, "method_call_expr", "e", 4) call expand_start_target_temps/expand_end_target_temps, as needed. This differs from TRY_CATCH_EXPR in that operand 2 is always - evaluated when an exception isn't throw when cleanups are run. */ + evaluated when an exception isn't thrown when cleanups are run. */ DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", "e", 3) /* Specify a cleanup point. @@ -693,7 +693,7 @@ DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", "e", 2) DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", "e", 2) DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", "e", 2) -/* Evalute operand 1. If and only if an exception is thrown during +/* Evaluate operand 1. If and only if an exception is thrown during the evaluation of operand 1, evaluate operand 2. This differs from WITH_CLEANUP_EXPR, in that operand 2 is never diff --git a/gcc/tree.h b/gcc/tree.h index 43cc55a2c58..87d563213b8 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -752,7 +752,7 @@ struct tree_block the same way that the first union alternative would be passed. */ #define TYPE_TRANSPARENT_UNION(NODE) ((NODE)->type.transparent_union_flag) -/* Indicated that objects of this type should be layed out in as +/* Indicated that objects of this type should be laid out in as compact a way as possible. */ #define TYPE_PACKED(NODE) ((NODE)->type.packed_flag) @@ -1232,7 +1232,9 @@ extern char *oballoc PROTO((int)); extern char *permalloc PROTO((int)); extern char *savealloc PROTO((int)); extern char *expralloc PROTO((int)); +#ifdef NEED_DECLARATION_FREE extern void free PROTO((void *)); +#endif /* Lowest level primitive for allocating a node. The TREE_CODE is the only argument. Contents are initialized @@ -1711,8 +1713,8 @@ extern void expand_null_return PROTO((void)); extern void expand_return PROTO((tree)); extern void expand_start_bindings PROTO((int)); extern void expand_end_bindings PROTO((tree, int, int)); -extern void start_cleanup_deferal PROTO((void)); -extern void end_cleanup_deferal PROTO((void)); +extern void start_cleanup_deferral PROTO((void)); +extern void end_cleanup_deferral PROTO((void)); extern void mark_block_as_eh_region PROTO((void)); extern void mark_block_as_not_eh_region PROTO((void)); extern int is_eh_region PROTO((void)); @@ -1764,6 +1766,52 @@ extern void rrotate_double PROTO((HOST_WIDE_INT, HOST_WIDE_INT, extern int operand_equal_p PROTO((tree, tree, int)); extern tree invert_truthvalue PROTO((tree)); +/* Interface of the DWARF2 unwind info support. */ + +/* Decide whether we want to emit frame unwind information for the current + translation unit. */ + +extern int dwarf2out_do_frame PROTO((void)); + +/* Generate a new label for the CFI info to refer to. */ + +extern char *dwarf2out_cfi_label PROTO((void)); + +/* Entry point to update the canonical frame address (CFA). */ + +extern void dwarf2out_def_cfa PROTO((char *, unsigned, long)); + +/* Add the CFI for saving a register window. */ + +extern void dwarf2out_window_save PROTO((char *)); + +/* Add a CFI to update the running total of the size of arguments pushed + onto the stack. */ + +extern void dwarf2out_args_size PROTO((char *, long)); + +/* Entry point for saving a register to the stack. */ + +extern void dwarf2out_reg_save PROTO((char *, unsigned, long)); + +/* Entry point for saving the return address in the stack. */ + +extern void dwarf2out_return_save PROTO((char *, long)); + +/* Entry point for saving the return address in a register. */ + +extern void dwarf2out_return_reg PROTO((char *, unsigned)); + +/* Output a marker (i.e. a label) for the beginning of a function, before + the prologue. */ + +extern void dwarf2out_begin_prologue PROTO((void)); + +/* Output a marker (i.e. a label) for the absolute end of the generated + code for a function definition. */ + +extern void dwarf2out_end_epilogue PROTO((void)); + /* The language front-end must define these functions. */ /* Function of no arguments for initializing lexical scanning. */ diff --git a/gcc/unroll.c b/gcc/unroll.c index 3c23d6a674b..120e2741f3c 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -2138,6 +2138,7 @@ back_branch_in_range_p (insn, loop_start, loop_end) rtx loop_start, loop_end; { rtx p, q, target_insn; + rtx orig_loop_end = loop_end; /* Stop before we get to the backward branch at the end of the loop. */ loop_end = prev_nonnote_insn (loop_end); @@ -2149,8 +2150,10 @@ back_branch_in_range_p (insn, loop_start, loop_end) while (INSN_DELETED_P (insn)) insn = NEXT_INSN (insn); - /* Check for the case where insn is the last insn in the loop. */ - if (insn == loop_end) + /* Check for the case where insn is the last insn in the loop. Deal + with the case where INSN was a deleted loop test insn, in which case + it will now be the NOTE_LOOP_END. */ + if (insn == loop_end || insn == orig_loop_end) return 0; for (p = NEXT_INSN (insn); p != loop_end; p = NEXT_INSN (p)) diff --git a/gcc/varasm.c b/gcc/varasm.c index 1161837cec3..7f2970fa770 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -67,7 +67,7 @@ Boston, MA 02111-1307, USA. */ #else /* !NO_DOT_IN_LABEL */ #define CHKR_PREFIX "chkr." #endif -#else /* !NO_DOLLAR_IN_LABLE */ +#else /* !NO_DOLLAR_IN_LABEL */ #define CHKR_PREFIX "chkr$" #endif #define CHKR_PREFIX_SIZE (sizeof (CHKR_PREFIX) - 1) @@ -2245,8 +2245,7 @@ immed_real_const_1 (d, mode) /* Detect special cases. */ - /* Avoid REAL_VALUES_EQUAL here in order to distinguish minus zero. */ - if (!bcmp ((char *) &dconst0, (char *) &d, sizeof d)) + if (REAL_VALUES_IDENTICAL (dconst0, d)) return CONST0_RTX (mode); /* Check for NaN first, because some ports (specifically the i386) do not emit correct ieee-fp code by default, and thus will generate a core diff --git a/gcc/version.c b/gcc/version.c index 9a8c22d893b..0ae625c3479 100644 --- a/gcc/version.c +++ b/gcc/version.c @@ -1 +1 @@ -char *version_string = "testgcc-2.7.90 971021 experimental"; +char *version_string = "2.8.0"; diff --git a/gcc/vmsconfig.com b/gcc/vmsconfig.com index 088a4956887..f4ebf0e2d1f 100644 --- a/gcc/vmsconfig.com +++ b/gcc/vmsconfig.com @@ -89,28 +89,17 @@ $open ifile$ t.tmp $read ifile$ line $close ifile$ $delete t.tmp; -$ijk=f$locate("""",line)+1 -$line=f$extract(ijk,f$length(line)-ijk,line) -$ijk=f$locate("""",line) -$line=f$extract(0,ijk,line) -$ijk=f$locate("\n",line) -$line=f$extract(0,ijk,line) +$line=f$element(1,"""",line) !extract the portion between 1st & 2nd quotes +$! Format of 'line' is "name-nn.nn.nn[.nn] [date text]" (without the quotes). +$! We want "name-nn.nn.nn[.nn][-date]"; "-date" suffix is optional. +$id = f$element(1,"-",line) !strip "name-" prefix +$if id.eqs."-" then id = line !no prefix found? +$id = f$element(0," ",id) + "-" + f$element(1," ",id) !first two tokens +$id = id - "- " !in case 2nd token was empty +$if f$length(id).gt.15 then id = f$extract(0,15,id) !length limitation $! -$i=0 -$loop: -$elm=f$element(i," ",line) -$if elm.eqs."" then goto no_ident -$if (elm.les."9").and.(elm.ges."0") then goto write_ident -$i=i+1 -$goto loop -$! -$no_ident: -$elm="?.??" -$! -$! -$write_ident: $open/write ifile$ version.opt -$write ifile$ "ident="+""""+elm+"""" +$write ifile$ "ident="+""""+id+"""" $close ifile$ $purge version.opt $! @@ -173,10 +162,11 @@ PROCEDURE process_makefile( ) ! The contents are assumed to be a list of object files, and from this ! list a VMS linker options file is generated. ! - generate_option_file ("OBJS", "=", "independent.opt"); - generate_option_file ("LIB2FUNCS", "=", "libgcc2.list"); - generate_option_file ("BC_ALL", "=", "bc_all.list"); - generate_option_file ("BI_OBJ", "=", "bi_all.opt"); + generate_option_file ("OBJS", "=", "independent.opt"); + generate_option_file ("LIB2FUNCS", "=", "libgcc2.list"); + generate_option_file ("CXX_LIB2FUNCS", "=", "libgcc2-cxx.list"); + generate_option_file ("BC_ALL", "=", "bc_all.list"); + generate_option_file ("BI_OBJ", "=", "bi_all.opt"); ! ! Now change OBJS in the Makefile, so each language specific options file ! does not pick up all of the language independent files. @@ -212,7 +202,7 @@ PROCEDURE process_objc_lib( ) ERASE (makefile_buf); !discard top Makefile POSITION (END_OF (makefile_buf)); - READ_FILE ("[.objc]Makefile"); !load objc one + READ_FILE ("[.objc]Make-lang.in"); !load objc one MESSAGE ("objclib"); pat_replace (ASCII(9), " "); !change any to generate_option_file ("OBJC_O", "=", "objc-objs.opt"); @@ -239,6 +229,9 @@ PROCEDURE configure_makefile( ) COPY_TEXT ("out_object_file=aux-output.o"); SPLIT_LINE; ! aux-output.obj COPY_TEXT ("md_file=" + arch + ".md"); SPLIT_LINE; ! 'arch'/'arch'.md COPY_TEXT ("tm_file=tm.h"); SPLIT_LINE; ! 'arch'/tm-vms.h + pat_replace ("@" & + SPAN("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ#~0123456789") + & "@", ); ! strip `configure' dummy values ENDPROCEDURE; !configure_makefile !! @@ -288,6 +281,12 @@ PROCEDURE additional_compiler( cname, subdir ) pat_replace ("_OTH_SRCS)", "_OTH_SRCS_dummy_)"); ! Convert subdirectory references into VMS syntax. pat_replace ("$(srcdir)/" + subdir + "/", "[." + subdir + "]"); + + ! Temporary? hack for cp/Make-lang.in's mishandling of "input.c". + IF (subdir = 'cp') THEN + pat_replace ("[.cp]input.c", ); ! Discard this text. + ENDIF; + ! Add this name to compilers.list. POSITION (END_OF (complist_buf)); COPY_TEXT (cname); diff --git a/gcc/xcoffout.c b/gcc/xcoffout.c index 2f683025801..323eb069f5a 100644 --- a/gcc/xcoffout.c +++ b/gcc/xcoffout.c @@ -111,6 +111,9 @@ char *xcoff_lastfile; #define ASM_OUTPUT_LBE(FILE,LINENUM,BLOCKNUM) \ fprintf (FILE, "\t.eb\t%d\n", ABS_OR_RELATIVE_LINENO (LINENUM)) + +static void assign_type_number PROTO((tree, char *, int)); +static void xcoffout_block PROTO((tree, int, tree)); /* Support routines for XCOFF debugging info. */ -- 2.11.4.GIT